Creating new tapestry3 root subversion path for some minor tap3 work.

git-svn-id: https://svn.apache.org/repos/asf/tapestry/tapestry3/trunk@670589 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/3.0.4/.checkstyle b/3.0.4/.checkstyle
deleted file mode 100644
index 2e8139b..0000000
--- a/3.0.4/.checkstyle
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<fileset-config file-format-version="1.2.0" simple-config="true">
-    <fileset name="all" enabled="true" check-config-name="Sun Checks" local="false">
-        <file-match-pattern match-pattern="." include-pattern="true"/>
-    </fileset>
-</fileset-config>
diff --git a/3.0.4/.classpath b/3.0.4/.classpath
deleted file mode 100644
index 8842b6c..0000000
--- a/3.0.4/.classpath
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-	<classpathentry kind="lib" path="config"/>
-	<classpathentry kind="src" path="framework/src"/>
-	<classpathentry kind="src" path="contrib/src"/>
-	<classpathentry kind="src" path="junit/src"/>
-	<classpathentry kind="src" path="examples/VlibBeans/src"/>
-	<classpathentry kind="src" path="examples/Vlib/src"/>
-	<classpathentry kind="src" path="examples/Workbench/src"/>
-	<classpathentry kind="src" path="examples/wap/src"/>
-	<classpathentry exported="true" kind="lib" path="lib/ext/jakarta-oro-2.0.6.jar"/>
-	<classpathentry exported="true" kind="lib" path="lib/ext/commons-logging-1.0.2.jar"/>
-	<classpathentry exported="true" kind="lib" path="lib/ext/commons-lang-1.0.jar"/>
-	<classpathentry exported="true" kind="lib" path="lib/ext/bsf-2.3.0.jar"/>
-	<classpathentry kind="lib" path="ext-dist/junit.jar"/>
-	<classpathentry exported="true" kind="lib" path="lib/ext/commons-beanutils-1.6.1.jar"/>
-	<classpathentry kind="lib" path="examples/Workbench/lib/jCharts-0.6.0.jar"/>
-	<classpathentry exported="true" kind="lib" path="lib/ext/commons-collections-2.1.jar"/>
-	<classpathentry kind="lib" path="lib/ext/commons-fileupload-1.0.jar"/>
-	<classpathentry exported="true" kind="lib" path="lib/ext/javassist-2.5.1.jar"/>
-	<classpathentry exported="true" kind="lib" path="lib/ext/commons-digester-1.5.jar"/>
-	<classpathentry kind="lib" path="lib/ext/commons-codec-1.2.jar"/>
-	<classpathentry kind="lib" path="lib/j2ee/geronimo-ejb.jar"/>
-	<classpathentry kind="lib" path="lib/j2ee/jsp-api.jar"/>
-	<classpathentry exported="true" kind="lib" path="lib/j2ee/servlet-api.jar"/>
-	<classpathentry kind="lib" path="lib/runtime/log4j-1.2.6.jar"/>
-	<classpathentry kind="lib" path="ext-dist/jdom-1.0.jar"/>
-	<classpathentry kind="lib" path="lib/ext/ognl-2.6.7.jar"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/jre-1.4"/>
-	<classpathentry kind="output" path="bin"/>
-</classpath>
diff --git a/3.0.4/.cvsignore b/3.0.4/.cvsignore
deleted file mode 100644
index ce9ad11..0000000
--- a/3.0.4/.cvsignore
+++ /dev/null
@@ -1,13 +0,0 @@
-bin

-private

-dist

-.temp

-target

-maven.log

-velocity.log

-*.out

-build

-${destdir}

-cachedir

-ext-package

-.settings

diff --git a/3.0.4/.project b/3.0.4/.project
deleted file mode 100644
index 54808f1..0000000
--- a/3.0.4/.project
+++ /dev/null
@@ -1,17 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>

-<projectDescription>

-	<name>Tapestry</name>

-	<comment></comment>

-	<projects>

-	</projects>

-	<buildSpec>

-		<buildCommand>

-			<name>org.eclipse.jdt.core.javabuilder</name>

-			<arguments>

-			</arguments>

-		</buildCommand>

-	</buildSpec>

-	<natures>

-		<nature>org.eclipse.jdt.core.javanature</nature>

-	</natures>

-</projectDescription>

diff --git a/3.0.4/KEYS b/3.0.4/KEYS
deleted file mode 100644
index b61702f..0000000
--- a/3.0.4/KEYS
+++ /dev/null
@@ -1,115 +0,0 @@
-This file contains the PGP keys of various developers.
-
-Users: pgp < KEYS
-       gpg --import 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.
-
-
-
-
-
-pub  1024D/2DDB17D0 2003-06-01 Howard M. Lewis Ship <hlship@apache.org>
-sig 3       2DDB17D0 2003-06-01   Howard M. Lewis Ship <hlship@apache.org>
-sub  1024g/7837388C 2003-06-01
-sig         2DDB17D0 2003-06-01   Howard M. Lewis Ship <hlship@apache.org>
-
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: GnuPG v1.2.2 (Cygwin)
-
-mQGiBD7aKV8RBACd181gddOl6a2AM57Ae1r14d3u2TOXDvZRICl4wH8TjJO/+M/4
-K27+3X2ENLo3zuI5aVnDo1png/KVVx7PzRdyru1O4D3TDNLKKahmN/eAW2MvnLBK
-SCaEz+FjSt16M+wGoOkd0M2JMIXGD44r6k74e7lCvj/wnsBVaIcB/y7HtwCglqYe
-DtMa0lmDAZW0vZ5G2zqL/vkD/0cnfWXyL+a+GobHzXKc245UmPpfSzCPqjYFyr+W
-UjU4qQrmod+CoTRADmu+qdeHJSX9Bs0y6HKSFYalEOfl7m90xvH+pdKvdPOsu2LU
-SMH0cpmZHt7NJmXOUeaaTNJ2fcO+exRhqiijSREgBDiVO8YsBTHXiNxTaJREHIeN
-0RRiA/9fw8GzIN6Nez8ikKHanvuKojNE68GfIlJqCrJBNB2/rPBIQgCnKuwjwQpX
-73EalqEfQiIAI/Ekq6TZ9rzoxICaO0CdMDCGuStdL74Vq7XKQvX5ifuQzXgZ1jdf
-3CAZo5vrMDc5b6p+Mt8Gw/uSjK+Sl8tg6PkC1pTcxjCbAm1T8LQoSG93YXJkIE0u
-IExld2lzIFNoaXAgPGhsc2hpcEBhcGFjaGUub3JnPohbBBMRAgAbBQI+2ilfBgsJ
-CAcDAgMVAgMDFgIBAh4BAheAAAoJEIa00not2xfQIjYAn2V6U4zBa5FT0gPSJgCt
-6ZZBBLNxAJ9sPcjK2OS8TL5OvbN9J5BUuReNKbkBDQQ+2ilhEAQAu5TtBmHvKB1T
-7xrTMBJxEmdfxZodrCqR11tZOqRrvT/RcLLZbDQ3ntscZNoiAxoGrGv1vpeO4FwD
-t5T2G93Hza7aYuVV3ucNMAiWUCnkXzLVvVxZ9xK1hnhKDkeQyIyyIjaoiRyq19bi
-2j0NBaG2QNMQpcDSkwy1vHO2SPW8GNMAAwUD/Atf6puXOZn7vj0My580uy5PczQh
-f6EazspE7hqTxuTR8Um6mznAlaFiEjXoprTk6vBpiRzihYHXWhdsOTcLzxVxK+TW
-7Ve2OJGc8jwEWWXfXImorvvlH3HTadV0d63+Sw4oLgO9etUamlM3vVOYavBCfC81
-FVh4vOvy4cKKizOFiEYEGBECAAYFAj7aKWEACgkQhrTSei3bF9CZowCdEiyvPimY
-D3G2EeSaq1C4qb2iqREAn2qZk6Dlf4XrWJiZG+27KvdyaA5N
-=p680
------END PGP PUBLIC KEY BLOCK-----
-pub   1024D/FD6C524C 2005-03-29
-uid                  Paul Ferraro <pferraro@apache.org>
-sig 3        FD6C524C 2005-03-29  Paul Ferraro <pferraro@apache.org>
-sub   2048g/B89AF99B 2005-03-29
-sig          FD6C524C 2005-03-29  Paul Ferraro <pferraro@apache.org>
-
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: GnuPG v1.4.0 (Cygwin)
-
-mQGiBEJInnIRBADLh6hjNRNPUDshPXl4iuzmVU2tGYfjYfOoAitU6AtAl5astuwe
-0EprzpTXrf1axd84CWlWmx/iI244UhAljEbHoZ5kI/MMJm6P0DoQRIWj3nvtdbJw
-jlgjwij1gWb3c3o3GwIwZx5onB252Np9whhG33lTmq3gVnPi528DxXpQwwCg71l8
-ZQfCR4bIGrmptM7iF2HpdJ0D/Avik9oyxvKqb8rvM72/UhP6WPl/W/6PGe7zDdzM
-9zAUdkXDmSRD4pHS2lOARHGIT3dZ/L2/Hwgc2U9IaWGnxr64WM8VqyKLF8Fx89/5
-NjvwDAwXWTdyDojvg4TamVF4xycQhSLtAyWxXp983OPp4eBGjMlAGV7SH9RtaNGw
-bQfDBACRIT3QXGQPN4ZA9osVvudo3v1OLV7whbvyPVZoRz85dtSNrDquXGmsmsLm
-g/qBMHV++QiNKF0zCR3LgSKMgBXNLKiYrKZAP+ITXn1PWDZDqHGrst58qJ1AcAe3
-JnPsqqMKzY50bd1P7lQjq9ZQM0FL29imwjiM4YhdZvT/r+PQFrQiUGF1bCBGZXJy
-YXJvIDxwZmVycmFyb0BhcGFjaGUub3JnPoheBBMRAgAeBQJCSJ5yAhsDBgsJCAcD
-AgMVAgMDFgIBAh4BAheAAAoJENoTCsn9bFJM9l0AoL+sj2ysb0pdwEHlIejG54ZW
-GV9vAKDU3+oVU0xxnd+R9yWkG7Ys32i5+LkCDQRCSJ6hEAgAx+a5d4krGWo+BFsC
-EeNDPI/3anJhvACuMwoYbWpResZH1G39UA9mUG/kI2A7Gbm96DGiPpsB9KKJWBfE
-SuXEBLjp8ukXZvrmS8NLrH0bLajptTrjlq8P49AK6C1CFPZRaoq+yd/zA+9ZlM6z
-gPFypK/WoTCQtng0ej4YGA/KEZEIE4FwU+2i9UieVcWJOarggStibPclfY+wZy6p
-YPmkHcUtKTjDTzkdileT11DahACDPAnfjVMvAb3JrkdAqTEapEMkB8TpgZx9NZKB
-yqilxfxDGKAL079exx8ats5XowBQ4/arisHc9AA26MwtoqJowsqpMUPutJ4Rskw8
-59KQCwADBgf/ZliG2GwY7SnE5jujECBGSLJLFb5CuZc/M+RyjqlhnMQsQYmj9GZT
-92I5r5jlydB3tKZ//pkA/YUqHPgKNR4VFO46SAO1QFtau3Sd6Plz82v4KVBt4HUr
-P3w4xl5p1NY/T03qij3Mn/ly6Gkn+b1CmJBBa0+ebaT63bgpRa5MaazWGf+WXx/Y
-BoBBTOOSkKrLJ6YlTQOzIKlknSlQvEuLVdAY+MNetYXpkjW0cjI0Yt9f+obSrsI6
-SeiqO57xRBK+aeDcQMVLrzAdVNkV4UMiLjLc/quLTJ3ShbO8t9RU2JIBZrppplog
-LFSMO33g6znCNXXsmzeMVHxKyrAnDzDI1ohJBBgRAgAJBQJCSJ6hAhsMAAoJENoT
-Csn9bFJMUZEAn2VCJH3MjoV6rVAt5Df892iX0zsMAJ96iBYmm/1KV2NaaqWb7XjY
-YBlFKw==
-=xwwi
------END PGP PUBLIC KEY BLOCK-----
-pub   1024D/3E6D26D2 2006-01-26
-uid                  Jesse Kuhnert <jkuhnert@apache.org>
-sig 3        3E6D26D2 2006-01-26  Jesse Kuhnert <jkuhnert@apache.org>
-sub   2048g/BFF7F76A 2006-01-26
-sig          3E6D26D2 2006-01-26  Jesse Kuhnert <jkuhnert@apache.org>
-
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: GnuPG v1.4.2.2 (GNU/Linux)
-
-mQGiBEPYLjoRBACa783DbiuMCc1LlbRDHbD8SYXz6zMMS3zSZ698yk91HG15mejQ
-hLXjenuH7PWuh83m5YyqRz3s2tuEROng5iXwn+A6iVJwnHNNMAA9l+Jy0Z9u5eFN
-29Dwd37GW0yF3tfivN/Y6b2fJzsQh6mTIwuSp6wfLtIvnBwXcDwsIQYgvwCgqX8w
-x3+fLdhPUj5VkYh9CqtBF60EAILCIaiUwk1TH6nFCfPg+UJQLLXpD6YaPItlkEdO
-OIM6P8mfYNraO8O2ZnZtdATRImaOIQ5pSbbQ44d2rGEwr7johU3B8KWb0r0RwLEE
-KAksAgdVZQ4HH9HIL3OYH7b2ED4KyhHG3TTQBmz7h6k4zNgTW3I5GHRVmoM1+x2q
-+BY2A/9Z24Oixhq2hbHPbl3YceYJE8W9l4hV+e/a9jP0G4WcvOGxMpj7yO7I/eaf
-ARCr+TjCHEMBEaZXjXe3w1F8iHyf3w5XMVbYCbhPRYUle0Z+690Lz2+hPwXOXFI5
-yVxK2J0xDrQ24CjMAZxdOlzxscIEvPkif2FlIlcElaCaw8NsbLQjSmVzc2UgS3Vo
-bmVydCA8amt1aG5lcnRAYXBhY2hlLm9yZz6IYAQTEQIAIAUCQ9guOgIbAwYLCQgH
-AwIEFQIIAwQWAgMBAh4BAheAAAoJEMB0lGc+bSbShlAAmwe4+Uexyc35UaNWAVhz
-6kiiEQbeAJ97yOFs2rpg5D3jLjK+Oowp6nvKmrkCDQRD2C5EEAgA6SBt6HRmAT0h
-hZJYmmjQZZ4FTxHHxwoIBxbnB/UcrtmavPMTSmaTwmq/EtbCWk4L/IonDXTLtLMa
-Q2UhXrBUIuK2mzOMQ4D96Dcga/M/PiR8Gtnr8t0jDimah/6IVDyKU3cyJ5LfXxP2
-/uIOcAdbwXmR/Pq64SRQx6ub3kkU/5gDGf/B8OmYTRPT+MsfkrS9V2Uo6QDx2nFq
-zel7a3KD4g4s+wybTMSC1W3pYGUeyUgRRMOIJ3MG0zJi//zkohj4QdSgnZvNciwk
-Cud0v6F+OkuMEF8rprJPCDWHrE3mbYjmVVmoVkmsjWpNEvZXuGZnfhw9RE9L2awo
-1bE6PcyXSwADBggAsJ/Rxk49qrn77X/7iOukDQHEz98yDqXxxM/l2edeyjURFbWE
-elu3BLUNGgaUVAMT+/W6dxrH4S9G8K5xLVwiNSelTtOLylYOjiO16InPpZ6I8HcX
-u9CkONthpaj7Es4hGpXxmYpnIkBN0EFA/cEK3GfPX2OiFKJ0CxOAlIkT0wMbFdpU
-tpvyltlD7KMglUJobOtFYjq5wfMyROWnJ4XLIc2XtiiT9Bzgw2blxVtfjCJ4uUUf
-c0JJ8UT+5w7/2QB3RdiSocKpS5FAkemH1gknpHhEeG8cItY0DTNDB39aa8jOIm+1
-Al0KHk4S6kedJEz4t0xcGo5NzZU323Xcl4UEPohJBBgRAgAJBQJD2C5EAhsMAAoJ
-EMB0lGc+bSbS1okAnR498zEVDPUHFMoT3kGd+xkPyf0FAJ44KZYBZLXHFIwiwuMb
-FrdorwKsLQ==
-=1t0m
------END PGP PUBLIC KEY BLOCK-----
diff --git a/3.0.4/LICENSE-2.0.txt b/3.0.4/LICENSE-2.0.txt
deleted file mode 100644
index d645695..0000000
--- a/3.0.4/LICENSE-2.0.txt
+++ /dev/null
@@ -1,202 +0,0 @@
-
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "[]"
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright [yyyy] [name of copyright owner]
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
diff --git a/3.0.4/NOTICE.txt b/3.0.4/NOTICE.txt
deleted file mode 100644
index 3f59805..0000000
--- a/3.0.4/NOTICE.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-This product includes software developed by
-The Apache Software Foundation (http://www.apache.org/).
diff --git a/3.0.4/Readme.html b/3.0.4/Readme.html
deleted file mode 100644
index cc4949f..0000000
--- a/3.0.4/Readme.html
+++ /dev/null
@@ -1,230 +0,0 @@
-<html>
-<!-- $Id$ -->
-<head>
-<title>Tapestry: Java Web Components</title>
-<link rel="STYLESHEET" type="text/css" href="web/scripts/style_virtlib_pcIE55.css">
-</head>
-
-<body leftmargin="0" topmargin="0" marginwidth="0" marginheight="0">
-<table width="100%" border="0" cellspacing="0" cellpadding="0" bgcolor="white">
-	<tr>
-		<td height="5"><IMG height=1 src="web/images/spacer.gif" width=1 border=0>
-		</td>
-	</tr>
-	<tr>
-		<td align="left" valign="top" height="20"><span class="release">Release @VERSION@</RELEASE></span>
-		</td>
-	</tr>
-	<tr bgcolor="#4b5887">
-		<td colspan="3" height="20"><IMG height=1 src="web/images/spacer.gif" width=1 border=0>
-		</td>
-	</tr>
-</table>
-
-<table width="100%" border="0" cellspacing="0" cellpadding="2">
-	<tr>
-		<td><IMG src="web/images/Tapestry-Banner.png" align=absMiddle border=0>
-<p>Tapestry is a component based framework for creating sophisticated web applications.
-It's used with existing application servers, acting as a kind of "super servlet". 
-Tapestry applications are built by configuring and combining components to form pages.  You
-get surprisingly large amounts of robust functionality for
-startingly small amounts of effort and code!
-
-
-<p>The JARs were created on 
-@OS_NAME@ @OS_VERSION@
-using the 
-@JAVA_VENDOR@ JDK @JAVA_VM_VERSION@ 
-compiler.
-
-<p>This product includes software developed by the Apache Software Foundation 
-(<a href="http://www.apache.org/">http://www.apache.org/</a>).
-
-<br><br>.....................................................<br><br>
-<h2>Non-ASL Libraries</h2>
-
-<p>
-Tapestry depends on a handful of non-ASL libraries. Because these libraries are not distributed under the terms
-of the Apache Software License, they may not be redistributed with as part of Tapestry. Tapestry's build scripts will
-automatically download the libraries as needed. Several libraries are only needed at build time, but
-some are needed at runtime (and are typically copied into <code>WEB-INF/lib</code>). The two runtime libraries are:
-<ul>
-<li><a href="http://www.ognl.org/">OGNL</a> (Object Graph Navigation Library), version @OGNL_VERSION@
-<li><a href="http://jboss.org/developers/projects/javassist.html">Javassist</a> (byte code enhancement library), version @JAVASSIST_VERSION@
-</ul>
-
-<p>
-The necessary libraries will automatically be downloaded when building the examples. The
-Ant target <code>download-ext-framework</code> will also download the libraries. If you
-are behind a firewall, you may need to <a href="ext-dist/README.html">provide some additional properties</a> in
-<code>config/build.properties</code>.
-
-<br><br>.....................................................<br><br>
-<h2>Configuration</h2>
-
-<p>
-In order to run the Tapestry demos, you need only the <b>binary</b> distribution (it includes the source code
-for the examples). The Ant build scripts will compile and build the Workbench and the Virtual Library example
-applications on your workstation, then deploy them into Jetty, Tomcat or JBoss.
-
-<pTo run these Tapestry applications please ensure:
-			<ul>
-				<li>JDK 1.3 or newer JVM is installed, and the <tt>JAVA_HOME</tt> environment variable is set.</B>
-				<li><b><a href="http://jakarta.apache.org/ant">Ant</a></b> 1.5 or newer is installed, and is added 
-to the system <tt>PATH</tt>.</li>
-<li>You have both the <b>binary</b> and the <b>source</b> Tapestry distributions installed
-			</ul>
-			
-<p>
-Basic setup:  The demos require several external dependencies that cannot be distributed with Tapestry
-because of licensing conflicts.  You will need one of the following:
-<ul>
-<li><a href="http://sf.net/projects/jetty">Jetty</a> servlet container, release 4.2 or above.
-<li><a href="http://jakarta.apache.org/tomcat/index.html">Tomcat</a> servlet container, release 4.1 or above.
-<li><a href="http://www.jboss.org">JBoss</a> application server, release 3.0.6. 
-        Running the Virtual Library application requires JBoss.</li>         
-
-</ul>
-
-<p>
-In each case you will create the file 
-<code>config/build.properties</code>
-and put an <em>absolute path</em> to the installation directory (of Jetty, JBoss or Tomcat).
-<b>Always use only forward slashes in the path name.</b>
-
-<p>
-A sample file, <code>config/build.properties.template</code>, is provided.  You may  edit
-and rename this file.
-
-<p>
-The build process downloads a number of extra files into the
-<code>ext-dist</code> and <code>lib/ext</code>
-directories.  See the <A href="ext-dist/README.html">README.html</a> in that directory
-for more details.
-
-<h3>Configuring JBoss</h3>
-
-<p>To run the Tapestry Workbench and the Virtual Library applications with the 
-<a href="http://sourceforge.net/projects/jboss">JBoss</a> server:
-			<ul>
-				<li>Download and install <a href="http://prdownloads.sourceforge.net/jboss/jboss-3.0.6.zip?download">JBoss 3.0.6</a>.
-				<br>JBoss is an open-source application server, used to run the database and Enterprise JavaBeans in the Virtual Library.
-<p><span class="hyper-em">This auto-configuration requires JBoss 3.0.6 exactly, not a later release.  
-This only affects these turn-key
-demos, not deployment of your own Tapestry applications.</span></p>
-				<li>
-			Update <code>config/build.properties</code>
-			and set property
-			<b><code>jboss.dir</code></b>
-			to the absolute path name
-			of the JBoss installation directory.
-				<li>Download the external dependencies.
-				<li>Execute the command:
-				<br>
-			<b><code>ant -emacs configure run-jboss</code></b>
-			
-			<br>This will build, copy and configure the necessary files in the JBoss installation directory, then
-run the JBoss server, automatically deploying the example applications. 
- (The
-			<code>-emacs</code> option 
-        changes the Ant output format to be less verbose).</li>
-			</ul>
-			
-		<blockquote>You can now run the 
-<a href="http://localhost/workbench">Tapestry Workbench</a>
-or the
-<a href="http://localhost">Virtual Library</a> applications.</blockquote>
-
-
-<h3>Configuring Jetty</h3>
-
-<p>To run the Tapestry Workbench application with 
-Jetty servlet container:
-			<ul>
-				<li>Obtain and install a copy of Jetty.
-				<li>
-			Update <code>config/build.properties</code>
-			and set property
-			<b><code>jetty.dir</code></b>
-			to the absolute path name
-			of the Jetty installation directory.
-	
-				<li>Execute the command:
-				<br>
-				<b>
-			<code>ant -emacs run-workbench</code></b><br>This will run the embedded 
-			Jetty server. 
-			<br></li>
-			</ul>
-			
-		<blockquote>You can now run the 
-<a href="http://localhost:8080/workbench">Tapestry Workbench</a> application.
-</blockquote>
-
-			<h3>Configuring Tomcat</h3>
-			
-<p>To deploy the Tapestry Workbench application onto an existing 
-Tomcat installation:
-
-<p>To run the Tapestry Workbench application with 
-Tomcat servlet container:
-			<ul>
-				<li>Obtain and install a copy of Tomcat.
-				<li>
-			Update <code>config/build.properties</code>
-			and set property
-			<b><code>tomcat.dir</code></b>
-			to the absolute path name
-			of the Tomcat installation directory, for example <code>C:/Program Files/Apache Group/Tomcat 4.1</code>.
-
-				<li>Execute the command:
-				<br>
-				<b>
-			<code>ant -emacs deploy-tomcat</code></b>
-			
-			<br>This will deploy the Workbench application into Tomcat.  If Tomcat is running, you will
-			be able to access the application immediately. 
-			<br></li>
-			</ul>
-			
-		<blockquote>You can then run the 
-<a href="http://localhost:8080/workbench">Tapestry Workbench</a> application.
-</blockquote>
-
-<br><br>.....................................................<br><br>
-<h2>Building from Source</h2>
-
-<p>
-The source distribution includes the source code for the framework and the contrib library. You should extract
-the source distribution to the same directory as the binary distribution.
-You may then execute <b><code>ant install</code></b> to compile all the frameworks and examples.
-Building documentation and running the unit tests requires some additional
-setup that is discussed in
-the <A href="web/doc/ContributorsGuide/ContributorsGuide.html">Tapestry Contributor's Guide</A>.
-</p>
-			
-<br><br>.....................................................<br><br>
-<h2>Documentation</h2>
-
-A complete set of <a href="web/doc.html">documentation</a> is distributed with Tapestry.
-
-
-		<br><br>
-		.....................................................
-		<br><br>
-
-<p>Tapestry is an open source project, hosted by
- <a href="http://jakarta.apache.org">The Jakarta Project</a> 
-       and distributed under the terms
-of the <A href="LICENSE-2.0.txt">Apache Software License 2.0</A>.</p></td></tr></table>
-
-<p>
-<a href="http://jakarta.apache.org"><IMG alt="Jakarta Banner" src="web/images/jakarta.png" border=0 ></a>
-<br>© 
-2003-2004 Apache Software Foundation.</p>    
-
-
-</body>
-
-</html>
-
diff --git a/3.0.4/STATUS.html b/3.0.4/STATUS.html
deleted file mode 100644
index 6178a75..0000000
--- a/3.0.4/STATUS.html
+++ /dev/null
@@ -1,17 +0,0 @@
-<!DOCTYPE html public "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-<head>
-<title>Tapestry Status</title>
-<link rel="STYLESHEET" type="text/css" href="web/scripts/style_virtlib_pcIE55.css"/>
-</head>
-<body>
-
-$Id$
-
-<br/>
-
-Status documentation (including committer votes) are now recorded inside status.xml.
-
-
-</body>
-</html>
\ No newline at end of file
diff --git a/3.0.4/TODO.html b/3.0.4/TODO.html
deleted file mode 100644
index eda0ac0..0000000
--- a/3.0.4/TODO.html
+++ /dev/null
@@ -1,77 +0,0 @@
-<!DOCTYPE html public "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-<head>
-<title>Tapestry TODO List</title>
-<link rel="STYLESHEET" type="text/css" href="web/scripts/style_virtlib_pcIE55.css"/>
-</head>
-<body>
-<h1>Release 3.0</h1>
-<br/>
-$Id$
-<p>   Some of these items overlap requests Bugzilla.</p>
-<p><i>This list is anything but final! Not in any (prioritized) order.</i></p>
-<ul>
-	<li>Decide on final release number for "NextGen"</li>
-	<li>Bugzilla or Scarab?</li>
-	<li>Deal with character sets and localization properly</li>
-	<li>Handle change of locale correctly, by reloading new 
-  instance of page in proper locale</li>
-	<li>Improved User's Guide to replace existing Developer's 
-  Guide</li>
-	<li>Replace the current tutorial with Neil Clayton's 
-  Tutorial2</li>
-	<li>Reoganize directory structure to more standard format 
-  (compatible with Maven)</li>
-	<li>Use Forrest, or somesuch, for documentation 
-  (possibly, convert User's Guide and friends to alternate format)</li>
-	<li>Get Tapestry compiling under Maven, have nightly 
-  builds</li>
-	<li>Fill out the test suite and code coverage, reach 85% 
-  or better</li>
-	<li>Fix all the Component Reference pages to use the 3.0 
-  syntax</li>
-	<li>Unit testing stategy for the JSP tags and tagsupport 
-  service</li>
-	<li>Allow auto parameters to not be required</li>
-</ul>
-<h2>Completed items in 3.0</h2>
-<ul>
-	<li>Declarative transient properties - define transient properties in spec, 
-  Tapestry builds subclass with instance variables, accessors and 
-  initialize() <b>HLS</b></li>
-	<li>Declarative persistant properties - as with transient, but properties are 
-  made persistant <b>HLS</b></li>
-	<li>Traditional bin/src distros <b>HLS</b></li>
-	<li>Rename packages from net.sf.tapestry to org.apache.tapestry <b>HLS</b></li>
-	<li>Resolve GPL issues around McKoiDBMBean <b>HLS</b></li>
-	<li>Tapestry JSP tag library <b>HLS</b></li>
-	<li>Support array types for declared properties and connected parameters <b>HLS</b></li>
-	<li>Support primitive types for connected parameters <b>HLS</b></li>
-	<li>Integrate David Solis' WML component contributions <b>DS</b></li>
-		<li>Get Tapestry building under Gump <b>HLS</b></li>
-			<li>Properly sign the distribution and have it mirrored 
-  with the other Jakarta downloads <b>HLS</b></li>
-  	<li>New features for Script Specification: <b>HLS</b>
-  <ul>
-  	<li>Improve the "include script" element to support </li>
-    relative scripts, scripts in context, script in classpath</li>
-  	<li>Some kind of "include only once" block</li>
-  	<li>Name uniquer</li>
-  	<li>New DTD w/Jakarta public/system ids</li>
-  </ul></li>
-  	<li>Change build environment to NOT compile against LGPL 
-  frameworks (J2EE from JBoss) <b>HLS</b></li>
-</ul>
-<h2>Rejected items in 3.0</h2>
-<ul>
-	<li>Change &lt;extension&gt; initializers to use OGNL 
-  expressions <b>HLS<BR></b><i>
-  <br/>Need an "object" for OGNL expressions, not clear what that would be.</i></li>
-</ul>
-<h1>Release 3.1</h1>
-<ul>
-	<li>Intersertials</li>
-	<li>Extend listener methods to take parameters (matching service parameters to actual method parameters)</li>
-</ul>
-</body>
-</html>
diff --git a/3.0.4/build.xml b/3.0.4/build.xml
deleted file mode 100644
index 42eed76..0000000
--- a/3.0.4/build.xml
+++ /dev/null
@@ -1,762 +0,0 @@
-<?xml version="1.0"?>
-<!-- $Id$ -->
-<!-- Top-level buildfile for the Tapestry module. -->
-<project name="Tapestry Web Application Framework" default="install">
-	<property name="root.dir" value="./"/>
-	<property name="config.dir" value="${root.dir}/config"/>
-	<property file="${config.dir}/Version.properties"/>
-	<property file="${config.dir}/build.properties"/>
-	<property file="${config.dir}/common.properties"/>
-	<property name="javadoc.dir" value="web/doc/api"/>
-	<property name="private.dir" value="private"/>
-	
-	<!-- Forrest prefers to put stuff in here. -->
-	
-	<property name="build.dir" value="build"/>
-	
-	<property environment="env"/>
-	
-	<path id="jetty.classpath">
-		<fileset dir="${jetty.dir}">
-			<include name="lib/javax.servlet.jar"/>
-			<include name="lib/org.mortbay.jetty.jar"/>
-			<include name="ext/*.jar"/>
-		</fileset>
-		<!-- Needed to support JSP compilation -->
-		<pathelement location="${env.JAVA_HOME}/lib/tools.jar"/>
-	</path>
-	
-	<path id="ext.dist.classpath">
-		<fileset dir="${ext.dist.dir}">
-			<include name="*.jar"/>
-		</fileset>
-	</path>
-	
-	<path id="workbench.classpath">
-		<fileset dir="${root.lib.dir}">
-			<include name="${framework.jar}"/>
-			<include name="${contrib.jar}"/>
-			<include name="${ext.dir}/*.jar"/>
-			<include name="${runtime.dir}/*.jar"/>
-		</fileset>
-		<pathelement location="config"/>
-	</path>
-	
-	<path id="vlib.classpath">
-		<pathelement location="${vlibbeans.jar}"/>
-		<pathelement location="examples/VlibBeans/jboss"/>
-		<pathelement location="${jboss.client.dir}/jboss-j2ee.jar"/>
-		<pathelement location="${jboss.client.dir}/jboss-client.jar"/>
-		<pathelement location="${jboss.client.dir}/jnp-client.jar"/>
-		<path refid="workbench.classpath"/>
-	</path>
-	
-	<target name="clean" description="Cleans all sub-projects.">
-		<ant dir="framework" target="clean"/>
-		<ant dir="contrib" target="clean"/>
-		<ant dir="junit" target="clean"/>
-		<ant dir="examples" target="clean"/>
-		<ant dir="doc/src" target="clean"/>
-		<delete dir="${private.dir}" quiet="true"/>		
-	</target>
-	
-	<target name="clean-all" depends="clean"
-		description="Cleans all subprojects and deletes installed frameworks, WARs and generated documentation."
-		>
-		<delete quiet="true">
-			<fileset dir="${root.lib.dir}">
-				<include name="*.jar"/>
-				<include name="examples/**"/>
-			</fileset>
-		</delete>
-		<delete dir="web/doc" quiet="true"/>
-		<delete dir="${build.dir}" quiet="true"/>
-	</target>
-	
-	<target name="install" description="Builds all frameworks and examples." 
-		depends="download-ext-install">
-		<!-- Each project has its own definitions for many properties.
-     	 inheritAll="false" ensures that definitions in this buildfile
-     	 doesn't override definitions in each project's buildfile. -->
-		<ant dir="framework" target="install" inheritAll="false"/>
-		<ant dir="contrib" target="install" inheritAll="false"/>
-		<ant dir="examples" target="install" inheritAll="false"/>
-	</target>
-	
-	<target name="build-workbench" description="Builds and installs the Workbench demo."
-		depends="download-ext-framework">
-		<ant dir="examples/Workbench" target="install" inheritAll="false"/>
-	</target>
-	
-	<target name="build-vlib" description="Builds and installs the Virtual Library demo."
-		depends="download-ext-framework,check-for-jboss-dir">
-		<ant dir="examples/VlibBeans" target="install" inheritAll="false"/>
-		<ant dir="examples/Vlib" target="install" inheritAll="false"/>
-		<ant dir="examples/VlibEAR" target="install" inheritAll="false"/>		
-	</target>
-	
-	<target name="documentation" depends="download-ext-doc"
-		description="Builds the Tapestry documentation.">
-		
-		<ant dir="doc/src" target="install" inheritAll="false">
-		  <property name="ext.dist.dir" location="${ext.dist.dir}"/>
-		</ant>
-		
-		<echo>Building site documentation using Forrest ...</echo>
-		
-		<antcall target="site" inheritall="true"/>
-	</target>
-
-	<target name="junit" depends="check-for-jython-dir,download-ext-junit"
-		description="Run the JUnit test suite for Tapestry.">
-		<ant dir="junit" target="run" inheritAll="false">
-		  <property name="ext.dist.dir" location="${ext.dist.dir}"/>
-		</ant>		
-	</target>
-	
-	<target name="clover" depends="check-for-clover-dir,check-for-jython-dir"
-		description="Execute the JUnit tests and generate Code Coverage report."
-		>
-		<ant dir="junit" target="clover" inheritAll="false">
-		  <property name="ext.dist.dir" location="${ext.dist.dir}"/>
-		</ant>		
-	</target>
-	
-	<target name="dist"
-		description="Builds the Tapestry distribution from scratch."
-		depends="clean-all,install,junit,documentation,clover,javadoc">
-		<!-- After building, clean all the subprojects. -->
-		<antcall target="clean"/>
-		<!-- Now, build that actual distribution. -->
-		<antcall target="build-dist"/>
-	</target>
-	
-	<property name="dist.root.dir" value="dist"/>
-	<property name="dist.base" value="Tapestry-${framework.version}"/>
-	<property name="dist.dir" value="${dist.root.dir}/${dist.base}"/>
-	
-	<target name="build-dist"
-		description="Builds the Tapestry distribution files.">
-		<!-- Delete the base directory. -->
-		<delete dir="${dist.root.dir}" quiet="true"/>
-		<antcall target="build-dist-tarball"/>
-	</target>
-	
-	<target name="build-dist-copy">
-		<echo>Copying to ${dist.dir} ...</echo>
-		<!-- Copy all the relevant files to the base directory. -->
-		<echo>  Copying documentation ...</echo>
-		<copy todir="${dist.dir}" includeEmptyDirs="false">
-			<fileset dir=".">
-				<include name="build.xml"/>
-				<include name="*.html"/>
-				<include name="*.txt"/>
-				<include name="KEYS"/>
-				<!-- Skip HTML files in web, since those need
-				 a seperate path, to provide filtering. -->
-				<exclude name="Readme.html"/>
-				<include name="config/**"/>
-				<include name="ext-dist/README.html"/>
-				<exclude name="lib/*"/>
-				<exclude name="lib/**"/>
-				<!-- Exclude Paint Shop Pro files (used to generate images
-			  in various places) -->
-				<exclude name="**/*.psp"/>
-				<exclude name="**/*.jbf"/>
-				<!-- Don't include build.properties; that's specific to this build
-			     environment.  We ship a sample file instead. -->
-				<exclude name="config/build.properties"/>
-				<!-- This is where Eclipse puts classes. -->
-				<exclude name="bin/**"/>
-				<exclude name="${build.dir}"/>
-				<!-- It isn't a good idea to generate a distribution from a normal working
-			     directory, since the <copy> will include things like backup files created
-			     while editting.  Better to check out the Tapestry module via anon CVS to
-			     a temporary directory, configure build.properties, and build the
-			     release there. -->
-			</fileset>
-		</copy>
-		<!-- The Readme.html file and several of the web pages
-		 include a version number; copy w/ filtering. -->
-		<echo>  Copying (and filtering) Readme.html ...</echo>
-		<copy todir="${dist.dir}" includeEmptyDirs="false">
-			<fileset dir=".">
-				<include name="Readme.html"/>
-			</fileset>
-			
-			<filterset>
-				<filter token="VERSION" value="${framework.version}"/>
-				<filter token="OS_NAME" value="${os.name}"/>
-				<filter token="OS_VERSION" value="${os.version}"/>
-				<filter token="JAVA_VENDOR" value="${java.vendor}"/>
-				<filter token="JAVA_VM_VERSION" value="${java.vm.version}"/>
-				<filter token="COPY_YEARS" value="${copyright.years}"/>
-				<filter token="HOME_PAGE_URL"
-					value="http://jakarta.apache.org/tapestry"/>
-				<filter token="OGNL_VERSION" value="${ognl.version}"/>
-				<filter token="JAVASSIST_VERSION" value="${javassist.version}"/>
-			</filterset>
-		</copy>
-		
-		<echo>  Copying compiled and redistributable libraries ...</echo>
-		<copy todir="${dist.dir}/lib">
-			<fileset dir="${root.lib.dir}">
-				<include name="**/*.jar"/>
-				<exclude name="examples/*"/>
-				<exclude name="${ext.dir}/ognl-*.jar"/>
-				<exclude name="${ext.dir}/javassist-*.jar"/>
-				<include name="**/LICENSE*"/>
-			</fileset>
-		</copy>
-		
-		<echo>  Copying Tapestry Tag Library Descriptor ...</echo>
-		<copy 
-			file="framework/META-INF/taglib.tld"
-			tofile="${dist.dir}/lib/tapestry-${framework.version}.tld"/>
-		
-		<echo>  Copying framework and examples source code ...</echo>
-		<copy todir="${dist.dir}" includeEmptyDirs="false">
-			<fileset dir=".">
-				<include name="framework/**"/>
-				<include name="contrib/**"/>
-				<include name="examples/**"/>
-				
-				<!-- These two aren't quite ready for primetime.  -->
-				<exclude name="examples/DevelopmentEnvironment/**"/>
-				<exclude name="examples/Tutorial2/**"/>
-				
-				<!-- These are thumnail files that turn up in directories that contain images. These
-				     are not stored in CVS and should not be part of the distribution. -->
-				<exclude name="**/Thumbs.db"/>
-				<exclude name="**/pspbrwse.jbf"/>
-        <exclude name="**/classes/"/>        
-			</fileset>
-		</copy>
-		
-		<property name="web.dir" value="${dist.dir}/web"/>
-		<property name="dtd.dir" value="${web.dir}/dtd"/>
-		
-		<echo>  Copying Tapestry DTDs ...</echo>
-		<copy todir="${dtd.dir}" flatten="true">
-			<fileset dir="framework/src">
-				<include name="**/*.dtd"/>
-			</fileset>
-		</copy>
-		
-		<!-- Copy over javadoc, component references, and docs generated from docbook.
-		     We tend to copy the same files too many times (i.e., the builds for the
-		     TapestryUsersGuide could generate the HTML files directly into the dist), but
-		     it's still fast *enough* so not to fiddle. -->
-		     
-		<echo>  Copying documentation, JavaDoc, Clover report ...</echo>
-		<copy todir="${web.dir}" includeEmptyDirs="false">
-		  <fileset dir="web">
-		    <!-- Exclude the top level stuff (any remnants of the old, static web site).
-		         Include all the docs and reports generated below. -->
-		    <exclude name="*.html"/>
-		    <include name="**/*"/>
-		  </fileset>
-		  <fileset dir="${build.dir}/site"/>
-		</copy>
-	</target>
-	
-	<target name="build-dist-tarball"
-		description="Builds the tarball distributions."
-		depends="build-dist-copy">
-
-		<property name="bin.tar.gz" value="${dist.dir}-bin.tar.gz"/>
-		<property name="src.tar.gz" value="${dist.dir}-src.tar.gz"/>
-		<tar tarfile="${bin.tar.gz}" longfile="gnu" compression="gzip">
-			<tarfileset dir="${dist.root.dir}" id="dist.bin.set">
-				<include name="${dist.base}/*"/>
-				<include name="${dist.base}/config/**"/>
-				<include name="${dist.base}/lib/**"/>
-				<!-- Have to include a lot of Workbench source in the binary distro, because
-				     it has to be compiled and built using the dynamically downloaded non-ASL
-				     libraries (such as OGNL). -->
-				<include name="${dist.base}/examples/Workbench/**"/>
-				<exclude name="${dist.base}/examples/Workbench/.build/**"/>
-				<exclude name="${dist.base}/examples/Workbench/image-src/**"/>
-				
-				<include name="${dist.base}/examples/Vlib/**"/>
-				<include name="${dist.base}/examples/VlibBeans/**"/>
-				<include name="${dist.base}/examples/VlibEAR/**"/>
-				
-				<include name="${dist.base}/examples/wap/**"/>
-				
-				<include name="${dist.base}/examples/build.xml"/>
-				
-				<!-- Don't ship the code coverage report; it's huge. -->
-				<include name="${dist.base}/web/**"/>
-				<exclude name="${dist.base}/web/doc/clover/**"/>
-			</tarfileset>
-		</tar>
-		<tar tarfile="${src.tar.gz}" longfile="gnu" compression="gzip">
-			<tarfileset dir="${dist.root.dir}" id="dist.src.set">
-				<!-- Include the sub-projects excluded from the -bin distro. -->
-				<include name="${dist.base}/framework/**"/>
-				<include name="${dist.base}/contrib/**"/>
-			</tarfileset>
-		</tar>
-		
-		<property name="bin.zip" value="${dist.dir}-bin.zip"/>
-		<property name="src.zip" value="${dist.dir}-src.zip"/>
-		
-		<zip destfile="${bin.zip}">
-			<zipfileset refid="dist.bin.set"/>
-		</zip>
-		
-		<zip destfile="${src.zip}">
-			<zipfileset refid="dist.src.set"/>	
-		</zip>
-		
-		<!-- Create the web distribution (to be put up on the web site).  This *does*
-	     include the code coverage report.  -->
-		<property name="web.tar.gz"
-			value="${dist.root.dir}/Tapestry-Web-${framework.version}.tar.gz"/>
-		<tar basedir="${web.dir}" tarfile="${web.tar.gz}" longfile="gnu"
-			compression="gzip"/>
-	</target>
-	
-	<target name="javadoc"
-		description="Generate API documentation for the framework and examples."
-		>
-		<mkdir dir="${javadoc.dir}"/>
-		<javadoc author="true" version="true" destdir="${javadoc.dir}"
-			splitindex="true" windowtitle="Tapestry API ${framework.version}">
-			<doctitle>Tapestry ${framework.version} API</doctitle>
-			<package name="org.apache.tapestry.*"/>
-
-			<link href="http://java.sun.com/j2se/1.3/docs/api/"
-				offline="true" packageListLoc="package-lists/jdk"/>
-
-			<link href="http://java.sun.com/j2ee/sdk_1.2.1/techdocs/api/"
-				offline="true" packageListLoc="package-lists/j2ee"/>
-
-			<link href="http://jakarta.apache.org/log4j/docs/api/"
-				offline="true" packageListLoc="package-lists/log4j"/>
-
-			<link href="http://www.junit.org/junit/javadoc/3.7/" offline="true"
-				packageListLoc="package-lists/junit"/>
-
-			<link href="http://jakarta.apache.org/oro/api/" offline="true"
-				packageListLoc="package-lists/jakarta-oro"/>
-				
-			<group title="Tapestry Framework"
-				packages="org.apache.tapestry:org.apache.tapestry.*"/>
-			<group title="Tapestry Contributions Framework"
-				packages="org.apache.tapestry.contrib.*"/>
-
-			<sourcepath>
-				<pathelement location="framework/src"/>
-				<pathelement location="contrib/src"/>
-			</sourcepath>
-			
-			<classpath>
-				<path refid="vlib.classpath"/>
-				<path refid="ext.dist.classpath"/>
-				<fileset dir="${root.lib.dir}">
-					<include name="${j2ee.dir}/*.jar"/>
-				</fileset>
-			</classpath>
-		</javadoc>
-	</target>
-	
-	<target name="run-workbench" depends="check-for-jetty-dir,build-workbench"
-		description="Runs the Tapestry Workbench using Jetty.">
-		<delete dir="${private.dir}" quiet="true"/>
-		<mkdir dir="${private.dir}"/>
-		<echo>Running Tapestry Workbench on port 8080 ...</echo>
-		<java classname="org.mortbay.jetty.Server" fork="true" maxmemory="128M">
-			<classpath>
-				<path refid="jetty.classpath"/>
-			</classpath>
-			<arg value="config/jetty-workbench.xml"/>
-			<!-- Enable debugging when running the tutorial -->
-			<jvmarg line="-showversion -Xdebug -Xnoagent"/>
-			<jvmarg
-				line="-Xrunjdwp:transport=dt_socket,suspend=n,server=y,address=20150"
-				/>
-			<!-- Jetty can get easily confused (under NT) unless this is turned off. -->
-			<sysproperty key="org.mortbay.util.FileResource.checkAliases"
-				value="false"/>
-			<sysproperty key="org.apache.tapestry.asset.dir" value="${private.dir}"
-				/>
-			<sysproperty key="org.apache.tapestry.asset.URL" value="/private"/>
-		</java>
-	</target>
-	
-	<!-- ===================================================================================
-
-	 JBoss 3.0.6 auto configuration
-	
-	 Configures a JBoss 3.0.6 with a new configuration, tapestry.  Part of the configuration
-	 comes with the Tapestry distribution; part is copied from the JBoss default server
-	 configuration.
-	 
-	 This only works with JBoss 3.0.6; other releases differ enough that this
-	 simple script is broken.
-	
-     ====================================================================================  -->
-	<property name="tapestry.dir" value="${jboss.dir}/server/tapestry"/>
-	<property name="tapestry.conf.dir" value="${tapestry.dir}/conf"/>
-	<property name="tapestry.lib.dir" value="${tapestry.dir}/lib"/>
-	<property name="tapestry.db.dir" value="${tapestry.dir}/db"/>
-	<property name="tapestry.deploy.dir" value="${tapestry.dir}/deploy"/>
-	<property name="tapestry.private.dir"
-		value="${tapestry.dir}/tmp/${private.dir}"/>
-	<property name="jboss.server.default.dir"
-		value="${jboss.dir}/server/default"/>
-	<target name="configure" depends="check-for-jboss-dir,download-ext-examples"
-		description="Configure the JBoss 3.0.6 server and setup the Tapestry database."
-		>
-		<delete dir="${tapestry.lib.dir}" quiet="true"/>
-		<mkdir dir="${tapestry.lib.dir}"/>
-		<copy todir="${tapestry.lib.dir}" flatten="true">
-			<fileset dir="${root.lib.dir}">
-				<include name="*-${framework.version}.jar"/>
-				<include name="${ext.dir}/*.jar"/>
-			</fileset>
-			<fileset dir="${ext.dist.dir}">
-				<include name="mckoidb*.jar"/>
-			</fileset>			
-			<fileset dir="${jboss.server.default.dir}/lib">
-				<!-- Could do a careful analysis of just what we need and copy only that,
-				 but this is good for now.  -->
-				<include name="*.jar"/>
-			</fileset>
-		</copy>
-		<!-- Delete, recreate and copy -->
-		<delete dir="${tapestry.conf.dir}" quiet="true"/>
-		<mkdir dir="${tapestry.conf.dir}"/>
-		<copy todir="${tapestry.conf.dir}" filtering="true">
-			<fileset dir="config/jboss/conf"/>
-			<filterset>
-				<filter token="jboss.dir" value="${jboss.dir}"/>
-				<filter token="user.dir" value="${user.dir}"/>
-			</filterset>
-		</copy>
-		<mkdir dir="${tapestry.deploy.dir}"/>
-		<copy todir="${tapestry.deploy.dir}">
-			<fileset dir="${jboss.server.default.dir}/deploy">
-				<!-- Skip one file that is replaced -->
-				<exclude name="jbossweb.sar/META-INF/jboss-service.xml"/>
-				<include name="*"/>
-				<include name="**/*"/>
-			</fileset>
-		</copy>
-		<!-- Technically, this isn't necessary any longer (the filtering part),
-		 but it does no harm, and may be needed again in the future.  -->
-		<copy todir="${tapestry.deploy.dir}" filtering="true">
-			<fileset dir="config/jboss/deploy"/>
-			<filterset>
-				<filter token="user.dir" value="${user.dir}"/>
-				<filter token="jboss.dir" value="${jboss.dir}"/>
-			</filterset>
-		</copy>
-		<!-- Set a flag if the vlib already exists, then extract it if necessary. -->
-		<mkdir dir="${tapestry.db.dir}"/>
-		<available file="${tapestry.db.dir}/tapestry.conf"
-			property="tapestry.db.exists"/>
-		<antcall target="unpack-tapestry-database"/>
-	</target>
-	
-	<target name="unpack-tapestry-database"
-		description="Unpacks the Tapestry demos database."
-		unless="tapestry.db.exists">
-		<unzip src="config/jboss/tapestry-db.zip" dest="${tapestry.db.dir}"/>
-	</target>
-	
-	<target name="deploy-jboss-demos" depends="check-for-jboss-dir,build-workbench,build-vlib"
-		description="Deploys the demos and Tapestry frameworks into JBoss.">
-		<copy todir="${tapestry.deploy.dir}">
-			<fileset dir="${examples.dir}">
-				<include name="${vlib.ear}"/>
-				<include name="${workbench.war}"/>
-			</fileset>		
-		</copy>
-	</target>
-	
-	<target name="run-jboss" depends="deploy-jboss-demos"
-		description="Launch the JBoss application server.">
-		<delete dir="${tapestry.private.dir}" quiet="true"/>
-		<mkdir dir="${tapestry.private.dir}"/>
-		<java fork="true" dir="${jboss.dir}/bin" classname="org.jboss.Main">
-			<!-- Launch using the tapestry configuration, not the default. -->
-			<arg line="--configuration=tapestry"/>
-			<classpath>
-				<pathelement location="${jboss.dir}/bin/run.jar"/>
-				<!-- Include this so that the JMX control panel (based on JSPs) can work. -->
-				<pathelement location="${java.home}/../lib/tools.jar"/>
-			</classpath>
-			<!-- Enable debugging -->
-			<jvmarg line="-showversion -Xdebug -Xnoagent"/>
-			<jvmarg
-				line="-Xrunjdwp:transport=dt_socket,suspend=n,server=y,address=20500"
-				/>
-			<!-- These allow private assets to be exported as static
-	  		 files.  This coordinates with portions of
-	  		 config/deploy/jbossweb.sar/META-INF/jboss-service.xml -->
-			<sysproperty key="org.apache.tapestry.asset.dir"
-				value="${tapestry.private.dir}"/>
-			<sysproperty key="org.apache.tapestry.asset.URL" value="/private"/>
-			<!-- The following is probably only necessary under Windows.  Jetty gets
-	  	     tripped up by the fact that pathnames are case-insensitive.  -->
-			<sysproperty key="org.mortbay.util.FileResource.checkAliases"
-				value="false"/>
-		</java>
-	</target>
-		
-	<target name="deploy-tomcat"
-		depends="check-for-tomcat-dir,build-workbench"
-		description="Deploys the Workbench application into Tomcat.">
-					
-		<copy file="${examples.dir}/${workbench.war}" todir="${tomcat.dir}/webapps"/>
-
-	</target>
-	
-	<target name="check-for-jboss-dir">
-		<available property="exists.jboss.dir" type="dir" file="${jboss.dir}"/>
-		<fail unless="jboss.dir"
-			message="Property jboss.dir not specified in config/build.properties."
-			/>
-		<fail unless="exists.jboss.dir"
-			message="Directory ${jboss.dir} (jboss.dir from config/build.properties) does not exist."
-			/>
-	</target>
-	
-	<target name="check-for-tomcat-dir">
-		<available property="exists.tomcat.dir" type="dir" file="${tomcat.dir}"
-			/>
-		<fail unless="tomcat.dir"
-			message="Property tomcat.dir not specified in config/build.properties."
-			/>
-		<fail unless="exists.tomcat.dir"
-			message="Directory ${tomcat.dir} (tomcat.dir from config/build.properties) does not exist."
-			/>
-	</target>
-	
-	<target name="check-for-clover-dir">
-		<available property="exists.clover.dir" type="dir" file="${clover.dir}"
-			/>
-		<fail unless="clover.dir"
-			message="Property clover.dir not specified in config/build.properties."
-			/>
-		<fail unless="exists.clover.dir"
-			message="Directory ${clover.dir} (clover.dir from config/build.properties) does not exist."
-			/>
-	</target>
-	
-	<target name="check-for-jython-dir">
-		<available property="exists.jython.dir" type="dir" file="${jython.dir}"
-			/>
-		<fail unless="jython.dir"
-			message="Property jython.dir not specified in config/build.properties."
-			/>
-		<fail unless="exists.jython.dir"
-			message="Directory ${jython.dir} (jython.dir from config/build.properties) does not exist."
-			/>
-	</target>
-	
-	<target name="check-for-jetty-dir">
-		<available property="exists.jetty.dir" type="dir" file="${jetty.dir}" />
-		<fail unless="jetty.dir"
-			message="Property jetty.dir not specified in config/build.properties."
-			/>
-		<fail unless="exists.jetty.dir"
-			message="Directory ${jetty.dir} (jetty.dir from config/build.properties) does not exist."
-			/>
-	</target>
-	
-	<target name="check-for-forrest-dir" depends="check-defined-forrest-dir,check-downloaded-forrest">
-	</target>
-	
-	<target name="site" description="Generates static HTML documentation" depends="check-for-forrest-dir">
-		<ant antfile="${installed.forrest.dir}/forrest.antproxy.xml" target="site">
-			<property name="forrest.home" value="${installed.forrest.dir}"/>
-		</ant>
-	</target>
-
-	<target name="validate" depends="check-for-forrest-dir" description="Validates XML documentation files">
-		<ant antfile="${installed.forrest.home}/forrest.antproxy.xml" target="validate"/>
-	</target>
-
-	<target name="check-defined-forrest-dir" if="forrest.dir">
-		<available property="exists.forrest.dir" type="dir" file="${forrest.dir}"/>
-		<fail unless="exists.forrest.dir"
-	        message="Directory ${forrest.dir} (forrest.dir from config/build.properties) does not exist."/>
-		<property name="installed.forrest.dir" value="${forrest.dir}"/>
-	</target>		
-	
-	<target name="check-downloaded-forrest" unless="forrest.home" depends="proxyflags" 
-		description="Download forrest package">
-		<echo message="Property forrest.dir not specified in config/build.properties"/>
-		<echo message="Downloading Forrest"/>
-		<antcall target="downloadzip">
-			<param name="sourcefile" value="${forrestdl.loc}"/>
-			<param name="dlfile" value="${forrestdl.ant.xml}"/>
-			<param name="destdir" value="${ext.download.dir}"/>
-		</antcall>
-		<property name="installed.forrest.dir" value="${forrestdl.home}"/>
-	</target>
-
-	<target name="download-ext-install" 
-		depends="download-ext-framework, download-ext-examples" 
-		description="Download binary packages for the install target"/>
-
-	<target name="download-ext-framework" depends="proxyflags" 
-		description="Download binary packages for compiling the framework and examples" >
-		<mkdir dir="${ext.download.dir}" />
-    	
-		<antcall target="installgz">
-			<param name="sourcefile" value="${jdom.loc}"/>
-			<param name="dlfile" value="${jdom.jar}"/>
-			<param name="destfile" value="${jdom.ext.jar}"/>
-			<param name="destdir" value="${ext.download.dir}"/>
-		</antcall>
-		
-		<antcall target="installzip">
-		  <param name="sourcefile" value="${javassist.loc}"/>
-		  <param name="dlfile" value="${javassist.jar}"/>
-		  <param name="destfile" value="${javassist.ext.jar}"/>
-		  <param name="destdir" value="${javassist.dest}"/>
-		</antcall>
-		
-		<antcall target="installjar">
-		  <param name="sourcefile" value="${ognl.loc}"/>
-		  <param name="destfile" value="${ognl.dest}"/>
-		</antcall>
-
-	</target>
-
-	<target name="download-ext-examples" depends="proxyflags" 
-		description="Download binary packages for compiling the examples" >
-		<mkdir dir="${ext.download.dir}" />
-    
-		<antcall target="installzip">
-			<param name="sourcefile" value="${mckoi.loc}"/>
-			<param name="dlfile" value="${mckoi.jar}"/>
-			<param name="destfile" value="${mckoi.ext.jar}"/>
-			<param name="destdir" value="${ext.download.dir}"/>
-		</antcall>
-	</target>
-
-	<target name="download-ext-junit" depends="proxyflags" 
-		description="Download binary packages for compiling the unit tests" >
-		<mkdir dir="${ext.download.dir}" />
-    
-		<antcall target="installzip">
-			<param name="sourcefile" value="${junit.loc}"/>
-			<param name="dlfile" value="${junit.jar}"/>
-			<param name="destfile" value="${junit.ext.jar}"/>
-			<param name="destdir" value="${ext.download.dir}"/>
-		</antcall>
-
-		<antcall target="installgz">
-			<param name="sourcefile" value="${jdom.loc}"/>
-			<param name="dlfile" value="${jdom.jar}"/>
-			<param name="destfile" value="${jdom.ext.jar}"/>
-			<param name="destdir" value="${ext.download.dir}"/>
-		</antcall>
-	</target>
-
-	<target name="download-ext-doc" depends="proxyflags" 
-		description="Download binary packages for compiling the documentation" >
-		<mkdir dir="${ext.download.dir}" />
-    
-		<antcall target="downloadfile">
-			<param name="sourcefile" value="${docbookxml.loc}"/>
-			<param name="destfile" value="${docbookxml.file}"/>
-			<param name="destdir" value="${ext.dist.dir}"/>
-		</antcall>
-
-		<antcall target="downloadfile">
-			<param name="sourcefile" value="${docbookxsl.loc}"/>
-			<param name="destfile" value="${docbookxsl.file}"/>
-			<param name="destdir" value="${ext.dist.dir}"/>
-		</antcall>
-	</target>
-
-    <target name="download-alert" unless="download-alert-shown">
-    <echo>
-*********************************************************************************
-* Due to the restrictions of the Apache Software License 2.0, it is necessary   *
-* to download some additional libraries that use non-ASL licenses. You should   *
-* be aware that redistribution of these files are regulated by their individual *
-* licenses. If you experience problems with the download, consult the file      * 
-* ext-dist/README.html for details on how to configure the build to work        *
-* around a firewall.                                                            *
-*********************************************************************************
-    </echo>
-    
-    <!-- This doesn't work so well ... the property must be getting lost after
-         each antcall completes. -->
-         
-    <property name="download-alert-shown" value="you-betcha"/>
-    
-    </target>
-
-    <target name="installjar" unless="exist" depends="setproxy,testexistdest,download-alert">
-      <get src="${sourcefile}" dest="${destfile}"/>
-    </target>
-
-	<target name="installgz" unless="exist" depends="setproxy,testexistdest">
-		<antcall target="downloadgz"/>
-		<copy file="${dlfile}" tofile="${destfile}"/>
-	</target>
-  
-	<target name="downloadgz" unless="exist" depends="setproxy,testexist,download-alert">
-		<mkdir dir="${ext.download.dir}"/>
-		<!-- Download and extract the package -->
-		<get src="${sourcefile}" dest="${ext.download.dir}/file.tar.gz" />
-		<gunzip src="${ext.download.dir}/file.tar.gz" dest="${ext.download.dir}/file.tar"/>
-		<untar src="${ext.download.dir}/file.tar" dest="${ext.download.dir}"/>
-		<delete file="${ext.download.dir}/file.tar"/>
-		<delete file="${ext.download.dir}/file.tar.gz"/>
-	</target>
-
-	<target name="installzip" unless="exist" depends="setproxy,testexistdest">
-		<antcall target="downloadzip"/>
-		<copy file="${dlfile}" tofile="${destfile}"/>
-	</target>
-  
-	<target name="downloadzip" unless="exist" depends="setproxy,testexist,download-alert">
-		<!-- Download and extract the package -->
-		<mkdir dir="${ext.download.dir}"/>
-		<get src="${sourcefile}" dest="${ext.download.dir}/file.zip" />
-		<mkdir dir="${destdir}" />
-		<unzip src="${ext.download.dir}/file.zip" dest="${destdir}"/>
-		<delete file="${ext.download.dir}/file.zip"/>
-	</target>
-
-	<target name="downloadfile" unless="exist" depends="setproxy,testexistdest">
-		<!-- Download extract the file -->
-		<mkdir dir="${destdir}" />
-		<get src="${sourcefile}" dest="${destfile}" />
-	</target>
-
-	<target name="proxyflags">
-		<!-- check proxy parameters. -->
-		<condition property="useproxy">
-			<equals arg1="${proxy.use}" arg2="on" />
-		</condition>
-	</target>
-
-	<target name="setproxy"  if="useproxy">
-		<taskdef name="setproxy"
-			classname="org.apache.tools.ant.taskdefs.optional.net.SetProxy" />
-		<setproxy proxyhost="${proxy.host}" proxyport="${proxy.port}"/> 
-		<echo message="Using ${proxy.host}:${proxy.port} to download ${sourcefile}"/>
-	</target>
-
-	<target name="testexistdest">
-		<echo message="Testing for ${destfile}"/>
-		<available file="${destfile}" property="exist"/>
-	</target>
-
-	<target name="testexist">
-		<echo message="Testing for ${dlfile}"/>
-		<available file="${dlfile}" property="exist"/>
-	</target>
-
-</project>
diff --git a/3.0.4/config/.cvsignore b/3.0.4/config/.cvsignore
deleted file mode 100644
index 9a96d4a..0000000
--- a/3.0.4/config/.cvsignore
+++ /dev/null
@@ -1,2 +0,0 @@
-build.properties
-build.properties
diff --git a/3.0.4/config/Version.properties b/3.0.4/config/Version.properties
deleted file mode 100644
index 2cd3a42..0000000
--- a/3.0.4/config/Version.properties
+++ /dev/null
@@ -1,5 +0,0 @@
-# $Id$
-#
-# Stores the version number of the framework.
-
-framework.version=3.0.4
diff --git a/3.0.4/config/build.properties.sample b/3.0.4/config/build.properties.sample
deleted file mode 100644
index df89514..0000000
--- a/3.0.4/config/build.properties.sample
+++ /dev/null
@@ -1,32 +0,0 @@
-# $Id$
-# This file is used to configure the Tapestry build.
-# Copy it as "build.properties" and fill in the necessary data.
-
-# The absolute path to the directory where external distributions 
-# used in the building process will be downloaded and installed
-base.path=/usr/share/java
-
-# The absolute path to the directory containing the JBoss installation.
-# Required to execute the configure and run-jboss targets.
-jboss.dir=
-
-# The absolute path to the directory containing the Tomcat installation.
-# Required to execute the deploy-tomcat target.
-# 
-tomcat.dir=
-
-# The absolute path to the directory containing the Jetty installation.
-# Required to execute the run-workbench target.
-jetty.dir=
-
-# The absolute path to the directory containing the Jython installation.
-# Required to execute the junit target.
-jython.dir=
-
-# Home for xml-forrest, used to build documentation.
-# Available from :pserver:anoncvs@cvs.apache.org:/home/cvspublic as module xml-forrest
-# Build forrest, then set to the shbat directory, i.e.
-# C:/workspace/xml-forrest/build/dist/shbat
-
-forrest.home=
-
diff --git a/3.0.4/config/common.properties b/3.0.4/config/common.properties
deleted file mode 100644
index 94d02b0..0000000
--- a/3.0.4/config/common.properties
+++ /dev/null
@@ -1,94 +0,0 @@
-# $Id$
-#
-# Specifies some general properties used throughout.
-# Each build.xml must specify root.dir (as a relative path).
-
-lib.dir=lib
-
-root.lib.dir=${root.dir}/${lib.dir}
-
-ext.dist.dir=${root.dir}/ext-dist
-
-root.config.dir=${root.dir}/config
-
-framework.jar=tapestry-${framework.version}.jar
-contrib.jar=tapestry-contrib-${framework.version}.jar
-
-examples.dir=${root.lib.dir}/examples
-
-vlib.war=vlib.war
-vlib.ear=vlib.ear
-vlibbeans.jar=vlibbeans.jar
-workbench.war=workbench.war
-wap.war=wap.war
-
-ext.download.dir=${ext.dist.dir}/downloads
-
-# Names of directories under lib
-
-ext.dir=ext
-j2ee.dir=j2ee
-runtime.dir=runtime
-
-jboss.lib.dir=${jboss.dir}/lib
-jboss.client.dir=${jboss.dir}/client
-jboss.server.all.lib.dir=${jboss.dir}/server/all/lib
-
-# Directory containing source code and package resources
-src.dir=src
-
-# Directory containing compiled Java code
-classes.dir=classes
-
-# Used as part of copyrights
-
-copyright.years=2000-2004
-
-# ----- JUnit Unit Test Suite, version 3.8 or later -----
-junit.home=${ext.download.dir}/junit3.8.1
-junit.lib=${junit.home}
-junit.jar=${junit.lib}/junit.jar
-junit.ext.jar=${ext.dist.dir}/junit.jar
-junit.loc=http://telia.dl.sourceforge.net/sourceforge/junit/junit3.8.1.zip
-
-# ----- JDOM Library, version 1.0 -----
-jdom.home=${ext.download.dir}/jdom-1.0
-jdom.lib=${jdom.home}
-jdom.jar=${jdom.lib}/build/jdom.jar
-jdom.ext.jar=${ext.dist.dir}/jdom-1.0.jar
-jdom.loc=http://www.jdom.org/dist/binary/jdom-1.0.tar.gz
-
-# ----- McKoi Pure Java Database, version 1.0.2 -----
-mckoi.home=${ext.download.dir}/mckoi1.0.2
-mckoi.lib=${mckoi.home}
-mckoi.jar=${mckoi.lib}/mckoidb.jar
-mckoi.ext.jar=${ext.dist.dir}/mckoidb.jar
-mckoi.loc=http://www.mckoi.com/database/ver/mckoi1.0.2.zip
-
-# ----- DocBook XML, version 4.1.2 -----
-docbookxml.file=${ext.dist.dir}/docbkx412.zip
-docbookxml.loc=http://www.docbook.org/xml/4.1.2/docbkx412.zip
-
-# ----- DocBook XSL, version 1.64.1 -----
-docbookxsl.file=${ext.dist.dir}/docbook-xsl-1.64.1.zip
-docbookxsl.loc=http://telia.dl.sourceforge.net/sourceforge/docbook/docbook-xsl-1.64.1.zip
-
-# ----- Apache Forrest, version 0.5.1 -----
-forrestdl.home=${ext.download.dir}/apache-forrest-0.5.1-bin
-forrestdl.ant.xml=${forrestdl.home}/forrest.antproxy.xml
-forrestdl.loc=http://archive.apache.org/dist/forrest/pre-0.6/apache-forrest-0.5.1-bin.zip
-
-# ---- OGNL ----
-ognl.version=2.6.7
-ognl.loc=http://ognl.org/${ognl.version}/ognl-${ognl.version}.jar
-ognl.dest=${root.lib.dir}/${ext.dir}/ognl-${ognl.version}.jar
-
-# ---- Javassist ----
-
-javassist.version=2.5.1
-javassist.loc=http://umn.dl.sourceforge.net/sourceforge/jboss/javassist-${javassist.version}.zip
-javassist.dest=${ext.download.dir}/javassist-${javassist.version}
-javassist.ext.jar=${root.lib.dir}/${ext.dir}/javassist-${javassist.version}.jar
-javassist.jar=${javassist.dest}/javassist.jar
-
-
diff --git a/3.0.4/config/jboss/conf/auth.conf b/3.0.4/config/jboss/conf/auth.conf
deleted file mode 100644
index 2fe9341..0000000
--- a/3.0.4/config/jboss/conf/auth.conf
+++ /dev/null
@@ -1,12 +0,0 @@
-// This file is now obsolete but is read for backward compatability
-// Use the login-config.xml file instead
-// $Id$
-
-simple {
-    // Very simple login module: 
-    // any user name is accepted.
-    // password should either coincide with user name or be null, 
-    // all users have role "guest", 
-    // users with non-null password also have role "user"
-    org.jboss.security.auth.spi.SimpleServerLoginModule required;
-};
diff --git a/3.0.4/config/jboss/conf/jboss-minimal.xml b/3.0.4/config/jboss/conf/jboss-minimal.xml
deleted file mode 100644
index 22dec8e..0000000
--- a/3.0.4/config/jboss/conf/jboss-minimal.xml
+++ /dev/null
@@ -1,93 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE server>
-<!-- $Id$ -->
-
-<!-- ===================================================================== -->
-<!--                                                                       -->
-<!--  A minimal JBoss Server Configuration                                 -->
-<!--                                                                       -->
-<!-- ===================================================================== -->
-
-<server>
-
-  <!-- Load all jars from the JBOSS_DIST/server/<config>/lib directory. This
-    can be restricted to specific jars by specifying them in the archives
-    attribute.
-   -->
-  <classpath codebase="lib" archives="*"/>
-
-  <!-- ==================================================================== -->
-  <!-- Log4j Initialization                                                 -->
-  <!-- ==================================================================== -->
-  <mbean code="org.jboss.logging.Log4jService"
-    name="jboss.system:type=Log4jService,service=Logging">
-    <attribute name="ConfigurationURL">resource:log4j.xml</attribute>
-  </mbean>
-
-  <!-- ==================================================================== -->
-  <!-- JNDI                                                                 -->
-  <!-- ==================================================================== -->
-
-  <mbean code="org.jboss.naming.NamingService"
-	 name="jboss:service=Naming">
-    <!-- The listening port for the bootstrap JNP service. Set this to -1
-      to run the NamingService without the JNP invoker listening port.
-    -->
-    <attribute name="Port">1099</attribute>
-  </mbean>
-  <mbean code="org.jboss.naming.JNDIView" 
-	 name="jboss:service=JNDIView"/>
-
-  <!-- ==================================================================== -->
-  <!-- Deployment Scanning                                                  -->
-  <!-- ==================================================================== -->
-
-  <!-- An mbean for hot deployment/undeployment of archives.
-  -->
-  <mbean code="org.jboss.deployment.scanner.URLDeploymentScanner"
-	 name="jboss.deployment:type=DeploymentScanner,flavor=URL">
-
-    <depends optional-attribute-name="Deployer">jboss.system:service=MainDeployer</depends>
-
-    <!-- The URLComparator can be used to specify a deployment ordering
-         for deployments found in a scanned directory.  The class specified
-         must be an implementation of java.util.Comparator, it must be able
-         to compare two URL objects, and it must have a no-arg constructor.
-         Two deployment comparators are shipped with JBoss:
-           - org.jboss.deployment.DeploymentSorter 
-             Sorts by file extension, as follows:
-               "sar", "service.xml", "rar", "jar", "war", "wsr", "ear", "zip", 
-               "*"
-           - org.jboss.deployment.scanner.PrefixDeploymentSorter
-             If the name portion of the url begins with 1 or more digits, those 
-             digits are converted to an int (ignoring leading zeroes), and 
-             files are deployed in that order.  Files that do not start with 
-             any digits will be deployed last, and they will be sorted by
-             extension as above with DeploymentSorter.
-    -->
-    <attribute name="URLComparator">org.jboss.deployment.DeploymentSorter</attribute>
-    <!-- The Filter specifies a java.io.FileFilter for scanned
-         directories.  Any file not accepted by this filter will not be
-         deployed.  The org.jboss.deployment.scanner.DeploymentFilter 
-         rejects the following patterns:
-             "#*", "%*", ",*", ".*", "_$*", "*#", "*$", "*%", "*.BAK", 
-             "*.old", "*.orig", "*.rej", "*.bak", "*,v", "*~", ".make.state", 
-             ".nse_depinfo", "CVS", "CVS.admin", "RCS", "RCSLOG", "SCCS", 
-             "TAGS", "core", "tags"
-    -->
-    <attribute name="Filter">org.jboss.deployment.scanner.DeploymentFilter</attribute>
-
-    <attribute name="ScanPeriod">5000</attribute>
-
-    <!-- URLs are comma seperated and unprefixed arguments are considered
-       file URLs and resolve relative to server home(JBOSS_DIST/server/default)
-       unless the given path is absolute. Any referenced directories cannot
-       be unpackaged archives, use the parent directory of the unpacked
-       archive.
-     -->
-    <attribute name="URLs">
-       ./deploy
-    </attribute>
-  </mbean>
-
-</server>
diff --git a/3.0.4/config/jboss/conf/jboss-service.xml b/3.0.4/config/jboss/conf/jboss-service.xml
deleted file mode 100644
index e52d927..0000000
--- a/3.0.4/config/jboss/conf/jboss-service.xml
+++ /dev/null
@@ -1,336 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE server>
-<!-- $Id$ -->
-
-<!-- ===================================================================== -->
-<!--                                                                       -->
-<!--  JBoss Server Configuration                                           -->
-<!--                                                                       -->
-<!-- ===================================================================== -->
-
-<server>
-
-  <!-- Load all jars from the JBOSS_DIST/server/<config>/lib directory. This
-    can be restricted to specific jars by specifying them in the archives
-    attribute.
-   -->
-  <classpath codebase="lib" archives="*"/>
-
-  <!-- ==================================================================== -->
-  <!-- PropertyEditors and System Properties                                -->
-  <!-- ==================================================================== -->
-  <mbean code="org.jboss.varia.property.PropertyEditorManagerService"
-    name="jboss:type=Service,name=BootstrapEditors">
-    <!-- Preload all custom editors for VMs that don't use the thread
-         context class loader when searching for PropertyEditors
-    -->
-    <attribute name="BootstrapEditors">
-       java.math.BigDecimal=org.jboss.util.propertyeditor.BigDecimalEditor
-       java.lang.Boolean=org.jboss.util.propertyeditor.BooleanEditor
-       java.lang.Class=org.jboss.util.propertyeditor.ClassEditor
-       java.util.Date=org.jboss.util.propertyeditor.DateEditor
-       java.io.File=org.jboss.util.propertyeditor.FileEditor
-       java.net.InetAddress=org.jboss.util.propertyeditor.InetAddressEditor
-       java.lang.Integer=org.jboss.util.propertyeditor.IntegerEditor
-       javax.management.ObjectName=org.jboss.util.propertyeditor.ObjectNameEditor
-       java.util.Properties=org.jboss.util.propertyeditor.PropertiesEditor
-       [Ljava.lang.String;=org.jboss.util.propertyeditor.StringArrayEditor
-       java.net.URL=org.jboss.util.propertyeditor.URLEditor
-    </attribute>
-  </mbean>
-  <mbean code="org.jboss.varia.property.SystemPropertiesService"
-    name="jboss:type=Service,name=SystemProperties">
-    <!-- The invokerServletPath property gives the public URL to the
-      org.jboss.invocation.http.servlet.InvokerServlet used by the
-      HTTP proxy for RMI/HTTP. This is only needed if the http-invoker.sar
-      is deployed.
-    -->
-    <attribute name="Properties">
-      invokerServletPath=http://localhost:8080/invoker/JMXInvokerServlet
-    </attribute>
-    <!-- Load properties from each of the given comma seperated URLs
-    <attribute name="URLList">
-      http://somehost/some-location.properties,
-      ./conf/somelocal.properties
-    </attribute>
-    -->
-  </mbean>
-
-  <!-- ==================================================================== -->
-  <!-- Log4j Initialization                                                 -->
-  <!-- ==================================================================== -->
-  <mbean code="org.jboss.logging.Log4jService"
-    name="jboss.system:type=Log4jService,service=Logging">
-    <attribute name="ConfigurationURL">resource:log4j.xml</attribute>
-  </mbean>
-
-  <!-- ==================================================================== -->
-  <!-- Class Loading                                                        -->
-  <!-- ==================================================================== -->
-
-  <mbean code="org.jboss.web.WebService"
-	 name="jboss:service=Webserver">
-    <attribute name="Port">8083</attribute>
-    <!-- Should resources and non-EJB classes be downloadable -->
-    <attribute name="DownloadServerClasses">true</attribute>
-  </mbean>
-
-  <!-- ==================================================================== -->
-  <!-- JSR-77 Single JBoss Server Management Domain                         -->
-  <!-- ==================================================================== -->
-
-  <mbean code="org.jboss.management.j2ee.SingleJBossServerManagement"
-	 name="jboss.management.single:j2eeType=J2EEDomain,name=Manager" >
-  </mbean>
-
-  <!-- ==================================================================== -->
-  <!-- JNDI                                                                 -->
-  <!-- ==================================================================== -->
-
-  <mbean code="org.jboss.naming.NamingService"
-	 name="jboss:service=Naming">
-    <!-- The listening port for the bootstrap JNP service. Set this to -1
-      to run the NamingService without the JNP invoker listening port.
-    -->
-    <attribute name="Port">1099</attribute>
-  </mbean>
-  <mbean code="org.jboss.naming.JNDIView" 
-	 name="jboss:service=JNDIView"/>
-
-  <!-- ==================================================================== -->
-  <!-- Security                                                             -->
-  <!-- ==================================================================== -->
-
-  <mbean code="org.jboss.security.plugins.SecurityConfig"
-	 name="jboss.security:name=SecurityConfig">
-    <attribute name="LoginConfig">jboss.security:service=XMLLoginConfig</attribute>
-  </mbean>
-  <mbean code="org.jboss.security.auth.login.XMLLoginConfig"
-	 name="jboss.security:service=XMLLoginConfig">
-    <attribute name="ConfigResource">login-config.xml</attribute>
-  </mbean>
-
-  <!-- JAAS security manager and realm mapping -->
-  <mbean code="org.jboss.security.plugins.JaasSecurityManagerService"
-	 name="jboss.security:service=JaasSecurityManager">
-    <attribute name="SecurityManagerClassName">
-      org.jboss.security.plugins.JaasSecurityManager
-    </attribute>
-  </mbean>
-
-  <!-- ==================================================================== -->
-  <!-- Transactions                                                         -->
-  <!-- ==================================================================== -->
-
-  <mbean code="org.jboss.tm.XidFactory" 
-	 name="jboss:service=XidFactory">
-  </mbean>
- 
-  <mbean code="org.jboss.tm.TransactionManagerService" 
-	 name="jboss:service=TransactionManager">
-    <attribute name="TransactionTimeout">300</attribute>
-    <depends optional-attribute-name="XidFactory">jboss:service=XidFactory</depends>
-  </mbean>
-
-  <!-- 
-     | Uncomment to use Tyrex (tyrex.exolab.org) transaction manager plugin
-     | instead of the org.jboss.tm.TransactionManagerService and comment out
-     | the TransactionManagerService above.
-     | Make sure you have Xerces in lib/. At the moment JBoss does not
-     | ship Xerces as part of distribution. Version 1.x seems to work fine,
-     | though 2.x should as well, use whichever you like.
-     |
-  <mbean code="org.jboss.tm.plugins.tyrex.TransactionManagerService"
-         name="jboss:service=TransactionManager">
-        <attribute name="ConfigFileName">../conf/default/domain.xml</attribute>
-  </mbean>
-  -->
-
-  <mbean code="org.jboss.tm.usertx.server.ClientUserTransactionService"
-	 name="jboss:service=ClientUserTransaction">
-  </mbean>
-
-  <!-- The CachedConnectionManager is used partly to relay started UserTransactions to 
-    open connections so they may be enrolled in the new tx-->
-  <mbean code="org.jboss.resource.connectionmanager.CachedConnectionManager" name="jboss.jca:service=CachedConnectionManager">
-  </mbean>
-
-
-  <!-- ==================================================================== -->
-  <!-- The deployers...                                                     -->
-  <!-- ==================================================================== -->
-
-  <!-- Main Deployer and SARDeployer are provided by main -->
-
-  <!-- EJB deployer, remove to disable EJB behavior-->
-  <mbean code="org.jboss.ejb.EJBDeployer" name="jboss.ejb:service=EJBDeployer">
-    <attribute name="VerifyDeployments">true</attribute>
-    <attribute name="ValidateDTDs">false</attribute>
-    <attribute name="MetricsEnabled">false</attribute>
-    <attribute name="VerifierVerbose">true</attribute>
-    <!-- Add a dependency on the JMS provider(jms-service.xml) for MDBs. If
-      you are not using MDBs and JMS remove these.
-    -->
-    <depends>jboss.mq:service=JMSProviderLoader,name=JBossMQProvider</depends>
-    <depends>jboss.mq:service=ServerSessionPoolMBean,name=StdJMSPool</depends>
-  </mbean>
-
-  <!-- EAR deployer -->
-  <mbean code="org.jboss.deployment.EARDeployer" name="jboss.j2ee:service=EARDeployer">
-  </mbean>
-  
-  <!-- WAR Deployer is provided by tomcat or jetty -->
-  <!-- RAR Deployer is provided by the rar.sar package -->
-
-
-  <!-- ==================================================================== -->
-  <!-- JBoss Server Management                                              -->
-  <!-- ==================================================================== -->
-
-  <!-- AS Temporary not available
-  <mbean code="org.jboss.management.ServerDataCollector"
-         name="jboss.management:service=Collector">
-    <attribute name="RefreshSleep">5000</attribute>
-  </mbean>
-  -->
-
-  <!-- ==================================================================== -->
-  <!-- Monitoring and Management                                            -->
-  <!-- ==================================================================== -->
-
-  <!-- Uncomment to enable JMX monitoring of the bean cache
-  <mbean code="org.jboss.monitor.BeanCacheMonitor" 
-         name="jboss.monitor:name=BeanCacheMonitor"/>
-  -->
-
-  <!-- Uncomment to enable JMX monitoring of the entity bean locking
-  <mbean code="org.jboss.monitor.EntityLockMonitor" 
-         name="jboss.monitor:name=EntityLockMonitor"/>
-  -->
-
-  
-
-  <!-- ==================================================================== -->
-  <!-- Invokers to the JMX node                                             -->
-  <!-- ==================================================================== -->
-
-  <!-- RMI/JRMP invoker -->
-  <mbean code="org.jboss.invocation.jrmp.server.JRMPInvoker" 
-         name="jboss:service=invoker,type=jrmp">
-    <attribute name="RMIObjectPort">4444</attribute>
-    <!--
-    <attribute name="RMIClientSocketFactory">custom</attribute>
-    <attribute name="RMIServerSocketFactory">custom</attribute>
-    <attribute name="RMIServerSocketAddr">custom</attribute>
-    -->
-  </mbean>
-  
-  <mbean code="org.jboss.invocation.pooled.server.PooledInvoker" 
-         name="jboss:service=invoker,type=pooled">
-  </mbean>
-
-  <mbean code="org.jboss.invocation.local.LocalInvoker" 
-         name="jboss:service=invoker,type=local">
-  </mbean>
-
-  <!-- ==================================================================== -->
-  <!-- Deployment Scanning                                                  -->
-  <!-- ==================================================================== -->
-
-  <!-- Uncomment to enable caching of deployment units
-  <mbean code="org.jboss.deployment.cache.FileDeploymentStore"
-	 name="jboss.deployment:type=DeploymentStore,flavor=File">
-    <attribute name="DirectoryName">data/deployment-cache</attribute>
-  </mbean>
-
-  <mbean code="org.jboss.deployment.cache.DeploymentCache"
-	 name="jboss.deployment:type=DeploymentCache">
-    <depends optional-attribute-name="Deployer">jboss.system:service=MainDeployer</depends>
-    <depends optional-attribute-name="Store">jboss.deployment:type=DeploymentStore,flavor=File</depends>
-  </mbean>
-  -->
-
-  <!-- An mbean for hot deployment/undeployment of archives.
-  -->
-  <mbean code="org.jboss.deployment.scanner.URLDeploymentScanner"
-	 name="jboss.deployment:type=DeploymentScanner,flavor=URL">
-
-    <!-- Uncomment (and comment/remove version below) to enable usage of the
-      DeploymentCache
-    <depends optional-attribute-name="Deployer">jboss.deployment:type=DeploymentCache</depends>
-    -->
-    <depends optional-attribute-name="Deployer">jboss.system:service=MainDeployer</depends>
-
-    <!-- The URLComparator can be used to specify a deployment ordering
-         for deployments found in a scanned directory.  The class specified
-         must be an implementation of java.util.Comparator, it must be able
-         to compare two URL objects, and it must have a no-arg constructor.
-         Two deployment comparators are shipped with JBoss:
-           - org.jboss.deployment.DeploymentSorter 
-             Sorts by file extension, as follows:
-               "sar", "service.xml", "rar", "jar", "war", "wsr", "ear", "zip", 
-               "*"
-           - org.jboss.deployment.scanner.PrefixDeploymentSorter
-             If the name portion of the url begins with 1 or more digits, those 
-             digits are converted to an int (ignoring leading zeroes), and 
-             files are deployed in that order.  Files that do not start with 
-             any digits will be deployed first, and they will be sorted by
-             extension as above with DeploymentSorter.
-    -->
-    <attribute name="URLComparator">org.jboss.deployment.DeploymentSorter</attribute>
-    <!--
-    <attribute name="URLComparator">org.jboss.deployment.scanner.PrefixDeploymentSorter</attribute>
-    -->
-
-    <!-- The Filter specifies a java.io.FileFilter for scanned
-         directories.  Any file not accepted by this filter will not be
-         deployed.  The org.jboss.deployment.scanner.DeploymentFilter 
-         rejects the following patterns:
-             "#*", "%*", ",*", ".*", "_$*", "*#", "*$", "*%", "*.BAK", 
-             "*.old", "*.orig", "*.rej", "*.bak", "*,v", "*~", ".make.state", 
-             ".nse_depinfo", "CVS", "CVS.admin", "RCS", "RCSLOG", "SCCS", 
-             "TAGS", "core", "tags"
-    -->
-    <attribute name="Filter">org.jboss.deployment.scanner.DeploymentFilter</attribute>
-
-    <attribute name="ScanPeriod">5000</attribute>
-
-    <!-- URLs are comma seperated and unprefixed arguments are considered
-       file URLs and resolve relative to server home(JBOSS_DIST/server/default)
-       unless the given path is absolute. Any referenced directories cannot
-       be unpackaged archives, use the parent directory of the unpacked
-       archive.
-     -->
-    <attribute name="URLs">
-       ./deploy
-    </attribute>
-  </mbean>
-
-  <!--  An alternate hot deployer mbean. Use URLDirectoryScanner if you need to
-    specify which urls are directories to scan, and which are urls to be
-    deployed directly. URLDeploymentScanner assumes that all directories are to
-    be scanned, which can cause problems if directory referred to in the
-    deploy attribute is an exploded archive.
-  <mbean code="org.jboss.deployment.scanner.URLDirectoryScanner"
-       name="jboss.deployment:type=DeploymentScanner,flavor=URL">
-
-    <depends optional-attribute-name="Deployer">jboss.system:service=MainDeployer</depends>
-    <attribute name="URLComparator">org.jboss.deployment.DeploymentSorter</attribute>
-    <attribute name="Filter">org.jboss.deployment.scanner.DeploymentFilter</attribute>
-    <attribute name="ScanPeriod">5000</attribute>
-    /* Each entry specifies either a dir (directory to be scanned),
-      or url (url to be deployed). Like the URLs for the DeploymentScanner
-      above, a file: protocol will be assumed if not specified otherwise.
-    */
-    <attribute name="URLs">
-        <urls>
-            <dir name="./deploy" />
-            <url name="./deploy/examples/myapp.ear" />
-            <dir name="./deploy/examples" />
-            <url name="http://www.test.com/samples/myapp.ear" />
-        </urls>
-    </attribute>
-  </mbean>
-  -->
-
-</server>
diff --git a/3.0.4/config/jboss/conf/jbossmq-state.xml b/3.0.4/config/jboss/conf/jbossmq-state.xml
deleted file mode 100644
index 113ec64..0000000
--- a/3.0.4/config/jboss/conf/jbossmq-state.xml
+++ /dev/null
@@ -1,44 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<StateManager>
-	<Users>
-		<User>
-			<Name>john</Name>
-			<Password>needle</Password>
-			<Id>DurableSubscriberExample</Id>
-		</User>
-		<User>
-			<Name>guest</Name>
-			<Password>guest</Password>
-		</User>
-		<User>
-			<Name>nobody</Name>
-			<Password>nobody</Password>
-		</User>
-		<User>
-			<Name>dynsub</Name>
-			<Password>dynsub</Password>
-		</User>
-	</Users>
-	<Roles>
-		<Role name="guest">
-			<UserName>guest</UserName>
-			<UserName>john</UserName>
-		</Role>
-		<Role name="subscriber">
-			<UserName>john</UserName>
-		</Role>
-		<Role name="publisher">
-			<UserName>john</UserName>
-			<UserName>dynsub</UserName>
-		</Role>
-		<Role name="durpublisher">
-			<UserName>john</UserName>
-			<UserName>dynsub</UserName>
-		</Role>
-		<Role name="noacc">
-			<UserName>nobody</UserName>
-		</Role>
-	</Roles>
-	<DurableSubscriptions>
-	</DurableSubscriptions>
-</StateManager>
diff --git a/3.0.4/config/jboss/conf/jndi.properties b/3.0.4/config/jboss/conf/jndi.properties
deleted file mode 100644
index c59f571..0000000
--- a/3.0.4/config/jboss/conf/jndi.properties
+++ /dev/null
@@ -1,5 +0,0 @@
-java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
-java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces
-# Do NOT uncomment this line as it causes in VM calls to go over
-# RMI!
-#java.naming.provider.url=localhost
diff --git a/3.0.4/config/jboss/conf/log4j.xml b/3.0.4/config/jboss/conf/log4j.xml
deleted file mode 100644
index 000fa62..0000000
--- a/3.0.4/config/jboss/conf/log4j.xml
+++ /dev/null
@@ -1,191 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
-
-<!-- ===================================================================== -->
-<!--                                                                       -->
-<!--  Log4j Configuration                                                  -->
-<!--                                                                       -->
-<!-- ===================================================================== -->
-
-<!-- $Id$ -->
-
-<!--
-   | For more configuration infromation and examples see the Jakarta Log4j
-   | owebsite: http://jakarta.apache.org/log4j
- -->
-
-<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="false">
-
-  <!-- ================================= -->
-  <!-- Preserve messages in a local file -->
-  <!-- ================================= -->
-
-  <!-- A time/date based rolling appender -->
-  <appender name="FILE" class="org.jboss.logging.appender.DailyRollingFileAppender">
-    <param name="File" value="${jboss.server.home.dir}/log/server.log"/>
-    <param name="Append" value="false"/>
-    <param name="Threshold" value="INFO"/>
-
-    <!-- Rollover at midnight each day -->
-    <param name="DatePattern" value="'.'yyyy-MM-dd"/>
-
-    <!-- Rollover at the top of each hour
-    <param name="DatePattern" value="'.'yyyy-MM-dd-HH"/>
-    -->
-
-    <layout class="org.apache.log4j.PatternLayout">
-      <!-- The default pattern: Date Priority [Category] Message\n -->
-      <param name="ConversionPattern" value="%d %-5p [%c] %m%n"/>
-
-      <!-- The full pattern: Date MS Priority [Category] (Thread:NDC) Message\n
-      <param name="ConversionPattern" value="%d %-5r %-5p [%c] (%t:%x) %m%n"/>
-       -->
-    </layout>	    
-  </appender>
-
-  <!-- A size based file rolling appender
-  <appender name="FILE" class="org.jboss.logging.appender.RollingFileAppender">
-    <param name="File" value="${jboss.server.home.dir}/log/server.log"/>
-    <param name="Append" value="false"/>
-    <param name="MaxFileSize" value="500KB"/>
-    <param name="MaxBackupIndex" value="1"/>
-
-    <layout class="org.apache.log4j.PatternLayout">
-      <param name="ConversionPattern" value="%d %-5p [%c] %m%n"/>
-    </layout>	    
-  </appender>
-  -->
-
-  <!-- ============================== -->
-  <!-- Append messages to the console -->
-  <!-- ============================== -->
-
-  <appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
-    <param name="Threshold" value="INFO"/>
-    <param name="Target" value="System.out"/>
-
-    <layout class="org.apache.log4j.PatternLayout">
-      <!-- The default pattern: Date Priority [Category] Message\n -->
-      <param name="ConversionPattern" value="%d{ABSOLUTE} %-5p [%c{1}] %m%n"/>
-    </layout>
-  </appender>
-
-
-  <!-- ====================== -->
-  <!-- More Appender examples -->
-  <!-- ====================== -->
-
-  <!-- Buffer events and log them asynchronously
-  <appender name="ASYNC" class="org.apache.log4j.AsyncAppender">
-    <appender-ref ref="FILE"/>
-    <appender-ref ref="CONSOLE"/>
-    <appender-ref ref="SMTP"/>
-  </appender>
-  -->
-
-  <!-- EMail events to an administrator
-  <appender name="SMTP" class="org.apache.log4j.net.SMTPAppender">
-    <param name="Threshold" value="ERROR"/>
-    <param name="To" value="admin@myhost.domain.com"/>
-    <param name="From" value="nobody@myhost.domain.com"/>
-    <param name="Subject" value="JBoss Sever Errors"/>
-    <param name="SMTPHost" value="localhost"/>
-    <param name="BufferSize" value="10"/>
-    <layout class="org.apache.log4j.PatternLayout">
-      <param name="ConversionPattern" value="[%d{ABSOLUTE},%c{1}] %m%n"/>
-    </layout>
-  </appender>
-  -->
-
-  <!-- Syslog events
-  <appender name="SYSLOG" class="org.apache.log4j.net.SyslogAppender">
-    <param name="Facility" value="LOCAL7"/>
-    <param name="FacilityPrinting" value="true"/>
-    <param name="SyslogHost" value="localhost"/>
-  </appender>
-  -->
-
-  <!-- Log events to JMS (requires a topic to be created)
-  <appender name="JMS" class="org.apache.log4j.net.JMSAppender">
-    <param name="Threshold" value="ERROR"/>
-    <param name="TopicConnectionFactoryBindingName" value="java:/ConnectionFactory"/>
-    <param name="TopicBindingName" value="topic/MyErrorsTopic"/>
-  </appender>
-  -->
-
-  <!-- ================ -->
-  <!-- Limit categories -->
-  <!-- ================ -->
-
-  <!-- Limit JBoss categories to INFO
-  <category name="org.jboss">
-    <priority value="INFO"/>
-  </category>
-  -->
-
-  <!-- Increase the priority threshold for the DefaultDS category
-  <category name="DefaultDS">
-    <priority value="FATAL"/>
-  </category>
-  -->
-
-  <!-- Decrease the priority threshold for the org.jboss.varia category
-  <category name="org.jboss.varia">
-    <priority value="DEBUG"/>
-  </category>
-  -->
-
-  <category name="org.apache.tapestry">
-  	<priority value="ERROR"/>
-  </category>
-
-  
-  <!--
-     | An example of enabling the custom TRACE level priority that is used
-     | by the JBoss internals to diagnose low level details. This example
-     | turns on TRACE level msgs for the org.jboss.ejb.plugins package and its
-     | subpackages. This will produce A LOT of logging output.
-       If you use replace the log4j 1.2 jar with a 1.1.3 jar you will need to
-       change this from XLevel to XPriority.
-  <category name="org.jboss.system">
-    <priority value="TRACE" class="org.jboss.logging.XLevel"/>
-  </category>
-  <category name="org.jboss.ejb.plugins">
-    <priority value="TRACE" class="org.jboss.logging.XLevel"/>
-  </category>
-  -->
-
-  <!-- ======================= -->
-  <!-- Setup the Root category -->
-  <!-- ======================= -->
-
-  <root>
-    <appender-ref ref="CONSOLE"/>
-    <appender-ref ref="FILE"/>
-  </root>
-  
-  <!-- Clustering logging -->
-  <!-- Uncomment the following to redirect the org.javagroups and
-     org.jboss.ha categories to a cluster.log file.
-
-  <appender name="CLUSTER" class="org.jboss.logging.appender.RollingFileAppender">
-    <param name="File" value="${jboss.server.home.dir}/log/cluster.log"/>
-    <param name="Append" value="false"/>
-    <param name="MaxFileSize" value="500KB"/>
-    <param name="MaxBackupIndex" value="1"/>
-
-    <layout class="org.apache.log4j.PatternLayout">
-      <param name="ConversionPattern" value="%d %-5p [%c] %m%n"/>
-    </layout>	    
-  </appender>
-  <category name="org.javagroups">
-    <priority value="DEBUG" />
-    <appender-ref ref="CLUSTER"/>
-  </category>
-  <category name="org.jboss.ha">
-    <priority value="DEBUG" />
-    <appender-ref ref="CLUSTER"/>
-  </category>
-  -->
-
-</log4j:configuration>
diff --git a/3.0.4/config/jboss/conf/login-config.xml b/3.0.4/config/jboss/conf/login-config.xml
deleted file mode 100644
index 7760d26..0000000
--- a/3.0.4/config/jboss/conf/login-config.xml
+++ /dev/null
@@ -1,122 +0,0 @@
-<?xml version='1.0'?>
-<!DOCTYPE policy PUBLIC
-      "-//JBoss//DTD JBOSS Security Config 3.0//EN"
-      "http://www.jboss.org/j2ee/dtd/security_config.dtd">
-
-<!-- The XML based JAAS login configuration read by the
-org.jboss.security.auth.login.XMLLoginConfig mbean. Add
-an application-policy element for each security domain.
-
-The outline of the application-policy is:
-<application-policy name="security-domain-name">
-  <authentication>
-    <login-module code="login.module1.class.name" flag="control_flag">
-      <module-option name = "option1-name">option1-value</module-option>
-      <module-option name = "option2-name">option2-value</module-option>
-      ...
-    </login-module>
-
-    <login-module code="login.module2.class.name" flag="control_flag">
-      ...
-    </login-module>
-    ...
-  </authentication>
-</application-policy>
-
-$Revision$
--->
-
-<policy>
-    <!-- Used by clients within the application server VM such as
-    mbeans and servlets that access EJBs.
-    -->
-    <application-policy name = "client-login">
-       <authentication>
-          <login-module code = "org.jboss.security.ClientLoginModule"
-             flag = "required">
-          </login-module>
-       </authentication>
-    </application-policy>
-
-    <!-- Security domain for JBossMQ -->
-    <application-policy name = "jbossmq">
-       <authentication>
-          <login-module code = "org.jboss.mq.sm.file.DynamicLoginModule"
-             flag = "required">
-             <module-option name = "unauthenticatedIdentity">guest</module-option>
-	     <module-option name = "sm.objectname">jboss.mq:service=StateManager</module-option>
-          </login-module>
-       </authentication>
-    </application-policy>
-
-    <!-- Security domains for testing new jca framework -->
-    <application-policy name = "HsqlDbRealm">
-       <authentication>
-          <login-module code = "org.jboss.resource.security.ConfiguredIdentityLoginModule"
-             flag = "required">
-             <module-option name = "principal">sa</module-option>
-             <module-option name = "userName">sa</module-option>
-             <module-option name = "password"></module-option>
-             <module-option name = "managedConnectionFactoryName">jboss.jca:service=LocalTxCM,name=hsqldbDS</module-option>
-          </login-module>
-       </authentication>
-    </application-policy>
-
-    <application-policy name = "FirebirdDBRealm">
-       <authentication>
-          <login-module code = "org.jboss.resource.security.ConfiguredIdentityLoginModule"
-             flag = "required">
-             <module-option name = "principal">sysdba</module-option>
-             <module-option name = "userName">sysdba</module-option>
-             <module-option name = "password">masterkey</module-option>
-             <module-option name = "managedConnectionFactoryName">jboss.jca:service=XaTxCM,name=FirebirdDS</module-option>
-          </login-module>
-       </authentication>
-    </application-policy>
-
-    <application-policy name = "JmsXARealm">
-       <authentication>
-          <login-module code = "org.jboss.resource.security.ConfiguredIdentityLoginModule"
-             flag = "required">
-             <module-option name = "principal">guest</module-option>
-             <module-option name = "userName">guest</module-option>
-             <module-option name = "password">guest</module-option>
-             <module-option name = "managedConnectionFactoryName">jboss.jca:service=XaTxCM,name=jmsra</module-option>
-          </login-module>
-       </authentication>
-    </application-policy>
-
-    <!-- A template configuration for the jmx-console web application. This
-      defaults to the UsersRolesLoginModule the same as other and should be
-      changed to a stronger authentication mechanism as required.
-    -->
-    <application-policy name = "jmx-console">
-       <authentication>
-          <login-module code="org.jboss.security.auth.spi.UsersRolesLoginModule"
-             flag = "required" />
-       </authentication>
-    </application-policy>
-
-    <!-- The default login configuration used by any security domain that
-    does not have a application-policy entry with a matching name
-    -->
-    <application-policy name = "other">
-       <!-- A simple server login module, which can be used when the number 
-       of users is relatively small. It uses two properties files:
-       users.properties, which holds users (key) and their password (value).
-       roles.properties, which holds users (key) and a comma-separated list of
-       their roles (value).
-       The unauthenticatedIdentity property defines the name of the principal
-       that will be used when a null username and password are presented as is
-       the case for an unuathenticated web client or MDB. If you want to
-       allow such users to be authenticated add the property, e.g.,
-       unauthenticatedIdentity="nobody"
-       -->
-       <authentication>
-          <login-module code = "org.jboss.security.auth.spi.UsersRolesLoginModule"
-             flag = "required" />
-       </authentication>
-    </application-policy>
-
-</policy>
-
diff --git a/3.0.4/config/jboss/conf/server.policy b/3.0.4/config/jboss/conf/server.policy
deleted file mode 100644
index da69056..0000000
--- a/3.0.4/config/jboss/conf/server.policy
+++ /dev/null
@@ -1,12 +0,0 @@
-/// ====================================================================== ///
-//                                                                          //
-//  JBoss Security Policy                                                   //
-//                                                                          //
-/// ====================================================================== ///
-
-// $Id$
-
-grant {
-   // Allow everything for now
-   permission java.security.AllPermission;
-};
diff --git a/3.0.4/config/jboss/conf/standardjaws.xml b/3.0.4/config/jboss/conf/standardjaws.xml
deleted file mode 100644
index f9deeb4..0000000
--- a/3.0.4/config/jboss/conf/standardjaws.xml
+++ /dev/null
@@ -1,1267 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!DOCTYPE jbosscmp-jdbc PUBLIC
-    "-//JBoss//DTD JBOSSCMP-JDBC 3.0//EN"
-    "http://www.jboss.org/j2ee/dtd/jbosscmp-jdbc_3_0.dtd">
-
-<!-- ===================================================================== -->
-<!--                                                                       -->
-<!--  Standard Jaws Configuration                                          -->
-<!--                                                                       -->
-<!-- ===================================================================== -->
-
-<!-- $Id$ -->
-
-<jaws>
-   <datasource>java:/DefaultDS</datasource>
-   <type-mapping>Hypersonic SQL</type-mapping>
-   <debug>false</debug>
-
-   <default-entity>
-      <create-table>true</create-table>
-      <remove-table>false</remove-table>
-      <tuned-updates>true</tuned-updates>
-      <read-only>false</read-only>
-      <time-out>300</time-out>
-      <row-locking>false</row-locking>
-      <read-ahead>false</read-ahead>
-   </default-entity>
-
-   <type-mappings>
-      <type-mapping-definition>
-	 <name>InterBase</name>
-	 <mapping>
-	    <java-type>java.lang.Boolean</java-type>
-	    <jdbc-type>BIT</jdbc-type>
-	    <sql-type>SMALLINT</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.lang.Byte</java-type>
-	    <jdbc-type>TINYINT</jdbc-type>
-	    <sql-type>SMALLINT</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.lang.Short</java-type>
-	    <jdbc-type>SMALLINT</jdbc-type>
-	    <sql-type>SMALLINT</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.lang.Integer</java-type>
-	    <jdbc-type>INTEGER</jdbc-type>
-	    <sql-type>INTEGER</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.lang.Long</java-type>
-	    <jdbc-type>BIGINT</jdbc-type>
-	    <sql-type>NUMERIC(18,0)</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.lang.Float</java-type>
-	    <jdbc-type>REAL</jdbc-type>
-	    <sql-type>FLOAT</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.lang.Double</java-type>
-	    <jdbc-type>DOUBLE</jdbc-type>
-	    <sql-type>DOUBLE PRECISION</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.lang.Character</java-type>
-	    <jdbc-type>CHAR</jdbc-type>
-	    <sql-type>CHAR</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.lang.String</java-type>
-	    <jdbc-type>VARCHAR</jdbc-type>
-	    <sql-type>VARCHAR(64)</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.sql.Date</java-type>
-	    <jdbc-type>DATE</jdbc-type>
-	    <sql-type>DATE</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.sql.Time</java-type>
-	    <jdbc-type>TIME</jdbc-type>
-	    <sql-type>TIME</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.sql.Timestamp</java-type>
-	    <jdbc-type>TIMESTAMP</jdbc-type>
-	    <sql-type>TIMESTAMP</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.lang.Object</java-type>
-	    <jdbc-type>JAVA_OBJECT</jdbc-type>
-	    <sql-type>VARCHAR(2000)</sql-type>
-	 </mapping>
-      </type-mapping-definition>
-
-      <type-mapping-definition>
-	 <name>DB2</name>
-	 <mapping>
-	    <java-type>java.lang.Boolean</java-type>
-	    <jdbc-type>BIT</jdbc-type>
-	    <sql-type>SMALLINT</sql-type>
-	 </mapping>
-	 <!--  DB2 does not appear to support columns of type "byte"
-	 Regrettably, this means they'll be serialized.
-      <mapping>
-      <java-type>java.lang.Byte</java-type>
-      <jdbc-type>CHAR</jdbc-type>
-      <sql-type>CHAR(1) FOR BIT DATA</sql-type>
-      </mapping>
-	 -->
-	 <mapping>
-	    <java-type>java.lang.Short</java-type>
-	    <jdbc-type>SMALLINT</jdbc-type>
-	    <sql-type>SMALLINT</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.lang.Integer</java-type>
-	    <jdbc-type>INTEGER</jdbc-type>
-	    <sql-type>INTEGER</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.lang.Long</java-type>
-	    <jdbc-type>BIGINT</jdbc-type>
-	    <sql-type>BIGINT</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.lang.Float</java-type>
-	    <jdbc-type>REAL</jdbc-type>
-	    <sql-type>REAL</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.lang.Double</java-type>
-	    <jdbc-type>DOUBLE</jdbc-type>
-	    <sql-type>DOUBLE</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.lang.Character</java-type>
-	    <jdbc-type>CHAR</jdbc-type>
-	    <sql-type>CHAR</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.lang.String</java-type>
-	    <jdbc-type>VARCHAR</jdbc-type>
-	    <sql-type>VARCHAR(254)</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.sql.Date</java-type>
-	    <jdbc-type>DATE</jdbc-type>
-	    <sql-type>DATE</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.sql.Time</java-type>
-	    <jdbc-type>TIME</jdbc-type>
-	    <sql-type>TIME</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.sql.Timestamp</java-type>
-	    <jdbc-type>TIMESTAMP</jdbc-type>
-	    <sql-type>TIMESTAMP</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.lang.Object</java-type>
-	    <jdbc-type>JAVA_OBJECT</jdbc-type>
-	    <sql-type>BLOB(2000)</sql-type>
-	 </mapping>
-      </type-mapping-definition>
-
-      <type-mapping-definition>
-	 <name>Oracle8</name>
-	 <mapping>
-	    <java-type>java.lang.Boolean</java-type>
-	    <jdbc-type>BIT</jdbc-type>
-	    <sql-type>NUMBER(1)</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.lang.Byte</java-type>
-	    <jdbc-type>NUMERIC</jdbc-type>
-	    <sql-type>NUMBER(3)</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.lang.Short</java-type>
-	    <jdbc-type>NUMERIC</jdbc-type>
-	    <sql-type>NUMBER(5)</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.lang.Integer</java-type>
-	    <jdbc-type>INTEGER</jdbc-type>
-	    <sql-type>NUMBER(10)</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.lang.Long</java-type>
-	    <jdbc-type>BIGINT</jdbc-type>
-	    <sql-type>NUMBER(19)</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.lang.Float</java-type>
-	    <jdbc-type>REAL</jdbc-type>
-	    <sql-type>NUMBER(38,7)</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.math.BigDecimal</java-type>
-	    <jdbc-type>DECIMAL</jdbc-type>
-	    <sql-type>NUMBER(38,15)</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.lang.Double</java-type>
-	    <jdbc-type>DOUBLE</jdbc-type>
-	    <sql-type>NUMBER(38,15)</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.lang.Character</java-type>
-	    <jdbc-type>CHAR</jdbc-type>
-	    <sql-type>CHAR</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.lang.String</java-type>
-	    <jdbc-type>VARCHAR</jdbc-type>
-	    <sql-type>VARCHAR2(255)</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.sql.Date</java-type>
-	    <jdbc-type>DATE</jdbc-type>
-	    <sql-type>DATE</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.sql.Time</java-type>
-	    <jdbc-type>TIME</jdbc-type>
-	    <sql-type>DATE</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.sql.Timestamp</java-type>
-	    <jdbc-type>TIMESTAMP</jdbc-type>
-	    <sql-type>DATE</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.lang.Object</java-type>
-	    <jdbc-type>BLOB</jdbc-type>
-	    <sql-type>BLOB</sql-type>
-	    <!-- Change this from BLOB to RAW(255) if you know your
-	    serialized object will be <= 255 bytes -->
-	 </mapping>
-      </type-mapping-definition>
-
-      <type-mapping-definition>
-	 <name>Oracle7</name>
-	 <mapping>
-	    <java-type>java.lang.Boolean</java-type>
-	    <jdbc-type>BIT</jdbc-type>
-	    <sql-type>NUMBER(1)</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.lang.Byte</java-type>
-	    <jdbc-type>NUMERIC</jdbc-type>
-	    <sql-type>NUMBER(3)</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.lang.Short</java-type>
-	    <jdbc-type>NUMERIC</jdbc-type>
-	    <sql-type>NUMBER(5)</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.lang.Integer</java-type>
-	    <jdbc-type>INTEGER</jdbc-type>
-	    <sql-type>NUMBER(10)</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.lang.Long</java-type>
-	    <jdbc-type>BIGINT</jdbc-type>
-	    <sql-type>NUMBER(19)</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.lang.Float</java-type>
-	    <jdbc-type>REAL</jdbc-type>
-	    <sql-type>NUMBER(38,7)</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.lang.Double</java-type>
-	    <jdbc-type>DOUBLE</jdbc-type>
-	    <sql-type>NUMBER(38,15)</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.lang.Character</java-type>
-	    <jdbc-type>CHAR</jdbc-type>
-	    <sql-type>CHAR</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.lang.String</java-type>
-	    <jdbc-type>VARCHAR</jdbc-type>
-	    <sql-type>VARCHAR2(255)</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.sql.Date</java-type>
-	    <jdbc-type>DATE</jdbc-type>
-	    <sql-type>DATE</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.sql.Time</java-type>
-	    <jdbc-type>TIME</jdbc-type>
-	    <sql-type>DATE</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.sql.Timestamp</java-type>
-	    <jdbc-type>TIMESTAMP</jdbc-type>
-	    <sql-type>DATE</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.lang.Object</java-type>
-	    <jdbc-type>JAVA_OBJECT</jdbc-type>
-	    <sql-type>LONG RAW</sql-type>
-	    <!-- Change this from LONG RAW to RAW(255) if you know your
-	    serialized object will be <= 255 bytes -->
-	 </mapping>
-      </type-mapping-definition>
-
-      <type-mapping-definition>
-	 <name>Sybase</name>
-	 <mapping>
-	    <java-type>java.lang.Boolean</java-type>
-	    <jdbc-type>BIT</jdbc-type>
-	    <sql-type>BIT</sql-type>
-	 </mapping>
-	 <!-- Current Sybase JDBC drivers (jConnect 5.2) don't support
-	 byte or short.  Unfortunately they'll be serialized.
-      <mapping>
-      <java-type>java.lang.Byte</java-type>
-      <jdbc-type>TINYINT</jdbc-type>
-      <sql-type>TINYINT</sql-type>
-      </mapping>
-      <mapping>
-      <java-type>java.lang.Short</java-type>
-      <jdbc-type>SMALLINT</jdbc-type>
-      <sql-type>SMALLINT</sql-type>
-      </mapping>
-	 -->
-	 <mapping>
-	    <java-type>java.lang.Integer</java-type>
-	    <jdbc-type>INTEGER</jdbc-type>
-	    <sql-type>INTEGER</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.lang.Long</java-type>
-	    <jdbc-type>NUMERIC</jdbc-type>
-	    <sql-type>NUMERIC(38,0)</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.lang.Float</java-type>
-	    <jdbc-type>REAL</jdbc-type>
-	    <sql-type>REAL</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.lang.Double</java-type>
-	    <jdbc-type>DOUBLE</jdbc-type>
-	    <sql-type>DOUBLE PRECISION</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.lang.Character</java-type>
-	    <jdbc-type>CHAR</jdbc-type>
-	    <sql-type>CHAR</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.lang.String</java-type>
-	    <jdbc-type>VARCHAR</jdbc-type>
-	    <sql-type>VARCHAR(255)</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.sql.Date</java-type>
-	    <jdbc-type>DATE</jdbc-type>
-	    <sql-type>DATETIME</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.sql.Time</java-type>
-	    <jdbc-type>TIME</jdbc-type>
-	    <sql-type>SMALLDATETIME</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.sql.Timestamp</java-type>
-	    <jdbc-type>TIMESTAMP</jdbc-type>
-	    <sql-type>DATETIME</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.lang.Object</java-type>
-	    <jdbc-type>JAVA_OBJECT</jdbc-type>
-	    <sql-type>IMAGE</sql-type>
-	 </mapping>
-      </type-mapping-definition>
-
-      <type-mapping-definition>
-	 <name>PostgreSQL</name>
-	 <mapping>
-	    <java-type>java.lang.Boolean</java-type>
-	    <jdbc-type>CHAR</jdbc-type>
-	    <sql-type>BOOLEAN</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.lang.Byte</java-type>
-	    <jdbc-type>TINYINT</jdbc-type>
-	    <sql-type>INT2</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.lang.Short</java-type>
-	    <jdbc-type>SMALLINT</jdbc-type>
-	    <sql-type>INT2</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.lang.Integer</java-type>
-	    <jdbc-type>INTEGER</jdbc-type>
-	    <sql-type>INT4</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.lang.Long</java-type>
-	    <jdbc-type>BIGINT</jdbc-type>
-	    <sql-type>INT8</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.lang.Float</java-type>
-	    <jdbc-type>FLOAT</jdbc-type>
-	    <sql-type>FLOAT(7)</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.lang.Double</java-type>
-	    <jdbc-type>DOUBLE</jdbc-type>
-	    <sql-type>FLOAT8</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.lang.Character</java-type>
-	    <jdbc-type>CHAR</jdbc-type>
-	    <sql-type>CHAR(1)</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.lang.String</java-type>
-	    <jdbc-type>VARCHAR</jdbc-type>
-	    <sql-type>TEXT</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.sql.Date</java-type>
-	    <jdbc-type>DATE</jdbc-type>
-	    <sql-type>DATE</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.sql.Time</java-type>
-	    <jdbc-type>TIME</jdbc-type>
-	    <sql-type>TIME</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.sql.Timestamp</java-type>
-	    <jdbc-type>TIMESTAMP</jdbc-type>
-	    <sql-type>TIMESTAMP</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.lang.Object</java-type>
-	    <jdbc-type>JAVA_OBJECT</jdbc-type>
-	    <sql-type>OID</sql-type>
-	 </mapping>
-      </type-mapping-definition>
-
-      <type-mapping-definition>
-	 <name>PostgreSQL 7.2</name>
-	 <mapping>
-	    <java-type>java.lang.Boolean</java-type>
-	    <jdbc-type>CHAR</jdbc-type>
-	    <sql-type>BOOLEAN</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.lang.Byte</java-type>
-	    <jdbc-type>TINYINT</jdbc-type>
-	    <sql-type>INT2</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.lang.Short</java-type>
-	    <jdbc-type>SMALLINT</jdbc-type>
-	    <sql-type>INT2</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.lang.Integer</java-type>
-	    <jdbc-type>INTEGER</jdbc-type>
-	    <sql-type>INT4</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.lang.Long</java-type>
-	    <jdbc-type>BIGINT</jdbc-type>
-	    <sql-type>INT8</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.lang.Float</java-type>
-	    <jdbc-type>FLOAT</jdbc-type>
-	    <sql-type>FLOAT(7)</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.lang.Double</java-type>
-	    <jdbc-type>DOUBLE</jdbc-type>
-	    <sql-type>FLOAT8</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.lang.Character</java-type>
-	    <jdbc-type>CHAR</jdbc-type>
-	    <sql-type>CHAR(1)</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.lang.String</java-type>
-	    <jdbc-type>VARCHAR</jdbc-type>
-	    <sql-type>TEXT</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.sql.Date</java-type>
-	    <jdbc-type>DATE</jdbc-type>
-	    <sql-type>DATE</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.sql.Time</java-type>
-	    <jdbc-type>TIME</jdbc-type>
-	    <sql-type>TIME</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.sql.Timestamp</java-type>
-	    <jdbc-type>TIMESTAMP</jdbc-type>
-	    <sql-type>TIMESTAMP</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.lang.Object</java-type>
-	    <jdbc-type>JAVA_OBJECT</jdbc-type>
-	    <sql-type>OID</sql-type>
-	 </mapping>
-      </type-mapping-definition>
-      
-      <type-mapping-definition>
-	 <name>Hypersonic SQL</name>
-	 <mapping>
-	    <java-type>java.lang.Byte</java-type>
-	    <jdbc-type>SMALLINT</jdbc-type>
-	    <sql-type>SMALLINT</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.util.Date</java-type>
-	    <jdbc-type>DATE</jdbc-type>
-	    <sql-type>DATE</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.lang.Boolean</java-type>
-	    <jdbc-type>BIT</jdbc-type>
-	    <sql-type>BIT</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.lang.Integer</java-type>
-	    <jdbc-type>INTEGER</jdbc-type>
-	    <sql-type>INTEGER</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.lang.Object</java-type>
-	    <jdbc-type>JAVA_OBJECT</jdbc-type>
-	    <sql-type>OBJECT</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.lang.Short</java-type>
-	    <jdbc-type>SMALLINT</jdbc-type>
-	    <sql-type>SMALLINT</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.lang.Character</java-type>
-	    <jdbc-type>CHAR</jdbc-type>
-	    <sql-type>CHAR</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.lang.String</java-type>
-	    <jdbc-type>VARCHAR</jdbc-type>
-	    <sql-type>VARCHAR(256)</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.sql.Timestamp</java-type>
-	    <jdbc-type>TIMESTAMP</jdbc-type>
-	    <sql-type>TIMESTAMP</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.lang.Float</java-type>
-	    <jdbc-type>REAL</jdbc-type>
-	    <sql-type>REAL</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.lang.Long</java-type>
-	    <jdbc-type>BIGINT</jdbc-type>
-	    <sql-type>BIGINT</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.lang.Double</java-type>
-	    <jdbc-type>DOUBLE</jdbc-type>
-	    <sql-type>DOUBLE</sql-type>
-	 </mapping>
-      </type-mapping-definition>
-
-      <type-mapping-definition>
-	 <name>PointBase</name>
-	 <mapping>
-	    <java-type>java.lang.Character</java-type>
-	    <jdbc-type>CHAR</jdbc-type>
-	    <sql-type>CHAR</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.lang.Short</java-type>
-	    <jdbc-type>SMALLINT</jdbc-type>
-	    <sql-type>SMALLINT</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.lang.Long</java-type>
-	    <jdbc-type>BIGINT</jdbc-type>
-	    <sql-type>INTEGER</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.lang.Double</java-type>
-	    <jdbc-type>DOUBLE</jdbc-type>
-	    <sql-type>FLOAT</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.lang.Float</java-type>
-	    <jdbc-type>FLOAT</jdbc-type>
-	    <sql-type>FLOAT</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.lang.Boolean</java-type>
-	    <jdbc-type>BINARY</jdbc-type>
-	    <sql-type>BOOLEAN</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.lang.String</java-type>
-	    <jdbc-type>VARCHAR</jdbc-type>
-	    <sql-type>VARCHAR(256)</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.lang.Byte</java-type>
-	    <jdbc-type>SMALLINT</jdbc-type>
-	    <sql-type>SMALLINT</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.lang.Object</java-type>
-	    <jdbc-type>BLOB</jdbc-type>
-	    <sql-type>BLOB</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.lang.Integer</java-type>
-	    <jdbc-type>INTEGER</jdbc-type>
-	    <sql-type>INTEGER</sql-type>
-	 </mapping>
-      </type-mapping-definition>
-
-      <type-mapping-definition>
-	 <name>SOLID</name>
-	 <mapping>
-	    <java-type>java.lang.Character</java-type>
-	    <jdbc-type>CHAR</jdbc-type>
-	    <sql-type>CHAR</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.lang.Byte</java-type>
-	    <jdbc-type>TINYINT</jdbc-type>
-	    <sql-type>TINYINT</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.lang.Short</java-type>
-	    <jdbc-type>INTEGER</jdbc-type>
-	    <sql-type>INTEGER</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.lang.Double</java-type>
-	    <jdbc-type>DOUBLE</jdbc-type>
-	    <sql-type>DOUBLE</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.lang.Object</java-type>
-	    <jdbc-type>BLOB</jdbc-type>
-	    <sql-type>BLOB</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.lang.String</java-type>
-	    <jdbc-type>VARCHAR</jdbc-type>
-	    <sql-type>VARCHAR(256)</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.lang.Integer</java-type>
-	    <jdbc-type>INTEGER</jdbc-type>
-	    <sql-type>INTEGER</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.sql.Timestamp</java-type>
-	    <jdbc-type>TIMESTAMP</jdbc-type>
-	    <sql-type>TIMESTAMP</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.lang.Boolean</java-type>
-	    <jdbc-type>BIT</jdbc-type>
-	    <sql-type>BIT</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.lang.Float</java-type>
-	    <jdbc-type>FLOAT</jdbc-type>
-	    <sql-type>FLOAT</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.lang.Long</java-type>
-	    <jdbc-type>BIGINT</jdbc-type>
-	    <sql-type>BIGINT</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.util.Date</java-type>
-	    <jdbc-type>DATE</jdbc-type>
-	    <sql-type>DATE</sql-type>
-	 </mapping>
-      </type-mapping-definition>
-
-      <type-mapping-definition>
-	 <name>mySQL</name>
-	 <mapping>
-	    <java-type>java.lang.Float</java-type>
-	    <jdbc-type>FLOAT</jdbc-type>
-	    <sql-type>FLOAT</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.lang.Double</java-type>
-	    <jdbc-type>DOUBLE</jdbc-type>
-	    <sql-type>DOUBLE</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.lang.Boolean</java-type>
-	    <jdbc-type>TINYINT</jdbc-type>
-	    <sql-type>TINYINT</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.lang.Object</java-type>
-	    <jdbc-type>JAVA_OBJECT</jdbc-type>
-	    <sql-type>BLOB</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.lang.Integer</java-type>
-	    <jdbc-type>INTEGER</jdbc-type>
-	    <sql-type>INTEGER</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.lang.Short</java-type>
-	    <jdbc-type>SMALLINT</jdbc-type>
-	    <sql-type>SMALLINT</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.sql.Timestamp</java-type>
-	    <jdbc-type>TIMESTAMP</jdbc-type>
-	    <sql-type>TIMESTAMP</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.lang.Byte</java-type>
-	    <jdbc-type>TINYINT</jdbc-type>
-	    <sql-type>TINYINT</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.lang.Character</java-type>
-	    <jdbc-type>CHAR</jdbc-type>
-	    <sql-type>CHAR</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.lang.Long</java-type>
-	    <jdbc-type>BIGINT</jdbc-type>
-	    <sql-type>BIGINT</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.lang.String</java-type>
-	    <jdbc-type>VARCHAR</jdbc-type>
-	    <sql-type>VARCHAR(255) BINARY</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.util.Date</java-type>
-	    <jdbc-type>DATE</jdbc-type>
-	    <sql-type>DATETIME</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.sql.Date</java-type>
-	    <jdbc-type>DATE</jdbc-type>
-	    <sql-type>DATETIME</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.sql.Time</java-type>
-	    <jdbc-type>TIME</jdbc-type>
-	    <sql-type>BIGINT</sql-type>
-	 </mapping>
-      </type-mapping-definition>
-
-      <type-mapping-definition>
-	 <name>MS SQLSERVER</name>
-	 <mapping>
-	    <java-type>java.lang.Integer</java-type>
-	    <jdbc-type>INTEGER</jdbc-type>
-	    <sql-type>INTEGER</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.lang.Character</java-type>
-	    <jdbc-type>CHAR</jdbc-type>
-	    <sql-type>CHAR</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.lang.Short</java-type>
-	    <jdbc-type>SMALLINT</jdbc-type>
-	    <sql-type>SMALLINT</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.lang.Double</java-type>
-	    <jdbc-type>DOUBLE</jdbc-type>
-	    <sql-type>DOUBLE</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.lang.Long</java-type>
-	    <jdbc-type>DECIMAL</jdbc-type>
-	    <sql-type>DECIMAL(20)</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.math.BigDecimal</java-type>
-	    <jdbc-type>VARCHAR</jdbc-type>
-	    <sql-type>VARCHAR(256)</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.lang.String</java-type>
-	    <jdbc-type>VARCHAR</jdbc-type>
-	    <sql-type>VARCHAR(256)</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.lang.Object</java-type>
-	    <jdbc-type>JAVA_OBJECT</jdbc-type>
-	    <sql-type>IMAGE</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.lang.Byte</java-type>
-	    <jdbc-type>TINYINT</jdbc-type>
-	    <sql-type>TINYINT</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.sql.Timestamp</java-type>
-	    <jdbc-type>TIMESTAMP</jdbc-type>
-	    <sql-type>TIMESTAMP</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.sql.Date</java-type>
-	    <jdbc-type>DATE</jdbc-type>
-	    <sql-type>DATETIME</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.sql.Time</java-type>
-	    <jdbc-type>TIME</jdbc-type>
-	    <sql-type>DATETIME</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.util.Date</java-type>
-	    <jdbc-type>DATE</jdbc-type>
-	    <sql-type>DATETIME</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.lang.Boolean</java-type>
-	    <jdbc-type>BIT</jdbc-type>
-	    <sql-type>BIT</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.lang.Float</java-type>
-	    <jdbc-type>FLOAT</jdbc-type>
-	    <sql-type>FLOAT</sql-type>
-	 </mapping>
-      </type-mapping-definition>
-
-      <type-mapping-definition> 
-	 <name>MS SQLSERVER2000</name> 
-	 
-	 <mapping> 
-	    <java-type>java.lang.Integer</java-type> 
-	    <jdbc-type>INTEGER</jdbc-type> 
-	    <sql-type>INTEGER</sql-type> 
-	 </mapping> 
-	 
-	 <mapping> 
-	    <java-type>java.lang.Character</java-type> 
-	    <jdbc-type>CHAR</jdbc-type> 
-	    <sql-type>CHAR</sql-type> 
-	 </mapping> 
-	 
-	 <mapping> 
-	    <java-type>java.lang.Short</java-type> 
-	    <jdbc-type>SMALLINT</jdbc-type> 
-	    <sql-type>SMALLINT</sql-type> 
-	 </mapping> 
-	 
-	 <mapping> 
-	    <java-type>java.lang.Long</java-type> 
-	    <jdbc-type>BIGINT</jdbc-type> 
-	    <sql-type>BIGINT</sql-type> 
-	 </mapping> 
-	 
-	 <mapping> 
-	    <java-type>java.math.BigDecimal</java-type> 
-	    <jdbc-type>VARCHAR</jdbc-type> 
-	    <sql-type>VARCHAR(256)</sql-type> 
-	 </mapping> 
-	 
-	 <mapping> 
-	    <java-type>java.lang.String</java-type> 
-	    <jdbc-type>VARCHAR</jdbc-type> 
-	    <sql-type>VARCHAR(256)</sql-type> 
-	 </mapping> 
-	 
-	 <mapping> 
-	    <java-type>java.lang.Object</java-type> 
-	    <jdbc-type>JAVA_OBJECT</jdbc-type> 
-	    <sql-type>IMAGE</sql-type> 
-	 </mapping> 
-	 
-	 <mapping> 
-	    <java-type>java.lang.Byte</java-type> 
-	    <jdbc-type>TINYINT</jdbc-type> 
-	    <sql-type>TINYINT</sql-type> 
-	 </mapping> 
-	 
-	 <mapping> 
-	    <java-type>java.sql.Timestamp</java-type> 
-	    <jdbc-type>TIMESTAMP</jdbc-type> 
-	    <sql-type>TIMESTAMP</sql-type> 
-	 </mapping> 
-	 
-	 <mapping> 
-	    <java-type>java.sql.Date</java-type> 
-	    <jdbc-type>DATE</jdbc-type> 
-	    <sql-type>DATETIME</sql-type> 
-	 </mapping> 
-	 
-	 <mapping> 
-	    <java-type>java.sql.Time</java-type> 
-	    <jdbc-type>TIME</jdbc-type> 
-	    <sql-type>DATETIME</sql-type> 
-	 </mapping> 
-	 
-	 <mapping> 
-	    <java-type>java.util.Date</java-type> 
-	    <jdbc-type>DATE</jdbc-type> 
-	    <sql-type>DATETIME</sql-type> 
-	 </mapping> 
-	 
-	 <mapping> 
-	    <java-type>java.lang.Boolean</java-type> 
-	    <jdbc-type>BIT</jdbc-type> 
-	    <sql-type>BIT</sql-type> 
-	 </mapping> 
-	 
-	 <mapping> 
-	    <java-type>java.lang.Float</java-type> 
-	    <jdbc-type>REAL</jdbc-type> 
-	    <sql-type>REAL</sql-type> 
-	 </mapping> 
-	 
-	 <mapping> 
-	    <java-type>java.lang.Double</java-type> 
-	    <jdbc-type>DOUBLE</jdbc-type> 
-	    <sql-type>FLOAT</sql-type> 
-	 </mapping> 
-      </type-mapping-definition>
-      
-      <type-mapping-definition>
-	 <name>DB2/400</name>
-	 <mapping>
-	    <java-type>java.lang.Character</java-type>
-	    <jdbc-type>CHAR</jdbc-type>
-	    <sql-type>CHAR(1)</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.lang.String</java-type>
-	    <jdbc-type>VARCHAR</jdbc-type>
-	    <sql-type>VARCHAR(256)</sql-type>
-	 </mapping>
-	 <!-- Apparent DB2/400 doesn't handle Byte type either
-      <mapping>
-      <java-type>java.lang.Byte</java-type>
-      <jdbc-type>CHAR</jdbc-type>
-      <sql-type>CHAR(1) FOR BIT DATA</sql-type>
-      </mapping>
-	 -->
-	 <mapping>
-	    <java-type>java.util.Date</java-type>
-	    <jdbc-type>DATE</jdbc-type>
-	    <sql-type>DATE</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.sql.Time</java-type>
-	    <jdbc-type>TIME</jdbc-type>
-	    <sql-type>TIME</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.lang.Float</java-type>
-	    <jdbc-type>FLOAT</jdbc-type>
-	    <sql-type>FLOAT</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.lang.Integer</java-type>
-	    <jdbc-type>INTEGER</jdbc-type>
-	    <sql-type>INTEGER</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.lang.Double</java-type>
-	    <jdbc-type>DOUBLE</jdbc-type>
-	    <sql-type>DOUBLE</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.lang.Long</java-type>
-	    <jdbc-type>BIGINT</jdbc-type>
-	    <sql-type>INTEGER</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.lang.Boolean</java-type>
-	    <jdbc-type>CHAR</jdbc-type>
-	    <sql-type>CHAR(5)</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.lang.Short</java-type>
-	    <jdbc-type>SMALLINT</jdbc-type>
-	    <sql-type>SMALLINT</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.lang.Object</java-type>
-	    <jdbc-type>JAVA_OBJECT</jdbc-type>
-	    <sql-type>VARCHAR(4096) FOR BIT DATA</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.sql.Timestamp</java-type>
-	    <jdbc-type>TIMESTAMP</jdbc-type>
-	    <sql-type>TIMESTAMP</sql-type>
-	 </mapping>
-      </type-mapping-definition>
-
-      <type-mapping-definition>
-	 <name>SapDB</name>
-	 <mapping>
-	    <java-type>java.lang.Integer</java-type>
-	    <jdbc-type>INTEGER</jdbc-type>
-	    <sql-type>INTEGER</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.lang.Character</java-type>
-	    <jdbc-type>CHAR</jdbc-type>
-	    <sql-type>CHAR</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.lang.String</java-type>
-	    <jdbc-type>VARCHAR</jdbc-type>
-	    <sql-type>VARCHAR(256)</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.lang.Object</java-type>
-	    <jdbc-type>JAVA_OBJECT</jdbc-type>
-	    <sql-type>LONG BYTE</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.lang.Byte</java-type>
-	    <jdbc-type>TINYINT</jdbc-type>
-	    <sql-type>CHAR BYTE</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.sql.Timestamp</java-type>
-	    <jdbc-type>TIMESTAMP</jdbc-type>
-	    <sql-type>TIMESTAMP</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.util.Date</java-type>
-	    <jdbc-type>DATE</jdbc-type>
-	    <sql-type>DATE</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.sql.Time</java-type>
-	    <jdbc-type>TIME</jdbc-type>
-	    <sql-type>TIME</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.lang.Boolean</java-type>
-	    <jdbc-type>BIT</jdbc-type>
-	    <sql-type>BOOLEAN</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.lang.Float</java-type>
-	    <jdbc-type>FLOAT</jdbc-type>
-	    <sql-type>FLOAT</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.lang.Short</java-type>
-	    <jdbc-type>SMALLINT</jdbc-type>
-	    <sql-type>SMALLINT</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.lang.Double</java-type>
-	    <jdbc-type>DOUBLE</jdbc-type>
-	    <sql-type>DOUBLE PRECISION</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.lang.Long</java-type>
-	    <jdbc-type>DECIMAL</jdbc-type>
-	    <sql-type>DECIMAL(20)</sql-type>
-	 </mapping>
-      </type-mapping-definition>
-
-      <type-mapping-definition>
-	 <name>Cloudscape</name>
-	 <mapping>
-	    <java-type>java.math.BigDecimal</java-type>
-	    <jdbc-type>LONGVARCHAR</jdbc-type>
-	    <sql-type>LONG VARCHAR</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.lang.Boolean</java-type>
-	    <jdbc-type>BIT</jdbc-type>
-	    <sql-type>BOOLEAN</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.lang.Byte</java-type>
-	    <jdbc-type>TINYINT</jdbc-type>
-	    <sql-type>TINYINT</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.lang.Short</java-type>
-	    <jdbc-type>SMALLINT</jdbc-type>
-	    <sql-type>SMALLINT</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.lang.Integer</java-type>
-	    <jdbc-type>INTEGER</jdbc-type>
-	    <sql-type>INTEGER</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.lang.Long</java-type>
-	    <jdbc-type>BIGINT</jdbc-type>
-	    <sql-type>LONGINT</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.lang.Float</java-type>
-	    <jdbc-type>REAL</jdbc-type>
-	    <sql-type>REAL</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.lang.Double</java-type>
-	    <jdbc-type>DOUBLE</jdbc-type>
-	    <sql-type>DOUBLE PRECISION</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.lang.Character</java-type>
-	    <jdbc-type>CHAR</jdbc-type>
-	    <sql-type>CHAR</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.lang.String</java-type>
-	    <jdbc-type>LONGVARCHAR</jdbc-type>
-	    <sql-type>LONG VARCHAR</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.sql.Date</java-type>
-	    <jdbc-type>DATE</jdbc-type>
-	    <sql-type>DATE</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.sql.Time</java-type>
-	    <jdbc-type>TIME</jdbc-type>
-	    <sql-type>TIME</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.sql.Timestamp</java-type>
-	    <jdbc-type>TIMESTAMP</jdbc-type>
-	    <sql-type>TIMESTAMP</sql-type>
-	 </mapping>
-	 <mapping>
-	    <java-type>java.lang.Object</java-type>
-	    <jdbc-type>JAVA_OBJECT</jdbc-type>
-	    <sql-type>LONG VARBINARY</sql-type>
-	 </mapping>
-      </type-mapping-definition>
-
-      
-      <type-mapping-definition> 
-	 <name>InformixDB</name> 
-	 <mapping> 
-	    <java-type>java.lang.Character</java-type> 
-	    <jdbc-type>CHAR</jdbc-type> 
-	    <sql-type>CHAR(1)</sql-type> 
-	 </mapping> 
-	 
-	 <mapping> 
-	    <java-type>java.lang.String</java-type> 
-	    <jdbc-type>VARCHAR</jdbc-type> 
-	    <sql-type>VARCHAR(255,0)</sql-type> 
-	 </mapping> 
-	 
-	 <mapping> 
-	    <java-type>java.math.BigDecimal</java-type> 
-	    <jdbc-type>NUMERIC</jdbc-type> 
-	    <sql-type>DECIMAL</sql-type> 
-	 </mapping> 
-	 
-	 <mapping> 
-	    <java-type>java.lang.Boolean</java-type> 
-	    <jdbc-type>BIT</jdbc-type> 
-	    <sql-type>SMALLINT</sql-type> 
-	 </mapping> 
-	 
-	 <mapping> 
-	    <java-type>java.lang.Integer</java-type> 
-	    <jdbc-type>INTEGER</jdbc-type> 
-	    <sql-type>INTEGER</sql-type> 
-	 </mapping> 
-	 
-	 <mapping> 
-	    <java-type>java.lang.Long</java-type> 
-	    <jdbc-type>BIGINT</jdbc-type> 
-	    <sql-type>NUMERIC(18,0)</sql-type> 
-	 </mapping> 
-	 
-	 <mapping> 
-	    <java-type>java.lang.Float</java-type> 
-	    <jdbc-type>REAL</jdbc-type> 
-	    <sql-type>FLOAT</sql-type> 
-	 </mapping> 
-	 
-	 <mapping> 
-	    <java-type>java.lang.Double</java-type> 
-	    <jdbc-type>DOUBLE</jdbc-type> 
-	    <sql-type>DOUBLE PRECISION</sql-type> 
-	 </mapping> 
-	 
-	 <mapping> 
-	    <java-type>java.lang.Byte</java-type> 
-	    <jdbc-type>TINYINT</jdbc-type> 
-	    <sql-type>SMALLINT</sql-type> 
-	 </mapping> 
-	 
-	 <mapping> 
-	    <java-type>java.lang.Short</java-type> 
-	    <jdbc-type>SMALLINT</jdbc-type> 
-	    <sql-type>SMALLINT</sql-type> 
-	 </mapping> 
-	 
-	 <mapping> 
-	    <java-type>java.util.Date</java-type> 
-	    <jdbc-type>DATE</jdbc-type> 
-	    <sql-type>DATE</sql-type> 
-	 </mapping> 
-	 
-	 <mapping> 
-	    <java-type>java.sql.Date</java-type> 
-	    <jdbc-type>DATE</jdbc-type> 
-	    <sql-type>DATE</sql-type> 
-	 </mapping> 
-	 
-	 <mapping> 
-	    <java-type>java.sql.Time</java-type> 
-	    <jdbc-type>TIME</jdbc-type> 
-	    <sql-type>TIME</sql-type> 
-	 </mapping> 
-	 
-	 <mapping> 
-	    <java-type>java.sql.Timestamp</java-type> 
-	    <jdbc-type>TIMESTAMP</jdbc-type> 
-	    <sql-type>DATETIME YEAR TO FRACTION(3)</sql-type> 
-	 </mapping> 
-	 
-	 <mapping> 
-	    <java-type>java.lang.Object</java-type> 
-	    <jdbc-type>JAVA_OBJECT</jdbc-type> 
-	    <sql-type>BYTE</sql-type> 
-	 </mapping> 
-      </type-mapping-definition> 
-
-   </type-mappings>
-</jaws>
diff --git a/3.0.4/config/jboss/conf/standardjboss.xml b/3.0.4/config/jboss/conf/standardjboss.xml
deleted file mode 100644
index fdd3fc1..0000000
--- a/3.0.4/config/jboss/conf/standardjboss.xml
+++ /dev/null
@@ -1,992 +0,0 @@
-<?xml version = "1.0" encoding = "UTF-8"?>
-
-<!-- ===================================================================== -->
-<!--                                                                       -->
-<!--  Standard JBoss Configuration                                         -->
-<!--                                                                       -->
-<!-- ===================================================================== -->
-
-<!-- $Id$ -->
-<jboss>
-	<enforce-ejb-restrictions>false</enforce-ejb-restrictions>
-	<container-configurations>
-		<container-configuration>
-			<container-name>Standard CMP 2.x EntityBean</container-name>
-			<sync-on-commit-only>false</sync-on-commit-only>
-			<call-logging>false</call-logging>
-			<container-invoker>org.jboss.proxy.ejb.ProxyFactory</container-invoker>
-			<container-interceptors>
-				<interceptor>org.jboss.ejb.plugins.LogInterceptor</interceptor>
-				<interceptor>org.jboss.ejb.plugins.SecurityInterceptor</interceptor>
-				<interceptor>org.jboss.ejb.plugins.TxInterceptorCMT</interceptor>
-				<interceptor metricsEnabled = "true">org.jboss.ejb.plugins.MetricsInterceptor</interceptor>
-				<interceptor>org.jboss.ejb.plugins.EntityCreationInterceptor</interceptor>
-				<interceptor>org.jboss.ejb.plugins.EntityLockInterceptor</interceptor>
-				<interceptor>org.jboss.ejb.plugins.EntityInstanceInterceptor</interceptor>    
-				<interceptor>org.jboss.ejb.plugins.EntityReentranceInterceptor</interceptor>
-				<interceptor>org.jboss.resource.connectionmanager.CachedConnectionInterceptor</interceptor>
-                                <interceptor>org.jboss.ejb.plugins.EntitySynchronizationInterceptor</interceptor>
-				<interceptor>org.jboss.ejb.plugins.cmp.jdbc.JDBCRelationInterceptor</interceptor>
-			</container-interceptors>
-			<client-interceptors>
-				<home>
-					<interceptor>org.jboss.proxy.ejb.HomeInterceptor</interceptor>
-					<interceptor>org.jboss.proxy.SecurityInterceptor</interceptor>
-					<interceptor>org.jboss.proxy.TransactionInterceptor</interceptor>
-					<interceptor>org.jboss.invocation.InvokerInterceptor</interceptor>
-				</home>
-				<bean>
-					<interceptor>org.jboss.proxy.ejb.EntityInterceptor</interceptor>
-					<interceptor>org.jboss.proxy.SecurityInterceptor</interceptor>
-					<interceptor>org.jboss.proxy.TransactionInterceptor</interceptor>
-					<interceptor>org.jboss.invocation.InvokerInterceptor</interceptor>
-				</bean>
-				<list-entity>
-					<interceptor>org.jboss.proxy.ejb.ListEntityInterceptor</interceptor>
-					<interceptor>org.jboss.proxy.SecurityInterceptor</interceptor>
-					<interceptor>org.jboss.proxy.TransactionInterceptor</interceptor>
-					<interceptor>org.jboss.invocation.InvokerInterceptor</interceptor>
-				</list-entity>
-			</client-interceptors>
-			<instance-pool>org.jboss.ejb.plugins.EntityInstancePool</instance-pool>
-			<instance-cache>org.jboss.ejb.plugins.EntityInstanceCache</instance-cache>
-			<persistence-manager>org.jboss.ejb.plugins.cmp.jdbc.JDBCStoreManager</persistence-manager>
-			<transaction-manager>org.jboss.tm.TxManager</transaction-manager>
-			<locking-policy>org.jboss.ejb.plugins.lock.QueuedPessimisticEJBLock</locking-policy>
-			<container-cache-conf>
-				<cache-policy>org.jboss.ejb.plugins.LRUEnterpriseContextCachePolicy</cache-policy>
-				<cache-policy-conf>
-					<min-capacity>50</min-capacity>
-					<max-capacity>1000000</max-capacity>
-					<overager-period>300</overager-period>
-					<max-bean-age>600</max-bean-age>
-					<resizer-period>400</resizer-period>
-					<max-cache-miss-period>60</max-cache-miss-period>
-					<min-cache-miss-period>1</min-cache-miss-period>
-					<cache-load-factor>0.75</cache-load-factor>
-				</cache-policy-conf>
-			</container-cache-conf>
-			<container-pool-conf>
-				<MaximumSize>100</MaximumSize>
-			</container-pool-conf>
-			<commit-option>B</commit-option>
-		</container-configuration>
-		<container-configuration>
-			<container-name>Instance Per Transaction CMP 2.x EntityBean</container-name>
-			<call-logging>false</call-logging>
-			<sync-on-commit-only>false</sync-on-commit-only>
-			<container-invoker>org.jboss.proxy.ejb.ProxyFactory</container-invoker>
-			<container-interceptors>
-				<interceptor>org.jboss.ejb.plugins.LogInterceptor</interceptor>
-				<interceptor>org.jboss.ejb.plugins.SecurityInterceptor</interceptor>
-				<interceptor>org.jboss.ejb.plugins.TxInterceptorCMT</interceptor>
-				<interceptor metricsEnabled = "true">org.jboss.ejb.plugins.MetricsInterceptor</interceptor>
-				<interceptor>org.jboss.ejb.plugins.EntityCreationInterceptor</interceptor>
-				<interceptor>org.jboss.ejb.plugins.EntityLockInterceptor</interceptor>
-				<interceptor>org.jboss.ejb.plugins.EntityMultiInstanceInterceptor</interceptor>    
-				<interceptor>org.jboss.ejb.plugins.EntityReentranceInterceptor</interceptor>
-                                <interceptor>org.jboss.resource.connectionmanager.CachedConnectionInterceptor</interceptor>
-                                <interceptor>org.jboss.ejb.plugins.EntityMultiInstanceSynchronizationInterceptor</interceptor>
-				<interceptor>org.jboss.ejb.plugins.cmp.jdbc.JDBCRelationInterceptor</interceptor>
-			</container-interceptors>
-			<client-interceptors>
-				<home>
-					<interceptor>org.jboss.proxy.ejb.HomeInterceptor</interceptor>
-					<interceptor>org.jboss.proxy.SecurityInterceptor</interceptor>
-					<interceptor>org.jboss.proxy.TransactionInterceptor</interceptor>
-					<interceptor>org.jboss.invocation.InvokerInterceptor</interceptor>
-				</home>
-				<bean>
-					<interceptor>org.jboss.proxy.ejb.EntityInterceptor</interceptor>
-					<interceptor>org.jboss.proxy.SecurityInterceptor</interceptor>
-					<interceptor>org.jboss.proxy.TransactionInterceptor</interceptor>
-					<interceptor>org.jboss.invocation.InvokerInterceptor</interceptor>
-				</bean>
-				<list-entity>
-					<interceptor>org.jboss.proxy.ejb.ListEntityInterceptor</interceptor>
-					<interceptor>org.jboss.proxy.SecurityInterceptor</interceptor>
-					<interceptor>org.jboss.proxy.TransactionInterceptor</interceptor>
-					<interceptor>org.jboss.invocation.InvokerInterceptor</interceptor>
-				</list-entity>
-			</client-interceptors>
-			<instance-pool>org.jboss.ejb.plugins.EntityInstancePool</instance-pool>
-			<instance-cache>org.jboss.ejb.plugins.EntityInstanceCache</instance-cache>
-			<persistence-manager>org.jboss.ejb.plugins.cmp.jdbc.JDBCStoreManager</persistence-manager>
-			<transaction-manager>org.jboss.tm.TxManager</transaction-manager>
-			<locking-policy>org.jboss.ejb.plugins.lock.NoLock</locking-policy>
-			<container-cache-conf>
-				<cache-policy>org.jboss.ejb.plugins.LRUEnterpriseContextCachePolicy</cache-policy>
-				<cache-policy-conf>
-					<min-capacity>50</min-capacity>
-					<max-capacity>1000000</max-capacity>
-					<overager-period>300</overager-period>
-					<max-bean-age>600</max-bean-age>
-					<resizer-period>400</resizer-period>
-					<max-cache-miss-period>60</max-cache-miss-period>
-					<min-cache-miss-period>1</min-cache-miss-period>
-					<cache-load-factor>0.75</cache-load-factor>
-				</cache-policy-conf>
-			</container-cache-conf>
-			<container-pool-conf>
-				<MaximumSize>100</MaximumSize>
-			</container-pool-conf>
-			<commit-option>B</commit-option>
-		</container-configuration>
-		<container-configuration>
-			<container-name>Standard CMP EntityBean</container-name>
-			<call-logging>false</call-logging>
-			<sync-on-commit-only>false</sync-on-commit-only>
-			<container-invoker>org.jboss.proxy.ejb.ProxyFactory</container-invoker>
-			<container-interceptors>
-				<interceptor>org.jboss.ejb.plugins.LogInterceptor</interceptor>
-				<interceptor>org.jboss.ejb.plugins.SecurityInterceptor</interceptor>
-				<interceptor>org.jboss.ejb.plugins.TxInterceptorCMT</interceptor>
-				<interceptor metricsEnabled = "true">org.jboss.ejb.plugins.MetricsInterceptor</interceptor>
-				<interceptor>org.jboss.ejb.plugins.EntityCreationInterceptor</interceptor>
-				<interceptor>org.jboss.ejb.plugins.EntityLockInterceptor</interceptor>
-				<interceptor>org.jboss.ejb.plugins.EntityInstanceInterceptor</interceptor>    
-				<interceptor>org.jboss.ejb.plugins.EntityReentranceInterceptor</interceptor>
-                                <interceptor>org.jboss.resource.connectionmanager.CachedConnectionInterceptor</interceptor>
-                                <interceptor>org.jboss.ejb.plugins.EntitySynchronizationInterceptor</interceptor>
-			</container-interceptors>
-			<client-interceptors>
-				<home>
-					<interceptor>org.jboss.proxy.ejb.HomeInterceptor</interceptor>
-					<interceptor>org.jboss.proxy.SecurityInterceptor</interceptor>
-					<interceptor>org.jboss.proxy.TransactionInterceptor</interceptor>
-					<interceptor>org.jboss.invocation.InvokerInterceptor</interceptor>
-				</home>
-				<bean>
-					<interceptor>org.jboss.proxy.ejb.EntityInterceptor</interceptor>
-					<interceptor>org.jboss.proxy.SecurityInterceptor</interceptor>
-					<interceptor>org.jboss.proxy.TransactionInterceptor</interceptor>
-					<interceptor>org.jboss.invocation.InvokerInterceptor</interceptor>
-				</bean>
-				<list-entity>
-					<interceptor>org.jboss.proxy.ejb.ListEntityInterceptor</interceptor>
-					<interceptor>org.jboss.proxy.SecurityInterceptor</interceptor>
-					<interceptor>org.jboss.proxy.TransactionInterceptor</interceptor>
-					<interceptor>org.jboss.invocation.InvokerInterceptor</interceptor>
-				</list-entity>
-			</client-interceptors>
-			<instance-pool>org.jboss.ejb.plugins.EntityInstancePool</instance-pool>
-			<instance-cache>org.jboss.ejb.plugins.EntityInstanceCache</instance-cache>
-			<persistence-manager>org.jboss.ejb.plugins.jaws.JAWSPersistenceManager</persistence-manager>
-			<transaction-manager>org.jboss.tm.TxManager</transaction-manager>
-			<locking-policy>org.jboss.ejb.plugins.lock.QueuedPessimisticEJBLock</locking-policy>
-			<container-cache-conf>
-				<cache-policy>org.jboss.ejb.plugins.LRUEnterpriseContextCachePolicy</cache-policy>
-				<cache-policy-conf>
-					<min-capacity>50</min-capacity>
-					<max-capacity>1000000</max-capacity>
-					<overager-period>300</overager-period>
-					<max-bean-age>600</max-bean-age>
-					<resizer-period>400</resizer-period>
-					<max-cache-miss-period>60</max-cache-miss-period>
-					<min-cache-miss-period>1</min-cache-miss-period>
-					<cache-load-factor>0.75</cache-load-factor>
-				</cache-policy-conf>
-			</container-cache-conf>
-			<container-pool-conf>
-				<MaximumSize>100</MaximumSize>
-			</container-pool-conf>
-			<commit-option>A</commit-option>
-		</container-configuration>
-		<container-configuration>
-			<container-name>Instance Per Transaction CMP EntityBean</container-name>
-			<call-logging>false</call-logging>
-			<sync-on-commit-only>false</sync-on-commit-only>
-			<container-invoker>org.jboss.proxy.ejb.ProxyFactory</container-invoker>
-			<container-interceptors>
-				<interceptor>org.jboss.ejb.plugins.LogInterceptor</interceptor>
-				<interceptor>org.jboss.ejb.plugins.SecurityInterceptor</interceptor>
-				<interceptor>org.jboss.ejb.plugins.TxInterceptorCMT</interceptor>
-				<interceptor metricsEnabled = "true">org.jboss.ejb.plugins.MetricsInterceptor</interceptor>
-				<interceptor>org.jboss.ejb.plugins.EntityCreationInterceptor</interceptor>
-				<interceptor>org.jboss.ejb.plugins.EntityLockInterceptor</interceptor>
-				<interceptor>org.jboss.ejb.plugins.EntityMultiInstanceInterceptor</interceptor>    
-				<interceptor>org.jboss.ejb.plugins.EntityReentranceInterceptor</interceptor>
-                                <interceptor>org.jboss.resource.connectionmanager.CachedConnectionInterceptor</interceptor>
-                                <interceptor>org.jboss.ejb.plugins.EntityMultiInstanceSynchronizationInterceptor</interceptor>
-			</container-interceptors>
-			<client-interceptors>
-				<home>
-					<interceptor>org.jboss.proxy.ejb.HomeInterceptor</interceptor>
-					<interceptor>org.jboss.proxy.SecurityInterceptor</interceptor>
-					<interceptor>org.jboss.proxy.TransactionInterceptor</interceptor>
-					<interceptor>org.jboss.invocation.InvokerInterceptor</interceptor>
-				</home>
-				<bean>
-					<interceptor>org.jboss.proxy.ejb.EntityInterceptor</interceptor>
-					<interceptor>org.jboss.proxy.SecurityInterceptor</interceptor>
-					<interceptor>org.jboss.proxy.TransactionInterceptor</interceptor>
-					<interceptor>org.jboss.invocation.InvokerInterceptor</interceptor>
-				</bean>
-				<list-entity>
-					<interceptor>org.jboss.proxy.ejb.ListEntityInterceptor</interceptor>
-					<interceptor>org.jboss.proxy.SecurityInterceptor</interceptor>
-					<interceptor>org.jboss.proxy.TransactionInterceptor</interceptor>
-					<interceptor>org.jboss.invocation.InvokerInterceptor</interceptor>
-				</list-entity>
-			</client-interceptors>
-			<instance-pool>org.jboss.ejb.plugins.EntityInstancePool</instance-pool>
-			<instance-cache>org.jboss.ejb.plugins.EntityInstanceCache</instance-cache>
-			<persistence-manager>org.jboss.ejb.plugins.jaws.JAWSPersistenceManager</persistence-manager>
-			<transaction-manager>org.jboss.tm.TxManager</transaction-manager>
-			<locking-policy>org.jboss.ejb.plugins.lock.NoLock</locking-policy>
-			<container-cache-conf>
-				<cache-policy>org.jboss.ejb.plugins.LRUEnterpriseContextCachePolicy</cache-policy>
-				<cache-policy-conf>
-					<min-capacity>50</min-capacity>
-					<max-capacity>1000000</max-capacity>
-					<overager-period>300</overager-period>
-					<max-bean-age>600</max-bean-age>
-					<resizer-period>400</resizer-period>
-					<max-cache-miss-period>60</max-cache-miss-period>
-					<min-cache-miss-period>1</min-cache-miss-period>
-					<cache-load-factor>0.75</cache-load-factor>
-				</cache-policy-conf>
-			</container-cache-conf>
-			<container-pool-conf>
-				<MaximumSize>100</MaximumSize>
-			</container-pool-conf>
-			<commit-option>A</commit-option>
-		</container-configuration>
-		<container-configuration>
-			<container-name>Clustered CMP 2.x EntityBean</container-name>
-			<call-logging>false</call-logging>
-			<sync-on-commit-only>false</sync-on-commit-only>
-			<container-invoker>org.jboss.proxy.ejb.ProxyFactoryHA</container-invoker>
-			<container-interceptors>
-				<interceptor>org.jboss.ejb.plugins.LogInterceptor</interceptor>
-				<interceptor>org.jboss.ejb.plugins.CleanShutdownInterceptor</interceptor>
-				<interceptor>org.jboss.ejb.plugins.SecurityInterceptor</interceptor>
-				<interceptor>org.jboss.ejb.plugins.TxInterceptorCMT</interceptor>
-				<interceptor metricsEnabled = "true">org.jboss.ejb.plugins.MetricsInterceptor</interceptor>
-				<interceptor>org.jboss.ejb.plugins.EntityCreationInterceptor</interceptor>
-				<interceptor>org.jboss.ejb.plugins.EntityLockInterceptor</interceptor>
-				<interceptor>org.jboss.ejb.plugins.EntityInstanceInterceptor</interceptor>
-				<interceptor>org.jboss.ejb.plugins.EntityReentranceInterceptor</interceptor>
-                                <interceptor>org.jboss.resource.connectionmanager.CachedConnectionInterceptor</interceptor>
-                                <interceptor>org.jboss.ejb.plugins.EntitySynchronizationInterceptor</interceptor>
-				<interceptor>org.jboss.ejb.plugins.cmp.jdbc.JDBCRelationInterceptor</interceptor>
-			</container-interceptors>
-			<client-interceptors>
-				<home>
-					<interceptor>org.jboss.proxy.ejb.HomeInterceptor</interceptor>
-					<interceptor>org.jboss.proxy.SecurityInterceptor</interceptor>
-					<interceptor>org.jboss.proxy.TransactionInterceptor</interceptor>
-					<interceptor>org.jboss.invocation.InvokerInterceptor</interceptor>
-				</home>
-				<bean>
-					<interceptor>org.jboss.proxy.ejb.EntityInterceptor</interceptor>
-					<interceptor>org.jboss.proxy.SecurityInterceptor</interceptor>
-					<interceptor>org.jboss.proxy.TransactionInterceptor</interceptor>
-					<interceptor>org.jboss.invocation.InvokerInterceptor</interceptor>
-				</bean>
-				<list-entity>
-					<interceptor>org.jboss.proxy.ejb.ListEntityInterceptor</interceptor>
-					<interceptor>org.jboss.proxy.SecurityInterceptor</interceptor>
-					<interceptor>org.jboss.proxy.TransactionInterceptor</interceptor>
-					<interceptor>org.jboss.invocation.InvokerInterceptor</interceptor>
-				</list-entity>
-			</client-interceptors>
-			<instance-pool>org.jboss.ejb.plugins.EntityInstancePool</instance-pool>
-			<instance-cache>org.jboss.ejb.plugins.EntityInstanceCache</instance-cache>
-			<persistence-manager>org.jboss.ejb.plugins.cmp.jdbc.JDBCStoreManager</persistence-manager>
-			<transaction-manager>org.jboss.tm.TxManager</transaction-manager>
-			<locking-policy>org.jboss.ejb.plugins.lock.QueuedPessimisticEJBLock</locking-policy>
-			<container-cache-conf>
-				<cache-policy>org.jboss.ejb.plugins.LRUEnterpriseContextCachePolicy</cache-policy>
-				<cache-policy-conf>
-					<min-capacity>50</min-capacity>
-					<max-capacity>1000000</max-capacity>
-					<overager-period>300</overager-period>
-					<max-bean-age>600</max-bean-age>
-					<resizer-period>400</resizer-period>
-					<max-cache-miss-period>60</max-cache-miss-period>
-					<min-cache-miss-period>1</min-cache-miss-period>
-					<cache-load-factor>0.75</cache-load-factor>
-				</cache-policy-conf>
-			</container-cache-conf>
-			<container-pool-conf>
-				<MaximumSize>100</MaximumSize>
-			</container-pool-conf>
-			<commit-option>B</commit-option>
-		</container-configuration>
-		<container-configuration>
-			<container-name>Clustered CMP EntityBean</container-name>
-			<call-logging>false</call-logging>
-			<sync-on-commit-only>false</sync-on-commit-only>
-			<container-invoker>org.jboss.proxy.ejb.ProxyFactoryHA</container-invoker>
-			<container-interceptors>
-				<interceptor>org.jboss.ejb.plugins.LogInterceptor</interceptor>
-				<interceptor>org.jboss.ejb.plugins.CleanShutdownInterceptor</interceptor>
-				<interceptor>org.jboss.ejb.plugins.SecurityInterceptor</interceptor>
-				<interceptor>org.jboss.ejb.plugins.TxInterceptorCMT</interceptor>
-				<interceptor metricsEnabled = "true">org.jboss.ejb.plugins.MetricsInterceptor</interceptor>
-				<interceptor>org.jboss.ejb.plugins.EntityCreationInterceptor</interceptor>
-				<interceptor>org.jboss.ejb.plugins.EntityLockInterceptor</interceptor>
-				<interceptor>org.jboss.ejb.plugins.EntityInstanceInterceptor</interceptor>
-				<interceptor>org.jboss.ejb.plugins.EntityReentranceInterceptor</interceptor>
-                                <interceptor>org.jboss.resource.connectionmanager.CachedConnectionInterceptor</interceptor>
-                                <interceptor>org.jboss.ejb.plugins.EntitySynchronizationInterceptor</interceptor>
-			</container-interceptors>
-			<client-interceptors>
-				<home>
-					<interceptor>org.jboss.proxy.ejb.HomeInterceptor</interceptor>
-					<interceptor>org.jboss.proxy.SecurityInterceptor</interceptor>
-					<interceptor>org.jboss.proxy.TransactionInterceptor</interceptor>
-					<interceptor>org.jboss.invocation.InvokerInterceptor</interceptor>
-				</home>
-				<bean>
-					<interceptor>org.jboss.proxy.ejb.EntityInterceptor</interceptor>
-					<interceptor>org.jboss.proxy.SecurityInterceptor</interceptor>
-					<interceptor>org.jboss.proxy.TransactionInterceptor</interceptor>
-					<interceptor>org.jboss.invocation.InvokerInterceptor</interceptor>
-				</bean>
-				<list-entity>
-					<interceptor>org.jboss.proxy.ejb.ListEntityInterceptor</interceptor>
-					<interceptor>org.jboss.proxy.SecurityInterceptor</interceptor>
-					<interceptor>org.jboss.proxy.TransactionInterceptor</interceptor>
-					<interceptor>org.jboss.invocation.InvokerInterceptor</interceptor>
-				</list-entity>
-			</client-interceptors>
-			<instance-pool>org.jboss.ejb.plugins.EntityInstancePool</instance-pool>
-			<instance-cache>org.jboss.ejb.plugins.EntityInstanceCache</instance-cache>
-			<persistence-manager>org.jboss.ejb.plugins.jaws.JAWSPersistenceManager</persistence-manager>
-			<transaction-manager>org.jboss.tm.TxManager</transaction-manager>
-			<locking-policy>org.jboss.ejb.plugins.lock.QueuedPessimisticEJBLock</locking-policy>
-			<container-cache-conf>
-				<cache-policy>org.jboss.ejb.plugins.LRUEnterpriseContextCachePolicy</cache-policy>
-				<cache-policy-conf>
-					<min-capacity>50</min-capacity>
-					<max-capacity>1000000</max-capacity>
-					<overager-period>300</overager-period>
-					<max-bean-age>600</max-bean-age>
-					<resizer-period>400</resizer-period>
-					<max-cache-miss-period>60</max-cache-miss-period>
-					<min-cache-miss-period>1</min-cache-miss-period>
-					<cache-load-factor>0.75</cache-load-factor>
-				</cache-policy-conf>
-			</container-cache-conf>
-			<container-pool-conf>
-				<MaximumSize>100</MaximumSize>
-			</container-pool-conf>
-			<commit-option>B</commit-option>
-		</container-configuration>
-		<container-configuration>
-			<container-name>Standard Stateless SessionBean</container-name>
-			<call-logging>false</call-logging>
-			<container-invoker>org.jboss.proxy.ejb.ProxyFactory</container-invoker>
-			<container-interceptors>
-				<interceptor>org.jboss.ejb.plugins.LogInterceptor</interceptor>
-				<interceptor>org.jboss.ejb.plugins.SecurityInterceptor</interceptor>
-				<!-- CMT -->
-
-				<interceptor transaction = "Container">org.jboss.ejb.plugins.TxInterceptorCMT</interceptor>
-				<interceptor transaction = "Container" metricsEnabled = "true">org.jboss.ejb.plugins.MetricsInterceptor</interceptor>
-				<interceptor transaction = "Container">org.jboss.ejb.plugins.StatelessSessionInstanceInterceptor</interceptor>
-				<!-- BMT -->
-
-				<interceptor transaction = "Bean">org.jboss.ejb.plugins.StatelessSessionInstanceInterceptor</interceptor>
-				<interceptor transaction = "Bean">org.jboss.ejb.plugins.TxInterceptorBMT</interceptor>
-				<interceptor transaction = "Bean" metricsEnabled = "true">org.jboss.ejb.plugins.MetricsInterceptor</interceptor>    <interceptor>org.jboss.resource.connectionmanager.CachedConnectionInterceptor</interceptor>
-         </container-interceptors>
-			<client-interceptors>
-				<home>
-					<interceptor>org.jboss.proxy.ejb.HomeInterceptor</interceptor>
-					<interceptor>org.jboss.proxy.SecurityInterceptor</interceptor>
-					<interceptor>org.jboss.proxy.TransactionInterceptor</interceptor>
-					<interceptor>org.jboss.invocation.InvokerInterceptor</interceptor>
-				</home>
-				<bean>
-					<interceptor>org.jboss.proxy.ejb.StatelessSessionInterceptor</interceptor>
-					<interceptor>org.jboss.proxy.SecurityInterceptor</interceptor>
-					<interceptor>org.jboss.proxy.TransactionInterceptor</interceptor>
-					<interceptor>org.jboss.invocation.InvokerInterceptor</interceptor>
-				</bean>
-			</client-interceptors>
-			<instance-pool>org.jboss.ejb.plugins.StatelessSessionInstancePool</instance-pool>
-			<instance-cache/>
-			<persistence-manager/>
-			<transaction-manager>org.jboss.tm.TxManager</transaction-manager>
-			<container-pool-conf>
-				<MaximumSize>100</MaximumSize>
-			</container-pool-conf>
-		</container-configuration>
-		<container-configuration>
-			<container-name>Clustered Stateless SessionBean</container-name>
-			<call-logging>false</call-logging>
-			<container-invoker>org.jboss.proxy.ejb.ProxyFactoryHA</container-invoker>
-			<container-interceptors>
-				<interceptor>org.jboss.ejb.plugins.LogInterceptor</interceptor>
-				<interceptor>org.jboss.ejb.plugins.CleanShutdownInterceptor</interceptor>
-				<interceptor>org.jboss.ejb.plugins.SecurityInterceptor</interceptor>
-				<!-- CMT -->
-
-				<interceptor transaction = "Container">org.jboss.ejb.plugins.TxInterceptorCMT</interceptor>
-				<interceptor transaction = "Container" metricsEnabled = "true">org.jboss.ejb.plugins.MetricsInterceptor</interceptor>
-				<interceptor transaction = "Container">org.jboss.ejb.plugins.StatelessSessionInstanceInterceptor</interceptor>
-				<!-- BMT -->
-
-				<interceptor transaction = "Bean">org.jboss.ejb.plugins.StatelessSessionInstanceInterceptor</interceptor>
-				<interceptor transaction = "Bean">org.jboss.ejb.plugins.TxInterceptorBMT</interceptor>
-				<interceptor transaction = "Bean" metricsEnabled = "true">org.jboss.ejb.plugins.MetricsInterceptor</interceptor>    <interceptor>org.jboss.resource.connectionmanager.CachedConnectionInterceptor</interceptor>
-         </container-interceptors>
-			<client-interceptors>
-				<home>
-					<interceptor>org.jboss.proxy.ejb.HomeInterceptor</interceptor>
-					<interceptor>org.jboss.proxy.SecurityInterceptor</interceptor>
-					<interceptor>org.jboss.proxy.TransactionInterceptor</interceptor>
-					<interceptor>org.jboss.invocation.InvokerInterceptor</interceptor>
-				</home>
-				<bean>
-					<interceptor>org.jboss.proxy.ejb.StatelessSessionInterceptor</interceptor>
-					<interceptor>org.jboss.proxy.SecurityInterceptor</interceptor>
-					<interceptor>org.jboss.proxy.TransactionInterceptor</interceptor>
-					<interceptor>org.jboss.invocation.InvokerInterceptor</interceptor>
-				</bean>
-			</client-interceptors>
-			<instance-pool>org.jboss.ejb.plugins.StatelessSessionInstancePool</instance-pool>
-			<instance-cache/>
-			<persistence-manager/>
-			<transaction-manager>org.jboss.tm.TxManager</transaction-manager>
-			<container-pool-conf>
-				<MaximumSize>100</MaximumSize>
-			</container-pool-conf>
-		</container-configuration>
-		<container-configuration>
-			<container-name>Standard Stateful SessionBean</container-name>
-			<call-logging>false</call-logging>
-			<container-invoker>org.jboss.proxy.ejb.ProxyFactory</container-invoker>
-			<container-interceptors>
-				<interceptor>org.jboss.ejb.plugins.LogInterceptor</interceptor>
-				<!-- CMT -->
-
-				<interceptor transaction = "Container">org.jboss.ejb.plugins.TxInterceptorCMT</interceptor>
-				<interceptor transaction = "Container" metricsEnabled = "true">org.jboss.ejb.plugins.MetricsInterceptor</interceptor>
-				<interceptor transaction = "Container">org.jboss.ejb.plugins.StatefulSessionInstanceInterceptor</interceptor>
-				<!-- BMT -->
-
-				<interceptor transaction = "Bean">org.jboss.ejb.plugins.StatefulSessionInstanceInterceptor</interceptor>
-				<interceptor transaction = "Bean">org.jboss.ejb.plugins.TxInterceptorBMT</interceptor>
-				<interceptor transaction = "Bean" metricsEnabled = "true">org.jboss.ejb.plugins.MetricsInterceptor</interceptor>    <interceptor>org.jboss.resource.connectionmanager.CachedConnectionInterceptor</interceptor>
-            <interceptor>org.jboss.ejb.plugins.SecurityInterceptor</interceptor>
-			</container-interceptors>
-			<client-interceptors>
-				<home>
-					<interceptor>org.jboss.proxy.ejb.HomeInterceptor</interceptor>
-					<interceptor>org.jboss.proxy.SecurityInterceptor</interceptor>
-					<interceptor>org.jboss.proxy.TransactionInterceptor</interceptor>
-					<interceptor>org.jboss.invocation.InvokerInterceptor</interceptor>
-				</home>
-				<bean>
-					<interceptor>org.jboss.proxy.ejb.StatefulSessionInterceptor</interceptor>
-					<interceptor>org.jboss.proxy.SecurityInterceptor</interceptor>
-					<interceptor>org.jboss.proxy.TransactionInterceptor</interceptor>
-					<interceptor>org.jboss.invocation.InvokerInterceptor</interceptor>
-				</bean>
-			</client-interceptors>
-			<instance-cache>org.jboss.ejb.plugins.StatefulSessionInstanceCache</instance-cache>
-			<persistence-manager>org.jboss.ejb.plugins.StatefulSessionFilePersistenceManager</persistence-manager>
-			<transaction-manager>org.jboss.tm.TxManager</transaction-manager>
-			<container-cache-conf>
-				<cache-policy>org.jboss.ejb.plugins.LRUStatefulContextCachePolicy</cache-policy>
-				<cache-policy-conf>
-					<min-capacity>50</min-capacity>
-					<max-capacity>1000000</max-capacity>
-					<remover-period>1800</remover-period>
-					<max-bean-life>1800</max-bean-life>
-					<overager-period>300</overager-period>
-					<max-bean-age>600</max-bean-age>
-					<resizer-period>400</resizer-period>
-					<max-cache-miss-period>60</max-cache-miss-period>
-					<min-cache-miss-period>1</min-cache-miss-period>
-					<cache-load-factor>0.75</cache-load-factor>
-				</cache-policy-conf>
-			</container-cache-conf>
-			<container-pool-conf>
-				<MaximumSize>100</MaximumSize>
-			</container-pool-conf>
-		</container-configuration>
-		<container-configuration>
-			<container-name>Clustered Stateful SessionBean</container-name>
-			<call-logging>false</call-logging>
-			<container-invoker>org.jboss.proxy.ejb.ProxyFactoryHA</container-invoker>
-			<container-interceptors>
-				<interceptor>org.jboss.ejb.plugins.LogInterceptor</interceptor>
-				<interceptor>org.jboss.ejb.plugins.CleanShutdownInterceptor</interceptor>
-				<!-- CMT -->
-
-				<interceptor transaction = "Container">org.jboss.ejb.plugins.TxInterceptorCMT</interceptor>
-				<interceptor transaction = "Container" metricsEnabled = "true">org.jboss.ejb.plugins.MetricsInterceptor</interceptor>
-				<interceptor transaction = "Container">org.jboss.ejb.plugins.StatefulSessionInstanceInterceptor</interceptor>
-				<!-- BMT -->
-
-				<interceptor transaction = "Bean">org.jboss.ejb.plugins.StatefulSessionInstanceInterceptor</interceptor>
-				<interceptor transaction = "Bean">org.jboss.ejb.plugins.TxInterceptorBMT</interceptor>
-				<interceptor transaction = "Bean" metricsEnabled = "true">org.jboss.ejb.plugins.MetricsInterceptor</interceptor>
-				<interceptor>org.jboss.ejb.plugins.SecurityInterceptor</interceptor>    <interceptor>org.jboss.resource.connectionmanager.CachedConnectionInterceptor</interceptor>
-            <interceptor>org.jboss.ejb.plugins.StatefulHASessionSynchronisationInterceptor</interceptor>
-			</container-interceptors>
-			<client-interceptors>
-				<home>
-					<interceptor>org.jboss.proxy.ejb.HomeInterceptor</interceptor>
-					<interceptor>org.jboss.proxy.SecurityInterceptor</interceptor>
-					<interceptor>org.jboss.proxy.TransactionInterceptor</interceptor>
-					<interceptor>org.jboss.invocation.InvokerInterceptor</interceptor>
-				</home>
-				<bean>
-					<interceptor>org.jboss.proxy.ejb.StatefulSessionInterceptor</interceptor>
-					<interceptor>org.jboss.proxy.SecurityInterceptor</interceptor>
-					<interceptor>org.jboss.proxy.TransactionInterceptor</interceptor>
-					<interceptor>org.jboss.invocation.InvokerInterceptor</interceptor>
-				</bean>
-			</client-interceptors>
-			<instance-cache>org.jboss.ejb.plugins.StatefulSessionInstanceCache</instance-cache>
-			<persistence-manager>org.jboss.ejb.plugins.StatefulHASessionPersistenceManager</persistence-manager>
-			<transaction-manager>org.jboss.tm.TxManager</transaction-manager>
-			<container-cache-conf>
-				<cache-policy>org.jboss.ejb.plugins.LRUStatefulContextCachePolicy</cache-policy>
-				<cache-policy-conf>
-					<min-capacity>50</min-capacity>
-					<max-capacity>1000000</max-capacity>
-					<remover-period>1800</remover-period>
-					<max-bean-life>1800</max-bean-life>
-					<overager-period>300</overager-period>
-					<max-bean-age>600</max-bean-age>
-					<resizer-period>400</resizer-period>
-					<max-cache-miss-period>60</max-cache-miss-period>
-					<min-cache-miss-period>1</min-cache-miss-period>
-					<cache-load-factor>0.75</cache-load-factor>
-				</cache-policy-conf>
-			</container-cache-conf>
-			<container-pool-conf>
-				<MaximumSize>100</MaximumSize>
-			</container-pool-conf>
-		</container-configuration>
-		<container-configuration>
-			<container-name>Standard BMP EntityBean</container-name>
-			<call-logging>false</call-logging>
-			<sync-on-commit-only>false</sync-on-commit-only>
-			<container-invoker>org.jboss.proxy.ejb.ProxyFactory</container-invoker>
-			<container-interceptors>
-				<interceptor>org.jboss.ejb.plugins.LogInterceptor</interceptor>
-				<interceptor>org.jboss.ejb.plugins.SecurityInterceptor</interceptor>
-				<interceptor>org.jboss.ejb.plugins.TxInterceptorCMT</interceptor>
-				<interceptor metricsEnabled = "true">org.jboss.ejb.plugins.MetricsInterceptor</interceptor>
-				<interceptor>org.jboss.ejb.plugins.EntityCreationInterceptor</interceptor>
-				<interceptor>org.jboss.ejb.plugins.EntityLockInterceptor</interceptor>
-				<interceptor>org.jboss.ejb.plugins.EntityInstanceInterceptor</interceptor>
-				<interceptor>org.jboss.ejb.plugins.EntityReentranceInterceptor</interceptor>
-                                <interceptor>org.jboss.resource.connectionmanager.CachedConnectionInterceptor</interceptor>
-	                        <interceptor>org.jboss.ejb.plugins.EntitySynchronizationInterceptor</interceptor>
-			</container-interceptors>
-			<client-interceptors>
-				<home>
-					<interceptor>org.jboss.proxy.ejb.HomeInterceptor</interceptor>
-					<interceptor>org.jboss.proxy.SecurityInterceptor</interceptor>
-					<interceptor>org.jboss.proxy.TransactionInterceptor</interceptor>
-					<interceptor>org.jboss.invocation.InvokerInterceptor</interceptor>
-				</home>
-				<bean>
-					<interceptor>org.jboss.proxy.ejb.EntityInterceptor</interceptor>
-					<interceptor>org.jboss.proxy.SecurityInterceptor</interceptor>
-					<interceptor>org.jboss.proxy.TransactionInterceptor</interceptor>
-					<interceptor>org.jboss.invocation.InvokerInterceptor</interceptor>
-				</bean>
-				<list-entity>
-					<interceptor>org.jboss.proxy.ejb.ListEntityInterceptor</interceptor>
-					<interceptor>org.jboss.proxy.SecurityInterceptor</interceptor>
-					<interceptor>org.jboss.proxy.TransactionInterceptor</interceptor>
-					<interceptor>org.jboss.invocation.InvokerInterceptor</interceptor>
-				</list-entity>
-			</client-interceptors>
-			<instance-pool>org.jboss.ejb.plugins.EntityInstancePool</instance-pool>
-			<instance-cache>org.jboss.ejb.plugins.EntityInstanceCache</instance-cache>
-			<persistence-manager>org.jboss.ejb.plugins.BMPPersistenceManager</persistence-manager>
-			<transaction-manager>org.jboss.tm.TxManager</transaction-manager>
-			<locking-policy>org.jboss.ejb.plugins.lock.QueuedPessimisticEJBLock</locking-policy>
-			<container-cache-conf>
-				<cache-policy>org.jboss.ejb.plugins.LRUEnterpriseContextCachePolicy</cache-policy>
-				<cache-policy-conf>
-					<min-capacity>50</min-capacity>
-					<max-capacity>1000000</max-capacity>
-					<overager-period>300</overager-period>
-					<max-bean-age>600</max-bean-age>
-					<resizer-period>400</resizer-period>
-					<max-cache-miss-period>60</max-cache-miss-period>
-					<min-cache-miss-period>1</min-cache-miss-period>
-					<cache-load-factor>0.75</cache-load-factor>
-				</cache-policy-conf>
-			</container-cache-conf>
-			<container-pool-conf>
-				<MaximumSize>100</MaximumSize>
-			</container-pool-conf>
-			<commit-option>A</commit-option>
-		</container-configuration>
-		<container-configuration>
-			<container-name>Instance Per Transaction BMP EntityBean</container-name>
-			<call-logging>false</call-logging>
-			<sync-on-commit-only>false</sync-on-commit-only>
-			<container-invoker>org.jboss.proxy.ejb.ProxyFactory</container-invoker>
-			<container-interceptors>
-				<interceptor>org.jboss.ejb.plugins.LogInterceptor</interceptor>
-				<interceptor>org.jboss.ejb.plugins.SecurityInterceptor</interceptor>
-				<interceptor>org.jboss.ejb.plugins.TxInterceptorCMT</interceptor>
-				<interceptor metricsEnabled = "true">org.jboss.ejb.plugins.MetricsInterceptor</interceptor>
-				<interceptor>org.jboss.ejb.plugins.EntityCreationInterceptor</interceptor>
-				<interceptor>org.jboss.ejb.plugins.EntityLockInterceptor</interceptor>
-				<interceptor>org.jboss.ejb.plugins.EntityMultiInstanceInterceptor</interceptor>
-				<interceptor>org.jboss.ejb.plugins.EntityReentranceInterceptor</interceptor>
-                                <interceptor>org.jboss.resource.connectionmanager.CachedConnectionInterceptor</interceptor>
-                                <interceptor>org.jboss.ejb.plugins.EntityMultiInstanceSynchronizationInterceptor</interceptor>
-			</container-interceptors>
-			<client-interceptors>
-				<home>
-					<interceptor>org.jboss.proxy.ejb.HomeInterceptor</interceptor>
-					<interceptor>org.jboss.proxy.SecurityInterceptor</interceptor>
-					<interceptor>org.jboss.proxy.TransactionInterceptor</interceptor>
-					<interceptor>org.jboss.invocation.InvokerInterceptor</interceptor>
-				</home>
-				<bean>
-					<interceptor>org.jboss.proxy.ejb.EntityInterceptor</interceptor>
-					<interceptor>org.jboss.proxy.SecurityInterceptor</interceptor>
-					<interceptor>org.jboss.proxy.TransactionInterceptor</interceptor>
-					<interceptor>org.jboss.invocation.InvokerInterceptor</interceptor>
-				</bean>
-				<list-entity>
-					<interceptor>org.jboss.proxy.ejb.ListEntityInterceptor</interceptor>
-					<interceptor>org.jboss.proxy.SecurityInterceptor</interceptor>
-					<interceptor>org.jboss.proxy.TransactionInterceptor</interceptor>
-					<interceptor>org.jboss.invocation.InvokerInterceptor</interceptor>
-				</list-entity>
-			</client-interceptors>
-			<instance-pool>org.jboss.ejb.plugins.EntityInstancePool</instance-pool>
-			<instance-cache>org.jboss.ejb.plugins.EntityInstanceCache</instance-cache>
-			<persistence-manager>org.jboss.ejb.plugins.BMPPersistenceManager</persistence-manager>
-			<transaction-manager>org.jboss.tm.TxManager</transaction-manager>
-			<locking-policy>org.jboss.ejb.plugins.lock.NoLock</locking-policy>
-			<container-cache-conf>
-				<cache-policy>org.jboss.ejb.plugins.LRUEnterpriseContextCachePolicy</cache-policy>
-				<cache-policy-conf>
-					<min-capacity>50</min-capacity>
-					<max-capacity>1000000</max-capacity>
-					<overager-period>300</overager-period>
-					<max-bean-age>600</max-bean-age>
-					<resizer-period>400</resizer-period>
-					<max-cache-miss-period>60</max-cache-miss-period>
-					<min-cache-miss-period>1</min-cache-miss-period>
-					<cache-load-factor>0.75</cache-load-factor>
-				</cache-policy-conf>
-			</container-cache-conf>
-			<container-pool-conf>
-				<MaximumSize>100</MaximumSize>
-			</container-pool-conf>
-			<commit-option>B</commit-option>
-		</container-configuration>
-		<container-configuration>
-			<container-name>Clustered BMP EntityBean</container-name>
-			<call-logging>false</call-logging>
-			<sync-on-commit-only>false</sync-on-commit-only>
-			<container-invoker>org.jboss.proxy.ejb.ProxyFactoryHA</container-invoker>
-			<container-interceptors>
-				<interceptor>org.jboss.ejb.plugins.LogInterceptor</interceptor>
-				<interceptor>org.jboss.ejb.plugins.CleanShutdownInterceptor</interceptor>
-				<interceptor>org.jboss.ejb.plugins.SecurityInterceptor</interceptor>
-				<interceptor>org.jboss.ejb.plugins.TxInterceptorCMT</interceptor>
-				<interceptor metricsEnabled = "true">org.jboss.ejb.plugins.MetricsInterceptor</interceptor>
-				<interceptor>org.jboss.ejb.plugins.EntityCreationInterceptor</interceptor>
-				<interceptor>org.jboss.ejb.plugins.EntityLockInterceptor</interceptor>
-				<interceptor>org.jboss.ejb.plugins.EntityInstanceInterceptor</interceptor>
-				<interceptor>org.jboss.ejb.plugins.EntityReentranceInterceptor</interceptor>
-                                <interceptor>org.jboss.resource.connectionmanager.CachedConnectionInterceptor</interceptor>
-                                <interceptor>org.jboss.ejb.plugins.EntitySynchronizationInterceptor</interceptor>
-			</container-interceptors>
-			<client-interceptors>
-				<home>
-					<interceptor>org.jboss.proxy.ejb.HomeInterceptor</interceptor>
-					<interceptor>org.jboss.proxy.SecurityInterceptor</interceptor>
-					<interceptor>org.jboss.proxy.TransactionInterceptor</interceptor>
-					<interceptor>org.jboss.invocation.InvokerInterceptor</interceptor>
-				</home>
-				<bean>
-					<interceptor>org.jboss.proxy.ejb.EntityInterceptor</interceptor>
-					<interceptor>org.jboss.proxy.SecurityInterceptor</interceptor>
-					<interceptor>org.jboss.proxy.TransactionInterceptor</interceptor>
-					<interceptor>org.jboss.invocation.InvokerInterceptor</interceptor>
-				</bean>
-				<list-entity>
-					<interceptor>org.jboss.proxy.ejb.ListEntityInterceptor</interceptor>
-					<interceptor>org.jboss.proxy.SecurityInterceptor</interceptor>
-					<interceptor>org.jboss.proxy.TransactionInterceptor</interceptor>
-					<interceptor>org.jboss.invocation.InvokerInterceptor</interceptor>
-				</list-entity>
-			</client-interceptors>
-			<instance-pool>org.jboss.ejb.plugins.EntityInstancePool</instance-pool>
-			<instance-cache>org.jboss.ejb.plugins.EntityInstanceCache</instance-cache>
-			<persistence-manager>org.jboss.ejb.plugins.BMPPersistenceManager</persistence-manager>
-			<transaction-manager>org.jboss.tm.TxManager</transaction-manager>
-			<locking-policy>org.jboss.ejb.plugins.lock.QueuedPessimisticEJBLock</locking-policy>
-			<container-cache-conf>
-				<cache-policy>org.jboss.ejb.plugins.LRUEnterpriseContextCachePolicy</cache-policy>
-				<cache-policy-conf>
-					<min-capacity>50</min-capacity>
-					<max-capacity>1000000</max-capacity>
-					<overager-period>300</overager-period>
-					<max-bean-age>600</max-bean-age>
-					<resizer-period>400</resizer-period>
-					<max-cache-miss-period>60</max-cache-miss-period>
-					<min-cache-miss-period>1</min-cache-miss-period>
-					<cache-load-factor>0.75</cache-load-factor>
-				</cache-policy-conf>
-			</container-cache-conf>
-			<container-pool-conf>
-				<MaximumSize>100</MaximumSize>
-			</container-pool-conf>
-			<commit-option>B</commit-option>
-		</container-configuration>
-		<container-configuration>
-			<container-name>Standard Message Driven Bean</container-name>
-			<call-logging>false</call-logging>
-			<container-invoker>org.jboss.ejb.plugins.jms.JMSContainerInvoker</container-invoker>
-			<container-interceptors>
-				<interceptor>org.jboss.ejb.plugins.LogInterceptor</interceptor>
-				<interceptor>org.jboss.ejb.plugins.RunAsSecurityInterceptor</interceptor>
-				<!-- CMT -->
-
-				<interceptor transaction = "Container">org.jboss.ejb.plugins.TxInterceptorCMT</interceptor>
-				<interceptor transaction = "Container" metricsEnabled = "true">org.jboss.ejb.plugins.MetricsInterceptor</interceptor>
-				<interceptor transaction = "Container">org.jboss.ejb.plugins.MessageDrivenInstanceInterceptor</interceptor>
-				<!-- BMT -->
-
-				<interceptor transaction = "Bean">org.jboss.ejb.plugins.MessageDrivenInstanceInterceptor</interceptor>
-				<interceptor transaction = "Bean">org.jboss.ejb.plugins.MessageDrivenTxInterceptorBMT</interceptor>
-				<interceptor transaction = "Bean" metricsEnabled = "true">org.jboss.ejb.plugins.MetricsInterceptor</interceptor>    <interceptor>org.jboss.resource.connectionmanager.CachedConnectionInterceptor</interceptor>
-        </container-interceptors>
-			<client-interceptors>
-				<home>
-					<interceptor>org.jboss.proxy.ejb.HomeInterceptor</interceptor>
-					<interceptor>org.jboss.proxy.SecurityInterceptor</interceptor>
-					<interceptor>org.jboss.proxy.TransactionInterceptor</interceptor>
-					<interceptor>org.jboss.invocation.InvokerInterceptor</interceptor>
-				</home>
-				<bean>
-					<interceptor>new org.jboss.proxy.ejb.StatelessSessionInterceptor</interceptor>
-					<interceptor>org.jboss.proxy.SecurityInterceptor</interceptor>
-					<interceptor>org.jboss.proxy.TransactionInterceptor</interceptor>
-					<interceptor>org.jboss.invocation.InvokerInterceptor</interceptor>
-				</bean>
-			</client-interceptors>
-			<instance-pool>org.jboss.ejb.plugins.MessageDrivenInstancePool</instance-pool>
-			<instance-cache/>
-			<persistence-manager/>
-			<transaction-manager>org.jboss.tm.TxManager</transaction-manager>
-			<container-invoker-conf>
-				<JMSProviderAdapterJNDI>DefaultJMSProvider</JMSProviderAdapterJNDI>
-				<ServerSessionPoolFactoryJNDI>StdJMSPool</ServerSessionPoolFactoryJNDI>
-				<MaximumSize>15</MaximumSize>
-				<MaxMessages>1</MaxMessages>
-				<MDBConfig>
-					<ReconnectIntervalSec>10</ReconnectIntervalSec>
-					<DLQConfig>
-						<DestinationQueue>queue/DLQ</DestinationQueue>
-						<MaxTimesRedelivered>10</MaxTimesRedelivered>
-						<TimeToLive>0</TimeToLive>
-					</DLQConfig>
-				</MDBConfig>
-			</container-invoker-conf>
-			<container-pool-conf>
-				<MaximumSize>100</MaximumSize>
-			</container-pool-conf>
-		</container-configuration>
-		<container-configuration>
-			<container-name>IIOP CMP 2.x EntityBean</container-name>
-			<call-logging>false</call-logging>
-			<sync-on-commit-only>false</sync-on-commit-only>
-			<container-invoker>org.jboss.ejb.plugins.iiop.server.IIOPContainerInvoker</container-invoker>
-			<container-interceptors>
-				<interceptor>org.jboss.ejb.plugins.LogInterceptor</interceptor>
-				<interceptor>org.jboss.ejb.plugins.SecurityInterceptor</interceptor>
-				<interceptor>org.jboss.ejb.plugins.TxInterceptorCMT</interceptor>
-				<interceptor metricsEnabled = "true">org.jboss.ejb.plugins.MetricsInterceptor</interceptor>
-				<interceptor>org.jboss.ejb.plugins.EntityCreationInterceptor</interceptor>
-				<interceptor>org.jboss.ejb.plugins.EntityLockInterceptor</interceptor>
-				<interceptor>org.jboss.ejb.plugins.EntityInstanceInterceptor</interceptor>
-				<interceptor>org.jboss.ejb.plugins.EntityReentranceInterceptor</interceptor>
-				<interceptor>org.jboss.ejb.plugins.EntitySynchronizationInterceptor</interceptor>
-				<interceptor>org.jboss.ejb.plugins.cmp.jdbc.JDBCRelationInterceptor</interceptor>
-			</container-interceptors>
-			<instance-pool>org.jboss.ejb.plugins.EntityInstancePool</instance-pool>
-			<instance-cache>org.jboss.ejb.plugins.EntityInstanceCache</instance-cache>
-			<persistence-manager>org.jboss.ejb.plugins.cmp.jdbc.JDBCStoreManager</persistence-manager>
-			<transaction-manager>org.jboss.tm.TxManager</transaction-manager>
-			<web-class-loader>org.jboss.iiop.WebCL</web-class-loader>
-			<locking-policy>org.jboss.ejb.plugins.lock.QueuedPessimisticEJBLock</locking-policy>
-			<container-cache-conf>
-				<cache-policy>org.jboss.ejb.plugins.LRUEnterpriseContextCachePolicy</cache-policy>
-				<cache-policy-conf>
-					<min-capacity>50</min-capacity>
-					<max-capacity>1000000</max-capacity>
-					<overager-period>300</overager-period>
-					<max-bean-age>600</max-bean-age>
-					<resizer-period>400</resizer-period>
-					<max-cache-miss-period>60</max-cache-miss-period>
-					<min-cache-miss-period>1</min-cache-miss-period>
-					<cache-load-factor>0.75</cache-load-factor>
-				</cache-policy-conf>
-			</container-cache-conf>
-			<container-pool-conf>
-				<MaximumSize>100</MaximumSize>
-			</container-pool-conf>
-			<commit-option>B</commit-option>
-		</container-configuration>
-		<container-configuration>
-			<container-name>IIOP CMP EntityBean</container-name>
-			<call-logging>false</call-logging>
-			<sync-on-commit-only>false</sync-on-commit-only>
-			<container-invoker>org.jboss.ejb.plugins.iiop.server.IIOPContainerInvoker</container-invoker>
-			<container-interceptors>
-				<interceptor>org.jboss.ejb.plugins.LogInterceptor</interceptor>
-				<interceptor>org.jboss.ejb.plugins.SecurityInterceptor</interceptor>
-				<interceptor>org.jboss.ejb.plugins.TxInterceptorCMT</interceptor>
-				<interceptor metricsEnabled = "true">org.jboss.ejb.plugins.MetricsInterceptor</interceptor>
-				<interceptor>org.jboss.ejb.plugins.EntityCreationInterceptor</interceptor>
-				<interceptor>org.jboss.ejb.plugins.EntityLockInterceptor</interceptor>
-				<interceptor>org.jboss.ejb.plugins.EntityInstanceInterceptor</interceptor>
-				<interceptor>org.jboss.ejb.plugins.EntityReentranceInterceptor</interceptor>
-				<interceptor>org.jboss.ejb.plugins.EntitySynchronizationInterceptor</interceptor>
-			</container-interceptors>
-			<instance-pool>org.jboss.ejb.plugins.EntityInstancePool</instance-pool>
-			<instance-cache>org.jboss.ejb.plugins.EntityInstanceCache</instance-cache>
-			<persistence-manager>org.jboss.ejb.plugins.jaws.JAWSPersistenceManager</persistence-manager>
-			<transaction-manager>org.jboss.tm.TxManager</transaction-manager>
-			<web-class-loader>org.jboss.iiop.WebCL</web-class-loader>
-			<locking-policy>org.jboss.ejb.plugins.lock.QueuedPessimisticEJBLock</locking-policy>
-			<container-cache-conf>
-				<cache-policy>org.jboss.ejb.plugins.LRUEnterpriseContextCachePolicy</cache-policy>
-				<cache-policy-conf>
-					<min-capacity>50</min-capacity>
-					<max-capacity>1000000</max-capacity>
-					<overager-period>300</overager-period>
-					<max-bean-age>600</max-bean-age>
-					<resizer-period>400</resizer-period>
-					<max-cache-miss-period>60</max-cache-miss-period>
-					<min-cache-miss-period>1</min-cache-miss-period>
-					<cache-load-factor>0.75</cache-load-factor>
-				</cache-policy-conf>
-			</container-cache-conf>
-			<container-pool-conf>
-				<MaximumSize>100</MaximumSize>
-			</container-pool-conf>
-			<commit-option>A</commit-option>
-		</container-configuration>
-		<container-configuration>
-			<container-name>IIOP Stateless SessionBean</container-name>
-			<call-logging>false</call-logging>
-			<container-invoker>org.jboss.ejb.plugins.iiop.server.IIOPContainerInvoker</container-invoker>
-			<container-interceptors>
-				<interceptor>org.jboss.ejb.plugins.LogInterceptor</interceptor>
-				<interceptor>org.jboss.ejb.plugins.SecurityInterceptor</interceptor>
-				<!-- CMT -->
-				<interceptor transaction = "Container">org.jboss.ejb.plugins.TxInterceptorCMT</interceptor>
-				<interceptor transaction = "Container" metricsEnabled = "true">org.jboss.ejb.plugins.MetricsInterceptor</interceptor>
-				<interceptor transaction = "Container">org.jboss.ejb.plugins.StatelessSessionInstanceInterceptor</interceptor>
-				<!-- BMT -->
-				<interceptor transaction = "Bean">org.jboss.ejb.plugins.StatelessSessionInstanceInterceptor</interceptor>
-				<interceptor transaction = "Bean">org.jboss.ejb.plugins.TxInterceptorBMT</interceptor>
-				<interceptor transaction = "Bean" metricsEnabled = "true">org.jboss.ejb.plugins.MetricsInterceptor</interceptor>
-			</container-interceptors>
-			<instance-pool>org.jboss.ejb.plugins.StatelessSessionInstancePool</instance-pool>
-			<instance-cache/>
-			<persistence-manager/>
-			<transaction-manager>org.jboss.tm.TxManager</transaction-manager>
-			<web-class-loader>org.jboss.iiop.WebCL</web-class-loader>
-			<container-pool-conf>
-				<MaximumSize>100</MaximumSize>
-			</container-pool-conf>
-		</container-configuration>
-		<container-configuration>
-			<container-name>IIOP Stateful SessionBean</container-name>
-			<call-logging>false</call-logging>
-			<container-invoker>org.jboss.ejb.plugins.iiop.server.IIOPContainerInvoker</container-invoker>
-			<container-interceptors>
-				<interceptor>org.jboss.ejb.plugins.LogInterceptor</interceptor>
-				<!-- CMT -->
-
-				<interceptor transaction = "Container">org.jboss.ejb.plugins.TxInterceptorCMT</interceptor>
-				<interceptor transaction = "Container" metricsEnabled = "true">org.jboss.ejb.plugins.MetricsInterceptor</interceptor>
-				<interceptor transaction = "Container">org.jboss.ejb.plugins.StatefulSessionInstanceInterceptor</interceptor>
-				<!-- BMT -->
-
-				<interceptor transaction = "Bean">org.jboss.ejb.plugins.StatefulSessionInstanceInterceptor</interceptor>
-				<interceptor transaction = "Bean">org.jboss.ejb.plugins.TxInterceptorBMT</interceptor>
-				<interceptor transaction = "Bean" metricsEnabled = "true">org.jboss.ejb.plugins.MetricsInterceptor</interceptor>
-				<interceptor>org.jboss.ejb.plugins.SecurityInterceptor</interceptor>
-			</container-interceptors>
-			<instance-cache>org.jboss.ejb.plugins.StatefulSessionInstanceCache</instance-cache>
-			<persistence-manager>org.jboss.ejb.plugins.StatefulSessionFilePersistenceManager</persistence-manager>
-			<transaction-manager>org.jboss.tm.TxManager</transaction-manager>
-			<web-class-loader>org.jboss.iiop.WebCL</web-class-loader>
-			<container-cache-conf>
-				<cache-policy>org.jboss.ejb.plugins.LRUStatefulContextCachePolicy</cache-policy>
-				<cache-policy-conf>
-					<min-capacity>50</min-capacity>
-					<max-capacity>1000000</max-capacity>
-					<remover-period>1800</remover-period>
-					<max-bean-life>1800</max-bean-life>
-					<overager-period>300</overager-period>
-					<max-bean-age>600</max-bean-age>
-					<resizer-period>400</resizer-period>
-					<max-cache-miss-period>60</max-cache-miss-period>
-					<min-cache-miss-period>1</min-cache-miss-period>
-					<cache-load-factor>0.75</cache-load-factor>
-				</cache-policy-conf>
-			</container-cache-conf>
-			<container-pool-conf>
-				<MaximumSize>100</MaximumSize>
-			</container-pool-conf>
-		</container-configuration>
-		<container-configuration>
-			<container-name>IIOP BMP EntityBean</container-name>
-			<call-logging>false</call-logging>
-			<sync-on-commit-only>false</sync-on-commit-only>
-			<container-invoker>org.jboss.ejb.plugins.iiop.server.IIOPContainerInvoker</container-invoker>
-			<container-interceptors>
-				<interceptor>org.jboss.ejb.plugins.LogInterceptor</interceptor>
-				<interceptor>org.jboss.ejb.plugins.SecurityInterceptor</interceptor>
-				<interceptor>org.jboss.ejb.plugins.TxInterceptorCMT</interceptor>
-				<interceptor metricsEnabled = "true">org.jboss.ejb.plugins.MetricsInterceptor</interceptor>
-				<interceptor>org.jboss.ejb.plugins.EntityCreationInterceptor</interceptor>
-				<interceptor>org.jboss.ejb.plugins.EntityLockInterceptor</interceptor>
-				<interceptor>org.jboss.ejb.plugins.EntityInstanceInterceptor</interceptor>
-				<interceptor>org.jboss.ejb.plugins.EntityReentranceInterceptor</interceptor>
-				<interceptor>org.jboss.ejb.plugins.EntitySynchronizationInterceptor</interceptor>
-			</container-interceptors>
-			<instance-pool>org.jboss.ejb.plugins.EntityInstancePool</instance-pool>
-			<instance-cache>org.jboss.ejb.plugins.EntityInstanceCache</instance-cache>
-			<persistence-manager>org.jboss.ejb.plugins.BMPPersistenceManager</persistence-manager>
-			<transaction-manager>org.jboss.tm.TxManager</transaction-manager>
-			<web-class-loader>org.jboss.iiop.WebCL</web-class-loader>
-			<locking-policy>org.jboss.ejb.plugins.lock.QueuedPessimisticEJBLock</locking-policy>
-			<container-cache-conf>
-				<cache-policy>org.jboss.ejb.plugins.LRUEnterpriseContextCachePolicy</cache-policy>
-				<cache-policy-conf>
-					<min-capacity>50</min-capacity>
-					<max-capacity>1000000</max-capacity>
-					<overager-period>300</overager-period>
-					<max-bean-age>600</max-bean-age>
-					<resizer-period>400</resizer-period>
-					<max-cache-miss-period>60</max-cache-miss-period>
-					<min-cache-miss-period>1</min-cache-miss-period>
-					<cache-load-factor>0.75</cache-load-factor>
-				</cache-policy-conf>
-			</container-cache-conf>
-			<container-pool-conf>
-				<MaximumSize>100</MaximumSize>
-			</container-pool-conf>
-			<commit-option>A</commit-option>
-		</container-configuration>
-	</container-configurations>
-</jboss>
diff --git a/3.0.4/config/jboss/conf/standardjbosscmp-jdbc.xml b/3.0.4/config/jboss/conf/standardjbosscmp-jdbc.xml
deleted file mode 100644
index 8bc80b7..0000000
--- a/3.0.4/config/jboss/conf/standardjbosscmp-jdbc.xml
+++ /dev/null
@@ -1,2005 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE jbosscmp-jdbc>
-
-<!-- ===================================================================== -->
-<!--                                                                       -->
-<!--  Standard JBossCMP-JDBC Configuration                                 -->
-<!--                                                                       -->
-<!-- ===================================================================== -->
-
-<!-- $Id$ -->
-
-<jbosscmp-jdbc>
-   
-   <defaults>
-      <datasource>java:/DefaultDS</datasource>
-      <datasource-mapping>Hypersonic SQL</datasource-mapping>
-      
-      <create-table>true</create-table>
-      <remove-table>false</remove-table>
-      <read-only>false</read-only>
-      <time-out>300</time-out>
-      <pk-constraint>true</pk-constraint>
-      <fk-constraint>false</fk-constraint>
-      <row-locking>false</row-locking>
-      <preferred-relation-mapping>foreign-key</preferred-relation-mapping>
-      <read-ahead>
-      <strategy>on-load</strategy>
-      <page-size>1000</page-size>
-      <eager-load-group>*</eager-load-group>
-      </read-ahead>
-      <list-cache-max>1000</list-cache-max>
-   </defaults>
-
-   <type-mappings>
-     <type-mapping>
-      <name>McKoi</name>
-      <row-locking-template>SELECT ?1 FROM ?2 WHERE ?3 FOR UPDATE</row-locking-template>
-      <pk-constraint-template>CONSTRAINT ?1 PRIMARY KEY (?2)</pk-constraint-template>
-      <fk-constraint-template>ALTER TABLE ?1 ADD CONSTRAINT ?2 FOREIGN KEY (?3) REFERENCES ?4 (?5)</fk-constraint-template>
-      <alias-header-prefix>t</alias-header-prefix>
-      <alias-header-suffix>_</alias-header-suffix>
-      <alias-max-length>32</alias-max-length>
-      <subquery-supported>true</subquery-supported>
-      <true-mapping>TRUE</true-mapping>
-      <false-mapping>FALSE</false-mapping>
-
-      <mapping>
-         <java-type>java.lang.Boolean</java-type>
-         <jdbc-type>BIT</jdbc-type>
-         <sql-type>BOOLEAN</sql-type>
-      </mapping>
-      <mapping>
-         <java-type>java.lang.Byte</java-type>
-         <jdbc-type>TINYINT</jdbc-type>
-         <sql-type>SMALLINT</sql-type>
-      </mapping>
-      <mapping>
-         <java-type>java.lang.Short</java-type>
-         <jdbc-type>SMALLINT</jdbc-type>
-         <sql-type>SMALLINT</sql-type>
-      </mapping>
-      <mapping>
-         <java-type>java.lang.Integer</java-type>
-         <jdbc-type>INTEGER</jdbc-type>
-         <sql-type>INTEGER</sql-type>
-      </mapping>
-      <mapping>
-         <java-type>java.lang.Long</java-type>
-         <jdbc-type>BIGINT</jdbc-type>
-         <sql-type>BIGINT</sql-type>
-      </mapping>
-      <mapping>
-         <java-type>java.lang.Float</java-type>
-         <jdbc-type>REAL</jdbc-type>
-         <sql-type>FLOAT</sql-type>
-      </mapping>
-      <mapping>
-         <java-type>java.lang.Double</java-type>
-         <jdbc-type>DOUBLE</jdbc-type>
-         <sql-type>DOUBLE</sql-type>
-      </mapping>
-      <mapping>
-         <java-type>java.lang.Character</java-type>
-         <jdbc-type>CHAR</jdbc-type>
-         <sql-type>CHAR</sql-type>
-      </mapping>
-      <mapping>
-         <java-type>java.lang.String</java-type>
-         <jdbc-type>VARCHAR</jdbc-type>
-         <sql-type>VARCHAR(64)</sql-type>
-      </mapping>
-      <mapping>
-         <java-type>java.sql.Date</java-type>
-         <jdbc-type>DATE</jdbc-type>
-         <sql-type>DATE</sql-type>
-      </mapping>
-      <mapping>
-         <java-type>java.sql.Time</java-type>
-         <jdbc-type>TIME</jdbc-type>
-         <sql-type>TIME</sql-type>
-      </mapping>
-      <mapping>
-         <java-type>java.sql.Timestamp</java-type>
-         <jdbc-type>TIMESTAMP</jdbc-type>
-         <sql-type>TIMESTAMP</sql-type>
-      </mapping>
-      <mapping>
-         <java-type>java.lang.Object</java-type>
-         <jdbc-type>JAVA_OBJECT</jdbc-type>
-         <sql-type>JAVA_OBJECT</sql-type>
-      </mapping>
-   </type-mapping>
-   
-      <type-mapping>
-         <name>InterBase</name>
-         <row-locking-template>SELECT ?1 FROM ?2 WHERE ?3 FOR UPDATE</row-locking-template>
-         <pk-constraint-template>CONSTRAINT ?1 PRIMARY KEY (?2)</pk-constraint-template>
-         <fk-constraint-template>ALTER TABLE ?1 ADD CONSTRAINT ?2 FOREIGN KEY (?3) REFERENCES ?4 (?5)</fk-constraint-template>
-         <alias-header-prefix>t</alias-header-prefix>
-         <alias-header-suffix>_</alias-header-suffix>
-         <alias-max-length>32</alias-max-length>
-         <subquery-supported>true</subquery-supported>
-         <true-mapping>1</true-mapping>
-         <false-mapping>0</false-mapping>
-
-         <mapping>
-            <java-type>java.lang.Boolean</java-type>
-            <jdbc-type>BIT</jdbc-type>
-            <sql-type>SMALLINT</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.lang.Byte</java-type>
-            <jdbc-type>TINYINT</jdbc-type>
-            <sql-type>SMALLINT</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.lang.Short</java-type>
-            <jdbc-type>SMALLINT</jdbc-type>
-            <sql-type>SMALLINT</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.lang.Integer</java-type>
-            <jdbc-type>INTEGER</jdbc-type>
-            <sql-type>INTEGER</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.lang.Long</java-type>
-            <jdbc-type>BIGINT</jdbc-type>
-            <sql-type>NUMERIC(18,0)</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.lang.Float</java-type>
-            <jdbc-type>REAL</jdbc-type>
-            <sql-type>FLOAT</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.lang.Double</java-type>
-            <jdbc-type>DOUBLE</jdbc-type>
-            <sql-type>DOUBLE PRECISION</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.lang.Character</java-type>
-            <jdbc-type>VARCHAR</jdbc-type>
-            <sql-type>CHAR</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.lang.String</java-type>
-            <jdbc-type>VARCHAR</jdbc-type>
-            <sql-type>VARCHAR(64)</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.sql.Date</java-type>
-            <jdbc-type>DATE</jdbc-type>
-            <sql-type>DATE</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.sql.Time</java-type>
-            <jdbc-type>TIME</jdbc-type>
-            <sql-type>TIME</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.sql.Timestamp</java-type>
-            <jdbc-type>TIMESTAMP</jdbc-type>
-            <sql-type>TIMESTAMP</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.lang.Object</java-type>
-            <jdbc-type>JAVA_OBJECT</jdbc-type>
-            <sql-type>VARCHAR(2000)</sql-type>
-         </mapping>
-      </type-mapping>
-
-      <type-mapping>
-         <name>DB2</name>
-         <row-locking-template/>
-         <pk-constraint-template>CONSTRAINT ?1 PRIMARY KEY (?2)</pk-constraint-template>
-         <fk-constraint-template>ALTER TABLE ?1 ADD CONSTRAINT ?2 FOREIGN KEY (?3) REFERENCES ?4 (?5)</fk-constraint-template>
-         <alias-header-prefix>t</alias-header-prefix>
-         <alias-header-suffix>_</alias-header-suffix>
-         <alias-max-length>32</alias-max-length>
-         <subquery-supported>true</subquery-supported>
-         <true-mapping>1</true-mapping>
-         <false-mapping>0</false-mapping>
-
-         <mapping>
-            <java-type>java.lang.Boolean</java-type>
-            <jdbc-type>BIT</jdbc-type>
-            <sql-type>SMALLINT</sql-type>
-         </mapping>
-    <!--  DB2 does not appear to support columns of type "byte"
-    Regrettably, this means they'll be serialized.
-         <mapping>
-            <java-type>java.lang.Byte</java-type>
-            <jdbc-type>CHAR</jdbc-type>
-            <sql-type>CHAR(1) FOR BIT DATA</sql-type>
-         </mapping>
-    -->
-         <mapping>
-            <java-type>java.lang.Short</java-type>
-            <jdbc-type>SMALLINT</jdbc-type>
-            <sql-type>SMALLINT</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.lang.Integer</java-type>
-            <jdbc-type>INTEGER</jdbc-type>
-            <sql-type>INTEGER</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.lang.Long</java-type>
-            <jdbc-type>BIGINT</jdbc-type>
-            <sql-type>BIGINT</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.lang.Float</java-type>
-            <jdbc-type>REAL</jdbc-type>
-            <sql-type>REAL</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.lang.Double</java-type>
-            <jdbc-type>DOUBLE</jdbc-type>
-            <sql-type>DOUBLE</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.lang.Character</java-type>
-            <jdbc-type>CHAR</jdbc-type>
-            <sql-type>CHAR</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.lang.String</java-type>
-            <jdbc-type>VARCHAR</jdbc-type>
-            <sql-type>VARCHAR(254)</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.sql.Date</java-type>
-            <jdbc-type>DATE</jdbc-type>
-            <sql-type>DATE</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.sql.Time</java-type>
-            <jdbc-type>TIME</jdbc-type>
-            <sql-type>TIME</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.sql.Timestamp</java-type>
-            <jdbc-type>TIMESTAMP</jdbc-type>
-            <sql-type>TIMESTAMP</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.lang.Object</java-type>
-            <jdbc-type>JAVA_OBJECT</jdbc-type>
-            <sql-type>BLOB(2000)</sql-type>
-         </mapping>
-      </type-mapping>
-
-      <type-mapping>
-         <name>Oracle9i</name>
-         <!--
-         | Make sure that you have the Oracle 9i version of classes12.jar
-         | or you will suffer 
-         -->
-         <row-locking-template>SELECT ?1 FROM ?2 WHERE ?3 FOR UPDATE</row-locking-template>
-         <pk-constraint-template>CONSTRAINT ?1 PRIMARY KEY (?2)</pk-constraint-template>
-         <fk-constraint-template>ALTER TABLE ?1 ADD CONSTRAINT ?2 FOREIGN KEY (?3) REFERENCES ?4 (?5)</fk-constraint-template>
-         <alias-header-prefix>t</alias-header-prefix>
-         <alias-header-suffix>_</alias-header-suffix>
-         <alias-max-length>30</alias-max-length>
-         <subquery-supported>true</subquery-supported>
-         <true-mapping>1</true-mapping>
-         <false-mapping>0</false-mapping>
-
-         <function-mapping>
-            <function-name>concat</function-name>
-            <function-sql>(?1 || ?2)</function-sql>
-         </function-mapping>    
-         <function-mapping>
-            <function-name>substring</function-name>
-            <function-sql>substr(?1, ?2, ?3)</function-sql>
-         </function-mapping>    
-         <function-mapping>
-            <function-name>lcase</function-name>
-            <function-sql>lower(?1)</function-sql>
-         </function-mapping>    
-         <function-mapping>
-            <function-name>length</function-name>
-            <function-sql>length(?1)</function-sql>
-         </function-mapping>    
-         <function-mapping>
-            <function-name>locate</function-name>
-            <function-sql>instr(?2, ?1, ?3)</function-sql>
-         </function-mapping>    
-         <function-mapping>
-            <function-name>abs</function-name>
-            <function-sql>abs(?1)</function-sql>
-         </function-mapping>    
-         <function-mapping>
-            <function-name>sqrt</function-name>
-            <function-sql>sqrt(?1)</function-sql>
-         </function-mapping>    
-         <function-mapping>
-            <function-name>ucase</function-name>
-            <function-sql>upper(?1)</function-sql>
-         </function-mapping>    
-
-         <mapping>
-            <java-type>java.lang.Boolean</java-type>
-            <jdbc-type>BIT</jdbc-type>
-            <sql-type>NUMBER(1)</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.lang.Byte</java-type>
-            <jdbc-type>SMALLINT</jdbc-type>
-            <sql-type>NUMBER(3)</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.lang.Short</java-type>
-            <jdbc-type>NUMERIC</jdbc-type>
-            <sql-type>NUMBER(5)</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.lang.Integer</java-type>
-            <jdbc-type>INTEGER</jdbc-type>
-            <sql-type>NUMBER(10)</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.lang.Long</java-type>
-            <jdbc-type>BIGINT</jdbc-type>
-            <sql-type>NUMBER(19)</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.lang.Float</java-type>
-            <jdbc-type>REAL</jdbc-type>
-            <sql-type>NUMBER(38,7)</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.math.BigDecimal</java-type>
-            <jdbc-type>DECIMAL</jdbc-type>
-            <sql-type>NUMBER(38,15)</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.lang.Double</java-type>
-            <jdbc-type>DOUBLE</jdbc-type>
-            <sql-type>NUMBER(38,15)</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.lang.Character</java-type>
-            <jdbc-type>VARCHAR</jdbc-type>
-            <sql-type>CHAR</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.lang.String</java-type>
-            <jdbc-type>VARCHAR</jdbc-type>
-            <sql-type>VARCHAR2(255)</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.util.Date</java-type>
-            <jdbc-type>TIMESTAMP</jdbc-type>
-            <sql-type>TIMESTAMP(3)</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.sql.Date</java-type>
-            <jdbc-type>DATE</jdbc-type>
-            <sql-type>DATE</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.sql.Time</java-type>
-            <jdbc-type>TIME</jdbc-type>
-            <sql-type>DATE</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.sql.Timestamp</java-type>
-            <jdbc-type>TIMESTAMP</jdbc-type>
-            <sql-type>TIMESTAMP(9)</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.lang.Object</java-type>
-            <jdbc-type>BLOB</jdbc-type>
-            <sql-type>BLOB</sql-type>
-            <!--
-            | Change this from BLOB to RAW(n) if you know your
-            | serialized object will be <= n bytes and n <= 2000
-            -->
-         </mapping>
-      </type-mapping>
-
-      <type-mapping>
-         <name>Oracle8</name>
-         <row-locking-template>SELECT ?1 FROM ?2 WHERE ?3 FOR UPDATE</row-locking-template>
-         <pk-constraint-template>CONSTRAINT ?1 PRIMARY KEY (?2)</pk-constraint-template>
-         <fk-constraint-template>ALTER TABLE ?1 ADD CONSTRAINT ?2 FOREIGN KEY (?3) REFERENCES ?4 (?5)</fk-constraint-template>
-         <alias-header-prefix>t</alias-header-prefix>
-         <alias-header-suffix>_</alias-header-suffix>
-         <alias-max-length>30</alias-max-length>
-         <subquery-supported>true</subquery-supported>
-         <true-mapping>1</true-mapping>
-         <false-mapping>0</false-mapping>
-
-         <function-mapping>
-            <function-name>concat</function-name>
-            <function-sql>(?1 || ?2)</function-sql>
-         </function-mapping>    
-         <function-mapping>
-            <function-name>substring</function-name>
-            <function-sql>substr(?1, ?2, ?3)</function-sql>
-         </function-mapping>    
-         <function-mapping>
-            <function-name>lcase</function-name>
-            <function-sql>lower(?1)</function-sql>
-         </function-mapping>    
-         <function-mapping>
-            <function-name>length</function-name>
-            <function-sql>length(?1)</function-sql>
-         </function-mapping>    
-         <function-mapping>
-            <function-name>locate</function-name>
-            <function-sql>instr(?2, ?1, ?3)</function-sql>
-         </function-mapping>    
-         <function-mapping>
-            <function-name>abs</function-name>
-            <function-sql>abs(?1)</function-sql>
-         </function-mapping>    
-         <function-mapping>
-            <function-name>sqrt</function-name>
-            <function-sql>sqrt(?1)</function-sql>
-         </function-mapping>    
-         <function-mapping>
-            <function-name>ucase</function-name>
-            <function-sql>upper(?1)</function-sql>
-         </function-mapping>    
-
-         <mapping>
-            <java-type>java.lang.Boolean</java-type>
-            <jdbc-type>BIT</jdbc-type>
-            <sql-type>NUMBER(1)</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.lang.Byte</java-type>
-            <jdbc-type>NUMERIC</jdbc-type>
-            <sql-type>NUMBER(3)</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.lang.Short</java-type>
-            <jdbc-type>NUMERIC</jdbc-type>
-            <sql-type>NUMBER(5)</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.lang.Integer</java-type>
-            <jdbc-type>INTEGER</jdbc-type>
-            <sql-type>NUMBER(10)</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.lang.Long</java-type>
-            <jdbc-type>BIGINT</jdbc-type>
-            <sql-type>NUMBER(19)</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.lang.Float</java-type>
-            <jdbc-type>REAL</jdbc-type>
-            <sql-type>NUMBER(38,7)</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.math.BigDecimal</java-type>
-            <jdbc-type>DECIMAL</jdbc-type>
-            <sql-type>NUMBER(38,15)</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.lang.Double</java-type>
-            <jdbc-type>DOUBLE</jdbc-type>
-            <sql-type>NUMBER(38,15)</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.lang.Character</java-type>
-            <jdbc-type>VARCHAR</jdbc-type>
-            <sql-type>CHAR</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.lang.String</java-type>
-            <jdbc-type>VARCHAR</jdbc-type>
-            <sql-type>VARCHAR2(255)</sql-type>
-         </mapping>
-         <mapping>
-            <!--
-            | Note that you lose granularity here
-            | Use a numeric type and store milliseconds if you really need it
-            -->
-            <java-type>java.util.Date</java-type>
-            <jdbc-type>TIMESTAMP</jdbc-type>
-            <sql-type>DATE</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.sql.Date</java-type>
-            <jdbc-type>DATE</jdbc-type>
-            <sql-type>DATE</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.sql.Time</java-type>
-            <jdbc-type>TIME</jdbc-type>
-            <sql-type>DATE</sql-type>
-         </mapping>
-         <mapping>
-            <!--
-            | Note that you lose granularity here
-            | Use a numeric type and store milliseconds if you really need it
-            -->
-            <java-type>java.sql.Timestamp</java-type>
-            <jdbc-type>TIMESTAMP</jdbc-type>
-            <sql-type>DATE</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.lang.Object</java-type>
-            <jdbc-type>BLOB</jdbc-type>
-            <sql-type>BLOB</sql-type>
-            <!--
-            | Change this from BLOB to RAW(n) if you know your
-            | serialized object will be <= n bytes and n <= 2000
-            -->
-         </mapping>
-      </type-mapping>
-
-      <type-mapping>
-         <name>Oracle7</name>
-         <row-locking-template>SELECT ?1 FROM ?2 WHERE ?3 FOR UPDATE</row-locking-template>
-         <pk-constraint-template>CONSTRAINT ?1 PRIMARY KEY (?2)</pk-constraint-template>
-         <fk-constraint-template>ALTER TABLE ?1 ADD CONSTRAINT ?2 FOREIGN KEY (?3) REFERENCES ?4 (?5)</fk-constraint-template>
-         <alias-header-prefix>t</alias-header-prefix>
-         <alias-header-suffix>_</alias-header-suffix>
-         <alias-max-length>30</alias-max-length>
-         <subquery-supported>true</subquery-supported>
-         <true-mapping>1</true-mapping>
-         <false-mapping>0</false-mapping>
-
-         <function-mapping>
-            <function-name>concat</function-name>
-            <function-sql>(?1 || ?2)</function-sql>
-         </function-mapping>    
-         <function-mapping>
-            <function-name>substring</function-name>
-            <function-sql>substr(?1, ?2, ?3)</function-sql>
-         </function-mapping>    
-         <function-mapping>
-            <function-name>lcase</function-name>
-            <function-sql>lower(?1)</function-sql>
-         </function-mapping>    
-         <function-mapping>
-            <function-name>length</function-name>
-            <function-sql>length(?1)</function-sql>
-         </function-mapping>    
-         <function-mapping>
-            <function-name>locate</function-name>
-            <function-sql>instr(?2, ?1, ?3)</function-sql>
-         </function-mapping>    
-         <function-mapping>
-            <function-name>abs</function-name>
-            <function-sql>abs(?1)</function-sql>
-         </function-mapping>    
-         <function-mapping>
-            <function-name>sqrt</function-name>
-            <function-sql>sqrt(?1)</function-sql>
-         </function-mapping>    
-         <function-mapping>
-            <function-name>ucase</function-name>
-            <function-sql>upper(?1)</function-sql>
-         </function-mapping>    
-
-         <mapping>
-            <java-type>java.lang.Boolean</java-type>
-            <jdbc-type>BIT</jdbc-type>
-            <sql-type>NUMBER(1)</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.lang.Byte</java-type>
-            <jdbc-type>NUMERIC</jdbc-type>
-            <sql-type>NUMBER(3)</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.lang.Short</java-type>
-            <jdbc-type>NUMERIC</jdbc-type>
-            <sql-type>NUMBER(5)</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.lang.Integer</java-type>
-            <jdbc-type>INTEGER</jdbc-type>
-            <sql-type>NUMBER(10)</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.lang.Long</java-type>
-            <jdbc-type>BIGINT</jdbc-type>
-            <sql-type>NUMBER(19)</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.lang.Float</java-type>
-            <jdbc-type>REAL</jdbc-type>
-            <sql-type>NUMBER(38,7)</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.lang.Double</java-type>
-            <jdbc-type>DOUBLE</jdbc-type>
-            <sql-type>NUMBER(38,15)</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.lang.Character</java-type>
-            <jdbc-type>VARCHAR</jdbc-type>
-            <sql-type>CHAR</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.lang.String</java-type>
-            <jdbc-type>VARCHAR</jdbc-type>
-            <sql-type>VARCHAR2(255)</sql-type>
-         </mapping>
-         <mapping>
-            <!--
-            | Note that you lose granularity here
-            | Use a numeric type and store milliseconds if you really need it
-            -->
-            <java-type>java.util.Date</java-type>
-            <jdbc-type>TIMESTAMP</jdbc-type>
-            <sql-type>DATE</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.sql.Date</java-type>
-            <jdbc-type>DATE</jdbc-type>
-            <sql-type>DATE</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.sql.Time</java-type>
-            <jdbc-type>TIME</jdbc-type>
-            <sql-type>DATE</sql-type>
-         </mapping>
-         <mapping>
-            <!--
-            | Note that you lose granularity here
-            | Use a numeric type and store milliseconds if you really need it
-            -->
-            <java-type>java.sql.Timestamp</java-type>
-            <jdbc-type>TIMESTAMP</jdbc-type>
-            <sql-type>DATE</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.lang.Object</java-type>
-            <jdbc-type>LONGVARBINARY</jdbc-type>
-            <sql-type>LONG RAW</sql-type>
-            <!--
-            | Change this from LONG RAW to RAW(n) if you know your
-            | serialized object will be <= n bytes and n <= 2000
-            | Oracle only permits one LONG type per table
-            -->
-         </mapping>
-      </type-mapping>
-
-      <type-mapping>
-         <name>Sybase</name>
-         <row-locking-template/>
-         <pk-constraint-template>CONSTRAINT ?1 PRIMARY KEY (?2)</pk-constraint-template>
-         <fk-constraint-template>ALTER TABLE ?1 ADD CONSTRAINT ?2 FOREIGN KEY (?3) REFERENCES ?4 (?5)</fk-constraint-template>
-         <alias-header-prefix>t</alias-header-prefix>
-         <alias-header-suffix>_</alias-header-suffix>
-         <alias-max-length>32</alias-max-length>
-         <subquery-supported>true</subquery-supported>
-         <true-mapping>1</true-mapping>
-         <false-mapping>0</false-mapping>
-
-         <mapping>
-            <java-type>java.lang.Boolean</java-type>
-            <jdbc-type>BIT</jdbc-type>
-            <sql-type>BIT</sql-type>
-         </mapping>
-    <!-- Current Sybase JDBC drivers (jConnect 5.2) don't support
-    byte or short.  Unfortunately they'll be serialized.
-         <mapping>
-            <java-type>java.lang.Byte</java-type>
-            <jdbc-type>TINYINT</jdbc-type>
-            <sql-type>TINYINT</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.lang.Short</java-type>
-            <jdbc-type>SMALLINT</jdbc-type>
-            <sql-type>SMALLINT</sql-type>
-         </mapping>
-    -->
-         <mapping>
-            <java-type>java.lang.Integer</java-type>
-            <jdbc-type>INTEGER</jdbc-type>
-            <sql-type>INTEGER</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.lang.Long</java-type>
-            <jdbc-type>NUMERIC</jdbc-type>
-            <sql-type>NUMERIC(38,0)</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.lang.Float</java-type>
-            <jdbc-type>REAL</jdbc-type>
-            <sql-type>REAL</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.lang.Double</java-type>
-            <jdbc-type>DOUBLE</jdbc-type>
-            <sql-type>DOUBLE PRECISION</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.lang.Character</java-type>
-            <jdbc-type>CHAR</jdbc-type>
-            <sql-type>CHAR</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.lang.String</java-type>
-            <jdbc-type>VARCHAR</jdbc-type>
-            <sql-type>VARCHAR(255)</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.sql.Date</java-type>
-            <jdbc-type>DATE</jdbc-type>
-            <sql-type>DATETIME</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.sql.Time</java-type>
-            <jdbc-type>TIME</jdbc-type>
-            <sql-type>SMALLDATETIME</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.sql.Timestamp</java-type>
-            <jdbc-type>TIMESTAMP</jdbc-type>
-            <sql-type>DATETIME</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.lang.Object</java-type>
-            <jdbc-type>JAVA_OBJECT</jdbc-type>
-            <sql-type>IMAGE</sql-type>
-         </mapping>
-      </type-mapping>
-
-      <type-mapping>
-         <name>PostgreSQL</name>
-         <row-locking-template>SELECT ?1 FROM ?2 WHERE ?3 FOR UPDATE</row-locking-template>
-         <pk-constraint-template>CONSTRAINT ?1 PRIMARY KEY (?2)</pk-constraint-template>
-         <fk-constraint-template>ALTER TABLE ?1 ADD CONSTRAINT ?2 FOREIGN KEY (?3) REFERENCES ?4 (?5)</fk-constraint-template>
-         <alias-header-prefix>t</alias-header-prefix>
-         <alias-header-suffix>_</alias-header-suffix>
-         <alias-max-length>32</alias-max-length>
-         <subquery-supported>true</subquery-supported>
-         <true-mapping>TRUE</true-mapping>
-         <false-mapping>FALSE</false-mapping>
-
-         <function-mapping>
-            <function-name>concat</function-name>
-            <function-sql>(?1 || ?2)</function-sql>
-         </function-mapping>    
-         <function-mapping>
-            <function-name>substring</function-name>
-            <function-sql>substring(?1 FROM ?2 FOR ?3)</function-sql>
-         </function-mapping>    
-         <function-mapping>
-            <function-name>lcase</function-name>
-            <function-sql>lower(?1)</function-sql>
-         </function-mapping>    
-         <function-mapping>
-            <function-name>length</function-name>
-            <function-sql>length(?1)</function-sql>
-         </function-mapping>    
-         <function-mapping>
-            <function-name>locate</function-name>
-            <function-sql>(CASE position(?1 in substring(?2 from ?3)) WHEN 0 THEN 0 ELSE position(?1 in substring(?2 from ?3)) + ?3 - 1 END)</function-sql>
-         </function-mapping>    
-         <function-mapping>
-            <function-name>abs</function-name>
-            <function-sql>abs(?1)</function-sql>
-         </function-mapping>    
-         <function-mapping>
-            <function-name>sqrt</function-name>
-            <function-sql>sqrt(CAST(?1 AS double precision))</function-sql>
-         </function-mapping>    
-         <function-mapping>
-            <function-name>ucase</function-name>
-            <function-sql>upper(?1)</function-sql>
-         </function-mapping>    
-    
-         <mapping>
-            <java-type>java.lang.Boolean</java-type>
-            <jdbc-type>CHAR</jdbc-type>
-            <sql-type>BOOLEAN</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.lang.Byte</java-type>
-            <jdbc-type>TINYINT</jdbc-type>
-            <sql-type>INT2</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.lang.Short</java-type>
-            <jdbc-type>SMALLINT</jdbc-type>
-            <sql-type>INT2</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.lang.Integer</java-type>
-            <jdbc-type>INTEGER</jdbc-type>
-            <sql-type>INT4</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.lang.Long</java-type>
-            <jdbc-type>BIGINT</jdbc-type>
-            <sql-type>INT8</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.lang.Float</java-type>
-            <jdbc-type>FLOAT</jdbc-type>
-            <sql-type>FLOAT(7)</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.lang.Double</java-type>
-            <jdbc-type>DOUBLE</jdbc-type>
-            <sql-type>FLOAT8</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.lang.Character</java-type>
-            <jdbc-type>CHAR</jdbc-type>
-            <sql-type>CHAR(1)</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.lang.String</java-type>
-            <jdbc-type>VARCHAR</jdbc-type>
-            <sql-type>TEXT</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.util.Date</java-type>
-            <jdbc-type>TIMESTAMP</jdbc-type>
-            <sql-type>TIMESTAMP</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.sql.Date</java-type>
-            <jdbc-type>DATE</jdbc-type>
-            <sql-type>DATE</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.sql.Time</java-type>
-            <jdbc-type>TIME</jdbc-type>
-            <sql-type>TIME</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.sql.Timestamp</java-type>
-            <jdbc-type>TIMESTAMP</jdbc-type>
-            <sql-type>TIMESTAMP</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.math.BigDecimal</java-type>
-            <jdbc-type>NUMERIC</jdbc-type>
-            <sql-type>NUMERIC</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.lang.Object</java-type>
-            <jdbc-type>VARBINARY</jdbc-type>
-            <sql-type>BYTEA</sql-type>
-         </mapping>
-      </type-mapping>
-
-      <type-mapping>
-         <name>PostgreSQL 7.2</name>
-         <row-locking-template>SELECT ?1 FROM ?2 WHERE ?3 FOR UPDATE</row-locking-template>
-         <pk-constraint-template>CONSTRAINT ?1 PRIMARY KEY (?2)</pk-constraint-template>
-         <fk-constraint-template>ALTER TABLE ?1 ADD CONSTRAINT ?2 FOREIGN KEY (?3) REFERENCES ?4 (?5)</fk-constraint-template>
-         <alias-header-prefix>t</alias-header-prefix>
-         <alias-header-suffix>_</alias-header-suffix>
-         <alias-max-length>32</alias-max-length>
-         <subquery-supported>true</subquery-supported>
-         <true-mapping>TRUE</true-mapping>
-         <false-mapping>FALSE</false-mapping>
-
-         <function-mapping>
-            <function-name>concat</function-name>
-            <function-sql>(?1 || ?2)</function-sql>
-         </function-mapping>    
-         <function-mapping>
-            <function-name>substring</function-name>
-            <function-sql>substring(?1 FROM ?2 FOR ?3)</function-sql>
-         </function-mapping>    
-         <function-mapping>
-            <function-name>lcase</function-name>
-            <function-sql>lower(?1)</function-sql>
-         </function-mapping>    
-         <function-mapping>
-            <function-name>length</function-name>
-            <function-sql>length(?1)</function-sql>
-         </function-mapping>    
-         <function-mapping>
-            <function-name>locate</function-name>
-            <function-sql>(CASE position(?1 in substring(?2 from ?3)) WHEN 0 THEN 0 ELSE position(?1 in substring(?2 from ?3)) + ?3 - 1 END)</function-sql>
-         </function-mapping>    
-         <function-mapping>
-            <function-name>abs</function-name>
-            <function-sql>abs(?1)</function-sql>
-         </function-mapping>    
-         <function-mapping>
-            <function-name>sqrt</function-name>
-            <function-sql>sqrt(CAST(?1 AS double precision))</function-sql>
-         </function-mapping>    
-         <function-mapping>
-            <function-name>ucase</function-name>
-            <function-sql>upper(?1)</function-sql>
-         </function-mapping>    
-    
-         <mapping>
-            <java-type>java.lang.Boolean</java-type>
-            <jdbc-type>CHAR</jdbc-type>
-            <sql-type>BOOLEAN</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.lang.Byte</java-type>
-            <jdbc-type>TINYINT</jdbc-type>
-            <sql-type>INT2</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.lang.Short</java-type>
-            <jdbc-type>SMALLINT</jdbc-type>
-            <sql-type>INT2</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.lang.Integer</java-type>
-            <jdbc-type>INTEGER</jdbc-type>
-            <sql-type>INT4</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.lang.Long</java-type>
-            <jdbc-type>BIGINT</jdbc-type>
-            <sql-type>INT8</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.lang.Float</java-type>
-            <jdbc-type>FLOAT</jdbc-type>
-            <sql-type>FLOAT(7)</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.lang.Double</java-type>
-            <jdbc-type>DOUBLE</jdbc-type>
-            <sql-type>FLOAT8</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.lang.Character</java-type>
-            <jdbc-type>CHAR</jdbc-type>
-            <sql-type>CHAR(1)</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.lang.String</java-type>
-            <jdbc-type>VARCHAR</jdbc-type>
-            <sql-type>TEXT</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.util.Date</java-type>
-            <jdbc-type>TIMESTAMP</jdbc-type>
-            <sql-type>TIMESTAMP</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.sql.Date</java-type>
-            <jdbc-type>DATE</jdbc-type>
-            <sql-type>DATE</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.sql.Time</java-type>
-            <jdbc-type>TIME</jdbc-type>
-            <sql-type>TIME</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.sql.Timestamp</java-type>
-            <jdbc-type>TIMESTAMP</jdbc-type>
-            <sql-type>TIMESTAMP</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.math.BigDecimal</java-type>
-            <jdbc-type>NUMERIC</jdbc-type>
-            <sql-type>NUMERIC</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.lang.Object</java-type>
-            <jdbc-type>VARBINARY</jdbc-type>
-            <sql-type>BYTEA</sql-type>
-         </mapping>
-      </type-mapping>
-
-      <type-mapping>
-         <name>Hypersonic SQL</name>
-         <row-locking-template/>    
-         <pk-constraint-template>CONSTRAINT ?1 PRIMARY KEY (?2)</pk-constraint-template>
-         <fk-constraint-template/>
-         <alias-header-prefix>t</alias-header-prefix>
-         <alias-header-suffix>_</alias-header-suffix>
-         <alias-max-length>32</alias-max-length>
-         <subquery-supported>true</subquery-supported>
-         <true-mapping>(1=1)</true-mapping>
-         <false-mapping>(1=0)</false-mapping>
-
-         <function-mapping>
-            <function-name>concat</function-name>
-            <function-sql>(?1 || ?2)</function-sql>
-         </function-mapping>    
-         <function-mapping>
-            <function-name>substring</function-name>
-            <function-sql>SUBSTRING(?1, ?2, ?3)</function-sql>
-         </function-mapping>    
-         <function-mapping>
-            <function-name>lcase</function-name>
-            <function-sql>lcase(?1)</function-sql>
-         </function-mapping>    
-         <function-mapping>
-            <function-name>length</function-name>
-            <function-sql>LENGTH(?1)</function-sql>
-         </function-mapping>    
-         <function-mapping>
-            <function-name>locate</function-name>
-            <function-sql>LOCATE(?1, ?2, ?3)</function-sql>
-         </function-mapping>    
-         <function-mapping>
-            <function-name>abs</function-name>
-            <function-sql>ABS(?1)</function-sql>
-         </function-mapping>    
-         <function-mapping>
-            <function-name>sqrt</function-name>
-            <function-sql>SQRT(?1)</function-sql>
-         </function-mapping>    
-         <function-mapping>
-            <function-name>ucase</function-name>
-            <function-sql>ucase(?1)</function-sql>
-         </function-mapping>    
-
-         <mapping>
-            <java-type>java.lang.Byte</java-type>
-            <jdbc-type>SMALLINT</jdbc-type>
-            <sql-type>SMALLINT</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.util.Date</java-type>
-            <jdbc-type>TIMESTAMP</jdbc-type>
-            <sql-type>TIMESTAMP</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.lang.Boolean</java-type>
-            <jdbc-type>BIT</jdbc-type>
-            <sql-type>BIT</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.lang.Integer</java-type>
-            <jdbc-type>INTEGER</jdbc-type>
-            <sql-type>INTEGER</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.lang.Object</java-type>
-            <!-- hsqldb only supports directly serializable objects for sql type OBJECT -->
-            <jdbc-type>VARBINARY</jdbc-type>
-            <sql-type>VARBINARY</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.lang.Short</java-type>
-            <jdbc-type>SMALLINT</jdbc-type>
-            <sql-type>SMALLINT</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.lang.Character</java-type>
-            <jdbc-type>CHAR</jdbc-type>
-            <sql-type>CHAR</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.lang.String</java-type>
-            <jdbc-type>VARCHAR</jdbc-type>
-            <sql-type>VARCHAR(256)</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.sql.Date</java-type>
-            <jdbc-type>DATE</jdbc-type>
-            <sql-type>DATE</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.sql.Time</java-type>
-            <jdbc-type>TIME</jdbc-type>
-            <sql-type>TIME</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.sql.Timestamp</java-type>
-            <jdbc-type>TIMESTAMP</jdbc-type>
-            <sql-type>TIMESTAMP</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.lang.Float</java-type>
-            <jdbc-type>REAL</jdbc-type>
-            <sql-type>REAL</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.lang.Long</java-type>
-            <jdbc-type>BIGINT</jdbc-type>
-            <sql-type>BIGINT</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.lang.Double</java-type>
-            <jdbc-type>DOUBLE</jdbc-type>
-            <sql-type>DOUBLE</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.math.BigDecimal</java-type>
-            <jdbc-type>DECIMAL</jdbc-type>
-            <sql-type>DECIMAL</sql-type>
-         </mapping>
-      </type-mapping>
-
-      <type-mapping>
-         <name>PointBase</name>
-         <row-locking-template/>
-         <pk-constraint-template>CONSTRAINT ?1 PRIMARY KEY (?2)</pk-constraint-template>
-         <fk-constraint-template>ALTER TABLE ?1 ADD CONSTRAINT ?2 FOREIGN KEY (?3) REFERENCES ?4 (?5)</fk-constraint-template>
-         <alias-header-prefix>t</alias-header-prefix>
-         <alias-header-suffix>_</alias-header-suffix>
-         <alias-max-length>32</alias-max-length>
-         <subquery-supported>true</subquery-supported>
-         <true-mapping>1</true-mapping>
-         <false-mapping>0</false-mapping>
-
-         <mapping>
-            <java-type>java.lang.Character</java-type>
-            <jdbc-type>CHAR</jdbc-type>
-            <sql-type>CHAR</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.lang.Short</java-type>
-            <jdbc-type>SMALLINT</jdbc-type>
-            <sql-type>SMALLINT</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.lang.Long</java-type>
-            <jdbc-type>BIGINT</jdbc-type>
-            <sql-type>INTEGER</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.lang.Double</java-type>
-            <jdbc-type>DOUBLE</jdbc-type>
-            <sql-type>FLOAT</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.lang.Float</java-type>
-            <jdbc-type>FLOAT</jdbc-type>
-            <sql-type>FLOAT</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.lang.Boolean</java-type>
-            <jdbc-type>BINARY</jdbc-type>
-            <sql-type>BOOLEAN</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.lang.String</java-type>
-            <jdbc-type>VARCHAR</jdbc-type>
-            <sql-type>VARCHAR(256)</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.lang.Byte</java-type>
-            <jdbc-type>SMALLINT</jdbc-type>
-            <sql-type>SMALLINT</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.lang.Object</java-type>
-            <jdbc-type>BLOB</jdbc-type>
-            <sql-type>BLOB</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.lang.Integer</java-type>
-            <jdbc-type>INTEGER</jdbc-type>
-            <sql-type>INTEGER</sql-type>
-         </mapping>
-      </type-mapping>
-
-      <type-mapping>
-         <name>SOLID</name>
-         <row-locking-template/>
-         <pk-constraint-template>PRIMARY KEY (?2)</pk-constraint-template>
-         <fk-constraint-template>ALTER TABLE ?1 ADD CONSTRAINT ?2 FOREIGN KEY (?3) REFERENCES ?4 (?5)</fk-constraint-template>
-         <alias-header-prefix>t</alias-header-prefix>
-         <alias-header-suffix>_</alias-header-suffix>
-         <alias-max-length>32</alias-max-length>
-         <subquery-supported>true</subquery-supported>
-         <true-mapping>1</true-mapping>
-         <false-mapping>0</false-mapping>
-
-         <mapping>
-            <java-type>java.lang.Character</java-type>
-            <jdbc-type>CHAR</jdbc-type>
-            <sql-type>CHAR</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.lang.Byte</java-type>
-            <jdbc-type>TINYINT</jdbc-type>
-            <sql-type>TINYINT</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.lang.Short</java-type>
-            <jdbc-type>INTEGER</jdbc-type>
-            <sql-type>INTEGER</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.lang.Double</java-type>
-            <jdbc-type>DOUBLE</jdbc-type>
-            <sql-type>DOUBLE</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.lang.Object</java-type>
-            <jdbc-type>BLOB</jdbc-type>
-            <sql-type>BLOB</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.lang.String</java-type>
-            <jdbc-type>VARCHAR</jdbc-type>
-            <sql-type>VARCHAR(256)</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.lang.Integer</java-type>
-            <jdbc-type>INTEGER</jdbc-type>
-            <sql-type>INTEGER</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.sql.Timestamp</java-type>
-            <jdbc-type>TIMESTAMP</jdbc-type>
-            <sql-type>TIMESTAMP</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.lang.Boolean</java-type>
-            <jdbc-type>BIT</jdbc-type>
-            <sql-type>BIT</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.lang.Float</java-type>
-            <jdbc-type>FLOAT</jdbc-type>
-            <sql-type>FLOAT</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.lang.Long</java-type>
-            <jdbc-type>BIGINT</jdbc-type>
-            <sql-type>BIGINT</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.util.Date</java-type>
-            <jdbc-type>TIMESTAMP</jdbc-type>
-            <sql-type>TIMESTAMP</sql-type>
-         </mapping>
-      </type-mapping>
-
-      <type-mapping>
-         <name>mySQL</name>
-         <row-locking-template>SELECT ?1 FROM ?2 WHERE ?3 FOR UPDATE</row-locking-template>
-         <pk-constraint-template>CONSTRAINT ?1 PRIMARY KEY (?2)</pk-constraint-template>
-         <fk-constraint-template>ALTER TABLE ?1 ADD INDEX ind_?3 (?3), ADD CONSTRAINT ?2 FOREIGN KEY (?3) REFERENCES ?4 (?5)</fk-constraint-template>
-         <alias-header-prefix>t</alias-header-prefix>
-         <alias-header-suffix>_</alias-header-suffix>
-         <alias-max-length>32</alias-max-length>
-         <subquery-supported>false</subquery-supported>
-         <true-mapping>1</true-mapping>
-         <false-mapping>0</false-mapping>
-
-         <function-mapping>
-            <function-name>concat</function-name>
-            <function-sql>concat(?1, ?2)</function-sql>
-         </function-mapping>    
-         <function-mapping>
-            <function-name>substring</function-name>
-            <function-sql>substring(?1 FROM ?2 FOR ?3)</function-sql>
-         </function-mapping>    
-         <function-mapping>
-            <function-name>lcase</function-name>
-            <function-sql>lower(?1)</function-sql>
-         </function-mapping>    
-         <function-mapping>
-            <function-name>length</function-name>
-            <function-sql>length(?1)</function-sql>
-         </function-mapping>    
-         <function-mapping>
-            <function-name>locate</function-name>
-            <function-sql>locate(?1, ?2, ?3)</function-sql>
-         </function-mapping>    
-         <function-mapping>
-            <function-name>abs</function-name>
-            <function-sql>abs(?1)</function-sql>
-         </function-mapping>    
-         <function-mapping>
-            <function-name>sqrt</function-name>
-            <function-sql>sqrt(?1)</function-sql>
-         </function-mapping>    
-         <function-mapping>
-            <function-name>ucase</function-name>
-            <function-sql>upper(?1)</function-sql>
-         </function-mapping>    
-
-         <mapping>
-            <java-type>java.lang.Float</java-type>
-            <jdbc-type>FLOAT</jdbc-type>
-            <sql-type>FLOAT</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.lang.Double</java-type>
-            <jdbc-type>DOUBLE</jdbc-type>
-            <sql-type>DOUBLE</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.lang.Boolean</java-type>
-            <jdbc-type>TINYINT</jdbc-type>
-            <sql-type>TINYINT</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.math.BigDecimal</java-type>
-            <jdbc-type>DOUBLE</jdbc-type>
-            <sql-type>DOUBLE</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.lang.Object</java-type>
-            <jdbc-type>BLOB</jdbc-type>
-            <sql-type>LONGBLOB</sql-type>
-            <!--
-            | Change this from LONGBLOB to BLOB if you know your
-            | serialized object will be <= 2^16 bytes
-            -->
-         </mapping>
-         <mapping>
-            <java-type>java.lang.Integer</java-type>
-            <jdbc-type>INTEGER</jdbc-type>
-            <sql-type>INTEGER</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.lang.Short</java-type>
-            <jdbc-type>SMALLINT</jdbc-type>
-            <sql-type>SMALLINT</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.sql.Timestamp</java-type>
-            <jdbc-type>TIMESTAMP</jdbc-type>
-            <sql-type>TIMESTAMP</sql-type>
-            <!--
-            | This type is problematical because mysql does not have any 
-            | date/time types that store milliseconds. You should avoid it.
-            -->
-         </mapping>
-         <mapping>
-            <java-type>java.lang.Byte</java-type>
-            <jdbc-type>TINYINT</jdbc-type>
-            <sql-type>TINYINT</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.lang.Character</java-type>
-            <jdbc-type>CHAR</jdbc-type>
-            <sql-type>CHAR</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.lang.Long</java-type>
-            <jdbc-type>BIGINT</jdbc-type>
-            <sql-type>BIGINT</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.lang.String</java-type>
-            <jdbc-type>VARCHAR</jdbc-type>
-            <sql-type>VARCHAR(250) BINARY</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.util.Date</java-type>
-            <jdbc-type>TIMESTAMP</jdbc-type>
-            <sql-type>DATETIME</sql-type>
-            <!--
-            | Note that you lose granularity here
-            | Use a numeric type and store milliseconds if you really need it
-            -->
-         </mapping>
-         <mapping>
-            <java-type>java.sql.Date</java-type>
-            <jdbc-type>DATE</jdbc-type>
-            <sql-type>DATETIME</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.sql.Time</java-type>
-            <jdbc-type>TIME</jdbc-type>
-            <sql-type>TIME</sql-type>
-         </mapping>
-      </type-mapping>
-
-      <type-mapping>
-         <name>MS SQLSERVER</name>
-         <row-locking-template>SELECT ?1 FROM ?2 with (rowlock) WHERE ?3</row-locking-template>
-         <pk-constraint-template>CONSTRAINT ?1 PRIMARY KEY (?2)</pk-constraint-template>
-         <fk-constraint-template>ALTER TABLE ?1 ADD CONSTRAINT ?2 FOREIGN KEY (?3) REFERENCES ?4 (?5)</fk-constraint-template>
-         <alias-header-prefix>t</alias-header-prefix>
-         <alias-header-suffix>_</alias-header-suffix>
-         <alias-max-length>32</alias-max-length>
-         <subquery-supported>true</subquery-supported>
-         <true-mapping>1</true-mapping>
-         <false-mapping>0</false-mapping>
-
-         <function-mapping>
-            <function-name>concat</function-name>
-            <function-sql>(?1 + ?2)</function-sql>
-         </function-mapping>    
-         <function-mapping>
-            <function-name>substring</function-name>
-            <function-sql>substring(?1, ?2, ?3)</function-sql>
-         </function-mapping>    
-         <function-mapping>
-            <function-name>lcase</function-name>
-            <function-sql>lower(?1)</function-sql>
-         </function-mapping>    
-         <function-mapping>
-            <function-name>length</function-name>
-            <function-sql>len(?1)</function-sql>
-         </function-mapping>    
-         <function-mapping>
-            <function-name>locate</function-name>
-            <function-sql>charindex(?1, ?2, ?3)</function-sql>
-         </function-mapping>    
-         <function-mapping>
-            <function-name>abs</function-name>
-            <function-sql>abs(?1)</function-sql>
-         </function-mapping>    
-         <function-mapping>
-            <function-name>sqrt</function-name>
-            <function-sql>sqrt(?1)</function-sql>
-         </function-mapping>    
-         <function-mapping>
-            <function-name>ucase</function-name>
-            <function-sql>upper(?1)</function-sql>
-         </function-mapping>    
-    
-         <mapping>
-            <java-type>java.lang.Integer</java-type>
-            <jdbc-type>INTEGER</jdbc-type>
-            <sql-type>INTEGER</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.lang.Character</java-type>
-            <jdbc-type>CHAR</jdbc-type>
-            <sql-type>CHAR</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.lang.Short</java-type>
-            <jdbc-type>SMALLINT</jdbc-type>
-            <sql-type>SMALLINT</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.lang.Double</java-type>
-            <jdbc-type>DOUBLE</jdbc-type>
-            <sql-type>DOUBLE</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.lang.Long</java-type>
-            <jdbc-type>DECIMAL</jdbc-type>
-            <sql-type>DECIMAL(20)</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.math.BigDecimal</java-type>
-            <jdbc-type>VARCHAR</jdbc-type>
-            <sql-type>VARCHAR(256)</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.lang.String</java-type>
-            <jdbc-type>VARCHAR</jdbc-type>
-            <sql-type>VARCHAR(256)</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.lang.Object</java-type>
-            <jdbc-type>JAVA_OBJECT</jdbc-type>
-            <sql-type>IMAGE</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.lang.Byte</java-type>
-            <jdbc-type>TINYINT</jdbc-type>
-            <sql-type>TINYINT</sql-type>
-         </mapping>
-         <mapping>
-            <!--
-            | Note that you lose granularity here
-            | Use a numeric type and store milliseconds if you really need it
-            -->
-            <java-type>java.sql.Timestamp</java-type>
-            <jdbc-type>TIMESTAMP</jdbc-type>
-            <sql-type>DATETIME</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.sql.Date</java-type>
-            <jdbc-type>DATE</jdbc-type>
-            <sql-type>DATETIME</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.sql.Time</java-type>
-            <jdbc-type>TIME</jdbc-type>
-            <sql-type>DATETIME</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.util.Date</java-type>
-            <jdbc-type>TIMESTAMP</jdbc-type>
-            <sql-type>DATETIME</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.lang.Boolean</java-type>
-            <jdbc-type>BIT</jdbc-type>
-            <sql-type>BIT</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.lang.Float</java-type>
-            <jdbc-type>FLOAT</jdbc-type>
-            <sql-type>FLOAT</sql-type>
-         </mapping>
-      </type-mapping>
-
-      <type-mapping> 
-         <name>MS SQLSERVER2000</name> 
-         <row-locking-template>SELECT ?1 FROM ?2 with (rowlock) WHERE ?3</row-locking-template>
-         <pk-constraint-template>CONSTRAINT ?1 PRIMARY KEY (?2)</pk-constraint-template>
-         <fk-constraint-template>ALTER TABLE ?1 ADD CONSTRAINT ?2 FOREIGN KEY (?3) REFERENCES ?4 (?5)</fk-constraint-template>
-         <alias-header-prefix>t</alias-header-prefix>
-         <alias-header-suffix>_</alias-header-suffix>
-         <alias-max-length>32</alias-max-length>
-         <subquery-supported>true</subquery-supported>
-         <true-mapping>1</true-mapping>
-         <false-mapping>0</false-mapping>
-
-         <function-mapping>
-            <function-name>concat</function-name>
-            <function-sql>(?1 + ?2)</function-sql>
-         </function-mapping>    
-         <function-mapping>
-            <function-name>substring</function-name>
-            <function-sql>substring(?1, ?2, ?3)</function-sql>
-         </function-mapping>    
-         <function-mapping>
-            <function-name>lcase</function-name>
-            <function-sql>lower(?1)</function-sql>
-         </function-mapping>    
-         <function-mapping>
-            <function-name>length</function-name>
-            <function-sql>len(?1)</function-sql>
-         </function-mapping>    
-         <function-mapping>
-            <function-name>locate</function-name>
-            <function-sql>charindex(?1, ?2, ?3)</function-sql>
-         </function-mapping>    
-         <function-mapping>
-            <function-name>abs</function-name>
-            <function-sql>abs(?1)</function-sql>
-         </function-mapping>    
-         <function-mapping>
-            <function-name>sqrt</function-name>
-            <function-sql>sqrt(?1)</function-sql>
-         </function-mapping>    
-         <function-mapping>
-            <function-name>ucase</function-name>
-            <function-sql>upper(?1)</function-sql>
-         </function-mapping>    
-    
-         <mapping> 
-            <java-type>java.lang.Integer</java-type> 
-            <jdbc-type>INTEGER</jdbc-type> 
-            <sql-type>INTEGER</sql-type> 
-         </mapping> 
-    
-         <mapping> 
-            <java-type>java.lang.Character</java-type> 
-            <jdbc-type>CHAR</jdbc-type> 
-            <sql-type>CHAR</sql-type> 
-         </mapping> 
-    
-         <mapping> 
-            <java-type>java.lang.Short</java-type> 
-            <jdbc-type>SMALLINT</jdbc-type> 
-            <sql-type>SMALLINT</sql-type> 
-         </mapping> 
-    
-         <mapping> 
-            <java-type>java.lang.Long</java-type> 
-            <jdbc-type>BIGINT</jdbc-type> 
-            <sql-type>BIGINT</sql-type> 
-         </mapping> 
-    
-         <mapping> 
-            <java-type>java.math.BigDecimal</java-type> 
-            <jdbc-type>VARCHAR</jdbc-type> 
-            <sql-type>VARCHAR(256)</sql-type> 
-         </mapping> 
-    
-         <mapping> 
-            <java-type>java.lang.String</java-type> 
-            <jdbc-type>VARCHAR</jdbc-type> 
-            <sql-type>VARCHAR(256)</sql-type> 
-         </mapping> 
-    
-         <mapping> 
-            <java-type>java.lang.Object</java-type> 
-            <jdbc-type>JAVA_OBJECT</jdbc-type> 
-            <sql-type>IMAGE</sql-type> 
-         </mapping> 
-    
-         <mapping> 
-            <java-type>java.lang.Byte</java-type> 
-            <jdbc-type>TINYINT</jdbc-type> 
-            <sql-type>TINYINT</sql-type> 
-         </mapping> 
-    
-         <mapping> 
-            <!--
-            | Note that you lose granularity here
-            | Use a numeric type and store milliseconds if you really need it
-            -->
-            <java-type>java.sql.Timestamp</java-type> 
-            <jdbc-type>TIMESTAMP</jdbc-type> 
-            <sql-type>DATETIME</sql-type> 
-         </mapping> 
-    
-         <mapping> 
-            <java-type>java.sql.Date</java-type> 
-            <jdbc-type>DATE</jdbc-type> 
-            <sql-type>DATETIME</sql-type> 
-         </mapping> 
-    
-         <mapping> 
-            <java-type>java.sql.Time</java-type> 
-            <jdbc-type>TIME</jdbc-type> 
-            <sql-type>DATETIME</sql-type> 
-         </mapping> 
-    
-         <mapping> 
-            <java-type>java.util.Date</java-type> 
-            <jdbc-type>TIMESTAMP</jdbc-type> 
-            <sql-type>DATETIME</sql-type> 
-         </mapping> 
-    
-         <mapping> 
-            <java-type>java.lang.Boolean</java-type> 
-            <jdbc-type>BIT</jdbc-type> 
-            <sql-type>BIT</sql-type> 
-         </mapping> 
-    
-         <mapping> 
-            <java-type>java.lang.Float</java-type> 
-            <jdbc-type>REAL</jdbc-type> 
-            <sql-type>REAL</sql-type> 
-         </mapping> 
-    
-         <mapping> 
-            <java-type>java.lang.Double</java-type> 
-            <jdbc-type>DOUBLE</jdbc-type> 
-            <sql-type>FLOAT</sql-type> 
-         </mapping> 
-      </type-mapping>
-      
-      <type-mapping>
-         <name>DB2/400</name>
-         <row-locking-template/>
-         <pk-constraint-template>CONSTRAINT ?1 PRIMARY KEY (?2)</pk-constraint-template>
-         <fk-constraint-template>ALTER TABLE ?1 ADD CONSTRAINT ?2 FOREIGN KEY (?3) REFERENCES ?4 (?5)</fk-constraint-template>
-         <alias-header-prefix>t</alias-header-prefix>
-         <alias-header-suffix>_</alias-header-suffix>
-         <alias-max-length>32</alias-max-length>
-         <subquery-supported>true</subquery-supported>
-         <true-mapping>1</true-mapping>
-         <false-mapping>0</false-mapping>
-
-         <mapping>
-            <java-type>java.lang.Character</java-type>
-            <jdbc-type>CHAR</jdbc-type>
-            <sql-type>CHAR(1)</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.lang.String</java-type>
-            <jdbc-type>VARCHAR</jdbc-type>
-            <sql-type>VARCHAR(256)</sql-type>
-         </mapping>
-    <!-- Apparent DB2/400 doesn't handle Byte type either
-         <mapping>
-            <java-type>java.lang.Byte</java-type>
-            <jdbc-type>CHAR</jdbc-type>
-            <sql-type>CHAR(1) FOR BIT DATA</sql-type>
-         </mapping>
-    -->
-         <mapping>
-            <java-type>java.util.Date</java-type>
-            <jdbc-type>TIMESTAMP</jdbc-type>
-            <sql-type>TIMESTAMP</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.sql.Time</java-type>
-            <jdbc-type>TIME</jdbc-type>
-            <sql-type>TIME</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.lang.Float</java-type>
-            <jdbc-type>FLOAT</jdbc-type>
-            <sql-type>FLOAT</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.lang.Integer</java-type>
-            <jdbc-type>INTEGER</jdbc-type>
-            <sql-type>INTEGER</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.lang.Double</java-type>
-            <jdbc-type>DOUBLE</jdbc-type>
-            <sql-type>DOUBLE</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.lang.Long</java-type>
-            <jdbc-type>BIGINT</jdbc-type>
-            <sql-type>INTEGER</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.lang.Boolean</java-type>
-            <jdbc-type>CHAR</jdbc-type>
-            <sql-type>CHAR(5)</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.lang.Short</java-type>
-            <jdbc-type>SMALLINT</jdbc-type>
-            <sql-type>SMALLINT</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.lang.Object</java-type>
-            <jdbc-type>JAVA_OBJECT</jdbc-type>
-            <sql-type>VARCHAR(4096) FOR BIT DATA</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.sql.Timestamp</java-type>
-            <jdbc-type>TIMESTAMP</jdbc-type>
-            <sql-type>TIMESTAMP</sql-type>
-         </mapping>
-      </type-mapping>
-
-      <type-mapping>
-         <name>SapDB</name>
-         <row-locking-template>SELECT ?1 FROM ?2 WHERE ?3 FOR UPDATE</row-locking-template>
-         <pk-constraint-template>CONSTRAINT ?1 PRIMARY KEY (?2)</pk-constraint-template>
-         <fk-constraint-template>ALTER TABLE ?1 ADD CONSTRAINT ?2 FOREIGN KEY (?3) REFERENCES ?4 (?5)</fk-constraint-template>
-         <alias-header-prefix>t</alias-header-prefix>
-         <alias-header-suffix>_</alias-header-suffix>
-         <alias-max-length>32</alias-max-length>
-         <subquery-supported>true</subquery-supported>
-         <true-mapping>1</true-mapping>
-         <false-mapping>0</false-mapping>
-
-         <mapping>
-            <java-type>java.lang.Integer</java-type>
-            <jdbc-type>INTEGER</jdbc-type>
-            <sql-type>INTEGER</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.lang.Character</java-type>
-            <jdbc-type>CHAR</jdbc-type>
-            <sql-type>CHAR</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.lang.String</java-type>
-            <jdbc-type>VARCHAR</jdbc-type>
-            <sql-type>VARCHAR(256)</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.lang.Object</java-type>
-            <jdbc-type>JAVA_OBJECT</jdbc-type>
-            <sql-type>LONG BYTE</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.lang.Byte</java-type>
-            <jdbc-type>TINYINT</jdbc-type>
-            <sql-type>CHAR BYTE</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.sql.Timestamp</java-type>
-            <jdbc-type>TIMESTAMP</jdbc-type>
-            <sql-type>TIMESTAMP</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.util.Date</java-type>
-            <jdbc-type>TIMESTAMP</jdbc-type>
-            <sql-type>TIMESTAMP</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.sql.Time</java-type>
-            <jdbc-type>TIME</jdbc-type>
-            <sql-type>TIME</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.lang.Boolean</java-type>
-            <jdbc-type>BIT</jdbc-type>
-            <sql-type>BOOLEAN</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.lang.Float</java-type>
-            <jdbc-type>FLOAT</jdbc-type>
-            <sql-type>FLOAT</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.lang.Short</java-type>
-            <jdbc-type>SMALLINT</jdbc-type>
-            <sql-type>SMALLINT</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.lang.Double</java-type>
-            <jdbc-type>DOUBLE</jdbc-type>
-            <sql-type>DOUBLE PRECISION</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.lang.Long</java-type>
-            <jdbc-type>DECIMAL</jdbc-type>
-            <sql-type>DECIMAL(20)</sql-type>
-         </mapping>
-      </type-mapping>
-
-      <type-mapping>
-         <name>Cloudscape</name>
-         <row-locking-template/>
-         <pk-constraint-template>CONSTRAINT ?1 PRIMARY KEY (?2)</pk-constraint-template>
-         <fk-constraint-template>ALTER TABLE ?1 ADD CONSTRAINT ?2 FOREIGN KEY (?3) REFERENCES ?4 (?5)</fk-constraint-template>
-         <alias-header-prefix>t</alias-header-prefix>
-         <alias-header-suffix>_</alias-header-suffix>
-         <alias-max-length>32</alias-max-length>
-         <subquery-supported>true</subquery-supported>
-         <true-mapping>1</true-mapping>
-         <false-mapping>0</false-mapping>
-
-         <mapping>
-            <java-type>java.math.BigDecimal</java-type>
-            <jdbc-type>LONGVARCHAR</jdbc-type>
-            <sql-type>LONG VARCHAR</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.lang.Boolean</java-type>
-            <jdbc-type>BIT</jdbc-type>
-            <sql-type>BOOLEAN</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.lang.Byte</java-type>
-            <jdbc-type>TINYINT</jdbc-type>
-            <sql-type>TINYINT</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.lang.Short</java-type>
-            <jdbc-type>SMALLINT</jdbc-type>
-            <sql-type>SMALLINT</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.lang.Integer</java-type>
-            <jdbc-type>INTEGER</jdbc-type>
-            <sql-type>INTEGER</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.lang.Long</java-type>
-            <jdbc-type>BIGINT</jdbc-type>
-            <sql-type>LONGINT</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.lang.Float</java-type>
-            <jdbc-type>REAL</jdbc-type>
-            <sql-type>REAL</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.lang.Double</java-type>
-            <jdbc-type>DOUBLE</jdbc-type>
-            <sql-type>DOUBLE PRECISION</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.lang.Character</java-type>
-            <jdbc-type>CHAR</jdbc-type>
-            <sql-type>CHAR</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.lang.String</java-type>
-            <jdbc-type>LONGVARCHAR</jdbc-type>
-            <sql-type>LONG VARCHAR</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.sql.Date</java-type>
-            <jdbc-type>DATE</jdbc-type>
-            <sql-type>DATE</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.sql.Time</java-type>
-            <jdbc-type>TIME</jdbc-type>
-            <sql-type>TIME</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.sql.Timestamp</java-type>
-            <jdbc-type>TIMESTAMP</jdbc-type>
-            <sql-type>TIMESTAMP</sql-type>
-         </mapping>
-         <mapping>
-            <java-type>java.lang.Object</java-type>
-            <jdbc-type>JAVA_OBJECT</jdbc-type>
-            <sql-type>LONG VARBINARY</sql-type>
-         </mapping>
-      </type-mapping>
-
-      
-      <type-mapping> 
-         <name>InformixDB</name> 
-         <row-locking-template>select ?1 from ?2 where ?3 for update</row-locking-template>
-         <pk-constraint-template>PRIMARY KEY (?2) CONSTRAINT ?1</pk-constraint-template>
-         <fk-constraint-template>ALTER TABLE ?1 ADD CONSTRAINT FOREIGN KEY (?3) REFERENCES ?4 (?5) CONSTRAINT ?2</fk-constraint-template>
-         <alias-header-prefix>t</alias-header-prefix>
-         <alias-header-suffix>_</alias-header-suffix>
-         <alias-max-length>32</alias-max-length>
-         <subquery-supported>true</subquery-supported>
-         <true-mapping>1</true-mapping>
-         <false-mapping>0</false-mapping>
-
-         <mapping> 
-            <java-type>java.lang.Character</java-type> 
-            <jdbc-type>CHAR</jdbc-type> 
-            <sql-type>CHAR(1)</sql-type> 
-         </mapping> 
-    
-         <mapping> 
-            <java-type>java.lang.String</java-type> 
-            <jdbc-type>VARCHAR</jdbc-type> 
-            <sql-type>VARCHAR(255,0)</sql-type> 
-         </mapping> 
-    
-         <mapping> 
-            <java-type>java.math.BigDecimal</java-type> 
-            <jdbc-type>NUMERIC</jdbc-type> 
-            <sql-type>DECIMAL</sql-type> 
-         </mapping> 
-    
-         <mapping> 
-            <java-type>java.lang.Boolean</java-type> 
-            <jdbc-type>BIT</jdbc-type> 
-            <sql-type>SMALLINT</sql-type> 
-         </mapping> 
-    
-         <mapping> 
-            <java-type>java.lang.Integer</java-type> 
-            <jdbc-type>INTEGER</jdbc-type> 
-            <sql-type>INTEGER</sql-type> 
-         </mapping> 
-    
-         <mapping> 
-            <java-type>java.lang.Long</java-type> 
-            <jdbc-type>BIGINT</jdbc-type> 
-            <sql-type>NUMERIC(18,0)</sql-type> 
-         </mapping> 
-    
-         <mapping> 
-            <java-type>java.lang.Float</java-type> 
-            <jdbc-type>REAL</jdbc-type> 
-            <sql-type>FLOAT</sql-type> 
-         </mapping> 
-    
-         <mapping> 
-            <java-type>java.lang.Double</java-type> 
-            <jdbc-type>DOUBLE</jdbc-type> 
-            <sql-type>DOUBLE PRECISION</sql-type> 
-         </mapping> 
-    
-         <mapping> 
-            <java-type>java.lang.Byte</java-type> 
-            <jdbc-type>TINYINT</jdbc-type> 
-            <sql-type>SMALLINT</sql-type> 
-         </mapping> 
-    
-         <mapping> 
-            <java-type>java.lang.Short</java-type> 
-            <jdbc-type>SMALLINT</jdbc-type> 
-            <sql-type>SMALLINT</sql-type> 
-         </mapping> 
-    
-         <mapping> 
-            <java-type>java.util.Date</java-type> 
-            <jdbc-type>TIMESTAMP</jdbc-type> 
-            <sql-type>DATETIME YEAR TO FRACTION(3)</sql-type> 
-         </mapping> 
-    
-         <mapping> 
-            <java-type>java.sql.Date</java-type> 
-            <jdbc-type>DATE</jdbc-type> 
-            <sql-type>DATE</sql-type> 
-         </mapping> 
-    
-         <mapping> 
-            <java-type>java.sql.Time</java-type> 
-            <jdbc-type>TIME</jdbc-type> 
-            <sql-type>TIME</sql-type> 
-         </mapping> 
-    
-         <mapping> 
-            <java-type>java.sql.Timestamp</java-type> 
-            <jdbc-type>TIMESTAMP</jdbc-type> 
-            <sql-type>DATETIME YEAR TO FRACTION(3)</sql-type> 
-         </mapping> 
-    
-         <mapping> 
-            <java-type>java.lang.Object</java-type> 
-            <jdbc-type>JAVA_OBJECT</jdbc-type> 
-            <sql-type>BYTE</sql-type> 
-         </mapping> 
-      </type-mapping> 
-
-   </type-mappings>
-</jbosscmp-jdbc>
diff --git a/3.0.4/config/jboss/deploy/jbossweb.sar/META-INF/jboss-service.xml b/3.0.4/config/jboss/deploy/jbossweb.sar/META-INF/jboss-service.xml
deleted file mode 100644
index 61ad66c..0000000
--- a/3.0.4/config/jboss/deploy/jbossweb.sar/META-INF/jboss-service.xml
+++ /dev/null
@@ -1,227 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<server>
-
-  <!-- ==================================================================== -->
-  <!-- Web Container                                                        -->
-  <!-- ==================================================================== -->
-
-  <!--
-     | Be sure to check that the configuration values are valid for your
-     | environment.
-   -->
-
-  <mbean code="org.jboss.jetty.JettyService" name="jboss.web:service=WebServer">
-
-    <!-- ================================================================= -->
-    <!-- Your webdefault.xml file - The default settings for every webapp  -->
-    <!-- deployed by Jetty. Make systemwide changes here to your webapps   -->
-    <!-- configurations.                                                   -->
-    <!-- ================================================================= -->
-
-    <attribute name="WebDefaultResource">webdefault.xml</attribute>
-
-    <!-- ================================================================== -->
-    <!-- If true, .war files are unpacked to a temporary directory. This    -->
-    <!-- is useful with JSPs.                                               -->
-    <!-- ================================================================== -->
-
-    <attribute name="UnpackWars">true</attribute>
-
-    <!-- ================================================================== -->
-    <!-- If true, Jetty first delegates loading a class to the webapp's     -->
-    <!-- parent class loader (a la Java 2). If false, Jetty follows the     -->
-    <!--  Servlet 2.3 specification, and tries the webapp's own loader      -->
-    <!-- first (for "non-system" classes)                                   -->
-    <!-- ================================================================== -->
-
-    <attribute name="Java2ClassLoadingCompliance">true</attribute>
-
-    <!-- ================================================================= -->
-    <!-- If you require JAAS authentication, configure the name of the     -->
-    <!-- attribute in which you expect to find the JAAS active subject:    -->
-    <!--                                                                   -->
-    <!-- Commenting out this configuration will disable JAAS support       -->
-    <!-- ================================================================= -->
-
-    <attribute name="SubjectAttributeName">j_subject</attribute>
-
-    <!-- ================================================================= -->
-    <!-- Configuring Jetty. The XML fragment contained in the              -->
-    <!-- name="ConfigurationElement" attribute is a Jetty-style            -->
-    <!-- configuration specification.  It is used to configure Jetty with  -->
-    <!-- a listener on port 8080, and a HTTP request log location.         -->
-    <!-- The placement here of other Jetty XML configuration statements    -->
-    <!-- for deploying webapps etc is not encouraged: if you REALLY NEED   -->
-    <!-- something extra, place it in WEB-INF/jetty-web.xml files          -->
-    <!-- ================================================================= -->
-
-    <attribute name="ConfigurationElement">
-      <Configure class="org.mortbay.jetty.Server">
-
-       <!-- =============================================================== -->
-       <!-- Configure the Request Listeners                                 -->
-       <!-- =============================================================== -->
-
-
-       <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
-       <!-- Add and configure a HTTP listener to port 80                    -->
-       <!-- The default port can be changed using: java -Djetty.port=80     -->
-       <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
-       <Call name="addListener">
-         <Arg>
-          <New class="org.mortbay.http.SocketListener">
-            <Set name="Port"><SystemProperty name="jetty.port" default="80"/></Set>
-            <Set name="MinThreads">5</Set>
-            <Set name="MaxThreads">100</Set>
-            <Set name="MaxIdleTimeMs">30000</Set>
-            <Set name="LowResourcePersistTimeMs">5000</Set>
-          </New>
-         </Arg>
-       </Call>
-
-
-       <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
-       <!-- Add a HTTPS SSL listener on port 8843                           -->
-       <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
-       <!-- UNCOMMENT TO ACTIVATE
-       <Call name="addListener">
-         <Arg>
-           <New class="org.mortbay.http.SunJsseListener">
-            <Set name="Port">8443</Set>
-            <Set name="MinThreads">5</Set>
-            <Set name="MaxThreads">100</Set>
-            <Set name="MaxIdleTimeMs">30000</Set>
-            <Set name="LowResourcePersistTimeMs">2000</Set>
-            <Set name="Keystore"><SystemProperty name="jetty.home" default="."/>/etc/demokeystore</Set>
-            <Set name="Password">OBF:1vny1zlo1x8e1vnw1vn61x8g1zlu1vn4</Set>
-            <Set name="KeyPassword">OBF:1u2u1wml1z7s1z7a1wnl1u2g</Set>
-           </New>
-         </Arg>
-       </Call>
-       -->
-
-
-       <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
-       <!-- Add a AJP13 listener on port 8009                               -->
-       <!-- This protocol can be used with mod_jk in apache, IIS etc.       -->
-       <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
-       <Call name="addListener">
-         <Arg>
-           <New class="org.mortbay.http.ajp.AJP13Listener">
-            <Set name="Port">8009</Set>
-            <Set name="MinThreads">5</Set>
-            <Set name="MaxThreads">255</Set>
-            <Set name="MaxIdleTimeMs">30000</Set>
-            <Set name="confidentialPort">443</Set>
-           </New>
-         </Arg>
-       </Call>
-
-		 <!-- Private assets are exposed by copying them to the
-		      specifyed directory and building a URI to the
-		      specified virtual folder. -->
-		      
-   <Call name="addContext">
-    <Arg>/private/*</Arg>
-    <Set name="ResourceBase">../server/tapestry/tmp/private</Set>
-    
-    <Call name="addHandler">
-      <Arg><New class="org.mortbay.http.handler.ResourceHandler"/></Arg>
-    </Call>
-    
-    <Call name="addHandler">
-    	<Arg><New class="org.mortbay.http.handler.NotFoundHandler"/></Arg>
-    </Call>
-  </Call>
-
-
-       <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
-       <!-- Add and configure a NIO HTTP listener to port 8888              -->
-       <!-- This listener should be used to replace the standard HTTP       -->
-       <!-- listener when deployed on LARGE systems using jdk 1.4           -->
-       <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
-       <!-- UNCOMMENT TO ACTIVATE
-       <Call name="addListener">
-         <Arg>
-           <New class="org.mortbay.http.SocketChannelListener">
-            <Set name="Port"><SystemProperty name="jetty.port" default="8888"/></Set>
-            <Set name="MinThreads">5</Set>
-            <Set name="MaxThreads">500</Set>
-            <Set name="MaxIdleTimeMs">30000</Set>
-           </New>
-         </Arg>
-       </Call>
-       -->
-       <!-- =============================================================== -->
-       <!-- Configure the Request Log                                       -->
-       <!-- =============================================================== -->
-       <Set name="RequestLog">
-         <New class="org.mortbay.http.NCSARequestLog">
-           <Arg><SystemProperty name="jboss.server.home.dir"/><SystemProperty name="jetty.log" default="/log"/>/yyyy_mm_dd.request.log
-           </Arg>
-           <Set name="retainDays">90</Set>
-           <Set name="append">true</Set>
-           <Set name="extended">true</Set>
-           <Set name="LogTimeZone">GMT</Set>
-         </New>
-       </Set>
-
-       <!-- ======================================================= -->
-       <!-- New Distributed Session Manager                         -->
-       <!-- ======================================================= -->
-
-       <!--
-       These can be set on a per webapp basis in WEB-INF/jetty-web.xml
-       -->
-
-      <Set name="DistributableSessionManagerPrototype">
-       <New class="org.mortbay.j2ee.session.Manager">
-        <Set name="scavengerPeriod">600</Set>
-        <!-- NYI
-        <Set name="workerName">node1</Set>
-        -->
-        <Set name="interceptorStack">
-         <Array type="org.mortbay.j2ee.session.StateInterceptor">
-<!--
-          <Item><New class="org.mortbay.j2ee.session.DebugInterceptor"/></Item>
--->
-          <Item><New class="org.mortbay.j2ee.session.ValidatingInterceptor"/></Item>
-          <Item><New class="org.mortbay.j2ee.session.TypeCheckingInterceptor"/></Item>
-          <Item><New class="org.mortbay.j2ee.session.BindingInterceptor"/></Item>
-          <Item><New class="org.mortbay.j2ee.session.PublishingInterceptor"/></Item>
-          <Item><New class="org.mortbay.j2ee.session.SubscribingInterceptor"/></Item>
-          <Item><New class="org.mortbay.j2ee.session.SynchronizingInterceptor"/></Item>
-         </Array>
-        </Set>
-        <!-- Put this back in for distributable support under 'all' configuration
-        <Set name="store">
-         <New class="org.mortbay.j2ee.session.JGStore">
-          <Set name="actualMaxInactiveInterval">604800</Set>
-          <Set name="scavengerPeriod">3600</Set>
-          <Set name="scavengerExtraTime">900</Set>
-          <Set name="protocolStack">UDP(mcast_addr=228.8.8.8;mcast_port=45566;ip_ttl=32;ucast_recv_buf_size=16000;ucast_send_buf_size=16000;mcast_send_buf_size=32000;mcast_recv_buf_size=64000;loopback=true):PING(timeout=2000;num_initial_members=3):MERGE2(min_interval=5000;max_interval=10000):FD_SOCK:VERIFY_SUSPECT(timeout=1500):pbcast.STABLE(desired_avg_gossip=20000):pbcast.NAKACK(gc_lag=50;retransmit_timeout=300,600,1200,2400,4800;max_xmit_size=8192):UNICAST(timeout=2000):FRAG(frag_size=8192;down_thread=false;up_thread=false):pbcast.GMS(join_timeout=5000;join_retry_timeout=2000;shun=false;print_local_addr=true):pbcast.STATE_TRANSFER</Set>
-          <Set name="subClusterName">DefaultSubCluster</Set>
-          <Set name="retrievalTimeOut">20000</Set>
-          <Set name="distributionTimeOut">5000</Set>
-          <Set name="distributionMode">GET_ALL</Set>
-         </New>
-        </Set>
-        -->
-       </New>
-      </Set>
-
-      <!-- For testing the Distributable SessionManager with e.g. Watchdog -->
-      <!--
-      <Set name="forceDistributable">true</Set>
-      -->
-
-      </Configure>
-     </attribute>
-
-  </mbean>
-
-  <!-- ==================================================================== -->
-  <!-- ==================================================================== -->
-
-</server>
diff --git a/3.0.4/config/jboss/deploy/mckoi-service.xml b/3.0.4/config/jboss/deploy/mckoi-service.xml
deleted file mode 100644
index 52797b2..0000000
--- a/3.0.4/config/jboss/deploy/mckoi-service.xml
+++ /dev/null
@@ -1,104 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!-- $Id$ -->
-
-<!-- ===================================================================== -->
-<!--                                                                       -->
-<!--  McKoi Database 1.00 configuration                                    -->
-<!--                                                                       -->
-<!-- ===================================================================== -->
-
-<!-- This is basically a cut-and-paste of the Solid example service, modified
-     for McKoi DB.  This required McKoi release 1.00, which includes
-     the MBean implementation that allow it to operate within JBoss
-     (previously, a seperate MBean JAR file was needed). -->
-      
-
-<server>
-
-	<!-- The current working directory is the JBoss/bin directory, so this
-		 relative path works. -->
-		 
-	<mbean code="net.sf.tapestry.contrib.mckoi.McKoiDB" name="jboss:service=McKoiDB">
-  		<attribute name="ConfigPath">../server/tapestry/db/tapestry.conf</attribute>
-	</mbean>
-	  		
-
-  <mbean
-  	code="org.jboss.resource.connectionmanager.LocalTxConnectionManager" 
-  	name="jboss.jca:service=LocalTxCM,name=McKoiDB">
-
-    <depends>jboss:service=McKoiDB</depends>
-      
-    <depends optional-attribute-name="ManagedConnectionFactoryName">
-      
-      <!--embedded mbean-->
-      <mbean
-      	code="org.jboss.resource.connectionmanager.RARDeployment" 
-      	name="jboss.jca:service=LocalTxDS,name=McKoiDB">
-
-        <attribute name="JndiName">McKoiDB</attribute>
-        
-        <!--NOTE: Solid wants the username/password in the URL, it will 
-            ignore the specific arguments.-->
-        <attribute name="ManagedConnectionFactoryProperties">
-          <properties>
-            <config-property name="ConnectionURL" type="java.lang.String">jdbc:mckoi://localhost/</config-property>
-            <config-property name="DriverClass" type="java.lang.String">com.mckoi.JDBCDriver</config-property>
-            <config-property name="UserName" type="java.lang.String">admin</config-property>
-            <config-property name="Password" type="java.lang.String">secret</config-property>
-          </properties>
-
-            <!--These properties are ignored by the Solid driver.
-            <config-property name="UserName" type="java.lang.String"></config-property>
-            <config-property name="Password" type="java.lang.String"></config-property>
-             -->
-        </attribute>
-        <!--hack-->
-        <depends optional-attribute-name="OldRarDeployment">jboss.jca:service=RARDeployment,name=JBoss LocalTransaction JDBC Wrapper</depends>
-      </mbean>
-    </depends>
-
-    <depends optional-attribute-name="ManagedConnectionPool">
-      <!--embedded mbean-->
-      <mbean code="org.jboss.resource.connectionmanager.JBossManagedConnectionPool"
-      	name="jboss.jca:service=LocalTxPool,name=McKoiDB">
-
-        <attribute name="MinSize">0</attribute>
-        <attribute name="MaxSize">50</attribute>
-        <attribute name="BlockingTimeoutMillis">5000</attribute>
-        <attribute name="IdleTimeoutMinutes">15</attribute>
-        <!--criteria indicates if Subject (from security domain) or app supplied
-            parameters (such as from getConnection(user, pw)) are used to distinguish
-            connections in the pool. Choices are 
-            ByContainerAndApplication (use both), 
-            ByContainer (use Subject),
-            ByApplication (use app supplied params only),
-            ByNothing (all connections are equivalent, usually if adapter supports
-              reauthentication)-->
-        <!-- Since at present only a single user specified in the URL is supported, 
-          ByNothing is mosst appropriate.  If a URL construction scheme is implemented, 
-          this could be one of the other values -->
-        <attribute name="Criteria">ByNothing</attribute>
-      </mbean>
-
-    </depends>
-    <depends optional-attribute-name="CachedConnectionManager">jboss.jca:service=CachedConnectionManager</depends>
-   <!-- Since the username/password needs to be in the url, there is no way at 
-     present for a generic wrapper to supply user/pw to the driver.  A custom 
-     wrapper could be used to consruct the url dynamically from a base and the 
-     user/pw.  In case someone does that, I'm leaving the container-managed-security 
-     attribute in.  -->
-    <!-- <attribute name="SecurityDomainJndiName">SolidDbRealm</attribute>-->
-    
-    <depends optional-attribute-name="JaasSecurityManagerService">jboss.security:service=JaasSecurityManager</depends>
-    
-
-    <attribute name="TransactionManager">java:/TransactionManager</attribute>
-    <!--make the rar deploy! hack till better deployment-->
-    <depends>jboss.jca:service=RARDeployer</depends>
-  </mbean>
-
-</server>
-
-
diff --git a/3.0.4/config/jboss/tapestry-db.zip b/3.0.4/config/jboss/tapestry-db.zip
deleted file mode 100644
index d2a4f2a..0000000
--- a/3.0.4/config/jboss/tapestry-db.zip
+++ /dev/null
Binary files differ
diff --git a/3.0.4/config/jetty-workbench.xml b/3.0.4/config/jetty-workbench.xml
deleted file mode 100644
index 7b75ceb..0000000
--- a/3.0.4/config/jetty-workbench.xml
+++ /dev/null
@@ -1,57 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!-- $Id$ -->
-<!DOCTYPE Configure PUBLIC
-	"-//Mort Bay Consulting//DTD Configure 1.2//EN"
-	"http://jetty.mortbay.org/configure_1_2.dtd">
-<!--
-  This configuration file is used to allow the Tutorial to be run directly from
-  the main distribution directory (i.e., without having to build the frameworks).
-  -->
-<Configure class="org.mortbay.jetty.Server">
-  <Call name="addListener">
-    <Arg>
-      <New class="org.mortbay.http.SocketListener">
-        <Set name="Port">8080</Set>
-        <Set name="MinThreads">1</Set>
-        <Set name="MaxThreads">10</Set>
-        <Set name="MaxIdleTimeMs">50000</Set>
-      </New>
-    </Arg>
-  </Call>
-  
-  <Call name="addWebApplication">
-    <Arg>/workbench</Arg>
-    <Arg>lib/examples/workbench.war</Arg>
-    <Set name="DefaultsDescriptor">config/webdefault.xml</Set>
-  </Call>
-  
-   <Call name="addContext">
-    <Arg>/private/*</Arg>
-    <Set name="ResourceBase">private</Set>
-    
-    <Call name="addHandler">
-      <Arg><New class="org.mortbay.http.handler.ResourceHandler"/></Arg>
-    </Call>
-    
-    <Call name="addHandler">
-    	<Arg><New class="org.mortbay.http.handler.NotFoundHandler"/></Arg>
-    </Call>
-  </Call>
-  
-  <Call name="addContext">
-    <Arg>/</Arg>   
-    <Set name="realmName">Jetty Demo Realm</Set>
-   
-    <Call name="addServlet">
-      <Arg>Admin</Arg>
-      <Arg>/</Arg>
-      <Arg>org.mortbay.servlet.AdminServlet</Arg>
-    </Call>
-    
-    <Call name="setAttribute">
-      <Arg>org.mortbay.http.HttpServer</Arg>
-      <Arg><Call name="getHttpServer"/></Arg>
-    </Call>
-  </Call> 
-   
-</Configure>
diff --git a/3.0.4/config/log4j.properties b/3.0.4/config/log4j.properties
deleted file mode 100644
index ee019a8..0000000
--- a/3.0.4/config/log4j.properties
+++ /dev/null
@@ -1,12 +0,0 @@
-# $Id$
-# Set root category priority to INFO and its only appender to A1.
-log4j.rootCategory=WARN, A1
-
-# A1 is set to be a ConsoleAppender. 
-log4j.appender.A1=org.apache.log4j.ConsoleAppender
-
-# A1 uses PatternLayout.
-log4j.appender.A1.layout=org.apache.log4j.PatternLayout
-log4j.appender.A1.layout.ConversionPattern=%r %c{1} [%p] %m%n
-
-log4j.category.org.apache.commons.digester.Digester=FATAL
\ No newline at end of file
diff --git a/3.0.4/config/webdefault.xml b/3.0.4/config/webdefault.xml
deleted file mode 100644
index 2f1fe3c..0000000
--- a/3.0.4/config/webdefault.xml
+++ /dev/null
@@ -1,116 +0,0 @@
-<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">   
-<!-- $Id$ -->
-
-<web-app>
-  <description>
-    Default web.xml file.  
-    This file is applied to a Web application before it's own WEB_INF/web.xml file
-  </description>
- 
-
-  <!-- ==================================================================== -->
-  <!-- JSP Servlet                                                          -->
-  <!-- This is the jasper JSP servlet from the jakarta project              -->
-  <!-- The following initParameters are supported:                          -->
-  <!--                                                                      -->
-  <!--   classpath           What class path should I use while compiling   -->
-  <!--                       generated servlets?  [Created dynamically      -->
-  <!--                       based on the current web application]          -->
-  <!--                                                                      -->
-  <!--   classdebuginfo      Should the class file be compiled with         -->
-  <!--                       debugging information?  [false]                -->
-  <!--                                                                      -->
-  <!--   ieClassId           The class-id value to be sent to Internet      -->
-  <!--                       Explorer when using <jsp:plugin> tags.         -->
-  <!--                       [clsid:8AD9C840-044E-11D1-B3E9-00805F499D93]   -->
-  <!--                                                                      -->
-  <!--   jspCompilerPlugin   The fully qualified class name of the JSP      -->
-  <!--                       compiler plug-in to be used.  See below for    -->
-  <!--                       more information.                              -->
-  <!--                       [Use internal JDK compiler]                    -->
-  <!--                                                                      -->
-  <!--   keepgenerated       Should we keep the generated Java source code  -->
-  <!--                       for each page instead of deleting it? [true]   -->
-  <!--                                                                      -->
-  <!--   largefile           Should we store the static content of JSP      -->
-  <!--                       pages in external data files, to reduce the    -->
-  <!--                       size of the generated servlets?  [false]       -->
-  <!--                                                                      -->
-  <!--   logVerbosityLevel   The level of detailed messages to be produced  -->
-  <!--                       by this servlet.  Increasing levels cause the  -->
-  <!--                       generation of more messages.  Valid values are -->
-  <!--                       FATAL, ERROR, WARNING, INFORMATION, and DEBUG. -->
-  <!--                       [WARNING]                                      -->
-  <!--                                                                      -->
-  <!--   mappedfile          Should we generate static content with one     -->
-  <!--                       print statement per input line, to ease        -->
-  <!--                       debugging?  [false]                            -->
-  <!--                                                                      -->
-  <!--   scratchdir          What scratch directory should we use when      -->
-  <!--                       compiling JSP pages?  [default work directory  -->
-  <!--                       for the current web application]               -->
-  <!--                                                                      -->
-  <!-- If you wish to use Jikes to compile JSP pages:                       -->
-  <!-- * Set the "classpath" initialization parameter appropriately         -->
-  <!--   for this web application.                                          -->
-  <!-- * Set the "jspCompilerPlugin" initialization parameter to            -->
-  <!--   "org.apache.jasper.compiler.JikesJavaCompiler".                    -->
-  <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  -->
-  
-  <servlet>
-    <servlet-name>jsp</servlet-name>
-    <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
-    <load-on-startup>0</load-on-startup>
-  </servlet>
-
-  <servlet>
-    <servlet-name>Default</servlet-name>
-    <servlet-class>org.mortbay.jetty.servlet.Default</servlet-class>
-    <init-param>
-      <param-name>acceptRanges</param-name>
-      <param-value>true</param-value>
-    </init-param>
-    <init-param>
-      <param-name>dirAllowed</param-name>
-      <param-value>true</param-value>
-    </init-param>
-    <init-param>
-      <param-name>putAllowed</param-name>
-      <param-value>false</param-value>
-    </init-param>
-    <init-param>
-      <param-name>delAllowed</param-name>
-      <param-value>false</param-value>
-    </init-param>
-    <init-param>
-      <param-name>redirectWelcome</param-name>
-      <param-value>true</param-value>
-    </init-param>
-    <load-on-startup>1</load-on-startup>
-  </servlet>
-  
-
-  <!-- ==================================================================== -->
-  <servlet-mapping>
-    <servlet-name>Default</servlet-name>
-    <url-pattern>/</url-pattern>
-  </servlet-mapping>
-
-  <servlet-mapping>
-    <servlet-name>jsp</servlet-name>
-    <url-pattern>*.jsp</url-pattern>
-  </servlet-mapping>
-
-  <!-- ==================================================================== -->
-  <session-config>
-    <session-timeout>60</session-timeout>
-  </session-config>
-
-  <!-- ==================================================================== -->
-  <welcome-file-list>
-    <welcome-file>index.html</welcome-file>
-    <welcome-file>index.htm</welcome-file>
-  </welcome-file-list>
-
-</web-app>
-
diff --git a/3.0.4/contrib/.cvsignore b/3.0.4/contrib/.cvsignore
deleted file mode 100644
index 602053d..0000000
--- a/3.0.4/contrib/.cvsignore
+++ /dev/null
@@ -1,3 +0,0 @@
-classes

-*.log

-target

diff --git a/3.0.4/contrib/build.xml b/3.0.4/contrib/build.xml
deleted file mode 100644
index 35337d7..0000000
--- a/3.0.4/contrib/build.xml
+++ /dev/null
@@ -1,46 +0,0 @@
-<?xml version="1.0"?>
-<!-- $Id$ -->
-<project name="Tapestry Contrib Framework" default="install">
-	<property name="root.dir" value=".."/>
-	<property file="${root.dir}/config/Version.properties"/>
-	<property file="${root.dir}/config/build.properties"/>
-	<property file="${root.dir}/config/common.properties"/>
-	<path id="jetty.classpath">
-		<fileset dir="${jetty.dir}">
-			<include name="**/javax.*.jar"/>
-		</fileset>
-	</path>
-	<path id="project.classpath">
-		<fileset dir="${root.lib.dir}">
-			<include name="${framework.jar}"/>
-			<include name="${ext.dir}/*.jar"/>
-			<include name="${j2ee.dir}/*.jar"/>
-		</fileset>
-	</path>
-	<target name="init">
-		<mkdir dir="${classes.dir}"/>
-	</target>
-	<target name="clean">
-		<delete dir="${classes.dir}"/>
-	</target>
-
-	<target name="compile" depends="init"
-		description="Compile all classes in the framework.">
-		<javac srcdir="${src.dir}" destdir="${classes.dir}" debug="on"
-			target="1.1" source="1.3">
-			<classpath refid="project.classpath"/>
-		</javac>
-	</target>
-
-	<target name="install" depends="compile"
-		description="Compile all classes and build the installed JAR including all package resources."
-		>
-		<jar jarfile="${root.lib.dir}/${contrib.jar}">
-			<fileset dir="${classes.dir}"/>
-			<fileset dir="${src.dir}">
-				<exclude name="**/*.java"/>
-				<exclude name="**/package.html"/>
-			</fileset>
-		</jar>
-	</target>
-</project>
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/Contrib.library b/3.0.4/contrib/src/org/apache/tapestry/contrib/Contrib.library
deleted file mode 100644
index fb5b813..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/Contrib.library
+++ /dev/null
@@ -1,76 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-    Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE library-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<library-specification>
-
-  <component-type type="InspectorButton" specification-path="inspector/InspectorButton.jwc"/>
-  <page name="Inspector" specification-path="inspector/Inspector.page"/>
-
-  <library id="inspector" specification-path="inspector/Inspector.library"/>
-
-  <component-type type="Choose" specification-path="components/Choose.jwc"/>
-  <component-type type="When" specification-path="components/When.jwc"/>
-  <component-type type="Otherwise" specification-path="components/Otherwise.jwc"/>
-
-  <component-type type="Palette" specification-path="palette/Palette.jwc"/>
-  <component-type type="MultiplePropertySelection" specification-path="form/MultiplePropertySelection.jwc"/>
-  <component-type type="DateField" specification-path="valid/DateField.jwc"/>
-  <component-type type="MaskEdit" specification-path="form/MaskEdit.jwc"/>
-  <component-type type="NumericField" specification-path="valid/NumericField.jwc"/>
-  <component-type type="ValidatingTextField" specification-path="valid/ValidatingTextField.jwc"/>
-  <component-type type="FormConditional" specification-path="form/FormConditional.jwc"/>
-
-  <component-type type="InheritInformalAny" specification-path="informal/InheritInformalAny.jwc"/>
-
-  <component-type type="Table" specification-path="table/components/Table.jwc"/>
-  <component-type type="TableColumns" specification-path="table/components/TableColumns.jwc"/>
-  <component-type type="TablePages" specification-path="table/components/TablePages.jwc"/>
-  <component-type type="TableRows" specification-path="table/components/TableRows.jwc"/>
-  <component-type type="TableValues" specification-path="table/components/TableValues.jwc"/>
-  <component-type type="TableView" specification-path="table/components/TableView.jwc"/>
-  <component-type type="FormTable" specification-path="table/components/FormTable.jwc"/>
-  <component-type type="TableFormRows" specification-path="table/components/TableFormRows.jwc"/>
-  <component-type type="TableFormPages" specification-path="table/components/TableFormPages.jwc"/>
-
-  <page name="SimpleTableColumnPage" specification-path="table/components/inserted/SimpleTableColumnPage.page"/>
-  <component-type type="SimpleTableColumnComponent" specification-path="table/components/inserted/SimpleTableColumnComponent.jwc"/>
-  <component-type type="SimpleTableColumnFormComponent" specification-path="table/components/inserted/SimpleTableColumnFormComponent.jwc"/>
-
-  <component-type type="PopupLink" specification-path="popup/PopupLink.jwc"/>
-
-    <component-type type="Tree"
-        specification-path="/org/apache/tapestry/contrib/tree/components/Tree.jwc"/>
-    <component-type type="TreeDataView"
-        specification-path="/org/apache/tapestry/contrib/tree/components/TreeDataView.jwc"/>
-    <component-type type="TreeNodeView"
-        specification-path="/org/apache/tapestry/contrib/tree/components/TreeNodeView.jwc"/>
-    <component-type type="TreeView"
-        specification-path="/org/apache/tapestry/contrib/tree/components/TreeView.jwc"/>
-    <component-type type="TreeTableDataView"
-        specification-path="/org/apache/tapestry/contrib/tree/components/table/TreeTableDataView.jwc"/>
-    <component-type type="TreeTable"
-        specification-path="/org/apache/tapestry/contrib/tree/components/table/TreeTable.jwc"/>
-    <component-type type="TreeTableNodeViewDelegator"
-        specification-path="/org/apache/tapestry/contrib/tree/components/table/TreeTableNodeViewDelegator.jwc"/>
-    <page name="TreeNodeViewPage" specification-path="/org/apache/tapestry/contrib/tree/components/TreeNodeViewPage.page"/>
-
-    <page name="TreeTableNodeViewPage" specification-path="/org/apache/tapestry/contrib/tree/components/table/TreeTableNodeViewPage.page"/>
-</library-specification>
\ No newline at end of file
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/components/Choose.java b/3.0.4/contrib/src/org/apache/tapestry/contrib/components/Choose.java
deleted file mode 100644
index 20c41f4..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/components/Choose.java
+++ /dev/null
@@ -1,62 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.components;
-
-import org.apache.tapestry.IRender;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.components.Conditional;
-
-/**
- *  This component is a container for {@link When} or Otherwise components;
- *  it provides the context for mutually exclusive conditional evaluation.
- *
- *  [<a href="../../../../../../ComponentReference/contrib.Choose.html">Component Reference</a>]
- *
- *  @author David Solis
- *  @version $Id$
- * 
- **/
-public abstract class Choose extends Conditional {
-
-
-	public void addBody(IRender element)
-	{
-		super.addBody(element);
-		if (element instanceof When)
-			((When) element).setChoose(this);	
-	}
-	
-	protected void cleanupAfterRender(IRequestCycle cycle)
-	{
-		setConditionMet(false);
-		super.cleanupAfterRender(cycle);
-	}
-	
-	protected boolean evaluateCondition()
-	{
-		return getCondition();
-	}
-
-	public boolean getInvert()
-	{
-		// This component doesn't require invert parameter.
-		return false;
-	}
-
-	public abstract boolean getCondition();
-	
-	public abstract boolean isConditionMet();
-	public abstract void setConditionMet(boolean value);
-}
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/components/Choose.jwc b/3.0.4/contrib/src/org/apache/tapestry/contrib/components/Choose.jwc
deleted file mode 100644
index e3a522c..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/components/Choose.jwc
+++ /dev/null
@@ -1,44 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-  
-<component-specification class="org.apache.tapestry.contrib.components.Choose">
-
-  <description>
-  Provides the context for mutually exclusive conditional evaluation.
-  </description>
-
-  <parameter name="condition" type="boolean" direction="in" default-value="true">
-    <description>
-    The condition to evaluate.
-    </description>
-  </parameter>
-
-  <parameter name="element" type="java.lang.String" direction="in">
-  	<description>
-  	The element to emulate.
-  	</description>
-  </parameter>
-
-  <reserved-parameter name="invert"/>
-  
-  <property-specification name="conditionMet" type="boolean" initial-value="false"/>
-  
-</component-specification>
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/components/Otherwise.jwc b/3.0.4/contrib/src/org/apache/tapestry/contrib/components/Otherwise.jwc
deleted file mode 100644
index 3beb4f9..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/components/Otherwise.jwc
+++ /dev/null
@@ -1,40 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-  
-<component-specification class="org.apache.tapestry.contrib.components.When">
-  <description>
-  Otherwise is just a When component that always tries to render its body and/or emulate an element 
-  and its attributes (if element is specified) .
-  </description>
-  
-  <parameter name="element" type="java.lang.String" direction="in">
-  	<description>
-  	The element to emulate.
-  	</description>
-  </parameter>
-
-  <reserved-parameter name="condition"/>
-
-  <reserved-parameter name="invert"/>
-
-  <property-specification name="condition" type="boolean" initial-value="true"/>
-  
-</component-specification>
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/components/When.java b/3.0.4/contrib/src/org/apache/tapestry/contrib/components/When.java
deleted file mode 100644
index 9bcc3fa..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/components/When.java
+++ /dev/null
@@ -1,91 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.components;
-
-import org.apache.tapestry.ApplicationRuntimeException;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.components.Conditional;
-
-/**
- *  Represents an alternative whithin a {@link Choose} component. 
- *  The default alternative is described by the Otherwise component.
- *
- *  [<a href="../../../../../../ComponentReference/contrib.When.html">Component Reference</a>]
- *
- *  @author David Solis
- *  @version $Id$
- * 
- **/
-public abstract class When extends Conditional
-{
-    /** Parent of this component. */
-
-    private Choose _choose;
-
-    /**
-     *  Renders its wrapped components only if the condition is true and its parent {@link Choose}
-     *  allows it. In addition, if element is specified, can emulate that HTML element.
-     *
-     **/
-
-    protected void renderComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        Choose choose = getChoose();
-
-        if (choose == null)
-            throw new ApplicationRuntimeException(
-                Tapestry.getMessage("When.must-be-contained-by-choose"),
-                this,
-                null,
-                null);
-
-        if (!choose.isConditionMet() && getCondition())
-        {
-            choose.setConditionMet(true);
-            super.renderComponent(writer, cycle);
-        }
-    }
-
-    protected boolean evaluateCondition()
-    {
-        return true;
-    }
-
-    public boolean getInvert()
-    {
-        // This component doesn't require invert parameter.
-        return false;
-    }
-
-    /**
-     *  @return Choose
-     */
-    public Choose getChoose()
-    {
-        return _choose;
-    }
-
-    /**
-     *  Sets the choose.
-     *  @param value The choose to set
-     */
-    public void setChoose(Choose value)
-    {
-        _choose = value;
-    }
-
-}
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/components/When.jwc b/3.0.4/contrib/src/org/apache/tapestry/contrib/components/When.jwc
deleted file mode 100644
index be9b7a8..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/components/When.jwc
+++ /dev/null
@@ -1,42 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-  
-<component-specification class="org.apache.tapestry.contrib.components.When">
-  <description>
-  If this is the first When component to evaluate to true within Choose then emulates an element 
-  and its attributes (if element is specified) and/or includes a block of content.
-  </description>
-  
-  <parameter name="condition" type="boolean" direction="in">
-    <description>
-    The condition to evaluate.
-    </description>
-  </parameter>
-  
-  <parameter name="element" type="java.lang.String" direction="in">
-  	<description>
-  	The element to emulate.
-  	</description>
-  </parameter>
-
-  <reserved-parameter name="invert"/>
-  
-</component-specification>
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/components/package.html b/3.0.4/contrib/src/org/apache/tapestry/contrib/components/package.html
deleted file mode 100644
index 14e9648..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/components/package.html
+++ /dev/null
@@ -1,14 +0,0 @@
-<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN">
-<!-- $Id$ -->
-<html>
-<head>
-<title>Tapestry: Web Application Framework</title>
-</head>
-<body>
-
-<p>Contribution of foundational components.
-
-@author David Solis <a href="mailto:dsolis@apache.org">dsolis@apache.org</a>
-
-</body>
-</html>
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/ejb/XCreateException.java b/3.0.4/contrib/src/org/apache/tapestry/contrib/ejb/XCreateException.java
deleted file mode 100644
index 1e8bb86..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/ejb/XCreateException.java
+++ /dev/null
@@ -1,54 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.ejb;
-
-import javax.ejb.CreateException;
-
-/**
- *  Extended version of {@link CreateException} that includes a root cause.
- *
- *  @version $Id$
- *  @author Howard Lewis Ship
- *
- **/
-
-public class XCreateException extends CreateException
-{
-    private Throwable rootCause;
-
-    public XCreateException(String message)
-    {
-        super(message);
-    }
-
-    public XCreateException(String message, Throwable rootCause)
-    {
-        super(message);
-
-        this.rootCause = rootCause;
-    }
-
-    public XCreateException(Throwable rootCause)
-    {
-        super(rootCause.getMessage());
-
-        this.rootCause = rootCause;
-    }
-
-    public Throwable getRootCause()
-    {
-        return rootCause;
-    }
-}
\ No newline at end of file
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/ejb/XEJBException.java b/3.0.4/contrib/src/org/apache/tapestry/contrib/ejb/XEJBException.java
deleted file mode 100644
index bd92f4c..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/ejb/XEJBException.java
+++ /dev/null
@@ -1,57 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.ejb;
-
-import javax.ejb.EJBException;
-
-/**
- *  Extended version of {@link EJBException} that includes a root cause.
- *  {@link EJBException} doesn't have quite the right constructor for this ...
- *  it has an equivalent to the rootCause property, (causedByException), but
- *  doesn't have a constructor that allows us to set a custom message.
- *
- *  @version $Id$
- *  @author Howard Lewis Ship
- *
- **/
-
-public class XEJBException extends EJBException
-{
-    private Throwable rootCause;
-
-    public XEJBException(String message)
-    {
-        super(message);
-    }
-
-    public XEJBException(String message, Throwable rootCause)
-    {
-        super(message);
-
-        this.rootCause = rootCause;
-    }
-
-    public XEJBException(Throwable rootCause)
-    {
-        super(rootCause.getMessage());
-
-        this.rootCause = rootCause;
-    }
-
-    public Throwable getRootCause()
-    {
-        return rootCause;
-    }
-}
\ No newline at end of file
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/ejb/XFinderException.java b/3.0.4/contrib/src/org/apache/tapestry/contrib/ejb/XFinderException.java
deleted file mode 100644
index a340ee8..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/ejb/XFinderException.java
+++ /dev/null
@@ -1,54 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.ejb;
-
-import javax.ejb.FinderException;
-
-/**
- *  Extended version of {@link FinderException} that includes a root cause.
- *
- *  @version $Id$
- *  @author Howard Lewis Ship
- *
- **/
-
-public class XFinderException extends FinderException
-{
-    private Throwable rootCause;
-
-    public XFinderException(String message)
-    {
-        super(message);
-    }
-
-    public XFinderException(String message, Throwable rootCause)
-    {
-        super(message);
-
-        this.rootCause = rootCause;
-    }
-
-    public XFinderException(Throwable rootCause)
-    {
-        super(rootCause.getMessage());
-
-        this.rootCause = rootCause;
-    }
-
-    public Throwable getRootCause()
-    {
-        return rootCause;
-    }
-}
\ No newline at end of file
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/ejb/XRemoveException.java b/3.0.4/contrib/src/org/apache/tapestry/contrib/ejb/XRemoveException.java
deleted file mode 100644
index 92b0132..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/ejb/XRemoveException.java
+++ /dev/null
@@ -1,54 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.ejb;
-
-import javax.ejb.RemoveException;
-
-/**
- *  Extended version of {@link RemoveException} that includes a root cause.
- *
- *  @version $Id$
- *  @author Howard Lewis Ship
- *
- **/
-
-public class XRemoveException extends RemoveException
-{
-    private Throwable rootCause;
-
-    public XRemoveException(String message)
-    {
-        super(message);
-    }
-
-    public XRemoveException(String message, Throwable rootCause)
-    {
-        super(message);
-
-        this.rootCause = rootCause;
-    }
-
-    public XRemoveException(Throwable rootCause)
-    {
-        super(rootCause.getMessage());
-
-        this.rootCause = rootCause;
-    }
-
-    public Throwable getRootCause()
-    {
-        return rootCause;
-    }
-}
\ No newline at end of file
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/ejb/package.html b/3.0.4/contrib/src/org/apache/tapestry/contrib/ejb/package.html
deleted file mode 100644
index 1e0fbfb..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/ejb/package.html
+++ /dev/null
@@ -1,16 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<!-- $Id$ -->
-<html>
-<head>
-<title>Tapestry: Web Application Framework</title>
-</head>
-<body>
-
-<p>Subclasses of the EJB exceptions that take an optional, additional, root cause Throwable
-to identify the underlying reason for the exception.  This is less necessary in JDK 1.4, which
-support root cause for all exceptions.
-
-@author Howard Lewis Ship <a href="mailto:hlship@apache.org">hlship@apache.org</a>
-
-</body>
-</html>
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/form/CheckBoxMultiplePropertySelectionRenderer.java b/3.0.4/contrib/src/org/apache/tapestry/contrib/form/CheckBoxMultiplePropertySelectionRenderer.java
deleted file mode 100644
index 3661094..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/form/CheckBoxMultiplePropertySelectionRenderer.java
+++ /dev/null
@@ -1,103 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.form;
-
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.form.IPropertySelectionModel;
-
-/**
- *  Implementation of {@link IMultiplePropertySelectionRenderer} that
- *  produces a table of checkbox (&lt;input type=checkbox&gt;) elements.
- *
- *  @version $Id$
- *  @author Sanjay Munjal
- *
- **/
-
-public class CheckBoxMultiplePropertySelectionRenderer
-    implements IMultiplePropertySelectionRenderer
-{
-
-    /**
-     *  Writes the &lt;table&gt; element.
-     *
-     **/
-
-    public void beginRender(
-        MultiplePropertySelection component,
-        IMarkupWriter writer,
-        IRequestCycle cycle)
-    {
-        writer.begin("table");
-        writer.attribute("border", 0);
-        writer.attribute("cellpadding", 0);
-        writer.attribute("cellspacing", 2);
-    }
-
-    /**
-     *  Closes the &lt;table&gt; element.
-     *
-     **/
-
-    public void endRender(
-        MultiplePropertySelection component,
-        IMarkupWriter writer,
-        IRequestCycle cycle)
-    {
-        writer.end(); // <table>
-    }
-
-    /**
-     *  Writes a row of the table.  The table contains two cells; the first is the checkbox,
-     *  the second is the label for the checkbox.
-     *
-     **/
-
-    public void renderOption(
-        MultiplePropertySelection component,
-        IMarkupWriter writer,
-        IRequestCycle cycle,
-        IPropertySelectionModel model,
-        Object option,
-        int index,
-        boolean selected)
-    {
-        writer.begin("tr");
-        writer.begin("td");
-
-        writer.beginEmpty("input");
-        writer.attribute("type", "checkbox");
-        writer.attribute("name", component.getName());
-        writer.attribute("value", model.getValue(index));
-
-        if (component.isDisabled())
-            writer.attribute("disabled", "disabled");
-
-        if (selected)
-            writer.attribute("checked", "checked");
-
-        writer.end(); // <td>
-
-        writer.println();
-
-        writer.begin("td");
-        writer.print(model.getLabel(index));
-        writer.end(); // <td>
-        writer.end(); // <tr>
-
-        writer.println();
-    }
-}
\ No newline at end of file
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/form/FormConditional.java b/3.0.4/contrib/src/org/apache/tapestry/contrib/form/FormConditional.java
deleted file mode 100644
index c76fad0..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/form/FormConditional.java
+++ /dev/null
@@ -1,168 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.form;
-
-import java.io.IOException;
-
-import org.apache.tapestry.ApplicationRuntimeException;
-import org.apache.tapestry.IActionListener;
-import org.apache.tapestry.IBinding;
-import org.apache.tapestry.IForm;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.form.AbstractFormComponent;
-import org.apache.tapestry.request.RequestContext;
-import org.apache.tapestry.util.io.DataSqueezer;
-
-/**
- *  A conditional element on a page which will render its wrapped elements
- *  zero or one times.
- * 
- * This component is a variant of {@link org.apache.tapestry.components.Conditional}, 
- * but is designed for operation in a form. The component parameters are stored in 
- * hidden fields during rendering and are taken from those fields during the rewind, 
- * thus no StaleLink exceptions occur. 
- *
- *  [<a href="../../../../../ComponentReference/contrib.FormConditional.html">Component Reference</a>]
- *
- *  @author Mindbridge
- *  @version $Id$
- *  @since 3.0
- * 
- **/
-
-public abstract class FormConditional extends AbstractFormComponent
-{
-
-    protected void renderComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        IForm form = getForm(cycle);
-
-        boolean cycleRewinding = cycle.isRewinding();
-
-        // If the cycle is rewinding, but not this particular form,
-        // then do nothing (don't even render the body).
-
-        if (cycleRewinding && !form.isRewinding())
-            return;
-
-        String name = form.getElementId(this);
-
-        boolean condition = getCondition(cycle, form, name);
-
-        // call listener
-        IActionListener listener = getListener();
-        if (listener != null)
-            listener.actionTriggered(this, cycle);
-
-        // render the component body only if the condition is true
-        if (condition) {
-            String element = getElement();
-            
-            boolean render = !cycleRewinding && Tapestry.isNonBlank(element);
-            
-            if (render)
-            {
-                writer.begin(element);
-                renderInformalParameters(writer, cycle);
-            }
-
-            renderBody(writer, cycle);
-            
-            if (render)
-                writer.end(element);
-        }
-    }
-
-    private boolean getCondition(IRequestCycle cycle, IForm form, String name)
-    {
-        boolean condition;
-        
-        if (!cycle.isRewinding())
-        {
-            condition = getCondition();
-            writeValue(form, name, condition);
-        }
-        else
-        {
-            RequestContext context = cycle.getRequestContext();
-            String submittedConditions[] = context.getParameters(name);
-            condition = convertValue(submittedConditions[0]);
-        }
-
-        IBinding conditionValueBinding = getConditionValueBinding();
-        if  (conditionValueBinding != null) 
-            conditionValueBinding.setBoolean(condition);
-        
-        return condition;
-    }
-
-    private void writeValue(IForm form, String name, boolean value)
-    {
-        String externalValue;
-
-        Object booleanValue = new Boolean(value);
-        try
-        {
-            externalValue = getDataSqueezer().squeeze(booleanValue);
-        }
-        catch (IOException ex)
-        {
-            throw new ApplicationRuntimeException(
-                Tapestry.format("FormConditional.unable-to-convert-value", booleanValue),
-                this,
-                null,
-                ex);
-        }
-
-        form.addHiddenValue(name, externalValue);
-    }
-
-    private boolean convertValue(String value)
-    {
-        try
-        {
-            Object booleanValue = getDataSqueezer().unsqueeze(value);
-            return Tapestry.evaluateBoolean(booleanValue);
-        }
-        catch (IOException ex)
-        {
-            throw new ApplicationRuntimeException(
-                Tapestry.format("FormConditional.unable-to-convert-string", value),
-                this,
-                null,
-                ex);
-        }
-    }
-
-    private DataSqueezer getDataSqueezer()
-    {
-        return getPage().getEngine().getDataSqueezer();
-    }
-
-    public boolean isDisabled()
-    {
-        return false;
-    }
-
-    public abstract boolean getCondition();
-    public abstract String getElement();
-
-    public abstract IBinding getConditionValueBinding();
-
-    public abstract IActionListener getListener();
-
-}
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/form/FormConditional.jwc b/3.0.4/contrib/src/org/apache/tapestry/contrib/form/FormConditional.jwc
deleted file mode 100644
index c2ba3d3..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/form/FormConditional.jwc
+++ /dev/null
@@ -1,53 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-  
-<component-specification class="org.apache.tapestry.contrib.form.FormConditional">
-  <description>
-  Conditionally emulates an element and its attributes (if element is specified) and/or includes a block of content if a condition is met.
-  </description>
-  
-  <parameter name="condition" type="boolean" direction="in" required="yes">
-    <description>
-    The condition to evaluate.
-    </description>
-  </parameter>
-  
-  <parameter name="element" type="java.lang.String" direction="in" required="no">
-  	<description>
-  	The element to emulate.
-  	</description>
-  </parameter>
-
-  <parameter name="listener" type="org.apache.tapestry.IActionListener" direction="in"/>
-
-  <parameter name="conditionValue" type="boolean">
-    <description>
-    The value of the condition. During render this is obtained from
-    the condition parameter. During rewind it is the submitted condition.
-    </description>
-  </parameter>
-
-  <reserved-parameter name="invert"/>
-  
-  <property-specification name="name" type="java.lang.String"/>
-  <property-specification name="form" type="org.apache.tapestry.IForm"/>
-  
-</component-specification>
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/form/IMultiplePropertySelectionRenderer.java b/3.0.4/contrib/src/org/apache/tapestry/contrib/form/IMultiplePropertySelectionRenderer.java
deleted file mode 100644
index a70af59..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/form/IMultiplePropertySelectionRenderer.java
+++ /dev/null
@@ -1,65 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.form;
-
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.form.IPropertySelectionModel;
-
-/**
- *  Defines an object that works with a {@link MultiplePropertySelection} component
- *  to render the individual elements obtained from the {@link IPropertySelectionModel model}.
- *
- *  @version $Id$
- *  @author Sanjay Munjal
- *
- **/
-
-public interface IMultiplePropertySelectionRenderer
-{
-    /**
-     *  Begins the rendering of the {@link MultiplePropertySelection}.
-     *
-     **/
-
-    public void beginRender(
-        MultiplePropertySelection component,
-        IMarkupWriter writer,
-        IRequestCycle cycle);
-
-    /**
-     *  Invoked for each element obtained from the {@link IPropertySelectionModel model}.
-     *
-     **/
-
-    public void renderOption(
-        MultiplePropertySelection component,
-        IMarkupWriter writer,
-        IRequestCycle cycle,
-        IPropertySelectionModel model,
-        Object option,
-        int index,
-        boolean selected);
-
-    /**
-     *  Ends the rendering of the {@link MultiplePropertySelection}.
-     *
-     **/
-
-    public void endRender(
-        MultiplePropertySelection component,
-        IMarkupWriter writer,
-        IRequestCycle cycle);
-}
\ No newline at end of file
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/form/MaskEdit.html b/3.0.4/contrib/src/org/apache/tapestry/contrib/form/MaskEdit.html
deleted file mode 100644
index 3e4b0a5..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/form/MaskEdit.html
+++ /dev/null
@@ -1,5 +0,0 @@
-<input jwcid="maskEdit" type="text"/>
-<input jwcid="maskValue" type="hidden"/>
-<span jwcid="maskEditScript"/>
-
-
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/form/MaskEdit.java b/3.0.4/contrib/src/org/apache/tapestry/contrib/form/MaskEdit.java
deleted file mode 100644
index 7d596b4..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/form/MaskEdit.java
+++ /dev/null
@@ -1,113 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.form;
-
-import org.apache.tapestry.BaseComponent;
-import org.apache.tapestry.IBinding;
-
-/**
- * Provides a mask edit HTML &lt;input type="text"&gt; form element.
- * <p>
- * Mask edit field validates the text the user enters against a 
- * mask that encodes the valid forms the text can take. The mask can 
- * also format text that is displayed to the user.
- * <p>
- * <table border="1" cellpadding="2">
- *  <tr>
- *   <th>Mask character</th><th>Meaning in mask</th>
- *  </tr>
- *  <tr>
- *   <td>&nbsp;l</td><td>&nbsp;Mixed case letter character [a..z, A..Z]</td>
- *  </tr>
- *  <tr>
- *   <td>&nbsp;L</td><td>&nbsp;Upper case letter character [A..Z]</td>
- *  </tr>
- *  <tr>
- *   <td>&nbsp;a</td><td>&nbsp;Mixed case alpha numeric character [a..z, A..Z, 0..1]</td>
- *  </tr>
- *  <tr>
- *   <td>&nbsp;A</td><td>&nbsp;Upper case alpha numeric character [A..Z, 0..9]</td>
- *  </tr>
- *  <tr>
- *   <td>&nbsp;#</td><td>&nbsp;Numeric character [0..9]</td>
- *  </tr>
- *  <tr>
- *   <td>&nbsp;_</td><td>&nbsp;Reserved character for display, do not use.</td>
- *  </tr>
- *  <tr>
- *   <td>&nbsp;others</td><td>&nbsp;Non editable character for display.</td>
- *  </tr>
- * </table> 
- * <p>
- * This component requires JavaScript to be enabled in the client browser.
- * <p>
- * [<a href="../../../../../ComponentReference/MaskEdit.html">Component Reference</a>]
- *
- * @author Malcolm Edgar
- * @version $Id$
- * @since 2.3
- *
- **/
-
-public class MaskEdit extends BaseComponent
-{
-    private String _mask;
-    private IBinding _valueBinding;
-    private boolean _disabled;
-
-    public String getMask()
-    {
-        return _mask;
-    }
-
-    public void setMask(String mask)
-    {
-        _mask = mask;
-    }
-    
-    public String getValue()
-    {
-        if (_valueBinding != null) {
-            return _valueBinding.getString();
-        } else {
-            return null;
-        }
-    }
-
-    public void setValue(String value)
-    {
-        _valueBinding.setString(value);
-    }
-
-    public IBinding getValueBinding()
-    {
-        return _valueBinding;
-    }
-
-    public void setValueBinding(IBinding valueBinding)
-    {
-        _valueBinding = valueBinding;
-    }
-
-    public boolean isDisabled()
-    {
-        return _disabled;
-    }
-
-    public void setDisabled(boolean disabled)
-    {
-        _disabled = disabled;
-    }        
-}
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/form/MaskEdit.js b/3.0.4/contrib/src/org/apache/tapestry/contrib/form/MaskEdit.js
deleted file mode 100644
index 9db04c8..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/form/MaskEdit.js
+++ /dev/null
@@ -1,420 +0,0 @@
-/**

- *  JavaScript Mask Edit control

- *  Paul Geerts

- *  Oct 2002

- * 

- *  Note:  This probably only works for English

- *  Other languages have been deprecated and will be removed in the 

- *  next version of Speech (TM)

- **/

-

-var dontDoIt;  // hack for Moz because it won't cancel events properly

-var isTab;     // another Moz hack

-

-

-// Init the mask edit field by creating a lookalike DIV

-// and hiding the real one

-function initMask(field, maskField) {

-

-	if (field.disabled == true) {

-	   return;

-	}

-

-    var mask = maskField.value;

-    var val = field.value;

-    

-    if (!val) {  // if there's no val, init it with empty mask

-        val = displayMask(mask);

-        field.value = displayMask(mask);

-    }

-    // create a div and add a bunch of spans

-    // and edits to it.

-    div = document.createElement("div");

-   	div.style.backgroundColor = "white";

-    for (var i = 0 ; i < mask.length ; i++) {

-        var ds = document.createElement("SPAN");

-        var v = val.substr(i,1);

-        var m = mask.substr(i,1);

-        if (v==" ") {

-            v="&nbsp;";

-        }

-        ds.innerHTML = v;

-        ds.index = i;

-        ds.mask = m;

-        ds.div = div;

-        // if we can edit this char

-        // make a little tiny edit field

-        if (isEditChar(m)) {

-            var es = document.createElement("INPUT");

-            es.style.width = "1px";

-            es.style.border="0px";

-            es.index = i;

-            es.field = field;

-            es.mask = m;

-            es.display = ds;

-            ds.editField = es;

-            es.div = div;

-            div.appendChild(es);  // set up some events

-            if (navigator.appName == "Microsoft Internet Explorer") {

-                addEvent("keypress", es, changeBitIE);

-            } else {

-                addEvent("keypress", es, changeBitNS);

-            }

-            addEvent("keydown", es, specialKey); // keydown handles stuff like home, end etc

-            addEvent("click", ds, click);

-        } 

-

-        div.appendChild(ds);

-

-    }

-    

-    // the final edit field on the end

-    var es =document.createElement("INPUT");

-    es.style.width = "1px";

-    es.style.border="0px";

-    es.div = div;

-    div.appendChild(es);

-    if (navigator.appName == "Microsoft Internet Explorer") {

-        addEvent("keypress", es, changeBitIE);

-    } else {

-        addEvent("keypress", es, changeBitNS);

-    }

-    addEvent("keydown", es, specialKey);

-

-    div.noWrap = true; // force single line display

-

-    formatDiv(div, field); // format the DIV to look like an edit box

-    field.style.display = 'none'; 

-    field.parentNode.insertBefore(div, field);

-    addEvent("click", div, divClick);

-}

-

-function formatDiv(div, field) {

-    // make it look like an IE edit

-    if (navigator.appName == "Microsoft Internet Explorer") {

-        div.style.fontFamily="courier"; 

-        div.style.fontSize="10pt";      

-        div.style.width = field.offsetWidth;

-        div.style.height = field.offsetHeight;

-        if (navigator.appVersion.match(/6.0/)) { // IE 6 is different

-            div.style.border = "1px solid #7F9DB9";

-        } else {

-            div.style.borderLeft = "2px solid #606060";

-            div.style.borderTop = "2px solid #606060";

-            div.style.borderRight = "1px solid #aaaaaa";

-            div.style.borderBottom = "1px solid #aaaaaa";

-        }

-

-    } else {

-        // Mozilla edit look-a-like

-        div.style.fontFamily="courier";

-        div.style.fontSize="10pt";

-        div.style.border="2px inset #cccccc";

-        if (field.size) {

-            div.style.widh = 13 * field.size;

-        } else {

-            div.style.width = "130px";

-        }

-    }

-}

-

-

-function isEditChar(c) {  // is this char a meaningful mask char

-    switch (c) {

-    case "_":

-    case "#":

-    case "a":

-    case "A":

-    case "l":

-    case "L":

-        return true;

-    default:

-        return false;

-    }

-    return false;

-}

-

-function displayMaskChar(c) {  // display mask chars as _ 

-    if (isEditChar(c)) {       // otherwise just show normal char

-        return "_";

-    } else {

-        return c;

-    }

-}

-

-function displayMask(mask) {  // display entire mask using about subroutine

-    var d = "";

-    for (var i = 0 ; i < mask.length ; i++) {

-        d+=displayMaskChar(mask.substr(i,1));

-    }

-    return d;

-}

-

-function divClick(e) {     // when the main DIV is clicked, focus the end of the edit

-    var d = getEventObject(e);

-    if (d && d.lastChild) {

-        try {

-           d.lastChild.focus();

-        } catch (e) {

-           // nuffin

-        }

-    }

-}

-

-function specialKey(e) { // deal with special keys like backspace, delete etc

-    var s = getEventObject(e);

-    var code = e.keyCode;

-    dontDoIt = true;  // Moz needs these, as I can't seem to cancel events properly

-    isTab = false;    // Moz can't handle tabs well either

-    switch (code) {

-    case 8:   // backspace

-        var b = getPrevEdit(s);

-        if (b) {

-            b.display.innerHTML = displayMaskChar(b.mask);

-            var i = b.index;

-            b.field.value = b.field.value.substr(0, i) + 

-                displayMaskChar(b.mask) + b.field.value.substr(i+1, b.field.value.length - i);

-            b.focus();

-        }

-        cancelEvent(e);

-        return false;

-    case 46:  // delete

-        if (s.display) {

-            s.display.innerHTML = displayMaskChar(s.mask);

-            var i = s.index;

-            s.field.value = s.field.value.substr(0, i) + displayMaskChar(s.mask) + 

-                s.field.value.substr(i+1, s.field.value.length - i);

-        }

-        cancelEvent(e);

-        return false;

-        break;

-    case 37: // left

-        var p = getPrevEdit(s);

-        if (p) {

-            p.focus();

-        }

-        cancelEvent(e);

-        return false;

-    case 39: // right

-        var n = getNextEdit(s);

-        if (n) {

-            n.focus();

-        }

-        cancelEvent(e);

-        return false;

-    case 36: // home

-        s.div.firstChild.focus();

-        cancelEvent(e);

-        return false;

-    case 35: // end

-        s.div.lastChild.focus();

-        cancelEvent(e);

-        return false;

-    case 9: // tab

-        if (navigator.appName == "Microsoft Internet Explorer") {

-            if (!e.shiftKey) {

-                s.div.lastChild.focus();

-            } else {

-                s.div.firstChild.focus();

-            }

-            return;

-        } else {  // is mozilla/netscape

-            isTab = true;  // best i can do really

-        }

-        break;

-    }

-       

-    dontDoIt = false;

-}

-

-function moveForward(s) { // focus next edit

-    var b = getNextEdit(s);

-    if (b) {

-        b.focus();

-    }

-}

-

-function moveBackward(s) { // focus previous edit

-    var b = getPrevEdit(s);

-    if (b) {

-        b.focus();

-    }

-}

-

-function isInsertOK(code, s) {  // check if you're good to insert a char

-    var mchar = s.mask;

-    switch (mchar) {

-    case "_":

-        return true;

-        break;

-    case "#":

-        return checkDigit(code);

-        break;

-    case "a":

-        return checkAlphaNumeric(code);

-        break;

-    case "A":

-        return checkUpCaseAlphaNumeric(code);

-        break;

-    case "l":

-        return checkAlpha(code);

-        break;

-    case "L":

-        return checkUpCaseAlpha(code);

-        break;

-    }

-    return false;

-}

-

-// functions to check the key code, good ol ASCII

-// fairly straightforward

-

-function checkDigit(code) {

-    if ((code>=48) && (code<=57)) {

-        return code;

-    } else {

-        return null;

-    }

-}

-

-function checkAlpha(code) {

-    if (((code>=65) && (code<=90)) || ((code>=97) && (code<=122))) {

-        return code;

-    } else {

-        return null;

-    }

-}

-

-function checkUpCaseAlpha(code) {

-    if ((code>=65) && (code<=90)) {

-        return code;

-    } else if ((code>=97) && (code<=122)) {

-        return code - 32;

-    } else {

-        return null;

-    }

-}

-

-function checkAlphaNumeric(code) {

-    if (((code>=65) && (code<=90)) || ((code>=97) && (code<=122)) || ((code>=48) && (code<=57))) {

-        return code;

-    } else {

-        return null;

-    }

-}

-

-function checkUpCaseAlphaNumeric(code) {

-    if ((code>=65) && (code<=90)) {

-        return code;

-    } else if ((code>=97) && (code<=122)) {

-        return code - 32;

-    } else if ((code>=48) && (code<=57)) {

-        return code;

-    } else {

-        return null;

-    }

-}

-

-

-function changeBitNS(e) {  // handle key events in NS

-    var es = getEventObject(e);

-    if (!isTab) {

-        if (es.display) {

-            if (!dontDoIt) {

-                var code = e.charCode;

-                if (code = isInsertOK(code, es)) {

-                    var  c = String.fromCharCode(code);

-                    es.display.innerHTML = c

-                        var i = es.index;

-                    es.field.value = es.field.value.substr(0, i) + c + es.field.value.substr(i+1, es.field.value.length - i);

-                    moveForward(es);

-                }

-            }

-            es.value = "";

-            cancelEvent(e);

-        }        

-        return false;

-    }  

-}

-

-function changeBitIE(e) { // handle key events in IE

-    var es = getEventObject(e);

-    if (es.display) {

-        var code = e.keyCode;

-        if (code = isInsertOK(code, es)) {

-            var  c = String.fromCharCode(code);

-            es.display.innerHTML = c;

-            var i = es.index;

-            es.field.value = es.field.value.substr(0, i) + c + es.field.value.substr(i+1, es.field.value.length - i);

-            moveForward(es);

-            es.value = "";

-        }

-    }

-    cancelEvent(e);

-    return false;

-}

-

-function click(e) {  // clicking on a display span focuses the edit

-    var s = getEventObject(e);

-    s.editField.focus();

-    cancelEvent(e);

-    return false;

-}

-

-function getPrevEdit(s) {    // get previous input field 

-    var b = s.previousSibling;

-    while (b && (b.tagName!="INPUT")) {

-        b = b.previousSibling;

-    }

-    return b;

-}

-

-function getNextEdit(s) { // get previous next field 

-    var b = s.nextSibling;

-    while (b && (b.tagName!="INPUT")) {

-        b = b.nextSibling;

-    }

-    return b;

-}

-

-function cancelEvent(e) {   // kill event propagation

-    e.cancelBubble = true;

-    e.cancel = true;

-    if (navigator.appName != "Microsoft Internet Explorer") {

-        e.stopPropagation();  // doesn't seem to work for key events

-        e.preventDefault();

-    }

-}

-

-

-function getEventObject(e) {  // utility function to retrieve object from event

-    if (navigator.appName == "Microsoft Internet Explorer") {

-        return e.srcElement;

-    } else {  // is mozilla/netscape

-        // need to crawl up the tree to get the first "real" element

-        // i.e. a tag, not raw text

-        var o = e.target;

-        while (!o.tagName) {

-            o = o.parentNode;

-        }

-        return o;

-    }

-}

-

-function addEvent(name, obj, funct) { // utility function to add event handlers

-

-    if (navigator.appName == "Microsoft Internet Explorer") {

-        obj.attachEvent("on"+name, funct);

-    } else {  // is mozilla/netscape

-        obj.addEventListener(name, funct, false);

-    }

-}

-

-function deleteEvent(name, obj, funct) { // utility function to delete event handlers

-

-    if (navigator.appName == "Microsoft Internet Explorer") {

-        obj.detachEvent("on"+name, funct);

-    } else {  // is mozilla/netscape

-        obj.removeEventListener(name, funct, false);

-    }

-}

diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/form/MaskEdit.jwc b/3.0.4/contrib/src/org/apache/tapestry/contrib/form/MaskEdit.jwc
deleted file mode 100644
index a796fcb..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/form/MaskEdit.jwc
+++ /dev/null
@@ -1,46 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<component-specification class="org.apache.tapestry.contrib.form.MaskEdit" allow-informal-parameters="no">
-
-  <parameter name="mask" direction="in" type="java.lang.String" required="yes"/>
-  <parameter name="value" direction="custom" type="java.lang.String" required="yes"/>
-  <parameter name="disabled" direction="in" type="boolean" required="no"/>
-  
-  <component id="maskEdit" type="TextField">
-    <binding name="value" expression="value"/>
-    <binding name="maxlength" expression="mask.length()"/>
-    <binding name="size" expression="mask.length()"/>        
-    <binding name="disabled" expression="disabled"/>
-  </component>
-
-  <component id="maskValue" type="Hidden">
-    <binding name="value" expression="mask"/>
-    <binding name="encode" expression="false"/>
-  </component>
-
-  <component id="maskEditScript" type="Script">
-    <binding name="maskEdit" expression="components.maskEdit"/>
-    <binding name="maskValue" expression="components.maskValue"/>
-    <binding name="script" expression='"MaskEdit.script"'/>
-  </component>
-        
-</component-specification>
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/form/MaskEdit.script b/3.0.4/contrib/src/org/apache/tapestry/contrib/form/MaskEdit.script
deleted file mode 100644
index e6c7756..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/form/MaskEdit.script
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- $Id$ -->
-<!DOCTYPE script PUBLIC
-	"-//Howard Lewis Ship//Tapestry Script 1.2//EN"
-	"http://tapestry.sf.net/dtd/Script_1_2.dtd">
-  
-<script>
-
-<include-script resource-path="/org/apache/tapestry/contrib/form/MaskEdit.js"/>
-
-<input-symbol key="maskEdit" class="org.apache.tapestry.form.TextField" required="yes"/>
-<input-symbol key="maskValue" class="org.apache.tapestry.form.Hidden" required="yes"/>
-
-<let key="formName">
-  ${maskEdit.form.name}
-</let>
-
-<let key="functionName">
-  ${maskEdit.name}_init
-</let>
-
-
-<body>
-function ${functionName}() {
-  initMask(document.${formName}.${maskEdit.name},
-           document.${formName}.${maskValue.name});
-}
-</body>
-
-<initialization>
-  ${functionName}();
-</initialization>
-
-</script>
-
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/form/MultiplePropertySelection.java b/3.0.4/contrib/src/org/apache/tapestry/contrib/form/MultiplePropertySelection.java
deleted file mode 100644
index 3a412d3..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/form/MultiplePropertySelection.java
+++ /dev/null
@@ -1,216 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.form;
-
-import java.util.List;
-
-import org.apache.tapestry.IBinding;
-import org.apache.tapestry.IForm;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.form.AbstractFormComponent;
-import org.apache.tapestry.form.IPropertySelectionModel;
-
-/**
- *  A component which uses &lt;input type=checkbox&gt; to
- *  set a property of some object.  Typically, the values for the object
- *  are defined using an {@link org.apache.commons.lang.enum.Enum}.  A MultiplePropertySelection is dependent on
- *  an {link IPropertySelectionModel} to provide the list of possible values.
- *
- *  <p>Often, this is used to select one or more {@link org.apache.commons.lang.enum.Enum} to assign to a property; the
- * {@link org.apache.tapestry.form.EnumPropertySelectionModel} class simplifies this.
- * 
- *  <p>The {@link org.apache.tapestry.contrib.palette.Palette} component
- *  is more powerful, but requires client-side JavaScript and 
- *  is not fully cross-browser compatible.
- *
- *  <p>
- *
- * <table border=1>
- * <tr>
- *    <td>Parameter</td>
- *    <td>Type</td>
- *	  <td>Direction</td>
- *    <td>Required</td>
- *    <td>Default</td>
- *    <td>Description</td>
- * </tr>
- *
- * <tr>
- *		<td>selectedList</td>
- *		<td>java.util.List</td>
- *		<td>in-out</td>
- *		<td>yes</td>
- *		<td>&nbsp;</td>
- *		<td>The property to set.  During rendering, this property is read, and sets
- * the default value of the options in the select.
- * When the form is submitted, list is cleared, then has each
- * selected option added to it. </td> </tr>
- *
- * <tr>
- *		<td>renderer</td>
- *		<td>{@link IMultiplePropertySelectionRenderer}</td>
- *		<td>in</td>
- *		<td>no</td>
- *		<td>shared instance of {@link CheckBoxMultiplePropertySelectionRenderer}</td>
- *		<td>Defines the object used to render this component.  The default
- *  renders a table of checkboxes.</td></tr>
- *
- *  <tr>
- *		<td>model</td>
- *		<td>{@link IPropertySelectionModel}</td>
- *		<td>in</td>
- *		<td>yes</td>
- *		<td>&nbsp;</td>
- *		<td>The model provides a list of possible labels, and matches those labels
- *  against possible values that can be assigned back to the property.</td> </tr>
- *
- *  <tr>
- * 		<td>disabled</td>
- *		<td>boolean</td>
- *		<td>in</td>
- *		<td>no</td>
- *		<td>false</td>
- *		<td>Controls whether the &lt;select&gt; is active or not. A disabled PropertySelection
- * does not update its value parameter.
- *
- *			<p>Corresponds to the <code>disabled</code> HTML attribute.</td>
- *	</tr>
- *
- *	</table>
- *
- * <p>Informal parameters are not allowed.
- *
- *
- *  @version $Id$
- *  @author Sanjay Munjal
- *
- **/
-
-public abstract class MultiplePropertySelection extends AbstractFormComponent
-{
-
-    /**
-     *  A shared instance of {@link CheckBoxMultiplePropertySelectionRenderer}.
-     *
-     **/
-
-    public static final IMultiplePropertySelectionRenderer DEFAULT_CHECKBOX_RENDERER =
-        new CheckBoxMultiplePropertySelectionRenderer();
-
-    public abstract IBinding getSelectedListBinding();
-
-    protected void finishLoad()
-    {
-        setRenderer(DEFAULT_CHECKBOX_RENDERER);
-    }
-
-    /**
-     *  Returns true if the component is disabled (this is relevant to the
-     *  renderer).
-     *
-     **/
-
-    public abstract boolean isDisabled();
-
-    /**
-     *  Renders the component, much of which is the responsiblity
-     *  of the {@link IMultiplePropertySelectionRenderer renderer}.  The possible options,
-     *  their labels, and the values to be encoded in the form are provided
-     *  by the {@link IPropertySelectionModel model}.
-     *
-     **/
-
-    protected void renderComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        IForm form = getForm(cycle);
-
-        boolean rewinding = form.isRewinding();
-
-        String name = form.getElementId(this);
-
-        List selectedList = (List) getSelectedListBinding().getObject("selectedList", List.class);
-
-        if (selectedList == null)
-            throw Tapestry.createRequiredParameterException(this, "selectedList");
-
-        IPropertySelectionModel model = getModel();
-
-        if (model == null)
-            throw Tapestry.createRequiredParameterException(this, "model");
-
-        // Handle the form processing first.
-        if (rewinding)
-        {
-            // If disabled, ignore anything that comes up from the client.
-
-            if (isDisabled())
-                return;
-
-            // get all the values
-            String[] optionValues = cycle.getRequestContext().getParameters(name);
-
-            // Clear the list
-
-            selectedList.clear();
-
-            // Nothing was selected
-            if (optionValues != null)
-            {
-
-                // Go through the array and translate and put back in the list
-                for (int i = 0; i < optionValues.length; i++)
-                {
-                    // Translate the new value
-                    Object selectedValue = model.translateValue(optionValues[i]);
-
-                    // Add this element in the list back
-                    selectedList.add(selectedValue);
-                }
-            }
-
-            return;
-        }
-
-        IMultiplePropertySelectionRenderer renderer = getRenderer();
-
-        // Start rendering
-        renderer.beginRender(this, writer, cycle);
-
-        int count = model.getOptionCount();
-
-        for (int i = 0; i < count; i++)
-        {
-            Object option = model.getOption(i);
-
-            // Try to find the option in the list and if yes, then it is checked.
-            boolean optionSelected = selectedList.contains(option);
-
-            renderer.renderOption(this, writer, cycle, model, option, i, optionSelected);
-        }
-
-        // A PropertySelection doesn't allow a body, so no need to worry about
-        // wrapped components.
-        renderer.endRender(this, writer, cycle);
-    }
-
-    public abstract IPropertySelectionModel getModel();
-
-    public abstract IMultiplePropertySelectionRenderer getRenderer();
-
-    public abstract void setRenderer(IMultiplePropertySelectionRenderer renderer);
-
-}
\ No newline at end of file
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/form/MultiplePropertySelection.jwc b/3.0.4/contrib/src/org/apache/tapestry/contrib/form/MultiplePropertySelection.jwc
deleted file mode 100644
index ae91cb2..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/form/MultiplePropertySelection.jwc
+++ /dev/null
@@ -1,39 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<component-specification class="org.apache.tapestry.contrib.form.MultiplePropertySelection" 
-	allow-body="no" allow-informal-parameters="no">
-	
-  <parameter name="model" 
-  	type="org.apache.tapestry.form.IPropertySelectionModel" required="yes" direction="in"/>
-  	
-  <parameter name="selectedList" type="java.util.List" required="yes"/>
-  
-  <parameter name="disabled" type="boolean" direction="in"/>
-  
-  <parameter name="renderer" 
-  	type="org.apache.tapestry.contrib.form.IMultiplePropertySelectionRenderer"
-  	direction="in"/>
-  	
-  <property-specification name="name" type="java.lang.String"/>
-  <property-specification name="form" type="org.apache.tapestry.IForm"/>
-  
-</component-specification>
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/informal/InheritInformalAny.java b/3.0.4/contrib/src/org/apache/tapestry/contrib/informal/InheritInformalAny.java
deleted file mode 100644
index f50d4b9..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/informal/InheritInformalAny.java
+++ /dev/null
@@ -1,117 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.informal;
-
-import java.util.Iterator;
-import java.util.Map;
-
-import org.apache.tapestry.AbstractComponent;
-import org.apache.tapestry.IAsset;
-import org.apache.tapestry.IBinding;
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.spec.IComponentSpecification;
-
-/**
- * 
- *  A version of the Any component that inherits the informal attributes of its parent.
- *  This component has been deprecated in favour of the 'inherit-informal-parameters' 
- *  tag that indicates that a particular component must inherit the informal parameters
- *  of its parent. This tag is available in the page or component specification file.
- * 
- *  @deprecated
- *  @version $Id$
- *  @author mindbridge
- *  @since 2.2
- * 
- **/
-
-public class InheritInformalAny extends AbstractComponent
-{
-    // Bindings
-    private IBinding m_objElementBinding;
-
-    public IBinding getElementBinding()
-    {
-        return m_objElementBinding;
-    }
-
-    public void setElementBinding(IBinding objElementBinding)
-    {
-        m_objElementBinding = objElementBinding;
-    }
-
-    protected void generateParentAttributes(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        String attribute;
-
-        IComponent objParent = getContainer();
-        if (objParent == null)
-            return;
-
-        IComponentSpecification specification = objParent.getSpecification();
-        Map bindings = objParent.getBindings();
-        if (bindings == null)
-            return;
-
-        Iterator i = bindings.entrySet().iterator();
-
-        while (i.hasNext())
-        {
-            Map.Entry entry = (Map.Entry) i.next();
-            String name = (String) entry.getKey();
-
-            // Skip over formal parameters stored in the bindings
-            // Map.  We're just interested in informal parameters.
-
-            if (specification.getParameter(name) != null)
-                continue;
-
-            IBinding binding = (IBinding) entry.getValue();
-
-            Object value = binding.getObject();
-            if (value == null)
-                continue;
-
-            if (value instanceof IAsset)
-            {
-                IAsset asset = (IAsset) value;
-
-                // Get the URL of the asset and insert that.
-                attribute = asset.buildURL(cycle);
-            }
-            else
-                attribute = value.toString();
-
-            writer.attribute(name, attribute);
-        }
-
-    }
-
-    public void renderComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        String strElement = m_objElementBinding.getObject().toString();
-
-        writer.begin(strElement);
-        generateParentAttributes(writer, cycle);
-        renderInformalParameters(writer, cycle);
-
-        renderBody(writer, cycle);
-
-        writer.end();
-    }
-
-}
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/informal/InheritInformalAny.jwc b/3.0.4/contrib/src/org/apache/tapestry/contrib/informal/InheritInformalAny.jwc
deleted file mode 100644
index e9d9eb1..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/informal/InheritInformalAny.jwc
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!--  $Id$ -->
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<component-specification class="org.apache.tapestry.contrib.informal.InheritInformalAny" allow-body="yes" allow-informal-parameters="yes">
-    <parameter name="element" type="java.lang.String" required="yes" direction="custom"/>
-</component-specification>
\ No newline at end of file
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/Engine_HRp4.gif b/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/Engine_HRp4.gif
deleted file mode 100644
index 42ff5ec..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/Engine_HRp4.gif
+++ /dev/null
Binary files differ
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/Engine_Hp3.gif b/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/Engine_Hp3.gif
deleted file mode 100644
index 5f2860d..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/Engine_Hp3.gif
+++ /dev/null
Binary files differ
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/Engine_NBanner.gif b/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/Engine_NBanner.gif
deleted file mode 100644
index 0105a1b..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/Engine_NBanner.gif
+++ /dev/null
Binary files differ
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/Engine_NRp2.gif b/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/Engine_NRp2.gif
deleted file mode 100644
index 8590996..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/Engine_NRp2.gif
+++ /dev/null
Binary files differ
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/Engine_Np1.gif b/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/Engine_Np1.gif
deleted file mode 100644
index 78ee58c..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/Engine_Np1.gif
+++ /dev/null
Binary files differ
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/Inspector.css b/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/Inspector.css
deleted file mode 100644
index c8852b0..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/Inspector.css
+++ /dev/null
@@ -1,201 +0,0 @@
-H1  {

-	font-size: 12pt;

-	font-weight: bold;

-

-}

-

-H2  {}

-

-H3  {}

-

-A  {

-	color:#ffffff;

-}

-

-A:Visited  {}

-

-A:Active  {}

-

-A:Hover  {}

-

-SPAN.error

-{

-		color: Red;

-		font-weight: bold;

-	background-color : "#330066"		

-}

-

-BODY  {

-	font-family: "Trebuchet MS", sans-serif;

-	 background-color: #839cd1;

-}

-

-

-TABLE.inspector-data TR.odd TD  {

-	text-align : left;

-	color : Black;

-	background-color : Silver;

-}

-

-

-TABLE.inspector-data TR.even TH

-{

-	text-align : right;

-	font-weight: bold;

-}

-

-TABLE.inspector-data TR.odd TH

-{

-	text-align: right;

-	color : Black;

-	background-color : Silver;

-	font-weight: bold;

-}

-

-TABLE.inspector-data TR.even TD  {

-	text-align : left;

-}

-

-TABLE.inspector-data,

-TABLE.selector

-{

-	font-size: 9pt;

-}

-

-TABLE.selector TD.page-link

-{

-	font-style: italic;

-}

-

-TABLE.selector TD

-{

-	verticle-align: center;

-}

-

-TABLE.inspector-data TR.heading TH,

-TABLE.template TH

-{

-	text-align: center;

-	color : White;

-	background-color : "#330066";

-	font-weight: bold;

-}

-

-TABLE.template TD

-{

-	background-color: Silver;

-	font-size: small;

-}

-

-SPAN.message

-{

-	color : Silver

-	font-size: large;

-}

-

-SPAN.jwc-tag

-{

-	font-weight: bold;

-}

-

-SPAN.jwc-id, SPAN.localized-string

-{

-	font-style: italic;

-}

-

-

-

-TABLE.request-context-border  {

-	border-width : 1;

-	border-color : Black;

-	font-size: 9pt;

-}

-

-SPAN.request-context-object  {

-	font-weight : bold;

-	text-align : left;

-	font-size: 12pt;

-}

-

-TR.request-context-section TH  {

-	text-align : center;

-	color : White;

-	background-color : Blue;

-}

-

-TR.request-context-header TH  {

-	text-align : center;

-	color : White;

-	background-color : Blue;

-}

-

-TABLE.request-context-object TR.odd TD  {

-	text-align : left;

-	color : Black;

-	background-color : Silver;

-}

-

-TABLE.request-context-object TR.odd TH  {

-	color : Black;

-	background-color : Silver;

-	text-align : right;

-}

-

-TABLE.request-context-object TR.even TD  {

-	text-align : left;

-}

-

-TABLE.request-context-object TR.even TH  {

-	text-align : right;

-}

-

-TABLE.request-context-object  {

-	width : 100%;

-	font-size: 9pt;

-}

-

-TABLE.request-context-object TR  {

-	vertical-align : text-top;

-}

-

-TABLE.exception-display TR.even  {

-	top : auto;

-}

-

-TABLE.exception-displaY TD

-{

-	width: 100%;

-}

-

-TABLE.exception-display TR.even TH  {

-	text-align : right;

-	font-weight : bold;

-}

-

-TABLE.exception-display TR.odd TD  {

-	text-align : left;

-	background-color : Silver;

-}

-

-TABLE.exception-display TR.odd TH  {

-	text-align : right;

-	font-weight : bold;

-	background-color : Silver;	

-}

-

-TABLE.exception-display TR.even TD  {

-	text-align : left;

-}

-

-TABLE.exception-display TR.stack-trace  {

-	font-size : small;

-	font-family : sans-serif;

-	text-align : left;

-}

-

-UL 

-{

-	margin-top: 0px;

-	margin-bottom: 0px;

-	margin-left: 20px;

-}
\ No newline at end of file
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/Inspector.html b/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/Inspector.html
deleted file mode 100644
index 42d16d6..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/Inspector.html
+++ /dev/null
@@ -1,31 +0,0 @@
-<!-- $Id$ -->
-<span jwcid="@Shell" title="ognl:inspectorTitle" stylesheet="ognl:assets.stylesheet">
-<body jwcid="@Body">
-
-<span jwcid="@inspector:Selector">
-
-<span jwcid="@inspector:ViewTabs">
-
-<span jwcid="@RenderBlock" block="ognl:blockForView"/>
-
-</span>
-</span>
-
-<span jwcid="specificationBlock@Block">
-<span jwcid="@inspector:ShowSpecification"/>
-</span>
-
-<span jwcid="templateBlock@Block">
-<span jwcid="@inspector:ShowTemplate"/>
-</span>
-
-<span jwcid="propertiesBlock@Block">
-<span jwcid="@inspector:ShowProperties"/>
-</span>
-
-<span jwcid="engineBlock@Block">
-<span jwcid="@inspector:ShowEngine"/>
-</span>
-
-</body>
-</span>
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/Inspector.java b/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/Inspector.java
deleted file mode 100644
index 631e893..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/Inspector.java
+++ /dev/null
@@ -1,145 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.inspector;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.IPage;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.components.Block;
-import org.apache.tapestry.html.BasePage;
-
-/**
- *  The Tapestry Inspector page.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- **/
-
-public abstract class Inspector extends BasePage
-{
-    private Map _blocks = new HashMap();
-
-    protected void finishLoad()
-    {
-        _blocks.put(View.TEMPLATE, getComponent("templateBlock"));
-        _blocks.put(View.SPECIFICATION, getComponent("specificationBlock"));
-        _blocks.put(View.ENGINE, getComponent("engineBlock"));
-        _blocks.put(View.PROPERTIES, getComponent("propertiesBlock"));
-    }
-
-    public abstract View getView();
-
-    public abstract void setView(View value);
-
-    public abstract String getInspectedPageName();
-    
-    public abstract void setInspectedPageName(String value);
-
-    public abstract String getInspectedIdPath();
-
-    public abstract void setInspectedIdPath(String value);
-
-    /** 
-     *  Invoked to change the component being inspected within the current
-     *  page.
-     *
-     *  @since 1.0.6
-     **/
-
-    public void selectComponent(String idPath)
-    {
-        setInspectedIdPath(idPath);
-    }
-
-    /**
-     *  Method invoked by the {@link InspectorButton} component, 
-     *  to begin inspecting a page.
-     *
-     **/
-
-    public void inspect(String pageName, IRequestCycle cycle)
-    {
-        setInspectedPageName(pageName);
-        selectComponent((String) null);
-
-        cycle.activate(this);
-    }
-
-    /**
-     *  Listener for the component selection, which allows a particular component.  
-     *  
-     *  <p>The context is a single string,
-     *  the id path of the component to be selected (or null to inspect
-     *  the page itself).  This invokes
-     *  {@link #selectComponent(String)}.
-     *
-     **/
-
-    public void selectComponent(IRequestCycle cycle)
-    {
-        Object[] parameters = cycle.getServiceParameters();
-
-        String newIdPath;
-
-        // The up button may generate a null context.
-
-        if (parameters == null)
-            newIdPath = null;
-        else
-            newIdPath = (String) parameters[0];
-
-        selectComponent(newIdPath);
-    }
-
-    /**
-     *  Returns the {@link IPage} currently inspected by the Inspector, as determined
-     *  from the inspectedPageName property.
-     *
-     **/
-
-    public IPage getInspectedPage()
-    {
-        return getRequestCycle().getPage(getInspectedPageName());
-    }
-
-    /**
-     *  Returns the {@link IComponent} current inspected; this is determined
-     *  from the inspectedPageName and inspectedIdPath properties.
-     *
-     **/
-
-    public IComponent getInspectedComponent()
-    {
-        return getInspectedPage().getNestedComponent(getInspectedIdPath());
-    }
-
-    public String getInspectorTitle()
-    {
-        return "Tapestry Inspector: " + getEngine().getSpecification().getName();
-    }
-
-    /**
-     *  Returns the {@link Block} for the currently selected view.
-     *
-     **/
-
-    public Block getBlockForView()
-    {
-        return (Block) _blocks.get(getView());
-    }
-}
\ No newline at end of file
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/Inspector.library b/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/Inspector.library
deleted file mode 100644
index 17e172a..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/Inspector.library
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-    Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- Inspector.library,v 1.1 2002/08/24 16:07:50 hship Exp -->
-<!DOCTYPE library-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<library-specification/>
\ No newline at end of file
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/Inspector.page b/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/Inspector.page
deleted file mode 100644
index 03b88a4..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/Inspector.page
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<page-specification class="org.apache.tapestry.contrib.inspector.Inspector">
-
-  <property-specification name="view" type="org.apache.tapestry.contrib.inspector.View"
-  		persistent="yes"
-  		initial-value="@org.apache.tapestry.contrib.inspector.View@SPECIFICATION"/>
-  <property-specification name="inspectedPageName" type="java.lang.String" persistent="yes"/>
-  <property-specification name="inspectedIdPath" type="java.lang.String" persistent="yes"/>
-  
-  <private-asset name="stylesheet" resource-path="Inspector.css"/>
-
-</page-specification>
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/InspectorButton.html b/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/InspectorButton.html
deleted file mode 100644
index aa38e55..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/InspectorButton.html
+++ /dev/null
@@ -1,10 +0,0 @@
-<!-- $Id$ -->
-
-<span jwcid="$content$">
-
-<div id="tapestryInspector" style="position:absolute; border-color:black; border-width:2px; border-style:solid; padding:3px; background-color:#839cd1;">
-<a jwcid="link"><img jwcid="rollover"/></a>
-</div>
-
-</span>
-
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/InspectorButton.java b/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/InspectorButton.java
deleted file mode 100644
index 9fd512d..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/InspectorButton.java
+++ /dev/null
@@ -1,133 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.inspector;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import org.apache.tapestry.ApplicationRuntimeException;
-import org.apache.tapestry.BaseComponent;
-import org.apache.tapestry.IDirect;
-import org.apache.tapestry.IEngine;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.IResourceLocation;
-import org.apache.tapestry.IScript;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.engine.IEngineService;
-import org.apache.tapestry.engine.ILink;
-import org.apache.tapestry.engine.IScriptSource;
-import org.apache.tapestry.html.Body;
-
-/**
- *  Component that can be placed into application pages that will launch
- *  the inspector in a new window.
- * 
- *  [<a href="../../../../../../ComponentReference/InspectorButton.html">Component Reference</a>]
- *
- *  <p>Because the InspectorButton component is implemented using a {@link org.apache.tapestry.html.Rollover},
- *  the containing page must use a {@link Body} component instead of
- *  a &lt;body&gt; tag.
- *
- *  @version $Id$
- *  @author Howard Lewis Ship
- *
- **/
-
-public class InspectorButton extends BaseComponent implements IDirect
-{
-    private boolean _disabled = false;
-
-    /**
-     *  Gets the listener for the link component.
-     *
-     *  @since 1.0.5
-     **/
-
-    public void trigger(IRequestCycle cycle)
-    {
-        String name = getNamespace().constructQualifiedName("Inspector");
-
-        Inspector inspector = (Inspector) cycle.getPage(name);
-
-        inspector.inspect(getPage().getPageName(), cycle);
-    }
-
-    /**
-     *  Renders the script, then invokes the normal implementation.
-     *
-     *  @since 1.0.5
-     **/
-
-    protected void renderComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        if (_disabled || cycle.isRewinding())
-            return;
-
-        IEngine engine = getPage().getEngine();
-        IScriptSource source = engine.getScriptSource();
-
-        IResourceLocation scriptLocation =
-            getSpecification().getSpecificationLocation().getRelativeLocation(
-                "InspectorButton.script");
-
-        IScript script = source.getScript(scriptLocation);
-
-        Map symbols = new HashMap();
-
-        IEngineService service = engine.getService(Tapestry.DIRECT_SERVICE);
-        ILink link = service.getLink(cycle, this, null);
-
-        symbols.put("URL", link.getURL());
-
-        Body body = Body.get(cycle);
-
-        if (body == null)
-            throw new ApplicationRuntimeException(
-                Tapestry.getMessage("InspectorButton.must-be-contained-by-body"),
-                this,
-                null,
-                null);
-
-        script.execute(cycle, body, symbols);
-
-        // Now, go render the rest from the template.
-
-        super.renderComponent(writer, cycle);
-    }
-
-    public boolean isDisabled()
-    {
-        return _disabled;
-    }
-
-    public void setDisabled(boolean disabled)
-    {
-        _disabled = disabled;
-    }
-
-    /**
-     *  Always returns false.
-     * 
-     *  @since 2.3
-     * 
-     **/
-
-    public boolean isStateful()
-    {
-        return false;
-    }
-
-}
\ No newline at end of file
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/InspectorButton.jwc b/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/InspectorButton.jwc
deleted file mode 100644
index cccf00d..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/InspectorButton.jwc
+++ /dev/null
@@ -1,47 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE component-specification PUBLIC
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<component-specification class="org.apache.tapestry.contrib.inspector.InspectorButton" 
-	allow-body="no" 
-	allow-informal-parameters="no">
-
-    <description>
-<![CDATA[
-Includes the Inspector button on the page (which dynamically positions itself in the
-lower right corner).  Clicking the button raises the Tapestry Inspector in a pop-up
-window.
-]]>
-    </description>
-
-  <parameter name="disabled" type="boolean" direction="in"/>
-
-    <component id="link" type="GenericLink">
-        <static-binding name="href">javascript:ti_raiseInspector();</static-binding>
-    </component>
-
-    <component id="rollover" type="Rollover">
-    	<binding name="image" expression="assets.logo"/>
-    	<binding name="focus" expression="assets.inspector"/>
-    </component>
-
-    <private-asset name="logo" resource-path="tapestry-logo.gif"/>
-    <private-asset name="inspector" resource-path="inspector-rollover.gif"/>
-</component-specification>
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/InspectorButton.script b/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/InspectorButton.script
deleted file mode 100644
index a0e1f31..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/InspectorButton.script
+++ /dev/null
@@ -1,118 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- $Id$ -->
-<!DOCTYPE script PUBLIC 
-	"-//Howard Lewis Ship//Tapestry Script 1.2//EN"
-	"http://tapestry.sf.net/dtd/Script_1_2.dtd">
-<!--
-
-Adds scripting support for the ShowInspector component.
-
-Prefixes all variables and functions with "ti_" (for Tapestry Inspector).
-
-Expects that the Inspector is inside a <div> named "tapestryInspector".
-
-Input symbols:
- URL - The complete URL needed for to raise the Inspector
- 
--->
-<script>
-
-<include-script resource-path="/org/apache/tapestry/html/PracticalBrowserSniffer.js"/>
-
-<input-symbol key="URL" class="java.lang.String" required="yes"/>
-
-<body>
-var ti = new Object();
-
-ti.oldX = 0;
-ti.oldY = 0;
-
-function ti_positionInspector()
-{
-  var object;
-  var width;
-  var height;
-
-  if (navigator.family == "nn4")
-  {
-    object = document.tapestryInspector;
-    width = innerWidth + pageXOffset;  <!-- Doesn't properly account for scrollbars! -->
-    height = innerHeight + pageYOffset;
-  }
-  else
-  {
-    object = document.getElementById("tapestryInspector");
-    
-	if (navigator.OS == "mac")
-	{
-	  width = document.body.offsetWidth;
-	  height = document.body.offsetWidth;
-	}
-	else if (navigator.family == "gecko")
-	{
-      width = innerWidth + pageXOffset; 
-      height = innerHeight + pageYOffset;
-	}
-	else
-	{
-	  // IE 5, 6? on PC
-	  width = document.body.clientWidth  + document.body.scrollLeft;
-	  height = document.body.clientHeight + document.body.scrollTop;
-	}
-  }
-   	
-  // The width/height of the animation, plus
-  // a couple of pixels of border.
-  
-  var indent = 65;
-  
-  var x = width - indent;
-  var y = height - indent;
-
-  if (navigator.family == "nn4")
-  {
-    if (x != ti.oldX || y != ti.oldY)
-    {
-      object.moveTo(x, y);
-      object.visibility = "visible";
-    }
-  }
-  else
-  {
-    if (x != ti.oldX)
-    {
-       object.style.left = x + "px";
-       ti.oldX = x;
-    }
-    if (y != ti.oldY)
-    {
-    	object.style.top = y + "px";
-    	ti.oldY = y;
-    }
-
- 	object.style.visibility = "visible";  
-  }
-
-
-    
-  // Reposition it every quarter second.
-  
-  window.setTimeout("ti_positionInspector()", 250);
-}
-
-function ti_raiseInspector()
-{
-  var newWindow = window.open(
-  	"${URL}",
-  	"TapestryInspector",
-  	"titlebar,resizable,scrollbars,width=700,height=600");
-  	
-  newWindow.focus();
-}
-</body>
-
-<initialization>
-ti_positionInspector();
-</initialization>
-
-</script>
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/Properties_HRp4.gif b/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/Properties_HRp4.gif
deleted file mode 100644
index e2fe821..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/Properties_HRp4.gif
+++ /dev/null
Binary files differ
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/Properties_Hp3.gif b/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/Properties_Hp3.gif
deleted file mode 100644
index 8aa25cb..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/Properties_Hp3.gif
+++ /dev/null
Binary files differ
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/Properties_NBanner.gif b/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/Properties_NBanner.gif
deleted file mode 100644
index 5fa7f5b..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/Properties_NBanner.gif
+++ /dev/null
Binary files differ
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/Properties_NRp2.gif b/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/Properties_NRp2.gif
deleted file mode 100644
index 12b13a1..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/Properties_NRp2.gif
+++ /dev/null
Binary files differ
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/Properties_Np1.gif b/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/Properties_Np1.gif
deleted file mode 100644
index 917436a..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/Properties_Np1.gif
+++ /dev/null
Binary files differ
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/Reset_NRp2.gif b/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/Reset_NRp2.gif
deleted file mode 100644
index 371cba0..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/Reset_NRp2.gif
+++ /dev/null
Binary files differ
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/Reset_Np1.gif b/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/Reset_Np1.gif
deleted file mode 100644
index eb87bf4..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/Reset_Np1.gif
+++ /dev/null
Binary files differ
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/Reset_Np1_disabled.gif b/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/Reset_Np1_disabled.gif
deleted file mode 100644
index 0cfdd51..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/Reset_Np1_disabled.gif
+++ /dev/null
Binary files differ
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/Restart_NRp2.gif b/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/Restart_NRp2.gif
deleted file mode 100644
index 8fed715..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/Restart_NRp2.gif
+++ /dev/null
Binary files differ
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/Restart_Np1.gif b/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/Restart_Np1.gif
deleted file mode 100644
index dda92b0..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/Restart_Np1.gif
+++ /dev/null
Binary files differ
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/Selector.html b/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/Selector.html
deleted file mode 100644
index 15ecbf7..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/Selector.html
+++ /dev/null
@@ -1,23 +0,0 @@
-<!-- $Id$ -->
-
-<table class="selector">
-	<tr valign=center>
-		<td>
-			<form jwcid="form">
-				<select jwcid="selectPage"/>
-			</form>
-		</td>
-		<td class="page-link">
-			<a jwcid="page">page</a>
-		</td>
-<span jwcid="e">
-		<td>&gt;&gt;</td>
-		<td>
-		<a jwcid="component"><span jwcid="insertId"/></a>
-		</td>
-</span>
-	</tr>
-</table>
-
-<span jwcid="renderBody"/>
-
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/Selector.java b/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/Selector.java
deleted file mode 100644
index 158025d..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/Selector.java
+++ /dev/null
@@ -1,150 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.inspector;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
-import org.apache.tapestry.BaseComponent;
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.INamespace;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.engine.ISpecificationSource;
-import org.apache.tapestry.form.IPropertySelectionModel;
-import org.apache.tapestry.form.StringPropertySelectionModel;
-
-/**
- *  Component of the {@link Inspector} page used to select the page and "crumb trail"
- *  of the inspected component.
- *
- *
- *  @version $Id$
- *  @author Howard Lewis Ship
- *
- **/
-
-public class Selector extends BaseComponent
-{
-    /**
-     *  When the form is submitted,
-     *  the inspectedPageName of the {@link Inspector} page will be updated,
-     *  but we need to reset the inspectedIdPath as well.
-     *
-     **/
-
-    public void formSubmit(IRequestCycle cycle)
-    {
-        Inspector inspector = (Inspector) getPage();
-
-        inspector.selectComponent((String) null);
-    }
-
-    /**
-     *  Returns an {IPropertySelectionModel} used to select the name of the page
-     *  to inspect.  The page names are sorted.
-     *
-     **/
-
-    public IPropertySelectionModel getPageModel()
-    {
-        return new StringPropertySelectionModel(getPageNames());
-    }
-
-    /**
-     *  The crumb trail is all the components from the inspected component up to
-     *  (but not including) the page.
-     *
-     **/
-
-    public List getCrumbTrail()
-    {
-        List result = null;
-
-        Inspector inspector = (Inspector) getPage();
-        IComponent component = inspector.getInspectedComponent();
-        IComponent container = null;
-
-        while (true)
-        {
-            container = component.getContainer();
-            if (container == null)
-                break;
-
-            if (result == null)
-                result = new ArrayList();
-
-            result.add(component);
-
-            component = container;
-        }
-
-        if (result == null)
-            return null;
-
-        // Reverse the list, such that the inspected component is last, and the
-        // top-most container is first.
-
-        Collections.reverse(result);
-
-        return result;
-    }
-
-    private String[] getPageNames()
-    {
-        Set names = new HashSet();
-
-        ISpecificationSource source = getPage().getEngine().getSpecificationSource();
-
-        addPageNames(names, source.getFrameworkNamespace());
-        addPageNames(names, source.getApplicationNamespace());
-
-        List l = new ArrayList(names);
-        Collections.sort(l);
-
-        return (String[]) l.toArray(new String[l.size()]);
-    }
-
-    private void addPageNames(Set names, INamespace namespace)
-    {
-        String idPrefix = namespace.getExtendedId();
-
-        List pageNames = namespace.getPageNames();
-        int count = pageNames.size();
-
-        for (int i = 0; i < count; i++)
-        {
-            String name = (String) pageNames.get(i);
-
-            if (idPrefix == null)
-                names.add(name);
-            else
-                names.add(idPrefix + ":" + name);
-        }
-
-        List ids = namespace.getChildIds();
-        count = ids.size();
-
-        for (int i = 0; i < count; i++)
-        {
-            String id = (String) ids.get(i);
-
-            addPageNames(names, namespace.getChildNamespace(id));
-        }
-    }
-
-}
\ No newline at end of file
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/Selector.jwc b/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/Selector.jwc
deleted file mode 100644
index dee4b40..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/Selector.jwc
+++ /dev/null
@@ -1,53 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<component-specification class="org.apache.tapestry.contrib.inspector.Selector">
-
-  <component id="form" type="Form">
-    <binding name="listener" expression="listeners.formSubmit"/>
-  </component>
-
-  <component id="selectPage" type="PropertySelection">
-    <binding name="value" expression="page.inspectedPageName"/>
-    <binding name="model" expression="pageModel"/>
-    <binding name="submitOnChange" expression="true"/>
-  </component>
-
-  <component id="page" type="DirectLink">
-    <binding name="listener" expression="page.listeners.selectComponent"/>
-  </component>
-
-  <component id="e" type="Foreach">
-    <binding name="source" expression="crumbTrail"/>
-  </component>
-
-  <component id="component" type="DirectLink">
-    <binding name="parameters" expression="components.e.value.idPath"/>
-    <binding name="listener" expression="page.listeners.selectComponent"/>
-  </component>
-
-  <component id="insertId" type="Insert">
-    <binding name="value" expression="components.e.value.id"/>
-  </component>
-
-  <component id="renderBody" type="RenderBody"/>
-
-</component-specification>
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/ShowDescription.html b/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/ShowDescription.html
deleted file mode 100644
index 917e59c..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/ShowDescription.html
+++ /dev/null
@@ -1,5 +0,0 @@
-<!-- $Id$ -->
-
-<span jwcid="$content$">
-<span jwcid="ifDescription"><img jwcid="descriptionImage"/></span>
-</span>
\ No newline at end of file
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/ShowDescription.jwc b/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/ShowDescription.jwc
deleted file mode 100644
index 28466ca..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/ShowDescription.jwc
+++ /dev/null
@@ -1,40 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<component-specification class="org.apache.tapestry.BaseComponent" 
-	allow-body="no" 
-	allow-informal-parameters="no">
-	
-	<parameter name="description" required="yes"/>
-	
-	<component id="ifDescription" type="Conditional">
-	  <inherited-binding name="condition" parameter-name="description"/>
-	</component>
-	
-	<component id="descriptionImage" type="Image">
-	  <binding name="image" expression="assets.info"/>
-	  <inherited-binding name="alt" parameter-name="description"/>
-	</component>
-	
-	<private-asset name="info" resource-path="info.gif"/>
-	
-</component-specification>
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/ShowEngine.html b/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/ShowEngine.html
deleted file mode 100644
index 797c8ff..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/ShowEngine.html
+++ /dev/null
@@ -1,90 +0,0 @@
-<!-- $Id$ -->
-
-<table class="inspector-data">
-
-	<tr class="heading">
-		<th colspan=2>Engine/Application Properties</th>
-	</tr>
-	
-	<tr class="heading">
-		<th>Name</th> <th>Property</th>
-	</tr>
-	
-	<tr class="even">
-		<th>Tapestry Framework Version</th>
-		<td><span jwcid="insertFrameworkVersion"/></td>
-	</tr>
-	
-	<tr class="odd">
-		<th>Application Name</th>
-		<td><span jwcid="insertApplicationName"/></td>
-	</tr>
-
-	<tr class="even">
-		<th>Context Path</th>
-		<td><span jwcid="insertContextPath"/></td>
-	</tr>
-
-	<tr class="odd">
-		<th>Servlet Path</th>
-		<td><span jwcid="insertServletPath"/></td>
-	</tr>
-
-	<tr class="even">
-		<th>Engine Class</th>
-		<td><span jwcid="insertEngineClass"/></td>
-	</tr>
-	
-	<tr class="odd">
-		<th>Locale</th>
-		<td><span jwcid="insertLocale"/></td>
-	</tr>
-
-	<tr class="even">
-		<th>Visit</th>
-		<td>
-<span jwcid="ifNoVisit">
-<em>none</em>
-</span>
-
-<span jwcid="ifVisit">
-<span jwcid="insertVisit"/>
-</span>
-		</td>
-	</tr>
-
-</table>
-
-<h1>Operations</h1>
-
-<table class="inspector-data">
-
-	<tr class="even">
-		<td><a jwcid="restart" target="_new"><img jwcid="restartButton"/></a>
-		</td>
-		<td>Restart the application (in a new window).
-		</td>
-	</tr>
-
-	<tr class="even">
-		<td><a jwcid="reset"><img jwcid="resetButton"/></a>
-		</td>
-		<td>
-		Reset the application, discarding all cached specifications, assets
-		and templates.
-		</td>
-	</tr>
-</table>
-
-<h1>Serialized Engine</h1>
-
-<p>The serialized state of the application engine (the size of this is relevant
-for application servers which support clustering).
-
-<p><span jwcid="insertByteCount"/> bytes:
-<pre><span jwcid="insertSerializedEngine"/></pre>
-
-<h1>Request Context</h1>
-
-<span jwcid="insertRequest"/>
-
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/ShowEngine.java b/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/ShowEngine.java
deleted file mode 100644
index 0b9dc71..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/ShowEngine.java
+++ /dev/null
@@ -1,186 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.inspector;
-
-import java.io.ByteArrayOutputStream;
-import java.io.CharArrayWriter;
-import java.io.IOException;
-import java.io.ObjectOutputStream;
-import java.io.OutputStream;
-
-import org.apache.tapestry.ApplicationRuntimeException;
-import org.apache.tapestry.BaseComponent;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRender;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.event.PageDetachListener;
-import org.apache.tapestry.event.PageEvent;
-import org.apache.tapestry.util.io.BinaryDumpOutputStream;
-
-/**
- *  Component of the {@link Inspector} page used to display
- *  the properties of the {@link org.apache.tapestry.IEngine} as well as a serialized view of it.
- *  Also, the {@link org.apache.tapestry.request.RequestContext} is dumped out.
- *
- *
- *  @version $Id$
- *  @author Howard Lewis Ship
- *
- **/
-
-public class ShowEngine extends BaseComponent implements PageDetachListener
-{
-    private byte[] serializedEngine;
-
-    public void pageDetached(PageEvent event)
-    {
-        serializedEngine = null;
-    }
-
-    /**
-     *  Workaround for OGNL limitation --- OGNL can't dereference
-     *  past class instances.
-     * 
-     *  @since 2.2
-     * 
-     **/
-
-    public String getEngineClassName()
-    {
-        return getPage().getEngine().getClass().getName();
-    }
-
-    private byte[] getSerializedEngine()
-    {
-        if (serializedEngine == null)
-            buildSerializedEngine();
-
-        return serializedEngine;
-    }
-
-    private void buildSerializedEngine()
-    {
-        ByteArrayOutputStream bos = null;
-        ObjectOutputStream oos = null;
-
-        try
-        {
-            bos = new ByteArrayOutputStream();
-            oos = new ObjectOutputStream(bos);
-
-            // Write the application object to the stream.
-
-            oos.writeObject(getPage().getEngine());
-
-            // Extract the application as an array of bytes.
-
-            serializedEngine = bos.toByteArray();
-        }
-        catch (IOException ex)
-        {
-            throw new ApplicationRuntimeException(
-                Tapestry.getMessage("ShowEngine.could-not-serialize"),
-                ex);
-        }
-        finally
-        {
-            close(oos);
-            close(bos);
-        }
-
-        // It would be nice to deserialize the application object now, but in
-        // practice, that fails due to class loader problems.
-    }
-
-    private void close(OutputStream stream)
-    {
-        if (stream == null)
-            return;
-
-        try
-        {
-            stream.close();
-        }
-        catch (IOException ex)
-        {
-            // Ignore.
-        }
-    }
-
-    public int getEngineByteCount()
-    {
-        return getSerializedEngine().length;
-    }
-
-    public IRender getEngineDumpDelegate()
-    {
-        return new IRender()
-        {
-            public void render(IMarkupWriter writer, IRequestCycle cycle)
-            {
-                dumpSerializedEngine(writer);
-            }
-        };
-    }
-
-    private void dumpSerializedEngine(IMarkupWriter responseWriter)
-    {
-        CharArrayWriter writer = null;
-        BinaryDumpOutputStream bos = null;
-
-        try
-        {
-            // Because IReponseWriter doesn't implement the
-            // java.io.Writer interface, we have to buffer this
-            // stuff then pack it in all at once.  Kind of a waste!
-
-            writer = new CharArrayWriter();
-
-            bos = new BinaryDumpOutputStream(writer);
-            bos.setBytesPerLine(32);
-
-            bos.write(getSerializedEngine());
-            bos.close();
-
-            responseWriter.print(writer.toString());
-        }
-        catch (IOException ex)
-        {
-            // Ignore.
-        }
-        finally
-        {
-            if (bos != null)
-            {
-                try
-                {
-                    bos.close();
-                }
-                catch (IOException ex)
-                {
-                    // Ignore.
-                }
-            }
-
-            if (writer != null)
-            {
-                writer.reset();
-                writer.close();
-            }
-        }
-    }
-
-}
\ No newline at end of file
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/ShowEngine.jwc b/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/ShowEngine.jwc
deleted file mode 100644
index b181816..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/ShowEngine.jwc
+++ /dev/null
@@ -1,97 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<component-specification class="org.apache.tapestry.contrib.inspector.ShowEngine" allow-body="no" allow-informal-parameters="no">
-
-  <component id="insertFrameworkVersion" type="Insert">
-  	<binding name="value" expression="@org.apache.tapestry.Tapestry@VERSION"/>
-  </component>
-  
-  <component id="insertApplicationName" type="Insert">
-    <binding name="value" expression="page.engine.specification.name"/>
-  </component>
-  
-  <component id="insertContextPath" type="Insert">
-    <binding name="value" expression="page.engine.contextPath"/>
-  </component>
-  
-  <component id="insertServletPath" type="Insert">
-    <binding name="value" expression="page.engine.servletPath"/>
-  </component>
-  
-  <component id="insertEngineClass" type="Insert">
-    <binding name="value" expression="engineClassName"/>
-  </component>
-  
-  <component id="insertLocale" type="Insert">
-    <binding name="value" expression="page.engine.locale.displayName"/>
-  </component>
-  
-  <component id="ifNoVisit" type="Conditional">
-    <binding name="condition" expression="! page.engine.hasVisit"/>
-  </component>
-  
-  <component id="insertVisit" type="Insert">
-    <binding name="value" expression="page.engine.visit"/>
-  </component>
-  
-  <component id="ifVisit" type="Conditional">
-    <binding name="condition" expression="page.engine.hasVisit"/>
-  </component>
-  
-  <component id="restart" type="ServiceLink">
-    <binding name="service" expression="@org.apache.tapestry.Tapestry@RESTART_SERVICE"/>
-  </component>
-  
-  <component id="restartButton" type="Rollover">
-    <binding name="image" expression="assets.restart"/>
-    <binding name="focus" expression="assets.restartFocus"/>
-  </component>
-  
-  <component id="reset" type="ServiceLink">
-    <binding name="service" expression="@org.apache.tapestry.Tapestry@RESET_SERVICE"/>
-    <binding name="disabled" expression="! page.engine.resetServiceEnabled"/>
-  </component>
-  
-  <component id="resetButton" type="Rollover">
-    <binding name="image" expression="assets.reset"/>
-    <binding name="focus" expression="assets.resetFocus"/>
-    <binding name="disabled" expression="assets.resetDisabled"/>
-  </component>
-  
-  <component id="insertByteCount" type="Insert">
-    <binding name="value" expression="engineByteCount"/>
-  </component>
-  
-  <component id="insertSerializedEngine" type="Delegator">
-    <binding name="delegate" expression="engineDumpDelegate"/>
-  </component>
-  
-  <component id="insertRequest" type="Delegator">
-    <binding name="delegate" expression="page.requestCycle.requestContext"/>
-  </component>
-  
-  <private-asset name="reset" resource-path="Reset_Np1.gif"/>
-  <private-asset name="resetFocus" resource-path="Reset_NRp2.gif"/>
-  <private-asset name="resetDisabled" resource-path="Reset_Np1_disabled.gif"/>
-  <private-asset name="restart" resource-path="Restart_Np1.gif"/>
-  <private-asset name="restartFocus" resource-path="Restart_NRp2.gif"/>
-</component-specification>
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/ShowProperties.html b/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/ShowProperties.html
deleted file mode 100644
index 1aa67d8..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/ShowProperties.html
+++ /dev/null
@@ -1,35 +0,0 @@
-<!-- $Id$ -->
-
-<span jwcid="ifNoProperties">
-<span class="message">Page contains no persistent properties.</span>
-</span>
-
-<span jwcid="ifHasProperties">
-<table class="inspector-data">
-	<tr class="heading">
-		<th>Component</th> <th>Property Name</th> <th>Value Class</th> <th>Value</th>
-	</tr>
-
-	<tr jwcid="e">
-		<td>
-			<a jwcid="selectComponent"><span jwcid="insertPath"/></a>
-		</td>
-		<td>
-			<span jwcid="insertPersistPropertyName"/>
-		</td>
-		<td>
-			<span jwcid="insertPersistValueClass"/>
-		</td>
-		<td>
-			<span jwcid="insertPersistValue"/>
-		</td>
-	</tr>
-
-</table>
-
-
-</span>
-
-
-
-	
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/ShowProperties.java b/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/ShowProperties.java
deleted file mode 100644
index 6b96c2c..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/ShowProperties.java
+++ /dev/null
@@ -1,142 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.inspector;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-
-import org.apache.tapestry.BaseComponent;
-import org.apache.tapestry.IEngine;
-import org.apache.tapestry.IPage;
-import org.apache.tapestry.engine.IPageRecorder;
-import org.apache.tapestry.event.PageEvent;
-import org.apache.tapestry.event.PageRenderListener;
-import org.apache.tapestry.record.IPageChange;
-
-/**
- *  Component of the {@link Inspector} page used to display
- *  the persisent properties of the page.
- *
- *  @version $Id$
- *  @author Howard Lewis Ship
- *
- **/
-
-public class ShowProperties extends BaseComponent implements PageRenderListener
-{
-    private List _properties;
-    private IPageChange _change;
-    private IPage _inspectedPage;
-
-    /**
-     *  Does nothing.
-     *
-     *  @since 1.0.5
-     *
-     **/
-
-    public void pageBeginRender(PageEvent event)
-    {
-    }
-
-    /**
-     *  @since 1.0.5
-     *
-     **/
-
-    public void pageEndRender(PageEvent event)
-    {
-        _properties = null;
-        _change = null;
-        _inspectedPage = null;
-    }
-
-    private void buildProperties()
-    {
-        Inspector inspector = (Inspector) getPage();
-
-        _inspectedPage = inspector.getInspectedPage();
-
-        IEngine engine = getPage().getEngine();
-        IPageRecorder recorder =
-            engine.getPageRecorder(_inspectedPage.getPageName(), inspector.getRequestCycle());
-
-        // No page recorder?  No properties.
-
-        if (recorder == null)
-        {
-            _properties = Collections.EMPTY_LIST;
-            return;
-        }
-
-        if (recorder.getHasChanges())
-            _properties = new ArrayList(recorder.getChanges());
-    }
-
-    /**
-     *  Returns a {@link List} of {@link IPageChange} objects.
-     *
-     *  <p>Sort order is not defined.
-     *
-     **/
-
-    public List getProperties()
-    {
-        if (_properties == null)
-            buildProperties();
-
-        return _properties;
-    }
-
-    public void setChange(IPageChange value)
-    {
-        _change = value;
-    }
-
-    public IPageChange getChange()
-    {
-        return _change;
-    }
-
-    /**
-     *  Returns the name of the value's class, if the value is non-null.
-     *
-     **/
-
-    public String getValueClassName()
-    {
-        Object value;
-
-        value = _change.getNewValue();
-
-        if (value == null)
-            return "<null>";
-
-        return convertClassToName(value.getClass());
-    }
-
-    private String convertClassToName(Class cl)
-    {
-        // TODO: This only handles one-dimensional arrays
-        // property.
-
-        if (cl.isArray())
-            return "array of " + cl.getComponentType().getName();
-
-        return cl.getName();
-    }
-
-}
\ No newline at end of file
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/ShowProperties.jwc b/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/ShowProperties.jwc
deleted file mode 100644
index 4bde6af..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/ShowProperties.jwc
+++ /dev/null
@@ -1,64 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<component-specification class="org.apache.tapestry.contrib.inspector.ShowProperties">
-
-  <bean name="persistPropertyClass" class="org.apache.tapestry.bean.EvenOdd"/>
-  <bean name="propertyClass" class="org.apache.tapestry.bean.EvenOdd"/>
-  
-  <component id="ifNoProperties" type="Conditional">
-    <binding name="condition" expression="!properties"/>
-  </component>
-  
-  <component id="ifHasProperties" type="Conditional">
-    <binding name="condition" expression="properties"/>
-  </component>
-  
-  <component id="e" type="Foreach">
-    <binding name="source" expression="properties"/>
-    <binding name="value" expression="change"/>
-    <static-binding name="element">tr</static-binding>
-    <binding name="class" expression="beans.persistPropertyClass.next"/>
-  </component>
-  
-  <component id="selectComponent" type="DirectLink">
-    <binding name="listener" expression="page.listeners.selectComponent"/>
-    <binding name="parameters" expression="change.componentPath"/>
-    <binding name="disabled" expression="change.componentPath == null"/>
-  </component>
-  
-  <component id="insertPath" type="Insert">
-    <binding name="value" expression="change.componentPath"/>
-  </component>
-  
-  <component id="insertPersistPropertyName" type="Insert">
-    <binding name="value" expression="change.propertyName"/>
-  </component>
-  
-  <component id="insertPersistValueClass" type="Insert">
-    <binding name="value" expression="valueClassName"/>
-  </component>
-  
-  <component id="insertPersistValue" type="Insert">
-    <binding name="value" expression="change.newValue"/>
-  </component>
-  
-</component-specification>
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/ShowSpecification.html b/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/ShowSpecification.html
deleted file mode 100644
index 74bdccf..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/ShowSpecification.html
+++ /dev/null
@@ -1,161 +0,0 @@
-<!-- $Id$ -->
-
-<table>
-<tr valign=top>
-<td>
-
-<table class="inspector-data" width="100%">
-	<tr class="even">
-		<th>Specification Resource Location</th>
-		<td><span jwcid="@Insert" value="ognl:inspectedSpecification.specificationLocation"/>
-		<span jwcid="@ShowDescription" description="ognl:inspectedSpecification.description"/>
-		</td>
-	</tr>
-	
-	<tr class="odd">
-		<th>Java class</th>
-		<td><span jwcid="@Insert" value="ognl:inspectedComponent.getClass().getName()"/></td>
-	</tr>
-
-<span jwcid="@Conditional" condition="ognl:! inspectedSpecification.pageSpecification">
-
-	<tr class="even">
-		<th>Allow informal parameters</th>
-		<td><span jwcid="@Insert" value="ognl:inspectedSpecification.allowInformalParameters"/></td>
-	</tr>
-
-	<tr class="odd">
-		<th>Allow body</th>
-		<td><span jwcid="@Insert" value="ognl:inspectedSpecification.allowBody"/></td>
-	</tr>
-	
-</span>
-	
-</table>
-
-<span jwcid="@Conditional" condition="ognl:formalParameterNames">
-
-<table class="inspector-data" width="100%">
-	<tr class="heading">
-		<th colspan=4>Formal Parameters</th>
-	</tr>
-	<tr class="heading">
-		<th>Name</th> <th>Required</th> <th>Java type</th> <th>Binding</th>
-	</tr>
-
-	<tr jwcid="e_formal">
-		<td><span jwcid="@Insert" value="ognl:parameterName"/>
-		<span jwcid="@ShowDescription" description="ognl:parameterSpecification.description"/>
-		</td>
-		<td><span jwcid="@Insert" value="ognl:parameterSpecification.required"/></td>
-		<td><span jwcid="@Insert" value="ognl:parameterSpecification.type"/></td>
-		<td><span jwcid="@Insert" value="ognl:binding"/></td>
-	</tr>
-
-</table>
-</span>
-
-<span jwcid="@Conditional" condition="ognl:informalParameterNames">
-
-<table class="inspector-data" width="100%">
-	<tr class="heading">
-		<th colspan=2>Informal Parameters</th>
-	</tr>
-	<tr class="heading">
-		<th>Name</th> <th>Binding</th>
-	</tr>
-
-	<tr jwcid="e_informal">
-		<td><span jwcid="@Insert" value="ognl:parameterName"/></td>
-		<td><span jwcid="@Insert" value="ognl:binding"/></td>
-	</tr>
-
-</table>
-</span>
-
-<span jwcid="@Conditional" condition="ognl:assetNames">
-
-<table class="inspector-data"  width="100%">
-	<tr class="heading">
-		<th colspan=2>Assets</th>
-	</tr>
-	<tr class="heading">
-		<th>Name</th> <th>Asset</th>
-	</tr>
-
-	<tr jwcid="e_asset">
-		<td><span jwcid="@Insert" value="ognl:assetName"/></td>
-		<td><span jwcid="@Insert" value="ognl:asset"/></td>
-	</tr>
-
-
-</table>
-</span>
-
-<span jwcid="@Conditional" condition="ognl:sortedPropertyNames">
-
-<table class="inspector-data" width="100%">
-	<tr class="heading">
-		<th colspan=2>Properties</th>
-	</tr>
-	<tr class="heading">
-		<th>Name</th> <th>Property</th>
-	</tr>
-
-	<tr jwcid="e_property">
-		<th><span jwcid="@Insert" value="ognl:propertyName"/></th>
-		<td><span jwcid="@Insert" value="ognl:propertyValue"/></td>
-	</tr>
-
-</table>
-</span>
-
-<span jwcid="@Conditional" condition="ognl:beanNames">
-
-<table class="inspector-data" width="100%">
-	<tr class="heading">
-		<th colspan=3>Helper Beans</th>
-	</tr>
-	
-	<tr class="heading">
-		<th>Name</th> <th>Class</th> <th>Lifecycle</th>
-	</tr>
-	
-	<tr jwcid="e_bean">
-		<td><span jwcid="@Insert" value="ognl:beanName"/></td>
-		<td><span jwcid="@Insert" value="ognl:beanSpecification.className"/></td>
-		<td><span jwcid="@Insert" value="ognl:beanSpecification.lifecycle.name"/></td>
-	</tr>
-	
-</table>
-</span>
-
-</td>
-
-<td>
-<span jwcid="@Conditional" condition="ognl:sortedComponents">
-
-<table border="0" class="inspector-data">
-
-	<tr class="heading">
-		<th colspan=2>Embedded Components</th>
-	</tr>
-	<tr class="heading">
-		<th>Id</th> <th>Type</th>
-	</tr>
-
-	<tr jwcid="e_components">
-		<td>
-			<a jwcid="selectComponent"><span jwcid="@Insert" value="ognl:component.id"/></a>
-		</td>
-		<td>
-			<span jwcid="@Insert" value="ognl:componentType"/>
-		</td>
-	</tr>
-
-</table>
-</span>
-
-</td>
-</tr>
-</table>
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/ShowSpecification.java b/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/ShowSpecification.java
deleted file mode 100644
index 098a6fa..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/ShowSpecification.java
+++ /dev/null
@@ -1,366 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.inspector;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.tapestry.BaseComponent;
-import org.apache.tapestry.IAsset;
-import org.apache.tapestry.IBinding;
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.event.PageEvent;
-import org.apache.tapestry.event.PageRenderListener;
-import org.apache.tapestry.spec.IBeanSpecification;
-import org.apache.tapestry.spec.IComponentSpecification;
-import org.apache.tapestry.spec.IContainedComponent;
-import org.apache.tapestry.spec.IParameterSpecification;
-
-/**
- *  Component of the {@link Inspector} page used to display
- *  the specification, parameters and bindings and assets of the inspected component.
- *
- *
- *  @version $Id$
- *  @author Howard Lewis Ship
- *
- **/
-
-public class ShowSpecification extends BaseComponent implements PageRenderListener
-{
-    private IComponent _inspectedComponent;
-    private IComponentSpecification _inspectedSpecification;
-    private String _parameterName;
-    private String _assetName;
-    private List _sortedComponents;
-    private IComponent _component;
-    private List _assetNames;
-    private List _formalParameterNames;
-    private List _informalParameterNames;
-    private List _sortedPropertyNames;
-    private String _propertyName;
-    private List _beanNames;
-    private String _beanName;
-    private IBeanSpecification _beanSpecification;
-
-    private static class ComponentComparitor implements Comparator
-    {
-        public int compare(Object left, Object right)
-        {
-            IComponent leftComponent;
-            String leftId;
-            IComponent rightComponent;
-            String rightId;
-
-            if (left == right)
-                return 0;
-
-            leftComponent = (IComponent) left;
-            rightComponent = (IComponent) right;
-
-            leftId = leftComponent.getId();
-            rightId = rightComponent.getId();
-
-            return leftId.compareTo(rightId);
-        }
-    }
-
-    /**
-     *  Clears all cached information about the component and such after
-     *  each render (including the rewind phase render used to process
-     *  the tab view).
-     *
-     *  @since 1.0.5
-     *
-     **/
-
-    public void pageEndRender(PageEvent event)
-    {
-        _inspectedComponent = null;
-        _inspectedSpecification = null;
-        _parameterName = null;
-        _assetName = null;
-        _sortedComponents = null;
-        _component = null;
-        _assetNames = null;
-        _formalParameterNames = null;
-        _informalParameterNames = null;
-        _sortedPropertyNames = null;
-        _propertyName = null;
-        _beanNames = null;
-        _beanName = null;
-        _beanSpecification = null;
-    }
-
-    /**
-     *  Gets the inspected component and specification from the {@link Inspector} page.
-     *
-     *  @since 1.0.5
-     **/
-
-    public void pageBeginRender(PageEvent event)
-    {
-        Inspector inspector = (Inspector) getPage();
-
-        _inspectedComponent = inspector.getInspectedComponent();
-        _inspectedSpecification = _inspectedComponent.getSpecification();
-    }
-
-    public IComponent getInspectedComponent()
-    {
-        return _inspectedComponent;
-    }
-
-    public IComponentSpecification getInspectedSpecification()
-    {
-        return _inspectedSpecification;
-    }
-
-    /**
-     *  Returns a sorted list of formal parameter names.
-     *
-     **/
-
-    public List getFormalParameterNames()
-    {
-        if (_formalParameterNames == null)
-            _formalParameterNames = sort(_inspectedSpecification.getParameterNames());
-
-        return _formalParameterNames;
-    }
-
-    /**
-     *  Returns a sorted list of informal parameter names.  This is
-     *  the list of all bindings, with the list of parameter names removed,
-     *  sorted.
-     *
-     **/
-
-    public List getInformalParameterNames()
-    {
-        if (_informalParameterNames != null)
-            return _informalParameterNames;
-
-        Collection names = _inspectedComponent.getBindingNames();
-        if (names != null && names.size() > 0)
-        {
-            _informalParameterNames = new ArrayList(names);
-
-            // Remove the names of any formal parameters.  This leaves
-            // just the names of informal parameters (informal parameters
-            // are any parameters/bindings that don't match a formal parameter
-            // name).
-
-            names = _inspectedSpecification.getParameterNames();
-            if (names != null)
-                _informalParameterNames.removeAll(names);
-
-            Collections.sort(_informalParameterNames);
-        }
-
-        return _informalParameterNames;
-    }
-
-    public String getParameterName()
-    {
-        return _parameterName;
-    }
-
-    public void setParameterName(String value)
-    {
-        _parameterName = value;
-    }
-
-    /**
-     *  Returns the {@link org.apache.tapestry.spec.ParameterSpecification} corresponding to
-     *  the value of the parameterName property.
-     *
-     **/
-
-    public IParameterSpecification getParameterSpecification()
-    {
-        return _inspectedSpecification.getParameter(_parameterName);
-    }
-
-    /**
-     *  Returns the {@link IBinding} corresponding to the value of
-     *  the parameterName property.
-     *
-     **/
-
-    public IBinding getBinding()
-    {
-        return _inspectedComponent.getBinding(_parameterName);
-    }
-
-    public void setAssetName(String value)
-    {
-        _assetName = value;
-    }
-
-    public String getAssetName()
-    {
-        return _assetName;
-    }
-
-    /**
-     *  Returns the {@link IAsset} corresponding to the value
-     *  of the assetName property.
-     *
-     **/
-
-    public IAsset getAsset()
-    {
-        return (IAsset) _inspectedComponent.getAssets().get(_assetName);
-    }
-
-    /**
-     *  Returns a sorted list of asset names, or null if the
-     *  component contains no assets.
-     *
-     **/
-
-    public List getAssetNames()
-    {
-        if (_assetNames == null)
-            _assetNames = sort(_inspectedComponent.getAssets().keySet());
-
-        return _assetNames;
-    }
-
-    public List getSortedComponents()
-    {
-        if (_sortedComponents != null)
-            return _sortedComponents;
-
-        Inspector inspector = (Inspector) getPage();
-        IComponent inspectedComponent = inspector.getInspectedComponent();
-
-        // Get a Map of the components and simply return null if there
-        // are none.
-
-        Map components = inspectedComponent.getComponents();
-
-        _sortedComponents = new ArrayList(components.values());
-
-        Collections.sort(_sortedComponents, new ComponentComparitor());
-
-        return _sortedComponents;
-    }
-
-    public void setComponent(IComponent value)
-    {
-        _component = value;
-    }
-
-    public IComponent getComponent()
-    {
-        return _component;
-    }
-
-    /**
-     *  Returns the type of the component, as specified in the container's
-     *  specification (i.e., the component alias if known).
-     *
-     **/
-
-    public String getComponentType()
-    {
-        IComponent container = _component.getContainer();
-
-        IComponentSpecification containerSpecification = container.getSpecification();
-
-        String id = _component.getId();
-        IContainedComponent contained = containerSpecification.getComponent(id);
-
-        // Temporary:  An implicit component will not be in the containing
-        // component's specification as a ContainedComponent.
-
-        if (contained == null)
-            return null;
-
-        return contained.getType();
-    }
-
-    /**
-     *  Returns a list of the properties for the component
-     *  (from its specification), or null if the component
-     *  has no properties.
-     *
-     **/
-
-    public List getSortedPropertyNames()
-    {
-        if (_sortedPropertyNames == null)
-            _sortedPropertyNames = sort(_inspectedSpecification.getPropertyNames());
-
-        return _sortedPropertyNames;
-    }
-
-    public void setPropertyName(String value)
-    {
-        _propertyName = value;
-    }
-
-    public String getPropertyName()
-    {
-        return _propertyName;
-    }
-
-    public String getPropertyValue()
-    {
-        return _inspectedSpecification.getProperty(_propertyName);
-    }
-
-    public List getBeanNames()
-    {
-        if (_beanNames == null)
-            _beanNames = sort(_inspectedSpecification.getBeanNames());
-
-        return _beanNames;
-    }
-
-    public void setBeanName(String value)
-    {
-        _beanName = value;
-        _beanSpecification = _inspectedSpecification.getBeanSpecification(_beanName);
-    }
-
-    public String getBeanName()
-    {
-        return _beanName;
-    }
-
-    public IBeanSpecification getBeanSpecification()
-    {
-        return _beanSpecification;
-    }
-
-    private List sort(Collection c)
-    {
-        if (c == null || c.size() == 0)
-            return null;
-
-        List result = new ArrayList(c);
-
-        Collections.sort(result);
-
-        return result;
-    }
-}
\ No newline at end of file
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/ShowSpecification.jwc b/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/ShowSpecification.jwc
deleted file mode 100644
index fa9c420..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/ShowSpecification.jwc
+++ /dev/null
@@ -1,80 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd" > 
-  
-<component-specification class="org.apache.tapestry.contrib.inspector.ShowSpecification">
-
-  <bean name="formalClass" class="org.apache.tapestry.bean.EvenOdd"/>           
-  <bean name="informalClass" class="org.apache.tapestry.bean.EvenOdd"/>
-  <bean name="assetClass" class="org.apache.tapestry.bean.EvenOdd"/>
-  <bean name="propertyClass" class="org.apache.tapestry.bean.EvenOdd"/>
-  <bean name="componentClass" class="org.apache.tapestry.bean.EvenOdd"/>
-  <bean name="beanClass" class="org.apache.tapestry.bean.EvenOdd"/>
-        
-  <component id="e_formal" type="Foreach">
-    <binding name="source" expression="formalParameterNames"/>
-    <binding name="value" expression="parameterName"/>
-    <static-binding name="element">tr</static-binding>
-    <binding name="class" expression="beans.formalClass.next"/>
-  </component>
-     
-  
-  <component id="e_informal" type="Foreach"> 
-    <binding name="source" expression="informalParameterNames"/>
-    <binding name="value" expression="parameterName"/>
-    <static-binding name="element">tr</static-binding>
-    <binding name="class" expression="beans.informalClass.next"/>
-  </component>
-
-  <component id="e_asset" type="Foreach">
-    <binding name="source" expression="assetNames"/>
-    <binding name="value" expression="assetName"/>
-    <static-binding name="element">tr</static-binding>
-    <binding name="class" expression="beans.assetClass.next"/>
-  </component>
-  
-  <component id="e_components" type="Foreach">
-    <binding name="source" expression="sortedComponents"/>
-    <binding name="value" expression="component"/>
-    <static-binding name="element">tr</static-binding>
-    <binding name="class" expression="beans.componentClass.next"/>
-  </component>
-
-  <component id="selectComponent" type="DirectLink">
-    <binding name="listener" expression="page.listeners.selectComponent"/>
-    <binding name="parameters" expression="component.idPath"/>
-  </component>
-
-  <component id="e_property" type="Foreach">
-    <binding name="source" expression="sortedPropertyNames"/>
-    <binding name="value" expression="propertyName"/>
-    <static-binding name="element">tr</static-binding>
-    <binding name="class" expression="beans.propertyClass.next"/>
-  </component>
-      
-  <component id="e_bean" type="Foreach">
-  	<binding name="source" expression="beanNames"/>
-  	<binding name="value" expression="beanName"/>
-  	<static-binding name="element">tr</static-binding>
-  	<binding name="class" expression="beans.beanClass.next"/>
-  </component>
-  	
-</component-specification>
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/ShowTemplate.html b/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/ShowTemplate.html
deleted file mode 100644
index 2673368..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/ShowTemplate.html
+++ /dev/null
@@ -1,15 +0,0 @@
-<!-- $Id$ -->
-
-<span jwcid="ifNoTemplate">
-<span class="message">Component does not have a template.
-</span>
-</span>
-
-<span jwcid="ifTemplate">
-<table class="template">
-	<tr>
-		<td><span jwcid="insertTemplate"/></td>
-	</tr>
-</table>
-
-</span>
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/ShowTemplate.java b/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/ShowTemplate.java
deleted file mode 100644
index 65a8c13..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/ShowTemplate.java
+++ /dev/null
@@ -1,333 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.inspector;
-
-import java.util.Iterator;
-import java.util.Map;
-
-import org.apache.tapestry.BaseComponent;
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.IDirect;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRender;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.engine.IEngineService;
-import org.apache.tapestry.engine.ILink;
-import org.apache.tapestry.engine.ITemplateSource;
-import org.apache.tapestry.parse.CloseToken;
-import org.apache.tapestry.parse.ComponentTemplate;
-import org.apache.tapestry.parse.LocalizationToken;
-import org.apache.tapestry.parse.OpenToken;
-import org.apache.tapestry.parse.TemplateAttribute;
-import org.apache.tapestry.parse.TemplateToken;
-import org.apache.tapestry.parse.TextToken;
-import org.apache.tapestry.parse.TokenType;
-
-/**
- *  Component of the {@link Inspector} page used to display
- *  the ids and types of all embedded components.
- *
- *
- *  @version $Id$
- *  @author Howard Lewis Ship
- *
- **/
-
-public class ShowTemplate extends BaseComponent implements IDirect
-{
-
-    public boolean getHasTemplate()
-    {
-        Inspector inspector;
-
-        inspector = (Inspector) getPage();
-
-        // Components that inherit from BaseComponent have templates,
-        // others do not.
-
-        return inspector.getInspectedComponent() instanceof BaseComponent;
-    }
-
-    public IRender getTemplateDelegate()
-    {
-        return new IRender()
-        {
-            public void render(IMarkupWriter writer, IRequestCycle cycle)
-            {
-                writeTemplate(writer, cycle);
-            }
-        };
-    }
-
-    /**
-     *  Writes the HTML template for the component.  When &lt;jwc&gt; tags are
-     *  written, the id is made a link (that selects the named component).  We
-     *  use some magic to accomplish this, creating links as if we were a
-     *  {@link DirectLink} component, and attributing those links
-     *  to the captive {@link DirectLink} component embedded here.
-     *
-     **/
-
-    private void writeTemplate(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        IComponent inspectedComponent = getInspectedComponent();
-        ComponentTemplate template = null;
-        ITemplateSource source = getPage().getEngine().getTemplateSource();
-
-        try
-        {
-            template = source.getTemplate(cycle, inspectedComponent);
-        }
-        catch (Exception ex)
-        {
-            return;
-        }
-
-        writer.begin("pre");
-
-        int count = template.getTokenCount();
-
-        for (int i = 0; i < count; i++)
-        {
-            TemplateToken token = template.getToken(i);
-            TokenType type = token.getType();
-
-            if (type == TokenType.TEXT)
-            {
-                write(writer, (TextToken) token);
-                continue;
-            }
-
-            if (type == TokenType.CLOSE)
-            {
-                write(writer, (CloseToken) token);
-
-                continue;
-            }
-
-            if (token.getType() == TokenType.LOCALIZATION)
-            {
-
-                write(writer, (LocalizationToken) token);
-                continue;
-            }
-
-            if (token.getType() == TokenType.OPEN)
-            {
-                boolean nextIsClose =
-                    (i + 1 < count) && (template.getToken(i + 1).getType() == TokenType.CLOSE);
-
-                write(writer, nextIsClose, (OpenToken) token);
-
-                if (nextIsClose)
-                    i++;
-
-                continue;
-            }
-
-            // That's all the types known at this time.
-        }
-
-        writer.end(); // <pre>        
-    }
-
-    /** @since 3.0 **/
-
-    private IComponent getInspectedComponent()
-    {
-        Inspector page = (Inspector) getPage();
-
-        return page.getInspectedComponent();
-    }
-
-    /** @since 3.0 **/
-
-    private void write(IMarkupWriter writer, TextToken token)
-    {
-        int start = token.getStartIndex();
-        int end = token.getEndIndex();
-
-        // Print the section of the template ... print() will
-        // escape and invalid characters as HTML entities.  Also,
-        // we show the full stretch of text, not the trimmed version.
-
-        writer.print(token.getTemplateData(), start, end - start + 1);
-    }
-
-    /** @since 3.0 **/
-
-    private void write(IMarkupWriter writer, CloseToken token)
-    {
-        writer.begin("span");
-        writer.attribute("class", "jwc-tag");
-
-        writer.print("</");
-        writer.print(token.getTag());
-        writer.print(">");
-
-        writer.end(); // <span>
-    }
-
-    /** @since 3.0 **/
-
-    private void write(IMarkupWriter writer, LocalizationToken token)
-    {
-        IComponent component = getInspectedComponent();
-
-        writer.begin("span");
-        writer.attribute("class", "jwc-tag");
-
-        writer.print("<span key=\"");
-        writer.print(token.getKey());
-        writer.print('"');
-
-        Map attributes = token.getAttributes();
-        if (attributes != null && !attributes.isEmpty())
-        {
-            Iterator it = attributes.entrySet().iterator();
-            while (it.hasNext())
-            {
-                Map.Entry entry = (Map.Entry) it.next();
-                String attributeName = (String) entry.getKey();
-                String attributeValue = (String) entry.getValue();
-
-                writer.print(' ');
-                writer.print(attributeName);
-                writer.print("=\"");
-                writer.print(attributeValue);
-                writer.print('"');
-
-            }
-        }
-
-        writer.print('>');
-        writer.begin("span");
-        writer.attribute("class", "localized-string");
-
-        writer.print(component.getMessages().getMessage(token.getKey()));
-        writer.end(); // <span>
-
-        writer.print("</span>");
-
-        writer.end(); // <span>
-    }
-
-    /** @since 3.0 **/
-
-    private void write(IMarkupWriter writer, boolean nextIsClose, OpenToken token)
-    {
-        IComponent component = getInspectedComponent();
-        IEngineService service = getPage().getEngine().getService(Tapestry.DIRECT_SERVICE);
-        String[] context = new String[1];
-
-        // Each id references a component embedded in the inspected component.
-        // Get that component.
-
-        String id = token.getId();
-        IComponent embedded = component.getComponent(id);
-        context[0] = embedded.getIdPath();
-
-        // Build a URL to select that component, as if by the captive
-        // component itself (it's a Direct).
-
-        ILink link = service.getLink(getPage().getRequestCycle(), this, context);
-
-        writer.begin("span");
-        writer.attribute("class", "jwc-tag");
-
-        writer.print("<");
-        writer.print(token.getTag());
-
-        writer.print(" jwcid=\"");
-
-        writer.begin("span");
-        writer.attribute("class", "jwc-id");
-
-        writer.begin("a");
-        writer.attribute("href", link.getURL());
-        writer.print(id);
-
-        writer.end(); // <a>
-        writer.end(); // <span>
-        writer.print('"');
-
-        Map attributes = token.getAttributesMap();
-
-        if (attributes != null)
-        {
-            Iterator ii = attributes.entrySet().iterator();
-
-            while (ii.hasNext())
-            {
-                Map.Entry e = (Map.Entry) ii.next();
-                
-                TemplateAttribute attribute = (TemplateAttribute)e.getValue();               
-                
-                writer.print(' ');
-                writer.print(e.getKey().toString());
-                writer.print("=\"");
-                
-                // TODO: Fix this to output something appropriate for each type
-                // of attribute (literal, expression, string).
-                
-                writer.print(attribute.getValue());
-                writer.print('"');
-            }
-        }
-
-        // Collapse an open & close down to a single tag.
-
-        if (nextIsClose)
-            writer.print('/');
-
-        writer.print('>');
-        writer.end(); // <span>
-    }
-
-    /**
-     *  Invoked when a component id is clicked.
-     *
-     **/
-
-    public void trigger(IRequestCycle cycle)
-    {
-        Inspector inspector = (Inspector) getPage();
-
-        Object[] parameters = cycle.getServiceParameters();
-
-        inspector.selectComponent((String) parameters[0]);
-
-        IComponent newComponent = inspector.getInspectedComponent();
-
-        // If the component is not a BaseComponent then it won't have
-        // a template, so switch to the specification view.
-
-        if (!(newComponent instanceof BaseComponent))
-            inspector.setView(View.SPECIFICATION);
-    }
-
-    /**
-     *  Always returns true.
-     * 
-     *  @since 2.3
-     * 
-     **/
-
-    public boolean isStateful()
-    {
-        return true;
-    }
-}
\ No newline at end of file
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/ShowTemplate.jwc b/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/ShowTemplate.jwc
deleted file mode 100644
index 266a467..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/ShowTemplate.jwc
+++ /dev/null
@@ -1,34 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<component-specification class="org.apache.tapestry.contrib.inspector.ShowTemplate">
-  <component id="ifNoTemplate" type="Conditional">
-    <binding name="condition" expression="! hasTemplate"/>
-  </component>
-  
-  <component id="ifTemplate" type="Conditional">
-    <binding name="condition" expression="hasTemplate"/>
-  </component>
-  
-  <component id="insertTemplate" type="Delegator">
-    <binding name="delegate" expression="templateDelegate"/>
-  </component>
-</component-specification>
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/Specification_HRp4.gif b/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/Specification_HRp4.gif
deleted file mode 100644
index 7b695d0..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/Specification_HRp4.gif
+++ /dev/null
Binary files differ
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/Specification_Hp3.gif b/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/Specification_Hp3.gif
deleted file mode 100644
index 33062cb..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/Specification_Hp3.gif
+++ /dev/null
Binary files differ
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/Specification_NBanner.gif b/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/Specification_NBanner.gif
deleted file mode 100644
index 896f81b..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/Specification_NBanner.gif
+++ /dev/null
Binary files differ
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/Specification_NRp2.gif b/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/Specification_NRp2.gif
deleted file mode 100644
index 6700d10..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/Specification_NRp2.gif
+++ /dev/null
Binary files differ
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/Specification_Np1.gif b/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/Specification_Np1.gif
deleted file mode 100644
index 5f8b7db..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/Specification_Np1.gif
+++ /dev/null
Binary files differ
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/Template_HRp4.gif b/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/Template_HRp4.gif
deleted file mode 100644
index 16e1792..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/Template_HRp4.gif
+++ /dev/null
Binary files differ
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/Template_Hp3.gif b/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/Template_Hp3.gif
deleted file mode 100644
index 2bc30ee..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/Template_Hp3.gif
+++ /dev/null
Binary files differ
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/Template_NBanner.gif b/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/Template_NBanner.gif
deleted file mode 100644
index e250138..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/Template_NBanner.gif
+++ /dev/null
Binary files differ
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/Template_NRp2.gif b/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/Template_NRp2.gif
deleted file mode 100644
index b7e2175..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/Template_NRp2.gif
+++ /dev/null
Binary files differ
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/Template_Np1.gif b/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/Template_Np1.gif
deleted file mode 100644
index a83fb37..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/Template_Np1.gif
+++ /dev/null
Binary files differ
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/View.java b/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/View.java
deleted file mode 100644
index 6aac890..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/View.java
+++ /dev/null
@@ -1,68 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.inspector;
-
-import org.apache.commons.lang.enum.Enum;
-
-/**
- *  Identifies different views for the inspector.
- *
- *  @version $Id$
- *  @author Howard Lewis Ship
- *
- **/
-
-public class View extends Enum
-{
-    /**
-     *  View that displays the basic specification information, plus
-     *  formal and informal parameters (and related bindings), and 
-     *  assets.
-     *
-     **/
-
-    public static final View SPECIFICATION = new View("SPECIFICATION");
-
-    /**
-     *  View that displays the HTML template for the component, if one
-     *  exists.
-     *
-     **/
-
-    public static final View TEMPLATE = new View("TEMPLATE");
-
-    /**
-     *  View that shows the persistent properties of the page containing
-     *  the inspected component.
-     *
-     **/
-
-    public static final View PROPERTIES = new View("PROPERTIES");
-
-    /**
-     *  View that shows information about the 
-     *  {@link org.apache.tapestry.IEngine}.
-     *
-     **/
-
-    public static final View ENGINE = new View("ENGINE");
-
-
-    private View(String name)
-    {
-        super(name);
-    }
-
-}
\ No newline at end of file
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/ViewTabs.html b/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/ViewTabs.html
deleted file mode 100644
index 6d3a970..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/ViewTabs.html
+++ /dev/null
@@ -1,20 +0,0 @@
-<!-- $Id$ -->
-
-<table border=0 cellpadding=0 cellspacing=2>
-	<tr>
-		<td>
-<span jwcid="@Foreach" source="ognl:views" value="ognl:view">
-			<a jwcid="select@ActionLink" listener="ognl:listeners.selectTab"><img 
-				jwcid="@Rollover" image="ognl:viewImage" focus="ognl:focusImage"
-				width="120" height="19"/></a>
-</span>
-		</td>
-	</tr>
-	<tr>
-		<td><img jwcid="@Image" image="ognl:bannerImage"/></td>
-	</tr>
-	<tr>
-		<td><span jwcid="@RenderBody"/></td>
-	</tr>
-</table>
-
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/ViewTabs.java b/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/ViewTabs.java
deleted file mode 100644
index 3251d35..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/ViewTabs.java
+++ /dev/null
@@ -1,92 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.inspector;
-
-import org.apache.tapestry.BaseComponent;
-import org.apache.tapestry.IAsset;
-import org.apache.tapestry.IRequestCycle;
-
-/**
- *  Component of the {@link Inspector} page used to select the view.
- *
- *
- *  @version $Id$
- *  @author Howard Lewis Ship
- *
- **/
-
-public abstract class ViewTabs extends BaseComponent
-{
-    private static View[] _views =
-        {
-            View.SPECIFICATION,
-            View.TEMPLATE,
-            View.PROPERTIES,
-            View.ENGINE };
-
-     public View[] getViews()
-    {
-        return _views;
-    }
-
-    public abstract void setView(View value);
-
-    public abstract View getView();
-
-    private IAsset getImageForView(boolean focus)
-    {
-        Inspector inspector = (Inspector) getPage();
-		View view = getView();
-		
-        boolean selected = (view == inspector.getView());
-
-        StringBuffer buffer = new StringBuffer(view.getName());
-
-        if (selected)
-            buffer.append("_selected");
-
-        if (focus)
-            buffer.append("_focus");
-
-        String key = buffer.toString();
-
-        return (IAsset) getAssets().get(key);
-    }
-
-    public IAsset getViewImage()
-    {
-        return getImageForView(false);
-    }
-
-    public IAsset getFocusImage()
-    {
-        return getImageForView(true);
-    }
-
-    public IAsset getBannerImage()
-    {
-         Inspector inspector = (Inspector) getPage();
-        View selectedView = inspector.getView();
-        String key = selectedView.getName() + "_banner";
-
-        return (IAsset) getAssets().get(key);
-    }
-
-    public void selectTab(IRequestCycle cycle)
-    {
-        Inspector inspector = (Inspector) getPage();
-        inspector.setView(getView());
-    }
-}
\ No newline at end of file
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/ViewTabs.jwc b/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/ViewTabs.jwc
deleted file mode 100644
index 1e03bad..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/ViewTabs.jwc
+++ /dev/null
@@ -1,46 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<component-specification class="org.apache.tapestry.contrib.inspector.ViewTabs">
-  
-  <property-specification name="view" type="org.apache.tapestry.contrib.inspector.View"/>
-  
-  <private-asset name="SPECIFICATION" resource-path="Specification_Np1.gif"/>
-  <private-asset name="SPECIFICATION_selected" resource-path="Specification_Hp3.gif"/>
-  <private-asset name="SPECIFICATION_focus" resource-path="Specification_NRp2.gif"/>
-  <private-asset name="SPECIFICATION_selected_focus" resource-path="Specification_HRp4.gif"/>
-  <private-asset name="SPECIFICATION_banner" resource-path="Specification_NBanner.gif"/>
-  <private-asset name="TEMPLATE" resource-path="Template_Np1.gif"/>
-  <private-asset name="TEMPLATE_selected" resource-path="Template_Hp3.gif"/>
-  <private-asset name="TEMPLATE_focus" resource-path="Template_NRp2.gif"/>
-  <private-asset name="TEMPLATE_selected_focus" resource-path="Template_HRp4.gif"/>
-  <private-asset name="TEMPLATE_banner" resource-path="Template_NBanner.gif"/>
-  <private-asset name="PROPERTIES" resource-path="Properties_Np1.gif"/>
-  <private-asset name="PROPERTIES_selected" resource-path="Properties_Hp3.gif"/>
-  <private-asset name="PROPERTIES_focus" resource-path="Properties_NRp2.gif"/>
-  <private-asset name="PROPERTIES_selected_focus" resource-path="Properties_HRp4.gif"/>
-  <private-asset name="PROPERTIES_banner" resource-path="Properties_NBanner.gif"/>
-  <private-asset name="ENGINE" resource-path="Engine_Np1.gif"/>
-  <private-asset name="ENGINE_selected" resource-path="Engine_Hp3.gif"/>
-  <private-asset name="ENGINE_focus" resource-path="Engine_NRp2.gif"/>
-  <private-asset name="ENGINE_selected_focus" resource-path="Engine_HRp4.gif"/>
-  <private-asset name="ENGINE_banner" resource-path="Engine_NBanner.gif"/>
-</component-specification>
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/info.gif b/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/info.gif
deleted file mode 100644
index be3d1d1..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/info.gif
+++ /dev/null
Binary files differ
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/inspector-rollover.gif b/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/inspector-rollover.gif
deleted file mode 100644
index df0d3ef..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/inspector-rollover.gif
+++ /dev/null
Binary files differ
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/package.html b/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/package.html
deleted file mode 100644
index 7610fdb..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/package.html
+++ /dev/null
@@ -1,17 +0,0 @@
-<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN">
-<!-- $Id$ -->
-<html>
-<head>
-<title>Tapestry: Web Application Framework</title>
-</head>
-<body>
-
-<p>Implementation of the Tapestry <em>Inspector</em>, a specialized page
-used to dynamically introspect the construction of an application while
-it runs.  The {@link org.apache.tapestry.contrib.inspector.InspectorButton} component
-creates an icon on the page that raises the Inspector in a seperate window.
-
-@author Howard Lewis Ship <a href="mailto:hlship@apache.org">hlship@apache.org</a>
-
-</body>
-</html>
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/tapestry-logo.gif b/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/tapestry-logo.gif
deleted file mode 100644
index 82ad636..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/inspector/tapestry-logo.gif
+++ /dev/null
Binary files differ
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/jdbc/BooleanParameter.java b/3.0.4/contrib/src/org/apache/tapestry/contrib/jdbc/BooleanParameter.java
deleted file mode 100644
index 80fc31d..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/jdbc/BooleanParameter.java
+++ /dev/null
@@ -1,57 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.jdbc;
-
-import java.sql.PreparedStatement;
-import java.sql.SQLException;
-
-/**
- *  Wrapper around a boolean parameter.
- *
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 2.3
- *
- **/
-
-public class BooleanParameter implements IParameter
-{
-    private boolean _value;
-
-    public static final BooleanParameter TRUE = new BooleanParameter(true);
-
-    public static final BooleanParameter FALSE = new BooleanParameter(false);
-
-    private BooleanParameter(boolean value)
-    {
-        _value = value;
-    }
-
-    public void set(PreparedStatement statement, int index) throws SQLException
-    {
-        statement.setBoolean(index, _value);
-    }
-
-    public String toString()
-    {
-        StringBuffer buffer = new StringBuffer("Boolean<");
-        buffer.append(_value);
-        buffer.append('>');
-
-        return buffer.toString();
-    }
-
-}
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/jdbc/DoubleParameter.java b/3.0.4/contrib/src/org/apache/tapestry/contrib/jdbc/DoubleParameter.java
deleted file mode 100644
index e9f6d65..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/jdbc/DoubleParameter.java
+++ /dev/null
@@ -1,52 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.jdbc;
-
-import java.sql.PreparedStatement;
-import java.sql.SQLException;
-
-/**
- *  A wrapper around a double parameter.
- *
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 2.3
- * 
- **/
-
-public class DoubleParameter implements IParameter
-{
-    private double _value;
-
-    public DoubleParameter(double value)
-    {
-        _value = value;
-    }
-
-    public void set(PreparedStatement statement, int index) throws SQLException
-    {
-        statement.setDouble(index, _value);
-    }
-
-    public String toString()
-    {
-        StringBuffer buffer = new StringBuffer("Double<");
-        buffer.append(_value);
-        buffer.append('>');
-
-        return buffer.toString();
-    }
-}
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/jdbc/FloatParameter.java b/3.0.4/contrib/src/org/apache/tapestry/contrib/jdbc/FloatParameter.java
deleted file mode 100644
index b2eb348..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/jdbc/FloatParameter.java
+++ /dev/null
@@ -1,52 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.jdbc;
-
-import java.sql.PreparedStatement;
-import java.sql.SQLException;
-
-/**
- *  A wrapper around a float parameter.
- *
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 2.3
- * 
- **/
-
-public class FloatParameter implements IParameter
-{
-    private float _value;
-
-    public FloatParameter(float value)
-    {
-        _value = value;
-    }
-
-    public void set(PreparedStatement statement, int index) throws SQLException
-    {
-        statement.setFloat(index, _value);
-    }
-
-    public String toString()
-    {
-        StringBuffer buffer = new StringBuffer("Float<");
-        buffer.append(_value);
-        buffer.append('>');
-
-        return buffer.toString();
-    }
-}
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/jdbc/IParameter.java b/3.0.4/contrib/src/org/apache/tapestry/contrib/jdbc/IParameter.java
deleted file mode 100644
index 2032a00..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/jdbc/IParameter.java
+++ /dev/null
@@ -1,41 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.jdbc;
-
-import java.sql.PreparedStatement;
-import java.sql.SQLException;
-
-/**
- *  Represents a parameter within a dynamically generated SQL statement.
- *
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 2.3
- *  @see org.apache.tapestry.contrib.jdbc.ParameterizedStatement
- * 
- **/
-
-public interface IParameter
-{
-    /**
-     *  Invokes the appropriate setXXX() method on the 
-     *  {@link java.sql.PreparedStatement}.
-     * 
-     **/
-    
-    public void set(PreparedStatement statement, int index)
-    throws SQLException;
-}
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/jdbc/IStatement.java b/3.0.4/contrib/src/org/apache/tapestry/contrib/jdbc/IStatement.java
deleted file mode 100644
index c9f2544..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/jdbc/IStatement.java
+++ /dev/null
@@ -1,70 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.jdbc;
-
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.sql.Statement;
-
-/**
- *  A wrapper around {@link java.sql.Statement} or 
- *  {@link java.sql.PreparedStatement} which hides the differences
- *  between the two.  
- *
- *  @version $Id$
- *  @author Howard Lewis Ship
- *  @see org.apache.tapestry.contrib.jdbc.StatementAssembly#createStatement(Connection)
- * 
- **/
-
-public interface IStatement
-{
-    /**
-     * Returns the SQL associated with this statement.
-     *
-     **/
-
-    public String getSQL();
-
-    /**
-     *  Returns the underlying {@link java.sql.Statement} 
-     *  (or {@link java.sql.PreparedStatement}).
-     *
-     **/
-
-    public Statement getStatement();
-
-    /**
-     *  Closes the underlying statement, and nulls the reference to it.
-     *
-     **/
-
-    public void close() throws SQLException;
-
-    /**
-     *  Executes the statement as a query, returning a {@link ResultSet}.
-     *
-     **/
-
-    public ResultSet executeQuery() throws SQLException;
-
-    /**
-     *  Executes the statement as an update, returning the number of rows
-     *  affected.
-     *
-     **/
-
-    public int executeUpdate() throws SQLException;
-}
\ No newline at end of file
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/jdbc/IntegerParameter.java b/3.0.4/contrib/src/org/apache/tapestry/contrib/jdbc/IntegerParameter.java
deleted file mode 100644
index 9148201..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/jdbc/IntegerParameter.java
+++ /dev/null
@@ -1,52 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.jdbc;
-
-import java.sql.PreparedStatement;
-import java.sql.SQLException;
-
-/**
- *  A wrapper around an integer parameter.
- *
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 2.3
- * 
- **/
-
-public class IntegerParameter implements IParameter
-{
-    private int _value;
-
-    public IntegerParameter(int value)
-    {
-        _value = value;
-    }
-
-    public void set(PreparedStatement statement, int index) throws SQLException
-    {
-        statement.setInt(index, _value);
-    }
-
-    public String toString()
-    {
-        StringBuffer buffer = new StringBuffer("Integer<");
-        buffer.append(_value);
-        buffer.append('>');
-
-        return buffer.toString();
-    }
-}
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/jdbc/LongParameter.java b/3.0.4/contrib/src/org/apache/tapestry/contrib/jdbc/LongParameter.java
deleted file mode 100644
index 847e8a0..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/jdbc/LongParameter.java
+++ /dev/null
@@ -1,52 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.jdbc;
-
-import java.sql.PreparedStatement;
-import java.sql.SQLException;
-
-/**
- *  Wrapper around long parameter.
- *
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 2.3
- * 
- **/
-
-public class LongParameter implements IParameter
-{
-    private long _value;
-
-    public LongParameter(long value)
-    {
-        _value = value;
-    }
-
-    public void set(PreparedStatement statement, int index) throws SQLException
-    {
-        statement.setLong(index, _value);
-    }
-
-    public String toString()
-    {
-        StringBuffer buffer = new StringBuffer("Long<");
-        buffer.append(_value);
-        buffer.append('>');
-
-        return buffer.toString();
-    }
-}
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/jdbc/ObjectParameter.java b/3.0.4/contrib/src/org/apache/tapestry/contrib/jdbc/ObjectParameter.java
deleted file mode 100644
index 25be80f..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/jdbc/ObjectParameter.java
+++ /dev/null
@@ -1,52 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.jdbc;
-
-import java.sql.PreparedStatement;
-import java.sql.SQLException;
-
-/**
- *  An arbitrary object parameter.
- *
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 2.3
- * 
- **/
-
-public class ObjectParameter implements IParameter
-{
-    private Object _value;
-
-    public ObjectParameter(Object value)
-    {
-        _value = value;
-    }
-
-    public void set(PreparedStatement statement, int index) throws SQLException
-    {
-        statement.setObject(index, _value);
-    }
-
-    public String toString()
-    {
-        StringBuffer buffer = new StringBuffer("Object<");
-        buffer.append(_value);
-        buffer.append('>');
-
-        return buffer.toString();
-    }
-}
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/jdbc/ParameterizedStatement.java b/3.0.4/contrib/src/org/apache/tapestry/contrib/jdbc/ParameterizedStatement.java
deleted file mode 100644
index 3d37cca..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/jdbc/ParameterizedStatement.java
+++ /dev/null
@@ -1,152 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.jdbc;
-
-import java.sql.Connection;
-import java.sql.PreparedStatement;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.sql.Statement;
-import java.util.List;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-/**
- *  A wrapper around {@link PreparedStatement}.
- *
- *  @version $Id$
- *  @author Howard Lewis Ship
- * 
- **/
-
-public class ParameterizedStatement implements IStatement
-{
-    private static final Log LOG = LogFactory.getLog(ParameterizedStatement.class);
-
-    private String _SQL;
-    private PreparedStatement _statement;
-    private IParameter[] _parameters;
-
-    /**
-     *  Create a new instance; the parameters list is copied.
-     * 
-     *  @param SQL the SQL to execute (see {@link Connection#prepareStatement(java.lang.String)})
-     *  @param connection the JDBC connection to use
-     *  @param parameters list of {@link IParameter}
-     * 
-     **/
-    
-    public ParameterizedStatement(String SQL, Connection connection, List parameters) throws SQLException
-    {
-        _SQL = SQL;
-
-        _statement = connection.prepareStatement(SQL);
-
-        _parameters = (IParameter[]) parameters.toArray(new IParameter[parameters.size()]);
-
-        for (int i = 0; i < _parameters.length; i++)
-        {
-            // JDBC numbers things from 1, not 0.
-
-            _parameters[i].set(_statement, i + 1);
-        }
-    }
-
-    /**
-     * Returns the SQL associated with this statement.
-     *
-     **/
-
-    public String getSQL()
-    {
-        return _SQL;
-    }
-
-    /**
-     *  Returns the underlying or {@link PreparedStatement}.
-     *
-     **/
-
-    public Statement getStatement()
-    {
-        return _statement;
-    }
-
-    /**
-     *  Closes the underlying statement, and nulls the reference to it.
-     *
-     **/
-
-    public void close() throws SQLException
-    {
-        _statement.close();
-
-        _statement = null;
-        _SQL = null;
-    }
-
-    /**
-     *  Executes the statement as a query, returning a {@link ResultSet}.
-     *
-     **/
-
-    public ResultSet executeQuery() throws SQLException
-    {
-        if (LOG.isDebugEnabled())
-            LOG.debug("Executing query: " + this);
-
-        return _statement.executeQuery();
-    }
-
-    /**
-     *  Executes the statement as an update, returning the number of rows
-     *  affected.
-     *
-     **/
-
-    public int executeUpdate() throws SQLException
-    {
-        if (LOG.isDebugEnabled())
-            LOG.debug("Executing update: " + this);
-
-        return _statement.executeUpdate();
-    }
-
-    public String toString()
-    {
-        StringBuffer buffer = new StringBuffer("ParameterizedStatement@");
-        buffer.append(Integer.toHexString(hashCode()));
-        buffer.append("[SQL=\n<");
-        buffer.append(_SQL);
-        buffer.append("\n>");
-
-        for (int i = 0; i < _parameters.length; i++)
-        {
-            IParameter parameter = _parameters[i];
-
-            buffer.append(" ?");
-            buffer.append(i + 1);
-            buffer.append('=');
-
-            buffer.append(parameter);
-        }
-
-        buffer.append(']');
-
-        return buffer.toString();
-    }
-
-}
\ No newline at end of file
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/jdbc/ShortParameter.java b/3.0.4/contrib/src/org/apache/tapestry/contrib/jdbc/ShortParameter.java
deleted file mode 100644
index 31cfea7..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/jdbc/ShortParameter.java
+++ /dev/null
@@ -1,53 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.jdbc;
-
-import java.sql.PreparedStatement;
-import java.sql.SQLException;
-
-/**
- *  A wrapper around a short parameter.  
- *
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 2.3
- * 
- **/
-
-public class ShortParameter implements IParameter
-{
-    private short _value;
-
-    public ShortParameter(short value)
-    {
-        _value = value;
-    }
-
-    public void set(PreparedStatement statement, int index) throws SQLException
-    {
-        statement.setShort(index, _value);
-    }
-
-    public String toString()
-    {
-        StringBuffer buffer = new StringBuffer("Short<");
-        buffer.append(_value);
-        buffer.append('>');
-
-        return buffer.toString();
-    }
-
-}
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/jdbc/SimpleStatement.java b/3.0.4/contrib/src/org/apache/tapestry/contrib/jdbc/SimpleStatement.java
deleted file mode 100644
index 16df20f..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/jdbc/SimpleStatement.java
+++ /dev/null
@@ -1,127 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.jdbc;
-
-import java.sql.Connection;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.sql.Statement;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-/**
- *  A wrapper around {@link Statement}.
- *
- *  @version $Id$
- *  @author Howard Lewis Ship
- *
- **/
-
-public class SimpleStatement implements IStatement
-{
-    private static final Log LOG = LogFactory.getLog(SimpleStatement.class);
-
-    private String _sql;
-    private Statement _statement;
-
-    public SimpleStatement(String SQL, Connection connection) throws SQLException
-    {
-        _sql = SQL;
-        _statement = connection.createStatement();
-    }
-
-    public SimpleStatement(String SQL, Connection connection, int resultSetType, int resultSetConcurrency)
-        throws SQLException
-    {
-        _sql = SQL;
-        _statement = connection.createStatement(resultSetType, resultSetConcurrency);
-    }
-
-    /**
-     * Returns the SQL associated with this statement.
-     *
-     **/
-
-    public String getSQL()
-    {
-        return _sql;
-    }
-
-    /**
-     *  Returns the underlying {@link Statement}.
-     *
-     **/
-
-    public Statement getStatement()
-    {
-        return _statement;
-    }
-
-    /**
-     *  Closes the underlying statement, and nulls the reference to it.
-     *
-     **/
-
-    public void close() throws SQLException
-    {
-        _statement.close();
-
-        _statement = null;
-        _sql = null;
-    }
-
-    /**
-     *  Executes the statement as a query, returning a {@link ResultSet}.
-     *
-     **/
-
-    public ResultSet executeQuery() throws SQLException
-    {
-        if (LOG.isDebugEnabled())
-            LOG.debug("Executing query: " + this);
-
-        return _statement.executeQuery(_sql);
-    }
-
-    /**
-     *  Executes the statement as an update, returning the number of rows
-     *  affected.
-     *
-     **/
-
-    public int executeUpdate() throws SQLException
-    {
-        if (LOG.isDebugEnabled())
-            LOG.debug("Executing update: " + this);
-
-        return _statement.executeUpdate(_sql);
-    }
-
-    public String toString()
-    {
-        StringBuffer buffer;
-
-        buffer = new StringBuffer("SimpleStatement@");
-        buffer.append(Integer.toHexString(hashCode()));
-
-        buffer.append("[SQL=<\n");
-        buffer.append(_sql);
-        buffer.append("\n>]");
-
-        return buffer.toString();
-    }
-
-}
\ No newline at end of file
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/jdbc/StatementAssembly.java b/3.0.4/contrib/src/org/apache/tapestry/contrib/jdbc/StatementAssembly.java
deleted file mode 100644
index 112e740..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/jdbc/StatementAssembly.java
+++ /dev/null
@@ -1,480 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.jdbc;
-
-import java.sql.Connection;
-import java.sql.SQLException;
-import java.sql.Timestamp;
-import java.util.ArrayList;
-import java.util.Calendar;
-import java.util.Date;
-import java.util.GregorianCalendar;
-import java.util.List;
-
-/**
- *  Class for creating and executing JDBC statements.  Allows statements to be assembled
- *  incrementally (like a {@link StringBuffer}), but also tracks parameters, shielding
- *  the developer from the differences between constructing and 
- *  using a JDBC 
- *  {@link java.sql.Statement} and 
- *  a JDBC {@link java.sql.PreparedStatement}.  This class is somewhat skewed towards
- *  Oracle, which works more efficiently with prepared staments than
- *  simple SQL.
- * 
- *  <p>In addition, implements {@link #toString()} in a useful way (you can see the
- *  SQL and parameters), which is invaluable when debugging.
- * 
- *  <p>{@link #addParameter(int)} (and all overloaded versions of it for scalar types)
- *  adds a "?" to the statement and records the parameter value.
- * 
- *  <p>{@link #addParameter(Integer)} (and all overloaded version of it for wrapper
- *  types) does the same ... unless the value is null, in which case "NULL" is
- *  inserted into the statement.
- * 
- *  <p>{@link #addParameterList(int[], String)} (and all overloaded versions of it)
- *  simply invokes the appropriate {@link #addParameter(int)}, adding the
- *  separator in between parameters.
- *
- *  @version $Id$
- *  @author Howard Lewis Ship
- *
- **/
-
-public class StatementAssembly
-{
-    private StringBuffer _buffer = new StringBuffer();
-
-    private static final String NULL = "NULL";
-
-    public static final String SEP = ", ";
-
-    /**
-     *  List of {@link IParameter}
-     * 
-     **/
-
-    private List _parameters;
-
-    private int _lineLength;
-    private int _maxLineLength = 80;
-    private int _indent = 5;
-
-    /**
-     *  Default constructor; uses a maximum line length of 80 and an indent of 5.
-     *
-     **/
-
-    public StatementAssembly()
-    {
-    }
-
-    public StatementAssembly(int maxLineLength, int indent)
-    {
-        _maxLineLength = maxLineLength;
-        _indent = indent;
-    }
-
-    /**
-     *  Clears the assembly, preparing it for re-use.
-     * 
-     *  @since 1.0.7
-     * 
-     **/
-
-    public void clear()
-    {
-        _buffer.setLength(0);
-        _lineLength = 0;
-
-        if (_parameters != null)
-            _parameters.clear();
-    }
-
-    /**
-     *  Maximum length of a line.
-     *
-     **/
-
-    public int getMaxLineLength()
-    {
-        return _maxLineLength;
-    }
-
-    /**
-     *  Number of spaces to indent continuation lines by.
-     *
-     **/
-
-    public int getIndent()
-    {
-        return _indent;
-    }
-
-    /**
-     *  Adds text to the current line, unless that would make the line too long, in
-     *  which case a new line is started (and indented) before adding the text.
-     *
-     *  <p>Text is added as-is, with no concept of quoting.  To add arbitrary strings
-     *  (such as in a where clause), use {@link #addParameter(String)}.
-     *
-     *
-     **/
-
-    public void add(String text)
-    {
-        int textLength;
-
-        textLength = text.length();
-
-        if (_lineLength + textLength > _maxLineLength)
-        {
-            _buffer.append('\n');
-
-            for (int i = 0; i < _indent; i++)
-                _buffer.append(' ');
-
-            _lineLength = _indent;
-        }
-
-        _buffer.append(text);
-        _lineLength += textLength;
-    }
-    
-    public void add(short value)
-    {
-        add(Short.toString(value));
-    }
-    
-    public void add(int value)
-    {
-        add(Integer.toString(value));
-    }
-    
-    public void add(long value)
-    {
-        add(Long.toString(value));
-    }
-    
-    public void add(float value)
-    {
-        add(Float.toString(value));
-    }
-    
-    public void add(double value)
-    {
-        add(Double.toString(value));
-    }
-
-    /**
-     *  Adds a date value to a {@link StatementAssembly} converting
-     *  it to a {@link java.sql.Timestamp} first.
-     *
-     **/
-
-    public void addParameter(Date date)
-    {
-        if (date == null)
-        {
-            add("NULL");
-            return;
-        }
-
-        Calendar calendar = GregorianCalendar.getInstance();
-
-        calendar.setTime(date);
-        calendar.set(Calendar.MILLISECOND, 0);
-
-        Date adjusted = calendar.getTime();
-
-        Timestamp timestamp = new Timestamp(adjusted.getTime());
-
-        addParameter(timestamp);
-    }
-
-    /** 
-     *  Adds a separator (usually a comma and a space) to the current line, regardless
-     *  of line length.  This is purely aesthetic ... it just looks odd if a separator
-     *  gets wrapped to a new line by itself.
-     *
-     **/
-
-    public void addSep(String text)
-    {
-        _buffer.append(text);
-        _lineLength += text.length();
-    }
-
-    /**
-     *  Starts a new line, without indenting.
-     *
-     **/
-
-    public void newLine()
-    {
-        if (_buffer.length() != 0)
-            _buffer.append('\n');
-
-        _lineLength = 0;
-    }
-
-    /**
-     * Starts a new line, then adds the given text.
-     *
-     **/
-
-    public void newLine(String text)
-    {
-        if (_buffer.length() != 0)
-            _buffer.append('\n');
-
-        _buffer.append(text);
-
-        _lineLength = text.length();
-    }
-
-    public void addList(String[] items, String separator)
-    {
-        for (int i = 0; i < items.length; i++)
-        {
-            if (i > 0)
-                addSep(separator);
-
-            add(items[i]);
-        }
-    }
-
-    public void addParameterList(int[] items, String separator)
-    {
-        for (int i = 0; i < items.length; i++)
-        {
-            if (i > 0)
-                addSep(separator);
-
-            addParameter(items[i]);
-        }
-    }
-
-    public void addParameterList(Integer[] items, String separator)
-    {
-        for (int i = 0; i < items.length; i++)
-        {
-            if (i > 0)
-                addSep(separator);
-
-            addParameter(items[i]);
-        }
-    }
-
-    public void addParameterList(long[] items, String separator)
-    {
-        for (int i = 0; i < items.length; i++)
-        {
-            if (i > 0)
-                addSep(separator);
-
-            addParameter(items[i]);
-        }
-    }
-
-    public void addParameterList(Long[] items, String separator)
-    {
-        for (int i = 0; i < items.length; i++)
-        {
-            if (i > 0)
-                addSep(separator);
-
-            addParameter(items[i]);
-        }
-    }
-
-    public void addParameterList(String[] items, String separator)
-    {
-        for (int i = 0; i < items.length; i++)
-        {
-            if (i > 0)
-                addSep(separator);
-
-            addParameter(items[i]);
-        }
-    }
-
-    public void addParameterList(double[] items, String separator)
-    {
-        for (int i = 0; i < items.length; i++)
-        {
-            if (i > 0)
-                addSep(separator);
-
-            addParameter(items[i]);
-        }
-    }
-
-    public void addParameter(Object value)
-    {
-        if (value == null)
-            add(NULL);
-        else
-            addParameter(new ObjectParameter(value));
-    }
-
-    public void addParameter(Timestamp timestamp)
-    {
-        if (timestamp == null)
-            add(NULL);
-        else
-            addParameter(new TimestampParameter(timestamp));
-    }
-
-    public void addParameter(String value)
-    {
-        if (value == null)
-            add(NULL);
-        else
-            addParameter(new StringParameter(value));
-    }
-
-    public void addParameter(int value)
-    {
-        addParameter(new IntegerParameter(value));
-    }
-
-    public void addParameter(Integer value)
-    {
-        if (value == null)
-            add(NULL);
-        else
-            addParameter(value.intValue());
-    }
-
-    public void addParameter(long value)
-    {
-        addParameter(new LongParameter(value));
-    }
-
-    public void addParameter(Long value)
-    {
-        if (value == null)
-            add(NULL);
-        else
-            addParameter(value.longValue());
-    }
-
-    public void addParameter(float value)
-    {
-        addParameter(new FloatParameter(value));
-    }
-
-    public void addParameter(Float value)
-    {
-        if (value == null)
-            add(NULL);
-        else
-            addParameter(value.floatValue());
-    }
-
-    public void addParameter(double value)
-    {
-        addParameter(new DoubleParameter(value));
-    }
-
-    public void addParameter(Double value)
-    {
-        if (value == null)
-            add(NULL);
-        else
-            addParameter(value.doubleValue());
-    }
-
-    public void addParameter(short value)
-    {
-        addParameter(new ShortParameter(value));
-    }
-
-    public void addParameter(Short value)
-    {
-        if (value == null)
-            add(NULL);
-        else
-            addParameter(value.shortValue());
-    }
-
-    public void addParameter(boolean value)
-    {
-        addParameter(value ? BooleanParameter.TRUE : BooleanParameter.FALSE);
-    }
-
-    public void addParameter(Boolean value)
-    {
-        if (value == null)
-            add(NULL);
-        else
-            addParameter(value.booleanValue());
-    }
-
-    private void addParameter(IParameter parameter)
-    {
-        if (_parameters == null)
-            _parameters = new ArrayList();
-
-        _parameters.add(parameter);
-
-        add("?");
-    }
-
-    /**
-     *  Creates and returns an {@link IStatement} based on the SQL and parameters
-     *  acquired.
-     *
-     **/
-
-    public IStatement createStatement(Connection connection) throws SQLException
-    {
-        String sql = _buffer.toString();
-
-        if (_parameters == null || _parameters.isEmpty())
-            return new SimpleStatement(sql, connection);
-
-        return new ParameterizedStatement(sql, connection, _parameters);
-    }
-
-    public String toString()
-    {
-        StringBuffer buffer = new StringBuffer("StatementAssembly@");
-
-        buffer.append(Integer.toHexString(hashCode()));
-        buffer.append("[SQL=\n<");
-        buffer.append(_buffer);
-        buffer.append("\n>");
-
-        if (_parameters != null)
-        {
-            int count = _parameters.size();
-            for (int i = 0; i < count; i++)
-            {
-                Object parameter = _parameters.get(i);
-
-                buffer.append(" ?");
-                buffer.append(i + 1);
-                buffer.append('=');
-
-                buffer.append(parameter);
-            }
-        }
-
-        buffer.append(']');
-
-        return buffer.toString();
-    }
-}
\ No newline at end of file
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/jdbc/StringParameter.java b/3.0.4/contrib/src/org/apache/tapestry/contrib/jdbc/StringParameter.java
deleted file mode 100644
index 088a2d7..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/jdbc/StringParameter.java
+++ /dev/null
@@ -1,55 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.jdbc;
-
-import java.sql.PreparedStatement;
-import java.sql.SQLException;
-import java.sql.Types;
-
-/**
- *  Used with String parameters.
- *
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *
- **/
-
-public class StringParameter implements IParameter
-{
-    private String _value;
-
-    public StringParameter(String value)
-    {
-        _value = value;
-    }
-
-    public void set(PreparedStatement statement, int index) throws SQLException
-    {
-        if (_value == null)
-            statement.setNull(index, Types.VARCHAR);
-        else
-            statement.setString(index, _value);
-    }
-
-    public String toString()
-    {
-        StringBuffer buffer = new StringBuffer("String<");
-        buffer.append(_value);
-        buffer.append('>');
-
-        return buffer.toString();
-    }
-}
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/jdbc/TimestampParameter.java b/3.0.4/contrib/src/org/apache/tapestry/contrib/jdbc/TimestampParameter.java
deleted file mode 100644
index c5bd8fc..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/jdbc/TimestampParameter.java
+++ /dev/null
@@ -1,56 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.jdbc;
-
-import java.sql.PreparedStatement;
-import java.sql.SQLException;
-import java.sql.Timestamp;
-import java.sql.Types;
-
-/**
- *  Used with Timestamp parameters.
- *
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *
- **/
-
-public class TimestampParameter implements IParameter
-{
-    private Timestamp _timestamp;
-
-    public TimestampParameter(Timestamp timestamp)
-    {
-        _timestamp = timestamp;
-    }
-
-    public void set(PreparedStatement statement, int index) throws SQLException
-    {
-        if (_timestamp == null)
-            statement.setNull(index, Types.TIMESTAMP);
-        else
-            statement.setTimestamp(index, _timestamp);
-    }
-
-    public String toString()
-    {
-        StringBuffer buffer = new StringBuffer("Timestamp<");
-        buffer.append(_timestamp);
-        buffer.append('>');
-
-        return buffer.toString();
-    }
-}
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/jdbc/package.html b/3.0.4/contrib/src/org/apache/tapestry/contrib/jdbc/package.html
deleted file mode 100644
index 13983ad..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/jdbc/package.html
+++ /dev/null
@@ -1,20 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<!-- $Id$ -->
-<html>
-<head>
-<title>Tapestry: Web Application Framework</title>
-</head>
-
-
-<body>
-
-<p>A set of classes that assist with dynamically generating JDBC SQL queries.  Importantly,
-they help hide the difference between a {@link java.sql.Statement} and
-{@link java.sql.PreparedStatement} ... in fact, using a
-{@link org.apache.tapestry.contrib.jdbc.StatementAssembly} you don't know in advance which
-you'll get, which is very handy when generating truly dynamic SQL.
-
-@author Howard Lewis Ship <a href="mailto:hlship@apache.org">hlship@apache.org</a>
-
-</body>
-</html>
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/link/AreaLinkRenderer.java b/3.0.4/contrib/src/org/apache/tapestry/contrib/link/AreaLinkRenderer.java
deleted file mode 100644
index d27f12a..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/link/AreaLinkRenderer.java
+++ /dev/null
@@ -1,46 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.link;
-
-import org.apache.tapestry.link.DefaultLinkRenderer;
-import org.apache.tapestry.link.ILinkRenderer;
-
-/**
- *  A subclass of {@link org.apache.tapestry.link.DefaultLinkRenderer} for
- *  the HTML area element.
- *
- *  @author David Solis
- *  @version $Id$
- *  @since 3.0
- **/
-public class AreaLinkRenderer extends DefaultLinkRenderer 
-{
-
-	/**
-	 *  A singleton for the area link. 
-	 **/
-
-	public static final ILinkRenderer SHARED_INSTANCE = new AreaLinkRenderer();
-
-	public String getElement() 
-	{
-		return "area";
-	}
-
-	public boolean getHasBody() 
-	{
-		return false;
-	}
-}
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/link/PopupLinkRenderer.java b/3.0.4/contrib/src/org/apache/tapestry/contrib/link/PopupLinkRenderer.java
deleted file mode 100644
index b079b6d..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/link/PopupLinkRenderer.java
+++ /dev/null
@@ -1,88 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.link;
-
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.engine.ILink;
-import org.apache.tapestry.link.DefaultLinkRenderer;
-
-/**
- *  This renderer emits javascript to launch the link in a window.
- *
- *  @author David Solis
- *  @version $Id$
- *  @since 3.0.1
- **/
-public class PopupLinkRenderer extends DefaultLinkRenderer
-{
-
-	private String _windowName;
-
-	private String _features;
-
-	public PopupLinkRenderer()
-	{
-	}
-
-	/**
-	 * Initializes the name and features for javascript window.open function.
-	 *
-	 * @param windowName the window name
-	 * @param features   the window features
-	 */
-	public PopupLinkRenderer(String windowName, String features)
-	{
-		_windowName = windowName;
-		_features = features;
-	}
-
-	/**
-	 * @see DefaultLinkRenderer#constructURL(org.apache.tapestry.engine.ILink, String, org.apache.tapestry.IRequestCycle)
-	 */
-	protected String constructURL(ILink link, String anchor, IRequestCycle cycle)
-	{
-      if (cycle.isRewinding()) {
-        return null;
-      }
-      
-		String url = link.getURL(anchor, true);
-		return "javascript: w = window.open(" + normalizeString(url) + ", " + normalizeString(getWindowName()) + ", " + normalizeString(getFeatures()) + "); w.focus();";
-	}
-
-	private String normalizeString(String str)
-	{
-		return str == null ? "''" : "'" + str + "'";
-	}
-
-	public String getWindowName()
-	{
-		return _windowName;
-	}
-
-	public void setWindowName(String windowName)
-	{
-		_windowName = windowName;
-	}
-
-	public String getFeatures()
-	{
-		return _features;
-	}
-
-	public void setFeatures(String features)
-	{
-		_features = features;
-	}
-}
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/palette/Palette.html b/3.0.4/contrib/src/org/apache/tapestry/contrib/palette/Palette.html
deleted file mode 100644
index 85e5095..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/palette/Palette.html
+++ /dev/null
@@ -1,50 +0,0 @@
-<!-- $Id$ -->
-
-<span jwcid="$content$">
-<table jwcid="@Any" element="table" class="ognl:tableClass">
-  <tr>
-  	<th class="available-header">
- <span jwcid="@RenderBlock" block="ognl:availableTitleBlock"/>
- <span jwcid="defaultAvailableTitleBlock@Block"><span key="title.available"/></span>
-</th>
-  	<td element="td" class="controls" rowspan="2">
-  	    <a jwcid="@Any" 
-  	    	element="a" 
-  	    	href="ognl:symbols.selectOnClickScript"><img jwcid="@Image"
-  	    		image="ognl:selectImage"
-  	    		name="ognl:symbols.selectImageName"
-  	    		alt="message:tooltip.select"/></a>
-
-    <a jwcid="@Any" element="a"
-    	href="ognl:symbols.deselectOnClickScript"><img jwcid="@Image"
-    		image="ognl:deselectImage"
-    		name="ognl:symbols.deselectImageName"
-    		alt="message:tooltip.deselect"/></a>
-    
-    <span jwcid="@Conditional" condition="ognl:sortUser">
-
-    <a jwcid="@Any" element="a"
-    	href="ognl:symbols.upOnClickScript"><img jwcid="@Image" 
-    		image="ognl:upImage"
-    		name="ognl:symbols.upImageName"
-    		alt="message:tooltip.moveup"/></a>
-
-    <a jwcid="@Any" element="a"
-    	href="ognl:symbols.downOnClickScript"><img jwcid="@Image"
-    		image="ognl:downImage"
-    		name="ognl:symbols.downImageName"
-    		alt="message:tooltip.movedown"/></a>
-    </span>
-
-    </td>
-  	<th class="selected-header">
- <span jwcid="@RenderBlock" block="ognl:selectedTitleBlock"/>
- <span jwcid="defaultSelectedTitleBlock@Block"><span key="title.selected"/></span>
-    </th>
-  </tr>
-  <tr>
-    <td class="available-cell"><select jwcid="@Delegator" delegate="ognl:availableColumn"/></td>
-    <td class="selected-cell"><select jwcid="@Delegator" delegate="ognl:selectedColumn"/></td>
-  </tr>
-</table>
-</span>
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/palette/Palette.java b/3.0.4/contrib/src/org/apache/tapestry/contrib/palette/Palette.java
deleted file mode 100644
index 330c312..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/palette/Palette.java
+++ /dev/null
@@ -1,583 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.palette;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.tapestry.ApplicationRuntimeException;
-import org.apache.tapestry.BaseComponent;
-import org.apache.tapestry.IAsset;
-import org.apache.tapestry.IEngine;
-import org.apache.tapestry.IForm;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.IResourceLocation;
-import org.apache.tapestry.IScript;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.components.Block;
-import org.apache.tapestry.engine.IScriptSource;
-import org.apache.tapestry.form.Form;
-import org.apache.tapestry.form.FormEventType;
-import org.apache.tapestry.form.IFormComponent;
-import org.apache.tapestry.form.IPropertySelectionModel;
-import org.apache.tapestry.html.Body;
-import org.apache.tapestry.request.RequestContext;
-import org.apache.tapestry.valid.IValidationDelegate;
-
-/**
- *  A component used to make a number of selections from a list.  The general look
- *  is a pair of &lt;select&gt; elements.  with a pair of buttons between them.
- *  The right element is a list of values that can be selected.  The buttons move
- *  values from the right column ("available") to the left column ("selected").
- *
- *  <p>This all takes a bit of JavaScript to accomplish (quite a bit), which means
- *  a {@link Body} component must wrap the Palette. If JavaScript is not enabled
- *  in the client browser, then the user will be unable to make (or change) any selections.
- *
- *  <p>Cross-browser compatibility is not perfect.  In some cases, the 
- *  {@link org.apache.tapestry.contrib.form.MultiplePropertySelection} component
- *  may be a better choice.
- * 
- *  <p><table border=1>
- * <tr>
- *    <td>Parameter</td>
- *    <td>Type</td>
- *    <td>Direction </td>
- *    <td>Required</td>
- *    <td>Default</td>
- *    <td>Description</td>
- * </tr>
- *
- *  <tr>
- *    <td>selected</td>
- *  <td>{@link List}</td>
- *  <td>in</td>
- *  <td>yes</td>
- *  <td>&nbsp;</td>
- *  <td>A List of selected values.  Possible selections are defined by the model; this
- *  should be a subset of the possible values.  This may be null when the
- *  component is renderred.  When the containing form is submitted,
- *  this parameter is updated with a new List of selected objects.
- *
- *  <p>The order may be set by the user, as well, depending on the
- *  sortMode parameter.</td> </tr>
- *
- * <tr>
- * <td>model</td>
- *  <td>{@link IPropertySelectionModel}</td>
- *  <td>in</td>
- *  <td>yes</td>
- *  <td>&nbsp;</td>
- *  <td>Works, as with a {@link org.apache.tapestry.form.PropertySelection} component, to define the
- *  possible values.
- *  </td> </tr>
- *
- *  <tr>
- *  <td>sort</td> 
- *  <td>{@link SortMode}</td> 
- *  <td>in</td>
- *  <td>no</td> 
- *  <td>{@link SortMode#NONE}</td>
- *  <td>
- *  Controls automatic sorting of the options. </td>
- *  </tr>
- *
- * <tr>
- *  <td>rows</td>
- *  <td>int</td> 
- *  <td>in</td> 
- *  <td>no</td> 
- *  <td>10</td>
- *  <td>The number of rows that should be visible in the Pallete's &lt;select&gt;
- *  elements.
- *  </td> </tr>
- *
- * <tr>
- *  <td>tableClass</td>
- *  <td>{@link String}</td> 
- *  <td>in</td>
- *  <td>no</td> 
- *  <td>tapestry-palette</td>
- *  <td>The CSS class for the table which surrounds the other elements of
- *  the Palette.</td> </tr>
- *
- * <tr>
- *  <td>selectedTitleBlock</td>
- *  <td>{@link Block}</td>
- *  <td>in</td> 
- *  <td>no</td> 
- *  <td>"Selected"</td>
- *  <td>If specified, allows a {@link Block} to be placed within
- *  the &lt;th&gt; reserved for the title above the selected items
- *  &lt;select&gt; (on the right).  This allows for images or other components to
- *  be placed there.  By default, the simple word <code>Selected</code>
- *  is used.</td> </tr>
- *
- * <tr>
- *  <td>availableTitleBlock</td>
- *  <td>{@link Block}</td>
- *  <td>in</td> 
- *  <td>no</td> 
- *  <td>"Available"</td>
- *  <td>As with selectedTitleBlock, but for the left column, of items
- *  which are available to be selected.  The default is the word
- *  <code>Available</code>. </td> </tr>
- *
- *  <tr>
- *  <td>selectImage
- * <br>selectDisabledImage
- * <br>deselectImage
- * <br>deselectDisabledImage
- * <br>upImage
- * <br>upDisabledImage
- * <br>downImage
- * <br>downDisabledImage
- *  </td>
- *  <td>{@link IAsset}</td>
- *  <td>in</td>
- *  <td>no</td> <td>&nbsp;</td>
- *  <td>If any of these are specified then they override the default images provided
- *  with the component.  This allows the look and feel to be customized relatively easily.
- *
- *  <p>The most common reason to replace the images is to deal with backgrounds.  The default
- *  images are anti-aliased against a white background.  If a colored or patterned background
- *  is used, the default images will have an ugly white fringe.  Until all browsers have full
- *  support for PNG (which has a true alpha channel), it is necessary to customize the images
- *  to match the background.
- *
- *      </td> </tr>
- *
- * </table>
- *
- * <p>A Palette requires some CSS entries to render correctly ... especially
- * the middle column, which contains the two or four buttons for moving selections
- * between the two columns.  The width and alignment of this column must be set
- * using CSS.  Additionally, CSS is commonly used to give the Palette columns
- * a fixed width, and to dress up the titles.  Here is an example of some CSS
- * you can use to format the palette component:
- * 
- * <pre>
- * TABLE.tapestry-palette TH
- * {
- *   font-size: 9pt;
- *   font-weight: bold;
- *   color: white;
- *   background-color: #330066;
- *   text-align: center;
- * }
- *
- * TD.available-cell SELECT
- * {
- *   font-weight: normal;
- *   background-color: #FFFFFF;
- *   width: 200px;
- * }
- * 
- * TD.selected-cell SELECT
- * {
- *   font-weight: normal;
- *   background-color: #FFFFFF;
- *   width: 200px;
- * }
- * 
- * TABLE.tapestry-palette TD.controls
- * {
- *   text-align: center;
- *   vertical-align: middle;
- *   width: 60px;
- * }
- *  </pre>
- *
- *  @author Howard Lewis Ship
- */
-
-public abstract class Palette extends BaseComponent implements IFormComponent
-{
-    private static final int DEFAULT_ROWS = 10;
-    private static final int MAP_SIZE = 7;
-    private static final String DEFAULT_TABLE_CLASS = "tapestry-palette";
-
-    /**
-     *  A set of symbols produced by the Palette script.  This is used to
-     *  provide proper names for some of the HTML elements (&lt;select&gt; and
-     *  &lt;button&gt; elements, etc.).
-     *
-     */
-
-    private Map _symbols;
-
-    /**
-     *  A cached copy of the script used with the component.
-     *
-     */
-
-    private IScript _script;
-
-    /** @since 3.0 **/
-    public abstract void setAvailableColumn(PaletteColumn column);
-
-    /** @since 3.0 **/
-    public abstract void setSelectedColumn(PaletteColumn column);
-
-    protected void finishLoad()
-    {
-        setSelectedTitleBlock((Block) getComponent("defaultSelectedTitleBlock"));
-        setAvailableTitleBlock((Block) getComponent("defaultAvailableTitleBlock"));
-
-        setSelectImage(getAsset("Select"));
-        setSelectDisabledImage(getAsset("SelectDisabled"));
-        setDeselectImage(getAsset("Deselect"));
-        setDeselectDisabledImage(getAsset("DeselectDisabled"));
-        setUpImage(getAsset("Up"));
-        setUpDisabledImage(getAsset("UpDisabled"));
-        setDownImage(getAsset("Down"));
-        setDownDisabledImage(getAsset("DownDisabled"));
-
-        setTableClass(DEFAULT_TABLE_CLASS);
-        setRows(DEFAULT_ROWS);
-        setSort(SortMode.NONE);
-    }
-
-    public abstract String getName();
-    public abstract void setName(String name);
-
-    public abstract IForm getForm();
-    public abstract void setForm(IForm form);
-
-    protected void renderComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        IForm form = Form.get(getPage().getRequestCycle());
-
-        if (form == null)
-            throw new ApplicationRuntimeException(
-                "Palette component must be wrapped by a Form.",
-                this,
-                null,
-                null);
-
-        setForm(form);
-
-        IValidationDelegate delegate = form.getDelegate();
-
-        if (delegate != null)
-            delegate.setFormComponent(this);
-
-        setName(form.getElementId(this));
-
-        if (form.isRewinding())
-            handleSubmission(cycle);
-
-        // Don't do any additional work if rewinding
-        // (some other action or form on the page).
-
-        if (!cycle.isRewinding())
-        {
-            // Lots of work to produce JavaScript and HTML for this sucker.
-
-            _symbols = new HashMap(MAP_SIZE);
-
-            runScript(cycle);
-
-            // Output symbol 'formSubmitFunctionName' is the name
-            // of a JavaScript function to execute when the form
-            // is submitted.  This is also key to the operation
-            // of the PropertySelection.
-
-            form.addEventHandler(
-                FormEventType.SUBMIT,
-                (String) _symbols.get("formSubmitFunctionName"));
-
-            constructColumns();
-        }
-
-        super.renderComponent(writer, cycle);
-    }
-
-    protected void cleanupAfterRender(IRequestCycle cycle)
-    {
-        _symbols = null;
-
-        setAvailableColumn(null);
-        setSelectedColumn(null);
-
-        super.cleanupAfterRender(cycle);
-    }
-
-    /**
-     *  Executes the associated script, which generates all the JavaScript to
-     *  support this Palette.
-     *
-     */
-    private void runScript(IRequestCycle cycle)
-    {
-        // Get the script, if not already gotten.  Scripts are re-entrant, so it is
-        // safe to share this between instances of Palette.
-
-        if (_script == null)
-        {
-            IEngine engine = getPage().getEngine();
-            IScriptSource source = engine.getScriptSource();
-
-            IResourceLocation scriptLocation =
-                getSpecification().getSpecificationLocation().getRelativeLocation("Palette.script");
-
-            _script = source.getScript(scriptLocation);
-        }
-
-        Body body = Body.get(cycle);
-        if (body == null)
-            throw new ApplicationRuntimeException(
-                "Palette component must be wrapped by a Body.",
-                this,
-                null,
-                null);
-
-        setImage(body, cycle, "selectImage", getSelectImage());
-        setImage(body, cycle, "selectDisabledImage", getSelectDisabledImage());
-        setImage(body, cycle, "deselectImage", getDeselectImage());
-        setImage(body, cycle, "deselectDisabledImage", getDeselectDisabledImage());
-
-        if (isSortUser())
-        {
-            setImage(body, cycle, "upImage", getUpImage());
-            setImage(body, cycle, "upDisabledImage", getUpDisabledImage());
-            setImage(body, cycle, "downImage", getDownImage());
-            setImage(body, cycle, "downDisabledImage", getDownDisabledImage());
-        }
-
-        _symbols.put("palette", this);
-
-        _script.execute(cycle, body, _symbols);
-    }
-
-    /**
-     *  Extracts its asset URL, sets it up for
-     *  preloading, and assigns the preload reference as a script symbol.
-     *
-     */
-    private void setImage(Body body, IRequestCycle cycle, String symbolName, IAsset asset)
-    {
-        String URL = asset.buildURL(cycle);
-        String reference = body.getPreloadedImageReference(URL);
-
-        _symbols.put(symbolName, reference);
-    }
-
-    public Map getSymbols()
-    {
-        return _symbols;
-    }
-
-    /**
-     *  Constructs a pair of {@link PaletteColumn}s: the available and selected options.
-     *
-     */
-    private void constructColumns()
-    {
-        // Build a Set around the list of selected items.
-
-        List selected = getSelected();
-
-        if (selected == null)
-            selected = Collections.EMPTY_LIST;
-
-        SortMode sortMode = getSort();
-
-        boolean sortUser = sortMode == SortMode.USER;
-
-        List selectedOptions = null;
-
-        if (sortUser)
-        {
-            int count = selected.size();
-            selectedOptions = new ArrayList(count);
-
-            for (int i = 0; i < count; i++)
-                selectedOptions.add(null);
-        }
-
-        PaletteColumn availableColumn =
-            new PaletteColumn((String) _symbols.get("availableName"), getRows());
-        PaletteColumn selectedColumn = new PaletteColumn(getName(), getRows());
-
-        // Each value specified in the model will go into either the selected or available
-        // lists.
-
-        IPropertySelectionModel model = getModel();
-
-        int count = model.getOptionCount();
-
-        for (int i = 0; i < count; i++)
-        {
-            Object optionValue = model.getOption(i);
-
-            PaletteOption o = new PaletteOption(model.getValue(i), model.getLabel(i));
-
-            int index = selected.indexOf(optionValue);
-            boolean isSelected = index >= 0;
-
-            if (sortUser && isSelected)
-            {
-                selectedOptions.set(index, o);
-                continue;
-            }
-
-            PaletteColumn c = isSelected ? selectedColumn : availableColumn;
-
-            c.addOption(o);
-        }
-
-        if (sortUser)
-        {
-            Iterator i = selectedOptions.iterator();
-            while (i.hasNext())
-            {
-                PaletteOption o = (PaletteOption) i.next();
-                selectedColumn.addOption(o);
-            }
-        }
-
-        if (sortMode == SortMode.VALUE)
-        {
-            availableColumn.sortByValue();
-            selectedColumn.sortByValue();
-        }
-        else
-            if (sortMode == SortMode.LABEL)
-            {
-                availableColumn.sortByLabel();
-                selectedColumn.sortByLabel();
-            }
-
-        setAvailableColumn(availableColumn);
-        setSelectedColumn(selectedColumn);
-    }
-
-    private void handleSubmission(IRequestCycle cycle)
-    {
-        RequestContext context = cycle.getRequestContext();
-        String[] values = context.getParameters(getName());
-
-        int count = Tapestry.size(values);
-
-        // Build a new ArrayList and fill it with the selected 
-        // objects, if any. 
-
-        List selected = new ArrayList(count);
-        IPropertySelectionModel model = getModel();
-
-        for (int i = 0; i < count; i++)
-        {
-            String value = values[i];
-            Object option = model.translateValue(value);
-
-            selected.add(option);
-        }
-
-        setSelected(selected);
-    }
-
-    public boolean isSortUser()
-    {
-        return getSort() == SortMode.USER;
-    }
-
-    /**
-     *  Returns null, but may make sense to implement a displayName parameter.
-     * 
-     */
-    public String getDisplayName()
-    {
-        return null;
-    }
-
-    public abstract Block getAvailableTitleBlock();
-
-    public abstract void setAvailableTitleBlock(Block availableTitleBlock);
-
-    public abstract IAsset getDeselectDisabledImage();
-
-    public abstract void setDeselectDisabledImage(IAsset deselectDisabledImage);
-
-    public abstract IAsset getDeselectImage();
-
-    public abstract void setDeselectImage(IAsset deselectImage);
-
-    public abstract IAsset getDownDisabledImage();
-
-    public abstract void setDownDisabledImage(IAsset downDisabledImage);
-
-    public abstract IAsset getDownImage();
-
-    public abstract void setDownImage(IAsset downImage);
-
-    public abstract IPropertySelectionModel getModel();
-
-    public abstract int getRows();
-
-    public abstract void setRows(int rows);
-
-    public abstract IAsset getSelectDisabledImage();
-
-    public abstract void setSelectDisabledImage(IAsset selectDisabledImage);
-
-    public abstract Block getSelectedTitleBlock();
-
-    public abstract void setSelectedTitleBlock(Block selectedTitleBlock);
-
-    public abstract IAsset getSelectImage();
-
-    public abstract void setSelectImage(IAsset selectImage);
-
-    public abstract SortMode getSort();
-
-    public abstract void setSort(SortMode sort);
-
-    public abstract void setTableClass(String tableClass);
-
-    public abstract IAsset getUpDisabledImage();
-
-    public abstract void setUpDisabledImage(IAsset upDisabledImage);
-
-    public abstract IAsset getUpImage();
-
-    public abstract void setUpImage(IAsset upImage);
-
-    /**
-     *  Returns false.  Palette components are never disabled.
-     * 
-     *  @since 2.2
-     * 
-     */
-
-    public boolean isDisabled()
-    {
-        return false;
-    }
-
-    /** @since 2.2 **/
-
-    public abstract List getSelected();
-
-    /**  @since 2.2 **/
-
-    public abstract void setSelected(List selected);
-
-}
\ No newline at end of file
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/palette/Palette.jwc b/3.0.4/contrib/src/org/apache/tapestry/contrib/palette/Palette.jwc
deleted file mode 100644
index 8b130c9..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/palette/Palette.jwc
+++ /dev/null
@@ -1,88 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!--  $Id$ -->
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<component-specification class="org.apache.tapestry.contrib.palette.Palette" 
-	allow-body="no" allow-informal-parameters="no">
-	
-  <description>
-  A complex component used to manage multiple selection of items from a list.
-  </description>
-  
-  <parameter name="selectedTitleBlock" 
-  	type="org.apache.tapestry.components.Block" 
-  	required="no"
-  	direction="in"/>
-  
-  <parameter name="availableTitleBlock" 
-   	type="org.apache.tapestry.components.Block" 
-   	required="no"
-   	direction="in"/>
-   	
-  <parameter name="model" 
-  	type="org.apache.tapestry.form.IPropertySelectionModel" 
-  	required="yes"
-  	direction="in"/>
-  
-  <parameter name="selected" type="java.util.List" 
-  	required="yes" direction="form"/>
-  
-  <parameter name="sort" 
-  	type="org.apache.tapestry.contrib.palette.SortMode" 
-  	required="no"
-  	direction="in"/>
-  
-  <parameter name="rows" 
-   	type="int" 
-   	required="no"
-   	direction="in"/>
-  
-  <parameter name="tableClass" 
-  	type="java.lang.String" 
-  	required="no"
-  	direction="in"/>
-  
-  
-  <parameter name="selectImage" type="org.apache.tapestry.IAsset" direction="in"/>
-  <parameter name="selectDisabledImage" type="org.apache.tapestry.IAsset" direction="in"/>
-  <parameter name="deselectImage" type="org.apache.tapestry.IAsset" direction="in"/>
-  <parameter name="deselectDisabledImage" type="org.apache.tapestry.IAsset" direction="in"/>
-  <parameter name="upImage" type="org.apache.tapestry.IAsset" direction="in"/>
-  <parameter name="upDisabledImage" type="org.apache.tapestry.IAsset" direction="in"/>
-  <parameter name="downImage" type="org.apache.tapestry.IAsset" direction="in"/>
-  <parameter name="downDisabledImage" type="org.apache.tapestry.IAsset" direction="in"/>
-    
-  <property-specification name="name" type="java.lang.String"/>
-  <property-specification name="form" type="org.apache.tapestry.IForm"/>
-  
-  <property-specification name="selectedColumn" type="org.apache.tapestry.contrib.palette.PaletteColumn"/>
-  <property-specification name="availableColumn" type="org.apache.tapestry.contrib.palette.PaletteColumn"/>
-  
-  
-  <private-asset name="Select" resource-path="select_right.gif"/>
-  <private-asset name="SelectDisabled" resource-path="select_right_off.gif"/>
-  <private-asset name="Deselect" resource-path="deselect_left.gif"/>
-  <private-asset name="DeselectDisabled" resource-path="deselect_left_off.gif"/>
-  <private-asset name="Up" resource-path="move_up.gif"/>
-  <private-asset name="UpDisabled" resource-path="move_up_off.gif"/>
-  <private-asset name="Down" resource-path="move_down.gif"/>
-  <private-asset name="DownDisabled" resource-path="move_down_off.gif"/>
-  
-</component-specification>
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/palette/Palette.properties b/3.0.4/contrib/src/org/apache/tapestry/contrib/palette/Palette.properties
deleted file mode 100644
index 6056da7..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/palette/Palette.properties
+++ /dev/null
@@ -1,8 +0,0 @@
-# $Id$
-title.available=Available
-title.selected=Selected
-
-tooltip.select=Select
-tooltip.deselect=Deselect
-tooltip.moveup=Move Up
-tooltip.movedown=Move Down
\ No newline at end of file
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/palette/Palette.script b/3.0.4/contrib/src/org/apache/tapestry/contrib/palette/Palette.script
deleted file mode 100644
index 848346c..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/palette/Palette.script
+++ /dev/null
@@ -1,349 +0,0 @@
-<?xml version="1.0"?>
-<!-- $Id$ -->
-<!DOCTYPE script PUBLIC
-	"-//Apache Software Foundation//Tapestry Script Specification 3.0//EN"
-	"http://jakarta.apache.org/tapestry/dtd/Script_3_0.dtd">
-<script>
-<!-- 
-
-input symbols:
-  palette - the Palette instance
-  selectImage - reference to the select image
-  selectDisabledImage - referece to the disabled select image  
-  deselectImage - reference to the deselect image
-  deselectDisabledImage - reference to the disbled deselect image
-  upImage - reference to the move up image
-  upDisabledImage - reference to the disabled move up image
-  downImage - reference to the move down image
-  downDisabledImage - reference to the disabled move down image
-
-Note: "reference" means the result of Body.getPreloadedImageReference().  The
-up and down images are only needed if user sorting is enabled.
-
-output symbols:
-  formSubmitFunctionName - name of a function to be executed when the form submits
-  availableName - the name of the available element
-  selectImageName - the name to use for the select image (inside the select link)
-  selectOnClickScript - the script to assign to the select link's onclick attribute
-  deselectOnClickScript - the script to assign to the deselect link's onclick attribute
-  deselectImageName - the name to use for the deselect image (inside the deselect link)
-  upImageName - the name of the up image (inside the up link)
-  downImageName the name of the move down image (inside the down link)
-  upOnClickScript - the script to assign to the up link's onclick attribute
-  downOnClickScript - the script to assign to the down link's onclick attribute
--->
-
-<include-script resource-path="/org/apache/tapestry/html/PracticalBrowserSniffer.js"/>
-<include-script resource-path="/org/apache/tapestry/contrib/palette/PaletteFunctions.js"/>
-
-<input-symbol key="palette" class="org.apache.tapestry.contrib.palette.Palette" required="yes"/>
-<input-symbol key="selectImage" class="java.lang.String" required="yes"/>
-<input-symbol key="selectDisabledImage" class="java.lang.String" required="yes"/>
-<input-symbol key="deselectImage" class="java.lang.String" required="yes"/>
-<input-symbol key="deselectDisabledImage" class="java.lang.String" required="yes"/>
-<input-symbol key="upImage" class="java.lang.String"/>
-<input-symbol key="upDisabledImage" class="java.lang.String"/>
-<input-symbol key="downImage" class="java.lang.String"/>
-<input-symbol key="downDisabledImage" class="java.lang.String"/>
-
-<set key="formName" expression="palette.form.name"/>
-<set key="name" expression="palette.name"/>
-<set key="sortLabel" expression="palette.sort == @org.apache.tapestry.contrib.palette.SortMode@LABEL"/>
-<set key="sortValue" expression="palette.sort == @org.apache.tapestry.contrib.palette.SortMode@VALUE"/>
-<set key="sortUser" expression="palette.sort == @org.apache.tapestry.contrib.palette.SortMode@USER"/>
-
-
-<!-- baseName - base name from which other names are generated -->
-
-<let key="baseName" unique="yes">
-  ${name}
-</let>
-
-<let key="buttons">
-  ${baseName}$buttons
-</let>
-
-<let key="selectDisabled">
-  ${buttons}.selectDisabled
-</let>
-
-<let key="deselectDisabled">
-  ${buttons}.deselectDisabled
-</let>
-
-<let key="upDisabled">
-  ${buttons}.upDisabled
-</let>
-
-<let key="downDisabled">
-  ${buttons}.downDisabled
-</let>
-
-<let key="availableName">
-  ${name}$avail
-</let>
-
-<let key="updateFunctionName">
-  update_${baseName}
-</let>
-
-<let key="selectFunctionName">
-  select_${baseName}
-</let>
-
-<let key="selectOnClickScript">
-  javascript:${selectFunctionName}();
-</let>
-
-<let key="deselectFunctionName">
-  deselect_${baseName}
-</let>
-
-<let key="deselectOnClickScript">
-  javascript:${deselectFunctionName}();
-</let>
-
-<let key="formSubmitFunctionName">
-  onsubmit_${baseName}
-</let>
-
-<let key="selectImageName">
-  ${baseName}$selectImage
-</let>
-
-<let key="selectImagePath">
-  document.${selectImageName}
-</let>
-
-<let key="deselectImageName">
-  ${baseName}$deselectImage
-</let>
-
-<let key="deselectImagePath">
-  document.${deselectImageName}
-</let>
-
-<let key="formPath">
-  document.${formName}
-</let>
-
-<let key="selectedPath">
-  ${formPath}.${name}
-</let>
-
-<let key="selectedChangeFunctionName">
-  onChange_${baseName}_selected
-</let>
-
-<let key="availablePath">
-  ${formPath}.${availableName}
-</let>
-
-<let key="availableChangeFunctionName">
-  onChange_${baseName}_available
-</let>
-
-
-<let key="upImageName">
-  ${baseName}$upimage
-</let>
-
-<let key="upImagePath">
-  document.${upImageName}
-</let>
-
-<let key="downImageName">
-  ${baseName}$downimage
-</let>
-
-<let key="downImagePath">
-  document.${downImageName}
-</let>
-
-<let key="moveUpFunctionName">
-  moveup_${baseName}
-</let>
-
-<let key="upOnClickScript">
-  javascript:${moveUpFunctionName}();
-</let>
-
-<let key="moveDownFunctionName">
-  movedown_${baseName}
-</let>
-
-<let key="downOnClickScript">
-  javascript:${moveDownFunctionName}();
-</let>
-
-
-<body>
-
-<!-- A variable that is used to track which of the buttons are enabled
-     or disabled. All of the buttons are disabled until the page finishes
-     loading, at which point the update function will determine which
-     can be used. -->
-     
-var ${buttons} = new Object();
-${selectDisabled} = true;
-${deselectDisabled} = true;
-<if expression="sortUser">
-${upDisabled} = true;
-${downDisabled} = true;
-</if>
-
-function ${updateFunctionName}()
-{
-  var disabled = ${availablePath}.selectedIndex &lt; 0;
-  
-  ${selectDisabled} = disabled;
- 
-  if (document.images)
-    ${selectImagePath}.src =
-      disabled ? ${selectDisabledImage}
-               : ${selectImage};
-
-  var selected = ${selectedPath};
-  var index = selected.selectedIndex;
-
-  disabled = index &lt; 0;
-  ${deselectDisabled} = disabled;
- 
-  if (document.images)
-    ${deselectImagePath}.src =
-      disabled ? ${deselectDisabledImage}
-               : ${deselectImage};   
-<if expression="sortUser">
-  var upImage = ${upImagePath};
-  var downImage = ${downImagePath};
-  
-  ${upDisabled} = true;
-  ${downDisabled} = true;
-  
-  if (document.images)
-  {
-    upImage.src = ${upDisabledImage};
-    downImage.src = ${downDisabledImage};
-  }
-  
-  <!-- If there's no selection in the "selected" column, then leave
-       both buttons disabled. -->
-       
-  if (disabled)
-    return;
- 
-  <!-- Search for a second selected item -->
-  
-  for (var i = index + 1; i &lt; selected.options.length; i++)
-  {
-    <!-- Found a second selected option, so leave buttons disabled. -->
-    if (selected.options[i].selected)
-    return;
-  }
-  
-  ${upDisabled} = (index == 0);
-  ${downDisabled} = (index == selected.options.length - 1);  
-  
-  if (document.images)
-  {
-    if (!${upDisabled})
-      upImage.src = ${upImage};
-
-    if (!${downDisabled})
-      downImage.src = ${downImage};
-  }
-</if>  
-}
-
-function ${selectFunctionName}()
-{
- if (${selectDisabled})
-    return;
-    
-  var source = ${availablePath};
-  var target = ${selectedPath};
-     
-  palette_transfer_selections(source, target);
-<if expression="sortLabel">
-  palette_sort_by_label(target);
-</if>
-<if expression="sortValue">
-  palette_sort_by_value(target);
-</if>
-  ${updateFunctionName}();
-}
-
-function ${deselectFunctionName}()
-{
-  if (${deselectDisabled})
-    return;
-  
-  var source = ${selectedPath};
-  var target = ${availablePath};
-  
-  palette_transfer_selections(source, target);
-<if expression="sortLabel">
-  palette_sort_by_label(target);
-</if>
-<if expression="sortValue">
-  palette_sort_by_value(target);
-</if>
-  ${updateFunctionName}();  
-}
-
-function ${formSubmitFunctionName}()
-{
-  palette_clear_selections(${availablePath});
-  palette_select_all(${selectedPath});
-  
-  return true;
-}
-<if expression="sortUser">
-function ${moveUpFunctionName}()
-{
-  if (${upDisabled})
-    return;
-    
-  var element = ${selectedPath};
-  var options = element.options;
-    
-  palette_swap_options(options, element.selectedIndex, element.selectedIndex - 1);
-  
-  ${updateFunctionName}();
-}
-
-function ${moveDownFunctionName}()
-{
-  if (${downDisabled})
-    return;
-    
-  var element = ${selectedPath};
-  var options = element.options;
-  
-  palette_swap_options(options, element.selectedIndex, element.selectedIndex + 1);
-  
-  ${updateFunctionName}();
-}
-</if>
-function ${selectedChangeFunctionName}()
-{
-  palette_clear_selections(${availablePath});
-  ${updateFunctionName}();
-}
-
-function ${availableChangeFunctionName}()
-{
-  palette_clear_selections(${selectedPath});
-  ${updateFunctionName}();
-}
-</body>
-
-<initialization>
-
-${selectedPath}.onchange = ${selectedChangeFunctionName};
-${selectedPath}.ondblclick = ${deselectFunctionName};
-${availablePath}.onchange = ${availableChangeFunctionName};
-${availablePath}.ondblclick = ${selectFunctionName};
-
-</initialization>
-</script>
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/palette/PaletteColumn.java b/3.0.4/contrib/src/org/apache/tapestry/contrib/palette/PaletteColumn.java
deleted file mode 100644
index 89aae9a..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/palette/PaletteColumn.java
+++ /dev/null
@@ -1,118 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.palette;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.List;
-
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRender;
-import org.apache.tapestry.IRequestCycle;
-
-/**
- * One of the two columns in a Palette component: the left column lists
- * available options, the right column lists the selected columns.
- *
- * @author Howard Lewis Ship
- * @version $Id$
- */
-public class PaletteColumn implements IRender
-{
-    private String _name;
-    private int _rows;
-    private List _options = new ArrayList();
-
-    private static class ValueComparator implements Comparator
-    {
-        public int compare(Object o1, Object o2)
-        {
-            PaletteOption option1 = (PaletteOption) o1;
-            PaletteOption option2 = (PaletteOption) o2;
-
-            return option1.getValue().compareTo(option2.getValue());
-        }
-    }
-
-    private static class LabelComparator implements Comparator
-    {
-        public int compare(Object o1, Object o2)
-        {
-            PaletteOption option1 = (PaletteOption) o1;
-            PaletteOption option2 = (PaletteOption) o2;
-
-            return option1.getLabel().compareTo(option2.getLabel());
-        }
-    }
-
-	/**
-	 * @param name the name of the column (the name attribute of the &lt;select&gt;)
-	 * @param rows the number of visible rows (the size attribute of the &lt;select&gt;)
-	 */
-	public PaletteColumn(String name, int rows)
-	{
-		_name = name;
-		_rows = rows;
-	}
-
-    public void addOption(PaletteOption option)
-    {
-        _options.add(option);
-    }
-
-    /**
-     * Sorts the options by value (the hidden value for the option
-     * that represents the object value). This should be invoked
-     * before rendering this PaletteColumn.
-     */
-    public void sortByValue()
-    {
-        Collections.sort(_options, new ValueComparator());
-    }
-
-    /**
-     * Sorts the options by the label visible to the user. This should be invoked
-     * before rendering this PaletteColumn.
-     */
-    public void sortByLabel()
-    {
-        Collections.sort(_options, new LabelComparator());
-    }
-
-    /**
-     * Renders the &lt;select&gt; and &lt;option&gt; tags for
-     * this column.
-     */
-    public void render(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        writer.begin("select");
-        writer.attribute("multiple", "multiple");
-        writer.attribute("name", _name);
-        writer.attribute("size", _rows);
-        writer.println();
-
-        int count = _options.size();
-        for (int i = 0; i < count; i++)
-        {
-            PaletteOption o = (PaletteOption) _options.get(i);
-
-            o.render(writer, cycle);
-        }
-
-        writer.end();
-    }
-
-}
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/palette/PaletteFunctions.js b/3.0.4/contrib/src/org/apache/tapestry/contrib/palette/PaletteFunctions.js
deleted file mode 100644
index 4973536..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/palette/PaletteFunctions.js
+++ /dev/null
@@ -1,178 +0,0 @@
-// $Id: PaletteFunctions.js,v 1.3 2002/05/03 20:03:06 hship Exp $

-// Requires: /org/apache/tapestry/html/PracticalBrowserSniffer.js

-

-function palette_clear_selections(element)

-{

-  var options = element.options;

-  

-  for (var i = 0; i < options.length; i++)

-    options[i].selected = false;

-}

-

-function palette_select_all(element)

-{

-  var options = element.options;

-

-  for (var i = 0; i < options.length; i++)

-    options[i].selected = true;

-}

-

-function palette_sort(element, sorter)

-{

-  var options = element.options;

-  var list = new Array();

-  var index = 0;

-  var isNavigator = (navigator.family == "nn4" || navigator.family == "gecko");

-  

-  while (options.length > 0)

-  {

-    var option = options[0];

-        

-    if (isNavigator)

-    {

-      // Can't transfer option in nn4, nn6

-      

-     if (navigator.family == 'gecko')

-      	var copy = document.createElement("OPTION");

-     else

-        var copy = new Option(option.text, option.value);

-

-      	copy.text = option.text;

-      	copy.value = option.value;

-      	copy.selected = options.selected;

-      	

-      list[index++] = copy;

-    }

-    else

-      list[index++] = option;

-

-    

-    options[0] = null;

-  }

-  

-  list.sort(sorter);

-  

-  for (var i = 0; i < list.length; i++)

-  {

-    options[i] = list[i]; 

-  }

-

-

-}

-

-function palette_label_sorter(a, b)

-{

-  var a_text = a.text;

-  var b_text = b.text;

-  

-  if (a_text == b_text)

-    return 0;

-    

-  if (a_text < b.text)

-    return -1;

-    

-  return 1;

-}

-

-function palette_sort_by_label(element)

-{

-  palette_sort(element, palette_label_sorter);

-}

-

-function palette_value_sorter(a, b)

-{

-  var a_value = a.value;

-  var b_value = b.value;

-  

-  if (a_value == b_value)

-    return 0;

-    

-  if (a_value < b_value)

-    return -1;

-    

-  return 1;

-}

-

-function palette_sort_by_value(element)

-{

-  palette_sort(element, palette_value_sorter);

-}

-  

-function palette_transfer_selections(source, target)

-{

-  var sourceOptions = source.options;

-  var targetOptions = target.options;

-  

-  var targetIndex = target.selectedIndex;

-  var offset = 0;

-  

-  palette_clear_selections(target);

-  

-  for (var i = 0; i < sourceOptions.length; i++)

-  {

-    var option = sourceOptions[i];

-    

-    if (option.selected)

-    {

-

-       if (navigator.family == 'nn4' || navigator.family == 'gecko')

-       {

-           // Can't share options between selects in NN4

-           

-           var newOption = new Option(option.text, option.value, false, true);

- 

-           sourceOptions[i] = null;

-      

-          // Always added to end in NN4

-                     

-          targetOptions[targetOptions.length] = newOption;

-       }

-       else

-       {  

-         sourceOptions.remove(i);

-         

-         if (targetIndex < 0)

-           targetOptions.add(option);

-         else

-           targetOptions.add(option, targetIndex + offset++);

-      }

-    

-      i--;

-    }

-  }

-

-}

-

-function palette_swap_options(options, selectedIndex, targetIndex)

-{

-  var option = options[selectedIndex];

-

-  // It's very hard to reorder options in NN4

-  

-  if (navigator.family == 'nn4' || navigator.family == 'gecko')

-  {

-    var swap = options[targetIndex];

-    

-    var hold = swap.text;

-    swap.text = option.text;

-    option.text = hold;

-    

-    hold = swap.value;

-    swap.value = option.value;

-    option.value = hold;

-    

-    hold = swap.selected;

-    swap.selected = option.selected;

-    option.selected = hold;

-    

-    // defaultSelected isn't relevant to the Palette

-    

-    return;

-  }

-  

-  // Sensible browsers ...

-  

-  options.remove(selectedIndex);

-  options.add(option, targetIndex);

-}

-

diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/palette/PaletteOption.java b/3.0.4/contrib/src/org/apache/tapestry/contrib/palette/PaletteOption.java
deleted file mode 100644
index 4c2d478..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/palette/PaletteOption.java
+++ /dev/null
@@ -1,58 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.palette;
-
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRender;
-import org.apache.tapestry.IRequestCycle;
-
-/**
- * Used to hold options editable by a Palette component, so that they may
- * be sorted into an appropriate order.
- *
- * @author Howard Lewis Ship
- * @version $Id$
- */
-public class PaletteOption implements IRender
-{
-    private String _value;
-    private String _label;
-
-    public PaletteOption(String value, String label)
-    {
-        _value = value;
-        _label = label;
-    }
-
-    public void render(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        writer.begin("option");
-        writer.attribute("value", _value);
-        writer.print(_label);
-        writer.end(); // <option>
-        writer.println();
-    }
-
-    public String getLabel()
-    {
-        return _label;
-    }
-
-    public String getValue()
-    {
-        return _value;
-    }
-
-}
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/palette/SortMode.java b/3.0.4/contrib/src/org/apache/tapestry/contrib/palette/SortMode.java
deleted file mode 100644
index ab8c082..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/palette/SortMode.java
+++ /dev/null
@@ -1,64 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.palette;
-
-import org.apache.commons.lang.enum.Enum;
-
-/**
- *  Defines different sorting strategies for the {@link Palette} component.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- * 
- **/
-
-public class SortMode extends Enum
-{
-    /**
-     *  Sorting is not relevant and no sort controls should be visible.
-     *
-     **/
-
-    public static final SortMode NONE = new SortMode("NONE");
-
-    /**
-     * Options should be sorted by their label.
-     *
-     **/
-
-    public static final SortMode LABEL = new SortMode("LABEL");
-
-    /**
-     *  Options should be sorted by thier value.
-     *
-     **/
-
-    public static final SortMode VALUE = new SortMode("VALUE");
-
-    /**
-     *  The user controls sort order; additional controls are added
-     *  to allow the user to control the order of options in the
-     *  selected list.
-     *
-     **/
-
-    public static final SortMode USER = new SortMode("USER");
-
-    private SortMode(String name)
-    {
-        super(name);
-    }
-
-}
\ No newline at end of file
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/palette/deselect_left.gif b/3.0.4/contrib/src/org/apache/tapestry/contrib/palette/deselect_left.gif
deleted file mode 100644
index 2940e01..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/palette/deselect_left.gif
+++ /dev/null
Binary files differ
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/palette/deselect_left_off.gif b/3.0.4/contrib/src/org/apache/tapestry/contrib/palette/deselect_left_off.gif
deleted file mode 100644
index 84dc945..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/palette/deselect_left_off.gif
+++ /dev/null
Binary files differ
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/palette/move_down.gif b/3.0.4/contrib/src/org/apache/tapestry/contrib/palette/move_down.gif
deleted file mode 100644
index 8fb0088..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/palette/move_down.gif
+++ /dev/null
Binary files differ
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/palette/move_down_off.gif b/3.0.4/contrib/src/org/apache/tapestry/contrib/palette/move_down_off.gif
deleted file mode 100644
index 174baeb..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/palette/move_down_off.gif
+++ /dev/null
Binary files differ
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/palette/move_up.gif b/3.0.4/contrib/src/org/apache/tapestry/contrib/palette/move_up.gif
deleted file mode 100644
index 711c86a..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/palette/move_up.gif
+++ /dev/null
Binary files differ
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/palette/move_up_off.gif b/3.0.4/contrib/src/org/apache/tapestry/contrib/palette/move_up_off.gif
deleted file mode 100644
index e23a43f..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/palette/move_up_off.gif
+++ /dev/null
Binary files differ
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/palette/select_right.gif b/3.0.4/contrib/src/org/apache/tapestry/contrib/palette/select_right.gif
deleted file mode 100644
index 74e90c3..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/palette/select_right.gif
+++ /dev/null
Binary files differ
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/palette/select_right_off.gif b/3.0.4/contrib/src/org/apache/tapestry/contrib/palette/select_right_off.gif
deleted file mode 100644
index 452ce50..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/palette/select_right_off.gif
+++ /dev/null
Binary files differ
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/popup/PopupLink.html b/3.0.4/contrib/src/org/apache/tapestry/contrib/popup/PopupLink.html
deleted file mode 100644
index 63d5ed5..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/popup/PopupLink.html
+++ /dev/null
@@ -1,3 +0,0 @@
-<!-- $Id$ -->
-<span jwcid="popoutScript"/>
-<span jwcid="link"><span jwcid="wrapped"/></span>
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/popup/PopupLink.java b/3.0.4/contrib/src/org/apache/tapestry/contrib/popup/PopupLink.java
deleted file mode 100644
index 6810077..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/popup/PopupLink.java
+++ /dev/null
@@ -1,128 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.popup;
-
-import java.io.UnsupportedEncodingException;
-
-import org.apache.commons.codec.net.URLCodec;
-import org.apache.tapestry.ApplicationRuntimeException;
-import org.apache.tapestry.BaseComponent;
-import org.apache.tapestry.IBinding;
-import org.apache.tapestry.Tapestry;
-
-/**
- * This component provides a popup link to launch a new window using a given
- * href, windowName and windowFeatures for the javascript function:
- * <tt>window.open(URL, windowName, windowFeatures)</tt>.
- *
- *  [<a href="../../../../../../ComponentReference/contrib.PopupLink.html">Component Reference</a>]
- * 
- * @version $Id$ 
- * @author Joe Panico
- */
-public class PopupLink extends BaseComponent
-{
-	/** The default popup window name 'popuplink_window'. */
-	public static final String DEFAULT_WINDOW_NAME = "popuplink_window";
-    private static final URLCodec _urlCodec = new URLCodec();
-
-	//	Instance variables
-	private IBinding _hrefBinding;
-	private IBinding _windowNameBinding;
-	private IBinding _featuresBinding;
-
-	public IBinding getHrefBinding()
-	{
-		return _hrefBinding;
-	}
-
-	public void setHrefBinding(IBinding hrefBinding)
-	{
-		_hrefBinding = hrefBinding;
-	}
-
-	public IBinding getWindowNameBinding()
-	{
-		return _windowNameBinding;
-	}
-
-	public void setWindowNameBinding(IBinding windowNameBinding)
-	{
-		_windowNameBinding = windowNameBinding;
-	}
-
-	public IBinding getFeaturesBinding()
-	{
-		return _featuresBinding;
-	}
-
-	public void setFeaturesBinding(IBinding featuresBinding)
-	{
-		_featuresBinding = featuresBinding;
-	}
-
-	public String getHref()
-	{
-		IBinding aHrefBinding = getHrefBinding();
-
-		if (aHrefBinding != null)
-		{
-            String encoding = getPage().getEngine().getOutputEncoding();
-            try
-            {
-                return _urlCodec.encode(aHrefBinding.getString(), encoding);
-            }
-            catch (UnsupportedEncodingException e)
-            {
-                throw new ApplicationRuntimeException(
-                    Tapestry.format("illegal-encoding", encoding),
-                    e);
-            }
-		}
-
-		return null;
-	}
-
-	public String getWindowName()
-	{
-		IBinding aWindowNameBinding = getWindowNameBinding();
-		if (aWindowNameBinding != null)
-		{
-			return aWindowNameBinding.getString();
-		}
-		else
-		{
-			return DEFAULT_WINDOW_NAME;
-		}
-	}
-
-	public String getFeatures()
-	{
-		IBinding aFeaturesBinding = getFeaturesBinding();
-		if (aFeaturesBinding != null)
-		{
-			return aFeaturesBinding.getString();
-		}
-		else
-		{
-			return "";
-		}
-	}
-    
-    public String getPopupFunctionName()
-    {
-        return getIdPath().replace('.', '_') + "_popup";
-    }
-}
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/popup/PopupLink.jwc b/3.0.4/contrib/src/org/apache/tapestry/contrib/popup/PopupLink.jwc
deleted file mode 100644
index 21e9fc4..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/popup/PopupLink.jwc
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<component-specification class="org.apache.tapestry.contrib.popup.PopupLink" allow-body="yes" allow-informal-parameters="yes">
-
-	<parameter name="href" type="String" direction="custom" required="yes"/>
-	<parameter name="windowName" type="String" direction="custom" required="no"/>
-	<parameter name="features" type="String" direction="custom" required="no"/>
-
-	<component id="popoutScript" type="Script">
-		<binding name="script" expression='"popup.script"'/>
-		<binding name="popupFunctionName" expression="popupFunctionName"/>
-        <binding name="url" expression="href"/>
-		<binding name="windowName" expression="windowName"/>
-        <binding name="features" expression="features"/>
-	</component>
-
-  	<component id="link" type="Any" inherit-informal-parameters="yes">
-        <binding name="element" expression='"a"'/>
-        <binding name="href" expression='"javascript:" + popupFunctionName + "();"'/>
-  	</component>
-
-	<component id="wrapped" type="RenderBody"/>
-
-</component-specification>
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/popup/popup.script b/3.0.4/contrib/src/org/apache/tapestry/contrib/popup/popup.script
deleted file mode 100644
index 7035669..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/popup/popup.script
+++ /dev/null
@@ -1,17 +0,0 @@
-<?xml version="1.0"?>
-<!-- $Id$ -->
-<!DOCTYPE script PUBLIC 
-	"-//Howard Ship//Tapestry Script 1.1//EN"
-	"http://tapestry.sf.net/dtd/Script_1_1.dtd">
-
-<script>
-
-<body>
-function ${popupFunctionName}()
-{
-	aWindow = window.open('${url}', '${windowName}', '${features}', false);
-	aWindow.focus();
-}
-</body>
-
-</script>
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/components/AbstractTableRowComponent.java b/3.0.4/contrib/src/org/apache/tapestry/contrib/table/components/AbstractTableRowComponent.java
deleted file mode 100644
index 1501177..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/components/AbstractTableRowComponent.java
+++ /dev/null
@@ -1,51 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.table.components;
-
-import org.apache.tapestry.ApplicationRuntimeException;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.contrib.table.model.ITableRowSource;
-
-/**
- * The base implementation for a component that is wrapped by 
- * the TableRows component. Provides a utility method for getting 
- * a pointer to TableRows. 
- * 
- * @author mindbridge
- * @version $Id$
- *
- */
-public class AbstractTableRowComponent extends AbstractTableViewComponent
-{
-    public ITableRowSource getTableRowSource()
-    {
-        IRequestCycle objCycle = getPage().getRequestCycle();
-
-        Object objSourceObj = objCycle.getAttribute(ITableRowSource.TABLE_ROW_SOURCE_ATTRIBUTE);
-        ITableRowSource objSource = (ITableRowSource) objSourceObj;
-
-        if (objSource == null)
-            throw new ApplicationRuntimeException(
-                "The component "
-                    + getId()
-                    + " must be contained within an ITableRowSource component, such as TableRows",
-                this,
-                null,
-                null);
-
-        return objSource;
-    }
-
-}
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/components/AbstractTableViewComponent.java b/3.0.4/contrib/src/org/apache/tapestry/contrib/table/components/AbstractTableViewComponent.java
deleted file mode 100644
index bd6456d..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/components/AbstractTableViewComponent.java
+++ /dev/null
@@ -1,53 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.table.components;
-
-import org.apache.tapestry.ApplicationRuntimeException;
-import org.apache.tapestry.BaseComponent;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.contrib.table.model.ITableModelSource;
-
-/**
- * The base implementation for a component that is wrapped by 
- * the TableView component. Provides a utility method for getting 
- * a pointer to TableView. 
- * 
- * @author mindbridge
- * @version $Id$
- *
- */
-public class AbstractTableViewComponent extends BaseComponent
-{
-    public ITableModelSource getTableModelSource()
-    {
-        IRequestCycle objCycle = getPage().getRequestCycle();
-
-        ITableModelSource objSource =
-            (ITableModelSource) objCycle.getAttribute(
-                ITableModelSource.TABLE_MODEL_SOURCE_ATTRIBUTE);
-
-        if (objSource == null)
-            throw new ApplicationRuntimeException(
-                "The component "
-                    + getId()
-                    + " must be contained within an ITableModelSource component, such as TableView",
-                this,
-                null,
-                null);
-
-        return objSource;
-    }
-
-}
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/components/FormTable.html b/3.0.4/contrib/src/org/apache/tapestry/contrib/table/components/FormTable.html
deleted file mode 100644
index a4bef19..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/components/FormTable.html
+++ /dev/null
@@ -1,13 +0,0 @@
-<!-- $Id$ -->
-
-<span jwcid="$content$">
-
-<span jwcid="tableView">
-	<span jwcid="condPages"><span jwcid="tablePages"/></span>
-	<table jwcid="tableElement">
-		<tr><span jwcid="tableColumns"/></tr>
-		<tr jwcid="tableRows"><td jwcid="tableValues"/></tr>
-	</table>
-</span>
-
-</span>
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/components/FormTable.java b/3.0.4/contrib/src/org/apache/tapestry/contrib/table/components/FormTable.java
deleted file mode 100644
index 75dc316..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/components/FormTable.java
+++ /dev/null
@@ -1,47 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.table.components;
-
-import org.apache.tapestry.contrib.table.model.ITableModelSource;
-
-/**
- * A modified version of the facade component in the Table family. 
- * FormTable allows you to present a sortable and pagable table 
- * within a form by using only this one component.
- * 
- *  [<a href="../../../../../../../ComponentReference/contrib.FormTable.html">Component Reference</a>]
- * 
- * @author mindbridge
- * @version $Id$
- *
- */
-public abstract class FormTable extends Table implements ITableModelSource
-{
-    // parameters
-    public abstract Object getColumns();
-
-    /**
-     *  If the columns are defined via a String, make sure they use 
-     *  the form-specific column headers.
-     */
-    public Object getFormColumns()
-    {
-        Object objColumns = getColumns();
-        if (objColumns instanceof String)
-            objColumns = "*" + objColumns;
-        return objColumns;
-    }
-
-}
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/components/FormTable.jwc b/3.0.4/contrib/src/org/apache/tapestry/contrib/table/components/FormTable.jwc
deleted file mode 100644
index 2003fb3..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/components/FormTable.jwc
+++ /dev/null
@@ -1,245 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!--  $Id$ -->
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<component-specification class="org.apache.tapestry.contrib.table.components.FormTable" 
-	allow-body="yes" allow-informal-parameters="yes">
-
-    <description>
-        The main Table component that is implemented using the lower-level 
-        Table components such as TableView and TableRows.
-        The component does not render its body, which makes it a good place
-        to declare Blocks defining the column appearances.
-    </description>
-    
-    <parameter name="tableModel" 
-        type="org.apache.tapestry.contrib.table.model.ITableModel" 
-        required="no">
-        <description>
-            The model describing the data to be presented by the Table component.
-            This parameter is optional, but either the 'tableModel' or both
-            'source' and 'columns' parameters must be provided.
-        </description>
-    </parameter>
-    
-    <parameter name="source" type="java.lang.Object" required="no">
-        <description>
-            The data to be displayed by the component. This parameter is available as
-            an alternative to tableModel and must be used in combination with the
-            'columns' parameter. 
-            The parameter must be an array of values, a collection, an iterator, 
-            or an object implementing the IBasicTableModel interface.
-        </description>
-    </parameter>
-    
-    <parameter name="columns" type="java.lang.Object" required="no" direction="auto" default-value="null">
-        <description>
-            The table columns to be displayed. 
-            The parameter must be an array, a list, or an Iterator of ITableColumn objects,
-            an ITableColumnModel, or a String describing the columns (see documentation).
-        </description>
-    </parameter>
-    
-	<parameter name="pageSize" 
-		type="int" 
-		required="no">
-        <description>
-            The number of records displayed per page when source/columns are used.
-            The page size is 10 by default.
-        </description>
-    </parameter>
-  
-	<parameter name="initialSortColumn" 
-		type="java.lang.String" 
-		required="no">
-        <description>
-            The id of the column to initially sort the table by.
-            The column is set to null by default, i.e. there is no sorting.
-        </description>
-    </parameter>
-  
-	<parameter name="initialSortOrder" 
-		type="boolean" 
-		required="no">
-        <description>
-            The order of the initial sorting.
-            Set this parameter to 'false' to sort in an ascending order
-            and to 'true' to sort in a descending one.
-        </description>
-    </parameter>
-  
-    <parameter name="tableSessionStateManager" 
-        type="org.apache.tapestry.contrib.table.model.ITableSessionStateManager" 
-        required="no">
-        <description>
-            The manager that controls what part of the table model will be stored in 
-            the session.
-        </description>
-    </parameter>
-    
-    <parameter name="tableSessionStoreManager" 
-        type="org.apache.tapestry.contrib.table.model.ITableSessionStoreManager" 
-        required="no">
-        <description>
-            The manager that controls where the session data will be stored.
-        </description>
-    </parameter>
-    
-    <parameter name="columnSettingsContainer"
-        type="org.apache.tapestry.IComponent"
-        required="no"
-        default-value="container">
-        <description>
-            The component where Block and messages are pulled from when using source/columns.
-        </description>
-    </parameter>
-
-    <parameter name="convertor"
-    	type="org.apache.tapestry.contrib.table.model.IPrimaryKeyConvertor"
-    	required="no"
-    	direction="auto"
-    	default-value="null">
-        <description>
-        An interface defining how the items iterated upon by this component 
-        will be stored in the form as Hidden values. This interface allows only 
-        the primary key of the items to be stored, rather than the whole item.
-        </description>
-    </parameter>
-
-	<parameter name="pagesDisplayed" 
-		type="int" 
-		required="no">
-        <description>
-            The maximum number of pages that will be displayed in the list of table pages.
-            By default, only seven of the pages around the current one are shown.
-        </description>
-    </parameter>
-  
-	<parameter name="column" 
-		type="org.apache.tapestry.contrib.table.model.ITableColumn" 
-		required="no">
-        <description>
-            The column that is being rendered. This value is updated when both 
-            the column headers and column values are rendered.
-        </description>
-    </parameter>
-
-	<parameter name="row" 
-		type="Object" 
-		required="no"
-		direction="custom">
-        <description>
-            The row that is being rendered. This value is null when 
-            the column headers are rendered.
-        </description>
-    </parameter>
-
-	<parameter name="arrowUpAsset" 
-		type="org.apache.tapestry.IAsset" 
-		required="no"
-		direction="in">
-        <description>
-            The image to use to describe a column sorted in an ascending order.
-        </description>
-    </parameter>
-
-	<parameter name="arrowDownAsset" 
-		type="org.apache.tapestry.IAsset" 
-		required="no"
-		direction="in">
-        <description>
-            The image to use to describe a column sorted in a descending order.
-        </description>
-    </parameter>
-
-	<parameter name="pagesClass" 
-		type="java.lang.String" 
-		required="no"
-		direction="custom">
-        <description>The CSS class of the table pages</description>
-    </parameter>
-  
-	<parameter name="columnsClass" 
-		type="java.lang.String" 
-		required="no"
-		direction="custom">
-        <description>The CSS class of the table columns</description>
-    </parameter>
-  
-	<parameter name="rowsClass" 
-		type="java.lang.String" 
-		required="no"
-		direction="custom">
-        <description>The CSS class of the table rows</description>
-    </parameter>
-  
-	<parameter name="valuesClass" 
-		type="java.lang.String" 
-		required="no"
-		direction="custom">
-        <description>The CSS class of the table values</description>
-    </parameter>
-    
-
-	<component id="tableElement" type="Any" inherit-informal-parameters="yes">
-		<static-binding name="element">table</static-binding>
-	</component>
-
-	<component id="condPages" type="FormConditional">
-		<binding name="condition" expression="tableModel.pageCount > 1"/>
-	</component>
-
-	<component id="tableView" type="TableView">
-		<inherited-binding name="tableModel" parameter-name="tableModel"/>
-		<inherited-binding name="source" parameter-name="source"/>
-		<binding name="columns" expression="formColumns"/>
-		<inherited-binding name="pageSize" parameter-name="pageSize"/>
-		<inherited-binding name="initialSortColumn" parameter-name="initialSortColumn"/>
-		<inherited-binding name="initialSortOrder" parameter-name="initialSortOrder"/>
-		<inherited-binding name="tableSessionStateManager" parameter-name="tableSessionStateManager"/>
-		<inherited-binding name="tableSessionStoreManager" parameter-name="tableSessionStoreManager"/>
-		<inherited-binding name="columnSettingsContainer" parameter-name="columnSettingsContainer"/>
-		<static-binding name="element">span</static-binding>
-	</component>
-
-	<component id="tablePages" type="TableFormPages">
-		<inherited-binding name="pagesDisplayed" parameter-name="pagesDisplayed"/>
-		<inherited-binding name="class" parameter-name="pagesClass"/>
-	</component>
-
-	<component id="tableColumns" type="TableColumns">
-		<inherited-binding name="column" parameter-name="column"/>
-		<inherited-binding name="class" parameter-name="columnsClass"/>
-        <inherited-binding name="arrowUpAsset" parameter-name="arrowUpAsset"/>
-        <inherited-binding name="arrowDownAsset" parameter-name="arrowDownAsset"/>
-	</component>
-
-	<component id="tableRows" type="TableFormRows">
-		<inherited-binding name="row" parameter-name="row"/>
-		<inherited-binding name="class" parameter-name="rowsClass"/>
-    <inherited-binding name="convertor" expression="convertor"/>
-	</component>
-
-	<component id="tableValues" type="TableValues">
-		<inherited-binding name="column" parameter-name="column"/>
-		<inherited-binding name="class" parameter-name="valuesClass"/>
-	</component>
-  
-</component-specification>
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/components/Table.html b/3.0.4/contrib/src/org/apache/tapestry/contrib/table/components/Table.html
deleted file mode 100644
index a4bef19..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/components/Table.html
+++ /dev/null
@@ -1,13 +0,0 @@
-<!-- $Id$ -->
-
-<span jwcid="$content$">
-
-<span jwcid="tableView">
-	<span jwcid="condPages"><span jwcid="tablePages"/></span>
-	<table jwcid="tableElement">
-		<tr><span jwcid="tableColumns"/></tr>
-		<tr jwcid="tableRows"><td jwcid="tableValues"/></tr>
-	</table>
-</span>
-
-</span>
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/components/Table.java b/3.0.4/contrib/src/org/apache/tapestry/contrib/table/components/Table.java
deleted file mode 100644
index c02b913..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/components/Table.java
+++ /dev/null
@@ -1,111 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.table.components;
-
-import org.apache.tapestry.BaseComponent;
-import org.apache.tapestry.contrib.table.model.ITableColumn;
-import org.apache.tapestry.contrib.table.model.ITableModel;
-import org.apache.tapestry.contrib.table.model.ITableModelSource;
-
-/**
- * The facade component in the Table family. Table allows you to present 
- * a sortable and pagable table simply and easily by using only this one component.
- * Please see the Component Reference for details on how to use this component. 
- * 
- *  [<a href="../../../../../../../ComponentReference/contrib.Table.html">Component Reference</a>]
- * 
- * @author mindbridge
- * @version $Id$
- *
- */
-public class Table extends BaseComponent implements ITableModelSource
-{
-    /**
-     * @see org.apache.tapestry.contrib.table.model.ITableModelSource#getTableModel()
-     */
-    public ITableModel getTableModel()
-    {
-        return getTableViewComponent().getTableModel();
-    }
-
-    /**
-     * Indicates that the table model has changed and it may need to saved.
-     * This method has to be invoked if modifications are made to the model.
-     *  
-     * @see org.apache.tapestry.contrib.table.model.ITableModelSource#fireObservedStateChange()
-     */
-    public void fireObservedStateChange()
-    {
-        getTableViewComponent().fireObservedStateChange();
-    }
-
-    /**
-     * Resets the state of the component and forces it to load a new
-     * TableModel from the tableModel binding the next time it renders.
-     */
-    public void reset()
-    {
-        getTableViewComponent().reset();
-    }
-
-    /**
-     * Returns the currently rendered table column. 
-     * You can call this method to obtain the current column.
-     *  
-     * @return ITableColumn the current table column
-     */
-    public ITableColumn getTableColumn()
-    {
-        Object objCurrentRow = getTableRow();
-
-        // if the current row is null, then we are most likely rendering TableColumns
-        if (objCurrentRow == null)
-            return getTableColumnsComponent().getTableColumn();
-        else
-            return getTableValuesComponent().getTableColumn();
-    }
-
-    /**
-     * Returns the currently rendered table row or null 
-     * if the rows are not rendered at the moment.
-     * You can call this method to obtain the current row.
-     *  
-     * @return Object the current table row 
-     */
-    public Object getTableRow()
-    {
-        return getTableRowsComponent().getTableRow();
-    }
-
-    protected TableView getTableViewComponent()
-    {
-        return (TableView) getComponent("tableView");
-    }
-
-    protected TableColumns getTableColumnsComponent()
-    {
-        return (TableColumns) getComponent("tableColumns");
-    }
-
-    protected TableRows getTableRowsComponent()
-    {
-        return (TableRows) getComponent("tableRows");
-    }
-
-    protected TableValues getTableValuesComponent()
-    {
-        return (TableValues) getComponent("tableValues");
-    }
-}
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/components/Table.jwc b/3.0.4/contrib/src/org/apache/tapestry/contrib/table/components/Table.jwc
deleted file mode 100644
index 06b0360..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/components/Table.jwc
+++ /dev/null
@@ -1,233 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!--  $Id$ -->
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<component-specification class="org.apache.tapestry.contrib.table.components.Table" 
-	allow-body="yes" allow-informal-parameters="yes">
-
-    <description>
-        The main Table component that is implemented using the lower-level 
-        Table components such as TableView and TableRows.
-        The component does not render its body, which makes it a good place
-        to declare Blocks defining the column appearances.
-    </description>
-    
-    <parameter name="tableModel" 
-        type="org.apache.tapestry.contrib.table.model.ITableModel" 
-        required="no">
-        <description>
-            The model describing the data to be presented by the Table component.
-            This parameter is optional, but either the 'tableModel' or both
-            'source' and 'columns' parameters must be provided.
-        </description>
-    </parameter>
-    
-    <parameter name="source" type="java.lang.Object" required="no">
-        <description>
-            The data to be displayed by the component. This parameter is available as
-            an alternative to tableModel and must be used in combination with the
-            'columns' parameter. 
-            The parameter must be an array of values, a collection, an iterator, 
-            or an object implementing the IBasicTableModel interface.
-        </description>
-    </parameter>
-    
-    <parameter name="columns" type="java.lang.Object" required="no">
-        <description>
-            The table columns to be displayed. 
-            The parameter must be an array, a list, or an Iterator of ITableColumn objects,
-            an ITableColumnModel, or a String describing the columns (see documentation).
-        </description>
-    </parameter>
-    
-	<parameter name="pageSize" 
-		type="int" 
-		required="no">
-        <description>
-            The number of records displayed per page when source/columns are used.
-            The page size is 10 by default.
-        </description>
-    </parameter>
-  
-	<parameter name="initialSortColumn" 
-		type="java.lang.String" 
-		required="no">
-        <description>
-            The id of the column to initially sort the table by.
-            The column is set to null by default, i.e. there is no sorting.
-        </description>
-    </parameter>
-  
-	<parameter name="initialSortOrder" 
-		type="boolean" 
-		required="no">
-        <description>
-            The order of the initial sorting.
-            Set this parameter to 'false' to sort in an ascending order
-            and to 'true' to sort in a descending one.
-        </description>
-    </parameter>
-  
-    <parameter name="tableSessionStateManager" 
-        type="org.apache.tapestry.contrib.table.model.ITableSessionStateManager" 
-        required="no">
-        <description>
-            The manager that controls what part of the table model will be stored in 
-            the session.
-        </description>
-    </parameter>
-    
-    <parameter name="tableSessionStoreManager" 
-        type="org.apache.tapestry.contrib.table.model.ITableSessionStoreManager" 
-        required="no">
-        <description>
-            The manager that controls where the session data will be stored.
-        </description>
-    </parameter>
-    
-    <parameter name="columnSettingsContainer"
-        type="org.apache.tapestry.IComponent"
-        required="no"
-        default-value="container">
-        <description>
-            The component where Block and messages are pulled from when using source/columns.
-        </description>
-    </parameter>
-
-	<parameter name="pagesDisplayed" 
-		type="int" 
-		required="no">
-        <description>
-            The maximum number of pages that will be displayed in the list of table pages.
-            By default, only seven of the pages around the current one are shown.
-        </description>
-    </parameter>
-  
-	<parameter name="column" 
-		type="org.apache.tapestry.contrib.table.model.ITableColumn" 
-		required="no">
-        <description>
-            The column that is being rendered. This value is updated when both 
-            the column headers and column values are rendered.
-        </description>
-    </parameter>
-
-	<parameter name="row" 
-		type="Object" 
-		required="no"
-		direction="custom">
-        <description>
-            The row that is being rendered. This value is null when 
-            the column headers are rendered.
-        </description>
-    </parameter>
-
-	<parameter name="arrowUpAsset" 
-		type="org.apache.tapestry.IAsset" 
-		required="no"
-		direction="in">
-        <description>
-            The image to use to describe a column sorted in an ascending order.
-        </description>
-    </parameter>
-
-	<parameter name="arrowDownAsset" 
-		type="org.apache.tapestry.IAsset" 
-		required="no"
-		direction="in">
-        <description>
-            The image to use to describe a column sorted in a descending order.
-        </description>
-    </parameter>
-
-	<parameter name="pagesClass" 
-		type="java.lang.String" 
-		required="no"
-		direction="custom">
-        <description>The CSS class of the table pages</description>
-    </parameter>
-  
-	<parameter name="columnsClass" 
-		type="java.lang.String" 
-		required="no"
-		direction="custom">
-        <description>The CSS class of the table columns</description>
-    </parameter>
-  
-	<parameter name="rowsClass" 
-		type="java.lang.String" 
-		required="no"
-		direction="custom">
-        <description>The CSS class of the table rows</description>
-    </parameter>
-  
-	<parameter name="valuesClass" 
-		type="java.lang.String" 
-		required="no"
-		direction="custom">
-        <description>The CSS class of the table values</description>
-    </parameter>
-  
-
-	<component id="tableElement" type="Any" inherit-informal-parameters="yes">
-		<static-binding name="element">table</static-binding>
-	</component>
-
-	<component id="condPages" type="Conditional">
-		<binding name="condition" expression="tableModel.pageCount > 1"/>
-	</component>
-
-
-	<component id="tableView" type="TableView">
-		<inherited-binding name="tableModel" parameter-name="tableModel"/>
-		<inherited-binding name="source" parameter-name="source"/>
-		<inherited-binding name="columns" parameter-name="columns"/>
-		<inherited-binding name="pageSize" parameter-name="pageSize"/>
-		<inherited-binding name="initialSortColumn" parameter-name="initialSortColumn"/>
-		<inherited-binding name="initialSortOrder" parameter-name="initialSortOrder"/>
-		<inherited-binding name="tableSessionStateManager" parameter-name="tableSessionStateManager"/>
-		<inherited-binding name="tableSessionStoreManager" parameter-name="tableSessionStoreManager"/>
-		<inherited-binding name="columnSettingsContainer" parameter-name="columnSettingsContainer"/>
-		<static-binding name="element">span</static-binding>
-	</component>
-
-	<component id="tablePages" type="TablePages">
-		<inherited-binding name="pagesDisplayed" parameter-name="pagesDisplayed"/>
-		<inherited-binding name="class" parameter-name="pagesClass"/>
-	</component>
-
-	<component id="tableColumns" type="TableColumns">
-		<inherited-binding name="column" parameter-name="column"/>
-		<inherited-binding name="class" parameter-name="columnsClass"/>
-        <inherited-binding name="arrowUpAsset" parameter-name="arrowUpAsset"/>
-        <inherited-binding name="arrowDownAsset" parameter-name="arrowDownAsset"/>
-	</component>
-
-	<component id="tableRows" type="TableRows">
-		<inherited-binding name="row" parameter-name="row"/>
-		<inherited-binding name="class" parameter-name="rowsClass"/>
-	</component>
-
-	<component id="tableValues" type="TableValues">
-		<inherited-binding name="column" parameter-name="column"/>
-		<inherited-binding name="class" parameter-name="valuesClass"/>
-	</component>
-  
-</component-specification>
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/components/TableColumns.html b/3.0.4/contrib/src/org/apache/tapestry/contrib/table/components/TableColumns.html
deleted file mode 100644
index 21360fd..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/components/TableColumns.html
+++ /dev/null
@@ -1,9 +0,0 @@
-<!-- $Id$ -->
-
-<span jwcid="$content$">
-
-<span jwcid="iterColumns">
-	<th jwcid="informal"><span jwcid="insertColumnRenderer"/></th>
-</span>
-
-</span>
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/components/TableColumns.java b/3.0.4/contrib/src/org/apache/tapestry/contrib/table/components/TableColumns.java
deleted file mode 100644
index 06c90e8..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/components/TableColumns.java
+++ /dev/null
@@ -1,149 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.table.components;
-
-import java.util.Iterator;
-
-import org.apache.tapestry.IAsset;
-import org.apache.tapestry.IBinding;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRender;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.contrib.table.model.ITableColumn;
-import org.apache.tapestry.contrib.table.model.ITableColumnModel;
-
-/**
- * A low level Table component that renders the column headers in the table.
- * This component must be wrapped by {@link org.apache.tapestry.contrib.table.components.TableView}.
- * <p>
- * The component iterates over all column objects in the
- * {@link org.apache.tapestry.contrib.table.model.ITableColumnModel} and renders
- * a header for each one of them using the renderer provided by the
- * getColumnRender() method in {@link org.apache.tapestry.contrib.table.model.ITableColumn}.
- * The headers are wrapped in 'th' tags by default.
- * <p>
- * Please see the Component Reference for details on how to use this component. 
- * 
- *  [<a href="../../../../../../../ComponentReference/contrib.TableColumns.html">Component Reference</a>]
- * 
- * @author mindbridge
- * @version $Id$
- *
- */
-public abstract class TableColumns extends AbstractTableViewComponent
-{
-    public static final String TABLE_COLUMN_ARROW_UP_ATTRIBUTE =
-        "org.apache.tapestry.contrib.table.components.TableColumns.arrowUp";
-
-    public static final String TABLE_COLUMN_ARROW_DOWN_ATTRIBUTE =
-        "org.apache.tapestry.contrib.table.components.TableColumns.arrowDown";
-
-    public static final String TABLE_COLUMN_CSS_CLASS_SUFFIX = "ColumnHeader";
-
-    // Bindings
-    public abstract IBinding getColumnBinding();
-    public abstract IBinding getClassBinding();
-    public abstract IAsset getArrowDownAsset();
-    public abstract IAsset getArrowUpAsset();
-
-    // Transient
-    private ITableColumn m_objTableColumn = null;
-
-    /**
-     * Returns the currently rendered table column. 
-     * You can call this method to obtain the current column.
-     *  
-     * @return ITableColumn the current table column
-     */
-    public ITableColumn getTableColumn()
-    {
-        return m_objTableColumn;
-    }
-
-    /**
-     * Sets the currently rendered table column. 
-     * This method is for internal use only.
-     * 
-     * @param tableColumn The current table column
-     */
-    public void setTableColumn(ITableColumn tableColumn)
-    {
-        m_objTableColumn = tableColumn;
-
-        IBinding objColumnBinding = getColumnBinding();
-        if (objColumnBinding != null)
-            objColumnBinding.setObject(tableColumn);
-    }
-
-    /**
-     * Get the list of all table columns to be displayed.
-     * 
-     * @return an iterator of all table columns
-     */
-    public Iterator getTableColumnIterator()
-    {
-        ITableColumnModel objColumnModel = getTableModelSource().getTableModel().getColumnModel();
-        return objColumnModel.getColumns();
-    }
-
-    /**
-     * Returns the renderer to be used to generate the header of the current column
-     * 
-     * @return the header renderer of the current column
-     */
-    public IRender getTableColumnRenderer()
-    {
-        return getTableColumn().getColumnRenderer(
-            getPage().getRequestCycle(),
-            getTableModelSource());
-    }
-
-    /**
-     * Returns the CSS class of the generated table cell.
-     * It uses the class parameter if it has been bound, or
-     * the default value of "[column name]ColumnHeader" otherwise.
-     * 
-     * @return the CSS class of the cell
-     */
-    public String getColumnClass()
-    {
-        IBinding objClassBinding = getClassBinding();
-        if (objClassBinding != null)
-            return objClassBinding.getString();
-        else
-            return getTableColumn().getColumnName() + TABLE_COLUMN_CSS_CLASS_SUFFIX;
-    }
-
-    /**
-     * @see org.apache.tapestry.BaseComponent#renderComponent(IMarkupWriter, IRequestCycle)
-     */
-    protected void renderComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        Object oldValueUp = cycle.getAttribute(TABLE_COLUMN_ARROW_UP_ATTRIBUTE);
-        Object oldValueDown = cycle.getAttribute(TABLE_COLUMN_ARROW_DOWN_ATTRIBUTE);
-
-        cycle.setAttribute(TABLE_COLUMN_ARROW_UP_ATTRIBUTE, getArrowUpAsset());
-        cycle.setAttribute(TABLE_COLUMN_ARROW_DOWN_ATTRIBUTE, getArrowDownAsset());
-
-        super.renderComponent(writer, cycle);
-
-        cycle.setAttribute(TABLE_COLUMN_ARROW_UP_ATTRIBUTE, oldValueUp);
-        cycle.setAttribute(TABLE_COLUMN_ARROW_DOWN_ATTRIBUTE, oldValueDown);
-
-        // set the current column to null when the component is not active
-        m_objTableColumn = null;
-    }
-
-}
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/components/TableColumns.jwc b/3.0.4/contrib/src/org/apache/tapestry/contrib/table/components/TableColumns.jwc
deleted file mode 100644
index 37e5757..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/components/TableColumns.jwc
+++ /dev/null
@@ -1,80 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!--  $Id$ -->
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<component-specification class="org.apache.tapestry.contrib.table.components.TableColumns" 
-	allow-body="yes" allow-informal-parameters="yes">
-	
-	<description>
-        A low level Table component that renders the column headers in the table. 
-        This component must be wrapped by TableView. 
-	</description>
-  
-	<parameter name="column" 
-		type="org.apache.tapestry.contrib.table.model.ITableColumn" 
-		required="no"
-		direction="custom">
-        <description>The column currently being rendered [out]</description>
-    </parameter>
-
-	<parameter name="element" 
-		type="java.lang.String" 
-		required="no"
-		direction="auto"
-    	default-value="'th'">
-        <description>The tag to use to wrap the column headers.</description>
-    </parameter>
-
-	<parameter name="arrowUpAsset" 
-		type="org.apache.tapestry.IAsset" 
-		required="no"
-		direction="in">
-        <description>The image to use to describe a column sorted in an ascending order.</description>
-    </parameter>
-
-	<parameter name="arrowDownAsset" 
-		type="org.apache.tapestry.IAsset" 
-		required="no"
-		direction="in">
-        <description>The image to use to describe a column sorted in a descending order.</description>
-    </parameter>
-
-    <parameter name="class"
-        type="java.lang.String"
-        required="no"
-        direction="custom">
-        <description>The CSS class of the table columns</description>
-    </parameter>
-    
-	<component id="iterColumns" type="Foreach">
-		<binding name="source" expression="tableColumnIterator"/>
-		<binding name="value" expression="tableColumn"/>
-	</component>
-  
-	<component id="informal" type="Any" inherit-informal-parameters="yes">
-		<binding name="element" expression="element"/>
-        <binding name="class" expression="columnClass"/>
-	</component>
-  
-	<component id="insertColumnRenderer" type="Delegator">
-		<binding name="delegate" expression="tableColumnRenderer"/>
-	</component>
-
-</component-specification>
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/components/TableFormPages.html b/3.0.4/contrib/src/org/apache/tapestry/contrib/table/components/TableFormPages.html
deleted file mode 100644
index 1d98cd8..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/components/TableFormPages.html
+++ /dev/null
@@ -1,32 +0,0 @@
-<!-- $Id$ -->
-
-<span jwcid="$content$">
-
-<span jwcid="informal">
-
-  <span jwcid="hiddenCurrentPage"/>
-  <span jwcid="hiddenPageCount"/>
-  <span jwcid="hiddenStartPage"/>
-  <span jwcid="hiddenStopPage"/>
-
-  <a jwcid="linkFirst">&lt;&lt;</a>  
-  <a jwcid="linkBack">&lt;</a> 
-
-  <span jwcid="iterPage">
-
-	  <span jwcid="condCurrent">
-		  <b><span jwcid="insertCurrentPage"/></b>
-	  </span>
-
-    <span jwcid="condOther">
-		  <a jwcid="linkPage"><span jwcid="insertOtherPage"/></a>
-	  </span>
-
-  </span>
-
-  <a jwcid="linkFwd">&gt;</a>
-  <a jwcid="linkLast">&gt;&gt;</a>
-
-</span>
-
-</span>
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/components/TableFormPages.java b/3.0.4/contrib/src/org/apache/tapestry/contrib/table/components/TableFormPages.java
deleted file mode 100644
index 2043799..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/components/TableFormPages.java
+++ /dev/null
@@ -1,173 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.table.components;
-
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.contrib.table.model.ITableModelSource;
-import org.apache.tapestry.event.PageDetachListener;
-import org.apache.tapestry.event.PageEvent;
-import org.apache.tapestry.event.PageRenderListener;
-
-/**
- * A low level Table component that renders the pages in the table.
- * 
- * This component is a variant of {@link org.apache.tapestry.contrib.table.components.TablePages}, 
- * but is designed for operation in a form. The necessary page data is stored 
- * in hidden fields, so that no StaleLink exceptions occur during a rewind. 
- * The links also submit the form, which ensures that the data in the other 
- * form fields is preserved even when the page chages.
- *  
- * The component must be wrapped by {@link org.apache.tapestry.contrib.table.components.TableView}.
- * <p>
- * The component generates a list of pages in the Table centered around the 
- * current one and allows you to navigate to other pages.
- * <p> 
- * Please see the Component Reference for details on how to use this component. 
- * 
- *  [<a href="../../../../../../../ComponentReference/contrib.TableFormPages.html">Component Reference</a>]
- * 
- * @author mindbridge
- * @version $Id$
- *
- */
-public abstract class TableFormPages extends TablePages 
-    implements PageDetachListener, PageRenderListener
-{
-    private int m_nCurrentPage;
-    private int m_nPageCount;
-    private int m_nStartPage;
-    private int m_nStopPage;    
-
-    public TableFormPages()
-    {
-        initialize();
-    }
-
-    /**
-     * @see org.apache.tapestry.event.PageDetachListener#pageDetached(org.apache.tapestry.event.PageEvent)
-     */
-    public void pageDetached(PageEvent event)
-    {
-        initialize();
-    }
-    
-    /**
-     * @see org.apache.tapestry.event.PageRenderListener#pageBeginRender(org.apache.tapestry.event.PageEvent)
-     */
-    public void pageBeginRender(PageEvent event)
-    {
-        // values set during rewind are removed
-        initialize();
-    }
-
-    /**
-     * Initialize the values and return the object to operation identical
-     * to that of the super class.
-     */
-    private void initialize()
-    {
-        m_nCurrentPage = -1;
-        m_nPageCount = -1;
-        m_nStartPage = -1;
-        m_nStopPage = -1;
-    }
-
-    // This would ideally be a delayed invocation -- called after the form rewind
-    public void changePage(IRequestCycle objCycle)
-    {
-        ITableModelSource objSource = getTableModelSource(); 
-        setCurrentPage(objSource, getSelectedPage());
-
-        // ensure that the change is saved
-        objSource.fireObservedStateChange();
-    }
-
-    // defined in the JWC file
-    public abstract int getSelectedPage();
-
-
-    /**
-     * @return the current page
-     */
-    public int getCurrentPage()
-    {
-        if (m_nCurrentPage < 0)
-            m_nCurrentPage = super.getCurrentPage();
-        return m_nCurrentPage;
-    }
-
-    /**
-     * @return number of all pages to display
-     */
-    public int getPageCount()
-    {
-        if (m_nPageCount < 0)
-            m_nPageCount = super.getPageCount();
-        return m_nPageCount;
-    }
-
-    /**
-     * @return the first page to display
-     */
-    public int getStartPage()
-    {
-        if (m_nStartPage < 0)
-            m_nStartPage = super.getStartPage();
-        return m_nStartPage;
-    }
-
-    /**
-     * @return the last page to display
-     */
-    public int getStopPage()
-    {
-        if (m_nStopPage < 0)
-            m_nStopPage = super.getStopPage();
-        return m_nStopPage;
-    }
-
-    /**
-     * @param i the current page
-     */
-    public void setCurrentPage(int i)
-    {
-        m_nCurrentPage = i;
-    }
-
-    /**
-     * @param i number of all pages to display
-     */
-    public void setPageCount(int i)
-    {
-        m_nPageCount = i;
-    }
-
-    /**
-     * @param i the first page to display
-     */
-    public void setStartPage(int i)
-    {
-        m_nStartPage = i;
-    }
-
-    /**
-     * @param i the last page to display
-     */
-    public void setStopPage(int i)
-    {
-        m_nStopPage = i;
-    }
-
-}
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/components/TableFormPages.jwc b/3.0.4/contrib/src/org/apache/tapestry/contrib/table/components/TableFormPages.jwc
deleted file mode 100644
index b5be311..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/components/TableFormPages.jwc
+++ /dev/null
@@ -1,117 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!--  $Id$ -->
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<component-specification class="org.apache.tapestry.contrib.table.components.TableFormPages" 
-	allow-body="no" allow-informal-parameters="yes">
-	
-	<description>
-        A version of TablePages that is designed for operation in a form. 
-        It is a low level Table component that renders the pages in the table. 
-        This component must be wrapped by TableView. 
-	</description>
-  
-	<component id="informal" type="Any" inherit-informal-parameters="yes"/>
-  
-	<parameter name="pagesDisplayed" 
-		type="int" 
-		required="no"
-		direction="auto"
-    	default-value="7">
-		<description>
-            Determines the maximum number of pages to be displayed in the page list 
-            when the table has more than one page. 
-        </description>
-    </parameter>
-  
-	<property-specification name="selectedPage" type="int"/>
-  
-	<component id="hiddenCurrentPage" type="Hidden">
-		<binding name="value" expression="currentPage"/>
-	</component>
-  
-	<component id="hiddenPageCount" type="Hidden">
-		<binding name="value" expression="pageCount"/>
-	</component>
-  
-	<component id="hiddenStartPage" type="Hidden">
-		<binding name="value" expression="startPage"/>
-	</component>
-  
-	<component id="hiddenStopPage" type="Hidden">
-		<binding name="value" expression="stopPage"/>
-	</component>
-  
-	<component id="condCurrent" type="Conditional">
-		<binding name="condition" expression="condCurrent"/>
-	</component>
-  
-	<component id="condOther" type="Conditional">
-		<binding name="condition" expression="!condCurrent"/>
-	</component>
-  
-	<component id="iterPage" type="Foreach">
-		<binding name="source" expression="pageList"/>
-		<binding name="value" expression="displayPage"/>
-	</component>
-
-	<component id="insertCurrentPage" type="Insert">
-	    <binding name="value" expression="displayPage"/>
-	</component>
-
-	<component id="insertOtherPage" type="Insert">
-	    <binding name="value" expression="displayPage"/>
-	</component>
-
-	<component id="linkPage" type="LinkSubmit">
-	    <binding name="listener" expression="listeners.changePage"/>
-	    <binding name="tag" expression="displayPage"/>
-	    <binding name="selected" expression="selectedPage"/>
-	</component>
-
-	<component id="linkFirst" type="LinkSubmit">
-	    <binding name="listener" expression="listeners.changePage"/>
-	    <binding name="tag" expression="1"/>
-	    <binding name="selected" expression="selectedPage"/>
-	    <binding name="disabled" expression="!condBack"/>
-	</component>
-
-	<component id="linkBack" type="LinkSubmit">
-	    <binding name="listener" expression="listeners.changePage"/>
-	    <binding name="tag" expression="currentPage - 1"/>
-	    <binding name="selected" expression="selectedPage"/>
-	    <binding name="disabled" expression="!condBack"/>
-	</component>
-
-	<component id="linkFwd" type="LinkSubmit">
-	    <binding name="listener" expression="listeners.changePage"/>
-	    <binding name="tag" expression="currentPage + 1"/>
-	    <binding name="selected" expression="selectedPage"/>
-	    <binding name="disabled" expression="!condFwd"/>
-	</component>
-	
-	<component id="linkLast" type="LinkSubmit">
-	    <binding name="listener" expression="listeners.changePage"/>
-	    <binding name="tag" expression="pageCount"/>
-	    <binding name="selected" expression="selectedPage"/>
-	    <binding name="disabled" expression="!condFwd"/>
-	</component>
-
-</component-specification>
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/components/TableFormRows.html b/3.0.4/contrib/src/org/apache/tapestry/contrib/table/components/TableFormRows.html
deleted file mode 100644
index 53b492a..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/components/TableFormRows.html
+++ /dev/null
@@ -1,9 +0,0 @@
-<!-- $Id$ -->
-
-<span jwcid="$content$">
-
-<tr jwcid="iterRows">
-	<span jwcid="@RenderBody"/>
-</tr>
-
-</span>
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/components/TableFormRows.java b/3.0.4/contrib/src/org/apache/tapestry/contrib/table/components/TableFormRows.java
deleted file mode 100644
index f33dae9..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/components/TableFormRows.java
+++ /dev/null
@@ -1,134 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.table.components;
-
-import java.util.Iterator;
-import java.util.Map;
-
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.contrib.table.model.*;
-
-
-/**
- * A low level Table component that generates the rows of the current page in the table.
- * 
- * This component is a variant of {@link org.apache.tapestry.contrib.table.components.TablePages},
- * but is designed for operation in a form. The displayed rows are stored in 
- * hidden form fields, which are then read during a rewind. This ensures that
- * the form will rewind in exactly the same was as it was rendered even if the 
- * TableModel has changed and no StaleLink exceptions will occur. 
- * 
- * The component must be wrapped by {@link org.apache.tapestry.contrib.table.components.TableView}.
- * 
- * <p>
- * The component iterates over the rows of the current page in the table. 
- * The rows are wrapped in 'tr' tags by default. 
- * You can define columns manually within, or
- * you can use {@link org.apache.tapestry.contrib.table.components.TableValues} 
- * to generate the columns automatically.
- * <p> 
- * Please see the Component Reference for details on how to use this component. 
- * 
- *  [<a href="../../../../../../../ComponentReference/contrib.TableFormRows.html">Component Reference</a>]
- * 
- * @author mindbridge
- * @version $Id$
- *
- */
-public abstract class TableFormRows extends TableRows
-{
-    public abstract IPrimaryKeyConvertor getConvertor();
-    public abstract IPrimaryKeyConvertor getConvertorCache();
-    public abstract void setConvertorCache(IPrimaryKeyConvertor convertor);
-    public abstract Map getConvertedValues();
-
-    /**
-     * Returns the PK convertor cached within the realm of the current request cycle.
-     *  
-     * @return the cached PK convertor
-     */
-    public IPrimaryKeyConvertor getCachedConvertor()
-    {
-        IPrimaryKeyConvertor objConvertor = getConvertorCache();
-        
-        if (objConvertor == null) {
-            objConvertor = getConvertor();
-            setConvertorCache(objConvertor);
-        }
-        
-        return objConvertor;
-    }
-
-    /**
-     * Get the list of all table rows to be displayed on this page, converted 
-     * using the PK.convertor.
-     * 
-     * @return an iterator of all converted table rows
-     */    
-    public Iterator getConvertedTableRowsIterator()
-    {
-        final Iterator objTableRowsIterator = getTableRowsIterator(); 
-        final IPrimaryKeyConvertor objConvertor = getCachedConvertor();
-        if (objConvertor == null)
-            return objTableRowsIterator;
-            
-        return new Iterator()
-        {
-            public boolean hasNext()
-            {
-                return objTableRowsIterator.hasNext();
-            }
-
-            public Object next()
-            {
-                Object objValue = objTableRowsIterator.next();
-                Object objPrimaryKey = objConvertor.getPrimaryKey(objValue);
-                Map mapConvertedValues = getConvertedValues(); 
-                mapConvertedValues.put(objPrimaryKey, objValue);
-                return objPrimaryKey;
-            }
-
-            public void remove()
-            {
-                objTableRowsIterator.remove();
-            }
-        };
-    }
-
-    /**
-     * Sets the current table row PK and invokes {@link #setTableRow(Object)} as a result.
-     * This method is for internal use only.
-     * 
-     * @param objConvertedTableRow The current converted table row (PK)
-     */
-    public void setConvertedTableRow(Object objConvertedTableRow)
-    {
-        Object objValue = objConvertedTableRow;
-
-        IPrimaryKeyConvertor objConvertor = getCachedConvertor();
-        if (objConvertor != null) {
-            IRequestCycle objCycle = getPage().getRequestCycle();
-            if (objCycle.isRewinding()) {
-                objValue = objConvertor.getValue(objConvertedTableRow);  
-            }
-            else {
-                Map mapConvertedValues = getConvertedValues(); 
-                objValue = mapConvertedValues.get(objConvertedTableRow);
-            }
-        }
-
-        setTableRow(objValue);
-    }
-}
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/components/TableFormRows.jwc b/3.0.4/contrib/src/org/apache/tapestry/contrib/table/components/TableFormRows.jwc
deleted file mode 100644
index 30d5992..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/components/TableFormRows.jwc
+++ /dev/null
@@ -1,68 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!--  $Id$ -->
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<component-specification class="org.apache.tapestry.contrib.table.components.TableFormRows" 
-	allow-body="yes" allow-informal-parameters="yes">
-	
-	<description>
-        A version of the TableRows designed for operation in a form. 
-        This is a low level Table component that generates the rows of 
-        the current page in the table. Each row is stored as a hidden value 
-        in the form, which eliminates the chance of a stale link during rewinding. 
-        This component must be wrapped by TableView. 
-	</description>
-  
-	<parameter name="row" 
-		type="Object" 
-		required="no"
-		direction="custom">
-        <description>The value object of the row currently being rendered.</description>
-    </parameter>
-
-    <parameter name="convertor"
-    	type="org.apache.tapestry.contrib.table.model.IPrimaryKeyConvertor"
-    	required="no"
-    	direction="auto"
-    	default-value="null">
-        <description>
-        An interface defining how the items iterated upon by this component 
-        will be stored in the form as Hidden values. This interface allows only 
-        the primary key of the items to be stored, rather than the whole item.
-        </description>
-    </parameter>
-    
-	<parameter name="element" 
-		type="java.lang.String" 
-		required="no"
-		default-value='"tr"'>
-        <description>The tag to use to wrap the rows in, 'tr' by default.</description>
-    </parameter>
-
-	<component id="iterRows" type="ListEdit" inherit-informal-parameters="yes">
-		<binding name="source" expression="convertedTableRowsIterator"/>
-		<binding name="value" expression="convertedTableRow"/>
-        <inherited-binding name="element" parameter-name="element"/>
-	</component>
-
-    <property-specification name="convertedValues" type="java.util.Map" initial-value="new java.util.HashMap()"/>
-    <property-specification name="convertorCache" type="org.apache.tapestry.contrib.table.model.IPrimaryKeyConvertor" initial-value="null"/>
-      
-</component-specification>
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/components/TablePages.html b/3.0.4/contrib/src/org/apache/tapestry/contrib/table/components/TablePages.html
deleted file mode 100644
index ecf98ec..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/components/TablePages.html
+++ /dev/null
@@ -1,27 +0,0 @@
-<!-- $Id$ -->
-
-<span jwcid="$content$">
-
-<span jwcid="informal">
-
-	<a jwcid="linkFirst">&lt;&lt;</a>  
-	<a jwcid="linkBack">&lt;</a> 
-	
-	<span jwcid="iterPage">
-	
-		<span jwcid="condCurrent">
-			<b><span jwcid="insertCurrentPage"/></b>
-		</span>
-	
-		<span jwcid="condOther">
-			<a jwcid="linkPage"><span jwcid="insertOtherPage"/></a>
-		</span>
-	
-	</span>
-	
-	<a jwcid="linkFwd">&gt;</a>
-	<a jwcid="linkLast">&gt;&gt;</a>
-
-</span>
-
-</span>
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/components/TablePages.java b/3.0.4/contrib/src/org/apache/tapestry/contrib/table/components/TablePages.java
deleted file mode 100644
index 6aee51f..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/components/TablePages.java
+++ /dev/null
@@ -1,195 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.table.components;
-
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.contrib.table.model.ITableModelSource;
-import org.apache.tapestry.util.ComponentAddress;
-
-/**
- * A low level Table component that renders the pages in the table.
- * This component must be wrapped by {@link org.apache.tapestry.contrib.table.components.TableView}.
- * <p>
- * The component generates a list of pages in the Table centered around the 
- * current one and allows you to navigate to other pages.
- * <p> 
- * Please see the Component Reference for details on how to use this component. 
- * 
- *  [<a href="../../../../../../../ComponentReference/contrib.TablePages.html">Component Reference</a>]
- * 
- * @author mindbridge
- * @version $Id$
- *
- */
-public abstract class TablePages extends AbstractTableViewComponent
-{
-    // Bindings    
-    public abstract int getPagesDisplayed();
-
-    // Transient
-    private int m_nDisplayPage;
-
-    /**
-     * Returns the displayPage.
-     * @return int
-     */
-    public int getDisplayPage()
-    {
-        return m_nDisplayPage;
-    }
-
-    /**
-     * Sets the displayPage.
-     * @param displayPage The displayPage to set
-     */
-    public void setDisplayPage(int displayPage)
-    {
-        m_nDisplayPage = displayPage;
-    }
-
-    public int getCurrentPage()
-    {
-        return getTableModelSource().getTableModel().getPagingState().getCurrentPage() + 1;
-    }
-
-    public int getPageCount()
-    {
-        return getTableModelSource().getTableModel().getPageCount();
-    }
-
-    public boolean getCondBack()
-    {
-        return getCurrentPage() > 1;
-    }
-
-    public boolean getCondFwd()
-    {
-        return getCurrentPage() < getPageCount();
-    }
-
-    public boolean getCondCurrent()
-    {
-        return getDisplayPage() == getCurrentPage();
-    }
-
-    public int getStartPage()
-    {
-        int nCurrent = getCurrentPage();
-        int nPagesDisplayed = getPagesDisplayed();
-
-        int nRightMargin = nPagesDisplayed / 2;
-        int nStop = nCurrent + nRightMargin;
-        int nLastPage = getPageCount();
-
-        int nLeftAddon = 0;
-        if (nStop > nLastPage)
-            nLeftAddon = nStop - nLastPage;
-
-        int nLeftMargin = (nPagesDisplayed - 1) / 2 + nLeftAddon;
-        int nStart = nCurrent - nLeftMargin;
-        int nFirstPage = 1;
-        if (nStart < nFirstPage)
-            nStart = nFirstPage;
-        return nStart;
-    }
-
-    public int getStopPage()
-    {
-        int nCurrent = getCurrentPage();
-        int nPagesDisplayed = getPagesDisplayed();
-
-        int nLeftMargin = (nPagesDisplayed - 1) / 2;
-        int nStart = nCurrent - nLeftMargin;
-        int nFirstPage = 1;
-
-        int nRightAddon = 0;
-        if (nStart < nFirstPage)
-            nRightAddon = nFirstPage - nStart;
-
-        int nRightMargin = nPagesDisplayed / 2 + nRightAddon;
-        int nStop = nCurrent + nRightMargin;
-        int nLastPage = getPageCount();
-        if (nStop > nLastPage)
-            nStop = nLastPage;
-        return nStop;
-    }
-
-    public Integer[] getPageList()
-    {
-        int nStart = getStartPage();
-        int nStop = getStopPage();
-
-        Integer[] arrPages = new Integer[nStop - nStart + 1];
-        for (int i = nStart; i <= nStop; i++)
-            arrPages[i - nStart] = new Integer(i);
-
-        return arrPages;
-    }
-
-    public Object[] getFirstPageContext()
-    {
-        ComponentAddress objAddress = new ComponentAddress(getTableModelSource());
-        return new Object[] { objAddress, new Integer(1)};
-    }
-
-    public Object[] getLastPageContext()
-    {
-        ComponentAddress objAddress = new ComponentAddress(getTableModelSource());
-        return new Object[] { objAddress, new Integer(getPageCount())};
-    }
-
-    public Object[] getBackPageContext()
-    {
-        ComponentAddress objAddress = new ComponentAddress(getTableModelSource());
-        return new Object[] { objAddress, new Integer(getCurrentPage() - 1)};
-    }
-
-    public Object[] getFwdPageContext()
-    {
-        ComponentAddress objAddress = new ComponentAddress(getTableModelSource());
-        return new Object[] { objAddress, new Integer(getCurrentPage() + 1)};
-    }
-
-    public Object[] getDisplayPageContext()
-    {
-        ComponentAddress objAddress = new ComponentAddress(getTableModelSource());
-        return new Object[] { objAddress, new Integer(m_nDisplayPage)};
-    }
-
-    public void changePage(IRequestCycle objCycle)
-    {
-        Object[] arrParameters = objCycle.getServiceParameters();
-        if (arrParameters.length != 2
-            && !(arrParameters[0] instanceof ComponentAddress)
-            && !(arrParameters[1] instanceof Integer))
-        {
-            // error
-            return;
-        }
-
-        ComponentAddress objAddress = (ComponentAddress) arrParameters[0];
-        ITableModelSource objSource = (ITableModelSource) objAddress.findComponent(objCycle);
-        setCurrentPage(objSource, ((Integer) arrParameters[1]).intValue());
-
-        // ensure that the change is saved
-        objSource.fireObservedStateChange();
-    }
-
-    public void setCurrentPage(ITableModelSource objSource, int nPage)
-    {
-        objSource.getTableModel().getPagingState().setCurrentPage(nPage - 1);
-    }
-
-}
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/components/TablePages.jwc b/3.0.4/contrib/src/org/apache/tapestry/contrib/table/components/TablePages.jwc
deleted file mode 100644
index 98640de..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/components/TablePages.jwc
+++ /dev/null
@@ -1,94 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!--  $Id$ -->
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<component-specification class="org.apache.tapestry.contrib.table.components.TablePages" 
-	allow-body="no" allow-informal-parameters="yes">
-	
-	<description>
-        A low level Table component that renders the pages in the table. 
-        This component must be wrapped by TableView. 
-	</description>
-  
-	<parameter name="pagesDisplayed" 
-		type="int" 
-		required="no"
-		direction="auto"
-    	default-value="7">
-		<description>
-            Determines the maximum number of pages to be displayed in the page list 
-            when the table has more than one page. 
-        </description>
-    </parameter>
-
-	<component id="informal" type="Any" inherit-informal-parameters="yes"/>
-  
-	<component id="condCurrent" type="Conditional">
-		<binding name="condition" expression="condCurrent"/>
-	</component>
-  
-	<component id="condOther" type="Conditional">
-		<binding name="condition" expression="condCurrent"/>
-		<static-binding name="invert">true</static-binding>
-	</component>
-  
-	<component id="iterPage" type="Foreach">
-		<binding name="source" expression="pageList"/>
-		<binding name="value" expression="displayPage"/>
-	</component>
-
-	<component id="insertCurrentPage" type="Insert">
-	    <binding name="value" expression="displayPage"/>
-	</component>
-
-	<component id="insertOtherPage" type="Insert">
-	    <binding name="value" expression="displayPage"/>
-	</component>
-
-	<component id="linkPage" type="DirectLink">
-	    <binding name="listener" expression="listeners.changePage"/>
-	    <binding name="parameters" expression="displayPageContext"/>
-	</component>
-
-	<component id="linkFirst" type="DirectLink">
-	    <binding name="listener" expression="listeners.changePage"/>
-	    <binding name="parameters" expression="firstPageContext"/>
-	    <binding name="disabled" expression="!condBack"/>
-	</component>
-
-	<component id="linkBack" type="DirectLink">
-	    <binding name="listener" expression="listeners.changePage"/>
-	    <binding name="parameters" expression="backPageContext"/>
-	    <binding name="disabled" expression="!condBack"/>
-	</component>
-
-	<component id="linkFwd" type="DirectLink">
-	    <binding name="listener" expression="listeners.changePage"/>
-	    <binding name="parameters" expression="fwdPageContext"/>
-	    <binding name="disabled" expression="!condFwd"/>
-	</component>
-	
-	<component id="linkLast" type="DirectLink">
-	    <binding name="listener" expression="listeners.changePage"/>
-	    <binding name="parameters" expression="lastPageContext"/>
-	    <binding name="disabled" expression="!condFwd"/>
-	</component>
-	
-</component-specification>
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/components/TableRows.html b/3.0.4/contrib/src/org/apache/tapestry/contrib/table/components/TableRows.html
deleted file mode 100644
index 8a73f34..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/components/TableRows.html
+++ /dev/null
@@ -1,11 +0,0 @@
-<!-- $Id$ -->
-
-<span jwcid="$content$">
-
-<span jwcid="iterRows">
-	<tr jwcid="informal">
-		<span jwcid="wrapped"/>
-	</tr>
-</span>
-
-</span>
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/components/TableRows.java b/3.0.4/contrib/src/org/apache/tapestry/contrib/table/components/TableRows.java
deleted file mode 100644
index b96b427..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/components/TableRows.java
+++ /dev/null
@@ -1,106 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.table.components;
-
-import java.util.Iterator;
-
-import org.apache.tapestry.IBinding;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.contrib.table.model.ITableModel;
-import org.apache.tapestry.contrib.table.model.ITableRowSource;
-
-/**
- * A low level Table component that generates the rows of the current page in the table.
- * This component must be wrapped by {@link org.apache.tapestry.contrib.table.components.TableView}.
- * 
- * <p>
- * The component iterates over the rows of the current page in the table. 
- * The rows are wrapped in 'tr' tags by default. 
- * You can define columns manually within, or
- * you can use {@link org.apache.tapestry.contrib.table.components.TableValues} 
- * to generate the columns automatically.
- * 
- * <p> 
- * Please see the Component Reference for details on how to use this component. 
- * 
- *  [<a href="../../../../../../../ComponentReference/contrib.TableRows.html">Component Reference</a>]
- * 
- * @author mindbridge
- * @version $Id$
- *
- */
-public abstract class TableRows extends AbstractTableViewComponent implements ITableRowSource
-{
-    // Parameters
-    public abstract IBinding getRowBinding();
-
-    // Transient
-    private Object m_objTableRow = null;
-
-    /**
-     * Returns the currently rendered table row.
-     * You can call this method to obtain the current row.
-     *  
-     * @return Object the current table row
-     */
-    public Object getTableRow()
-    {
-        return m_objTableRow;
-    }
-
-    /**
-     * Sets the currently rendered table row. 
-     * This method is for internal use only.
-     * 
-     * @param tableRow The current table row
-     */
-    public void setTableRow(Object tableRow)
-    {
-        m_objTableRow = tableRow;
-
-        IBinding objRowBinding = getRowBinding();
-        if (objRowBinding != null)
-            objRowBinding.setObject(tableRow);
-    }
-
-    /**
-     * Get the list of all table rows to be displayed on this page.
-     * 
-     * @return an iterator of all table rows
-     */
-    public Iterator getTableRowsIterator()
-    {
-        ITableModel objTableModel = getTableModelSource().getTableModel();
-        return objTableModel.getCurrentPageRows();
-    }
-
-    /**
-     * @see org.apache.tapestry.BaseComponent#renderComponent(IMarkupWriter, IRequestCycle)
-     */
-    protected void renderComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        Object objOldValue = cycle.getAttribute(ITableRowSource.TABLE_ROW_SOURCE_ATTRIBUTE);
-        cycle.setAttribute(ITableRowSource.TABLE_ROW_SOURCE_ATTRIBUTE, this);
-
-        super.renderComponent(writer, cycle);
-
-        cycle.setAttribute(ITableRowSource.TABLE_ROW_SOURCE_ATTRIBUTE, objOldValue);
-
-        // set the current row to null when the component is not active
-        m_objTableRow = null;
-    }
-
-}
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/components/TableRows.jwc b/3.0.4/contrib/src/org/apache/tapestry/contrib/table/components/TableRows.jwc
deleted file mode 100644
index 0220ff7..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/components/TableRows.jwc
+++ /dev/null
@@ -1,56 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!--  $Id$ -->
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<component-specification class="org.apache.tapestry.contrib.table.components.TableRows" 
-	allow-body="yes" allow-informal-parameters="yes">
-	
-	<description>
-        A low level Table component that generates the rows of the current page in the table. 
-        This component must be wrapped by TableView. 
-	</description>
-  
-	<parameter name="row" 
-		type="Object" 
-		required="no"
-		direction="custom">
-        <description>The current row being rendered.</description>
-    </parameter>
-
-	<parameter name="element" 
-		type="java.lang.String" 
-		required="no"
-		direction="auto"
-    	default-value="'tr'">
-        <description>The tag to use to wrap the rows in, 'tr' by default.</description>
-    </parameter>
-
-	<component id="iterRows" type="Foreach">
-		<binding name="source" expression="tableRowsIterator"/>
-		<binding name="value" expression="tableRow"/>
-	</component>
-  
-	<component id="informal" type="Any" inherit-informal-parameters="yes">
-		<inherited-binding name="element" parameter-name="element"/>
-	</component>
-  
-	<component id="wrapped" type="RenderBody"/>
-  
-</component-specification>
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/components/TableStrings.properties b/3.0.4/contrib/src/org/apache/tapestry/contrib/table/components/TableStrings.properties
deleted file mode 100644
index 71b81e5..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/components/TableStrings.properties
+++ /dev/null
@@ -1,7 +0,0 @@
-# $Id$
-
-missing-table-model=Either the 'tableModel' parameter or both 'source' and 'columns' parameters must be specified by component {0}
-columns-only-please=The 'columns' parameter of component {0} must contain a list of ITableColumn objects only
-not-a-column=The expression '{1}' in the 'columns' parameter of component {0} does not evaluate to an ITableColumn
-invalid-table-source=The source parameter of component {0} is of type {1}, but must be of type Object[], Collection, Iterator, or IBasicTableModel
-invalid-table-columns=The columns parameter of component {0} is of type {1}, but must be of type String, ITableColumnModel, ITableColumn[], List, or Iterator
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/components/TableUtils.java b/3.0.4/contrib/src/org/apache/tapestry/contrib/table/components/TableUtils.java
deleted file mode 100644
index c7b5bb7..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/components/TableUtils.java
+++ /dev/null
@@ -1,191 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.table.components;
-
-import java.text.MessageFormat;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.ResourceBundle;
-import java.util.StringTokenizer;
-
-import org.apache.tapestry.ApplicationRuntimeException;
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.IResourceResolver;
-import org.apache.tapestry.contrib.table.model.ITableColumn;
-import org.apache.tapestry.contrib.table.model.ITableColumnModel;
-import org.apache.tapestry.contrib.table.model.ognl.ExpressionTableColumn;
-import org.apache.tapestry.contrib.table.model.simple.SimpleTableColumn;
-import org.apache.tapestry.contrib.table.model.simple.SimpleTableColumnModel;
-import org.apache.tapestry.util.prop.OgnlUtils;
-
-/**
- *  A placeholder for a static methods related to the Table component
- *
- *  @since 3.0
- *  @version $Id$
- *  @author Mindbridge
- **/
-public class TableUtils
-{
-
-    /**
-     *  Contains strings loaded from TableStrings.properties.
-     *
-     **/
-
-    private static ResourceBundle s_objStrings = null;
-
-    /**
-     *  Gets a string from the TableStrings resource bundle.
-     *
-     **/
-
-    public static String format(String key, Object[] args)
-    {
-            synchronized (TableUtils.class) {
-                if (s_objStrings == null)
-                    s_objStrings = ResourceBundle.getBundle("org.apache.tapestry.contrib.table.components.TableStrings");
-            }
-
-        String pattern = s_objStrings.getString(key);
-
-        if (args == null)
-            return pattern;
-
-        return MessageFormat.format(pattern, args);
-    }
-
-    /**
-     *  Convienience method for invoking {@link #format(String, Object[])}.
-     **/
-
-    public static String getMessage(String key)
-    {
-        return format(key, null);
-    }
-
-    /**
-     *  Convienience method for invoking {@link #format(String, Object[])}.
-     **/
-
-    public static String format(String key, Object arg)
-    {
-        return format(key, new Object[] { arg });
-    }
-
-    /**
-     *  Convienience method for invoking {@link #format(String, Object[])}.
-     **/
-
-    public static String format(String key, Object arg1, Object arg2)
-    {
-        return format(key, new Object[] { arg1, arg2 });
-    }
-
-    /**
-     *  Convienience method for invoking {@link #format(String, Object[])}.
-     **/
-
-    public static String format(String key, Object arg1, Object arg2, Object arg3)
-    {
-        return format(key, new Object[] { arg1, arg2, arg3 });
-    }
-
-    /**
-     *  Generate a table column model out of the description string provided.
-     *  Entries in the description string are separated by commas.
-     *  Each column entry is of the format name, name:expression, 
-     *  or name:displayName:expression.
-     *  An entry prefixed with ! represents a non-sortable column.
-     *  If the whole description string is prefixed with *, it represents
-     *  columns to be included in a Form. 
-     * 
-     *  @param strDesc the description of the column model to be generated
-     *  @param objComponent the component ordering the generation
-     *  @param objColumnSettingsContainer the component containing the column settings
-     *  @return a table column model based on the provided parameters
-     */
-    public static ITableColumnModel generateTableColumnModel(String strDesc, IComponent objComponent, IComponent objColumnSettingsContainer)
-    {
-        if (strDesc == null)
-            return null;
-
-        List arrColumns = new ArrayList();
-
-        boolean bFormColumns = false;
-        while (strDesc.startsWith("*"))
-        {
-            strDesc = strDesc.substring(1);
-            bFormColumns = true;
-        }
-
-        StringTokenizer objTokenizer = new StringTokenizer(strDesc, ",");
-        while (objTokenizer.hasMoreTokens())
-        {
-            String strToken = objTokenizer.nextToken().trim();
-
-            if (strToken.startsWith("="))
-            {
-                String strColumnExpression = strToken.substring(1);
-                IResourceResolver objResolver = objColumnSettingsContainer.getPage().getEngine().getResourceResolver();
-
-                Object objColumn =
-                    OgnlUtils.get(strColumnExpression, objResolver, objColumnSettingsContainer);
-                if (!(objColumn instanceof ITableColumn))
-                    throw new ApplicationRuntimeException(
-                        format("not-a-column", objComponent.getExtendedId(), strColumnExpression));
-
-                arrColumns.add(objColumn);
-                continue;
-            }
-
-            boolean bSortable = true;
-            if (strToken.startsWith("!"))
-            {
-                strToken = strToken.substring(1);
-                bSortable = false;
-            }
-
-            StringTokenizer objColumnTokenizer = new StringTokenizer(strToken, ":");
-
-            String strName = "";
-            if (objColumnTokenizer.hasMoreTokens())
-                strName = objColumnTokenizer.nextToken();
-
-            String strExpression = strName;
-            if (objColumnTokenizer.hasMoreTokens())
-                strExpression = objColumnTokenizer.nextToken();
-
-            String strDisplayName = strName;
-            if (objColumnTokenizer.hasMoreTokens())
-            {
-                strDisplayName = strExpression;
-                strExpression = objColumnTokenizer.nextToken();
-            }
-
-            ExpressionTableColumn objColumn =
-                new ExpressionTableColumn(strName, strDisplayName, strExpression, bSortable);
-            if (bFormColumns)
-                objColumn.setColumnRendererSource(SimpleTableColumn.FORM_COLUMN_RENDERER_SOURCE);
-            if (objColumnSettingsContainer != null)
-                objColumn.loadSettings(objColumnSettingsContainer);
-
-            arrColumns.add(objColumn);
-        }
-
-        return new SimpleTableColumnModel(arrColumns);
-    }
-
-}
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/components/TableValues.html b/3.0.4/contrib/src/org/apache/tapestry/contrib/table/components/TableValues.html
deleted file mode 100644
index 29e6927..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/components/TableValues.html
+++ /dev/null
@@ -1,9 +0,0 @@
-<!-- $Id$ -->
-
-<span jwcid="$content$">
-
-<span jwcid="iterColumns">
-	<td jwcid="informal"><span jwcid="insertValueRenderer"/></td>
-</span>
-
-</span>
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/components/TableValues.java b/3.0.4/contrib/src/org/apache/tapestry/contrib/table/components/TableValues.java
deleted file mode 100644
index a316d31..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/components/TableValues.java
+++ /dev/null
@@ -1,136 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.table.components;
-
-import java.util.Iterator;
-
-import org.apache.tapestry.IBinding;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRender;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.contrib.table.model.ITableColumn;
-import org.apache.tapestry.contrib.table.model.ITableColumnModel;
-
-/**
- * A low level Table component that generates the columns in the current row in the table.
- * This component must be wrapped by {@link org.apache.tapestry.contrib.table.components.TableRows}.
- * 
- * <p>
- * The component iterates over the columns in the table and 
- * automatically renders the column values for the current table row. 
- * The columns are wrapped in 'td' tags by default. <br>
- * The column values are rendered using the renderer returned by the 
- * getValueRenderer() method in {@link org.apache.tapestry.contrib.table.model.ITableColumn}.
- * 
- * <p> 
- * Please see the Component Reference for details on how to use this component. 
- * 
- *  [<a href="../../../../../../../ComponentReference/contrib.TableValues.html">Component Reference</a>]
- * 
- * @author mindbridge
- * @version $Id$
- *
- */
-public abstract class TableValues extends AbstractTableRowComponent
-{
-    public static final String TABLE_VALUE_CSS_CLASS_SUFFIX = "ColumnValue";
-
-    // Bindings
-    public abstract IBinding getColumnBinding();
-    public abstract IBinding getClassBinding();
-
-	// Transient
-	private ITableColumn m_objTableColumn;
-
-    /**
-     * Get the list of all table columns to be displayed.
-     * 
-     * @return an iterator of all table columns
-     */
-	public Iterator getTableColumnIterator()
-	{
-		ITableColumnModel objColumnModel =
-			getTableModelSource().getTableModel().getColumnModel();
-		return objColumnModel.getColumns();
-	}
-
-    /**
-     * Returns the currently rendered table column. 
-     * You can call this method to obtain the current column.
-     *  
-     * @return ITableColumn the current table column
-     */
-	public ITableColumn getTableColumn()
-	{
-		return m_objTableColumn;
-	}
-
-    /**
-     * Sets the currently rendered table column. 
-     * This method is for internal use only.
-     * 
-     * @param tableColumn The current table column
-     */
-	public void setTableColumn(ITableColumn tableColumn)
-	{
-		m_objTableColumn = tableColumn;
-        
-        IBinding objColumnBinding = getColumnBinding();
-        if (objColumnBinding != null)
-            objColumnBinding.setObject(tableColumn);
-	}
-
-    /**
-     * Returns the renderer to be used to generate the appearance of the current column
-     * 
-     * @return the value renderer of the current column
-     */
-	public IRender getTableValueRenderer()
-	{
-		Object objRow = getTableRowSource().getTableRow();
-		return getTableColumn().getValueRenderer(
-			getPage().getRequestCycle(),
-			getTableModelSource(),
-			objRow);
-	}
-
-    /**
-     * Returns the CSS class of the generated table cell.
-     * It uses the class parameter if it has been bound, or
-     * the default value of "[column name]ColumnValue" otherwise.
-     * 
-     * @return the CSS class of the cell
-     */
-    public String getValueClass()
-    {
-        IBinding objClassBinding = getClassBinding();
-        if (objClassBinding != null)
-            return objClassBinding.getString();
-        else
-            return getTableColumn().getColumnName() + TABLE_VALUE_CSS_CLASS_SUFFIX;
-    }
-
-    /**
-     * @see org.apache.tapestry.BaseComponent#renderComponent(org.apache.tapestry.IMarkupWriter, org.apache.tapestry.IRequestCycle)
-     */
-    protected void renderComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        super.renderComponent(writer, cycle);
-
-        // set the current column to null when the component is not active
-        m_objTableColumn = null;
-    }
-
-}
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/components/TableValues.jwc b/3.0.4/contrib/src/org/apache/tapestry/contrib/table/components/TableValues.jwc
deleted file mode 100644
index 66c4702..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/components/TableValues.jwc
+++ /dev/null
@@ -1,66 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!--  $Id$ -->
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<component-specification class="org.apache.tapestry.contrib.table.components.TableValues" 
-	allow-body="yes" allow-informal-parameters="yes">
-	
-	<description>
-        A low level Table component that generates the columns for the current row in the table. 
-        This component must be wrapped by TableRows. 
-	</description>
-  
-	<parameter name="column" 
-		type="org.apache.tapestry.contrib.table.model.ITableColumn" 
-		required="no"
-		direction="custom">
-        <description>The current column being rendered</description>
-    </parameter>
-
-	<parameter name="element" 
-		type="java.lang.String" 
-		required="no"
-		direction="auto"
-    	default-value="'td'">
-        <description>The tag to use to wrap the values in, 'td' by default.</description>
-    </parameter>
-
-    <parameter name="class"
-        type="java.lang.String"
-        required="no"
-        direction="custom">
-        <description>The CSS class of the table values</description>
-    </parameter>
-    
-	<component id="iterColumns" type="Foreach">
-		<binding name="source" expression="tableColumnIterator"/>
-		<binding name="value" expression="tableColumn"/>
-	</component>
-  
-	<component id="informal" type="Any" inherit-informal-parameters="yes">
-		<inherited-binding name="element" parameter-name="element"/>
-        <binding name="class" expression="valueClass"/>
-	</component>
-  
-	<component id="insertValueRenderer" type="Delegator">
-		<binding name="delegate" expression="tableValueRenderer"/>
-	</component>
-  
-</component-specification>
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/components/TableView.html b/3.0.4/contrib/src/org/apache/tapestry/contrib/table/components/TableView.html
deleted file mode 100644
index 331d131..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/components/TableView.html
+++ /dev/null
@@ -1,9 +0,0 @@
-<!-- $Id$ -->
-
-<span jwcid="$content$">
-
-<table jwcid="table">
-	<span jwcid="insertWrapped"/>
-</table>
-
-</span>
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/components/TableView.java b/3.0.4/contrib/src/org/apache/tapestry/contrib/table/components/TableView.java
deleted file mode 100644
index 7b60608..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/components/TableView.java
+++ /dev/null
@@ -1,477 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.table.components;
-
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.List;
-
-import org.apache.commons.collections.CollectionUtils;
-import org.apache.tapestry.ApplicationRuntimeException;
-import org.apache.tapestry.BaseComponent;
-import org.apache.tapestry.IBinding;
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.contrib.table.model.IBasicTableModel;
-import org.apache.tapestry.contrib.table.model.ITableColumn;
-import org.apache.tapestry.contrib.table.model.ITableColumnModel;
-import org.apache.tapestry.contrib.table.model.ITableDataModel;
-import org.apache.tapestry.contrib.table.model.ITableModel;
-import org.apache.tapestry.contrib.table.model.ITableModelSource;
-import org.apache.tapestry.contrib.table.model.ITablePagingState;
-import org.apache.tapestry.contrib.table.model.ITableSessionStateManager;
-import org.apache.tapestry.contrib.table.model.ITableSessionStoreManager;
-import org.apache.tapestry.contrib.table.model.common.BasicTableModelWrap;
-import org.apache.tapestry.contrib.table.model.simple.SimpleListTableDataModel;
-import org.apache.tapestry.contrib.table.model.simple.SimpleTableColumnModel;
-import org.apache.tapestry.contrib.table.model.simple.SimpleTableModel;
-import org.apache.tapestry.contrib.table.model.simple.SimpleTableState;
-import org.apache.tapestry.event.PageDetachListener;
-import org.apache.tapestry.event.PageEvent;
-import org.apache.tapestry.event.PageRenderListener;
-
-/**
- * A low level Table component that wraps all other low level Table components.
- * This component carries the {@link org.apache.tapestry.contrib.table.model.ITableModel}
- * that is used by the other Table components. Please see the documentation of
- * {@link org.apache.tapestry.contrib.table.model.ITableModel} if you need to know more
- * about how a table is represented.
- * <p>
- * This component also handles the saving of the state of the model using an 
- * {@link org.apache.tapestry.contrib.table.model.ITableSessionStateManager}
- * to determine what part of the model is to be saved and an 
- * {@link  org.apache.tapestry.contrib.table.model.ITableSessionStoreManager}
- * to determine how to save it.
- * <p>
- * Upon the beginning of a new request cycle when the table model is first needed,
- * the model is obtained using the following process:
- * <ul>
- * <li>The persistent state of the table is loaded.
- * If the tableSessionStoreManager binding has not been bound, the state is loaded 
- * from a persistent property within the component (it is null at the beginning). 
- * Otherwise the supplied
- * {@link  org.apache.tapestry.contrib.table.model.ITableSessionStoreManager} is used
- * to load the persistent state.
- * <li>The table model is recreated using the 
- * {@link org.apache.tapestry.contrib.table.model.ITableSessionStateManager} that
- * could be supplied using the tableSessionStateManager binding 
- * (but has a default value and is therefore not required).
- * <li>If the {@link org.apache.tapestry.contrib.table.model.ITableSessionStateManager}
- * returns null, then a table model is taken from the tableModel binding. Thus, if
- * the {@link org.apache.tapestry.contrib.table.model.common.NullTableSessionStateManager}
- * is used, the table model would be taken from the tableModel binding every time.
- * </ul>
- * Just before the rendering phase the persistent state of the model is saved in
- * the session. This process occurs in reverse:
- * <ul>
- * <li>The persistent state of the model is taken via the 
- * {@link org.apache.tapestry.contrib.table.model.ITableSessionStateManager}.
- * <li>If the tableSessionStoreManager binding has not been bound, the persistent
- * state is saved as a persistent page property. Otherwise the supplied
- * {@link  org.apache.tapestry.contrib.table.model.ITableSessionStoreManager} is used
- * to save the persistent state. Use of the 
- * {@link  org.apache.tapestry.contrib.table.model.ITableSessionStoreManager} 
- * is usually necessary when tables with the same model have to be used across 
- * multiple pages, and hence the state has to be saved in the Visit, rather than
- * in a persistent component property.
- * </ul>
- * <p>
- * 
- * <p> 
- * Please see the Component Reference for details on how to use this component. 
- * 
- *  [<a href="../../../../../../../ComponentReference/contrib.TableView.html">Component Reference</a>]
- * 
- * @author mindbridge
- * @version $Id$
- */
-public abstract class TableView
-    extends BaseComponent
-    implements PageDetachListener, PageRenderListener, ITableModelSource
-{
-    // Component properties
-    private ITableSessionStateManager m_objDefaultSessionStateManager = null;
-    private ITableColumnModel m_objColumnModel = null;
-
-    // Transient objects
-    private ITableModel m_objTableModel;
-    private ITableModel m_objCachedTableModelValue;
-
-    // enhanced parameter methods
-    public abstract ITableModel getTableModelValue();
-    public abstract Object getSource();
-    public abstract Object getColumns();
-    public abstract IBinding getColumnsBinding();
-    public abstract IBinding getPageSizeBinding();
-    public abstract String getInitialSortColumn();
-    public abstract boolean getInitialSortOrder();
-    public abstract ITableSessionStateManager getTableSessionStateManager();
-    public abstract ITableSessionStoreManager getTableSessionStoreManager();
-    public abstract IComponent getColumnSettingsContainer();
-
-    // enhanced property methods
-    public abstract Serializable getSessionState();
-    public abstract void setSessionState(Serializable sessionState);
-
-    /**
-     *  The component constructor. Invokes the component member initializations. 
-     */
-    public TableView()
-    {
-        initialize();
-    }
-
-    /**
-     *  Invokes the component member initializations.
-     *  
-     *  @see org.apache.tapestry.event.PageDetachListener#pageDetached(PageEvent)
-     */
-    public void pageDetached(PageEvent objEvent)
-    {
-        initialize();
-    }
-
-    /**
-     *  Initialize the component member variables.
-     */
-    private void initialize()
-    {
-        m_objTableModel = null;
-        m_objCachedTableModelValue = null;
-    }
-
-    /**
-     *  Resets the table by removing any stored table state. 
-     *  This means that the current column to sort on and the current page will be
-     *  forgotten and all data will be reloaded.
-     */
-    public void reset()
-    {
-		initialize();
-        storeSessionState(null);
-    }
-
-    public ITableModel getCachedTableModelValue()
-    {
-        if (m_objCachedTableModelValue == null)
-            m_objCachedTableModelValue = getTableModelValue();
-        return m_objCachedTableModelValue;
-    }
-
-    /**
-     *  Returns the tableModel.
-     * 
-     *  @return ITableModel the table model used by the table components
-     */
-    public ITableModel getTableModel()
-    {
-        // if null, first try to recreate the model from the session state
-        if (m_objTableModel == null)
-        {
-            Serializable objState = loadSessionState();
-            m_objTableModel = getTableSessionStateManager().recreateTableModel(objState);
-        }
-
-        // if the session state does not help, get the model from the binding
-        if (m_objTableModel == null)
-            m_objTableModel = getCachedTableModelValue();
-
-        // if the model from the binding is null, build a model from source and columns
-        if (m_objTableModel == null)
-            m_objTableModel = generateTableModel(null);
-
-        if (m_objTableModel == null)
-            throw new ApplicationRuntimeException(
-                TableUtils.format("missing-table-model", getExtendedId()));
-
-        return m_objTableModel;
-    }
-
-    /**
-     *  Generate a table model using the 'source' and 'columns' parameters.
-     * 
-     *  @return the newly generated table model
-     */
-    protected ITableModel generateTableModel(SimpleTableState objState)
-    {
-        // create a new table state if none is passed
-        if (objState == null)
-        {
-            objState = new SimpleTableState();
-            objState.getSortingState().setSortColumn(getInitialSortColumn(), getInitialSortOrder());
-        }
-
-        // update the page size if set in the parameter
-        IBinding objPageSizeBinding = getPageSizeBinding();
-        if (objPageSizeBinding != null)
-            objState.getPagingState().setPageSize(objPageSizeBinding.getInt());
-
-        // get the column model. if not possible, return null.
-        ITableColumnModel objColumnModel = getTableColumnModel();
-        if (objColumnModel == null)
-            return null;
-
-        Object objSourceValue = getSource();
-        if (objSourceValue == null)
-            return null;
-
-        // if the source parameter is of type {@link IBasicTableModel}, 
-        // create and return an appropriate wrapper
-        if (objSourceValue instanceof IBasicTableModel)
-            return new BasicTableModelWrap(
-                (IBasicTableModel) objSourceValue,
-                objColumnModel,
-                objState);
-
-        // otherwise, the source parameter must contain the data to be displayed
-        ITableDataModel objDataModel = null;
-        if (objSourceValue instanceof Object[])
-            objDataModel = new SimpleListTableDataModel((Object[]) objSourceValue);
-        else if (objSourceValue instanceof List)
-            objDataModel = new SimpleListTableDataModel((List) objSourceValue);
-        else if (objSourceValue instanceof Collection)
-            objDataModel = new SimpleListTableDataModel((Collection) objSourceValue);
-        else if (objSourceValue instanceof Iterator)
-            objDataModel = new SimpleListTableDataModel((Iterator) objSourceValue);
-
-        if (objDataModel == null)
-            throw new ApplicationRuntimeException(
-                TableUtils.format(
-                    "invalid-table-source",
-                    getExtendedId(),
-                    objSourceValue.getClass()));
-
-        return new SimpleTableModel(objDataModel, objColumnModel, objState);
-    }
-
-    /**
-     *  Returns the table column model as specified by the 'columns' binding.
-     *  If the value of the 'columns' binding is of a type different than
-     *  ITableColumnModel, this method makes the appropriate conversion. 
-     * 
-     *  @return The table column model as specified by the 'columns' binding
-     */
-    protected ITableColumnModel getTableColumnModel()
-    {
-        Object objColumns = getColumns();
-
-        if (objColumns == null)
-            return null;
-
-        if (objColumns instanceof ITableColumnModel)
-        {
-            return (ITableColumnModel) objColumns;
-        }
-
-        if (objColumns instanceof Iterator)
-        {
-            // convert to List
-            Iterator objColumnsIterator = (Iterator) objColumns;
-            List arrColumnsList = new ArrayList();
-            CollectionUtils.addAll(arrColumnsList, objColumnsIterator);
-            objColumns = arrColumnsList;
-        }
-
-        if (objColumns instanceof List)
-        {
-            // validate that the list contains only ITableColumn instances
-            List arrColumnsList = (List) objColumns;
-            int nColumnsNumber = arrColumnsList.size();
-            for (int i = 0; i < nColumnsNumber; i++)
-            {
-                if (!(arrColumnsList.get(i) instanceof ITableColumn))
-                    throw new ApplicationRuntimeException(
-                        TableUtils.format("columns-only-please", getExtendedId()));
-            }
-            //objColumns = arrColumnsList.toArray(new ITableColumn[nColumnsNumber]);
-            return new SimpleTableColumnModel(arrColumnsList);
-        }
-
-        if (objColumns instanceof ITableColumn[])
-        {
-            return new SimpleTableColumnModel((ITableColumn[]) objColumns);
-        }
-
-        if (objColumns instanceof String)
-        {
-            String strColumns = (String) objColumns;
-            if (getColumnsBinding().isInvariant())
-            {
-                // if the binding is invariant, create the columns only once
-                if (m_objColumnModel == null)
-                    m_objColumnModel = generateTableColumnModel(strColumns);
-                return m_objColumnModel;
-            }
-
-            // if the binding is not invariant, create them every time
-            return generateTableColumnModel(strColumns);
-        }
-
-        throw new ApplicationRuntimeException(
-            TableUtils.format("invalid-table-columns", getExtendedId(), objColumns.getClass()));
-    }
-
-    /**
-     *  Generate a table column model out of the description string provided.
-     *  Entries in the description string are separated by commas.
-     *  Each column entry is of the format name, name:expression, 
-     *  or name:displayName:expression.
-     *  An entry prefixed with ! represents a non-sortable column.
-     *  If the whole description string is prefixed with *, it represents
-     *  columns to be included in a Form. 
-     * 
-     *  @param strDesc the description of the column model to be generated
-     *  @return a table column model based on the provided description
-     */
-    protected ITableColumnModel generateTableColumnModel(String strDesc)
-    {
-        IComponent objColumnSettingsContainer = getColumnSettingsContainer();
-        return TableUtils.generateTableColumnModel(strDesc, this, objColumnSettingsContainer);
-    }
-
-    /**
-     *  The default session state manager to be used in case no such manager
-     *  is provided by the corresponding parameter.
-     * 
-     *  @return the default session state manager
-     */
-    public ITableSessionStateManager getDefaultTableSessionStateManager()
-    {
-        if (m_objDefaultSessionStateManager == null)
-            m_objDefaultSessionStateManager = new TableViewSessionStateManager(this);
-        return m_objDefaultSessionStateManager;
-    }
-
-    /**
-     *  Invoked when there is a modification of the table state and it needs to be saved
-     *  
-     *  @see org.apache.tapestry.contrib.table.model.ITableModelSource#fireObservedStateChange()
-     */
-    public void fireObservedStateChange()
-    {
-        saveSessionState();
-    }
-
-    /**
-     *  Ensures that the table state is saved before the render phase begins 
-     *  in case there are modifications for which {@link #fireObservedStateChange()} 
-     *  has not been invoked.
-     * 
-     * @see org.apache.tapestry.event.PageRenderListener#pageBeginRender(org.apache.tapestry.event.PageEvent)
-     */
-    public void pageBeginRender(PageEvent event)
-    {
-        // 'suspenders': save the table model if it has been already loaded.
-        // this means that if a change has been made explicitly in a listener, 
-        // it will be saved. this is the last place before committing the changes 
-        // where a save can occur  
-        if (m_objTableModel != null)
-            saveSessionState();
-    }
-
-    /**
-     *  @see org.apache.tapestry.event.PageRenderListener#pageEndRender(PageEvent)
-     */
-    public void pageEndRender(PageEvent objEvent)
-    {
-    }
-
-    /**
-     *  Saves the table state using the SessionStateManager to determine 
-     *  what to save and the SessionStoreManager to determine where to save it.  
-     *
-     */
-    protected void saveSessionState()
-    {
-        ITableModel objModel = getTableModel();
-        Serializable objState = getTableSessionStateManager().getSessionState(objModel);
-        storeSessionState(objState);
-    }
-
-    /**
-     *  Loads the table state using the SessionStoreManager.
-     * 
-     *  @return the stored table state
-     */
-    protected Serializable loadSessionState()
-    {
-        ITableSessionStoreManager objManager = getTableSessionStoreManager();
-        if (objManager != null)
-            return objManager.loadState(getPage().getRequestCycle());
-        return getSessionState();
-    }
-
-    /**
-     *  Stores the table state using the SessionStoreManager.
-     * 
-     *  @param objState the table state to store
-     */
-    protected void storeSessionState(Serializable objState)
-    {
-        ITableSessionStoreManager objManager = getTableSessionStoreManager();
-        if (objManager != null)
-            objManager.saveState(getPage().getRequestCycle(), objState);
-        else
-            setSessionState(objState);
-    }
-
-    /**
-     *  Make sure that the values stored in the model are useable and correct.
-     *  The changes made here are not saved.  
-     */
-    protected void validateValues()
-    {
-        ITableModel objModel = getTableModel();
-
-        // make sure current page is within the allowed range
-        ITablePagingState objPagingState = objModel.getPagingState();
-        int nCurrentPage = objPagingState.getCurrentPage();
-        int nPageCount = objModel.getPageCount();
-        if (nCurrentPage >= nPageCount)
-        {
-            // the current page is greater than the page count. adjust.
-            nCurrentPage = nPageCount - 1;
-            objPagingState.setCurrentPage(nCurrentPage);
-        }
-        if (nCurrentPage < 0)
-        {
-            // the current page is before the first page. adjust.
-            nCurrentPage = 0;
-            objPagingState.setCurrentPage(nCurrentPage);
-        }
-    }
-
-    /**
-     *  Stores a pointer to this component in the Request Cycle while rendering
-     *  so that wrapped components have access to it.
-     * 
-     *  @see org.apache.tapestry.BaseComponent#renderComponent(IMarkupWriter, IRequestCycle)
-     */
-    protected void renderComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        Object objOldValue = cycle.getAttribute(ITableModelSource.TABLE_MODEL_SOURCE_ATTRIBUTE);
-        cycle.setAttribute(ITableModelSource.TABLE_MODEL_SOURCE_ATTRIBUTE, this);
-
-        initialize();
-        validateValues();
-        super.renderComponent(writer, cycle);
-
-        cycle.setAttribute(ITableModelSource.TABLE_MODEL_SOURCE_ATTRIBUTE, objOldValue);
-    }
-
-}
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/components/TableView.jwc b/3.0.4/contrib/src/org/apache/tapestry/contrib/table/components/TableView.jwc
deleted file mode 100644
index b2324fc..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/components/TableView.jwc
+++ /dev/null
@@ -1,139 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!--  $Id$ -->
-<!DOCTYPE component-specification PUBLIC 
-    "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-    "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<component-specification class="org.apache.tapestry.contrib.table.components.TableView" 
-    allow-body="yes" allow-informal-parameters="yes">
-    
-    <description>
-        The main lower-level Table component.
-        This component should wrap all other lower-level Table components such as 
-        TablePages and TableRows, as it provides the data they use.
-    </description>
-    
-    <parameter name="tableModel" 
-        type="org.apache.tapestry.contrib.table.model.ITableModel" 
-        property-name="tableModelValue"
-        required="no" 
-        direction="auto"
-        default-value="null">
-        <description>
-            The model describing the data to be presented by the table components.
-            This parameter is optional, but either the 'tableModel' or both
-            'source' and 'columns' parameters must be provided.
-        </description>
-    </parameter>
-    
-    <parameter name="source" type="java.lang.Object" required="no" direction="auto" default-value="null">
-        <description>
-            The data to be displayed by the component. This parameter is available as
-            an alternative to tableModel and must be used in combination with the
-            'columns' parameter. 
-            The parameter must be an array of values, a collection, an iterator, 
-            or an object implementing the IBasicTableModel interface.
-        </description>
-    </parameter>
-    
-    <parameter name="columns" type="java.lang.Object" required="no" direction="auto" default-value="null">
-        <description>
-            The table columns to be displayed. 
-            The parameter must be an array, a list, or an Iterator of ITableColumn objects,
-            an ITableColumnModel, or a String describing the columns (see documentation).
-        </description>
-    </parameter>
-    
-	<parameter name="pageSize" 
-		type="int" 
-		required="no">
-        <description>
-            The number of records displayed per page when source/columns are used.
-            The page size is 10 by default.
-        </description>
-    </parameter>
-  
-	<parameter name="initialSortColumn" 
-		type="java.lang.String" 
-		required="no"
-        direction="auto"
-        default-value="null">
-        <description>
-            The id of the column to initially sort the table by.
-            The column is set to null by default, i.e. there is no sorting.
-        </description>
-    </parameter>
-  
-	<parameter name="initialSortOrder" 
-		type="boolean" 
-		required="no"
-        direction="auto"
-        default-value="false">
-        <description>
-            The order of the initial sorting.
-            Set this parameter to 'false' to sort in an ascending order
-            and to 'true' to sort in a descending one.
-        </description>
-    </parameter>
-  
-    <parameter name="tableSessionStateManager" 
-        type="org.apache.tapestry.contrib.table.model.ITableSessionStateManager" 
-        required="no"
-        direction="auto"
-        default-value="defaultTableSessionStateManager">
-        <description>
-            The manager defining what part of the table model will be stored in 
-            the session.
-        </description>
-    </parameter>
-    
-    <parameter name="tableSessionStoreManager" 
-        type="org.apache.tapestry.contrib.table.model.ITableSessionStoreManager" 
-        required="no"
-        direction="auto"
-        default-value="null">
-        <description>
-            The manager defining where the session data will be stored.
-        </description>
-    </parameter>
-    
-    <parameter name="columnSettingsContainer" 
-        type="org.apache.tapestry.IComponent" 
-        required="no" 
-        direction="auto" 
-        default-value="container">
-        <description>
-            The component where Block and messages are pulled from when using source/columns.
-        </description>
-    </parameter>
-    
-    <parameter name="element" type="java.lang.String" required="no" default-value="'table'">
-        <description>
-            The tag with which the component will be inserted in the generated content.
-        </description>
-    </parameter>
-    
-    <property-specification name="sessionState" type="java.io.Serializable" persistent="yes"/>
-    
-    <component id="table" type="Any" inherit-informal-parameters="yes">
-        <inherited-binding name="element" parameter-name="element"/>
-    </component>
-    
-    <component id="insertWrapped" type="RenderBody"/>
-    
-</component-specification>
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/components/TableViewSessionStateManager.java b/3.0.4/contrib/src/org/apache/tapestry/contrib/table/components/TableViewSessionStateManager.java
deleted file mode 100644
index b54ec2c..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/components/TableViewSessionStateManager.java
+++ /dev/null
@@ -1,69 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.table.components;
-
-import java.io.Serializable;
-
-import org.apache.tapestry.contrib.table.model.ITableModel;
-import org.apache.tapestry.contrib.table.model.ITableSessionStateManager;
-import org.apache.tapestry.contrib.table.model.simple.SimpleTableState;
-
-/**
- *  Acts like {@link org.apache.tapestry.contrib.table.model.common.FullTableSessionStateManager} 
- *  if the model is provided via the tableModel parameter; 
- *  saves only the model state otherwise. 
- * 
- *  @author mindbridge
- *  @version $Id$
- */
-public class TableViewSessionStateManager implements ITableSessionStateManager
-{
-    private TableView m_objView;
-
-    public TableViewSessionStateManager(TableView objView)
-    {
-        m_objView = objView;
-    }
-    
-    /**
-     * @see org.apache.tapestry.contrib.table.model.ITableSessionStateManager#getSessionState(org.apache.tapestry.contrib.table.model.ITableModel)
-     */
-    public Serializable getSessionState(ITableModel objModel)
-    {
-        // if the model is provided using the 'tableModel' parameter, 
-        // emulate FullTableSessionStateManager and save everything
-        // (backward compatibility)
-        if (m_objView.getCachedTableModelValue() != null)
-            return (Serializable) objModel;
-            
-        // otherwise save only the state
-        return new SimpleTableState(objModel.getPagingState(), objModel.getSortingState());
-    }
-
-    /**
-     * @see org.apache.tapestry.contrib.table.model.ITableSessionStateManager#recreateTableModel(java.io.Serializable)
-     */
-    public ITableModel recreateTableModel(Serializable objState)
-    {
-        // if the state implements ITableModel, return itself
-        // (backward compatibility)
-        if (objState instanceof ITableModel)
-            return (ITableModel) objState;
-            
-        // otherwise have the component re-generate the model using the provided state
-        return m_objView.generateTableModel((SimpleTableState) objState);
-    }
-
-}
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/components/inserted/SimpleTableColumnComponent.html b/3.0.4/contrib/src/org/apache/tapestry/contrib/table/components/inserted/SimpleTableColumnComponent.html
deleted file mode 100644
index 6dcb718..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/components/inserted/SimpleTableColumnComponent.html
+++ /dev/null
@@ -1,18 +0,0 @@
-<!-- $Id$ -->
-
-<span jwcid="$content$">
-
-<span jwcid="condSorted">
-	<table border=0 cellspacing=0 cellpadding=0 align="center">
-	<tr>
-	<td><a jwcid="linkColumn"><span jwcid="insertSortedColumn"/></a></td>
-	<span jwcid="condSort"><td>&nbsp;<span jwcid="imageSort" align="center"/></td></span>
-	</tr>
-	</table>
-</span>
-
-<span jwcid="condNotSorted">
-	<span jwcid="insertNotSortedColumn"/>
-</span>
-
-</span>
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/components/inserted/SimpleTableColumnComponent.java b/3.0.4/contrib/src/org/apache/tapestry/contrib/table/components/inserted/SimpleTableColumnComponent.java
deleted file mode 100644
index 9b83796..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/components/inserted/SimpleTableColumnComponent.java
+++ /dev/null
@@ -1,164 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.table.components.inserted;
-
-import org.apache.tapestry.BaseComponent;
-import org.apache.tapestry.IAsset;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.contrib.table.components.TableColumns;
-import org.apache.tapestry.contrib.table.model.ITableColumn;
-import org.apache.tapestry.contrib.table.model.ITableModel;
-import org.apache.tapestry.contrib.table.model.ITableModelSource;
-import org.apache.tapestry.contrib.table.model.ITableRendererListener;
-import org.apache.tapestry.contrib.table.model.ITableSortingState;
-import org.apache.tapestry.contrib.table.model.simple.SimpleTableColumn;
-import org.apache.tapestry.event.PageDetachListener;
-import org.apache.tapestry.event.PageEvent;
-import org.apache.tapestry.util.ComponentAddress;
-
-/**
- * A component that renders the default column header.
- * 
- * If the current column is sortable, it renders the header as a link.
- * Clicking on the link causes the table to be sorted on that column.
- * Clicking on the link again causes the sorting order to be reversed.
- * 
- * @version $Id$
- * @author mindbridge
- */
-public class SimpleTableColumnComponent
-	extends BaseComponent
-	implements ITableRendererListener, PageDetachListener
-{
-	// transient
-	private ITableColumn m_objColumn;
-	private ITableModelSource m_objModelSource;
-
-	public SimpleTableColumnComponent()
-	{
-		init();
-	}
-
-	/**
-	 * @see org.apache.tapestry.event.PageDetachListener#pageDetached(PageEvent)
-	 */
-	public void pageDetached(PageEvent arg0)
-	{
-		init();
-	}
-
-	private void init()
-	{
-		m_objColumn = null;
-		m_objModelSource = null;
-	}
-
-
-    /**
-     * @see org.apache.tapestry.contrib.table.model.ITableRendererListener#initializeRenderer(IRequestCycle, ITableModelSource, ITableColumn, Object)
-     */
-    public void initializeRenderer(
-        IRequestCycle objCycle,
-        ITableModelSource objSource,
-        ITableColumn objColumn,
-        Object objRow)
-    {
-        m_objModelSource = objSource;
-        m_objColumn = objColumn;
-    }
-
-	public ITableModel getTableModel()
-	{
-		return m_objModelSource.getTableModel();
-	}
-
-	public boolean getColumnSorted()
-	{
-		return m_objColumn.getSortable();
-	}
-
-	public String getDisplayName()
-	{
-        if (m_objColumn instanceof SimpleTableColumn) {
-            SimpleTableColumn objSimpleColumn = (SimpleTableColumn) m_objColumn;
-    		return objSimpleColumn.getDisplayName();
-        }
-        return m_objColumn.getColumnName();
-	}
-
-	public boolean getIsSorted()
-	{
-		ITableSortingState objSortingState = getTableModel().getSortingState();
-		String strSortColumn = objSortingState.getSortColumn();
-		return m_objColumn.getColumnName().equals(strSortColumn);
-	}
-
-	public IAsset getSortImage()
-	{
-		IAsset objImageAsset;
-
-		IRequestCycle objCycle = getPage().getRequestCycle();
-		ITableSortingState objSortingState = getTableModel().getSortingState();
-		if (objSortingState.getSortOrder()
-			== ITableSortingState.SORT_ASCENDING)
-		{
-			objImageAsset =
-				(IAsset) objCycle.getAttribute(
-					TableColumns.TABLE_COLUMN_ARROW_UP_ATTRIBUTE);
-			if (objImageAsset == null)
-				objImageAsset = getAsset("sortUp");
-		}
-		else
-		{
-			objImageAsset =
-				(IAsset) objCycle.getAttribute(
-					TableColumns.TABLE_COLUMN_ARROW_DOWN_ATTRIBUTE);
-			if (objImageAsset == null)
-				objImageAsset = getAsset("sortDown");
-		}
-
-		return objImageAsset;
-	}
-
-	public Object[] getColumnSelectedParameters()
-	{
-		return new Object[] {
-			new ComponentAddress(m_objModelSource),
-			m_objColumn.getColumnName()};
-	}
-
-	public void columnSelected(IRequestCycle objCycle)
-	{
-		Object[] arrArgs = objCycle.getServiceParameters();
-		ComponentAddress objAddr = (ComponentAddress) arrArgs[0];
-		String strColumnName = (String) arrArgs[1];
-
-		ITableModelSource objSource =
-			(ITableModelSource) objAddr.findComponent(objCycle);
-		ITableModel objModel = objSource.getTableModel();
-
-		ITableSortingState objState = objModel.getSortingState();
-		if (strColumnName.equals(objState.getSortColumn()))
-			objState.setSortColumn(strColumnName, !objState.getSortOrder());
-		else
-			objState.setSortColumn(
-				strColumnName,
-				ITableSortingState.SORT_ASCENDING);
-
-		// ensure that the change is saved
-		objSource.fireObservedStateChange();
-	}
-
-}
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/components/inserted/SimpleTableColumnComponent.jwc b/3.0.4/contrib/src/org/apache/tapestry/contrib/table/components/inserted/SimpleTableColumnComponent.jwc
deleted file mode 100644
index 93065bc..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/components/inserted/SimpleTableColumnComponent.jwc
+++ /dev/null
@@ -1,60 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!--  $Id$ -->
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<component-specification class="org.apache.tapestry.contrib.table.components.inserted.SimpleTableColumnComponent" 
-	allow-informal-parameters="yes">
-	
-	<description>
-	</description>
-	
-	<component id="condSorted" type="Conditional">
-		<binding name="condition" expression="columnSorted"/>
-	</component>
-	
-	<component id="condNotSorted" type="Conditional">
-		<binding name="condition" expression="columnSorted"/>
-		<static-binding name="invert">true</static-binding>
-	</component>
-	
-	<component id="insertSortedColumn" type="Insert">
-		<binding name="value" expression="displayName"/>
-	</component>
-	
-	<component id="insertNotSortedColumn" type="Insert">
-		<binding name="value" expression="displayName"/>
-	</component>
-	
-	<component id="linkColumn" type="DirectLink">
-		<binding name="listener" expression="listeners.columnSelected"/>
-		<binding name="parameters" expression="columnSelectedParameters"/>
-	</component>
-	
-	<component id="imageSort" type="Image">
-		<binding name="image" expression="sortImage"/>
-	</component>
-	
-	<component id="condSort" type="Conditional">
-		<binding name="condition" expression="isSorted"/>
-	</component>
-	
-    <private-asset name="sortDown" resource-path="arrow-down.gif"/>
-    <private-asset name="sortUp" resource-path="arrow-up.gif"/>
-</component-specification>
\ No newline at end of file
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/components/inserted/SimpleTableColumnFormComponent.html b/3.0.4/contrib/src/org/apache/tapestry/contrib/table/components/inserted/SimpleTableColumnFormComponent.html
deleted file mode 100644
index 6dcb718..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/components/inserted/SimpleTableColumnFormComponent.html
+++ /dev/null
@@ -1,18 +0,0 @@
-<!-- $Id$ -->
-
-<span jwcid="$content$">
-
-<span jwcid="condSorted">
-	<table border=0 cellspacing=0 cellpadding=0 align="center">
-	<tr>
-	<td><a jwcid="linkColumn"><span jwcid="insertSortedColumn"/></a></td>
-	<span jwcid="condSort"><td>&nbsp;<span jwcid="imageSort" align="center"/></td></span>
-	</tr>
-	</table>
-</span>
-
-<span jwcid="condNotSorted">
-	<span jwcid="insertNotSortedColumn"/>
-</span>
-
-</span>
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/components/inserted/SimpleTableColumnFormComponent.java b/3.0.4/contrib/src/org/apache/tapestry/contrib/table/components/inserted/SimpleTableColumnFormComponent.java
deleted file mode 100644
index bfd9795..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/components/inserted/SimpleTableColumnFormComponent.java
+++ /dev/null
@@ -1,137 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.table.components.inserted;
-
-import org.apache.tapestry.BaseComponent;
-import org.apache.tapestry.IAsset;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.contrib.table.components.TableColumns;
-import org.apache.tapestry.contrib.table.model.ITableColumn;
-import org.apache.tapestry.contrib.table.model.ITableModel;
-import org.apache.tapestry.contrib.table.model.ITableModelSource;
-import org.apache.tapestry.contrib.table.model.ITableRendererListener;
-import org.apache.tapestry.contrib.table.model.ITableSortingState;
-import org.apache.tapestry.contrib.table.model.simple.SimpleTableColumn;
-
-/**
- * A component that renders the default column header in a form.
- * 
- * If the current column is sortable, it renders the header as a link.
- * Clicking on the link causes the table to be sorted on that column.
- * Clicking on the link again causes the sorting order to be reversed.
- * 
- * This component renders links that cause the form to be submitted. 
- * This ensures that the updated data in the other form fields is preserved. 
- * 
- * @version $Id$
- * @author mindbridge
- */
-public abstract class SimpleTableColumnFormComponent
-	extends BaseComponent
-	implements ITableRendererListener
-{
-
-    public abstract ITableColumn getTableColumn();
-    public abstract void setTableColumn(ITableColumn objColumn);
-
-    public abstract ITableModelSource getTableModelSource();
-    public abstract void setTableModelSource(ITableModelSource objSource);
-
-    public abstract String getSelectedColumnName();
-
-    /**
-     * @see org.apache.tapestry.contrib.table.model.ITableRendererListener#initializeRenderer(IRequestCycle, ITableModelSource, ITableColumn, Object)
-     */
-    public void initializeRenderer(
-        IRequestCycle objCycle,
-        ITableModelSource objSource,
-        ITableColumn objColumn,
-        Object objRow)
-    {
-        setTableModelSource(objSource);
-        setTableColumn(objColumn);
-    }
-
-	public ITableModel getTableModel()
-	{
-		return getTableModelSource().getTableModel();
-	}
-
-	public boolean getColumnSorted()
-	{
-		return getTableColumn().getSortable();
-	}
-
-	public String getDisplayName()
-	{
-        ITableColumn objColumn = getTableColumn();
-        
-        if (objColumn instanceof SimpleTableColumn) {
-            SimpleTableColumn objSimpleColumn = (SimpleTableColumn) objColumn;
-    		return objSimpleColumn.getDisplayName();
-        }
-        return objColumn.getColumnName();
-	}
-
-	public boolean getIsSorted()
-	{
-		ITableSortingState objSortingState = getTableModel().getSortingState();
-		String strSortColumn = objSortingState.getSortColumn();
-		return getTableColumn().getColumnName().equals(strSortColumn);
-	}
-
-	public IAsset getSortImage()
-	{
-		IAsset objImageAsset;
-
-		IRequestCycle objCycle = getPage().getRequestCycle();
-		ITableSortingState objSortingState = getTableModel().getSortingState();
-		if (objSortingState.getSortOrder()
-			== ITableSortingState.SORT_ASCENDING)
-		{
-			objImageAsset =
-				(IAsset) objCycle.getAttribute(
-					TableColumns.TABLE_COLUMN_ARROW_UP_ATTRIBUTE);
-			if (objImageAsset == null)
-				objImageAsset = getAsset("sortUp");
-		}
-		else
-		{
-			objImageAsset =
-				(IAsset) objCycle.getAttribute(
-					TableColumns.TABLE_COLUMN_ARROW_DOWN_ATTRIBUTE);
-			if (objImageAsset == null)
-				objImageAsset = getAsset("sortDown");
-		}
-
-		return objImageAsset;
-	}
-
-	public void columnSelected(IRequestCycle objCycle)
-	{
-        String strColumnName = getSelectedColumnName();
-		ITableSortingState objState = getTableModel().getSortingState();
-		if (strColumnName.equals(objState.getSortColumn()))
-			objState.setSortColumn(strColumnName, !objState.getSortOrder());
-		else
-			objState.setSortColumn(
-				strColumnName,
-				ITableSortingState.SORT_ASCENDING);
-
-		// ensure that the change is saved
-		getTableModelSource().fireObservedStateChange();
-	}
-
-}
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/components/inserted/SimpleTableColumnFormComponent.jwc b/3.0.4/contrib/src/org/apache/tapestry/contrib/table/components/inserted/SimpleTableColumnFormComponent.jwc
deleted file mode 100644
index 7f36541..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/components/inserted/SimpleTableColumnFormComponent.jwc
+++ /dev/null
@@ -1,71 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!--  $Id$ -->
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<component-specification class="org.apache.tapestry.contrib.table.components.inserted.SimpleTableColumnFormComponent" 
-	allow-informal-parameters="yes">
-	
-	<description>
-	</description>
-	
-	<property-specification name="tableModelSource" 
-		type="org.apache.tapestry.contrib.table.model.ITableModelSource"
-		initial-value="null"/>
-	
-	<property-specification name="tableColumn" 
-		type="org.apache.tapestry.contrib.table.model.ITableColumn"
-		initial-value="null"/>
-	
-	<property-specification name="selectedColumnName" type="java.lang.String"/>
-	
-	<component id="condSorted" type="FormConditional">
-		<binding name="condition" expression="columnSorted"/>
-	</component>
-	
-	<component id="condNotSorted" type="FormConditional">
-		<binding name="condition" expression="!columnSorted"/>
-	</component>
-	
-	<component id="insertSortedColumn" type="Insert">
-		<binding name="value" expression="displayName"/>
-	</component>
-	
-	<component id="insertNotSortedColumn" type="Insert">
-		<binding name="value" expression="displayName"/>
-	</component>
-	
-	<component id="linkColumn" type="LinkSubmit">
-		<binding name="listener" expression="listeners.columnSelected"/>
-		<binding name="tag" expression="tableColumn.columnName"/>
-		<binding name="selected" expression="selectedColumnName"/>
-	</component>
-	
-	<component id="imageSort" type="Image">
-		<binding name="image" expression="sortImage"/>
-	</component>
-	
-	<component id="condSort" type="FormConditional">
-		<binding name="condition" expression="isSorted"/>
-	</component>
-	
-    <private-asset name="sortDown" resource-path="arrow-down.gif"/>
-    <private-asset name="sortUp" resource-path="arrow-up.gif"/>
-    
-</component-specification>
\ No newline at end of file
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/components/inserted/SimpleTableColumnPage.html b/3.0.4/contrib/src/org/apache/tapestry/contrib/table/components/inserted/SimpleTableColumnPage.html
deleted file mode 100644
index a1d70de..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/components/inserted/SimpleTableColumnPage.html
+++ /dev/null
@@ -1,8 +0,0 @@
-<!-- $Id$ -->
-
-<span jwcid="$content$">
-
-	<span jwcid="tableColumnComponent"/>
-	<span jwcid="tableColumnFormComponent"/>
-
-</span>
\ No newline at end of file
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/components/inserted/SimpleTableColumnPage.page b/3.0.4/contrib/src/org/apache/tapestry/contrib/table/components/inserted/SimpleTableColumnPage.page
deleted file mode 100644
index b84772d..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/components/inserted/SimpleTableColumnPage.page
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-    Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<page-specification>
-
-	<component id="tableColumnComponent" type="SimpleTableColumnComponent"/>
-	<component id="tableColumnFormComponent" type="SimpleTableColumnFormComponent"/>
-
-</page-specification>
\ No newline at end of file
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/components/inserted/arrow-down.gif b/3.0.4/contrib/src/org/apache/tapestry/contrib/table/components/inserted/arrow-down.gif
deleted file mode 100644
index d9339a6..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/components/inserted/arrow-down.gif
+++ /dev/null
Binary files differ
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/components/inserted/arrow-up.gif b/3.0.4/contrib/src/org/apache/tapestry/contrib/table/components/inserted/arrow-up.gif
deleted file mode 100644
index b70a479..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/components/inserted/arrow-up.gif
+++ /dev/null
Binary files differ
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/model/CTableDataModelEvent.java b/3.0.4/contrib/src/org/apache/tapestry/contrib/table/model/CTableDataModelEvent.java
deleted file mode 100644
index c402687..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/model/CTableDataModelEvent.java
+++ /dev/null
@@ -1,25 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.table.model;
-
-/**
- * @author mindbridge
- *
- */
-public class CTableDataModelEvent
-{
-    public CTableDataModelEvent() {
-    }
-}
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/model/IBasicTableModel.java b/3.0.4/contrib/src/org/apache/tapestry/contrib/table/model/IBasicTableModel.java
deleted file mode 100644
index aa1ac30..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/model/IBasicTableModel.java
+++ /dev/null
@@ -1,43 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.table.model;
-
-import java.util.Iterator;
-
-/**
- * A simplified version of the table model that concerns itself only with
- * providing the data on the current page. 
- * 
- * @version $Id$
- * @author mindbridge
- * @since 3.0
- */
-public interface IBasicTableModel
-{
-    /**
-     *  Returns the number of all records
-     *  @return the number of all rows
-     **/
-    int getRowCount();
-
-    /** 
-     *  Returns the rows on the current page.
-     *  @param nFirst the index of the first item to be dispayed
-     *  @param nPageSize the number of items to be displayed
-     *  @param objSortColumn the column to sort by or null if there is no sorting
-     *  @param bSortOrder determines the sorting order (ascending or descending)
-     **/
-    Iterator getCurrentPageRows(int nFirst, int nPageSize, ITableColumn objSortColumn, boolean bSortOrder);
-}
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/model/IPrimaryKeyConvertor.java b/3.0.4/contrib/src/org/apache/tapestry/contrib/table/model/IPrimaryKeyConvertor.java
deleted file mode 100644
index ec66178..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/model/IPrimaryKeyConvertor.java
+++ /dev/null
@@ -1,43 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.table.model;
-
-/**
- * An interface for converting an object to its primary key and back. 
- * Typically used to determine how to store a given object as a hidden 
- * value when rendering a form.
- * 
- * @version $Id$
- * @author mb
- * @since 3.0
- */
-public interface IPrimaryKeyConvertor
-{
-    /**
-     * Gets the serializable primary key of the given value
-     * 
-     * @param objValue the value for which a primary key needs to be extracted
-     * @return the serializable primary key of the value
-     */
-    Object getPrimaryKey(Object objValue);
-    
-    /**
-     * Gets the value corresponding the given primary key 
-     *  
-     * @param objPrimaryKey the primary key for which a value needs to be generated
-     * @return the generated value corresponding to the given primary key
-     */
-    Object getValue(Object objPrimaryKey); 
-}
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/model/ITableColumn.java b/3.0.4/contrib/src/org/apache/tapestry/contrib/table/model/ITableColumn.java
deleted file mode 100644
index 5ce6c13..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/model/ITableColumn.java
+++ /dev/null
@@ -1,89 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.table.model;
-
-import java.util.Comparator;
-
-import org.apache.tapestry.IRender;
-import org.apache.tapestry.IRequestCycle;
-
-/**
- * The interface defining a table column. 
- * 
- * A column is responsible for presenting a particular part of the data
- * from the objects in the table. This is done via the getValueRender() method.
- * 
- * A column may be sortable, in which case it defines the way in which the
- * objects in the table must be sorted by providing a Comparator.
- * 
- * @version $Id$
- * @author mindbridge
- */
-public interface ITableColumn
-{
-	/**
-	 * Method getColumnName provides the name of the column. 
-	 *
-	 * The column name must be unique and is generally used for the identification 
-	 * of the column. It does not have to be the same as the display name 
-	 * via which the column is identified to the user (see the getColumnRender() method).
-	 * @return String the name of the column
-	 */
-	String getColumnName();
-
-	/**
-	 * Method getSortable declares whether the column allows sorting.
-	 * If the column allows sorting, it must also return a valid Comparator
-	 * via the getComparator() method.
-	 * @return boolean whether the column is sortable or not
-	 */
-	boolean getSortable();
-
-	/**
-	 * Method getComparator returns the Comparator to be used to sort 
-	 * the data in the table according to this column. The Comparator must
-	 * accept two different rows, compare them according to this column, 
-	 * and return the appropriate value.
-	 * @return Comparator the Comparator used to sort the table data
-	 */
-	Comparator getComparator();
-
-	/**
-	 * Method getColumnRenderer provides a renderer that takes care of rendering 
-	 * the column in the table header. If the column is sortable, the renderer
-	 * may provide a mechanism to sort the table in an ascending or descending 
-	 * manner.
-	 * @param objCycle the current request cycle
-	 * @param objSource a component that can provide the table model (typically TableView)
-	 * @return IRender the renderer to present the column header
-	 */
-	IRender getColumnRenderer(
-		IRequestCycle objCycle,
-		ITableModelSource objSource);
-
-	/**
-	 * Method getValueRenderer provides a renderer for presenting the value of a 
-	 * particular row in the current column.
-	 * 
-	 * @param objCycle the current request cycle
-	 * @param objSource a component that can provide the table model (typically TableView)
-	 * @param objRow the row data
-	 * @return IRender the renderer to present the value of the row in this column
-	 */
-	IRender getValueRenderer(
-		IRequestCycle objCycle,
-		ITableModelSource objSource,
-		Object objRow);
-}
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/model/ITableColumnModel.java b/3.0.4/contrib/src/org/apache/tapestry/contrib/table/model/ITableColumnModel.java
deleted file mode 100644
index 26de305..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/model/ITableColumnModel.java
+++ /dev/null
@@ -1,45 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.table.model;
-
-import java.util.Iterator;
-
-/**
- * Defines a list model of ITableColumn objects
- * 
- * @version $Id$
- * @author mindbridge
- */
-public interface ITableColumnModel
-{
-	/**
-	 * Method getColumnCount.
-	 * @return int the number of columns in the model
-	 */
-	int getColumnCount();
-
-	/**
-	 * Method getColumn.
-	 * @param strName the name of the requested column
-	 * @return ITableColumn the column with the given name. null if no such column exists.
-	 */
-	ITableColumn getColumn(String strName);
-
-	/**
-	 * Method getColumns.
-	 * @return Iterator an iterator of all columns in the model
-	 */
-	Iterator getColumns();
-}
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/model/ITableDataModel.java b/3.0.4/contrib/src/org/apache/tapestry/contrib/table/model/ITableDataModel.java
deleted file mode 100644
index 9cfb723..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/model/ITableDataModel.java
+++ /dev/null
@@ -1,55 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.table.model;
-
-import java.util.Iterator;
-
-/**
- * A model of the table's data
- * This model need not be used. Implementations may choose to
- * access data via an abstraction.
- * 
- * @version $Id$
- * @author mindbridge
- */
-public interface ITableDataModel
-{
-	/**
-	 * Method getRowCount.
-	 * @return int the number of rows in the model
-	 */
-	int getRowCount();
-
-	/**
-	 * Iterates over all of the rows in the model
-	 * @return Iterator the iterator for access to the data
-	 */
-	Iterator getRows();
-    
-	/**
-	 * Method addTableDataModelListener
-     * Adds a listener that is notified when the data in the model is changed
-	 * @param objListener the listener to add
-	 */
-    void addTableDataModelListener(ITableDataModelListener objListener);
-
-	/**
-	 * Method removeTableDataModelListener.
-     * Removes a listener that is notified when the data in the model is changed
-	 * @param objListener the listener to remove
-	 */
-    void removeTableDataModelListener(ITableDataModelListener objListener);
-    
-}
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/model/ITableDataModelListener.java b/3.0.4/contrib/src/org/apache/tapestry/contrib/table/model/ITableDataModelListener.java
deleted file mode 100644
index 55026d0..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/model/ITableDataModelListener.java
+++ /dev/null
@@ -1,24 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.table.model;
-
-/**
- * @author mindbridge
- *
- */
-public interface ITableDataModelListener
-{
-    void tableDataChanged(CTableDataModelEvent objEvent);
-}
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/model/ITableModel.java b/3.0.4/contrib/src/org/apache/tapestry/contrib/table/model/ITableModel.java
deleted file mode 100644
index a244ca7..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/model/ITableModel.java
+++ /dev/null
@@ -1,54 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.table.model;
-
-import java.util.Iterator;
-
-/**
- * The main interface defining the abstraction containing the table data and state
- * 
- * @version $Id$
- * @author mindbridge
- */
-public interface ITableModel
-{
-	/**
-	 * Method getColumnModel.
-	 * @return ITableColumnModel the column model of the table
-	 */
-	ITableColumnModel getColumnModel();
-
-	/**
-	 * Method getSortingState.
-	 * @return ITableSortingState the sorting state of the table
-	 */
-	ITableSortingState getSortingState();
-	/**
-	 * Method getPagingState.
-	 * @return ITablePagingState the paging state of the table
-	 */
-	ITablePagingState getPagingState();
-
-	/**
-	 * Method getPageCount.
-	 * @return int the number of pages this table would have given the current data and paging state
-	 */
-	int getPageCount();
-	/**
-	 * Method getCurrentPageRows.
-	 * @return Iterator the rows in the current table page given the current data, sorting, and paging state
-	 */
-	Iterator getCurrentPageRows();
-}
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/model/ITableModelSource.java b/3.0.4/contrib/src/org/apache/tapestry/contrib/table/model/ITableModelSource.java
deleted file mode 100644
index 4b8ce2f..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/model/ITableModelSource.java
+++ /dev/null
@@ -1,46 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.table.model;
-
-import org.apache.tapestry.IComponent;
-
-/**
- * A Tapestry component that provides the current table model.
- * This interface is used for obtaining the table model source by
- * components wrapped by it, as well as by external renderers,
- * such as those provided by the column implementations
- * 
- * @version $Id$
- * @author mindbridge
- */
-public interface ITableModelSource extends IComponent
-{
-    final static String TABLE_MODEL_SOURCE_ATTRIBUTE = "org.apache.tapestry.contrib.table.model.ITableModelSource";
-
-	/**
-	 * Returns the table model currently used
-	 * @return ITableModel the current table model
-	 */
-	ITableModel getTableModel();
-
-	/**
-	 * Notifies the model source that the model state has changed, and 
-     * that it should consider saving it.<p>
-     * This method was added to allow using the table within a Block when 
-     * the pageBeginRender() listener of the implementation will not be called
-     * and automatic state storage will therefore be hard to implement.
-	 */
-    void fireObservedStateChange();
-}
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/model/ITablePagingState.java b/3.0.4/contrib/src/org/apache/tapestry/contrib/table/model/ITablePagingState.java
deleted file mode 100644
index ecbd8af..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/model/ITablePagingState.java
+++ /dev/null
@@ -1,50 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.table.model;
-
-/**
- * An interface defining the management of the table's paging state.
- * 
- * @version $Id$
- * @author mindbridge
- */
-public interface ITablePagingState
-{
-	/**
-	 * Method getPageSize provides the size of a page in a number of records.
-	 * This value may be meaningless if the model uses a different method for pagination.
-	 * @return int the current page size
-	 */
-	int getPageSize();
-
-	/**
-	 * Method setPageSize updates the size of a page in a number of records.
-	 * This value may be meaningless if the model uses a different method for pagination.
-	 * @param nPageSize the new page size
-	 */
-	void setPageSize(int nPageSize);
-
-	/**
-	 * Gets the currently selected page. The page number is counted from 0.
-	 * @return int the current active page
-	 */
-	int getCurrentPage();
-
-	/**
-	 * Sets the newly selected page. The page number is counted from 0.
-	 * @param nPage the new active page
-	 */
-	void setCurrentPage(int nPage);
-}
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/model/ITableRendererListener.java b/3.0.4/contrib/src/org/apache/tapestry/contrib/table/model/ITableRendererListener.java
deleted file mode 100644
index a24c1a1a..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/model/ITableRendererListener.java
+++ /dev/null
@@ -1,34 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.table.model;
-
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.IRequestCycle;
-
-/**
- * 
- * @see org.apache.tapestry.contrib.table.model.common.AbstractTableColumn
- * @version $Id$
- * @author mindbridge
- * @since 2.3
- */
-public interface ITableRendererListener extends IComponent
-{
-	void initializeRenderer(
-		IRequestCycle objCycle,
-		ITableModelSource objSource,
-		ITableColumn objColumn,
-		Object objRow);
-}
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/model/ITableRendererSource.java b/3.0.4/contrib/src/org/apache/tapestry/contrib/table/model/ITableRendererSource.java
deleted file mode 100644
index c6348f8..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/model/ITableRendererSource.java
+++ /dev/null
@@ -1,47 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.table.model;
-
-import java.io.Serializable;
-
-import org.apache.tapestry.IRender;
-import org.apache.tapestry.IRequestCycle;
-
-/**
- * This interface provides a renderer to present the data in a table column.
- * It is usually used by the {@link org.apache.tapestry.contrib.table.model.ITableColumn} 
- * implementations via aggregation.
- * 
- * @see org.apache.tapestry.contrib.table.model.common.AbstractTableColumn
- * @version $Id$
- * @author mindbridge
- * @since 2.3
- */
-public interface ITableRendererSource extends Serializable
-{
-	/**
-	 * Returns a renderer to present the data of the row in the given column. <p>
-	 * This method can also be used to return a renderer to present the
-	 * heading of the column. In such a case the row passed would be null.
-	 * 
-	 * @see org.apache.tapestry.contrib.table.model.ITableColumn#getValueRenderer(IRequestCycle, ITableModelSource, Object)
-	 */
-	public IRender getRenderer(
-		IRequestCycle objCycle,
-		ITableModelSource objSource,
-		ITableColumn objColumn,
-		Object objRow);
-
-}
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/model/ITableRowSource.java b/3.0.4/contrib/src/org/apache/tapestry/contrib/table/model/ITableRowSource.java
deleted file mode 100644
index e358297..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/model/ITableRowSource.java
+++ /dev/null
@@ -1,34 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.table.model;
-
-/**
- * A Tapestry component that provides the current row value.
- * This interface is used for obtaining the row source by components 
- * wrapped by the row source
- * 
- * @version $Id$
- * @author mindbridge
- */
-public interface ITableRowSource
-{
-    final static String TABLE_ROW_SOURCE_ATTRIBUTE = "org.apache.tapestry.contrib.table.model.ITableRowSource";
-
-	/**
-	 * Method getTableRow
-	 * @return Object the current table row object
-	 */
-    Object getTableRow();
-}
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/model/ITableSessionStateManager.java b/3.0.4/contrib/src/org/apache/tapestry/contrib/table/model/ITableSessionStateManager.java
deleted file mode 100644
index 2358beb..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/model/ITableSessionStateManager.java
+++ /dev/null
@@ -1,45 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.table.model;
-
-import java.io.Serializable;
-
-/**
- * An  interface responsible for determining <b>what</b> data would be stored 
- * in the session between requests. 
- * It could be only the table state, it could be entire table including the data,
- * or it could be nothing at all. 
- * It is all determined by the implemention of this interface.
- * 
- * @version $Id$
- * @author mindbridge
- */
-public interface ITableSessionStateManager
-{
-
-	/**
-	 * Method getSessionState extracts the "persistent" portion of the table model
-	 * @param objModel the table model to extract the session state from
-	 * @return Object the session state to be saved between the requests
-	 */
-	Serializable getSessionState(ITableModel objModel);
-
-	/**
-	 * Method recreateTableModel recreates a table model from the saved session state
-	 * @param objState the saved session state
-	 * @return ITableModel the recreated table model
-	 */
-	ITableModel recreateTableModel(Serializable objState);
-}
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/model/ITableSessionStoreManager.java b/3.0.4/contrib/src/org/apache/tapestry/contrib/table/model/ITableSessionStoreManager.java
deleted file mode 100644
index 6fb7261..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/model/ITableSessionStoreManager.java
+++ /dev/null
@@ -1,42 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.table.model;
-
-import java.io.Serializable;
-
-import org.apache.tapestry.IRequestCycle;
-
-/**
- * An interface responsible for determining <b>where</b> the session state 
- * will be saved between requests.
- *  
- * @version $Id$
- * @author mindbridge
- */
-public interface ITableSessionStoreManager
-{
-	/**
-	 * Method saveState saves the session sate
-	 * @param objCycle the current request cycle
-	 * @param objState the session state to be saved
-	 */
-	void saveState(IRequestCycle objCycle, Serializable objState);
-	/**
-	 * Method loadState loads the session state
-	 * @param objCycle the current request cycle
-	 * @return Object the loaded sessions state
-	 */
-	Serializable loadState(IRequestCycle objCycle);
-}
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/model/ITableSortingState.java b/3.0.4/contrib/src/org/apache/tapestry/contrib/table/model/ITableSortingState.java
deleted file mode 100644
index 2fb8002..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/model/ITableSortingState.java
+++ /dev/null
@@ -1,46 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.table.model;
-
-/**
- * An interface defining the management of the table's sorting state.
- * 
- * @version $Id$
- * @author mindbridge
- */
-public interface ITableSortingState
-{
-	static final boolean SORT_ASCENDING = false;
-	static final boolean SORT_DESCENDING = true;
-
-	/**
-	 * Method getSortColumn defines the column that the table should be sorted upon
-	 * @return String the name of the sorting column or null if the table is not sorted
-	 */
-	String getSortColumn();
-
-	/**
-	 * Method getSortOrder defines the direction of the table sorting 
-	 * @return boolean the sorting order (see constants)
-	 */
-	boolean getSortOrder();
-
-	/**
-	 * Method setSortColumn updates the table sorting column and order
-	 * @param strName the name of the column to sort by
-	 * @param bOrder the sorting order (see constants)
-	 */
-	void setSortColumn(String strName, boolean bOrder);
-}
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/model/common/AbstractTableColumn.java b/3.0.4/contrib/src/org/apache/tapestry/contrib/table/model/common/AbstractTableColumn.java
deleted file mode 100644
index 5d69c1d..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/model/common/AbstractTableColumn.java
+++ /dev/null
@@ -1,232 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.table.model.common;
-
-import java.io.Serializable;
-import java.util.Comparator;
-
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.IRender;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.components.Block;
-import org.apache.tapestry.contrib.table.model.ITableColumn;
-import org.apache.tapestry.contrib.table.model.ITableModelSource;
-import org.apache.tapestry.contrib.table.model.ITableRendererSource;
-import org.apache.tapestry.valid.RenderString;
-
-/**
- * A base implementation of {@link org.apache.tapestry.contrib.table.model.ITableColumn}
- * that allows renderers to be set via aggregation.
- * 
- * @see org.apache.tapestry.contrib.table.model.ITableRendererSource
- * @version $Id$
- * @author mindbridge
- * @since 2.3
- */
-public class AbstractTableColumn implements ITableColumn, Serializable
-{
-    /**
-     *  The suffix of the name of the Block that will be used as the column renderer
-     *  for this column 
-     */
-    public final static String COLUMN_RENDERER_BLOCK_SUFFIX = "ColumnHeader";
-
-    /**
-     *  The suffix of the name of the Block that will be used as the value renderer 
-     *  for this column 
-     */
-    public final static String VALUE_RENDERER_BLOCK_SUFFIX = "ColumnValue";
-    
-	private String m_strColumnName;
-	private boolean m_bSortable;
-	private Comparator m_objComparator;
-
-	private ITableRendererSource m_objColumnRendererSource;
-	private ITableRendererSource m_objValueRendererSource;
-
-	public AbstractTableColumn()
-	{
-		this("", false, null);
-	}
-
-	public AbstractTableColumn(
-		String strColumnName,
-		boolean bSortable,
-		Comparator objComparator)
-	{
-		this(strColumnName, bSortable, objComparator, null, null);
-	}
-
-	public AbstractTableColumn(
-		String strColumnName,
-		boolean bSortable,
-		Comparator objComparator,
-		ITableRendererSource objColumnRendererSource,
-		ITableRendererSource objValueRendererSource)
-	{
-		setColumnName(strColumnName);
-		setSortable(bSortable);
-		setComparator(objComparator);
-		setColumnRendererSource(objColumnRendererSource);
-		setValueRendererSource(objValueRendererSource);
-	}
-
-	/**
-	 * @see org.apache.tapestry.contrib.table.model.ITableColumn#getColumnName()
-	 */
-	public String getColumnName()
-	{
-		return m_strColumnName;
-	}
-
-	/**
-	 * Sets the columnName.
-	 * @param columnName The columnName to set
-	 */
-	public void setColumnName(String columnName)
-	{
-		m_strColumnName = columnName;
-	}
-
-	/**
-	 * @see org.apache.tapestry.contrib.table.model.ITableColumn#getSortable()
-	 */
-	public boolean getSortable()
-	{
-		return m_bSortable;
-	}
-
-	/**
-	 * Sets whether the column is sortable.
-	 * @param sortable The sortable flag to set
-	 */
-	public void setSortable(boolean sortable)
-	{
-		m_bSortable = sortable;
-	}
-
-	/**
-	 * @see org.apache.tapestry.contrib.table.model.ITableColumn#getComparator()
-	 */
-	public Comparator getComparator()
-	{
-		return m_objComparator;
-	}
-
-	/**
-	 * Sets the comparator.
-	 * @param comparator The comparator to set
-	 */
-	public void setComparator(Comparator comparator)
-	{
-		m_objComparator = comparator;
-	}
-
-	/**
-	 * @see org.apache.tapestry.contrib.table.model.ITableColumn#getColumnRenderer(IRequestCycle, ITableModelSource)
-	 */
-	public IRender getColumnRenderer(
-		IRequestCycle objCycle,
-		ITableModelSource objSource)
-	{
-		ITableRendererSource objRendererSource =
-			getColumnRendererSource();
-		if (objRendererSource == null)
-		{
-			// log error
-			return new RenderString("");
-		}
-
-		return objRendererSource.getRenderer(objCycle, objSource, this, null);
-	}
-
-	/**
-	 * @see org.apache.tapestry.contrib.table.model.ITableColumn#getValueRenderer(IRequestCycle, ITableModelSource, Object)
-	 */
-	public IRender getValueRenderer(
-		IRequestCycle objCycle,
-		ITableModelSource objSource,
-		Object objRow)
-	{
-		ITableRendererSource objRendererSource = getValueRendererSource();
-		if (objRendererSource == null)
-		{
-			// log error
-			return new RenderString("");
-		}
-
-		return objRendererSource.getRenderer(
-			objCycle,
-			objSource,
-			this,
-			objRow);
-	}
-
-	/**
-	 * Returns the columnRendererSource.
-	 * @return ITableColumnRendererSource
-	 */
-	public ITableRendererSource getColumnRendererSource()
-	{
-		return m_objColumnRendererSource;
-	}
-
-	/**
-	 * Sets the columnRendererSource.
-	 * @param columnRendererSource The columnRendererSource to set
-	 */
-	public void setColumnRendererSource(ITableRendererSource columnRendererSource)
-	{
-		m_objColumnRendererSource = columnRendererSource;
-	}
-
-	/**
-	 * Returns the valueRendererSource.
-     * 
-	 * @return the valueRendererSource of this column
-	 */
-	public ITableRendererSource getValueRendererSource()
-	{
-		return m_objValueRendererSource;
-	}
-
-	/**
-	 * Sets the valueRendererSource.
-     * 
-	 * @param valueRendererSource The valueRendererSource to set
-	 */
-	public void setValueRendererSource(ITableRendererSource valueRendererSource)
-	{
-		m_objValueRendererSource = valueRendererSource;
-	}
-
-    /**
-     *  Use the column name to get the column and value renderer sources 
-     *  from the provided component.
-     *   
-     *  @param objSettingsContainer the component from which to get the settings 
-     */
-    public void loadSettings(IComponent objSettingsContainer)
-    {
-        IComponent objColumnRendererSource = (IComponent) objSettingsContainer.getComponents().get(getColumnName() + COLUMN_RENDERER_BLOCK_SUFFIX);
-        if (objColumnRendererSource != null && objColumnRendererSource instanceof Block)
-            setColumnRendererSource(new BlockTableRendererSource((Block) objColumnRendererSource));
-
-        IComponent objValueRendererSource = (IComponent) objSettingsContainer.getComponents().get(getColumnName() + VALUE_RENDERER_BLOCK_SUFFIX);
-        if (objValueRendererSource != null && objValueRendererSource instanceof Block)
-            setValueRendererSource(new BlockTableRendererSource((Block) objValueRendererSource));
-    }
-
-}
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/model/common/AbstractTableDataModel.java b/3.0.4/contrib/src/org/apache/tapestry/contrib/table/model/common/AbstractTableDataModel.java
deleted file mode 100644
index 23e5477..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/model/common/AbstractTableDataModel.java
+++ /dev/null
@@ -1,105 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.table.model.common;
-
-import java.lang.ref.WeakReference;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-import org.apache.tapestry.contrib.table.model.CTableDataModelEvent;
-import org.apache.tapestry.contrib.table.model.ITableDataModel;
-import org.apache.tapestry.contrib.table.model.ITableDataModelListener;
-
-/**
- * An implementation of the listener support in the ITableDataModel interface
- * 
- * @version $Id$
- * @author mindbridge
- */
-public abstract class AbstractTableDataModel implements ITableDataModel
-{
-	private List m_arrListeners;
-
-	public AbstractTableDataModel()
-	{
-		m_arrListeners = new ArrayList();
-	}
-
-	/**
-	 * Method fireTableDataModelEvent.
-	 * Fires a change event to all listeners
-	 * @param objEvent the event to pass to the listeners
-	 */
-	protected void fireTableDataModelEvent(CTableDataModelEvent objEvent)
-	{
-        synchronized (m_arrListeners) {
-            List arrEmptyReferences = null;
-        
-    		for (Iterator it = m_arrListeners.iterator(); it.hasNext();)
-    		{
-                WeakReference objRef = (WeakReference) it.next();
-    			ITableDataModelListener objListener =
-    				(ITableDataModelListener) objRef.get();
-                if (objListener != null) 
-                    objListener.tableDataChanged(objEvent);
-                else {
-                    if (arrEmptyReferences == null)
-                        arrEmptyReferences = new ArrayList();
-                    arrEmptyReferences.add(objRef);
-                }
-    		}
-
-            if (arrEmptyReferences != null)
-                m_arrListeners.removeAll(arrEmptyReferences);
-        }
-	}
-
-	/**
-	 * @see org.apache.tapestry.contrib.table.model.ITableDataModel#addTableDataModelListener(ITableDataModelListener)
-	 */
-	public void addTableDataModelListener(ITableDataModelListener objListener)
-	{
-        synchronized (m_arrListeners) {
-    		m_arrListeners.add(new WeakReference(objListener));
-        }
-	}
-
-	/**
-	 * @see org.apache.tapestry.contrib.table.model.ITableDataModel#removeTableDataModelListener(ITableDataModelListener)
-	 */
-	public void removeTableDataModelListener(ITableDataModelListener objListener)
-	{
-        synchronized (m_arrListeners) {
-            List arrEmptyReferences = null;
-        
-            for (Iterator it = m_arrListeners.iterator(); it.hasNext();)
-            {
-                WeakReference objRef = (WeakReference) it.next();
-                ITableDataModelListener objStoredListener =
-                    (ITableDataModelListener) objRef.get();
-                if (objListener == objStoredListener || objStoredListener == null) { 
-                    if (arrEmptyReferences == null)
-                        arrEmptyReferences = new ArrayList();
-                    arrEmptyReferences.add(objRef);
-                }
-            }
-
-            if (arrEmptyReferences != null)
-                m_arrListeners.removeAll(arrEmptyReferences);
-        }
-	}
-
-}
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/model/common/AbstractTableModel.java b/3.0.4/contrib/src/org/apache/tapestry/contrib/table/model/common/AbstractTableModel.java
deleted file mode 100644
index a8d964f..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/model/common/AbstractTableModel.java
+++ /dev/null
@@ -1,85 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.table.model.common;
-
-import java.io.Serializable;
-
-import org.apache.tapestry.contrib.table.model.ITableModel;
-import org.apache.tapestry.contrib.table.model.ITablePagingState;
-import org.apache.tapestry.contrib.table.model.ITableSortingState;
-import org.apache.tapestry.contrib.table.model.simple.SimpleTableState;
-
-/**
- * A base table model that implements the handling of the model state.
- * Used by most standard ITableModel implementations.
- * 
- * @version $Id$
- * @author mindbridge
- */
-public abstract class AbstractTableModel implements ITableModel, Serializable
-{
-    private SimpleTableState m_objTableState;
-
-    protected AbstractTableModel()
-    {
-        this(new SimpleTableState());
-    }
-
-    protected AbstractTableModel(SimpleTableState objTableState)
-    {
-        m_objTableState = objTableState;
-    }
-    
-    /**
-     * @see org.apache.tapestry.contrib.table.model.ITableModel#getPagingState()
-     */
-    public ITablePagingState getPagingState()
-    {
-        return getState().getPagingState();
-    }
-
-    /**
-     * @see org.apache.tapestry.contrib.table.model.ITableModel#getSortingState()
-     */
-    public ITableSortingState getSortingState()
-    {
-        return getState().getSortingState();
-    }
-
-    /**
-     * Returns the tableState.
-     * @return SimpleTableState
-     */
-    public SimpleTableState getState()
-    {
-        return m_objTableState;
-    }
-
-    protected abstract int getRowCount();
-    
-    public int getPageCount()
-    {
-        int nRowCount = getRowCount();
-        if (nRowCount == 0)
-            return 1;
-
-        int nPageSize = getPagingState().getPageSize();
-        if (nPageSize <= 0)
-            return 1;
-
-        return (nRowCount - 1) / nPageSize + 1;
-    }
-    
-}
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/model/common/ArrayIterator.java b/3.0.4/contrib/src/org/apache/tapestry/contrib/table/model/common/ArrayIterator.java
deleted file mode 100644
index 950f0dc..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/model/common/ArrayIterator.java
+++ /dev/null
@@ -1,79 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.table.model.common;
-
-import java.util.Iterator;
-import java.util.NoSuchElementException;
-
-/**
- * @version $Id$
- * @author mindbridge
- */
-public class ArrayIterator implements Iterator
-{
-	private Object[] m_arrValues;
-	private int m_nFrom;
-	private int m_nTo;
-	private int m_nCurrent;
-
-	public ArrayIterator(Object[] arrValues)
-	{
-		this(arrValues, 0, arrValues.length);
-	}
-
-	public ArrayIterator(Object[] arrValues, int nFrom, int nTo)
-	{
-		m_arrValues = arrValues;
-		m_nFrom = nFrom;
-		m_nTo = nTo;
-
-		if (m_nFrom < 0)
-			m_nFrom = 0;
-		if (m_nTo < m_nFrom)
-			m_nTo = m_nFrom;
-		if (m_nTo > m_arrValues.length)
-			m_nTo = m_arrValues.length;
-
-		m_nCurrent = m_nFrom;
-	}
-
-	/**
-	 * @see java.util.Iterator#hasNext()
-	 */
-	public boolean hasNext()
-	{
-		return m_nCurrent < m_nTo;
-	}
-
-	/**
-	 * @see java.util.Iterator#next()
-	 */
-	public Object next()
-	{
-		//System.out.println("index: " + m_nCurrent + "   size: " + m_arrValues.length + "  to: " + m_nTo);
-		if (!hasNext())
-			throw new NoSuchElementException();
-		return m_arrValues[m_nCurrent++];
-	}
-
-	/**
-	 * @see java.util.Iterator#remove()
-	 */
-	public void remove()
-	{
-		throw new UnsupportedOperationException();
-	}
-
-}
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/model/common/BasicTableModelWrap.java b/3.0.4/contrib/src/org/apache/tapestry/contrib/table/model/common/BasicTableModelWrap.java
deleted file mode 100644
index 30e0118..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/model/common/BasicTableModelWrap.java
+++ /dev/null
@@ -1,80 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.table.model.common;
-
-import java.util.Iterator;
-
-import org.apache.tapestry.contrib.table.model.IBasicTableModel;
-import org.apache.tapestry.contrib.table.model.ITableColumn;
-import org.apache.tapestry.contrib.table.model.ITableColumnModel;
-import org.apache.tapestry.contrib.table.model.simple.SimpleTableState;
-
-/**
- * @version $Id$
- * @author mindbridge
- */
-public class BasicTableModelWrap extends AbstractTableModel 
-{
-    private IBasicTableModel m_objBasicTableModel;
-    private ITableColumnModel m_objTableColumnModel;
-
-    public BasicTableModelWrap(IBasicTableModel objBasicTableModel, ITableColumnModel objColumnModel)
-    {
-        this(objBasicTableModel, objColumnModel, new SimpleTableState());
-    }
-
-    public BasicTableModelWrap(IBasicTableModel objBasicTableModel, ITableColumnModel objColumnModel, SimpleTableState objState)
-    {
-        super(objState);
-        m_objBasicTableModel = objBasicTableModel;
-        m_objTableColumnModel = objColumnModel;
-    }
-
-    /**
-     * @see org.apache.tapestry.contrib.table.model.ITableModel#getColumnModel()
-     */
-    public ITableColumnModel getColumnModel()
-    {
-        return m_objTableColumnModel;
-    }
-
-    /**
-     * @see org.apache.tapestry.contrib.table.model.common.AbstractTableModel#getRowCount()
-     */
-    protected int getRowCount()
-    {
-        return m_objBasicTableModel.getRowCount();
-    }
-
-    /**
-     * @see org.apache.tapestry.contrib.table.model.ITableModel#getCurrentPageRows()
-     */
-    public Iterator getCurrentPageRows()
-    {
-        int nPageSize = getPagingState().getPageSize();
-        if (nPageSize <= 0)
-            nPageSize = getRowCount();
-
-        int nCurrentPage = getPagingState().getCurrentPage();
-        int nFrom = nCurrentPage * nPageSize;
-        
-        String strSortColumn = getSortingState().getSortColumn();
-        ITableColumn objSortColumn = getColumnModel().getColumn(strSortColumn); 
-        boolean bSortOrder = getSortingState().getSortOrder();
-        
-        return m_objBasicTableModel.getCurrentPageRows(nFrom, nPageSize, objSortColumn, bSortOrder);
-    }
-
-}
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/model/common/BlockTableRendererSource.java b/3.0.4/contrib/src/org/apache/tapestry/contrib/table/model/common/BlockTableRendererSource.java
deleted file mode 100644
index 5b2a99a..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/model/common/BlockTableRendererSource.java
+++ /dev/null
@@ -1,125 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.table.model.common;
-
-import org.apache.tapestry.IRender;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.components.Block;
-import org.apache.tapestry.components.BlockRenderer;
-import org.apache.tapestry.contrib.table.model.ITableColumn;
-import org.apache.tapestry.contrib.table.model.ITableModelSource;
-import org.apache.tapestry.contrib.table.model.ITableRendererListener;
-import org.apache.tapestry.contrib.table.model.ITableRendererSource;
-import org.apache.tapestry.util.ComponentAddress;
-
-/**
- * 
- * @version $Id$
- * @author mindbridge
- * @since 2.3
- */
-public class BlockTableRendererSource implements ITableRendererSource
-{
-	private ComponentAddress m_objBlockAddress;
-	private ComponentAddress m_objListenerAddress;
-
-	public BlockTableRendererSource(Block objBlock)
-	{
-		this(new ComponentAddress(objBlock));
-	}
-
-	public BlockTableRendererSource(
-		Block objBlock,
-		ITableRendererListener objListener)
-	{
-		this(new ComponentAddress(objBlock), new ComponentAddress(objListener));
-	}
-
-	public BlockTableRendererSource(ComponentAddress objBlockAddress)
-	{
-		this(objBlockAddress, null);
-	}
-
-	public BlockTableRendererSource(
-		ComponentAddress objBlockAddress,
-		ComponentAddress objListenerAddress)
-	{
-		setBlockAddress(objBlockAddress);
-		setListenerAddress(objListenerAddress);
-	}
-
-	/**
-	 * @see org.apache.tapestry.contrib.table.model.ITableRendererSource#getRenderer(IRequestCycle, ITableModelSource, ITableColumn, Object)
-	 */
-	public IRender getRenderer(
-		IRequestCycle objCycle,
-		ITableModelSource objSource,
-		ITableColumn objColumn,
-		Object objRow)
-	{
-		ComponentAddress objListenerAddress = getListenerAddress();
-		if (objListenerAddress != null)
-		{
-			ITableRendererListener objListener =
-				(ITableRendererListener) objListenerAddress.findComponent(
-					objCycle);
-			objListener.initializeRenderer(
-				objCycle,
-				objSource,
-				objColumn,
-				objRow);
-		}
-
-		Block objBlock = (Block) getBlockAddress().findComponent(objCycle);
-		return new BlockRenderer(objBlock);
-	}
-
-	/**
-	 * Returns the blockAddress.
-	 * @return ComponentAddress
-	 */
-	public ComponentAddress getBlockAddress()
-	{
-		return m_objBlockAddress;
-	}
-
-	/**
-	 * Sets the blockAddress.
-	 * @param blockAddress The blockAddress to set
-	 */
-	public void setBlockAddress(ComponentAddress blockAddress)
-	{
-		m_objBlockAddress = blockAddress;
-	}
-
-	/**
-	 * Returns the listenerAddress.
-	 * @return ComponentAddress
-	 */
-	public ComponentAddress getListenerAddress()
-	{
-		return m_objListenerAddress;
-	}
-
-	/**
-	 * Sets the listenerAddress.
-	 * @param listenerAddress The listenerAddress to set
-	 */
-	public void setListenerAddress(ComponentAddress listenerAddress)
-	{
-		m_objListenerAddress = listenerAddress;
-	}
-
-}
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/model/common/ComponentTableRendererSource.java b/3.0.4/contrib/src/org/apache/tapestry/contrib/table/model/common/ComponentTableRendererSource.java
deleted file mode 100644
index 4a9c2f1..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/model/common/ComponentTableRendererSource.java
+++ /dev/null
@@ -1,81 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.table.model.common;
-
-import org.apache.tapestry.IRender;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.contrib.table.model.ITableColumn;
-import org.apache.tapestry.contrib.table.model.ITableModelSource;
-import org.apache.tapestry.contrib.table.model.ITableRendererListener;
-import org.apache.tapestry.contrib.table.model.ITableRendererSource;
-import org.apache.tapestry.util.ComponentAddress;
-
-/**
- * 
- * @version $Id$
- * @author mindbridge
- * @since 2.3
- */
-public class ComponentTableRendererSource implements ITableRendererSource
-{
-	private ComponentAddress m_objComponentAddress;
-
-	public ComponentTableRendererSource(ITableRendererListener objComponent)
-	{
-		this(new ComponentAddress(objComponent));
-	}
-
-	public ComponentTableRendererSource(ComponentAddress objComponentAddress)
-	{
-		setComponentAddress(objComponentAddress);
-	}
-
-	/**
-	 * @see org.apache.tapestry.contrib.table.model.ITableRendererSource#getRenderer(IRequestCycle, ITableModelSource, ITableColumn, Object)
-	 */
-	public IRender getRenderer(
-		IRequestCycle objCycle,
-		ITableModelSource objSource,
-		ITableColumn objColumn,
-		Object objRow)
-	{
-		ITableRendererListener objComponent =
-			(ITableRendererListener) getComponentAddress().findComponent(
-				objCycle);
-
-		objComponent.initializeRenderer(objCycle, objSource, objColumn, objRow);
-
-		return objComponent;
-	}
-
-	/**
-	 * Returns the listenerAddress.
-	 * @return ComponentAddress
-	 */
-	public ComponentAddress getComponentAddress()
-	{
-		return m_objComponentAddress;
-	}
-
-	/**
-	 * Sets the listenerAddress.
-	 * @param listenerAddress The listenerAddress to set
-	 */
-	public void setComponentAddress(ComponentAddress listenerAddress)
-	{
-		m_objComponentAddress = listenerAddress;
-	}
-
-}
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/model/common/FullTableSessionStateManager.java b/3.0.4/contrib/src/org/apache/tapestry/contrib/table/model/common/FullTableSessionStateManager.java
deleted file mode 100644
index 7211bbd..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/model/common/FullTableSessionStateManager.java
+++ /dev/null
@@ -1,51 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.table.model.common;
-
-import java.io.Serializable;
-
-import org.apache.tapestry.contrib.table.model.ITableModel;
-import org.apache.tapestry.contrib.table.model.ITableSessionStateManager;
-
-/**
- * A simple ITableSessionStateManager implementation 
- * that saves the entire table model into the session.
- * 
- * @version $Id$
- * @author mindbridge
- */
-public class FullTableSessionStateManager implements ITableSessionStateManager
-{
-
-    public final static FullTableSessionStateManager FULL_STATE_MANAGER =
-        new FullTableSessionStateManager();
-
-	/**
-	 * @see org.apache.tapestry.contrib.table.model.ITableSessionStateManager#getSessionState(ITableModel)
-	 */
-	public Serializable getSessionState(ITableModel objModel)
-	{
-		return (Serializable) objModel;
-	}
-
-	/**
-	 * @see org.apache.tapestry.contrib.table.model.ITableSessionStateManager#recreateTableModel(Serializable)
-	 */
-	public ITableModel recreateTableModel(Serializable objState)
-	{
-		return (ITableModel) objState;
-	}
-
-}
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/model/common/NullTableSessionStateManager.java b/3.0.4/contrib/src/org/apache/tapestry/contrib/table/model/common/NullTableSessionStateManager.java
deleted file mode 100644
index d2921f1..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/model/common/NullTableSessionStateManager.java
+++ /dev/null
@@ -1,51 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.table.model.common;
-
-import java.io.Serializable;
-
-import org.apache.tapestry.contrib.table.model.ITableModel;
-import org.apache.tapestry.contrib.table.model.ITableSessionStateManager;
-
-/**
- * A simple ITableSessionStateManager implementation 
- * that saves nothing at all into the session.
- * 
- * @version $Id$
- * @author mindbridge
- */
-public class NullTableSessionStateManager implements ITableSessionStateManager
-{
-    
-    public final static NullTableSessionStateManager NULL_STATE_MANAGER =
-        new NullTableSessionStateManager();
-
-	/**
-	 * @see org.apache.tapestry.contrib.table.model.ITableSessionStateManager#getSessionState(ITableModel)
-	 */
-	public Serializable getSessionState(ITableModel objModel)
-	{
-		return null;
-	}
-
-	/**
-	 * @see org.apache.tapestry.contrib.table.model.ITableSessionStateManager#recreateTableModel(Serializable)
-	 */
-	public ITableModel recreateTableModel(Serializable objState)
-	{
-		return null;
-	}
-
-}
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/model/common/ReverseComparator.java b/3.0.4/contrib/src/org/apache/tapestry/contrib/table/model/common/ReverseComparator.java
deleted file mode 100644
index 4622156..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/model/common/ReverseComparator.java
+++ /dev/null
@@ -1,41 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.table.model.common;
-
-import java.util.Comparator;
-
-/**
- * @version $Id$
- * @author mindbridge
- *
- */
-public class ReverseComparator implements Comparator
-{
-	private Comparator m_objComparator;
-
-	public ReverseComparator(Comparator objComparator)
-	{
-		m_objComparator = objComparator;
-	}
-
-	/**
-	 * @see java.util.Comparator#compare(Object, Object)
-	 */
-	public int compare(Object objValue1, Object objValue2)
-	{
-		return -m_objComparator.compare(objValue1, objValue2);
-	}
-
-}
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/model/ognl/ExpressionTableColumn.java b/3.0.4/contrib/src/org/apache/tapestry/contrib/table/model/ognl/ExpressionTableColumn.java
deleted file mode 100644
index c0beb91..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/model/ognl/ExpressionTableColumn.java
+++ /dev/null
@@ -1,49 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.table.model.ognl;
-
-import org.apache.tapestry.contrib.table.model.simple.SimpleTableColumn;
-
-/**
- * @author mindbridge
- *
- */
-public class ExpressionTableColumn extends SimpleTableColumn
-{
-    public ExpressionTableColumn(String strColumnName, String strExpression)
-    {
-        this(strColumnName, strExpression, false);
-    }
-
-    public ExpressionTableColumn(String strColumnName, String strExpression, boolean bSortable)
-    {
-        this(strColumnName, strColumnName, strExpression, bSortable);
-    }
-
-    public ExpressionTableColumn(String strColumnName, String strDisplayName, String strExpression)
-    {
-        this(strColumnName, strDisplayName, strExpression, false);
-    }
-
-    public ExpressionTableColumn(
-        String strColumnName,
-        String strDisplayName,
-        String strExpression,
-        boolean bSortable)
-    {
-        super(strColumnName, strDisplayName, bSortable);
-        setEvaluator(new OgnlTableColumnEvaluator(strExpression));
-    }
-}
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/model/ognl/ExpressionTableColumnModel.java b/3.0.4/contrib/src/org/apache/tapestry/contrib/table/model/ognl/ExpressionTableColumnModel.java
deleted file mode 100644
index 04e26a9..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/model/ognl/ExpressionTableColumnModel.java
+++ /dev/null
@@ -1,137 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.table.model.ognl;
-
-import org.apache.tapestry.contrib.table.model.ITableColumn;
-import org.apache.tapestry.contrib.table.model.simple.SimpleTableColumnModel;
-
-/**
- * @author mindbridge
- *
- */
-public class ExpressionTableColumnModel extends SimpleTableColumnModel
-{
-    /**
-     * Constructs a table column model containting OGNL expression columns. <br>
-     * The data for the columns is provided in the form of a string array,
-     * where the info of each column is stored in two consecutive fields in
-     * the array, hence its size must be even. The expected info is the following:
-     * <ul>
-     *   <li> Column Name
-     *   <li> OGNL expression
-     * </ul>
-     * @param arrColumnInfo The information to construct the columns from
-     * @param bSorted Whether all columns are sorted or not
-     */
-    public ExpressionTableColumnModel(String[] arrColumnInfo, boolean bSorted)
-    {
-        this(convertToDetailedArray(arrColumnInfo, bSorted));
-    }
-
-    /**
-     * Constructs a table column model containting OGNL expression columns. <br>
-     * The data for the columns is provided in the form of a string array,
-     * where the info of each column is stored in four consecutive fields in
-     * the array, hence its size must be divisible by 4. <br>
-     * The expected info is the following:
-     * <ul>
-     *   <li> Column Name
-     *   <li> Display Name
-     *   <li> OGNL expression
-     *   <li> Sorting of the column. This is either a Boolean, 
-     *        or a String representation of a boolean.
-     * </ul>
-     * @param arrColumnInfo
-     */
-    public ExpressionTableColumnModel(Object[] arrColumnInfo)
-    {
-        super(convertToColumns(arrColumnInfo));
-    }
-
-    /**
-     * Method convertToDetailedArray.
-     * @param arrColumnInfo
-     * @param bSorted
-     * @return Object[]
-     */
-    protected static Object[] convertToDetailedArray(String[] arrColumnInfo, boolean bSorted)
-    {
-        int nColumns = arrColumnInfo.length / 2;
-        int nSize = nColumns * 4;
-        Object[] arrDetailedInfo = new Object[nSize];
-
-        for (int i = 0; i < nColumns; i++)
-        {
-            int nInputBaseIndex = 2 * i;
-            String strColumnName = arrColumnInfo[nInputBaseIndex];
-            String strExpression = arrColumnInfo[nInputBaseIndex + 1];
-
-            int nOutputBaseIndex = 4 * i;
-            arrDetailedInfo[nOutputBaseIndex] = strColumnName;
-            arrDetailedInfo[nOutputBaseIndex + 1] = strColumnName;
-            arrDetailedInfo[nOutputBaseIndex + 2] = strExpression;
-            arrDetailedInfo[nOutputBaseIndex + 3] = bSorted ? Boolean.TRUE : Boolean.FALSE;
-        }
-
-        return arrDetailedInfo;
-    }
-
-    /**
-     * Method convertToColumns.
-     * @param arrDetailedInfo
-     * @return ITableColumn[]
-     */
-    protected static ITableColumn[] convertToColumns(Object[] arrDetailedInfo)
-    {
-        int nColumns = arrDetailedInfo.length / 4;
-        ITableColumn[] arrColumns = new ITableColumn[nColumns];
-
-        for (int i = 0; i < nColumns; i++)
-        {
-            Object objTempValue;
-            int nBaseIndex = 4 * i;
-
-            String strColumnName = "";
-            objTempValue = arrDetailedInfo[nBaseIndex];
-            if (objTempValue != null)
-                strColumnName = objTempValue.toString();
-
-            String strDisplayName = "";
-            objTempValue = arrDetailedInfo[nBaseIndex + 1];
-            if (objTempValue != null)
-                strDisplayName = objTempValue.toString();
-
-            String strExpression = "";
-            objTempValue = arrDetailedInfo[nBaseIndex + 2];
-            if (objTempValue != null)
-                strExpression = objTempValue.toString();
-
-            boolean bSorted = false;
-            objTempValue = arrDetailedInfo[nBaseIndex + 3];
-            if (objTempValue != null)
-            {
-                if (objTempValue instanceof Boolean)
-                    bSorted = ((Boolean) objTempValue).booleanValue();
-                else
-                    bSorted = Boolean.getBoolean(objTempValue.toString());
-            }
-
-            arrColumns[i] =
-                new ExpressionTableColumn(strColumnName, strDisplayName, strExpression, bSorted);
-        }
-
-        return arrColumns;
-    }
-}
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/model/ognl/OgnlTableColumnEvaluator.java b/3.0.4/contrib/src/org/apache/tapestry/contrib/table/model/ognl/OgnlTableColumnEvaluator.java
deleted file mode 100644
index f3f6b3a..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/model/ognl/OgnlTableColumnEvaluator.java
+++ /dev/null
@@ -1,72 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.table.model.ognl;
-
-import ognl.Ognl;
-import ognl.OgnlException;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.tapestry.contrib.table.model.ITableColumn;
-import org.apache.tapestry.contrib.table.model.simple.ITableColumnEvaluator;
-import org.apache.tapestry.util.prop.OgnlUtils;
-
-/**
- * @author mindbridge
- *
- */
-public class OgnlTableColumnEvaluator implements ITableColumnEvaluator
-{
-	private static final Log LOG =
-		LogFactory.getLog(ExpressionTableColumn.class);
-
-	private String m_strExpression;
-	transient private Object m_objParsedExpression = null;
-
-	public OgnlTableColumnEvaluator(String strExpression)
-	{
-		m_strExpression = strExpression;
-	}
-
-	/**
-	 * @see org.apache.tapestry.contrib.table.model.simple.ITableColumnEvaluator#getColumnValue(ITableColumn, Object)
-	 */
-	public Object getColumnValue(ITableColumn objColumn, Object objRow)
-	{
-		// If no expression is given, then this is dummy column. Return something.
-		if (m_strExpression == null || m_strExpression.equals(""))
-			return "";
-
-			synchronized (this)
-			{
-				if (m_objParsedExpression == null)
-					m_objParsedExpression =
-						OgnlUtils.getParsedExpression(m_strExpression);
-			}
-
-		try
-		{
-			Object objValue = Ognl.getValue(m_objParsedExpression, objRow);
-			return objValue;
-		}
-		catch (OgnlException e)
-		{
-			LOG.error(
-				"Cannot use column expression '" + m_strExpression + "' in row",
-				e);
-			return "";
-		}
-	}
-}
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/model/simple/ColumnComparator.java b/3.0.4/contrib/src/org/apache/tapestry/contrib/table/model/simple/ColumnComparator.java
deleted file mode 100644
index 2002f6e..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/model/simple/ColumnComparator.java
+++ /dev/null
@@ -1,65 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.table.model.simple;
-
-import java.util.Comparator;
-
-/**
- * In order to provide more generic behaviour, ITableColumn 
- * has no "column value" concept. The comparator it returns 
- * compares two table rows, rather than values specific to the column. 
- * <p>
- * SimpleTableColumn introduces the concept of "column value" and 
- * allows one to extract that "column value" from the row using 
- * the getColumnValue() method. In practice comparisons are also typically 
- * done between these values rather than the full row objects.
- * <p>
- * This comparator extracts the column values from the rows passed 
- * and uses the provided comparator to compare the values.
- * It therefore allows a comparator designed for comparing column values to be
- * quickly wrapped and used as a comparator comparing rows, which is what
- * ITableColumn is expected to return.
- * <p>
- * Example:
- * <p>
- * objColumn.setComparator(new ColumnComparator(objColumn, objBeanComparator));    
- * 
- * @version $Id$
- * @author mindbridge
- *
- */
-public class ColumnComparator implements Comparator
-{
-    private SimpleTableColumn m_objColumn;
-	private Comparator m_objComparator;
-
-	public ColumnComparator(SimpleTableColumn objColumn, Comparator objComparator)
-	{
-        m_objColumn = objColumn;
-		m_objComparator = objComparator;
-	}
-
-	/**
-	 * @see java.util.Comparator#compare(Object, Object)
-	 */
-	public int compare(Object objRow1, Object objRow2)
-	{
-        Object objValue1 = m_objColumn.getColumnValue(objRow1);
-        Object objValue2 = m_objColumn.getColumnValue(objRow2);
-                
-		return m_objComparator.compare(objValue1, objValue2);
-	}
-
-}
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/model/simple/ITableColumnEvaluator.java b/3.0.4/contrib/src/org/apache/tapestry/contrib/table/model/simple/ITableColumnEvaluator.java
deleted file mode 100644
index 9eccdb8..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/model/simple/ITableColumnEvaluator.java
+++ /dev/null
@@ -1,28 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.table.model.simple;
-
-import java.io.Serializable;
-
-import org.apache.tapestry.contrib.table.model.ITableColumn;
-
-/**
- * @author mindbridge
- *
- */
-public interface ITableColumnEvaluator extends Serializable
-{
-	Object getColumnValue(ITableColumn objColumn, Object objRow);
-}
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/model/simple/SimpleListTableDataModel.java b/3.0.4/contrib/src/org/apache/tapestry/contrib/table/model/simple/SimpleListTableDataModel.java
deleted file mode 100644
index f9c0983..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/model/simple/SimpleListTableDataModel.java
+++ /dev/null
@@ -1,143 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.table.model.simple;
-
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.List;
-
-import org.apache.commons.collections.CollectionUtils;
-import org.apache.tapestry.contrib.table.model.CTableDataModelEvent;
-import org.apache.tapestry.contrib.table.model.common.AbstractTableDataModel;
-import org.apache.tapestry.contrib.table.model.common.ArrayIterator;
-
-/**
- * A minimal list implementation of the 
- * {@link org.apache.tapestry.contrib.table.model.ITableDataModel} interface
- * 
- * @version $Id$
- * @author mindbridge
- */
-public class SimpleListTableDataModel extends AbstractTableDataModel implements Serializable
-{
-	private List m_arrRows;
-
-	public SimpleListTableDataModel(Object[] arrRows)
-	{
-		this(Arrays.asList(arrRows));
-	}
-
-	public SimpleListTableDataModel(List arrRows)
-	{
-		m_arrRows = arrRows;
-	}
-
-    public SimpleListTableDataModel(Collection arrRows)
-    {
-        m_arrRows = new ArrayList(arrRows);
-    }
-
-    public SimpleListTableDataModel(Iterator objRows)
-    {
-        m_arrRows = new ArrayList();
-        CollectionUtils.addAll(m_arrRows, objRows);
-    }
-
-	/**
-	 * @see org.apache.tapestry.contrib.table.model.ITableDataModel#getRowCount()
-	 */
-	public int getRowCount()
-	{
-		return m_arrRows.size();
-	}
-
-	/**
-	 * Returns the row element at the given position
-     * @param nRow the index of the element to return
-	 */
-	public Object getRow(int nRow)
-	{
-		if (nRow < 0 || nRow >= m_arrRows.size())
-		{
-			// error message
-			return null;
-		}
-		return m_arrRows.get(nRow);
-	}
-
-	/**
-	 * Returns an Iterator with the elements from the given range
-     * @param nFrom the start of the range (inclusive)
-     * @param nTo the stop of the range (exclusive)
-	 */
-	public Iterator getRows(int nFrom, int nTo)
-	{
-		return new ArrayIterator(m_arrRows.toArray(), nFrom, nTo);
-	}
-
-	/**
-	 * @see org.apache.tapestry.contrib.table.model.ITableDataModel#getRows()
-	 */
-	public Iterator getRows()
-	{
-		return m_arrRows.iterator();
-	}
-
-	/**
-	 * Method addRow.
-     * Adds a row object to the model at its end
-	 * @param objRow the row object to add
-	 */
-	public void addRow(Object objRow)
-	{
-		m_arrRows.add(objRow);
-
-		CTableDataModelEvent objEvent = new CTableDataModelEvent();
-		fireTableDataModelEvent(objEvent);
-	}
-
-    public void addRows(Collection arrRows)
-    {
-        m_arrRows.addAll(arrRows);
-
-        CTableDataModelEvent objEvent = new CTableDataModelEvent();
-        fireTableDataModelEvent(objEvent);
-    }
-
-	/**
-	 * Method removeRow.
-     * Removes a row object from the model
-	 * @param objRow the row object to remove
-	 */
-	public void removeRow(Object objRow)
-	{
-		m_arrRows.remove(objRow);
-
-		CTableDataModelEvent objEvent = new CTableDataModelEvent();
-		fireTableDataModelEvent(objEvent);
-	}
-
-    public void removeRows(Collection arrRows)
-    {
-        m_arrRows.removeAll(arrRows);
-
-        CTableDataModelEvent objEvent = new CTableDataModelEvent();
-        fireTableDataModelEvent(objEvent);
-    }
-
-}
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/model/simple/SimpleSetTableDataModel.java b/3.0.4/contrib/src/org/apache/tapestry/contrib/table/model/simple/SimpleSetTableDataModel.java
deleted file mode 100644
index fbe6fe6..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/model/simple/SimpleSetTableDataModel.java
+++ /dev/null
@@ -1,101 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.table.model.simple;
-
-import java.io.Serializable;
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.Set;
-
-import org.apache.tapestry.contrib.table.model.CTableDataModelEvent;
-import org.apache.tapestry.contrib.table.model.common.AbstractTableDataModel;
-
-/**
- * A minimal set implementation of the 
- * {@link org.apache.tapestry.contrib.table.model.ITableDataModel} interface
- * 
- * @version $Id$
- * @author mindbridge
- */
-public class SimpleSetTableDataModel extends AbstractTableDataModel implements Serializable
-{
-    private Set m_setRows;
-
-    public SimpleSetTableDataModel(Set setRows)
-    {
-        m_setRows = setRows;
-    }
-
-    /**
-     * @see org.apache.tapestry.contrib.table.model.ITableDataModel#getRowCount()
-     */
-    public int getRowCount()
-    {
-        return m_setRows.size();
-    }
-
-    /**
-     * @see org.apache.tapestry.contrib.table.model.ITableDataModel#getRows()
-     */
-    public Iterator getRows()
-    {
-        return m_setRows.iterator();
-    }
-
-    /**
-     * Method addRow.
-     * Adds a row object to the model at its end
-     * @param objRow the row object to add
-     */
-    public void addRow(Object objRow)
-    {
-        if (m_setRows.contains(objRow)) return;
-        m_setRows.add(objRow);
-
-        CTableDataModelEvent objEvent = new CTableDataModelEvent();
-        fireTableDataModelEvent(objEvent);
-    }
-
-    public void addRows(Collection arrRows)
-    {
-        m_setRows.addAll(arrRows);
-
-        CTableDataModelEvent objEvent = new CTableDataModelEvent();
-        fireTableDataModelEvent(objEvent);
-    }
-
-    /**
-     * Method removeRow.
-     * Removes a row object from the model
-     * @param objRow the row object to remove
-     */
-    public void removeRow(Object objRow)
-    {
-        if (!m_setRows.contains(objRow)) return;
-        m_setRows.remove(objRow);
-
-        CTableDataModelEvent objEvent = new CTableDataModelEvent();
-        fireTableDataModelEvent(objEvent);
-    }
-
-    public void removeRows(Collection arrRows)
-    {
-        m_setRows.removeAll(arrRows);
-
-        CTableDataModelEvent objEvent = new CTableDataModelEvent();
-        fireTableDataModelEvent(objEvent);
-    }
-
-}
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/model/simple/SimpleTableColumn.java b/3.0.4/contrib/src/org/apache/tapestry/contrib/table/model/simple/SimpleTableColumn.java
deleted file mode 100644
index aeb8513..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/model/simple/SimpleTableColumn.java
+++ /dev/null
@@ -1,235 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.table.model.simple;
-
-import java.io.Serializable;
-import java.util.Comparator;
-
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.contrib.table.model.ITableRendererSource;
-import org.apache.tapestry.contrib.table.model.common.AbstractTableColumn;
-
-/**
- * A simple minimal implementation of the 
- * {@link org.apache.tapestry.contrib.table.model.ITableColumn} interface that
- * provides all the basic services for displaying a column.
- * 
- * @version $Id$
- * @author mindbridge
- */
-public class SimpleTableColumn extends AbstractTableColumn
-{
-    public static final ITableRendererSource DEFAULT_COLUMN_RENDERER_SOURCE = 
-        new SimpleTableColumnRendererSource();
-
-    public static final ITableRendererSource FORM_COLUMN_RENDERER_SOURCE = 
-        new SimpleTableColumnFormRendererSource();
-
-    public static final ITableRendererSource DEFAULT_VALUE_RENDERER_SOURCE = 
-        new SimpleTableValueRendererSource();
-
-	private String m_strDisplayName;
-	private ITableColumnEvaluator m_objEvaluator;
-
-	/**
-	 * Creates a SimpleTableColumn
-	 * @param strColumnName the identifying name and display name of the column
-	 */
-	public SimpleTableColumn(String strColumnName)
-	{
-		this(strColumnName, strColumnName);
-	}
-
-	/**
-	 * Creates a SimpleTableColumn
-	 * @param strColumnName the identifying name and display name of the column
-	 * @param bSortable whether the column is sortable
-	 */
-	public SimpleTableColumn(String strColumnName, boolean bSortable)
-	{
-		this(strColumnName, strColumnName, bSortable);
-	}
-
-	/**
-	 * Creates a SimpleTableColumn
-	 * @param strColumnName the identifying name and display name of the column
-	 * @param bSortable whether the column is sortable
-     * @param objEvaluator the evaluator to extract the column value from the row
-	 */
-	public SimpleTableColumn(
-		String strColumnName,
-        ITableColumnEvaluator objEvaluator,
-		boolean bSortable)
-	{
-		this(strColumnName, strColumnName, objEvaluator, bSortable);
-	}
-
-	/**
-	 * Creates a SimpleTableColumn
-	 * @param strColumnName the identifying name of the column
-	 * @param strDisplayName the display name of the column
-	 */
-	public SimpleTableColumn(String strColumnName, String strDisplayName)
-	{
-		this(strColumnName, strDisplayName, false);
-	}
-
-	/**
-	 * Creates a SimpleTableColumn
-	 * @param strColumnName the identifying name of the column
-	 * @param strDisplayName the display name of the column
-	 * @param bSortable whether the column is sortable
-	 */
-	public SimpleTableColumn(
-		String strColumnName,
-		String strDisplayName,
-		boolean bSortable)
-	{
-		this(strColumnName, strDisplayName, null, bSortable);
-	}
-
-	/**
-	 * Creates a SimpleTableColumn
-	 * @param strColumnName the identifying name of the column
-	 * @param strDisplayName the display name of the column
-	 * @param bSortable whether the column is sortable
-     * @param objEvaluator the evaluator to extract the column value from the row
-	 */
-	public SimpleTableColumn(
-		String strColumnName,
-		String strDisplayName,
-		ITableColumnEvaluator objEvaluator,
-		boolean bSortable)
-	{
-		super(strColumnName, bSortable, null);
-		setComparator(new DefaultTableComparator());
-		setDisplayName(strDisplayName);
-		setColumnRendererSource(DEFAULT_COLUMN_RENDERER_SOURCE);
-		setValueRendererSource(DEFAULT_VALUE_RENDERER_SOURCE);
-		setEvaluator(objEvaluator);
-	}
-
-	/**
-	 * Returns the display name of the column that will be used 
-	 * in the table header.
-	 * Override for internationalization.
-	 * @return String the display name of the column
-	 */
-	public String getDisplayName()
-	{
-		return m_strDisplayName;
-	}
-
-	/**
-	 * Sets the displayName.
-	 * @param displayName The displayName to set
-	 */
-	public void setDisplayName(String displayName)
-	{
-		m_strDisplayName = displayName;
-	}
-
-	/**
-	 * Returns the evaluator.
-	 * @return ITableColumnEvaluator
-	 */
-	public ITableColumnEvaluator getEvaluator()
-	{
-		return m_objEvaluator;
-	}
-
-	/**
-	 * Sets the evaluator.
-	 * @param evaluator The evaluator to set
-	 */
-	public void setEvaluator(ITableColumnEvaluator evaluator)
-	{
-		m_objEvaluator = evaluator;
-	}
-
-    /**
-     * Sets a comparator that compares the values of this column rather than 
-     * the objects representing the full rows. <br>
-     * This method allows easier use of standard comparators for sorting
-     * the column. It simply wraps the provided comparator with a row-to-column 
-     * convertor and invokes the setComparator() method.
-     * @param comparator The column value comparator
-     */
-    public void setColumnComparator(Comparator comparator)
-    {
-        setComparator(new ColumnComparator(this, comparator));
-    }
-
-	/**
-	 * Extracts the value of the column from the row object
-	 * @param objRow the row object
-	 * @return Object the column value
-	 */
-	public Object getColumnValue(Object objRow)
-	{
-		ITableColumnEvaluator objEvaluator = getEvaluator();
-		if (objEvaluator != null)
-			return objEvaluator.getColumnValue(this, objRow);
-
-		// default fallback
-		return objRow.toString();
-	}
-
-    /**
-     *  Use the column name to get the display name, as well as 
-     *  the column and value renderer sources from the provided component.
-     *   
-     *  @param objSettingsContainer the component from which to get the settings 
-     */
-    public void loadSettings(IComponent objSettingsContainer)
-    {
-        String strDisplayName = objSettingsContainer.getMessages().getMessage(getColumnName(), null);
-        if (strDisplayName != null)
-            setDisplayName(strDisplayName);
-        
-        super.loadSettings(objSettingsContainer);
-    }
-
-
-	public class DefaultTableComparator implements Comparator, Serializable
-	{
-		public int compare(Object objRow1, Object objRow2)
-		{
-			Object objValue1 = getColumnValue(objRow1);
-			Object objValue2 = getColumnValue(objRow2);
-
-            if (objValue1 == objValue2)
-                return 0;
-
-            boolean bComparable1 = objValue1 instanceof Comparable;
-            boolean bComparable2 = objValue2 instanceof Comparable;
-                              
-            // non-comparable values are considered equal 
-			if (!bComparable1 && !bComparable2)
-				return 0;
-
-            // non-comparable values (null included) are considered smaller 
-            // than the comparable ones
-            if (!bComparable1)
-                return -1;
-
-            if (!bComparable2)
-                return 1;
-
-			return ((Comparable) objValue1).compareTo(objValue2);
-		}
-	}
-
-}
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/model/simple/SimpleTableColumnFormRendererSource.java b/3.0.4/contrib/src/org/apache/tapestry/contrib/table/model/simple/SimpleTableColumnFormRendererSource.java
deleted file mode 100644
index 8c43b9a..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/model/simple/SimpleTableColumnFormRendererSource.java
+++ /dev/null
@@ -1,75 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.table.model.simple;
-
-import org.apache.tapestry.IRender;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.contrib.table.model.ITableColumn;
-import org.apache.tapestry.contrib.table.model.ITableModelSource;
-import org.apache.tapestry.contrib.table.model.ITableRendererSource;
-import org.apache.tapestry.contrib.table.model.common.ComponentTableRendererSource;
-import org.apache.tapestry.util.ComponentAddress;
-
-/**
- * This is a simple implementation of 
- * {@link org.apache.tapestry.contrib.table.model.ITableRendererSource} 
- * that returns a standard renderer of a column header. <p>
- * 
- * This implementation requires that the column passed is of type SimpleTableColumn
- * 
- * @see org.apache.tapestry.contrib.table.model.common.AbstractTableColumn
- * @version $Id$
- * @author mindbridge
- * @since 2.3
- */
-public class SimpleTableColumnFormRendererSource implements ITableRendererSource
-{
-	private ComponentTableRendererSource m_objComponentRenderer;
-
-	public SimpleTableColumnFormRendererSource()
-	{
-		m_objComponentRenderer = null;
-	}
-
-	/**
-	 * @see org.apache.tapestry.contrib.table.model.ITableRendererSource#getRenderer(IRequestCycle, ITableModelSource, ITableColumn, Object)
-	 */
-	public IRender getRenderer(
-		IRequestCycle objCycle,
-		ITableModelSource objSource,
-		ITableColumn objColumn,
-		Object objRow)
-	{
-			synchronized (this)
-			{
-				if (m_objComponentRenderer == null)
-				{
-					ComponentAddress objAddress =
-						new ComponentAddress(
-							objSource.getNamespace(),
-							"SimpleTableColumnPage",
-							"tableColumnFormComponent");
-					m_objComponentRenderer =
-						new ComponentTableRendererSource(objAddress);
-				}
-			}
-
-		return m_objComponentRenderer.getRenderer(
-			objCycle,
-			objSource,
-			objColumn,
-			objRow);
-	}
-}
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/model/simple/SimpleTableColumnModel.java b/3.0.4/contrib/src/org/apache/tapestry/contrib/table/model/simple/SimpleTableColumnModel.java
deleted file mode 100644
index 7c519db..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/model/simple/SimpleTableColumnModel.java
+++ /dev/null
@@ -1,80 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.table.model.simple;
-
-import java.io.Serializable;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.tapestry.contrib.table.model.ITableColumn;
-import org.apache.tapestry.contrib.table.model.ITableColumnModel;
-import org.apache.tapestry.contrib.table.model.common.ArrayIterator;
-
-/**
- * A minimal implementation of the 
- * {@link org.apache.tapestry.contrib.table.model.ITableColumnModel} interface
- * that stores columns as an array.
- * 
- * @version $Id$
- * @author mindbridge
- */
-public class SimpleTableColumnModel implements ITableColumnModel, Serializable
-{
-
-    private ITableColumn[] m_arrColumns;
-    private Map m_mapColumns;
-
-    public SimpleTableColumnModel(ITableColumn[] arrColumns)
-    {
-        m_arrColumns = arrColumns;
-
-        m_mapColumns = new HashMap();
-        for (int i = 0; i < m_arrColumns.length; i++)
-            m_mapColumns.put(m_arrColumns[i].getColumnName(), m_arrColumns[i]);
-    }
-
-    public SimpleTableColumnModel(List arrColumns)
-    {
-        this((ITableColumn[]) arrColumns.toArray(new ITableColumn[arrColumns.size()]));
-    }
-
-    public int getColumnCount()
-    {
-        return m_arrColumns.length;
-    }
-
-    public ITableColumn getColumn(int nColumn)
-    {
-        if (nColumn < 0 || nColumn >= m_arrColumns.length)
-        {
-            // error message
-            return null;
-        }
-        return m_arrColumns[nColumn];
-    }
-
-    public ITableColumn getColumn(String strColumn)
-    {
-        return (ITableColumn) m_mapColumns.get(strColumn);
-    }
-
-    public Iterator getColumns()
-    {
-        return new ArrayIterator(m_arrColumns);
-    }
-
-}
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/model/simple/SimpleTableColumnRendererSource.java b/3.0.4/contrib/src/org/apache/tapestry/contrib/table/model/simple/SimpleTableColumnRendererSource.java
deleted file mode 100644
index ee0658e..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/model/simple/SimpleTableColumnRendererSource.java
+++ /dev/null
@@ -1,75 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.table.model.simple;
-
-import org.apache.tapestry.IRender;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.contrib.table.model.ITableColumn;
-import org.apache.tapestry.contrib.table.model.ITableModelSource;
-import org.apache.tapestry.contrib.table.model.ITableRendererSource;
-import org.apache.tapestry.contrib.table.model.common.ComponentTableRendererSource;
-import org.apache.tapestry.util.ComponentAddress;
-
-/**
- * This is a simple implementation of 
- * {@link org.apache.tapestry.contrib.table.model.ITableRendererSource} 
- * that returns a standard renderer of a column header. <p>
- * 
- * This implementation requires that the column passed is of type SimpleTableColumn
- * 
- * @see org.apache.tapestry.contrib.table.model.common.AbstractTableColumn
- * @version $Id$
- * @author mindbridge
- * @since 2.3
- */
-public class SimpleTableColumnRendererSource implements ITableRendererSource
-{
-	private ComponentTableRendererSource m_objComponentRenderer;
-
-	public SimpleTableColumnRendererSource()
-	{
-		m_objComponentRenderer = null;
-	}
-
-	/**
-	 * @see org.apache.tapestry.contrib.table.model.ITableRendererSource#getRenderer(IRequestCycle, ITableModelSource, ITableColumn, Object)
-	 */
-	public IRender getRenderer(
-		IRequestCycle objCycle,
-		ITableModelSource objSource,
-		ITableColumn objColumn,
-		Object objRow)
-	{
-			synchronized (this)
-			{
-				if (m_objComponentRenderer == null)
-				{
-					ComponentAddress objAddress =
-						new ComponentAddress(
-							objSource.getNamespace(),
-							"SimpleTableColumnPage",
-							"tableColumnComponent");
-					m_objComponentRenderer =
-						new ComponentTableRendererSource(objAddress);
-				}
-			}
-
-		return m_objComponentRenderer.getRenderer(
-			objCycle,
-			objSource,
-			objColumn,
-			objRow);
-	}
-}
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/model/simple/SimpleTableModel.java b/3.0.4/contrib/src/org/apache/tapestry/contrib/table/model/simple/SimpleTableModel.java
deleted file mode 100644
index f1cd13d..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/model/simple/SimpleTableModel.java
+++ /dev/null
@@ -1,180 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.table.model.simple;
-
-import java.util.Arrays;
-import java.util.Comparator;
-import java.util.Iterator;
-
-import org.apache.tapestry.contrib.table.model.CTableDataModelEvent;
-import org.apache.tapestry.contrib.table.model.ITableColumn;
-import org.apache.tapestry.contrib.table.model.ITableColumnModel;
-import org.apache.tapestry.contrib.table.model.ITableDataModel;
-import org.apache.tapestry.contrib.table.model.ITableDataModelListener;
-import org.apache.tapestry.contrib.table.model.ITableSortingState;
-import org.apache.tapestry.contrib.table.model.common.AbstractTableModel;
-import org.apache.tapestry.contrib.table.model.common.ArrayIterator;
-import org.apache.tapestry.contrib.table.model.common.ReverseComparator;
-
-/**
- * A simple generic table model implementation.
- * 
- * @version $Id$
- * @author mindbridge
- */
-public class SimpleTableModel extends AbstractTableModel implements ITableDataModelListener
-{
-    private ITableDataModel m_objDataModel = null;
-    private Object[] m_arrRows = null;
-    private ITableColumnModel m_objColumnModel = null;
-
-    private SimpleTableSortingState m_objLastSortingState;
-
-    public SimpleTableModel(Object[] arrData, ITableColumn[] arrColumns)
-    {
-        this(new SimpleListTableDataModel(arrData), new SimpleTableColumnModel(arrColumns));
-    }
-
-    public SimpleTableModel(Object[] arrData, ITableColumnModel objColumnModel)
-    {
-        this(new SimpleListTableDataModel(arrData), objColumnModel);
-    }
-
-    public SimpleTableModel(ITableDataModel objDataModel, ITableColumnModel objColumnModel)
-    {
-        this(objDataModel, objColumnModel, new SimpleTableState());
-    }
-
-    public SimpleTableModel(ITableDataModel objDataModel, ITableColumnModel objColumnModel, SimpleTableState objState)
-    {
-        super(objState);
-        
-        m_arrRows = null;
-        m_objColumnModel = objColumnModel;
-        m_objLastSortingState = new SimpleTableSortingState();
-
-        setDataModel(objDataModel);
-    }
-
-    public ITableColumnModel getColumnModel()
-    {
-        return m_objColumnModel;
-    }
-
-    public Iterator getCurrentPageRows()
-    {
-        sortRows();
-
-        int nPageSize = getPagingState().getPageSize();
-        if (nPageSize <= 0)
-            return new ArrayIterator(m_arrRows);
-
-        int nCurrentPage = getPagingState().getCurrentPage();
-        int nFrom = nCurrentPage * nPageSize;
-        int nTo = (nCurrentPage + 1) * nPageSize;
-
-        return new ArrayIterator(m_arrRows, nFrom, nTo);
-    }
-
-    public int getRowCount()
-    {
-        updateRows();
-        return m_arrRows.length;
-    }
-
-    private void updateRows()
-    {
-        // If it is not null, then there is no need to extract the data
-        if (m_arrRows != null)
-            return;
-
-        // Extract the data from the model
-        m_objLastSortingState = new SimpleTableSortingState();
-
-        int nRowCount = m_objDataModel.getRowCount();
-        Object[] arrRows = new Object[nRowCount];
-
-        int i = 0;
-        for (Iterator it = m_objDataModel.getRows(); it.hasNext();)
-            arrRows[i++] = it.next();
-
-        m_arrRows = arrRows;
-    }
-
-    protected void sortRows()
-    {
-        updateRows();
-
-        ITableSortingState objSortingState = getSortingState();
-
-        // see if there is sorting required
-        String strSortColumn = objSortingState.getSortColumn();
-        if (strSortColumn == null)
-            return;
-
-        boolean bSortOrder = objSortingState.getSortOrder();
-
-        // See if the table is already sorted this way. If so, return.
-        if (strSortColumn.equals(m_objLastSortingState.getSortColumn())
-            && m_objLastSortingState.getSortOrder() == bSortOrder)
-            return;
-
-        ITableColumn objColumn = getColumnModel().getColumn(strSortColumn);
-        if (objColumn == null || !objColumn.getSortable())
-            return;
-
-        Comparator objCmp = objColumn.getComparator();
-        if (objCmp == null)
-            return;
-
-        // Okay, we have everything in place. Sort the rows.
-        if (bSortOrder == ITableSortingState.SORT_DESCENDING)
-            objCmp = new ReverseComparator(objCmp);
-
-        Arrays.sort(m_arrRows, objCmp);
-
-        m_objLastSortingState.setSortColumn(strSortColumn, bSortOrder);
-    }
-
-    public void tableDataChanged(CTableDataModelEvent objEvent)
-    {
-        m_arrRows = null;
-    }
-
-    /**
-     * Returns the dataModel.
-     * @return ITableDataModel
-     */
-    public ITableDataModel getDataModel()
-    {
-        return m_objDataModel;
-    }
-
-    /**
-     * Sets the dataModel.
-     * @param dataModel The dataModel to set
-     */
-    public void setDataModel(ITableDataModel dataModel)
-    {
-        if (m_objDataModel != null)
-            m_objDataModel.removeTableDataModelListener(this);
-            
-        m_objDataModel = dataModel;
-        m_objDataModel.addTableDataModelListener(this);
-        
-        m_arrRows = null;
-    }
-
-}
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/model/simple/SimpleTablePagingState.java b/3.0.4/contrib/src/org/apache/tapestry/contrib/table/model/simple/SimpleTablePagingState.java
deleted file mode 100644
index 5968e6c..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/model/simple/SimpleTablePagingState.java
+++ /dev/null
@@ -1,77 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.table.model.simple;
-
-import java.io.Serializable;
-
-import org.apache.tapestry.contrib.table.model.ITablePagingState;
-
-/**
- * A minimal implementation of 
- * {@link org.apache.tapestry.contrib.table.model.ITablePagingState}.
- * 
- * @version $Id$
- * @author mindbridge
- */
-public class SimpleTablePagingState implements ITablePagingState, Serializable
-{
-    private final static int DEFAULT_PAGE_SIZE = 10;
-
-    private int m_nPageSize;
-    private int m_nCurrentPage;
-
-    public SimpleTablePagingState()
-    {
-        m_nPageSize = DEFAULT_PAGE_SIZE;
-        m_nCurrentPage = 0;
-    }
-
-    /**
-     * Returns the pageSize.
-     * @return int
-     */
-    public int getPageSize()
-    {
-        return m_nPageSize;
-    }
-
-    /**
-     * Sets the pageSize.
-     * @param pageSize The pageSize to set
-     */
-    public void setPageSize(int pageSize)
-    {
-        m_nPageSize = pageSize;
-    }
-
-    /**
-     * Returns the currentPage.
-     * @return int
-     */
-    public int getCurrentPage()
-    {
-        return m_nCurrentPage;
-    }
-
-    /**
-     * Sets the currentPage.
-     * @param currentPage The currentPage to set
-     */
-    public void setCurrentPage(int currentPage)
-    {
-        m_nCurrentPage = currentPage;
-    }
-
-}
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/model/simple/SimpleTableSessionStateManager.java b/3.0.4/contrib/src/org/apache/tapestry/contrib/table/model/simple/SimpleTableSessionStateManager.java
deleted file mode 100644
index 65e0b9f..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/model/simple/SimpleTableSessionStateManager.java
+++ /dev/null
@@ -1,69 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.table.model.simple;
-
-import java.io.Serializable;
-
-import org.apache.tapestry.contrib.table.model.ITableColumnModel;
-import org.apache.tapestry.contrib.table.model.ITableDataModel;
-import org.apache.tapestry.contrib.table.model.ITableModel;
-import org.apache.tapestry.contrib.table.model.ITableSessionStateManager;
-
-/**
- * A {@link org.apache.tapestry.contrib.table.model.ITableSessionStateManager} 
- * implementation that saves only the paging and sorting state of the table model 
- * into the session.
- * 
- * @version $Id$
- * @author mindbridge
- */
-public class SimpleTableSessionStateManager
-	implements ITableSessionStateManager
-{
-	private ITableDataModel m_objDataModel;
-	private ITableColumnModel m_objColumnModel;
-
-	public SimpleTableSessionStateManager(
-		ITableDataModel objDataModel,
-		ITableColumnModel objColumnModel)
-	{
-		m_objDataModel = objDataModel;
-		m_objColumnModel = objColumnModel;
-	}
-
-	/**
-	 * @see org.apache.tapestry.contrib.table.model.ITableSessionStateManager#getSessionState(ITableModel)
-	 */
-	public Serializable getSessionState(ITableModel objModel)
-	{
-		SimpleTableModel objSimpleModel = (SimpleTableModel) objModel;
-		return objSimpleModel.getState();
-	}
-
-	/**
-	 * @see org.apache.tapestry.contrib.table.model.ITableSessionStateManager#recreateTableModel(Serializable)
-	 */
-	public ITableModel recreateTableModel(Serializable objState)
-	{
-		if (objState == null)
-			return null;
-		SimpleTableState objSimpleState = (SimpleTableState) objState;
-		return new SimpleTableModel(
-			m_objDataModel,
-			m_objColumnModel,
-			objSimpleState);
-	}
-
-}
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/model/simple/SimpleTableSortingState.java b/3.0.4/contrib/src/org/apache/tapestry/contrib/table/model/simple/SimpleTableSortingState.java
deleted file mode 100644
index 89d5307..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/model/simple/SimpleTableSortingState.java
+++ /dev/null
@@ -1,69 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.table.model.simple;
-
-import java.io.Serializable;
-
-import org.apache.tapestry.contrib.table.model.ITableSortingState;
-
-/**
- * A minimal implementation of 
- * {@link org.apache.tapestry.contrib.table.model.ITableSortingState}
- * 
- * @version $Id$
- * @author mindbridge
- */
-public class SimpleTableSortingState
-	implements ITableSortingState, Serializable
-{
-	private String m_strSortColumn;
-	private boolean m_bSortOrder;
-
-	public SimpleTableSortingState()
-	{
-		m_strSortColumn = null; // no sorting
-		m_bSortOrder = ITableSortingState.SORT_ASCENDING;
-		// irrelevant, but anyway
-	}
-
-	/**
-	 * Returns the SortOrder.
-	 * @return boolean
-	 */
-	public boolean getSortOrder()
-	{
-		return m_bSortOrder;
-	}
-
-	/**
-	 * Returns the SortColumn.
-	 * @return int
-	 */
-	public String getSortColumn()
-	{
-		return m_strSortColumn;
-	}
-
-	/**
-	 * Sets the SortColumn.
-	 * @param strSortColumn The SortColumn to set
-	 */
-	public void setSortColumn(String strSortColumn, boolean bSortOrder)
-	{
-		m_strSortColumn = strSortColumn;
-		m_bSortOrder = bSortOrder;
-	}
-
-}
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/model/simple/SimpleTableState.java b/3.0.4/contrib/src/org/apache/tapestry/contrib/table/model/simple/SimpleTableState.java
deleted file mode 100644
index 628df07..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/model/simple/SimpleTableState.java
+++ /dev/null
@@ -1,64 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.table.model.simple;
-
-import java.io.Serializable;
-
-import org.apache.tapestry.contrib.table.model.ITablePagingState;
-import org.apache.tapestry.contrib.table.model.ITableSortingState;
-
-/**
- * A container holding all of the table model states.
- * 
- * @version $Id$
- * @author mindbridge
- */
-public class SimpleTableState implements Serializable
-{
-	private ITablePagingState m_objPagingState;
-	private ITableSortingState m_objSortingState;
-
-	public SimpleTableState()
-	{
-		this(new SimpleTablePagingState(), new SimpleTableSortingState());
-	}
-
-	public SimpleTableState(
-		ITablePagingState objPagingState,
-		ITableSortingState objSortingState)
-	{
-		m_objPagingState = objPagingState;
-		m_objSortingState = objSortingState;
-	}
-
-	/**
-	 * Returns the pagingState.
-	 * @return ITablePagingState
-	 */
-	public ITablePagingState getPagingState()
-	{
-		return m_objPagingState;
-	}
-
-	/**
-	 * Returns the sortingState.
-	 * @return ITableSortingState
-	 */
-	public ITableSortingState getSortingState()
-	{
-		return m_objSortingState;
-	}
-
-}
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/model/simple/SimpleTableValueRendererSource.java b/3.0.4/contrib/src/org/apache/tapestry/contrib/table/model/simple/SimpleTableValueRendererSource.java
deleted file mode 100644
index 5214c43..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/model/simple/SimpleTableValueRendererSource.java
+++ /dev/null
@@ -1,63 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.table.model.simple;
-
-import org.apache.tapestry.IRender;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.contrib.table.model.ITableColumn;
-import org.apache.tapestry.contrib.table.model.ITableModelSource;
-import org.apache.tapestry.contrib.table.model.ITableRendererSource;
-import org.apache.tapestry.valid.RenderString;
-
-/**
- * This is a simple implementation of 
- * {@link org.apache.tapestry.contrib.table.model.ITableRendererSource} 
- * that returns a standard renderer of a column value.
- * 
- * This implementation requires that the column passed is of type SimpleTableColumn
- * 
- * @see org.apache.tapestry.contrib.table.model.common.AbstractTableColumn
- * @version $Id$
- * @author mindbridge
- * @since 2.3
- */
-public class SimpleTableValueRendererSource implements ITableRendererSource
-{
-    /** 
-     *  The representation of null values. This is geared towards HTML, but will
-     *  work for some other *ML languages as well. In any case, changing the 
-     *  column's value renderer allows selecting fully custom rendering behaviour. 
-     **/ 
-    private static final String EMPTY_REPRESENTATION = "&nbsp;";
-
-	/**
-	 * @see org.apache.tapestry.contrib.table.model.ITableRendererSource#getRenderer(IRequestCycle, ITableModelSource, ITableColumn, Object)
-	 */
-	public IRender getRenderer(
-		IRequestCycle objCycle,
-		ITableModelSource objSource,
-		ITableColumn objColumn,
-		Object objRow)
-	{
-		SimpleTableColumn objSimpleColumn = (SimpleTableColumn) objColumn;
-
-		Object objValue = objSimpleColumn.getColumnValue(objRow);
-		if (objValue == null)
-			return new RenderString(EMPTY_REPRESENTATION, true);
-
-		return new RenderString(objValue.toString());
-	}
-
-}
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/model/sql/ISqlConnectionSource.java b/3.0.4/contrib/src/org/apache/tapestry/contrib/table/model/sql/ISqlConnectionSource.java
deleted file mode 100644
index fe2ab44..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/model/sql/ISqlConnectionSource.java
+++ /dev/null
@@ -1,29 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.table.model.sql;
-
-import java.sql.Connection;
-import java.sql.SQLException;
-
-/**
- * 
- * @version $Id$
- * @author mindbridge
- */
-public interface ISqlConnectionSource
-{
-	Connection obtainConnection() throws SQLException;
-	void returnConnection(Connection objConnection);
-}
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/model/sql/ISqlTableDataSource.java b/3.0.4/contrib/src/org/apache/tapestry/contrib/table/model/sql/ISqlTableDataSource.java
deleted file mode 100644
index 3ea4abd..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/model/sql/ISqlTableDataSource.java
+++ /dev/null
@@ -1,35 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.table.model.sql;
-
-import java.sql.ResultSet;
-import java.sql.SQLException;
-
-import org.apache.tapestry.contrib.table.model.simple.SimpleTableState;
-
-/**
- * 
- * @version $Id$
- * @author mindbridge
- */
-public interface ISqlTableDataSource
-{
-	int getRowCount() throws SQLException;
-	ResultSet getCurrentRows(
-		SqlTableColumnModel objColumnModel,
-		SimpleTableState objState)
-		throws SQLException;
-	void closeResultSet(ResultSet objResultSet);
-}
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/model/sql/ResultSetIterator.java b/3.0.4/contrib/src/org/apache/tapestry/contrib/table/model/sql/ResultSetIterator.java
deleted file mode 100644
index 87174d5..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/model/sql/ResultSetIterator.java
+++ /dev/null
@@ -1,123 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.table.model.sql;
-
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.util.Iterator;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-/**
- * 
- * @version $Id$
- * @author mindbridge
- */
-public class ResultSetIterator implements Iterator
-{
-	private static final Log LOG = LogFactory.getLog(ResultSetIterator.class);
-
-	private ResultSet m_objResultSet;
-	private boolean m_bFetched;
-	private boolean m_bAvailable;
-
-	public ResultSetIterator(ResultSet objResultSet)
-	{
-		m_objResultSet = objResultSet;
-		m_bFetched = false;
-	}
-
-	/**
-	 * @see java.util.Iterator#hasNext()
-	 */
-	public synchronized boolean hasNext()
-	{
-        if (getResultSet() == null) return false;
-        
-		if (!m_bFetched)
-		{
-			m_bFetched = true;
-
-			try
-			{
-				m_bAvailable = !getResultSet().isLast();
-			}
-			catch (SQLException e)
-			{
-				LOG.warn(
-					"SQLException while testing for end of the ResultSet",
-					e);
-				m_bAvailable = false;
-			}
-
-			if (!m_bAvailable)
-				notifyEnd();
-		}
-
-		return m_bAvailable;
-	}
-
-	/**
-	 * @see java.util.Iterator#next()
-	 */
-	public synchronized Object next()
-	{
-		ResultSet objResultSet = getResultSet();
-
-		try
-		{
-			if (!objResultSet.next())
-				return null;
-		}
-		catch (SQLException e)
-		{
-			LOG.warn("SQLException while iterating over the ResultSet", e);
-			return null;
-		}
-
-		m_bFetched = false;
-		return objResultSet;
-	}
-
-	/**
-	 * @see java.util.Iterator#remove()
-	 */
-	public void remove()
-	{
-		try
-		{
-			getResultSet().deleteRow();
-		}
-		catch (SQLException e)
-		{
-			LOG.error("Cannot delete record", e);
-		}
-	}
-
-	/**
-	 * Returns the resultSet.
-	 * @return ResultSet
-	 */
-	public ResultSet getResultSet()
-	{
-		return m_objResultSet;
-	}
-
-	protected void notifyEnd()
-	{
-	}
-
-}
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/model/sql/SimpleSqlConnectionSource.java b/3.0.4/contrib/src/org/apache/tapestry/contrib/table/model/sql/SimpleSqlConnectionSource.java
deleted file mode 100644
index 9b64253..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/model/sql/SimpleSqlConnectionSource.java
+++ /dev/null
@@ -1,79 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.table.model.sql;
-
-import java.sql.Connection;
-import java.sql.DriverManager;
-import java.sql.SQLException;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-/**
- * 
- * @version $Id : $
- * @author mindbridge
- */
-public class SimpleSqlConnectionSource implements ISqlConnectionSource
-{
-	private static final Log LOG =
-		LogFactory.getLog(SimpleSqlConnectionSource.class);
-
-	private String m_strUrl;
-	private String m_strUser;
-	private String m_strPwd;
-
-	public SimpleSqlConnectionSource(String strUrl)
-	{
-		this(strUrl, null, null);
-	}
-
-	public SimpleSqlConnectionSource(
-		String strUrl,
-		String strUser,
-		String strPwd)
-	{
-		m_strUrl = strUrl;
-		m_strUser = strUser;
-		m_strPwd = strPwd;
-	}
-
-	/**
-	 * @see org.apache.tapestry.contrib.table.model.sql.ISqlConnectionSource#obtainConnection()
-	 */
-	public Connection obtainConnection() throws SQLException
-	{
-		if (m_strUser == null)
-			return DriverManager.getConnection(m_strUrl);
-		else
-			return DriverManager.getConnection(m_strUrl, m_strUser, m_strPwd);
-	}
-
-	/**
-	 * @see org.apache.tapestry.contrib.table.model.sql.ISqlConnectionSource#returnConnection(Connection)
-	 */
-	public void returnConnection(Connection objConnection)
-	{
-		try
-		{
-			objConnection.close();
-		}
-		catch (SQLException e)
-		{
-			LOG.warn("Could not close connection", e);
-		}
-	}
-
-}
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/model/sql/SimpleSqlTableDataSource.java b/3.0.4/contrib/src/org/apache/tapestry/contrib/table/model/sql/SimpleSqlTableDataSource.java
deleted file mode 100644
index 224a6b2..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/model/sql/SimpleSqlTableDataSource.java
+++ /dev/null
@@ -1,266 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.table.model.sql;
-
-import java.sql.Connection;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.sql.Statement;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.tapestry.contrib.table.model.ITablePagingState;
-import org.apache.tapestry.contrib.table.model.ITableSortingState;
-import org.apache.tapestry.contrib.table.model.simple.SimpleTableState;
-
-/**
- * 
- * @version $Id$
- * @author mindbridge
- */
-public class SimpleSqlTableDataSource implements ISqlTableDataSource
-{
-	private static final Log LOG =
-		LogFactory.getLog(SimpleSqlTableDataSource.class);
-
-	private ISqlConnectionSource m_objConnSource;
-	private String m_strTableName;
-	private String m_strWhereClause;
-
-	public SimpleSqlTableDataSource(
-		ISqlConnectionSource objConnSource,
-		String strTableName)
-	{
-		this(objConnSource, strTableName, null);
-	}
-
-	public SimpleSqlTableDataSource(
-		ISqlConnectionSource objConnSource,
-		String strTableName,
-		String strWhereClause)
-	{
-		setConnSource(objConnSource);
-		setTableName(strTableName);
-		setWhereClause(strWhereClause);
-	}
-
-	/**
-	 * @see org.apache.tapestry.contrib.table.model.sql.ISqlTableDataSource#getRowCount()
-	 */
-	public int getRowCount() throws SQLException
-	{
-		String strQuery = generateCountQuery();
-		LOG.trace("Invoking query to count rows: " + strQuery);
-
-		Connection objConn = getConnSource().obtainConnection();
-		try
-		{
-			Statement objStmt = objConn.createStatement();
-			try
-			{
-				ResultSet objRS = objStmt.executeQuery(strQuery);
-				objRS.next();
-				return objRS.getInt(1);
-			}
-			finally
-			{
-				objStmt.close();
-			}
-		}
-		finally
-		{
-			getConnSource().returnConnection(objConn);
-		}
-	}
-
-	/**
-	 * @see org.apache.tapestry.contrib.table.model.sql.ISqlTableDataSource#getCurrentRows(SqlTableColumnModel, SimpleTableState)
-	 */
-	public ResultSet getCurrentRows(
-		SqlTableColumnModel objColumnModel,
-		SimpleTableState objState)
-		throws SQLException
-	{
-		String strQuery = generateDataQuery(objColumnModel, objState);
-		LOG.trace("Invoking query to load current rows: " + strQuery);
-
-		Connection objConn = getConnSource().obtainConnection();
-		Statement objStmt = objConn.createStatement();
-		return objStmt.executeQuery(strQuery);
-	}
-
-	/**
-	 * @see org.apache.tapestry.contrib.table.model.sql.ISqlTableDataSource#closeResultSet(ResultSet)
-	 */
-	public void closeResultSet(ResultSet objResultSet)
-	{
-		try
-		{
-			Statement objStmt = objResultSet.getStatement();
-			Connection objConn = objStmt.getConnection();
-			try
-			{
-				objResultSet.close();
-				objStmt.close();
-			}
-			catch (SQLException e)
-			{
-				// ignore
-			}
-			getConnSource().returnConnection(objConn);
-		}
-		catch (SQLException e)
-		{
-			LOG.warn("Error while closing the result set", e);
-		}
-	}
-
-	protected String quoteObjectName(String strObject)
-	{
-		return strObject;
-	}
-
-	/**
-	 * Returns the tableName.
-	 * @return String
-	 */
-	public String getTableName()
-	{
-		return m_strTableName;
-	}
-
-	/**
-	 * Sets the tableName.
-	 * @param tableName The tableName to set
-	 */
-	public void setTableName(String tableName)
-	{
-		m_strTableName = tableName;
-	}
-
-	/**
-	 * Returns the connSource.
-	 * @return ISqlConnectionSource
-	 */
-	public ISqlConnectionSource getConnSource()
-	{
-		return m_objConnSource;
-	}
-
-	/**
-	 * Sets the connSource.
-	 * @param connSource The connSource to set
-	 */
-	public void setConnSource(ISqlConnectionSource connSource)
-	{
-		m_objConnSource = connSource;
-	}
-
-	/**
-	 * Returns the whereClause.
-	 * @return String
-	 */
-	public String getWhereClause()
-	{
-		return m_strWhereClause;
-	}
-
-	/**
-	 * Sets the whereClause.
-	 * @param whereClause The whereClause to set
-	 */
-	public void setWhereClause(String whereClause)
-	{
-		m_strWhereClause = whereClause;
-	}
-
-	protected String generateColumnList(SqlTableColumnModel objColumnModel)
-	{
-		// build the column selection
-		StringBuffer objColumnBuf = new StringBuffer();
-		for (int i = 0; i < objColumnModel.getColumnCount(); i++)
-		{
-			SqlTableColumn objColumn = objColumnModel.getSqlColumn(i);
-			if (i > 0)
-				objColumnBuf.append(", ");
-			objColumnBuf.append(quoteObjectName(objColumn.getColumnName()));
-		}
-
-		return objColumnBuf.toString();
-	}
-
-	protected String generateWhereClause()
-	{
-		String strWhereClause = getWhereClause();
-		if (strWhereClause == null || strWhereClause.equals(""))
-			return "";
-		return "WHERE " + strWhereClause + " ";
-	}
-
-	protected String generateOrderByClause(ITableSortingState objSortingState)
-	{
-		// build the sorting clause
-		StringBuffer objSortingBuf = new StringBuffer();
-		if (objSortingState.getSortColumn() != null)
-		{
-			objSortingBuf.append("ORDER BY ");
-			objSortingBuf.append(objSortingState.getSortColumn());
-			if (objSortingState.getSortOrder()
-				== ITableSortingState.SORT_ASCENDING)
-				objSortingBuf.append(" ASC ");
-			else
-				objSortingBuf.append(" DESC ");
-		}
-
-		return objSortingBuf.toString();
-	}
-
-	protected String generateLimitClause(ITablePagingState objPagingState)
-	{
-		int nPageSize = objPagingState.getPageSize();
-		int nStart = objPagingState.getCurrentPage() * nPageSize;
-		String strPagingBuf = "LIMIT " + nPageSize + " OFFSET " + nStart + " ";
-		return strPagingBuf;
-	}
-
-	protected String generateDataQuery(
-		SqlTableColumnModel objColumnModel,
-		SimpleTableState objState)
-	{
-		String strQuery =
-			"SELECT "
-				+ generateColumnList(objColumnModel)
-				+ " FROM "
-				+ getTableName()
-				+ " "
-				+ generateWhereClause()
-				+ generateOrderByClause(objState.getSortingState())
-				+ generateLimitClause(objState.getPagingState());
-
-		return strQuery;
-	}
-
-	protected String generateCountQuery()
-	{
-		String strQuery =
-			"SELECT COUNT(*) FROM "
-				+ getTableName()
-				+ " "
-				+ generateWhereClause();
-
-		return strQuery;
-	}
-
-}
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/model/sql/SqlTableColumn.java b/3.0.4/contrib/src/org/apache/tapestry/contrib/table/model/sql/SqlTableColumn.java
deleted file mode 100644
index 9698bcb..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/model/sql/SqlTableColumn.java
+++ /dev/null
@@ -1,78 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.table.model.sql;
-
-import java.sql.ResultSet;
-import java.sql.SQLException;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.tapestry.contrib.table.model.simple.SimpleTableColumn;
-
-/**
- * 
- * @version $Id$
- * @author mindbridge
- */
-public class SqlTableColumn extends SimpleTableColumn
-{
-	private static final Log LOG = LogFactory.getLog(SqlTableColumn.class);
-
-	/**
-	 * Creates an SqlTableColumn
-	 * @param strSqlField the identifying name of the column and the SQL field it refers to
-	 * @param strDisplayName the display name of the column
-	 */
-	public SqlTableColumn(String strSqlField, String strDisplayName)
-	{
-		super(strSqlField, strDisplayName);
-	}
-
-	/**
-	 * Creates an SqlTableColumn
-	 * @param strSqlField the identifying name of the column and the SQL field it refers to
-	 * @param strDisplayName the display name of the column
-	 * @param bSortable whether the column is sortable
-	 */
-	public SqlTableColumn(
-		String strSqlField,
-		String strDisplayName,
-		boolean bSortable)
-	{
-		super(strSqlField, strDisplayName, bSortable);
-	}
-
-	/**
-	 * @see org.apache.tapestry.contrib.table.model.simple.SimpleTableColumn#getColumnValue(Object)
-	 */
-	public Object getColumnValue(Object objRow)
-	{
-		try
-		{
-			ResultSet objRS = (ResultSet) objRow;
-            String strColumnName = getColumnName();
-			Object objValue = objRS.getObject(strColumnName);
-			if (objValue == null)
-				objValue = "";
-			return objValue;
-		}
-		catch (SQLException e)
-		{
-			LOG.error("Cannot get the value for column: " + getColumnName(), e);
-			return "";
-		}
-	}
-
-}
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/model/sql/SqlTableColumnModel.java b/3.0.4/contrib/src/org/apache/tapestry/contrib/table/model/sql/SqlTableColumnModel.java
deleted file mode 100644
index 8fe47e7..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/model/sql/SqlTableColumnModel.java
+++ /dev/null
@@ -1,40 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.table.model.sql;
-
-import org.apache.tapestry.contrib.table.model.simple.SimpleTableColumnModel;
-
-/**
- * 
- * @version $Id$
- * @author mindbridge
- */
-public class SqlTableColumnModel extends SimpleTableColumnModel
-{
-	public SqlTableColumnModel(SqlTableColumn[] arrColumns)
-	{
-		super(arrColumns);
-	}
-
-	public SqlTableColumn getSqlColumn(int nColumn)
-	{
-		return (SqlTableColumn) getColumn(nColumn);
-	}
-
-	public SqlTableColumn getSqlColumn(String strColumn)
-	{
-		return (SqlTableColumn) getColumn(strColumn);
-	}
-}
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/model/sql/SqlTableModel.java b/3.0.4/contrib/src/org/apache/tapestry/contrib/table/model/sql/SqlTableModel.java
deleted file mode 100644
index 61c3aec..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/table/model/sql/SqlTableModel.java
+++ /dev/null
@@ -1,156 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.table.model.sql;
-
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.util.Iterator;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.tapestry.contrib.table.model.ITableColumnModel;
-import org.apache.tapestry.contrib.table.model.common.AbstractTableModel;
-import org.apache.tapestry.contrib.table.model.simple.SimpleTableState;
-
-/**
- * An implementation of ITableModel that obtains its data through SQL queries.
- * This is a very efficient model, since it uses SQL to perform
- * the data sorting (through ORDER BY) and obtains only the data
- * on the current page (through LIMIT/OFFSET). 
- * <p>
- * This object is typically created in the following manner:
- * <pre> 
- *    ISqlConnectionSource objConnSrc = 
- *        new SimpleSqlConnectionSource("jdbc:postgresql://localhost/testdb", "testdb", "testdb");
- *
- *    ISqlTableDataSource objDataSrc = 
- *        new SimpleSqlTableDataSource(objConnSrc, "test_table");
- *
- *    SqlTableColumnModel objColumnModel = 
- *        new SqlTableColumnModel(new SqlTableColumn[] {
- *            new SqlTableColumn("language", "Language", true),
- *            new SqlTableColumn("country", "Country", true),
- *            new SqlTableColumn("variant", "Variant", true),
- *            new SqlTableColumn("intvalue", "Integer", true),
- *            new SqlTableColumn("floatvalue", "Float", true)
- *        });
- *
- *    ITableModel objTableModel = new SqlTableModel(objDataSrc, objColumnModel);
- *
- *    return objTableModel;
- * </pre> 
- *  
- * @version $Id$
- * @author mindbridge
- */
-public class SqlTableModel extends AbstractTableModel 
-{
-	private static final Log LOG = LogFactory.getLog(SqlTableModel.class);
-
-	private ISqlTableDataSource m_objDataSource;
-	private SqlTableColumnModel m_objColumnModel;
-    
-    {
-        try {
-            Class.forName ( "org.hsqldb.jdbcDriver" );
-        } catch (Exception e) {
-            System.out.println("ERROR: failed to load HSQLDB JDBC driver.");
-            e.printStackTrace();
-        }
-    }
-
-	public SqlTableModel(
-		ISqlTableDataSource objDataSource,
-		SqlTableColumnModel objColumnModel)
-	{
-		this(objDataSource, objColumnModel, new SimpleTableState());
-	}
-
-	public SqlTableModel(
-		ISqlTableDataSource objDataSource,
-		SqlTableColumnModel objColumnModel,
-		SimpleTableState objState)
-	{
-        super(objState);
-		m_objDataSource = objDataSource;
-		m_objColumnModel = objColumnModel;
-	}
-
-	/**
-	 * @see org.apache.tapestry.contrib.table.model.ITableModel#getColumnModel()
-	 */
-	public ITableColumnModel getColumnModel()
-	{
-		return m_objColumnModel;
-	}
-
-	public SqlTableColumnModel getSqlColumnModel()
-	{
-		return m_objColumnModel;
-	}
-
-	/**
-	 * @see org.apache.tapestry.contrib.table.model.ITableModel#getCurrentPageRows()
-	 */
-	public Iterator getCurrentPageRows()
-	{
-		try
-		{
-			ResultSet objResultSet =
-				getSqlDataSource().getCurrentRows(
-					getSqlColumnModel(),
-					getState());
-
-			return new ResultSetIterator(objResultSet)
-			{
-				protected void notifyEnd()
-				{
-					getSqlDataSource().closeResultSet(getResultSet());
-				}
-			};
-		}
-		catch (SQLException e)
-		{
-			LOG.error("Cannot get current page rows", e);
-			return new ResultSetIterator(null);
-		}
-	}
-
-	/**
-	 * Returns the dataSource.
-	 * @return ISqlTableDataSource
-	 */
-	public ISqlTableDataSource getSqlDataSource()
-	{
-		return m_objDataSource;
-	}
-
-    /**
-     * @see org.apache.tapestry.contrib.table.model.common.AbstractTableModel#getRowCount()
-     */
-    protected int getRowCount()
-    {
-        try
-        {
-            return m_objDataSource.getRowCount();
-        }
-        catch (SQLException e)
-        {
-            LOG.error("Cannot get row count", e);
-            return 1;
-        }
-    }
-
-}
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/components/INodeRenderFactory.java b/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/components/INodeRenderFactory.java
deleted file mode 100644
index 13f3ea3..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/components/INodeRenderFactory.java
+++ /dev/null
@@ -1,29 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.tree.components;
-
-import org.apache.tapestry.IRender;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.contrib.tree.model.ITreeModelSource;
-
-/**
- * @author ceco
- * @version $Id$
- */
-public interface INodeRenderFactory 
-{
-	IRender getRenderByID(Object objUniqueKey, ITreeModelSource objTreeModelSource, IRequestCycle objCycle);	
-	IRender getRender(Object objValue, ITreeModelSource objTreeModelSource, IRequestCycle objCycle);	
-}
\ No newline at end of file
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/components/ITreeComponent.java b/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/components/ITreeComponent.java
deleted file mode 100644
index b83fd5a..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/components/ITreeComponent.java
+++ /dev/null
@@ -1,30 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.tree.components;
-
-import org.apache.tapestry.contrib.tree.model.ITreeModelSource;
-import org.apache.tapestry.contrib.tree.model.ITreeRowSource;
-import org.apache.tapestry.util.ComponentAddress;
-
-/**
- * @author ceco
- * @version $Id$
- */
-public interface ITreeComponent {
-	ComponentAddress getComponentPath();
-	ITreeModelSource getTreeModelSource();
-	ITreeRowSource getTreeRowSource();
-	void resetState();
-}
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/components/Tree.html b/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/components/Tree.html
deleted file mode 100644
index 863017b..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/components/Tree.html
+++ /dev/null
@@ -1,7 +0,0 @@
-<span jwcid="$content$">
-	<span class="tree" jwcid="treeView">
-		<span jwcid="treeData">
-			<span jwcid="treeNodeValue"/>
-		</span>
-	</span>		
-</span>		
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/components/Tree.java b/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/components/Tree.java
deleted file mode 100644
index c0e54d0..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/components/Tree.java
+++ /dev/null
@@ -1,63 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.tree.components;
-
-import org.apache.tapestry.BaseComponent;
-import org.apache.tapestry.contrib.tree.model.ITreeModelSource;
-import org.apache.tapestry.contrib.tree.model.ITreeRowSource;
-import org.apache.tapestry.util.ComponentAddress;
-
-/**
- * @author ceco
- * @version $Id$
- */
-public class Tree extends BaseComponent implements ITreeComponent{
-
-	public Tree() {
-		super();
-	}
-
-	/**
-	 * @see org.apache.tapestry.contrib.tree.components.ITreeComponent#getComponentPath()
-	 */
-	public ComponentAddress getComponentPath() {
-		return new ComponentAddress(this);
-	}
-
-	/**
-	 * @see org.apache.tapestry.contrib.tree.components.ITreeComponent#getTreeModelSource()
-	 */
-	public ITreeModelSource getTreeModelSource() {
-		TreeView objTreeView = (TreeView)getComponent("treeView");
-		return objTreeView;
-	}
-
-	/**
-	 * @see org.apache.tapestry.contrib.tree.components.ITreeComponent#resetState()
-	 */
-	public void resetState() {
-		TreeView objTreeView = (TreeView)getComponent("treeView");
-		objTreeView.resetState();
-	}
-
-	/**
-	 * @see org.apache.tapestry.contrib.tree.components.ITreeComponent#getTreeRowSource()
-	 */
-	public ITreeRowSource getTreeRowSource() {
-		TreeDataView objTreeDataView = (TreeDataView)getComponent("treeData");
-		return objTreeDataView;
-	}
-
-}
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/components/Tree.jwc b/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/components/Tree.jwc
deleted file mode 100644
index d69529a..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/components/Tree.jwc
+++ /dev/null
@@ -1,78 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!--  $Id$ -->
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<component-specification class="org.apache.tapestry.contrib.tree.components.Tree"
-    allow-body="yes" allow-informal-parameters="yes">
-
-    <parameter name="sessionStateManager"
-        type="org.apache.tapestry.contrib.tree.model.ITreeSessionStateManager"
-        direction="custom" required="no"/>
-
-    <parameter name="sessionStoreManager"
-        type="org.apache.tapestry.contrib.tree.model.ISessionStoreManager"
-        direction="custom" required="no"/>
-
-    <parameter name="treeModel"
-        type="org.apache.tapestry.contrib.tree.model.ITreeModel"
-        direction="custom" required="yes">
-    </parameter>
-
-    <parameter name="treeStateListener"
-        type="org.apache.tapestry.contrib.tree.model.ITreeStateListener"
-        direction="custom" required="no">
-    </parameter>
-
-    <parameter name="closeNodeImage" type="org.apache.tapestry.IAsset"
-               required="no" direction="in"/>
-    <parameter name="openNodeImage" type="org.apache.tapestry.IAsset"
-               required="no" direction="in"/>
-
-    <parameter name="showNodeImages" type="boolean" required="no"
-               direction="custom"/>
-    <parameter name="makeNodeDirect" type="boolean" required="no"
-               direction="custom"/>
-    <parameter name="nodeRenderFactory"
-               type="org.apache.tapestry.contrib.tree.components.INodeRenderFactory"
-               required="no" direction="custom"/>
-
-    <component id="treeView" type="TreeView">
-        <inherited-binding name="sessionStateManager" parameter-name="sessionStateManager"/>
-        <inherited-binding name="sessionStoreManager" parameter-name="sessionStoreManager"/>
-        <inherited-binding name="treeModel" parameter-name="treeModel"/>
-        <inherited-binding name="treeStateListener" parameter-name="treeStateListener"/>
-    </component>
-
-    <component id="treeData" type="TreeDataView">
-        <binding name="treeView" expression='components.treeView'/>
-        <!--inherited-binding name="value" parameter-name="value"/-->
-    </component>
-
-    <component id="treeNodeValue" type="TreeNodeView">
-        <inherited-binding name="closeNodeImage" parameter-name="closeNodeImage"/>
-        <inherited-binding name="openNodeImage" parameter-name="openNodeImage"/>
-        <inherited-binding name="showNodeImages" parameter-name="showNodeImages"/>
-        <inherited-binding name="makeNodeDirect" parameter-name="makeNodeDirect"/>
-        <inherited-binding name="nodeRenderFactory" parameter-name="nodeRenderFactory"/>
-
-        <binding name="treeDataView" expression='components.treeData'/>
-    </component>
-
-</component-specification>
\ No newline at end of file
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/components/TreeDataView.html b/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/components/TreeDataView.html
deleted file mode 100644
index 39a93c5..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/components/TreeDataView.html
+++ /dev/null
@@ -1,3 +0,0 @@
-<!-- generated by Spindle, http://spindle.sourceforge.net -->
-
-<span jwcid="$content$"><span jwcid="wrapped"/></span>
\ No newline at end of file
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/components/TreeDataView.java b/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/components/TreeDataView.java
deleted file mode 100644
index 6514d92..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/components/TreeDataView.java
+++ /dev/null
@@ -1,123 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.tree.components;
-
-import java.util.Iterator;
-
-import org.apache.tapestry.BaseComponent;
-import org.apache.tapestry.IBinding;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.contrib.tree.model.ITreeDataModel;
-import org.apache.tapestry.contrib.tree.model.ITreeModel;
-import org.apache.tapestry.contrib.tree.model.ITreeRowSource;
-import org.apache.tapestry.contrib.tree.model.TreeRowObject;
-
-/**
- * @version $Id$
- */
-public class TreeDataView extends BaseComponent implements ITreeRowSource{
-    private IBinding m_objTreeViewBinding;
-
-	private TreeRowObject m_objTreeRowObject = null;
-    private int m_nTreeDeep = -1;
-
-    public TreeDataView(){
-        super();
-        initialize();
-    }
-
-    public void initialize(){
-		m_objTreeRowObject = null;
-        m_nTreeDeep = -1;
-    }
-
-    /**
-     * Returns the treeViewBinding.
-     * @return IBinding
-     */
-    public IBinding getTreeViewBinding() {
-        return m_objTreeViewBinding;
-    }
-
-    /**
-     * Sets the treeViewBinding.
-     * @param treeViewBinding The treeViewBinding to set
-     */
-    public void setTreeViewBinding(IBinding treeViewBinding) {
-        m_objTreeViewBinding = treeViewBinding;
-    }
-
-    public TreeView getTreeView() {
-        return (TreeView) m_objTreeViewBinding.getObject();
-    }
-
-    public void renderComponent(IMarkupWriter writer, IRequestCycle cycle) {
-        // render data
-		Object objExistedTreeModelSource = cycle.getAttribute(ITreeRowSource.TREE_ROW_SOURCE_ATTRIBUTE);
-		cycle.setAttribute(ITreeRowSource.TREE_ROW_SOURCE_ATTRIBUTE, this);
-	
-        TreeView objView = getTreeView();
-        ITreeModel objTreeModel = objView.getTreeModel();
-        ITreeDataModel objTreeDataModel = objTreeModel.getTreeDataModel();
-        Object objValue = objTreeDataModel.getRoot();
-        Object objValueUID = objTreeDataModel.getUniqueKey(objValue, null);
-
-        // Object objSelectedNode = objTreeModel.getTreeStateModel().getSelectedNode();
-        //if(objSelectedNode == null)
-        //  objTreeModel.getTreeStateModel().expand(objValueUID);
-
-        walkTree(objValue, objValueUID, 0, objTreeModel, writer, cycle);
-
-		cycle.setAttribute(ITreeRowSource.TREE_ROW_SOURCE_ATTRIBUTE, objExistedTreeModelSource);
-    }
-
-    public void walkTree(Object objParent, Object objParentUID, int nDepth,
-                         ITreeModel objTreeModel, IMarkupWriter writer,
-                         IRequestCycle cycle) {
-		m_objTreeRowObject = new TreeRowObject(objParent, objParentUID, nDepth);
-        m_nTreeDeep = nDepth;
-
-        super.renderComponent(writer, cycle);
-
-        boolean bContain = objTreeModel.getTreeStateModel().isUniqueKeyExpanded(objParentUID);
-        if (bContain) {
-            for (Iterator iter = objTreeModel.getTreeDataModel().getChildren(objParent); iter.hasNext();) {
-                Object objChild = iter.next();
-                Object objChildUID = objTreeModel.getTreeDataModel().getUniqueKey(objChild, objParentUID);
-                walkTree(objChild, objChildUID, nDepth+1, objTreeModel, writer, cycle);
-            }
-        }
-    }
-
-    public int getTreeDeep() {
-        return m_nTreeDeep;
-    }
-	/**
-	 * @see org.apache.tapestry.contrib.tree.model.ITreeRowSource#getTreeRow()
-	 */
-	public TreeRowObject getTreeRow() {
-		return getTreeRowObject();
-	}
-
-	public TreeRowObject getTreeRowObject() {
-		return m_objTreeRowObject;
-	}
-
-	public void setTreeRowObject(TreeRowObject object) {
-		m_objTreeRowObject = object;
-	}
-
-}
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/components/TreeDataView.jwc b/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/components/TreeDataView.jwc
deleted file mode 100644
index c513d45..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/components/TreeDataView.jwc
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!--  $Id$ -->
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<component-specification class="org.apache.tapestry.contrib.tree.components.TreeDataView"
-    allow-body="yes" allow-informal-parameters="yes">
-
-    <parameter name="treeView"
-               type="org.apache.tapestry.contrib.tree.components.TreeView"
-               required="yes" direction="custom"/>
-
-    <parameter name="value" type="java.lang.Object" required="no" direction="custom"/>
-
-    <component id="wrapped" type="RenderBody"/>
-</component-specification>
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/components/TreeNodeView.html b/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/components/TreeNodeView.html
deleted file mode 100644
index ab24cde..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/components/TreeNodeView.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<!-- generated by Spindle, http://spindle.sourceforge.net -->
-
-<span jwcid="$content$">
-	<span jwcid="offset">
-		<span jwcid="makeNodeDirect">
-			<a jwcid="direct">
-				<span jwcid="showImages">
-					<img jwcid="imageNode"/>
-				</span>
-				<span jwcid="insertValue"/></a><br>
-		</span>
-		<span jwcid="makeNodeNoDirect">
-			<span jwcid="showImages2">
-				<img jwcid="imageNode2"/>
-			</span>
-			<span jwcid="insertValue2"/><br>
-		</span>
-	</span>
-</span>
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/components/TreeNodeView.java b/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/components/TreeNodeView.java
deleted file mode 100644
index 2db1d7f..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/components/TreeNodeView.java
+++ /dev/null
@@ -1,399 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.tree.components;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.tapestry.BaseComponent;
-import org.apache.tapestry.IAsset;
-import org.apache.tapestry.IBinding;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRender;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.contrib.tree.model.ITreeModelSource;
-import org.apache.tapestry.contrib.tree.model.ITreeRowSource;
-import org.apache.tapestry.contrib.tree.model.ITreeStateListener;
-import org.apache.tapestry.contrib.tree.model.ITreeStateModel;
-import org.apache.tapestry.contrib.tree.model.TreeRowObject;
-import org.apache.tapestry.contrib.tree.model.TreeStateEvent;
-import org.apache.tapestry.contrib.tree.simple.SimpleNodeRenderFactory;
-import org.apache.tapestry.engine.IPageLoader;
-import org.apache.tapestry.event.PageDetachListener;
-import org.apache.tapestry.event.PageEvent;
-import org.apache.tapestry.spec.ComponentSpecification;
-import org.apache.tapestry.util.ComponentAddress;
-
-/**
- * @version $Id$
- **/
-public class TreeNodeView extends BaseComponent implements PageDetachListener{
-    private static final Log LOG = LogFactory.getLog(TreeNodeView.class);
-
-    private IBinding m_objNodeRenderFactoryBinding;
-    private IBinding m_objShowNodeImagesBinding;
-    private IBinding m_objMakeNodeDirectBinding;
-    private Boolean m_objNodeState;
-    private Boolean m_objShowNodeImages;
-    private Boolean m_objMakeNodeDirect;
-    private INodeRenderFactory m_objNodeRenderFactory;
-
-    private IAsset m_objOpenNodeImage;
-    private IAsset m_objCloseNodeImage;
-
-    public TreeNodeView(){
-        super();
-        initialize();
-    }
-
-    private void initialize(){
-        m_objNodeState = null;
-        m_objShowNodeImages = null;
-        m_objNodeRenderFactory = null;
-        m_objMakeNodeDirect = null;
-    }
-
-    public IRender getCurrentRenderer(){
-        INodeRenderFactory objRenderFactory = getNodeRenderFactory();
-		ITreeRowSource objTreeRowSource = getTreeRowSource();
-        return objRenderFactory.getRender(objTreeRowSource.getTreeRow().getTreeNode(),
-                                          getTreeModelSource(),
-                                          getPage().getRequestCycle());
-    }
-
-    public Object[] getNodeContext(){
-		ITreeModelSource objModelSource = getTreeModelSource();
-		ComponentAddress objModelSourceAddress = new ComponentAddress(objModelSource);
-		ITreeRowSource objTreeRowSource = getTreeRowSource();
-		TreeRowObject objTreeRowObject = objTreeRowSource.getTreeRow();
-        Object objValueUID = objTreeRowObject.getTreeNodeUID();
-        if (LOG.isDebugEnabled()) {
-            LOG.debug("getNodeContext objValueUID = " + objValueUID);
-        }
-
-        return new Object[] { objValueUID, new Boolean(isNodeOpen()), objModelSourceAddress };
-    }
-
-    /**
-     * Called when a node in the tree is clicked by the user.
-     * If the node is expanded, it will be collapsed, and vice-versa,
-     * that is, the tree state model is retrieved, and it is told
-     * to collapse or expand the node.
-     *
-     * @param cycle The Tapestry request cycle object.
-     */
-    public void nodeSelect(IRequestCycle cycle) {
-        Object context[] = cycle.getServiceParameters();
-        Object objValueUID = null;
-        if (context != null && context.length > 0) {
-            objValueUID = context[0];
-        }
-		ComponentAddress objModelSourceAddress = (ComponentAddress)context[2];
-		ITreeModelSource objTreeModelSource = (ITreeModelSource) objModelSourceAddress.findComponent(cycle);
-		//ITreeModelSource objTreeModelSource = getTreeModelSource();
-        ITreeStateModel objStateModel = objTreeModelSource.getTreeModel().getTreeStateModel();
-        boolean bState = objStateModel.isUniqueKeyExpanded(objValueUID);
-
-        if (bState) {
-            objStateModel.collapse(objValueUID);
-            fireNodeCollapsed(objValueUID, objTreeModelSource);
-        } else {
-            objStateModel.expandPath(objValueUID);
-			fireNodeExpanded(objValueUID, objTreeModelSource);
-        }
-    }
-
-	private void fireNodeCollapsed(Object objValueUID, ITreeModelSource objTreeModelSource){
-		deliverEvent(TreeStateEvent.NODE_COLLAPSED, objValueUID, objTreeModelSource);
-	
-	}
-
-	private void fireNodeExpanded(Object objValueUID, ITreeModelSource objTreeModelSource){
-		deliverEvent(TreeStateEvent.NODE_EXPANDED, objValueUID, objTreeModelSource);
-	}
-    
-	private void deliverEvent(int nEventUID, Object objValueUID, ITreeModelSource objTreeModelSource){
-		ITreeStateListener objListener = objTreeModelSource.getTreeStateListener();
-		if(objListener != null){
-			TreeStateEvent objEvent = new TreeStateEvent(nEventUID, objValueUID, objTreeModelSource.getTreeModel().getTreeStateModel());
-			objListener.treeStateChanged(objEvent); 
-		}
-		
-	}
-    
-	private void deliverEventOld(int nEventUID, Object objValueUID, ITreeStateModel objStateModel){
-		IBinding objBinding = getBinding("treeStateListener");
-		if(objBinding != null){
-			ITreeStateListener objListener = (ITreeStateListener)objBinding.getObject();
-			TreeStateEvent objEvent = new TreeStateEvent(nEventUID, objValueUID, objStateModel);
-			objListener.treeStateChanged(objEvent); 
-		}
-		
-	}
-
-    public void pageDetached(PageEvent arg0) {
-        initialize();
-    }
-
-    public void finishLoad(IRequestCycle objCycle, IPageLoader arg0, ComponentSpecification arg1)
-    {
-        super.finishLoad(objCycle, arg0, arg1);
-        getPage().addPageDetachListener(this);
-
-        m_objOpenNodeImage = getAsset("_openNodeImage");
-        m_objCloseNodeImage = getAsset("_closeNodeImage");
-    }
-
-    public boolean isNodeOpen() {
-        if(m_objNodeState == null){
-			ITreeRowSource objTreeRowSource = getTreeRowSource();
-			TreeRowObject objTreeRowObject = objTreeRowSource.getTreeRow();
-            Object objValueUID = objTreeRowObject.getTreeNodeUID();
-			ITreeModelSource objTreeModelSource = getTreeModelSource();
-            ITreeStateModel objStateModel = objTreeModelSource.getTreeModel().getTreeStateModel();
-            boolean bState = objStateModel.isUniqueKeyExpanded(objValueUID);
-            m_objNodeState = new Boolean(bState);
-        }
-        return m_objNodeState.booleanValue();
-    }
-
-    /**
-     * Returns the openNodeImage.
-     * @return IAsset
-     */
-    public IAsset getNodeImage() {
-        if(isNodeOpen()) {
-            if (m_objOpenNodeImage == null) {
-                m_objOpenNodeImage = getAsset("_openNodeImage");
-            }
-            return m_objOpenNodeImage;
-        } else {
-            if (m_objCloseNodeImage == null) {
-                m_objCloseNodeImage = getAsset("_closeNodeImage");
-            }
-            return m_objCloseNodeImage;
-        }
-    }
-
-    /**
-     * Returns the closeNodeImage.
-     * @return IAsset
-     */
-    public IAsset getCloseNodeImage() {
-        return m_objCloseNodeImage;
-    }
-
-    /**
-     * Returns the openNodeImage.
-     * @return IAsset
-     */
-    public IAsset getOpenNodeImage() {
-        return m_objOpenNodeImage;
-    }
-
-    /**
-     * Sets the closeNodeImage.
-     * @param closeNodeImage The closeNodeImage to set
-     */
-    public void setCloseNodeImage(IAsset closeNodeImage) {
-        m_objCloseNodeImage = closeNodeImage;
-    }
-
-    /**
-     * Sets the openNodeImage.
-     * @param openNodeImage The openNodeImage to set
-     */
-    public void setOpenNodeImage(IAsset openNodeImage) {
-        m_objOpenNodeImage = openNodeImage;
-    }
-
-    /**
-     * @see
-     * org.apache.tapestry.AbstractComponent#renderComponent(IMarkupWriter,
-     * IRequestCycle)
-     */
-    protected void renderComponent(IMarkupWriter arg0, IRequestCycle arg1) {
-        super.renderComponent(arg0, arg1);
-        m_objNodeState = null;
-    }
-
-    /**
-     * Returns the ShowNodeImagesBinding.
-     * @return IBinding
-     */
-    public IBinding getShowNodeImagesBinding() {
-        return m_objShowNodeImagesBinding;
-    }
-
-    /**
-     * Sets the ShowNodeImagesBinding.
-     * @param ShowNodeImagesBinding The ShowNodeImagesBinding to set
-     */
-    public void setShowNodeImagesBinding(IBinding ShowNodeImagesBinding) {
-        m_objShowNodeImagesBinding = ShowNodeImagesBinding;
-    }
-
-    /**
-     * Returns the ShowNodeImages.
-     * @return Boolean
-     */
-    public Boolean isShowNodeImages() {
-        if(m_objShowNodeImages == null){
-            if(getNodeRenderFactoryBinding() == null){
-                m_objShowNodeImages = Boolean.TRUE;
-            } else {
-                if(m_objShowNodeImagesBinding != null) {
-                    m_objShowNodeImages = (Boolean)
-                        m_objShowNodeImagesBinding.getObject();
-                } else {
-                    m_objShowNodeImages = Boolean.TRUE;
-                }
-            }
-        }
-        return m_objShowNodeImages;
-    }
-
-    public boolean getShowImages(){
-        boolean bResult = isShowNodeImages().booleanValue();
-        return bResult;
-    }
-
-    public boolean getShowWithoutImages(){
-        boolean bResult = !isShowNodeImages().booleanValue();
-        return bResult;
-    }
-
-    public String getOffsetStyle() {
-        //return "width: " + getTreeDataView().getTreeDeep() * 15;
-		ITreeRowSource objTreeRowSource = getTreeRowSource();
-		TreeRowObject objTreeRowObject = objTreeRowSource.getTreeRow();
-        int nTreeRowDepth = 0;
-        if(objTreeRowObject != null){
-			nTreeRowDepth = objTreeRowObject.getTreeRowDepth();
-        }
-        return "padding-left: " + nTreeRowDepth * 15+"px";
-    }
-
-    /**
-     * Returns the nodeRenderFactoryBinding.
-     * @return IBinding
-     */
-    public IBinding getNodeRenderFactoryBinding() {
-        return m_objNodeRenderFactoryBinding;
-    }
-
-    /**
-     * Sets the nodeRenderFactoryBinding.
-     * @param nodeRenderFactoryBinding The nodeRenderFactoryBinding to set
-     */
-    public void setNodeRenderFactoryBinding(IBinding nodeRenderFactoryBinding) {
-        m_objNodeRenderFactoryBinding = nodeRenderFactoryBinding;
-    }
-
-    public INodeRenderFactory getNodeRenderFactory() {
-        if(m_objNodeRenderFactory == null){
-            IBinding objBinding = getNodeRenderFactoryBinding();
-            if( objBinding != null){
-                m_objNodeRenderFactory = (INodeRenderFactory)objBinding.getObject();
-            }else{
-                m_objNodeRenderFactory = new SimpleNodeRenderFactory();
-            }
-        }
-        return m_objNodeRenderFactory;
-    }
-
-    /**
-     * Returns the makeNodeDirectBinding.
-     * @return IBinding
-     */
-    public IBinding getMakeNodeDirectBinding() {
-        return m_objMakeNodeDirectBinding;
-    }
-
-    /**
-     * Sets the makeNodeDirectBinding.
-     * @param makeNodeDirectBinding The makeNodeDirectBinding to set
-     */
-    public void setMakeNodeDirectBinding(IBinding makeNodeDirectBinding) {
-        m_objMakeNodeDirectBinding = makeNodeDirectBinding;
-    }
-
-    /**
-     * Returns the makeNodeDirect.
-     * @return Boolean
-     */
-    public boolean getMakeNodeDirect() {
-        if(m_objMakeNodeDirect == null){
-            IBinding objBinding = getMakeNodeDirectBinding();
-            if(objBinding != null){
-                m_objMakeNodeDirect = (Boolean)objBinding.getObject();
-            }else{
-                m_objMakeNodeDirect = Boolean.TRUE;
-            }
-        }
-        return m_objMakeNodeDirect.booleanValue();
-    }
-    public boolean getMakeNodeNoDirect() {
-        return !getMakeNodeDirect();
-    }
-
-
-    public String getCleanSelectedID(){
-        return getSelectedNodeID();
-    }
-
-    public String getSelectedID(){
-		ITreeRowSource objTreeRowSource = getTreeRowSource();
-		ITreeModelSource objTreeModelSource = getTreeModelSource();
-		TreeRowObject objTreeRowObject = objTreeRowSource.getTreeRow();
-        Object objNodeValueUID = objTreeRowObject.getTreeNodeUID();
-        Object objSelectedNode = objTreeModelSource.getTreeModel().getTreeStateModel().getSelectedNode();
-        if(objNodeValueUID.equals(objSelectedNode)) {
-            return getSelectedNodeID();
-        }
-        return "";
-    }
-		
-	private String getSelectedNodeID(){
-		//return getTreeDataView().getTreeView().getSelectedNodeID();
-		return "tree";	
-	}
-		
-    public String getNodeStyleClass() {
-		ITreeRowSource objTreeRowSource = getTreeRowSource();
-		ITreeModelSource objTreeModelSource = getTreeModelSource();
-		TreeRowObject objTreeRowObject = objTreeRowSource.getTreeRow();
-		boolean bResult = false;
-		if(objTreeRowObject != null){
-	        Object objNodeValueUID = objTreeRowObject.getTreeNodeUID();
-	        Object objSelectedNode = objTreeModelSource.getTreeModel().getTreeStateModel().getSelectedNode();
-			bResult = objNodeValueUID.equals(objSelectedNode);
-		}
-        if (bResult) {
-            return "selectedNodeViewClass";
-        }
-
-        return "notSelectedNodeViewClass";
-    }
-    
-    public ITreeRowSource getTreeRowSource(){
-		ITreeRowSource objSource = (ITreeRowSource)getPage().getRequestCycle().getAttribute(ITreeRowSource.TREE_ROW_SOURCE_ATTRIBUTE);
-    	return objSource;
-    }
-
-	public ITreeModelSource getTreeModelSource(){
-		ITreeModelSource objSource = (ITreeModelSource)getPage().getRequestCycle().getAttribute(ITreeModelSource.TREE_MODEL_SOURCE_ATTRIBUTE);
-		return objSource;
-	}
-}
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/components/TreeNodeView.jwc b/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/components/TreeNodeView.jwc
deleted file mode 100644
index 9adadce..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/components/TreeNodeView.jwc
+++ /dev/null
@@ -1,94 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!--  $Id$ -->
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<component-specification
-    class="org.apache.tapestry.contrib.tree.components.TreeNodeView"
-    allow-body="yes" allow-informal-parameters="yes">
-
-    <parameter name="closeNodeImage" type="org.apache.tapestry.IAsset"
-               required="no" direction="in"/>
-    <parameter name="openNodeImage" type="org.apache.tapestry.IAsset"
-               required="no" direction="in"/>
-
-    <parameter name="showNodeImages" type="boolean" required="no"
-               direction="custom"/>
-    <parameter name="makeNodeDirect" type="boolean" required="no"
-               direction="custom"/>
-
-    <parameter name="nodeRenderFactory"
-               type="org.apache.tapestry.contrib.tree.components.INodeRenderFactory"
-               required="no" direction="custom"/>
-
-    <!--parameter name="treeStateListener"
-        type="org.apache.tapestry.contrib.tree.model.ITreeStateListener"
-        direction="custom" required="no">
-    </parameter-->
-
-    <reserved-parameter name="opennodeimage"/>
-    <reserved-parameter name="treedataview"/>
-    <reserved-parameter name="closenodeimage"/>
-    <reserved-parameter name="nodeviewdirect"/>
-
-    <component id="direct" type="DirectLink">
-        <binding name="parameters" expression="nodeContext"/>
-        <binding name="listener" expression="listeners.nodeSelect"/>
-        <binding name="stateful" expression="false"/>
-        <binding name="name" expression="selectedID"/>
-        <binding name="anchor" expression="cleanSelectedID"/>
-    </component>
-
-    <component id="showImages" type="Conditional">
-        <binding name="condition" expression="showImages"/>
-    </component>
-
-    <component id="showImages2" copy-of="showImages"/>
-
-    <!--component id="showWithoutImages" type="Conditional">
-        <binding name="condition" expression="showWithoutImages"/>
-    </component-->
-
-    <component id="makeNodeDirect" type="Conditional">
-        <binding name="condition" expression="makeNodeDirect"/>
-    </component>
-
-    <component id="makeNodeNoDirect" type="Conditional">
-        <binding name="condition" expression="makeNodeNoDirect"/>
-    </component>
-
-    <component id="imageNode" type="Image">
-        <binding name="image" expression="nodeImage"/>
-    </component>
-    <component id="imageNode2" copy-of="imageNode"/>
-
-    <component id="insertValue" type="Delegator">
-		<binding name="delegate" expression="currentRenderer"/>
-    </component>
-    <component id="insertValue2" copy-of="insertValue"/>
-
-    <component id="offset" type="Any">
-        <static-binding name="element">span</static-binding>
-        <binding name="style" expression="offsetStyle"/>
-        <binding name="class" expression="nodeStyleClass"/>
-    </component>
-
-    <private-asset name="_closeNodeImage" resource-path="plus.gif"/>
-    <private-asset name="_openNodeImage" resource-path="minus.gif"/>
-</component-specification>
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/components/TreeNodeViewPage.html b/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/components/TreeNodeViewPage.html
deleted file mode 100644
index 6b11e7a..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/components/TreeNodeViewPage.html
+++ /dev/null
@@ -1,5 +0,0 @@
-<!-- generated by Spindle, http://spindle.sourceforge.net -->
-
-<span jwcid="$content$">
-	<span jwcid="treeNodeView"/>
-</span>
\ No newline at end of file
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/components/TreeNodeViewPage.page b/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/components/TreeNodeViewPage.page
deleted file mode 100644
index eaf27f7..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/components/TreeNodeViewPage.page
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0"?>
-<!--
-    Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- Forms.page,v 1.1 2002/08/23 22:18:31 hship Exp -->
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<page-specification>
-
-    <component id="treeNodeView" type="TreeNodeView">
-    </component>
-
-</page-specification>
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/components/TreeView.html b/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/components/TreeView.html
deleted file mode 100644
index 5facb58..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/components/TreeView.html
+++ /dev/null
@@ -1,5 +0,0 @@
-<span jwcid="$content$">
-    <span jwcid="inheritInformalAny">
-        <span jwcid="insertWrapped"/>
-    </span>
-</span>
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/components/TreeView.java b/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/components/TreeView.java
deleted file mode 100644
index b926226..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/components/TreeView.java
+++ /dev/null
@@ -1,324 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.tree.components;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.tapestry.BaseComponent;
-import org.apache.tapestry.IBinding;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.contrib.tree.model.ISessionStoreManager;
-import org.apache.tapestry.contrib.tree.model.ITreeModel;
-import org.apache.tapestry.contrib.tree.model.ITreeModelSource;
-import org.apache.tapestry.contrib.tree.model.ITreeSessionStateManager;
-import org.apache.tapestry.contrib.tree.model.ITreeStateListener;
-import org.apache.tapestry.contrib.tree.simple.FullTreeSessionStateManager;
-import org.apache.tapestry.event.PageDetachListener;
-import org.apache.tapestry.event.PageEvent;
-import org.apache.tapestry.event.PageRenderListener;
-import org.apache.tapestry.util.ComponentAddress;
-
-/**
- * @version $Id$
- */
-public class TreeView extends BaseComponent
-    implements PageDetachListener, PageRenderListener, ITreeModelSource {
-
-    private static final Log LOG = LogFactory.getLog(TreeView.class);
-
-    private IBinding m_objSessionStoreManagerBinding;
-    private IBinding m_objTreeModelBinding;
-    private IBinding m_objSessionStateManagerBinding;
-
-    private ITreeModel m_objTreeModel;
-    private ITreeSessionStateManager m_objTreeSessionStateManager;
-    private ISessionStoreManager m_objSessionStoreManager;
-    private Object m_objTreeSessionState;
-    private ComponentAddress m_objComponentAddress;
-
-    public TreeView(){
-        super();
-        initialize();
-    }
-
-    private void initialize(){
-        m_objTreeModel = null;
-        m_objTreeSessionStateManager = null;
-        m_objSessionStoreManager = null;
-        m_objTreeSessionState = null;
-        m_objComponentAddress = null;
-    }
-
-    /**
-     * @see org.apache.tapestry.AbstractComponent#finishLoad()
-     */
-    protected void finishLoad() {
-        super.finishLoad();
-        getPage().addPageRenderListener(this);
-        getPage().addPageDetachListener(this);
-    }
-
-    /**
-     * @see org.apache.tapestry.AbstractComponent#renderComponent(IMarkupWriter, IRequestCycle)
-     */
-    /*	protected void renderComponent(IMarkupWriter writer, IRequestCycle cycle)
-        throws RequestCycleException
-	{
-    	renderWrapped(writer, cycle);
-	}
-    */
-
-    /**
-     * @see org.apache.tapestry.event.PageDetachListener#pageDetached(PageEvent)
-     */
-    public void pageDetached(PageEvent arg0) {
-        initialize();
-    }
-
-    /**
-     * @see org.apache.tapestry.event.PageRenderListener#pageBeginRender(PageEvent)
-     */
-    public void pageBeginRender(PageEvent arg0) {
-        if(arg0.getRequestCycle().isRewinding()) {
-            return;
-        }
-        storeSesion();
-    }
-
-    /**
-     * @see org.apache.tapestry.event.PageRenderListener#pageEndRender(PageEvent)
-     */
-    public void pageEndRender(PageEvent arg0) {
-    }
-
-    /**
-     * Returns the treeModelBinding.
-     * @return IBinding
-     */
-    public IBinding getTreeModelBinding() {
-        return m_objTreeModelBinding;
-    }
-
-    /**
-     * Sets the treeModelBinding.
-     * @param treeModelBinding The treeModelBinding to set
-     */
-    public void setTreeModelBinding(IBinding treeModelBinding) {
-        m_objTreeModelBinding = treeModelBinding;
-    }
-
-    /**
-     * Returns the SessionStoreManagerBinding.
-     * @return IBinding
-     */
-    public IBinding getSessionStoreManagerBinding() {
-        return m_objSessionStoreManagerBinding;
-    }
-
-    /**
-     * Returns the sessionStateManagerBinding.
-     * @return IBinding
-     */
-    public IBinding getSessionStateManagerBinding() {
-        return m_objSessionStateManagerBinding;
-    }
-
-    /**
-     * Sets the SessionStoreManagerBinding.
-     * @param sessionStoreManagerBinding The SessionStoreManagerBinding to set
-     */
-    public void setSessionStoreManagerBinding(IBinding
-                                              sessionStoreManagerBinding) {
-        m_objSessionStoreManagerBinding = sessionStoreManagerBinding;
-    }
-
-    /**
-     * Sets the sessionStateManagerBinding.
-     * @param sessionStateManagerBinding The sessionStateManagerBinding to set
-     */
-    public void setSessionStateManagerBinding(IBinding
-                                              sessionStateManagerBinding) {
-        m_objSessionStateManagerBinding = sessionStateManagerBinding;
-    }
-
-    private void extractTreeModel(){
-        if (LOG.isDebugEnabled()) {
-            LOG.debug("TreeView.extractTreeModel()");
-        }
-
-        ISessionStoreManager objHolder = getSessionStoreManager();
-        ITreeSessionStateManager objSessionManager = getTreeSessionStateMgr();
-        Object objSessionState;
-        if (objHolder == null) {
-            objSessionState = getTreeSessionState();
-        } else {
-            objSessionState = objHolder.getSessionState(this.getPage(),
-                                                        "treeSessionState");
-        }
-
-        if (objSessionState != null) {
-            m_objTreeModel = objSessionManager.getModel(objSessionState);
-        } else {
-            if (LOG.isDebugEnabled()) {
-                LOG.debug("TreeView.extractTreeModel() from BINDING");
-            }
-
-            m_objTreeModel = (ITreeModel)getTreeModelBinding().getObject();
-        }
-
-    }
-
-    private void storeSesion(){
-        if (LOG.isDebugEnabled()) {
-            LOG.debug("TreeView.storeSesion()");
-        }
-
-        ITreeSessionStateManager objSessionManager = getTreeSessionStateMgr();
-        Object objSessionState =
-            objSessionManager.getSessionState(getTreeModel());
-
-        store(objSessionState);
-    }
-
-    private void store(Object objSessionState){
-        ISessionStoreManager objHolder = getSessionStoreManager();
-
-        if (objHolder == null) {
-            fireObservedChange("treeSessionState", objSessionState);
-        } else {
-            //String strPath = "treeSessionState";
-            String strPath = getExtendedId();
-            if (LOG.isDebugEnabled())
-                LOG.debug("store(): setting state with: " + strPath);
-            objHolder.setSessionState(this.getPage(), strPath,
-                                      objSessionState);
-        }
-    }
-
-    /**
-     * @see ITreeComponent#resetState()
-     */
-    public void resetState() {
-        if (LOG.isDebugEnabled()) {
-            LOG.debug("TreeView.resetState()");
-        }
-        initialize();
-        store(null);
-    }
-
-    /**
-     * Returns the SessionStoreManager.
-     * @return ISessionStoreManager
-     */
-    public ISessionStoreManager getSessionStoreManager() {
-        if (m_objSessionStoreManager == null
-            && getSessionStoreManagerBinding() != null) {
-            m_objSessionStoreManager =
-                (ISessionStoreManager)getSessionStoreManagerBinding().getObject();
-        }
-
-        return m_objSessionStoreManager;
-    }
-
-    /**
-     * Returns the wizardSessionStateMgr.
-     * @return IWizardSessionStateManager
-     */
-    public ITreeSessionStateManager getTreeSessionStateMgr() {
-        if (m_objTreeSessionStateManager == null) {
-            IBinding objBinding = getSessionStateManagerBinding();
-            if(objBinding != null){
-                Object objManager = objBinding.getObject();
-                m_objTreeSessionStateManager =
-                    (ITreeSessionStateManager) objManager;
-            } else {
-                m_objTreeSessionStateManager =
-                    new FullTreeSessionStateManager();
-            }
-        }
-        return m_objTreeSessionStateManager;
-    }
-
-    public ComponentAddress getComponentPath() {
-        if (m_objComponentAddress == null) {
-            m_objComponentAddress = new ComponentAddress(this);
-        }
-        return m_objComponentAddress;
-    }
-
-    /**
-     * Returns the treeModel.
-     * @return ITreeModel
-     */
-    public ITreeModel getTreeModel() {
-        if (m_objTreeModel == null) {
-            extractTreeModel();
-        }
-        return m_objTreeModel;
-    }
-
-    /**
-     * Sets the treeModel.
-     * @param treeModel The treeModel to set
-     */
-    public void setTreeModel(ITreeModel treeModel) {
-        m_objTreeModel = treeModel;
-    }
-
-    /**
-     * Returns the treeSessionState.
-     * @return Object
-     */
-    public Object getTreeSessionState() {
-        return m_objTreeSessionState;
-    }
-
-    /**
-     * Sets the treeSessionState.
-     * @param treeSessionState The treeSessionState to set
-     */
-    public void setTreeSessionState(Object treeSessionState) {
-        m_objTreeSessionState = treeSessionState;
-    }
-
-    public String getSelectedNodeStyleID(){
-        return getId() + ":selected";
-    }
-    
-    /**
-	 * @see org.apache.tapestry.BaseComponent#renderComponent(org.apache.tapestry.IMarkupWriter, org.apache.tapestry.IRequestCycle)
-	 */
-	protected void renderComponent(IMarkupWriter arg0, IRequestCycle arg1) {
-		Object objExistedTreeModelSource = arg1.getAttribute(ITreeModelSource.TREE_MODEL_SOURCE_ATTRIBUTE);
-		arg1.setAttribute(ITreeModelSource.TREE_MODEL_SOURCE_ATTRIBUTE, this);
-		
-		super.renderComponent(arg0, arg1);
-		arg1.setAttribute(ITreeModelSource.TREE_MODEL_SOURCE_ATTRIBUTE, objExistedTreeModelSource);
-	}
-
-	/**
-	 * @see org.apache.tapestry.contrib.tree.model.ITreeModelSource#getTreeStateListener()
-	 */
-	public ITreeStateListener getTreeStateListener() {
-		ITreeStateListener objListener = null;
-		IBinding objBinding = getBinding("treeStateListener");
-		if(objBinding != null){
-			objListener = (ITreeStateListener) objBinding.getObject();
-		}
-		return objListener;
-	}
-
-}
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/components/TreeView.jwc b/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/components/TreeView.jwc
deleted file mode 100644
index e7f8b1e..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/components/TreeView.jwc
+++ /dev/null
@@ -1,49 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!--  $Id$ -->
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<component-specification class="org.apache.tapestry.contrib.tree.components.TreeView"
-    allow-body="yes" allow-informal-parameters="yes">
-
-    <parameter name="sessionStateManager"
-        type="org.apache.tapestry.contrib.tree.model.ITreeSessionStateManager"
-        direction="custom" required="no"/>
-
-    <parameter name="sessionStoreManager"
-        type="org.apache.tapestry.contrib.tree.model.ISessionStoreManager"
-        direction="custom" required="no"/>
-
-    <parameter name="treeModel"
-        type="org.apache.tapestry.contrib.tree.model.ITreeModel"
-        direction="custom" required="yes">
-    </parameter>
-
-    <parameter name="treeStateListener"
-        type="org.apache.tapestry.contrib.tree.model.ITreeStateListener"
-        direction="custom" required="no">
-    </parameter>
-
-    <component id="inheritInformalAny" type="InheritInformalAny">
-        <static-binding name="element">span</static-binding>
-    </component>
-
-    <component id="insertWrapped" type="RenderBody"/>
-
-</component-specification>
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/components/TreeView.script b/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/components/TreeView.script
deleted file mode 100644
index 2162e74..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/components/TreeView.script
+++ /dev/null
@@ -1,16 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE script PUBLIC "-//Howard Ship//Tapestry Script 1.1//EN"
-  "http://tapestry.sf.net/dtd/Script_1_1.dtd">
-
-<script>
- <body>
-	function select(){
-		var objNode = document.getElementById("<insert property-path="selectedNodeID"/>");
-		window.scrollTo(0, objNode.y);
-	}
-		
- </body>
-	<initialization>
-		select();
-	</initialization>
-</script>
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/components/minus.gif b/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/components/minus.gif
deleted file mode 100644
index 9c0ef5f..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/components/minus.gif
+++ /dev/null
Binary files differ
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/components/plus.gif b/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/components/plus.gif
deleted file mode 100644
index 07364bf..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/components/plus.gif
+++ /dev/null
Binary files differ
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/components/table/TreeTable.html b/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/components/table/TreeTable.html
deleted file mode 100644
index 60f27d6..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/components/table/TreeTable.html
+++ /dev/null
@@ -1,5 +0,0 @@
-<span jwcid="$content$">
-	<span class="tree" jwcid="treeView">
-		<span jwcid="treeTableDataView"/>
-	</span>		
-</span>		
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/components/table/TreeTable.java b/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/components/table/TreeTable.java
deleted file mode 100644
index c6176d6..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/components/table/TreeTable.java
+++ /dev/null
@@ -1,63 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.tree.components.table;
-
-import org.apache.tapestry.BaseComponent;
-import org.apache.tapestry.contrib.tree.components.ITreeComponent;
-import org.apache.tapestry.contrib.tree.components.TreeView;
-import org.apache.tapestry.contrib.tree.model.ITreeModelSource;
-import org.apache.tapestry.contrib.tree.model.ITreeRowSource;
-import org.apache.tapestry.util.ComponentAddress;
-
-/**
- * @author ceco
- * @version $Id$
- */
-public class TreeTable extends BaseComponent implements ITreeComponent{
-
-	/**
-	 * 
-	 */
-	public TreeTable() {
-		super();
-	}
-
-	public ITreeModelSource getTreeModelSource(){
-		return (ITreeModelSource) getComponent("treeView");
-	}
-
-	/**
-	 * @see org.apache.tapestry.contrib.tree.components.ITreeComponent#resetState()
-	 */
-	public void resetState() {
-		TreeView objTreeView = (TreeView)getComponent("treeView");
-		objTreeView.resetState();
-	}
-
-	/**
-	 * @see org.apache.tapestry.contrib.tree.components.ITreeComponent#getComponentPath()
-	 */
-	public ComponentAddress getComponentPath() {
-		return new ComponentAddress(this);
-	}
-
-	/**
-	 * @see org.apache.tapestry.contrib.tree.components.ITreeComponent#getTreeRowSource()
-	 */
-	public ITreeRowSource getTreeRowSource() {
-		TreeTableDataView objTreeDataView = (TreeTableDataView)getComponent("treeTableDataView");
-		return objTreeDataView;
-	}
-}
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/components/table/TreeTable.jwc b/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/components/table/TreeTable.jwc
deleted file mode 100644
index 08b4285..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/components/table/TreeTable.jwc
+++ /dev/null
@@ -1,70 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!--  $Id$ -->
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<component-specification class="org.apache.tapestry.contrib.tree.components.table.TreeTable"
-    allow-body="yes" allow-informal-parameters="yes">
-
-    <parameter name="sessionStateManager"
-        type="org.apache.tapestry.contrib.tree.model.ITreeSessionStateManager"
-        direction="custom" required="no"/>
-
-    <parameter name="sessionStoreManager"
-        type="org.apache.tapestry.contrib.tree.model.ISessionStoreManager"
-        direction="custom" required="no"/>
-
-    <parameter name="treeModel"
-        type="org.apache.tapestry.contrib.tree.model.ITreeModel"
-        direction="custom" required="yes">
-    </parameter>
-
-    <parameter name="treeStateListener"
-        type="org.apache.tapestry.contrib.tree.model.ITreeStateListener"
-        direction="custom" required="no">
-    </parameter>
-
-	<parameter name="entriesPerTablePage" 
-		type="int" 
-		required="no"
-		direction="custom"/>
-
-    <parameter name="nodeViewComponentAddress"
-               type="org.apache.tapestry.util.ComponentAddress"
-               required="no" direction="custom"/>
-
-    <parameter name="tableColunms"
-               type="java.util.ArrayList"
-               required="no" direction="custom"/>
-
-    <component id="treeView" type="TreeView">
-        <inherited-binding name="sessionStateManager" parameter-name="sessionStateManager"/>
-        <inherited-binding name="sessionStoreManager" parameter-name="sessionStoreManager"/>
-        <inherited-binding name="treeModel" parameter-name="treeModel"/>
-        <inherited-binding name="treeStateListener" parameter-name="treeStateListener"/>
-    </component>
-
-    <component id="treeTableDataView" type="TreeTableDataView">
-        <binding name="treeView" expression='components.treeView'/>
-        <inherited-binding name="nodeViewComponentAddress" parameter-name="nodeViewComponentAddress"/>
-        <inherited-binding name="entriesPerTablePage" parameter-name="entriesPerTablePage"/>
-        <inherited-binding name="tableColunms" parameter-name="tableColunms"/>
-    </component>
-
-</component-specification>
\ No newline at end of file
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/components/table/TreeTableColumn.java b/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/components/table/TreeTableColumn.java
deleted file mode 100644
index bc90eec..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/components/table/TreeTableColumn.java
+++ /dev/null
@@ -1,45 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.tree.components.table;
-
-import org.apache.tapestry.IRender;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.contrib.table.model.ITableModelSource;
-import org.apache.tapestry.contrib.table.model.simple.SimpleTableColumn;
-import org.apache.tapestry.util.ComponentAddress;
-
-/**
- * @author ceco
- * @version $Id$
- */
-public class TreeTableColumn extends SimpleTableColumn {
-
-	/**
-	 * @param arg0
-	 * @param arg1
-	 */
-	public TreeTableColumn(String arg0, boolean arg1, ComponentAddress objComponentAddress) {
-		super(arg0, arg1);
-		setValueRendererSource(new TreeTableValueRenderSource(objComponentAddress));
-	}
-
-	/**
-	 * @see org.apache.tapestry.contrib.table.model.common.AbstractTableColumn#getValueRenderer(org.apache.tapestry.IRequestCycle, org.apache.tapestry.contrib.table.model.ITableModelSource, java.lang.Object)
-	 */
-	public IRender getValueRenderer(IRequestCycle arg0, ITableModelSource arg1, Object arg2) {
-		return super.getValueRenderer(arg0, arg1, arg2);
-	}
-
-}
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/components/table/TreeTableDataView.html b/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/components/table/TreeTableDataView.html
deleted file mode 100644
index 5efd7af..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/components/table/TreeTableDataView.html
+++ /dev/null
@@ -1,5 +0,0 @@
-<!-- generated by Spindle, http://spindle.sourceforge.net -->
-
-<span jwcid="$content$">
-	<span jwcid="table"/>
-</span>
\ No newline at end of file
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/components/table/TreeTableDataView.java b/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/components/table/TreeTableDataView.java
deleted file mode 100644
index 2c93ffd..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/components/table/TreeTableDataView.java
+++ /dev/null
@@ -1,230 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.tree.components.table;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-
-import org.apache.tapestry.BaseComponent;
-import org.apache.tapestry.IBinding;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.contrib.table.model.ITableColumn;
-import org.apache.tapestry.contrib.table.model.ITableModel;
-import org.apache.tapestry.contrib.table.model.ITableSessionStateManager;
-import org.apache.tapestry.contrib.table.model.simple.SimpleListTableDataModel;
-import org.apache.tapestry.contrib.table.model.simple.SimpleTableColumnModel;
-import org.apache.tapestry.contrib.table.model.simple.SimpleTableModel;
-import org.apache.tapestry.contrib.table.model.simple.SimpleTableSessionStateManager;
-import org.apache.tapestry.contrib.tree.model.ITreeDataModel;
-import org.apache.tapestry.contrib.tree.model.ITreeModel;
-import org.apache.tapestry.contrib.tree.model.ITreeModelSource;
-import org.apache.tapestry.contrib.tree.model.ITreeRowSource;
-import org.apache.tapestry.contrib.tree.model.TreeRowObject;
-import org.apache.tapestry.event.PageDetachListener;
-import org.apache.tapestry.event.PageEvent;
-
-/**
- * @version $Id$
- */
-public class TreeTableDataView extends BaseComponent implements ITreeRowSource, PageDetachListener{
-    private int m_nTreeDeep = -1;
-	private TreeRowObject m_objTreeRowObject = null;
-	private ArrayList m_arrAllExpandedNodes = null;
-
-    public TreeTableDataView(){
-        super();
-        initialize();
-    }
-
-    public void initialize(){
-        m_nTreeDeep = -1;
-//		m_objTableModel = null;
-		m_objTreeRowObject = null;
-		m_arrAllExpandedNodes = null;
-    }
-
-
-	/**
-	 * @see org.apache.tapestry.AbstractComponent#finishLoad()
-	 */
-	protected void finishLoad() {
-		super.finishLoad();
-		getPage().addPageDetachListener(this);
-	}
-
-	/**
-	 * @see org.apache.tapestry.event.PageDetachListener#pageDetached(org.apache.tapestry.event.PageEvent)
-	 */
-	public void pageDetached(PageEvent arg0) {
-		initialize();
-	}
-
-
-    public ITreeModelSource getTreeModelSource() {
-		ITreeModelSource objSource = (ITreeModelSource) getPage().getRequestCycle().getAttribute(ITreeModelSource.TREE_MODEL_SOURCE_ATTRIBUTE);
-    	if(objSource == null){
-			objSource = (ITreeModelSource) getBinding("treeView").getObject();
-    	}
-    	return objSource;
-    }
-
-    public ArrayList generateNodeList() {
-        if(m_arrAllExpandedNodes == null){
-	        // render data
-			ITreeModelSource objTreeModelSource = getTreeModelSource();
-	        ITreeModel objTreeModel = objTreeModelSource.getTreeModel();
-	        ITreeDataModel objTreeDataModel = objTreeModel.getTreeDataModel();
-	        Object objValue = objTreeDataModel.getRoot();
-	        Object objValueUID = objTreeDataModel.getUniqueKey(objValue, null);
-	
-	        // Object objSelectedNode = objTreeModel.getTreeStateModel().getSelectedNode();
-	        //if(objSelectedNode == null)
-	        //  objTreeModel.getTreeStateModel().expand(objValueUID);
-			ArrayList arrAllExpandedNodes = new ArrayList();
-			walkTree(arrAllExpandedNodes, objValue, objValueUID, 0, objTreeModel);
-			m_arrAllExpandedNodes = arrAllExpandedNodes;
-		}
-		
-		
-		return m_arrAllExpandedNodes;
-    }
-
-    public void walkTree(ArrayList arrAllExpandedNodes, Object objParent, Object objParentUID, int nDepth,
-                         ITreeModel objTreeModel) {
-        m_nTreeDeep = nDepth;
-
-		TreeRowObject objTreeRowObject = new TreeRowObject(objParent, objParentUID, nDepth);
-		arrAllExpandedNodes.add(objTreeRowObject);
-
-        boolean bContain = objTreeModel.getTreeStateModel().isUniqueKeyExpanded(objParentUID);
-        if (bContain) {
-			Iterator colChildren = objTreeModel.getTreeDataModel().getChildren(objParent);
-            for (Iterator iter = colChildren; iter.hasNext();) {
-                Object objChild = iter.next();
-                Object objChildUID = objTreeModel.getTreeDataModel().getUniqueKey(objChild, objParentUID);
-                walkTree(arrAllExpandedNodes, objChild, objChildUID, nDepth+1, objTreeModel);
-            }
-        }
-    }
-
-    /**
-     * Returns the treeDeep.
-     * @return int
-     */
-    public int getTreeDeep() {
-        return m_nTreeDeep;
-    }
-
-/*	public ITableModel getTableModel() {
-		if(m_objTableModel == null){
-			m_objTableModel = createTableModel();
-		}
-		return m_objTableModel;
-	}
-*/
-	public ITableModel getTableModel() {
-		return createTableModel();
-	}
-
-	private ITableModel createTableModel(){
-		ArrayList arrAllNodes = generateNodeList();
-		Object[] arrAllExpandedNodes = new Object[arrAllNodes.size()];
-		arrAllNodes.toArray(arrAllExpandedNodes);
-
-		
-		SimpleTableModel objTableModel = new SimpleTableModel(arrAllExpandedNodes, getTableColunms());
-		objTableModel.getPagingState().setPageSize(getEntriesPerTablePage());		
-		
-		return objTableModel;
-	}
-
-	public ITableColumn[] getTableColunms(){
-		ArrayList arrColumnsList = new ArrayList();
-		arrColumnsList.add(new TreeTableColumn ("Name", false, null)); 
-
-		ArrayList arrTableColunms = getTableColunmsFromBinding();
-		if(arrTableColunms != null)
-			arrColumnsList.addAll(arrTableColunms);
-		
-		ITableColumn[] arrColumns = new ITableColumn[arrColumnsList.size()];
-		arrColumnsList.toArray(arrColumns);
-
-		return arrColumns;
-	}
-
-	public ArrayList getTableColunmsFromBinding(){
-		IBinding objBinding = getBinding("tableColunms");
-		if(objBinding != null)
-			return (ArrayList)objBinding.getObject();
-		return null;
-	}
-	
-	public int getEntriesPerTablePage(){
-		IBinding objBinding = getBinding("entriesPerTablePage");
-		if(objBinding != null)
-			return objBinding.getInt();
-		return 50;
-	}
-
-	/**
-	 * @see org.apache.tapestry.contrib.tree.model.ITreeRowSource#getTreeRow()
-	 */
-	public TreeRowObject getTreeRow() {
-		return getTreeRowObject();
-	}
-
-	public ITableSessionStateManager getTableSessionStateManager(){
-		SimpleListTableDataModel objDataModel = new SimpleListTableDataModel(generateNodeList());
-		SimpleTableColumnModel objColumnModel = new SimpleTableColumnModel(getTableColunms());
-		SimpleTableSessionStateManager objStateManager = new SimpleTableSessionStateManager(objDataModel, objColumnModel);
-		return objStateManager;
-		//return NullTableSessionStateManager.NULL_STATE_MANAGER;
-	}
-
-	/**
-	 * @see org.apache.tapestry.BaseComponent#renderComponent(org.apache.tapestry.IMarkupWriter, org.apache.tapestry.IRequestCycle)
-	 */
-	protected void renderComponent(IMarkupWriter arg0, IRequestCycle cycle) {
-		Object objExistedTreeModelSource = cycle.getAttribute(ITreeRowSource.TREE_ROW_SOURCE_ATTRIBUTE);
-		cycle.setAttribute(ITreeRowSource.TREE_ROW_SOURCE_ATTRIBUTE, this);
-
-		super.renderComponent(arg0, cycle);
-
-		cycle.setAttribute(ITreeRowSource.TREE_ROW_SOURCE_ATTRIBUTE, objExistedTreeModelSource);
-	}
-
-	/**
-	 * @see org.apache.tapestry.AbstractComponent#renderBody(org.apache.tapestry.IMarkupWriter, org.apache.tapestry.IRequestCycle)
-	 */
-	public void renderBody(IMarkupWriter arg0, IRequestCycle cycle) {
-		Object objExistedTreeModelSource = cycle.getAttribute(ITreeRowSource.TREE_ROW_SOURCE_ATTRIBUTE);
-		cycle.setAttribute(ITreeRowSource.TREE_ROW_SOURCE_ATTRIBUTE, this);
-
-		super.renderBody(arg0, cycle);
-
-		cycle.setAttribute(ITreeRowSource.TREE_ROW_SOURCE_ATTRIBUTE, objExistedTreeModelSource);
-	}
-
-
-	public TreeRowObject getTreeRowObject() {
-		return m_objTreeRowObject;
-	}
-
-	public void setTreeRowObject(TreeRowObject object) {
-		m_objTreeRowObject = object;
-	}
-
-}
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/components/table/TreeTableDataView.jwc b/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/components/table/TreeTableDataView.jwc
deleted file mode 100644
index 41d2e20..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/components/table/TreeTableDataView.jwc
+++ /dev/null
@@ -1,51 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!--  $Id$ -->
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<component-specification class="org.apache.tapestry.contrib.tree.components.table.TreeTableDataView"
-    allow-body="yes" allow-informal-parameters="yes">
-
-    <parameter name="treeView"
-               type="org.apache.tapestry.contrib.tree.components.TreeView"
-               required="no" direction="custom"/>
-
-    <parameter name="nodeViewComponentAddress"
-               type="org.apache.tapestry.util.ComponentAddress"
-               required="no" direction="custom"/>
-
-	<parameter name="entriesPerTablePage" 
-		type="int" 
-		required="no"
-		direction="custom"/>
-
-    <parameter name="tableColunms"
-               type="java.util.ArrayList"
-               required="no" direction="custom"/>
-
-    <bean name="tableClass" class="org.apache.tapestry.bean.EvenOdd" lifecycle="request"/>
-
-	<component id="table" type="Table">
-		<binding name="tableModel" expression="tableModel"/>
-		<binding name="tableSessionStateManager" expression="tableSessionStateManager"/>
-		<binding name="row" expression="treeRowObject"/>
-        <binding name="rowsClass" expression='beans.tableClass.next'/>
-	</component>
-
-</component-specification>
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/components/table/TreeTableNodeViewDelegator.html b/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/components/table/TreeTableNodeViewDelegator.html
deleted file mode 100644
index f868b5a..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/components/table/TreeTableNodeViewDelegator.html
+++ /dev/null
@@ -1,3 +0,0 @@
-<span jwcid="$content$">
-	<span jwcid="treeNodeView"/>
-</span>		
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/components/table/TreeTableNodeViewDelegator.java b/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/components/table/TreeTableNodeViewDelegator.java
deleted file mode 100644
index e38e50c..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/components/table/TreeTableNodeViewDelegator.java
+++ /dev/null
@@ -1,46 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.tree.components.table;
-
-import org.apache.tapestry.BaseComponent;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.contrib.table.model.ITableColumn;
-import org.apache.tapestry.contrib.table.model.ITableModelSource;
-import org.apache.tapestry.contrib.table.model.ITableRendererListener;
-
-/**
- * @author ceco
- * @version $Id$
- */
-public class TreeTableNodeViewDelegator extends BaseComponent implements ITableRendererListener{
-
-	/**
-	 * 
-	 */
-	public TreeTableNodeViewDelegator() {
-		super();
-	}
-
-	/**
-	 * @see org.apache.tapestry.contrib.table.model.ITableRendererListener#initializeRenderer(org.apache.tapestry.IRequestCycle, org.apache.tapestry.contrib.table.model.ITableModelSource, org.apache.tapestry.contrib.table.model.ITableColumn, java.lang.Object)
-	 */
-	public void initializeRenderer(
-		IRequestCycle arg0,
-		ITableModelSource arg1,
-		ITableColumn arg2,
-		Object arg3) {
-	}
-
-}
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/components/table/TreeTableNodeViewDelegator.jwc b/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/components/table/TreeTableNodeViewDelegator.jwc
deleted file mode 100644
index eb55db7..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/components/table/TreeTableNodeViewDelegator.jwc
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!--  $Id$ -->
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<component-specification class="org.apache.tapestry.contrib.tree.components.table.TreeTableNodeViewDelegator"
-    allow-body="yes" allow-informal-parameters="yes">
-
-     <component id="treeNodeView" type="TreeNodeView">
-    </component>
-
-</component-specification>
\ No newline at end of file
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/components/table/TreeTableNodeViewPage.html b/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/components/table/TreeTableNodeViewPage.html
deleted file mode 100644
index e554dea..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/components/table/TreeTableNodeViewPage.html
+++ /dev/null
@@ -1,5 +0,0 @@
-<!-- generated by Spindle, http://spindle.sourceforge.net -->
-
-<span jwcid="$content$">
-	<span jwcid="treeTableNodeViewDelegator"/>
-</span>
\ No newline at end of file
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/components/table/TreeTableNodeViewPage.page b/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/components/table/TreeTableNodeViewPage.page
deleted file mode 100644
index 855e862..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/components/table/TreeTableNodeViewPage.page
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0"?>
-<!--
-    Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- Forms.page,v 1.1 2002/08/23 22:18:31 hship Exp -->
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<page-specification>
-
-    <component id="treeTableNodeViewDelegator" type="TreeTableNodeViewDelegator">
-    </component>
-
-</page-specification>
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/components/table/TreeTableValueRenderSource.java b/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/components/table/TreeTableValueRenderSource.java
deleted file mode 100644
index 2057138..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/components/table/TreeTableValueRenderSource.java
+++ /dev/null
@@ -1,76 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.tree.components.table;
-
-import org.apache.tapestry.IRender;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.contrib.table.model.ITableColumn;
-import org.apache.tapestry.contrib.table.model.ITableModelSource;
-import org.apache.tapestry.contrib.table.model.ITableRendererSource;
-import org.apache.tapestry.contrib.table.model.common.ComponentTableRendererSource;
-import org.apache.tapestry.util.ComponentAddress;
-
-/**
- * @author ceco
- * @version $Id$
- */
-public class TreeTableValueRenderSource implements ITableRendererSource
-{
-
-	private ComponentTableRendererSource m_objComponentRenderer;
-	private ComponentAddress m_objComponentAddress = null;
-
-	public TreeTableValueRenderSource()
-	{
-		m_objComponentRenderer = null;
-	}
-
-	public TreeTableValueRenderSource(ComponentAddress objComponentAddress)
-	{
-		m_objComponentAddress = objComponentAddress;
-	}
-
-	/**
-	 * @see org.apache.tapestry.contrib.table.model.ITableRendererSource#getRenderer(IRequestCycle, ITableModelSource, ITableColumn, Object)
-	 */
-	public IRender getRenderer(
-		IRequestCycle objCycle,
-		ITableModelSource objSource,
-		ITableColumn objColumn,
-		Object objRow)
-	{
-			synchronized (this)
-			{
-				if (m_objComponentRenderer == null)
-				{
-					
-					ComponentAddress objAddress = m_objComponentAddress;
-					if(m_objComponentAddress == null)
-						objAddress = new ComponentAddress(
-							"contrib:TreeTableNodeViewPage",
-							"treeTableNodeViewDelegator");
-					m_objComponentRenderer =
-						new ComponentTableRendererSource(objAddress);
-				}
-			}
-
-		return m_objComponentRenderer.getRenderer(
-			objCycle,
-			objSource,
-			objColumn,
-			objRow);
-	}
-
-}
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/model/IMutableTreeNode.java b/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/model/IMutableTreeNode.java
deleted file mode 100644
index d27eef6..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/model/IMutableTreeNode.java
+++ /dev/null
@@ -1,54 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.tree.model;
-
-import java.util.Collection;
-
-/**
- * Defines the requirements for a tree node object that can change --
- * by adding or removing child nodes, or by changing the contents
- * of a user object stored in the node.
- *
- * @see javax.swing.tree.DefaultMutableTreeNode
- * @see javax.swing.JTree
- *
- * @author ceco
- * @version $Id$
- */
-
-public interface IMutableTreeNode extends ITreeNode
-{
-    /**
-     * Adds collection of<code>children</code> to the receiver.
-     * <code>Child</code> will be messaged with <code>setParent</code>.
-     */
-    void insert(Collection colChildren);
-
-    /**
-     * Removes <code>node</code> from the receiver. <code>setParent</code>
-     * will be messaged on <code>node</code>.
-     */
-    void remove(IMutableTreeNode node);
-
-    /**
-     * Removes the receiver from its parent.
-     */
-    void removeFromParent();
-
-    /**
-     * Sets the parent of the receiver to <code>newParent</code>.
-     */
-    void setParent(IMutableTreeNode newParent);
-}
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/model/ISessionStoreManager.java b/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/model/ISessionStoreManager.java
deleted file mode 100644
index fb5644d..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/model/ISessionStoreManager.java
+++ /dev/null
@@ -1,27 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.tree.model;
-
-import org.apache.tapestry.IPage;
-
-/**
- * @author ceco
- * @version $Id$
- */
-
-public interface ISessionStoreManager {
-	Object getSessionState(IPage objPage, String strSessionStateID);
-	Object setSessionState(IPage objPage, String strSessionStateID, Object objSessionState);
-}
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/model/ITreeDataModel.java b/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/model/ITreeDataModel.java
deleted file mode 100644
index 9522eb0..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/model/ITreeDataModel.java
+++ /dev/null
@@ -1,73 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.tree.model;
-
-import java.util.Iterator;
-
-/**
- * The interface that defines a suitable data model for a <code>TreeView component</code>. 
- * 
- * @author ceco
- * @version $Id$
- */
-public interface ITreeDataModel
-{
-	/**
-	 * Returns the root node of the tree
-	 */
-	Object getRoot();
-
-	/**
-	 * Returns the number of children of parent node.
-	 * @param objParent is the parent object whose nr of children are sought
-	 */
-	int getChildCount(Object objParent);
-
-	/**
-	 * Get an iterator to the Collection of children belonging to the parent node object
-	 * @param objParent is the parent object whose children are requested
-	 */
-	Iterator getChildren(Object objParent);
-
-	/**
-	 * Get the actual node object based on some identifier (for example an UUID)
-	 * @param objUniqueKey is the unique identifier of the node object being retrieved
-	 * @return the instance of the node object identified by the key
-	 */
-	Object getObject(Object objUniqueKey);
-
-	/** 
-	 * Get the unique identifier (UUID) of the node object with a certain parent node
-	 * @param objTarget is the Object whose identifier is required
-	 * @param objParentUniqueKey is the unique id of the parent of objTarget
-	 * @return the unique identifier of objTarget
-	 */
-	Object getUniqueKey(Object objTarget, Object objParentUniqueKey);
-
-	/**
-	 * Get the unique identifier of the parent of an object
-	 * @param objChildUniqueKey is the identifier of the Object for which the parent identifier is sought
-	 * @return the identifier (possibly UUID) of the parent of objChildUniqueKey
-	 */
-	Object getParentUniqueKey(Object objChildUniqueKey);
-
-	/**
-	 * Check to see (on the basis of some node object identifier) whether the parent node is indeed the parent of the object
-	 * @param objChildUniqueKey is the identifier of the object whose parent is being checked
-	 * @param objParentUniqueKey is the identifier of the parent which is to be checked against
-	 */
-	boolean isAncestorOf(Object objChildUniqueKey, Object objParentUniqueKey);
-	
-}
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/model/ITreeModel.java b/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/model/ITreeModel.java
deleted file mode 100644
index 04902ce..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/model/ITreeModel.java
+++ /dev/null
@@ -1,24 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.tree.model;
-
-/**
- * @author ceco
- * @version $Id$
- */
-public interface ITreeModel {
-	ITreeDataModel getTreeDataModel();
-	ITreeStateModel getTreeStateModel();
-}
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/model/ITreeModelSource.java b/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/model/ITreeModelSource.java
deleted file mode 100644
index 75c751d..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/model/ITreeModelSource.java
+++ /dev/null
@@ -1,30 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.tree.model;
-
-import org.apache.tapestry.IComponent;
-
-/**
- * @author ceco
- * @version $Id$
- */
-public interface ITreeModelSource extends IComponent
-{
-    final static String TREE_MODEL_SOURCE_ATTRIBUTE = "org.apache.tapestry.contrib.tree.model.ITreeModelSource";
-
-	ITreeModel getTreeModel();
-	ITreeStateListener getTreeStateListener();
-
-}
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/model/ITreeNode.java b/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/model/ITreeNode.java
deleted file mode 100644
index 7e08fda..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/model/ITreeNode.java
+++ /dev/null
@@ -1,59 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.tree.model;
-
-import java.io.Serializable;
-import java.util.Collection;
-
-/**
- * @author ceco
- * @version $Id$
- */
-
-public interface ITreeNode extends Serializable
-{
-	
-    /**
-     * Returns the <code>Collection</code> of children. 
-     */
-    Collection getChildren();
-
-    /**
-     * Returns the number of children <code>ITreeNode</code>s the receiver
-     * contains.
-     */
-    int getChildCount();
-
-    /**
-     * Returns the parent <code>ITreeNode</code> of the receiver.
-     */
-    ITreeNode getParent();
-
-    /**
-     * Returns the true if current node contains received children, otherwise return false;
-     */
-    boolean containsChild(ITreeNode node);
-
-    /**
-     * Returns true if the receiver allows children.
-     */
-    boolean getAllowsChildren();
-
-    /**
-     * Returns true if the receiver is a leaf.
-     */
-    boolean isLeaf();
-
-}
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/model/ITreeNodeManager.java b/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/model/ITreeNodeManager.java
deleted file mode 100644
index dbd03d8..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/model/ITreeNodeManager.java
+++ /dev/null
@@ -1,26 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.tree.model;
-
-import org.apache.tapestry.IRender;
-import org.apache.tapestry.contrib.tree.components.ITreeComponent;
-
-/**
- * @author ceco
- * @version $Id$
- */
-public interface ITreeNodeManager {
-	IRender getRenderer(Object objUniqueKey, ITreeComponent objTreeComponent);
-}
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/model/ITreeRowSource.java b/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/model/ITreeRowSource.java
deleted file mode 100644
index 5f2ff40..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/model/ITreeRowSource.java
+++ /dev/null
@@ -1,36 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.tree.model;
-
-/**
- * A Tapestry component that provides the current row value.
- * This interface is used for obtaining the row source by components 
- * wrapped by the row source
- * 
- * @version $Id$
- * @author tsvetelin
- */
-public interface ITreeRowSource
-{
-    final static String TREE_ROW_SOURCE_ATTRIBUTE = "org.apache.tapestry.contrib.tree.model.ITreeRowSource";
-
-	/**
-	 * Method getTreeRow
-	 * @return Object the current tree row object.
-	 */
-	TreeRowObject getTreeRow();
-	//Object getTreeRowNodeUID();
-	//int getTreeNodeDeep();
-}
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/model/ITreeSessionStateManager.java b/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/model/ITreeSessionStateManager.java
deleted file mode 100644
index 00dbfa2..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/model/ITreeSessionStateManager.java
+++ /dev/null
@@ -1,26 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.tree.model;
-
-
-
-/**
- * @author ceco
- * @version $Id$
- */
-public interface ITreeSessionStateManager {
-	Object getSessionState(ITreeModel objModel);
-	ITreeModel getModel(Object objSessionState);	
-}
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/model/ITreeStateListener.java b/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/model/ITreeStateListener.java
deleted file mode 100644
index cddf084..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/model/ITreeStateListener.java
+++ /dev/null
@@ -1,23 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.tree.model;
-
-/**
- * @author ceco
- * @version $Id$
- */
-public interface ITreeStateListener {
-	void treeStateChanged(TreeStateEvent objEvent);
-}
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/model/ITreeStateModel.java b/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/model/ITreeStateModel.java
deleted file mode 100644
index 9286946..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/model/ITreeStateModel.java
+++ /dev/null
@@ -1,39 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.tree.model;
-
-import java.util.Set;
-
-/**
- * @author ceco
- * @version $Id$
- */
-
-public interface ITreeStateModel {
-	Set getExpandSelection();
-	/*
-	 * Return the selected node unique key
-	 */
-	Object getSelectedNode();
-
-	void expand(Object objUniqueKey);
-	void expandPath(Object objUniqueKey);
-	void collapse(Object objUniqueKey);
-	void collapsePath(Object objUniqueKey);
-
-	boolean isUniqueKeyExpanded(Object objUniqueKey);
-	
-	void resetState();
-}
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/model/TreeRowObject.java b/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/model/TreeRowObject.java
deleted file mode 100644
index 697c3f8..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/model/TreeRowObject.java
+++ /dev/null
@@ -1,45 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.tree.model;
-
-/**
- * @author ceco
- * @version $Id$
- */
-public class TreeRowObject {
-	private Object m_objTreeNode = null;
-	private Object m_objTreeNodeUID = null;
-	private int m_nTreeRowDepth;
-
-	public TreeRowObject(Object objTreeNode, Object objTreeNodeUID, int nTreeRowDepth) {
-		super();
-		m_objTreeNode = objTreeNode;
-		m_objTreeNodeUID = objTreeNodeUID;
-		m_nTreeRowDepth = nTreeRowDepth;
-	}
-
-	public Object getTreeNode() {
-		return m_objTreeNode;
-	}
-
-	public Object getTreeNodeUID() {
-		return m_objTreeNodeUID;
-	}
-
-	public int getTreeRowDepth() {
-		return m_nTreeRowDepth;
-	}
-
-}
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/model/TreeStateEvent.java b/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/model/TreeStateEvent.java
deleted file mode 100644
index 86af620..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/model/TreeStateEvent.java
+++ /dev/null
@@ -1,59 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.tree.model;
-
-/**
- * @author ceco
- * @version $Id$
- */
-public class TreeStateEvent {
-	public static final int SELECTED_NODE_CHANGED 	= 1;
-	public static final int NODE_EXPANDED 			= 2;
-	public static final int NODE_COLLAPSED 			= 4;
-	
-	private int m_nEventType;
-	private transient ITreeStateModel m_objTreeStateModel = null;
-	private transient Object m_objNodeUID = null;
-
-	/**
-	 * Constructor for TreeStateEvent.
-	 */
-	public TreeStateEvent(int nEventType, Object objNodeUID, ITreeStateModel objTreeStateModel) {
-		super();
-		m_nEventType = nEventType;
-		m_objNodeUID = objNodeUID;
-		m_objTreeStateModel = objTreeStateModel;
-	}
-
-	/**
-	 * Returns the EventType.
-	 * @return int
-	 */
-	public int getEventType() {
-		return m_nEventType;
-	}
-
-    public boolean isEvent(int nEventType){
-		return (getEventType() & nEventType) > 0;
-	}
-
-	public Object getNodeUID() {
-		return m_objNodeUID;
-	}
-
-	public ITreeStateModel getTreeStateModel() {
-		return m_objTreeStateModel;
-	}
-}
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/simple/FullTreeSessionStateManager.java b/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/simple/FullTreeSessionStateManager.java
deleted file mode 100644
index 14771df..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/simple/FullTreeSessionStateManager.java
+++ /dev/null
@@ -1,47 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.tree.simple;
-
-import org.apache.tapestry.contrib.tree.model.ITreeModel;
-import org.apache.tapestry.contrib.tree.model.ITreeSessionStateManager;
-
-/**
- * @author ceco
- * @version $Id$
- */
-public class FullTreeSessionStateManager implements ITreeSessionStateManager {
-
-	/**
-	 * Constructor for FullTreeSessionStateManager.
-	 */
-	public FullTreeSessionStateManager() {
-		super();
-	}
-
-	/**
-	 * @see org.apache.tapestry.contrib.tree.model.ITreeSessionStateManager#getSessionState(ITreeModel)
-	 */
-	public Object getSessionState(ITreeModel objModel) {
-		return objModel;
-	}
-
-	/**
-	 * @see org.apache.tapestry.contrib.tree.model.ITreeSessionStateManager#getModel(Object)
-	 */
-	public ITreeModel getModel(Object objSessionState) {
-		return (ITreeModel)objSessionState;
-	}
-
-}
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/simple/NullSessionStateManager.java b/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/simple/NullSessionStateManager.java
deleted file mode 100644
index 2294228..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/simple/NullSessionStateManager.java
+++ /dev/null
@@ -1,47 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.tree.simple;
-
-import org.apache.tapestry.contrib.tree.model.ITreeModel;
-import org.apache.tapestry.contrib.tree.model.ITreeSessionStateManager;
-
-/**
- * @author ceco
- * @version $Id$
- */
-public class NullSessionStateManager implements ITreeSessionStateManager {
-
-	/**
-	 * Constructor for NullSessionStateManager.
-	 */
-	public NullSessionStateManager() {
-		super();
-	}
-
-	/**
-	 * @see org.apache.tapestry.contrib.tree.model.ITreeSessionStateManager#getSessionState(ITreeModel)
-	 */
-	public Object getSessionState(ITreeModel objModel) {
-		return null;
-	}
-
-	/**
-	 * @see org.apache.tapestry.contrib.tree.model.ITreeSessionStateManager#getModel(Object)
-	 */
-	public ITreeModel getModel(Object objSessionState) {
-		return null;
-	}
-
-}
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/simple/SimpleNodeRenderFactory.java b/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/simple/SimpleNodeRenderFactory.java
deleted file mode 100644
index 4696bda..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/simple/SimpleNodeRenderFactory.java
+++ /dev/null
@@ -1,55 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.tree.simple;
-
-import org.apache.tapestry.IRender;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.contrib.tree.components.INodeRenderFactory;
-import org.apache.tapestry.contrib.tree.model.ITreeModelSource;
-import org.apache.tapestry.valid.RenderString;
-
-/**
- * @author ceco
- * @version $Id$
- */
-public class SimpleNodeRenderFactory implements INodeRenderFactory {
-
-	/**
-	 * Constructor for SimpleNodeRenderFactory.
-	 */
-	public SimpleNodeRenderFactory() {
-		super();
-	}
-
-	/**
-	 * @see INodeRenderFactory#getRender
-	 */
-	public IRender getRenderByID(
-		Object objUniqueKey,
-		ITreeModelSource objTreeModelSource,
-		IRequestCycle cycle)
-	{
-		Object objValue = objTreeModelSource.getTreeModel().getTreeDataModel().getObject(objUniqueKey);
-		return getRender(objValue, objTreeModelSource, cycle);
-	}
-
-	/**
-	 * @see INodeRenderFactory#getRender
-	 */
-	public IRender getRender(Object objValue, ITreeModelSource objTreeModelSource, IRequestCycle objCycle) {
-		return new RenderString(objValue.toString());
-	}
-
-}
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/simple/SimpleSessionStateManager.java b/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/simple/SimpleSessionStateManager.java
deleted file mode 100644
index c7f8ee5..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/simple/SimpleSessionStateManager.java
+++ /dev/null
@@ -1,47 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.tree.simple;
-
-import org.apache.tapestry.contrib.tree.model.ITreeModel;
-import org.apache.tapestry.contrib.tree.model.ITreeSessionStateManager;
-
-/**
- * @author ceco
- * @version $Id$
- */
-public class SimpleSessionStateManager implements ITreeSessionStateManager {
-
-	/**
-	 * Constructor for SimpleSessionStateManager.
-	 */
-	public SimpleSessionStateManager() {
-		super();
-	}
-
-	/**
-	 * @see ITreeSessionStateManager#getSessionState(ITreeModel)
-	 */
-	public Object getSessionState(ITreeModel objModel) {
-		return objModel;
-	}
-
-	/**
-	 * @see ITreeSessionStateManager#getModel(Object)
-	 */
-	public ITreeModel getModel(Object objSessionState) {
-		return (ITreeModel)objSessionState;
-	}
-
-}
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/simple/SimpleTreeDataModel.java b/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/simple/SimpleTreeDataModel.java
deleted file mode 100644
index 71678c7..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/simple/SimpleTreeDataModel.java
+++ /dev/null
@@ -1,110 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.tree.simple;
-
-import java.io.Serializable;
-import java.util.Iterator;
-
-import javax.swing.tree.TreePath;
-
-import org.apache.tapestry.contrib.tree.model.ITreeDataModel;
-import org.apache.tapestry.contrib.tree.model.ITreeNode;
-
-/**
- * @author ceco
- * @version $Id$
- */
-public class SimpleTreeDataModel implements ITreeDataModel, Serializable {
-
-	protected ITreeNode m_objRootNode;
-	/**
-	 * Constructor for SimpleTreeDataModel.
-	 */
-	public SimpleTreeDataModel(ITreeNode objRootNode) {
-		super();
-		m_objRootNode = objRootNode;
-	}
-
-	/**
-	 * @see org.apache.tapestry.contrib.tree.model.ITreeDataModel#getRoot()
-	 */
-	public Object getRoot() {
-		return m_objRootNode;
-	}
-
-	/**
-	 * @see org.apache.tapestry.contrib.tree.model.ITreeDataModel#getChildCount(Object)
-	 */
-	public int getChildCount(Object objParent) {
-		ITreeNode objParentNode = (ITreeNode)objParent;
-		
-		return objParentNode.getChildCount();
-	}
-
-	/**
-	 * @see org.apache.tapestry.contrib.tree.model.ITreeDataModel#getChildren(Object)
-	 */
-	public Iterator getChildren(Object objParent) {
-		ITreeNode objParentNode = (ITreeNode)objParent;
-		return objParentNode.getChildren().iterator();
-	}
-
-	/**
-	 * @see org.apache.tapestry.contrib.tree.model.ITreeDataModel#getObject(Object)
-	 */
-	public Object getObject(Object objUniqueKey) {
-		if(objUniqueKey != null) {
-			TreePath objPath = (TreePath)objUniqueKey;
-			return objPath.getLastPathComponent();
-		}
-		return null;
-	}
-
-	/**
-	 * @see org.apache.tapestry.contrib.tree.model.ITreeDataModel#getUniqueKey(Object, Object)
-	 */
-	public Object getUniqueKey(Object objTarget, Object objParentUniqueKey) {
-		TreePath objPath = (TreePath)objParentUniqueKey;
-		Object objTargetUID = null;
-		if(objPath != null){
-			objTargetUID = objPath.pathByAddingChild(objTarget);
-		}else{
-			objTargetUID = new TreePath(objTarget);
-		}
-		return objTargetUID;
-	}
-
-	/**
-	 * @see org.apache.tapestry.contrib.tree.model.ITreeDataModel#isAncestorOf(Object, Object)
-	 */
-	public boolean isAncestorOf(Object objTargetUniqueKey, Object objParentUniqueKey) {
-		TreePath objParentPath = (TreePath)objParentUniqueKey;
-		TreePath objTargetPath = (TreePath)objTargetUniqueKey;
-		boolean bResult = objParentPath.isDescendant(objTargetPath);
-		return bResult;
-	}
-
-	/**
-	 * @see org.apache.tapestry.contrib.tree.model.ITreeDataModel#getParentUniqueKey
-	 */
-	public Object getParentUniqueKey(Object objChildUniqueKey) {
-		TreePath objChildPath = (TreePath)objChildUniqueKey;
-		TreePath objParentPath = objChildPath.getParentPath();
-		if(objParentPath == null)
-			return null;
-		return objParentPath.getLastPathComponent();
-	}
-
-}
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/simple/SimpleTreeModel.java b/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/simple/SimpleTreeModel.java
deleted file mode 100644
index 35c51bc..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/simple/SimpleTreeModel.java
+++ /dev/null
@@ -1,58 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.tree.simple;
-
-import java.io.Serializable;
-
-import org.apache.tapestry.contrib.tree.model.ITreeDataModel;
-import org.apache.tapestry.contrib.tree.model.ITreeModel;
-import org.apache.tapestry.contrib.tree.model.ITreeStateModel;
-
-/**
- * @author ceco
- * @version $Id$
- */
-public class SimpleTreeModel implements ITreeModel, Serializable{
-
-	private ITreeDataModel m_objDataModel;
-	private ITreeStateModel m_objTreeStateModel;
-	
-	/**
-	 * Constructor for SimpleTreeModel.
-	 */
-	public SimpleTreeModel(ITreeDataModel objDataModel) {
-		this(objDataModel, new SimpleTreeStateModel());
-	}
-
-	public SimpleTreeModel(ITreeDataModel objDataModel, ITreeStateModel objTreeStateModel) {
-		super();
-		m_objDataModel = objDataModel;
-		m_objTreeStateModel = objTreeStateModel;
-	}
-	/**
-	 * @see org.apache.tapestry.contrib.tree.model.ITreeModel#getTreeDataModel()
-	 */
-	public ITreeDataModel getTreeDataModel() {
-		return m_objDataModel;
-	}
-
-	/**
-	 * @see org.apache.tapestry.contrib.tree.model.ITreeModel#getTreeStateModel()
-	 */
-	public ITreeStateModel getTreeStateModel() {
-		return m_objTreeStateModel;
-	}
-
-}
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/simple/SimpleTreeStateModel.java b/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/simple/SimpleTreeStateModel.java
deleted file mode 100644
index 88d0e8c..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/simple/SimpleTreeStateModel.java
+++ /dev/null
@@ -1,106 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.tree.simple;
-
-import java.io.Serializable;
-import java.util.HashSet;
-import java.util.Set;
-
-import org.apache.tapestry.contrib.tree.model.ITreeStateModel;
-
-/**
- * @author ceco
- * @version $Id$
- */
-public class SimpleTreeStateModel implements ITreeStateModel, Serializable{
-
-	private Set m_setExpanded;
-	private Object m_objSelectedNodeUID = null;
-	
-	/**
-	 * Constructor for SimpleTreeStateModel.
-	 */
-	public SimpleTreeStateModel() {
-		super();
-		initialize();
-	}
-	private void initialize(){
-		m_setExpanded = new HashSet();
-		m_objSelectedNodeUID = null;
-	}
-
-	/**
-	 * @see org.apache.tapestry.contrib.tree.model.ITreeStateModel#getExpandSelection()
-	 */
-	public Set getExpandSelection() {
-		return m_setExpanded;
-	}
-
-	/**
-	 * @see org.apache.tapestry.contrib.tree.model.ITreeStateModel#expand(Object)
-	 */
-	public void expand(Object objUniqueKey) {
-		m_setExpanded.add(objUniqueKey);
-		setSelectedNode(objUniqueKey);
-	}
-
-	/**
-	 * @see org.apache.tapestry.contrib.tree.model.ITreeStateModel#expandPath(Object)
-	 */
-	public void expandPath(Object objUniqueKey) {
-		m_setExpanded.add(objUniqueKey);
-		setSelectedNode(objUniqueKey);
-	}
-
-	/**
-	 * @see org.apache.tapestry.contrib.tree.model.ITreeStateModel#collapse(Object)
-	 */
-	public void collapse(Object objUniqueKey) {
-		m_setExpanded.remove(objUniqueKey);
-		setSelectedNode(objUniqueKey);
-	}
-
-	/**
-	 * @see org.apache.tapestry.contrib.tree.model.ITreeStateModel#collapsePath(Object)
-	 */
-	public void collapsePath(Object objUniqueKey) {
-		m_setExpanded.remove(objUniqueKey);
-		setSelectedNode(objUniqueKey);
-	}
-
-	/**
-	 * @see org.apache.tapestry.contrib.tree.model.ITreeStateModel#isUniqueKeyExpanded(Object)
-	 */
-	public boolean isUniqueKeyExpanded(Object objUniqueKey) {
-		return m_setExpanded.contains(objUniqueKey);
-	}
-	/**
-	 * @see org.apache.tapestry.contrib.tree.model.ITreeStateModel#getSelectedNode()
-	 */
-	public Object getSelectedNode() {
-		return m_objSelectedNodeUID;
-	}
-	private void setSelectedNode(Object objUniqueKey){
-		if(m_objSelectedNodeUID == null || !m_objSelectedNodeUID.equals(objUniqueKey))
-			m_objSelectedNodeUID = objUniqueKey;
-	}
-	/**
-	 * @see org.apache.tapestry.contrib.tree.model.ITreeStateModel#resetState()
-	 */
-	public void resetState() {
-		initialize();
-	}
-
-}
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/simple/TreeNode.java b/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/simple/TreeNode.java
deleted file mode 100644
index ba15fe6..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/tree/simple/TreeNode.java
+++ /dev/null
@@ -1,108 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.tree.simple;
-
-import java.util.Collection;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.Set;
-
-import org.apache.tapestry.contrib.tree.model.IMutableTreeNode;
-import org.apache.tapestry.contrib.tree.model.ITreeNode;
-
-/**
- * @author ceco
- * @version $Id$
- */
-public class TreeNode implements IMutableTreeNode {
-
-	protected Set m_setChildren;
-	protected IMutableTreeNode m_objParentNode;
-	
-	/**
-	 * Constructor for TreeNode.
-	 */
-	public TreeNode() {
-		this(null);
-	}
-	public TreeNode(IMutableTreeNode parentNode) {
-		super();
-		m_objParentNode = parentNode;
-		m_setChildren = new HashSet();
-	}
-
-
-	public int getChildCount() {
-		return m_setChildren.size();
-	}
-
-	public ITreeNode getParent() {
-		return m_objParentNode;
-	}
-
-	public boolean getAllowsChildren() {
-		return true;
-	}
-
-	public boolean isLeaf() {
-		return m_setChildren.size() == 0 ? true:false;
-	}
-
-	public Collection children() {
-		return m_setChildren;
-	}
-
-
-	public void insert(IMutableTreeNode child) {
-		child.setParent(this);
-		m_setChildren.add(child);
-	}
-
-	public void remove(IMutableTreeNode node) {
-		m_setChildren.remove(node);
-	}
-
-	public void removeFromParent() {
-		m_objParentNode.remove(this);
-		m_objParentNode = null;
-	}
-
-	public void setParent(IMutableTreeNode newParent) {
-		m_objParentNode = newParent;
-	}
-
-	public void insert(Collection colChildren){
-		for (Iterator iter = colChildren.iterator(); iter.hasNext();) {
-			IMutableTreeNode element = (IMutableTreeNode) iter.next();
-			element.setParent(this);
-			m_setChildren.add(element);
-		}
-	}
-
-	/**
-	 * @see org.apache.tapestry.contrib.tree.model.ITreeNode#containsChild(ITreeNode)
-	 */
-	public boolean containsChild(ITreeNode node) {
-		return m_setChildren.contains(node);
-	}
-
-	/**
-	 * @see org.apache.tapestry.contrib.tree.model.ITreeNode#getChildren()
-	 */
-	public Collection getChildren() {
-		return m_setChildren;
-	}
-
-}
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/valid/DateField.java b/3.0.4/contrib/src/org/apache/tapestry/contrib/valid/DateField.java
deleted file mode 100644
index fca6a21..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/valid/DateField.java
+++ /dev/null
@@ -1,240 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.valid;
-
-import java.text.DateFormat;
-import java.util.Date;
-
-import org.apache.tapestry.IBinding;
-import org.apache.tapestry.valid.DateValidator;
-import org.apache.tapestry.valid.IValidator;
-import org.apache.tapestry.valid.ValidField;
-
-/**
- *
- *  Backwards compatible version of the 1.0.7 DateField component.
- *
- * <table border=1>
- * <tr>
- *    <td>Parameter</td>
- *    <td>Type</td>
- *	  <td>Read / Write </td>
- *    <td>Required</td>
- *    <td>Default</td>
- *    <td>Description</td>
- * </tr>
- *
- *  <tr>
- *      <td>date</td>
- *      <td>java.util.Date</td>
- *      <td>R / W</td>
- *      <td>yes</td>
- *      <td>&nbsp;</td>
- *      <td>The date property to edit.</td>
- *  </tr>
- *
- *  <tr>
- *      <td>required</td>
- *      <td>boolean</td>
- *      <td>R</td>
- *      <td>no</td>
- *      <td>no</td>
- *      <td>If true, then a value must be entered.</td>
- *  </tr>
- *
- *  <tr>
- *      <td>minimum</td>
- *      <td>java.util.Date</td>
- *      <td>R</td>
- *      <td>no</td>
- *      <td>&nbsp;</td>
- *      <td>If provided, the date entered must be equal to or later than the
- *  provided minimum date.</td>
- *  </tr>
- *
- *  <tr>
- *      <td>maximum</td>
- *      <td>java.util.Date</td>
- *      <td>R</td>
- *      <td>no</td>
- *		<td>&nbsp;</td>
- *      <td>If provided, the date entered must be less than or equal to the
- *  provided maximum date.</td>
- * </tr>
- *
- *  <tr>
- *      <td>displayName</td>
- *      <td>String</td>
- *      <td>R</td>
- *      <td>yes</td>
- *      <td>&nbsp;</td>
- *      <td>A textual name for the field that is used when formulating error messages.
- *      </td>
- *  </tr>
- *
- *  <tr>
- *		<td>format</td>
- *		<td>{@link DateFormat}</td>
- *		<td>R</td>
- *		<td>no</td>
- *		<td>Default format <code>MM/dd/yyyy</code></td>
- *		<td>The format used to display and parse dates.</td>
- *	</tr>
- *
- *  <tr>
- *		<td>displayFormat</td>
- *		<td>{@link String}</td>
- *		<td>R</td>
- *		<td>no</td>
- *		<td><code>MM/DD/YYYY</code></td>
- *		<td>The format string presented to the user if the date entered is in an 
- *   incorrect format. e.g. the format object throws a ParseException.</td>
- *	</tr>
- *
- *  </table>
- *
- *  <p>Informal parameters are allowed.  A body is not allowed.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 1.0.8
- * 
- *  @see ValidField
- * 
- **/
-
-public abstract class DateField extends ValidField
-{
-	public abstract Date getDate();
-	public abstract void setDate(Date date);
-	
-    private IBinding minimumBinding;
-    private IBinding maximumBinding;
-    private IBinding requiredBinding;
-    private IBinding formatBinding;
-    private IBinding displayFormatBinding;
-
-
-    /**
-     *  Overrides {@link ValidField#getValidator()} to construct a validator
-     *  on-the-fly.
-     * 
-     **/
-
-    public IValidator getValidator()
-    {
-        DateValidator validator = new DateValidator();
-
-        if (minimumBinding != null)
-        {
-            Date minimum = (Date) minimumBinding.getObject("minimum", Date.class);
-            validator.setMinimum(minimum);
-        }
-
-        if (maximumBinding != null)
-        {
-            Date maximum = (Date) maximumBinding.getObject("maximum", Date.class);
-            validator.setMaximum(maximum);
-        }
-
-        if (requiredBinding != null)
-        {
-            boolean required = requiredBinding.getBoolean();
-            validator.setRequired(required);
-        }
-
-        if (formatBinding != null)
-        {
-            DateFormat format =
-                (DateFormat) formatBinding.getObject("format", DateFormat.class);
-            validator.setFormat(format);
-        }
-
-        if (displayFormatBinding != null)
-        {
-            String displayFormat =
-                (String) displayFormatBinding.getObject("displayFormat", String.class);
-            validator.setDisplayFormat(displayFormat);
-        }
-
-        return validator;
-    }
-
-    public IBinding getRequiredBinding()
-    {
-        return requiredBinding;
-    }
-
-    public void setRequiredBinding(IBinding requiredBinding)
-    {
-        this.requiredBinding = requiredBinding;
-    }
-
-    public IBinding getFormatBinding()
-    {
-        return formatBinding;
-    }
-
-    public void setFormatBinding(IBinding formatBinding)
-    {
-        this.formatBinding = formatBinding;
-    }
-    
-    public IBinding getDisplayFormatBinding()
-    {
-    	return displayFormatBinding;
-    }
-    
-    public void setDisplayFormatBinding(IBinding displayFormatBinding)
-    {
-    	this.displayFormatBinding = displayFormatBinding;
-    }
-    
-    public IBinding getMinimumBinding() {
-        return minimumBinding;
-    }
-    
-    public void setMinimumBinding(IBinding value)
-    {
-        this.minimumBinding = value;
-    }
-    
-    public IBinding getMaximumBinding()
-    {
-        return maximumBinding;
-    }
-    
-    public void setMaximumBinding(IBinding value)
-    {
-        this.maximumBinding = value;
-    }
-
-    /**
-     * @see org.apache.tapestry.valid.ValidField#getValue()
-     */
-    public Object getValue()
-    {
-        return getDate();
-    }
-
-    /**
-     * @see org.apache.tapestry.valid.ValidField#setValue(java.lang.Object)
-     */
-    public void setValue(Object value)
-    {
-        setDate((Date) value);
-    }
-
-}
\ No newline at end of file
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/valid/DateField.jwc b/3.0.4/contrib/src/org/apache/tapestry/contrib/valid/DateField.jwc
deleted file mode 100644
index d3fe179..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/valid/DateField.jwc
+++ /dev/null
@@ -1,46 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-  
-<component-specification class="org.apache.tapestry.contrib.valid.DateField">
-
-  <parameter name="disabled" type="boolean" direction="in"/>
-  <parameter name="hidden" type="boolean" direction="in"/>
-  <parameter name="displayWidth" type="int" direction="in"/>
-  <parameter name="maximumLength" type="int" direction="in"/>
-
-  <parameter name="date" type="java.util.Date" direction="auto" required="yes" />
-  <parameter name="displayName" type="java.lang.String" direction="auto" required="yes" />
-  <parameter name="maximum" type="java.util.Date" />
-  <parameter name="minimum" type="java.util.Date" />
-  <parameter name="required" />
-  <parameter name="format" type="java.text.DateFormat" />
-  <parameter name="displayFormat" type="java.lang.String" />
-    
-  <reserved-parameter name="name"/>
-  <reserved-parameter name="type"/>
-  <reserved-parameter name="value"/>
-  <reserved-parameter name="size"/>
-  <reserved-parameter name="maxlength"/>
-
-  <property-specification name="name" type="java.lang.String"/>
-  <property-specification name="form" type="org.apache.tapestry.IForm"/>
-
-</component-specification>
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/valid/NumericField.java b/3.0.4/contrib/src/org/apache/tapestry/contrib/valid/NumericField.java
deleted file mode 100644
index 2903ed9..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/valid/NumericField.java
+++ /dev/null
@@ -1,198 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.valid;
-
-import org.apache.tapestry.IBinding;
-import org.apache.tapestry.valid.IValidator;
-import org.apache.tapestry.valid.NumberValidator;
-import org.apache.tapestry.valid.ValidField;
-
-/**
- *
- * Backwards compatible version of the 1.0.7 NumericField component.
- *
- * <table border=1>
- * <tr>
- *    <td>Parameter</td>
- *    <td>Type</td>
- *	  <td>Read / Write </td>
- *    <td>Required</td>
- *    <td>Default</td>
- *    <td>Description</td>
- * </tr>
- *
- *  <tr>
- *    <td>value</td>
- *    <td>{@link Number}</td>
- *    <td>R / W</td>
- *   	<td>yes</td>
- *		<td>&nbsp;</td>
- *		<td>The value to be updated.
- *
- *  <p>When the form is submitted, this parameter is only updated if the value
- *  is valid.
- *
- *  <p>When rendering, a null value will render as the empty string.  A value
- *  of zero will render normally.
- *
- *  <p>When the form is submitted, the type of the binding
- *  is used to determine what kind of object to convert the string to.
- *
- * </td>
- *	</tr>
- *
- *  <tr>
- *      <td>minimum</td>
- *      <td>{@link Number}</td>
- *      <td>R</td>
- *      <td>no</td>
- *      <td>&nbsp;</td>
- *      <td>The minimum value accepted for the field.</td>
- *  </tr>
- *
- *  <tr>
- *      <td>maximum</td>
- *      <td>{@link Number}</td>
- *      <td>R</td>
- *      <td>no</td>
- *      <td>&nbsp;</td>
- *      <td>The maximum value accepted for the field.</td>
- * </tr>
- *
- *  <tr>
- *      <td>required</td>
- *      <td>boolean</td>
- *      <td>R</td>
- *      <td>no</td>
- *      <td>false</td>
- *      <td>If true, then a non-null value must be provided. If the field is not
- * required, and a null (all whitespace) value is supplied in the field, then the
- * value parameter is <em>not</em> updated.</td>
- *  </tr>
- *
- *  <tr>
- *      <td>displayName</td>
- *      <td>String</td>
- *      <td>R</td>
- *      <td>yes</td>
- *      <td>&nbsp;</td>
- *      <td>A textual name for the field that is used when formulating error messages.
- *      </td>
- *  </tr>
- * 
- *  <tr>
- *      <td>type</td>
- *      <td>String</td>
- *      <td>R</td>
- *      <td>yes</td>
- *      <td>&nbsp;</td>
- *      <td>The class name used to convert the value entered.  See {@link NumberValidator#setValueType(String)}
- *      </td>
- *  </tr>
- *
- *	</table>
- *
- *  <p>May not contain a body.  May have informal parameters.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 1.0.8
- *  @see ValidField
- *
- **/
-
-public abstract class NumericField extends ValidField
-{
-    private IBinding minimumBinding;
-    private IBinding maximumBinding;
-	private IBinding requiredBinding;
-	private IBinding typeBinding;
-
-	public IBinding getMinimumBinding()
-    {
-        return minimumBinding;
-    }
-
-    public void setMinimumBinding(IBinding value)
-    {
-        minimumBinding = value;
-    }
-
-    public IBinding getMaximumBinding()
-    {
-        return maximumBinding;
-    }
-
-    public void setMaximumBinding(IBinding value)
-    {
-        maximumBinding = value;
-    }
-
-	public IBinding getRequiredBinding()
-	{
-		return requiredBinding;
-	}
-
-	public void setRequiredBinding(IBinding requiredBinding)
-	{
-		this.requiredBinding = requiredBinding;
-	}
-
-	public IBinding getTypeBinding()
-	{
-		return typeBinding;
-	}
-
-	public void setTypeBinding(IBinding typeNameBinding)
-	{
-		this.typeBinding = typeNameBinding;
-	}
-
-    /**
-     * Overrides {@link ValidField#getValidator()} to construct
-     * a validator on the fly.
-     **/
-
-    public IValidator getValidator()
-    {
-        NumberValidator validator = new NumberValidator();
-
-        if (minimumBinding != null)
-        {
-            Number minimum = (Number) minimumBinding.getObject("minimum", Number.class);
-            validator.setMinimum(minimum);
-        }
-
-        if (maximumBinding != null)
-        {
-            Number maximum = (Number) maximumBinding.getObject("maximum", Number.class);
-            validator.setMaximum(maximum);
-        }
-
-        if (requiredBinding != null)
-        {
-            boolean required = requiredBinding.getBoolean();
-            validator.setRequired(required);
-        }
-
-        if (typeBinding != null)
-        {
-        	validator.setValueType(typeBinding.getString());
-        }
-        
-        return validator;
-    }
-
-}
\ No newline at end of file
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/valid/NumericField.jwc b/3.0.4/contrib/src/org/apache/tapestry/contrib/valid/NumericField.jwc
deleted file mode 100644
index f37d3fc..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/valid/NumericField.jwc
+++ /dev/null
@@ -1,41 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<component-specification class="org.apache.tapestry.contrib.valid.NumericField">
-
-  <parameter name="disabled" type="boolean" direction="in"/>
-  <parameter name="hidden" type="boolean" direction="in"/>
-  <parameter name="displayWidth" type="int" direction="in" />
-  <parameter name="maximumLength" type="int" direction="in" />
-
-  <parameter name="value" type="java.lang.Object" direction="auto" required="yes"/>
-  <parameter name="displayName" type="java.lang.String" direction="auto" required="yes"/>
-  <parameter name="maximum" type="java.lang.Number"/>
-  <parameter name="minimum" type="java.lang.Number"/>
-  <parameter name="required"/>
-  <parameter name="type" type="java.lang.String" required="yes" direction="in" />
-
-  <reserved-parameter name="name"/>
-  
-  <property-specification name="name" type="java.lang.String"/>
-  <property-specification name="form" type="org.apache.tapestry.IForm"/>
-
-</component-specification>
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/valid/ValidatingTextField.java b/3.0.4/contrib/src/org/apache/tapestry/contrib/valid/ValidatingTextField.java
deleted file mode 100644
index bb7bf86..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/valid/ValidatingTextField.java
+++ /dev/null
@@ -1,188 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.contrib.valid;
-
-import org.apache.tapestry.IBinding;
-import org.apache.tapestry.valid.IValidator;
-import org.apache.tapestry.valid.StringValidator;
-import org.apache.tapestry.valid.ValidField;
-
-/**
- *
- *  Backwards compatible version of the 1.0.7 ValidatingTextField component.
- * 
- * <table border=1>
- * <tr>
- *    <td>Parameter</td>
- *    <td>Type</td>
- *	  <td>Read / Write </td>
- *    <td>Required</td>
- *    <td>Default</td>
- *    <td>Description</td>
- * </tr>
- *
- *  <tr>
- *    <td>text</td>
- *    <td>java.lang.String</td>
- *    <td>R / W</td>
- *   	<td>yes</td>
- *		<td>&nbsp;</td>
- *		<td>The text inside the text field.
- *
- *  <p>When the form is submitted, the binding is only updated if the value
- *  is valid.</td>
- *	</tr>
- *
- *  <tr>
- *      <td>minimumLength</td>
- *      <td>int</td>
- *      <td>R</td>
- *      <td>no</td>
- *      <td>0</td>
- *      <td>The minimum length (number of characters read) for the field.  The
- *  value provided in the request is trimmed of leading and trailing whitespace.
- *
- *  <p>If a field is not required and no value is given, then minimumLength is ignored.
- *  Minimum length only applies if <em>some</em> non-null value is given.</td>
- *  </tr>
- *
- *  <tr>
- *      <td>required</td>
- *      <td>boolean</td>
- *      <td>R</td>
- *      <td>no</td>
- *      <td>false</td>
- *      <td>If true, then a non-null value must be provided.  A value consisting
- *  only of whitespace is considered null. </td>
- *  </tr>
- *
- *  <tr>
- *      <td>displayName</td>
- *      <td>String</td>
- *      <td>R</td>
- *      <td>yes</td>
- *      <td>&nbsp;</td>
- *      <td>A textual name for the field that is used when formulating error messages.
- *      </td>
- *  </tr>
- *
- *	</table>
- *
- *  <p>May not have a body.  May have informal parameters.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 1.0.8
- *  @see ValidField
- * 
- **/
-
-public abstract class ValidatingTextField extends ValidField
-{
-	private IBinding minimumLengthBinding;
-	private IBinding requiredBinding;
-	private IBinding valueBinding;
-
-	/* (non-Javadoc)
-	 * @see org.apache.tapestry.valid.ValidField#getValue()
-	 */
-	public Object getValue()
-	{
-		if (getTextBinding() != null)
-		{
-			return getTextBinding().getObject();
-		}
-		return null;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.apache.tapestry.valid.ValidField#setValue(java.lang.Object)
-	 */
-	public void setValue(Object value)
-	{
-		if(getTextBinding() != null) {
-			getTextBinding().setObject(value);
-		}			
-		// otherwise do nothing, we have nowhere to bind the value to
-	}
-
-	public IBinding getValueBinding()
-	{
-		return valueBinding;
-	}
-
-	public void setValueBinding(IBinding binding)
-	{
-		valueBinding = binding;
-	}
-
-	/** Returns the valueBinding. **/
-	public IBinding getTextBinding()
-	{
-		return getValueBinding();
-	}
-
-	/** Updates valueBinding. **/
-	public void setTextBinding(IBinding value)
-	{
-		setValueBinding(value);
-	}
-
-	public IBinding getMinimumLengthBinding()
-	{
-		return minimumLengthBinding;
-	}
-
-	public void setMinimumLengthBinding(IBinding value)
-	{
-		minimumLengthBinding = value;
-	}
-
-	public IBinding getRequiredBinding()
-	{
-		return requiredBinding;
-	}
-
-	public void setRequiredBinding(IBinding requiredBinding)
-	{
-		this.requiredBinding = requiredBinding;
-	}
-
-	/**
-	 * Overrides {@link ValidField#getValidator()} to construct
-	 * a validator on the fly.
-	 * 
-	 **/
-	public IValidator getValidator()
-	{
-		StringValidator validator = new StringValidator();
-
-		if (requiredBinding != null)
-		{
-			boolean required = requiredBinding.getBoolean();
-
-			validator.setRequired(required);
-		}
-
-		if (minimumLengthBinding != null)
-		{
-			int minimumLength = minimumLengthBinding.getInt();
-
-			validator.setMinimumLength(minimumLength);
-		}
-
-		return validator;
-	}
-}
\ No newline at end of file
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/valid/ValidatingTextField.jwc b/3.0.4/contrib/src/org/apache/tapestry/contrib/valid/ValidatingTextField.jwc
deleted file mode 100644
index b6dce0a..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/valid/ValidatingTextField.jwc
+++ /dev/null
@@ -1,40 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-  
-<component-specification class="org.apache.tapestry.contrib.valid.ValidatingTextField" allow-body="no">
-
-  <parameter name="disabled" type="boolean" direction="in"/>  
-  <parameter name="hidden" type="boolean" direction="in"/>
-  <parameter name="displayWidth" type="int" direction="in"/>
-  <parameter name="maximumLength" type="int" direction="in"/>
-
-  <parameter name="text" type="java.lang.String" required="yes" direction="custom"/>
-  <parameter name="displayName" type="java.lang.String" required="yes" direction="auto" />
-  <parameter name="minimumLength" type="java.lang.Integer" direction="custom" />
-  <parameter name="required" direction="custom" />
- 
-  <reserved-parameter name="type"/>
-  <reserved-parameter name="value"/>
-  
-  <property-specification name="name" type="java.lang.String"/>
-  <property-specification name="form" type="org.apache.tapestry.IForm"/>
-
-</component-specification>
diff --git a/3.0.4/contrib/src/org/apache/tapestry/contrib/valid/package.html b/3.0.4/contrib/src/org/apache/tapestry/contrib/valid/package.html
deleted file mode 100644
index c01ca74..0000000
--- a/3.0.4/contrib/src/org/apache/tapestry/contrib/valid/package.html
+++ /dev/null
@@ -1,20 +0,0 @@
-<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN">
-<!-- $Id$ -->
-<html>
-<head>
-</head>
-<body>
-
-Backwards compatible versions of Tapestry 1.0.7's validating text fields, 
-built as wrappers
-around the 1.0.8 versions.
-
-<p>All that is necessary to use these without changing existing Pages 
-(built against 1.0.7 or earlier)
-is to add aliases for these components to the 
-application specification.
-
-@author Howard Lewis Ship <a href="mailto:hlship@apache.org">hlship@apache.org</a>
-
-</body>
-</html>
diff --git a/3.0.4/doc/.cvsignore b/3.0.4/doc/.cvsignore
deleted file mode 100644
index 34caf12..0000000
--- a/3.0.4/doc/.cvsignore
+++ /dev/null
@@ -1,5 +0,0 @@
-api
-Tutorial
-DevelopersGuide
-ContributorsGuide
-ComponentReference
diff --git a/3.0.4/doc/forrest/README.txt b/3.0.4/doc/forrest/README.txt
deleted file mode 100644
index 4545b58..0000000
--- a/3.0.4/doc/forrest/README.txt
+++ /dev/null
@@ -1,10 +0,0 @@
-This is the base documentation directory. It usually contains two files:
-
-skinconf.xml     # This file customizes Forrest for your project. In it, you
-                 # tell forrest the project name, logo, copyright info, etc
-
-sitemap.xmap     # Optional. This sitemap overrides the default one bundled
-                 # with Forrest. Typically, one would copy a sitemap from
-                 # xml-forrest/src/resources/conf/sitemap.xmap, and customize
-                 # it.
-
diff --git a/3.0.4/doc/forrest/conf/cli.xconf b/3.0.4/doc/forrest/conf/cli.xconf
deleted file mode 100644
index 5a6d29f..0000000
--- a/3.0.4/doc/forrest/conf/cli.xconf
+++ /dev/null
@@ -1,194 +0,0 @@
-<?xml version="1.0"?>
-
-<!--+
-    |  This is the Apache Cocoon command line configuration file. 
-    |  Here you give the command line interface details of where
-    |  to find various aspects of your Cocoon installation.
-    |
-    |  If you wish, you can also use this file to specify the URIs
-    |  that you wish to generate.
-    |
-    |  The current configuration information in this file is for
-    |  building the Cocoon documentation. Therefore, all links here 
-    |  are relative to the build context dir, which, in the build.xml 
-    |  file, is set to ${build.context} 
-    |
-    |  Options:
-    |    verbose:            increase amount of information presented
-    |                        to standard output (default: false)
-    |    follow-links:       whether linked pages should also be 
-    |                        generated (default: true)
-    |    precompile-only:    precompile sitemaps and XSP pages, but 
-    |                        do not generate any pages (default: false)
-    |    confirm-extensions: check the mime type for the generated page
-    |                        and adjust filename and links extensions
-    |                        to match the mime type 
-    |                        (e.g. text/html->.html)
-    |
-    |  Note: Whilst using an xconf file to configure the Cocoon 
-    |        Command Line gives access to more features, the use of 
-    |        command line parameters is more stable, as there are 
-    |        currently plans to improve the xconf format to allow 
-    |        greater flexibility. If you require a stable and
-    |        consistent method for accessing the CLI, it is recommended 
-    |        that you use the command line parameters to configure 
-    |        the CLI.</note>
-    |
-    | CVS: $Id$
-    +-->
-    
-<cocoon verbose="true"  
-        follow-links="true" 
-        precompile-only="false" 
-        confirm-extensions="false">
-
-   <!--+
-       |  The context directory is usually the webapp directory
-       |  containing the sitemap.xmap file.
-       |
-       |  The config file is the cocoon.xconf file.
-       |
-       |  The work directory is used by Cocoon to store temporary
-       |  files and cache files.
-       |  
-       |  The destination directory is where generated pages will
-       |  be written (assuming the 'simple' mapper is used, see 
-       |  below)
-       +-->
-   <context-dir>.</context-dir>
-   <config-file>WEB-INF/cocoon.xconf</config-file>
-   <work-dir>../tmp/cocoon-work</work-dir>
-   <!-- Overridden in forrest.build.xml 
-   <dest-dir>../docs</dest-dir>
-   -->
-
-   <!--+
-       | Broken link reporting options:
-       |   Report into a text file, one link per line:
-       |     <broken-links type="text" report="filename"/>
-       |   Report into an XML file:
-       |     <broken-links type="xml" report="filename"/>
-       |   Ignore broken links (default):
-       |     <broken-links type="none"/>
-       |
-       |   Two attributes to this node specify whether a page should
-       |   be generated when an error has occured. 'generate' specifies 
-       |   whether a page should be generated (default: true) and
-       |   extension specifies an extension that should be appended
-       |   to the generated page's filename (default: none)
-       |
-       +-->
-   <broken-links type="xml" 
-                 file="../brokenlinks.xml"
-                 generate="false"
-                 extension=".error"/>
-   
-   <!--+
-       |  Load classes at startup. This is necessary for generating
-       |  from sites that use SQL databases and JDBC.
-       |  The <load-class> element can be repeated if multiple classes
-       |  are needed.
-       +-->
-   <!--
-   <load-class>org.firebirdsql.jdbc.Driver</load-class>
-   -->
-
-   <!--+
-       |
-       +-->
-   <!-- <logging log-kit="WEB-INF/logkit.xconf" logger="cli" level="ERROR" /> -->
-
-   <!--+
-       | Specifies the filename to be appended to URIs that
-       | refer to a directory (i.e. end with a forward slash).
-       +-->
-   <default-filename>index.html</default-filename>
-
-   <!--+
-       |  Specifies a user agent string to the sitemap when
-       |  generating the site.
-       +-->
-   <!--
-   <user-agent>xxx</user-agent>
-   -->
-
-   <!--+
-       |  Specifies an accept string to the sitemap when generating
-       |  the site.
-       +-->
-   <accept>*/*</accept>
-   
-   <!--+
-       |  Specifies the URIs that should be generated (using <uri>
-       |  elements, and (if necessary) what should be done with the
-       |  generated pages.
-       |
-       |  The old behaviour - appends uri to the specified destination
-       |  directory (as specified in <dest-dir>):
-       |
-       |   <uri>documents/index.html</uri>
-       |
-       |  The "type" attribute specifies one of (append|replace|insert):
-       |
-       |  append:
-       |  Append the generated page's URI to the end of the source URI:
-       |
-       |   <uri type="append" src-prefix="documents/" src="index.html"
-       |   dest="build/dest/"/>
-       |
-       |  This means that 
-       |   (1) the "documents/index.html" page is generated
-       |   (2) the file will be written to "build/dest/documents/index.html"
-       |
-       |  replace:
-       |  Completely ignore the generated page's URI - just 
-       |  use the destination URI:
-       |
-       |   <uri type="replace" src-prefix="documents/" src="index.html" 
-       |   dest="build/dest/docs.html"/>
-       |  
-       |  This means that 
-       |   (1) the "documents/index.html" page is generated
-       |   (2) the result is written to "build/dest/docs.html"
-       |   (3) this works only for "single" pages - and not when links
-       |       are followed
-       |
-       |  insert:
-       |  Insert generated page's URI into the destination 
-       |  URI at the point marked with a * (example uses fictional 
-       |  zip protocol)
-       |
-       |   <uri type="insert" src-prefix="documents/" src="index.html" 
-       |   dest="zip://*.zip/page.html"/>
-       |
-       |  This means that 
-       |   (1)
-       |
-       |  In any of these scenarios, if the dest attribute is omitted,
-       |  the value provided globally using the <dest-dir> node will 
-       |  be used instead.
-       +-->
-
-   <!-- Includes and excludes can be used to limit which URLs are rendered -->
-   <exclude pattern="**/"/>
-   
-   <!-- These are still generated by the old build -->
-   
-   <exclude pattern="doc/**"/>
-   
-
-   <!-- Exclude tokens used in URLs to ASF mirrors (interpreted by a CGI) -->
-   <exclude pattern="[preferred]/**"/>
-   <exclude pattern="[location]"/>
-   
-   <uri src="favicon.ico"/>
-
-   <!--+
-       |  File containing URIs (plain text, one per line).
-       +-->
-   <!--
-   <uri-file></uri-file>
-   -->
-   
-</cocoon>
-
diff --git a/3.0.4/doc/forrest/content/xdocs/dev.xml b/3.0.4/doc/forrest/content/xdocs/dev.xml
deleted file mode 100644
index 07cdcd3..0000000
--- a/3.0.4/doc/forrest/content/xdocs/dev.xml
+++ /dev/null
@@ -1,110 +0,0 @@
-<?xml version="1.0"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.2//EN" "./dtd/document-v12.dtd">
-<document>
-
- <header>
-  <title>Jakarta Tapestry - Developers</title>
- </header>
-
-<body>
-
-<section>
-	<title>Jakarta Tapestry - Developers</title>
-
-<p>
-		Tapestry is a community project, and now follows the
-		<link href="http://www.apache.org/foundation/">Apache Software Foundation</link> meritocracy rules to guide
-		its future development.
-Tapestry Developers plan features, discuss and vote  on the
- <link href="http://jakarta.apache.org/site/mail2.html#tapestry">Tapestry Developers' Mailing List</link>.
-</p>
- 
-<p>
-	 The following are the current Tapestry committers.
-</p>
-
-<section>
-		<title>Mind Bridge</title>
-
-            Mind Bridge has been a long term contributor to Tapestry.
-</section>
-
-<section>
-	<title>Neil Clayton</title>
-
-            Neil has contributed 
-            to the Component Reference, and undertaken the daunting task of 
-            creating a new (and actually useful) Tapestry Tutorial, which is 
-            nearing completion.
-	</section>
-
-<section>
-    <title>Paul Ferraro</title>
-    Paul has been an avid Tapestry user since 2002.
-</section>
-
-<section>
-		<title>Erik Hatcher</title>
-		
-		Erik began by contributing Javadoc fixes (flagged by IDEA) as he was
-        learning Tapestry.  He has added the OGNL type converter facility for
-        expression bindings and is active in making the Table component easy
-        to use.
-</section>
-
-<section>
-		<title>Harish Krishnaswamy</title>
-		
-		 	Harish is a Tapestry enthusiast and is also becoming a HiveMind enthusiast. Hopefully 
- 	he will help integrate the two.
- 	
-</section>
-
-	
-<section>
-	<title>Richard Lewis-Shell</title>
-		Richard is one of the real early adopters of Tapestry.
-	
-</section>
- 
-<section>
-	<title>Howard Lewis Ship</title>	
-	   Howard started the Tapestry project in early 2000.
-</section>
-
-<section>
-	<title>Geoff Longman</title>	
-
-
-
-       Geoff has advanced Tapestry light years with his excellent
-	   Eclipse plug-in, <link href="http://spindle.sf.net/">Spindle</link>.
-
-</section>
-	
-<section>
-	<title>David Solis</title>
-
-David is another long-term user,
-and has  added a suite of WML components to the framework. 		
-</section>
-
-</section>
-</body>
-</document>
diff --git a/3.0.4/doc/forrest/content/xdocs/doc.xml b/3.0.4/doc/forrest/content/xdocs/doc.xml
deleted file mode 100644
index b13111f..0000000
--- a/3.0.4/doc/forrest/content/xdocs/doc.xml
+++ /dev/null
@@ -1,127 +0,0 @@
-<?xml version="1.0"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.2//EN" "./dtd/document-v12.dtd">
-<document>
-
- <header>
-  <title>Jakarta Tapestry - Documentation</title>
- </header>
-
-<body>
-
-
-
-
-<section>
-		<title>
-				Tapestry API Documentation
-		</title>
-		
-
-
-Full documentation for the Tapestry framework, the <code>contrib</code>
-framework (which contains additional components and classes), 
-and all the example code.
-
-
-<p>
-<link href="site:api">[HTML]</link>	
-</p>
-</section>
-
-<section>
-		<title>
-				Tapestry Component Reference
-		</title>
-
-A handy refrence to the built-in Tapestry components, with example
-specifications, HTML templates and code.
-
-<p>
-<link href="site:comp-ref">[HTML]</link>	
-</p>
-</section>
-
-<section>
-		<title>
-		Developer's Guide
-		</title>
-		
-Exhaustive reference for Tapestry, in extreme detail.
-          
-<p>
-			<link href="doc/DevelopersGuide/DevelopersGuide.html">[HTML]</link>
-			<link href="doc/DevelopersGuide/DevelopersGuide.pdf">[PDF]</link>
-	</p>          
-          
-<warning label="Out of date">This document is out of date, and is being replaced with a new 
-User's Guide.
-</warning>
-
-</section>
-	
-<section>
-	<title>
-		User's Guide
-	</title>
-		
-Complete reference to the Tapestry framework.
-           
-<p>
-		<link href="doc/TapestryUsersGuide/TapestryUsersGuide.html">[HTML]</link>
-		<link href="doc/TapestryUsersGuide/TapestryUsersGuide.pdf">[PDF]</link>	
-</p>           
-           
-<warning label="Incomplete">This document is currently being constructed and is incomplete. It is a replacement
-	for the Developer's Guide.
-</warning>
-</section>
-
-<section>
-	<title>
-	Contributor's Guide
-	</title>
-		
-Guide for users and prospective developers who wish to contribute code and patches to the
-Tapestry project.
-
-<p>
-		<link href="doc/ContributorsGuide/ContributorsGuide.html">[HTML]</link>
-		<link href="doc/ContributorsGuide/ContributorsGuide.pdf">[PDF]</link>
-</p>
-
-</section>
-
-<section>
-	<title>External Documentation</title>		
-	
-	<p>
-	Kevin C. Dorff has created a <a href="http://dorffweb.com/?page=taptutorial">Tapestry Tutorial</a>
-	that shows off the new features in Tapestry 3.0.
-	</p>
-	
-	<p>
-	<a href="http://www.manning.com">Manning Publications</a>	 has published
-	<a href="http://www.manning.com/lewisship/">Tapestry In Action</a>, written
-	by Howard Lewis Ship, the creator of Tapestry.
-	</p>
-		
-</section>
-
-</body>
-</document>
diff --git a/3.0.4/doc/forrest/content/xdocs/faq.xml b/3.0.4/doc/forrest/content/xdocs/faq.xml
deleted file mode 100644
index d722c13..0000000
--- a/3.0.4/doc/forrest/content/xdocs/faq.xml
+++ /dev/null
@@ -1,713 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE faqs PUBLIC "-//APACHE//DTD FAQ V1.2//EN" "dtd/faq-v12.dtd">
-
-<faqs title="Jakarta Tapestry - FAQs">
-
-
-    <part id="general">
-        <title>General Tapestry Information</title>
-
-        <faq>
-            <question>How does Tapestry compare to other frameworks?</question>
-            <answer>
-                <p>
-Tapestry is very much unlike most other frameworks in that it doesn't use
-code generation; instead it uses a true component object model based
-on JavaBeans properties and strong specifications.  This gives Tapestry a huge
-amount of flexibility and enables dynamic runtime inspection of the application
-with the Tapestry Inspector (a mini-application that can be built into any Tapestry
-application).
-                </p>
-
-                <p>In addition, Tapestry applications require 
-far less Java coding and are far more robust than equivalent 
-applications developed with other popular frameworks. This is 
-because the Tapestry framework takes responsibility for many 
-important tasks, such as maintaining server-side state and 
-dispatching incoming requests to appropriate objects and methods.</p>
-                <p>The many new features of release 3.0 mean that Tapestry is not 
-only the most powerful web application framework available, it is 
-also the fastest and easiest to adopt, regardless of whether your 
-background is Java, Perl, XML or PHP!</p>
-            </answer>
-        </faq>
-
-
-        <faq>
-            <question>How is the performance of Tapestry?</question>
-            <answer>
-                <p>		
-		My own testing, documented in the Sept. 2001 issue of the Java Report,
-	agrees with other testing (documented in the Tapestry discussion forums):
-	Although straight JSPs have a slight edge in demo applications, in
-	real applications with a database or application server backend, the performance
-	curves for equivalent Tapestry and JSP applications are identical.
-                </p>
-
-                <p>Don't think about the performance of 
-            Tapestry; think about the performance of your Java developers.</p>
-
-            </answer>
-        </faq>
-
-        <faq>
-            <question>Is Tapestry a JSP tag library?</question>
-
-            <answer>
-                <p>	Tapestry is
-                    <em>not</em> a JSP tag library; Tapestry builds on the 
-            servlet API, but doesn't use JSPs in any way.&nbsp; It uses it own 
-            HTML template format and its own rendering engine.
-                </p>
-
-
-                <p>
-	Starting with release 3.0, Tapestry includes a simple JSP tag library
-	to allow JSP pages to create links to Tapestry pages.	
-                </p>
-            </answer>
-        </faq>
-
-        <faq>
-            <question>What does it cost?</question>
-
-            <answer>
-                <p>		
-		Tapestry is open source and free.  It is licensed
-	under the Apache Software License, which allows
-	it to be used even inside proprietary software.
-                </p>
-            </answer>
-        </faq>
-
-        <faq>
-            <question>Is there a WYSIWYG editor for Tapestry, or an IDE plugin?</question>
-
-            <answer>
-                <p>
-		
-		Currently, no WYSIWYG editor is available for Tapestry; however, the design of Tapestry
-	allows existing editors to work reasonably well (Tapestry additions to the HTML markup
-	are virtually invisible to a WYSIWYG editor).</p>
-
-                <p>
-                    <link href="http://sf.net/projects/spindle">Spindle</link>
-is a Tapestry plugin 
-	for the excellent open-source
-                    <link href="http://www.eclipse.org">Eclipse</link> IDE. It adds wizards and editors 
-            for creating Tapestry applications, pages and components.
-                </p>
-            </answer>
-        </faq>
-
-        <faq>
-            <question>Does Tapestry work with other other application servers
-		 besides JBoss?</question>
-            <answer>
-
-                <p>Of course!
-                    <link href="http://www.jboss.org">JBoss</link> is free and convienient for the 
-            turn-key demonstrations. You can download Tapestry and JBoss 
-            and have a real J2EE application running in about a minute! 
-            The scripts that configure JBoss are sensitive to the particular 
-            release of JBoss, it must be release 3.0.6.
-                </p>
-                <p>However, Tapestry 
-            applications are 100% container agnostic ... Tapestry doesn't care 
-            what servlet container it is used with and does not even require an EJB container.</p>
-            </answer>
-        </faq>
-
-    </part>
-
-    <part id="technical">
-        <title>Technical Questions</title>
-
-        <faq>
-            <question>
-                How do I integrate a Tapestry application with J2EE declarative security/JAAS?
-            </question>
-            <answer>
-                <p>In web.xml:</p>
-
-
-                <p>add an additional servlet mapping for your tapestry application to /admin, and add the following:</p>
-
-                <source><![CDATA[
-<security-constraint>
- <web-resource-collection>
-  <url-pattern>/admin/*</url-pattern>
- </web-resource-collection>
- <auth-constraint>
-   <role-name>ADMIN</role-name>
- </auth-constraint>
-</security-constraint>
-                    ]]></source>
-                <p>In your base class for protected pages:</p>
-
-
-                <source><![CDATA[
-public void validate(IRequestCycle cycle) throws RequestCycleException {
-
-  boolean isAdmin = getRequestCycle().getRequestContext().getRequest().isUserInRole("ADMIN");
-  if (!isAdmin) {
-    // not in right role
-    throw new PageRedirectException.......
-  }
-
-}
-                ]]></source>
-
-                <p>you can have a number of mappings for the same app-servlet to
-                 different URIs, that way you can rely a bit more on the
-                 declarative security.. not perfect, but works.. :)</p>
-
-
-                <p>ViktorSzathmary</p>
-
-            </answer>
-        </faq>
-        <faq>
-            <question>
-            How do I Write Components?
-            </question>
-            <answer>
-
-
-                <p>1.</p>
-
-
-                <p>Retrieving bound properties : When writting a component,
-                 you often require various properties to be supplied by
-                 the component user. At some point during rendering,
-                 you will want to use the value of this property.</p>
-
-                <p>You can do this by accessing the Binding. Assume we
-                 have a component with one property called 'values'.
-                 Our component will use this list in its preRenderCommponent()
-                 method to setup some model, for use elsewhere.</p>
-
-
-                <source><![CDATA[
-.... if(getValues() == null) {
-
-  IBinding binding = getBindings("values"); if(binding.getObject() == null) {
-
-      throw new RequestCycleException("The value for 'values' cannot be null", this);
-
-  } setValues((List)values.getObject());
-
-}
-                ]]></source>
-                <p>The binding itself will ensure that the object value is
-                the correct type (assuming of course, it's been setup right).</p>
-
-                <p>2.</p>
-
-
-                <p>Performing Lazy Instantiation of state based upon component
-                 properties : In some cases, the output of a component may be
-                 based upon the state of some other property of the same
-                 component. For example, imagine a form where the user can
-                 choose the type of product to view. When they choose a
-                 product, the form makes a query to the database for
-                 products matching this type, and reshows the list
-                 on the same page. (the list would be included outside
-                 of the form element itself).</p>
-
-                <p>Lets assume that the page object exposes it's products
-                via a getProductModel() - which is an instance of
-                IPropertySelectionModel.</p>
-
-                <p>We will also assume that the remainder of the page has the
-                 other components necessary to render correct HTML, using the
-                 value supplied by the getProductModel() result.</p>
-
-                <p>
-                Here, it is helpful to know when in the rendering process
-                you can rely on the value of selectedProduct to be set correctly,
-                so that you can instantiate a ProductModel based on the provided
-                value, for use in the form rendering.
-                The best place to setup state is in the preRenderComponent()
-                method. This is called by Tapestry just before it renders any component,
-                but AFTER it has set component properties.
-                So, we might write:
-                </p>
-
-                <source><![CDATA[
-protected void preRenderComponent() {
-
-  String selected = getSelectedProduct();
-  List products = getMatchingProducts(selectedProduct);
-  productModel = new ProductModel(products);
-  .. other initialization code ...
-
-}
-]]></source>
-
-            </answer>
-        </faq>
-        <faq>
-            <question>
-                @Script - Why is it needed and how does it work?
-            </question>
-            <answer>
-                <p>IMO, the script framework is an effective means to bundle
-                 scripts in components. It provides scripts with the advantages
-                 of components. It can now be reused like a component and not
-                 have to worry about renaming field names or the wiring between
-                 the fields and the scripts. You just declare the component
-                 and you are good to go. It certainly is another layer of
-                 abstraction that one will have to learn but once you have
-                 learned it, it is very powerful. And honestly there is not
-                 much to it.</p>
-
-                <p>The script framework is mandated by the fact that form
-                 element/field names are automatically generated by the framework. And so
-                 you write your script in XML and use variables for these names and let the
-                 framework provide the correct names during runtime. Going further, you may
-                 also ask the framework to provide other objects that would help in creating
-                 your script. For example...</p>
-
-
-                <source><![CDATA[
-<input-symbol key="select"
-    class="org.apache.tapestry.form.PropertySelection"
-    required="yes"/>
-                ]]></source>
-
-                <p>This defines an input variable "select" of type
-                 "org.apache.tapestry.form.PropertySelection". All such
-                 variables/symbols passed in to the script is stored in
-                 a symbol map. And now you can use the form select list
-                 name by using an ant style syntax like ${select.name}.
-                 The expression within "${}" is an OGNL expression and is
-                 evaluated with respect to the symbol map. You may also
-                 define your own symbols/variables using &lt;let...&gt;
-                 like...
-                </p>
-
-                <source><![CDATA[
-<let key="formObj">
-
-    document.${select.form.name}
-
-</let>
-<let key="selectObj">
-
-    ${formObj}.${select.name}
-
-</let>
-                ]]></source>
-
-                <p>These variables/symbols are stored in the symbol map also. So
-                 now if you want to set the value of the form select list all
-                 you do is say ${formObj}.${selectObj}.value = 'whatever'; this
-                 would be equivalent to <code>document.myForm.mySelect.value = 'whatever';</code>
-                 where <code>myForm</code>
-                  is the form name and mySelect is the select list name.</p>
-
-
-                <p>&lt;input-symbol...&gt;s are like method parameters and &lt;let...&gt;s
-                 are like instance variables. Typically you would pass values
-                 to the &lt;input-symbol...&gt;s via the Script component like...</p>
-
-
-                <source><![CDATA[
-<component id="myScript" type="Script">
-
-    <static-binding name="script" value="ScriptSpecificationName.script"/>
-    <binding name="select" expression="components.somePropertySelection"/>
-
-</component>
-                ]]></source>
-
-                <p>The actual scripts are defined in one of the two sections
-                 of the script specification, &lt;body...&gt; or &lt;initialization...&gt;,
-                 depending on when you want the script to execute. If you want the script to
-                 execute on load of the page, then you define it in the
-                 &lt;initialization...&gt;, if you want it to execute on any
-                 other event, define it in the &lt;body...&gt; section of the specification.
-                 For example...</p>
-
-                <source><![CDATA[
-<body>
-
-    function onChangeList(listObj)
-    {
-
-        alert(listObj.value);
-
-    }
-
-</body>
-
-<initialization>
-
-    ${selectObj}.onchange = function(e)
-    {
-
-        onChangeList(${selectObj});
-
-    }
-
-</initialization>
-                ]]></source>
-
-                <p>As you can see in the rendered page all scripts are aggregated at the top
-                 of the page body, there are no more scripts all over the page. Even event
-                 handlers are attached to form objects in the initialization block.</p>
-
-
-                <p>One more thing to remember, scripts being components, and components by
-                 nature being independent of its environment, will render the script in the
-                 page once for every ocurrance of the component. If you want the body of the
-                 script to be rendered only once no matter how many times the component is used,
-                 just wrap the body in a &lt;unique&gt; tag like...</p>
-
-
-                <source><![CDATA[
-<body>
-<unique>
-
-    function onChangeList(listObj)
-    {
-
-        alert(listObj.value);
-
-    }
-
-</unique>
-</body>
-                ]]></source>
-
-                <p>That's all there is to it!</p>
-
-
-                <p>* HarishKrishnaswamy</p>
-
-
-            </answer>
-        </faq>
-        <faq>
-            <question>
-                cycle.activate() does not seem to alter the URL. Is there any
-                alternative that will alter the URL to point to the correct page?
-            </question>
-            <answer>
-                You would need to throw a RedirectException with the new URL;
-                this sends an HTTP redirect to the client.
-            </answer>
-        </faq>
-        <faq>
-            <question>
-                How do I do page navigation like struts?
-            </question>
-            <answer>
-                <p>Usage page properties:</p>
-
-
-                <source><![CDATA[
-Page1.page
-<page-specification class="xyz.Action">
-...
-        <property name="success" value="Home" />
-        <property name="error" value="Error" />
-
-
-</page-specification>
-
-
-Page2.page
-<page-specification class="xyz.Action">
-...
-        <property name="success" value="Home2" />
-        <property name="error" value="Error2" />
-
-</page-specification>
-
-xyz.Action.java
-...
-public void submitListener(IRequestCycle cycle)
-{
-    if (success)
-        cycle.activate(getSpecification().getProperty("success"));
-
-    if (error)
-        cycle.activate(getSpecification().getProperty("error"));
-}
-]]></source>
-
-                <p>-- Tip from Harish</p>
-
-            </answer>
-        </faq>
-        <faq>
-            <question>
-                How do I make a link popup a new window?
-            </question>
-            <answer>
-                Use the contrib:PopupLink component.
-            </answer>
-        </faq>
-
-        <faq>
-            <question>
-                How do I stream a file to the user from tapestry?
-            </question>
-            <answer>
-                <p>Make a method like the following a a listener, such as from a DirectLink or whatever.</p>
-
-                <p>(The Document is just a class that holds the file information you want to send to the user.)</p>
-
-                <source><![CDATA[
-public void downloadAction(IRequestCycle cycle)
-{
-    try
-    {
-        HttpServletResponse response =
-        cycle.getRequestContext().getResponse();
-
-
-        byte[] data = new byte[1024];
-        FileInputStream in = document.getFileInputstream();
-
-
-        response.setHeader("Content-disposition",
-          "inline; filename=" +
-           document.getFileName());
-        response.setContentType(document.getMimeType());
-        response.setContentLength(new Long(document.getSize()).intValue());
-        ServletOutputStream out = response.getOutputStream();
-
-        while (in.read(data) > -1)
-        {
-            out.write(data);
-        }
-        in.close();
-        response.flushBuffer();
-    }
-    catch (IOException e)
-    {
-        e.printStackTrace();
-    }
-}
-                ]]></source>
-
-
-            </answer>
-        </faq>
-
-        <faq>
-            <question>
-                I need to calculate a URL to jump to a particular page. How do I do this?
-            </question>
-            <answer>
-                <p>The best bet is to use the external service. This lets you directly
-            invoke a page and pass objects as parameters. The page you
-            want to jump to will need to implement IExternalPage. To calculate
-            the URL you have to use something like this:</p>
-
-
-                <source><![CDATA[
-cycle.getEngine()
-    .getService( Tapestry.EXTERNAL_SERVICE )
-    .getLink( cycle, cycle.getPage(), new Object[]{
-        "MyPageName",
-        param1,
-        param2} )
-    .getURL()
-                ]]></source>
-            </answer>
-        </faq>
-
-        <faq>
-            <question>
-                I have a form with a submit button. On the form and the submit
-                button are two separate listeners. Which is invoked first?
-            </question>
-            <answer>
-                <p>The button's listener should get invoked when the form
-                encounters your button during the rewind. the form's
-                submitListener should get invoked after the form has completed
-                its rewind, and thus after all other listeners have been
-                invoked. note - this can mean that the listener for a button can be invoked
-                BEFORE the form has 'submitted' all its values - it depends
-                where your input fields are relative to your button.</p>
-            </answer>
-        </faq>
-
-        <faq>
-            <question>
-                I'd like to be able attach my own client-side javascript
-                handling on the form submit. What's the best way to do this?
-            </question>
-            <answer>
-                <p>You can add event handler during component rendering:</p>
-
-                <source><![CDATA[
-protected void renderComponent(IMarkupWriter writer, IRequestCycle cycle){
-    ...
-    yourFormComponent.addEventHandler(FormEventType.SUBMIT, "javaScriptValidatingFunctionName");
-    ...
-}
-                ]]></source>
-
-                <p>
-                    <code>org.apache.tapestry.contrib.palette.Palette</code> can be used for detailed example.
-                </p>
-
-            </answer>
-        </faq>
-
-        <faq>
-            <question>
-                What's the lifecycle of a form submit?
-            </question>
-            <answer>
-                <p>Events will trigger in the following order:</p>
-
-
-                <source><![CDATA[
-initialize()
-pageBeginRender()
-formListenerMethod()
-pageBeginRender()
-                ]]></source>
-
-                <p>The form "rewind" cycle is nothing more than a render cycle
-where the output is buffered and scrapped rather than written
-to the servlet output stream. The second pageBeginRender() is
-triggered during the actual page rendering. You can use
-requestCycle.isRewinding() to distinguish between these
-two render cycles.</p>
-
-            </answer>
-        </faq>
-
-        <faq>
-            <question>
-                Can I use the same component multiple times in one template?
-            </question>
-            <answer>
-                <p>No - but you can copy the definition of a component pretty easily.</p>
-
-                <source><![CDATA[
-<component id="valueInsert" type="Insert" >
-   <binding name="value" expression="getValueAt( rowIndex, columnIndex )" />
-</component>
-
-<component id="valueInsert1" copy-of="valueInsert"/>
-<component id="valueInsert2" copy-of="valueInsert"/>
-<component id="valueInsert3" copy-of="valueInsert"/>
-<component id="valueInsert4" copy-of="valueInsert"/>
-                ]]></source>
-            </answer>
-        </faq>
-
-        <faq>
-            <question>
-                I have to restart my application to pick up changes to specifications and templates, how
-                can I avoid this?
-            </question>
-
-            <answer>
-                <p>
-
-Start your servlet container with the JVM system parameter
-                    <code>org.apache.tapestry.disable-caching</code> set to true, i.e.,
-                    <code>-Dorg.apache.tapestry.disable-caching=true</code>.
-                </p>
-
-                <p>Tapestry will discard cached specifications
-            and templates after each request. You application will run a bit
-            slower, but changes to templates and specifications will show up
-            immediately. This also tests that you are persisting server-side
-            state correctly.</p>
-            </answer>
-
-        </faq>
-
-        <faq>
-            <question>What is "line precise error reporting"?</question>
-
-            <answer>
-                <p>
-		Tapestry applications are built from templates and specifications.
-		It's natural that when these templates and specifications are read, any syntax
-		errors
-		are reported, and the precise file and location is identified.
-                </p>
-
-                <p>
-		Tapestry goes far beyond that!  It always relates runtime objects
-		back to the corresponding files so that even runtime errors report the
-		file and location.
-                </p>
-
-
-                <jump href="images/LinePrecise.png">
-                    <figure src="images/LinePrecise_thumb.png" alt="Line Precise"/>
-                </jump>
-                <caption>	Tapestry exception report (click for larger image).</caption>
-
-                <p>
-		For example; say you bind a parameter of a component that expects
-		a non-null value, but the value ends up being null anyway, due to
-		a bug in your code or your specification.
-	    Tapestry can't tell, until runtime,
-		that you made a mistake ... but when it does, part of the exception report
-		will be the line in the template or specification where you bound the component parameter.
-		Zap!  You are sent right to the offending file to fix the problem.
-                </p>
-
-
-                <p>
-		Other frameworks may report syntax errors when they parse their specifications, but
-		after that, you are own your own: if you are lucky, you'll get a stack trace.  Good luck
-		finding your error in that!  Tapestry gives you a wealth of information when unexpected
-		exceptions occur, usually more than enough to pinpoint the problem
-                    <em>without</em> having to restart the application inside a debugger.
-                </p>
-            </answer>
-        </faq>
-    </part>
-
-    <part id="other-frameworks">
-        <title>Other Frameworks</title>
-
-        <faq>
-            <question>How do I intergrate Tapestry with Spring?</question>
-
-            <answer>
-
-                <link href="http://www.springframework.org/">Spring</link> is a popular
-		service framework. Colin Sampaleanu
-		has written a
-                <link href="http://www.springframework.org/docs/reference/view.html#view-tapestry">integration
-		document</link> on using these two open-source frameworks together.
-
-            </answer>
-
-        </faq>
-
-    </part>
-</faqs>
-
-
diff --git a/3.0.4/doc/forrest/content/xdocs/index.xml b/3.0.4/doc/forrest/content/xdocs/index.xml
deleted file mode 100644
index dc1b6cd..0000000
--- a/3.0.4/doc/forrest/content/xdocs/index.xml
+++ /dev/null
@@ -1,154 +0,0 @@
-<?xml version="1.0"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.2//EN" "./dtd/document-v12.dtd">
-<document>
-
- <header>
-  <title>Jakarta Tapestry - Welcome!</title>
- </header>
-
-<body>
-
-<section>
-		<title>Introduction</title>
-		
-<p>
-Tapestry is a powerful, open-source, all-Java framework
-for creating leading edge web applications in Java.
-</p>
-
-<p>
-Tapestry reconceptualizes web application development 
-in terms of objects, methods and properties
-instead of URLs and query parameters.
-</p>
-
-<p>
-Tapestry is an alternative to scripting environments such as
-JavaServer Pages or Velocity.  Tapestry goes far further,
-providing a complete framework for creating extremely dynamic applications
-with minimal amounts of coding.
-</p>
-
-<p>
-Tapestry's approach, using a component object model similar to a
-traditional GUI, provides the following benefits:
-</p>
-
-<ul>
-<li>Very high level of reuse, within and between projects<br/><i>Everything in Tapestry is a reusable component</i></li>
-<li>Frees developers from writing boring, buggy code<br/><i>Code in terms of objects, methods and properties, not URLs and query parameters</i></li>
-<li>Allows applications' complexity to scale well<br/><i>Framework does all the URL building and message dispatching, transparently</i></li>
-<li>Easy Internationalization/Localization<br/><i>Framework selects localized version of text, templates and images</i></li>
-<li>Extremely robust applications<br/><i>Less code is less bugs<br/>Sophisticated built-in exception reporting<br/><link href="faq.html#lineprecise">Line precise error reporting</link></i></li>
-<li>Easy team integration<br/><i>Graphic designers and Java developers can work together without having to know each other's jobs</i></li>
-</ul>
-<p>
-Tapestry is distributed under the terms of the Apache Software License.
-</p>
-
-<p>Tapestry exploits the dynamic nature of the Java language, leveraging 
-the JavaBeans API, as well as servlets and other J2EE technology.
-Tapestry applications are fast, scalable, robust and powerful.
-</p>
-
-<p>
-Tapestry components are a combination of a specification file (in XML),
-an HTML template and a Java class (extending a framework class,
-with simple additions). Tapestry components are combined together
- to form larger components or complete Tapestry pages.
-</p>
-
-</section>
-
-<section>
-  <title>Status</title>
-  
-<p>
-This release is Tapestry 3.0.3, the final bug fix release for Tapestry 3.0.
-</p>
-
-<p>Current development efforts are focused on Tapestry 3.1,
-which rebuilds Tapestry on top of the
-<link href="http://jakarta.apache.org/hivemind/">HiveMind</link> microkernel, simplifies code and development,
-and ads a boat load of new features.</p>
-
-<p>
-<a href="http://jakarta.apache.org/tapestry/current/">
-A preview of the Tapestry 3.1 documentation is available</a>.
-</p>
-
-</section>
-
-<section>
-		<title>Tapestry in Print</title>
-
-
-<figure src="images/tapestry-in-action.png" alt="Tapestry in Action Cover"/> 
-<p>
-<link href="http://www.manning.com/lewisship/index.html">Tapestry in Action</link>
-is now available from
-Manning Publications. It is the
-definitive introduction to Tapestry written by Howard Lewis Ship, the creator of Tapestry.
-</p>
-
-<figure src="images/tapestry-german-cover.gif" alt="Tapestry Webanwendungen mit dem Apache Framework"/>
-
-<p>
-<link href="http://entwickler.com/sus/sus_buch/psecom,id,60,nodeid,8,_language,uk.html">Tapestry Webanwendungen mit dem Apache Framework</link> is a fast-paced guide to using
-Tapestry, focusing on combining Tapestry with other open-source frameworks, as well as developing Tapestry applications using
-<a href="http://spindle.sourceforge.net/">Spindle</a>. The book is written in German, and authored by
-Stefan Edlich and Patrick Kunert.
-</p>
-
-<p>Tapestry has also  been described in the print journal 
-<em>The Java Report</em> in the September 2001 issue.  Other articles
-includes the on-line journal
-<link href="http://www.onjava.com/pub/a/onjava/2001/11/21/tapestry.html">OnJava</link>,
-in November 2001.
-</p>
-
-</section>
-
-<section>
-		<title>Tapestry Community</title>
-
-
-<p>
-Tapestry has a very active 
-<link href="mailto:tapestry-user-subscribe@jakarta.apache.org">User</link> mailing list, with
-<link href="http://news.gmane.org/thread.php?group=gmane.comp.java.tapestry.user">archives</link>.
-This is the list for getting help with using the framework.
-</p>
-
-<p>
-The <link href="mailto:tapestry-dev-subscribe@jakarta.apache.org">Developer</link>
-mailing list is for Tapestry committers and other power users to discuss
-enhancements to the framework.  It also has 
-<link href="http://news.gmane.org/thread.php?group=gmane.comp.jakarta.tapestry.devel">archives</link>.
-
-</p>
-
-<p>
-A <link href="site:wiki">Wiki</link> has been set 
-up to discuss Tapestry and plan new features.
-</p>
-
-</section>
-
-</body>
-</document>
diff --git a/3.0.4/doc/forrest/content/xdocs/more_new.xml b/3.0.4/doc/forrest/content/xdocs/more_new.xml
deleted file mode 100644
index 007893f..0000000
--- a/3.0.4/doc/forrest/content/xdocs/more_new.xml
+++ /dev/null
@@ -1,679 +0,0 @@
-<?xml version="1.0"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<document>
-
- <header>
-  <title>Jakarta Tapestry - What's New</title>
- </header>
-
-<body>
-<section><title>Release 2.3-rc-1</title>
-
-<ul>
-<li>Installed Apache Foundation license and copyrights into all source files.</li>
-<li>Added Spanish translation of validation strings, contributed by Juan Alvarez.</li>
-<li>Fixed some deployment issues when deploying into Tomcat.</li>
-</ul>
-
-<pre>
-[ 650592 ] Add MaskEdit component
-[ 651331 ] Added DatePicker disable parameter
-[ 655089 ] Add ExternalPageCalback
-[ 660372 ] Add Global object
-</pre>
-</section>
-
-<section><title>Release 2.3-alpha-1</title>
-
-<p>Tapestry is now available under the terms of the Apache Software License.  Previous
-releases were released under the LGPL, but are now retroactively
-licensed under the ASL as well.
-</p>
-
-<p>Added a <link href="dev.html">Developers Page</link>.
-</p>
-
-<p>
-Removed code dependency on Log4J, using
-Jakarta's
-<link href="http://jakarta.apache.org/commons/logging.html">commons-logging</link> wrapper layer instead.
-Use the <code>Enum</code> implementation from Jakarta's
-<link href="http://jakarta.apache.org/commons/lang.html">commons-lang</link> library.
-</p>
-
-<p>
-Rework dynamic code loading so that a subclass of
-<link href="http://jakarta.apache.org/tapestry/doc/api/net/sf/tapestry/ApplicationServlet.html">ApplicationServlet</link>
-is no longer necessary.
-</p>
-<p>Add methods to
-<link href="http://jakarta.apache.org/tapestry/doc/api/net/sf/tapestry/INamespace.html">INamespace</link> and
-<link href="http://jakarta.apache.org/tapestry/doc/api/net/sf/tapestry/IPage.html">IPage</link>
-to make dealing with namespaces and qualified page names easier.
-</p>
-
-<p>
-Joe Panico has contributed the PopupLink component.
-</p>
-
-<p>
-<code>&lt;jwc id="..."&gt;</code> is no longer allowed in HTML templates.
-</p>
-
-<p>
-Upgrade to OGNL 2.3.0.
-</p>
-
-<pre>
-[ 619481 ] use jakarta commons lang Enum
-[ 627478 ] Don't require servlet subclass
-[ 614324 ] Add a param "raw" in addition to "key"
-[ 627332 ] NPE in BaseValidator (form without body)
-[ 557332 ] Use a search path for properties
-[ 625721 ] Forms never stateful
-[ 637048 ] Add PopLink
-[ 643239 ] Add EmailValidator
-[ 633608 ] ServiceLink docs missing service param
-[ 644235 ] Body component ignores element
-[ 643728 ] user supplied RequestContext
-[ 643729 ] user supplied MultipartDecoder 
-[ 628153 ] add getAttribute to RequestContext
-[ 633073 ] Rollover doesn't work in form
-[ 631764 ] AbstractComponent API
-</pre>
-</section>
-
-<section><title>Release 2.2</title>
-<p>
-Use the version of Jetty that's compatible with JDK 1.2.
-</p>
-
-<pre>
-[ 619444 ] Contrib:DateField min/max params broken
-[ 620496 ] JS net/sf/tapestry/form/Calendar.js
-</pre>
-</section>
-
-<section><title>Release 2.2-rc-1</title>
-
-<pre>
-[ 616489 ] IPublicBean not accessible.
-[ 616377 ] DatePicker value error
-[ 582614 ] ValidField doesn't call getValidator()
-[ 617327 ] Contrib:DateField specification invalid
-[ 616851 ] Can't redirect to a library page
-[ 617867 ] ImageSubmit null image
-[ 618317 ] Contrib:NumericField missing type param
-[ 618342 ] NPE in AbstractComponent toString
-</pre>
-
-</section>
-
-<section><title>Release 2.2-beta-3</title>
-
-<p>
-Upgrade to Jetty 4.1.0 and OGNL 2.1.4.
-</p>
-
-<p>
-Mind Bridge has contributed a Table component (really, a complete framework
-for creating sortable tables that present data in page-sized blocks).
-</p>
-
-<pre>
-[ 608368 ] DataSqueezer / ClassLoader
-[ 608764 ] Work around errant valueUnbound()
-[ 608162 ] ExternalService allows only 1 parameter
-[ 611551 ] DTD validation error with XML Spy
-[ 613441 ] SelectPropertySelectionRenderer HTML
-[ 604194 ] Specify charset by Shell component
-[ 610376 ] Expose Foreach's index as a property
-</pre>
-</section>
-
-<section><title>Release 2.2-beta-2</title>
-
-<p>
-The <link href="http://jakarta.apache.org/tapestry/doc/ComponentReference/ValidField.html">ValidField</link> now performs
-client-side validation of input.  If a field is in error when the form
-is submitted, then an alert is displayed and the field is selected.
-</p>
-
-<p>Begin making more use of OGNL expressions in place of Java code.
-</p>
-
-<p>Malcom Edgar has contributed a <link href="http://jakarta.apache.org/tapestry/doc/ComponentReference/DatePicker.html">DatePicker</link>
-component.
-</p>
-
-<p>Some more refactorings: IComponent methods  addWrapped()/renderWrapped() -&gt; addBody()/renderBody().
-</p>
-
-<p>Tapestry documentation is now available in PDF format.
-</p>
-
-<pre>
-[ 602881 ] Add hooks for ValidField client-side
-[ 603023 ] StaleSession.page has error
-[ 603208 ] Support parameter direction "form"
-[ 603269 ] ListEdit improvements
-[ 603362 ] Inconsistency in Tapestry_1_3.dtd
-[ 603132 ] Add a service similar to ExternalService
-[ 582436 ] Script / Required Symbols
-[ 604834 ] InspectorButton disabled param
-[ 604646 ] ImageSubmit ignores disabledImage
-[ 603260 ] make Form "listener" not required
-[ 603826 ] IUploadFile provide Mime Type
-[ 604944 ] Add DateEdit component
-[ 603130 ] Add an initPage() method to AbstractPage
-[ 607074 ] Make IMarkupWriter a bit smarter
-[ 604201 ] Markup Writer should output XHTML
-[ 607451 ] log error when unmatched components
-</pre>
-
-</section>
-
-<section><title>Release 2.2-beta-1</title>
-
-<p>Tapestry has now replaced its simple
-property path support with the far 
-more powerful <link href="http://www.ognl.org">Object Graph
-Navigation Library</link> expressions.  This promises to greatly extend
-the expressiveness of the specifications and further reduce
-the need for Java code.  The <code>property-path</code>
-attribute of the <code>&lt;binding&gt;</code> element has been renamed
-to <code>expression</code> (this only affects the latest, 1.3, version
-of the DTD).
-</p>
-
-<p>There are some small costs to using OGNL; the largest being
-a restriction in bean names, component ids and asset names.  All
-of these must now be valid Java identifiers, and so cannot contain the 
-dash ('-') character, which was previously permitted.  This affects all
-specifications, including older versions.
-</p>
-
-<p>Malcolm Edgar has lead the push to provide an excellent
-<link href="http://jakarta.apache.org/tapestry/doc/ComponentReference">Tapestry Component Reference</link>.
-</p>
-
-<p>
-You can now control the exact location of a component template by 
-declaring an asset named <code>$template</code> (which is not normally
-a legal asset name, due to the dollar sign).  If such an asset exists,
-then it is used as the template.
-</p>
-
-<p>A number of poorly named components have been renamed:</p>
-
-<ul>
-<li>Action -&gt; ActionLink</li>
-<li>Direct -&gt; DirectLink</li>
-<li>InsertBlock -&gt; RenderBlock</li>
-<li>InsertWrapped -&gt; RenderBody</li>
-<li>Page -&gt; PageLink</li>
-<li>Service -&gt; ServiceLink</li>
-<li>ShowInspector -&gt; InspectorButton</li>
-<li>Text -&gt; TextArea</li> 
-</ul>
-
-<p>Previous names will be maintained until at least release 2.3.
-</p>
-
-<p>
-In addition, the documentation has been brought (largely) up to date
-with the significant changes so far in release 2.2.
-</p>
-
-<pre>
-[ 582421 ] Way to specify template location
-[ 596929 ] NumericField params require java-type
-[ 597314 ] Problems with URLs
-[ 595985 ] Tapestry behind firewall
-[ 598609 ] NumericField displayWidth inconsistent
-[ 598371 ] Radio and RadioGroup broken
-[ 599608 ] App startup exception
-[ 599663 ] Disallow spec path a comp. type
-[ 601018 ] Use OGNL instead of home brew
-</pre>
-
-
-</section>
-
-<section><title>Release 2.2-alpha-4</title>
-
-<p>
-Update to latest versions of JCommon, JFreeChart and Log4J.  Added the
-&lt;extension&gt; element to the application and library specifications.
-</p>
-
-<pre>
-[ 584040 ] Add hooks for custom configuration
-[ 579081 ] getApplicationSpecification
-[ 587683 ] Frameset tag for JavaScript
-[ 589818 ] Forward, not redirect, to local resource
-[ 591352 ] &lt;bean&gt; should allow &lt;property&gt;
-[ 592289 ] helper bean: render lifecycle
-[ 591801 ] Exception changing log priority
-</pre>
-
-</section>
-
-<section><title>Release 2.2-alpha-3</title>
-
-<p>
-Tapestry now supports libraries, which can provide components, pages and engine services to
-an application.  Libraries can also include libraries.  The application specification
-has been ammended to include a new &lt;library&gt; element, and a new type of specification,
-the library specification, has been added.
-</p>
-
-<p>
-Renamed all page specifications from ".jwc" to ".page".
-</p>
-
-<pre>
-[ 584466 ] Cant set bean prop from localized string
-[ 494453 ] invalid-date-format message string wrong
-[ 584731 ] Text's value parameter required
-[ 579843 ] PageLoader INFO msg wrong
-[ 586171 ] Add namespace/library support
-</pre>
-
-</section>
-
-<section><title>Release 2.2-alpha-2</title>
-
-<p>
-Revamp how services construct and parse URLs.  Rework service parameters to
-be typed objects, instead of simple strings (this is a change which
-may break some existing code).
-</p>
-
-<p>
-A new version of the DTD may now be used which distinguishes between
-page specifications and component specifications (page specifications
-do not specify several attributes and elements related to 
-component parameters).
-</p>
-
-<pre>
-[ 581199 ] Slashes in service parameters
-[ 581160 ] Wrong case in WAR file name
-[ 579583 ] Simplify PropertySelection
-[ 581691 ] Object not String for service parameters
-[ 582614 ] ValidField doesn't call getValidator()
-[ 583665 ] ValidatingTextField specification wrong
-[ 583693 ] Extend Block/InsertBlock
-[ 534055 ] Make page-spec and comp-spec distinct
-</pre>
-
-
-</section>
-
-<section><title>Release 2.2-alpha-1</title>
-
-<p>
-Update to Jetty 4.0.4.
-</p>
-
-<pre>
-[ 576523 ] Better syntax for Script documents
-[ 562964 ] Non-unique app name problems
-[ 578869 ] InsertComponent/DateField, null values
-[ 578921 ] Error in listener map error message
-[ 579131 ] Load order problem with string-binding
-[ 579642 ] Rename Direct context param
-[ 579689 ] Hidden should convert values
-[ 579141 ] IOExceptions related to exception page
-</pre>
-
-
-</section>
-
-<section><title>Release 2.1-beta-2</title>
-
-<p>
-Note the change in Tapestry release naming,
-described in detail in the
-<link href="http://jakarta.apache.org/tapestry/doc/ContributorsGuide/releases.html">Tapestry Contributor's Guide</link>.
-</p>
-
-<pre>
-[ 574792 ] localized strings don't work
-[ 573860 ] Shell component hardcodes DTD
-[ 573858 ] No way to remove PageDetachListener
-[ 573753 ] client TCP reset causes SocketException
-[ 573653 ] broken assets
-[ 574181 ] ValidationDelegate should eval form name
-[ 575228 ] Validation messages not localized
-</pre>
-
-</section>
-
-<section><title>Release 2.0.5</title>
-
-<p>
-Updated Tapestry to automatically configure the demo for
-<link href="http://www.jboss.org">JBoss</link> 3.0.0 (this includes
-a switch to the JDK 1.3 compiler, for compatibility with
-the JBoss libraries).
-</p>
-
-<p>
-Cleaned up the look of the default exception page.
-Reorganized the home page, to link to the new 
-<link href="site:wiki">Tapestry Wiki</link>,
-and to move more static content onto SourceForge.
-</p>
-
-<pre>
-[ 563552 ] IllegalStateException not beeing caught
-[ 559647 ] Switch to JBoss 3.0.0
-[ 566158 ] ValidField NPE if no delegate
-[ 566943 ] Submit problem with tag type
-[ 566000 ] Add field to Spec classed to record DTD
-</pre>
-
-</section>
-
-<section><title>Release 2.0.4</title>
-
-<p>
-Significant improvements to localization support, including support
-for localized properties files for each component, the
-&lt;string-binding&gt; element for accessing localized strings,
-and a new form of markup in the template
-to access localized strings.
-</p>
-
-<pre>
-[ 556766 ] Improve localization support
-[ 560256 ] Make some property bindings invariant
-[ 560255 ] ListEdit: doesn't render element
-[ 559575 ] Component Frame cannot render
-[ 558165 ] TextField value attribute not required
-[ 560506 ] Cannot disable Checkbox component
-[ 560217 ] Upload problems depending on browser
-[ 550279 ] Define serialVersionUID for classes
-</pre>
-
-</section>
-
-<section><title>Release 2.0.3</title>
-
-<p>
-Renamed Java packages from <code>com.primix.tapestry.*</code>
-to <code>net.sf.tapestry.*</code>, along with some significant other
-reorganizations, especially to the way component parameters are handled.
-</p>
-
-<p>
-Added an initial <link href="http://jakarta.apache.org/tapestry/doc/ContributorsGuide/ContributorsGuide.html">Contributor's Guide</link> for Developers
-wishing to contribute code to the Tapestry project.
-</p>
-
-<pre>
-[ 549479 ] Rename packages to net.sf.tapestry
-[ 550280 ] Remove IDirectListener
-[ 555165 ] Simplify setupLogging()
-[ 553310 ] Set properties from parameter bindings
-[ 552851 ] Add frame component
-[ 549312 ] Delete support for old specifications
-[ 556359 ] Inspector doesn't raise at javanuke
-[ 555167 ] Maintain JDK 1.2.2 compatibility
-</pre>
-
-</section>
-
-<section><title>Release 2.0.2a</title>
-
-<pre>
-[ 549482 ] NPE in RequestCycle.observeChange()
-</pre>
-
-</section>
-
-<section><title>Release 2.0.2</title>
-
-<p>
-Changed the inspector icon into an animated GIF for compatiblility with more browsers.
-</p>
-
-<p>
-Created the new <link href="http://jakarta.apache.org/tapestry/doc/api/net/sf/tapestry/link/GenericLink.html">GenericLink</link> component, which allows links to arbitrary URLs (including JavaScript event handlers), but
-is still an <link href="http://jakarta.apache.org/tapestry/doc/api/net/sf/tapestry/components/IServiceLink.html">IServiceLink</link> which means it can wrap 
-<link href="http://jakarta.apache.org/tapestry/doc/api/net/sf/tapestry/html/Rollover.html">Rollover</link> components.
-</p>
-
-<pre>
-[ 463649 ] NN6 &amp; ShowInspector
-[ 544394 ] Release notes / deleted methods
-[ 548183 ] Component specification of Option error
-[ 548188 ] Component Option implementation error
-[ 549144 ] tutorial load-on-startup and WL issue
-[ 549142 ] WL issue with default tapestry jar name
-[ 549314 ] Spec parse error
-[ 521456 ] Allow IRequestCycle.discardPage() from listeners
-</pre>
-</section>
-
-<section><title>Release 2.0.1</title>
-
-<p>
-Removed a lot of deprecated code.
-</p>
-
-<pre>
-[ 536289 ] remove Jetty dependencies
-[ 537398 ] Fix synch/double check bugs
-[ 537426 ] Remove object pooling
-[ 539600 ] java-class should be java-type in docs
-[ 494221 ] Add PDF (or printable) documentation
-</pre>
-
-</section>
-
-<section><title>Release 2.0.0</title>	
-
-<p>
-Added the <link href="site:quotes">Quotes</link> page to this website.  Added two new tabs to the
-Workbench, demonstrating redirects and exception reporting.  
-Marked a number of methods (related to object pooling) as deprecated.
-</p>
-
-<p>Minor formatting changes to the web site and Virtual Library.
-</p>
-
-</section>
-
-<section><title>Release 1.0.10</title>
-
-<p>
-Changed the build to include debugging symbols with the frameworks.  Fixed a deployment problem with
-the Tutorial.  Added descriptions to most components and parameters.  Modified the Inspector to
-display component and parameter descriptions.
-</p>
-
-<p>Added a new page to the Workbench Tutorial: Chart.  The Chart page allows a user to dynamically
-create a pie chart.
-</p>
-
-<p>Made it easier to create subclasses of 
-<link href="http://jakarta.apache.org/tapestry/doc/api/net/sf/tapestry/AbstractResponseWriter.html">AbstractResponseWriter</link>.
-</p>
-
-<pre>
-[ 532562 ] Submit.jwc contains error
-[ 532587 ] Submit throws NPE
-[ 532815 ] ValidationDelegate errors
-[ 532758 ] add descriptions to builtin components
-[ 499655 ] HTMLResponseWriter enhancements
-</pre>
-
-</section>
-
-<section><title>Release 1.0.9</title>
-
-<p>The framework and contrib jar files are now named with the release number (i.e.,
-<code>com.primix.tapestry-1.0.9.jar</code>).  In addition, 
-the source code for these frameworks, and the examples, is now distributed as 
-Jar files instead of directories of files in the <code>src</code> directory. 
-This makes for easier source lookup when using 
-<link href="http://www.eclipse.org">Eclipse</link>, and shrinks the size of the distribution
-as well.
-</p>
-
-<p>The way engine services are defined and used has been completely overhauled.  </p>
-
-<p>
-Services are now defined
-in the application specification and a single
-instance of the service object is instantiated
-and shared by all engine instances (for the application).
-</p>
-
-<p>Made it easier to override the creation of the specification source, template source, etc. in subclasses
-of 
-<link href="http://jakarta.apache.org/tapestry/doc/api/net/sf/tapestry/engine/AbstractApplication.html">AbstractApplication</link>.
-</p>
-
-<p>The <link href="http://jakarta.apache.org/tapestry/doc/api/net/sf/tapestry/form/Submit.html">Submit</link> and 
-<link href="http://jakarta.apache.org/tapestry/doc/api/net/sf/tapestry/form/ImageSubmit.html">ImageSubmit</link> components may now have 
-their own listener, which is notified before the containing form's listener.
-</p>
-
-<p>More reworking of validation; the validation delegate can now
-track errors in any kind of form component and can track errors that
-aren't associated with any particular component.
-</p>
-
-<pre>
-[ #510175 ] add service registration to .application
-[ #511256 ] Enhance Validation Framework
-</pre>
-
-</section>
-
-<section><title>Release 1.0.8</title>
-
-<p>A complete overhaul of the validating text field support.  The previous implementation
-used subclasses of AbstractValidatingTextField (which no longer exists) to add new types
-of validation; the new implementation has a single component, 
-<link href="http://jakarta.apache.org/tapestry/doc/api/net/sf/tapestry/valid/ValidField.html">ValidField</link>, and many implementations
-of <link href="http://jakarta.apache.org/tapestry/doc/api/net/sf/tapestry/valid/IValidator.html">IValidator</link>.
-</p>
-
-<p>At long last, the <link href="http://jakarta.apache.org/tapestry/doc/api/net/sf/tapestry/form/Upload.html">Upload</link> component.
-</p>
-
-<p>Reimplemented the Virtual Library application using
-<link href="http://mckoi.com/database/">McKoi Database</link>, to be compatible with JBoss 2.4.3 (which no
-longer includes InstantDB).
-</p>
-
-<pre>
-[ #506661 ] private asset configuration
-[ #494456 ] StringValidator minLength message wrong
-[ #488476 ] Generated URLs should contain entities.
-[ #488432 ] Make duplicate page names illegal
-[ #487394 ] NumericField doesn't work with long
-[ #501750 ] StringValidator
-[ #499057 ] BaseValidator summary typo
-[ #487619 ] javadoc link errors
-</pre>
-
-
-</section>
-
-<section><title>Release 1.0.7</title>
-				
-<p>Removed Primix copyrights, as I no longer work there or do any work on their time.
-</p>
-
-<p>Consolidated and cleaned up many of the tutorials into the new Workbench.
-</p>
-
-<p>Improvements to Inspector's Properties Explorer.  It is now more tolerant of exceptions thrown while
-accessing properties.
-</p>
-
-<p>Streamlined the distribution by removing the source for documentation.
-</p>
-
-<pre>
-[ #480433 ] StatementAssembly - access to JBDC 2.0
-[ #469747 ] more flexible application parser
-[ #484184 ] JavaDoc error
-</pre>
-				
-				</section><section><title>Release 1.0.6</title>
-				
-				<p>Tapestry now uses <link href="http://jakarta.apache.org/ant">Ant</link>
-				as its build tool.  The GNU Makefile Java Build Environment has
-				been removed.
-				</p>
-
-				<p>The Tapestry Inspector now has a powerful Properties Explorer which allows
-				for dynamic navigation and display of an object's properties (similar
-				to what a debugger provides).
-				</p>
-
-				<p>Localization of context assets was broken in Tomcat; it now works
-				in both Tomcat and Jetty.
-				</p>
-
-				</section>
-				
-				<section><title>Release 1.0.5</title>
-				
-				<p>Added a mechanism to clear out pooled objects when they haven't been used
-				for some time.  The interface <link href="http://jakarta.apache.org/tapestry/doc/api/net/sf/tapestry/util/ICleanable.html">ICleanable</link>
-				has the details.
-				</p>
-
-				<p>Made a number of other efficiency improvements.  Particularily, the page loader now weeds
-				out informal parameters that can't be used (because they conflict with formal parameter names,
-				or because the component owns the attributes), preventing them from being added as component
-				bindings.  The old method was to weed out the unwanted parameters on every
-				render, which was more expensive.
-				</p>
-
-				<p>Improved the <link href="http://jakarta.apache.org/tapestry/doc/api/net/sf/tapestry/valid/NumericField.html">NumericField</link>
-				component to deal with null values in an intelligent manner.
-				</p>
-
-				<p>It is now possible to set properties of
-				<link href="http://jakarta.apache.org/tapestry/doc/DevelopersGuide/components.helper-beans.html">helper beans</link>.
-				</p>
-
-				<p>The full distribution now bundles 
-				<link href="http://jetty.mortbay.com">Jetty 3.1RC9</link>
-				and the Virtual Library is now compatible with
-				<link href="http://www.jboss.org">JBoss 2.4.0</link>.
-				</p>
-
-                </section>
-                
-                <section><title>Release 1.0.4</title>
-                
-                <p>Release 1.0.4 debuted the finished Tapestry Home and Virtual Library.</p>
-
-                
-</section>
-</body>
-</document>
diff --git a/3.0.4/doc/forrest/content/xdocs/new.xml b/3.0.4/doc/forrest/content/xdocs/new.xml
deleted file mode 100644
index 526f282..0000000
--- a/3.0.4/doc/forrest/content/xdocs/new.xml
+++ /dev/null
@@ -1,285 +0,0 @@
-<?xml version="1.0"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.2//EN" "./dtd/document-v12.dtd">
-<document>
-
- <header>
-  <title>Jakarta Tapestry - What's New</title>
- </header>
-
-<body>
-
-... or perhap's, "What's Old". These are release notes from earlier versions of Tapestry. More recent changes
-are in a different format, on the <link href="site:changes">Change Log page</link>.
-
-<section><title>Release 3.0-beta-1</title>
-<ul>
-<li>Major refurbishment of the Virtual Library example to use all the latest and greatest Tapestry facilities.</li>
-<li>Removed the "rows" and "columns" parameters from TextArea; use informal parameters "rows" and "cols" instead.</li>
-<li>Removed unused/unneeded exceptions <code>RollbackException</code> and <code>PageRecorderSerializationException</code>.</li>
-<li>The default for the <link href="http://jakarta.apache.org/tapestry/doc/ComponentReference/Hidden.html">Hidden</link> component is now to encode its parameter.</li>
-<li>Ugraded to OGNL 2.4.2.</li>
-<li><link href="http://jakarta.apache.org/tapestry/doc/ComponentReference/Shell.html">Shell</link> comp;onent now allows multiple stylesheets.</li>
-<li>Added a <link href="http://jakarta.apache.org/tapestry/doc/api/org/apache/tapestry/util/io/DataSqueezer.html">DataSqueezer</link> adaptor for
-<code>Enum</code> types.</li>
-<li>Switched over to using JBoss 3.0.6 for demos.</li>
-<li>Renamed method <code>generateAttributes()</code> to <code>renderInformalParameters()</code> in
-<link href="http://jakarta.apache.org/tapestry/doc/api/org/apache/tapestry/AbstractComponent.html">AbstractComponent</link>.</li>
-<li>Added support for the informal parameters of a component to be passed down to a contained component
-using the inherit-informal-parameters attribute. </li>
-<li>Added <link href="http://jakarta.apache.org/tapestry/doc/api/org/apache/tapestry/IRequestCycle.html">IRequestCycle</link>.activate() as a replacement for setPage(). 
-Besides setting the page to be rendered, it also invokes page.validate() and handles the page redirections.</li>
-<li>Added addValidateListener() and removeValidateListener()
-to <link href="http://jakarta.apache.org/tapestry/doc/api/org/apache/tapestry/IPage.html">IPage</link>.</li>
-<li><link href="http://jakarta.apache.org/tapestry/doc/api/org/apache/tapestry/util/io/DataSqueezer.html">DataSqueezer</link>: Squeezed strings are now always prefixed with 'S'</li>
-<li>Added mechanism for checking that super-class implementations of key methods are invoked.</li>
-<li>Added checks that <link href="http://jakarta.apache.org/tapestry/doc/api/org/apache/tapestry/IPage.html">IPage</link> methods
-<code>validate()</code> and <code>detach</code> are properly overriden by subclasses.</li>
-<li>Changed Form, Hidden and ListEdit so that all hidden fields are written out with the &lt;form&gt; tag.</li>
-<li>Added new features to the script specification, bumping its DTD to 1.3. It is now possible
-to generate page-unique ids from within the script (using the new <code>unique</code> attribute
-on <code>&lt;let&gt;</code>, as well as to
-render a block only once per page render (using <code>&lt;unique&gt;</code>)
-</li>
-<li>Integrated Per Norrman's vastly improved <link href="http://jakarta.apache.org/tapestry/doc/ComponentReference/DatePicker.html">DatePicker</link> component</li>
-</ul>
-
-<pre>
-[ 18340 ] ApplicationRuntimeException doesn't compile on jdk 1.3.
-[ 18336 ] Tapestry 2.4a5 - LOGGING images missing for Inspector component
-[ 18490 ] compile warning for Workbench 
-[ 18013 ] typo in EvenOdd javadoc
-[ 18607 ] Check for unimplemented abstract methods    
-[ 17904 ] Ongoing LGPL Issues 
-[ 19153 ] Easier way to override validation messages  
-[ 19263 ] Change error message for null parameter 
-[ 18880 ] DatePicker broken under Mozilla  
-</pre>
-
-</section>
-<section><title>Release 2.4-alpha-5</title>
-
-<ul>
-<li>Added some simple optimizations to keep the engine instance from being stored
-into the session unecessarily often.</li>
-<li>Fix NPE when image parameter of Image component is bound but value is null.</li>
-<li>Create a basic JSP tag library to allow JSPs to access Tapestry pages using the page and external services.</li>
-<li>Added support for primitive arrays, java.lang.Object[] and java.lang.String[] 
-for connected parameters.</li>
-<li>Added connected parameter support for missing primitive types byte and char</li>
-<li>Added support for primitive arrays, java.lang.Object[], and java.lang.String[] for declared properties.</li>
-<li>Replaced JFreeChart with JCharts, due to licensing considerations.</li>
-<li>Refactored to use Jakarta Digester to parse specifications.</li>
-<li>Changed specification and template parsers to track locations of specification objects and attach them 
-to runtime objects and exceptions for error reporting purposes.</li>
-<li>Severely refactored exceptions, removing many exception classes and flattening all others
- under ApplicationRuntimeException.</li>
-<li>Simplified the URL format, merging the "service" and "context" parameters together.</li>
-<li>Removed the "displayWidth" and "maxLength" parameters from TextField and ValidField
-(HTML attributes "size" and "maxlength", as informal parameters, are sufficient).</li>\
-<li>Added two new application extensions to allow page and component specifications and templates
-to be provided in non-standard ways (when not found using the default rules).</li>
-<li>Changed file upload to work using Jakarta Commons FileUpload (patch provided by Joe Panico).</li>
-<li>Added new parameter direction: <code>auto</code>, which creates a synthetic property backed by
- the binding.</li>
-</ul>
-
-<pre>
-[ 18249 ] file upload using Commons FileUpload 
-[ 17905 ] Link to mailing list and archives is wrong.  
-</pre>
-
-</section>
-<section><title>Release 2.4-alpha-4</title>
-
-<ul>
-<li><b>All packages have been renamed from <code>net.sf.tapestry</code> to <code>org.apache.tapestry</code></b>.</li>
-<li>Several non-ASL libraries (including Jetty) have been removed from both CVS and the distribution.  To
-build Tapestry and run the demos is now more involved; it requires obtaining several external dependencies.
-The Tapestry distribution is much smaller, however.  This was done for licensing reasons.
-Sorry.</li>
-<li>Expression bindings in HTML templates are now in the format
-<code><i>attribute</i>="ognl:<i>expression</i>"</code>.</li>
-<li>String bindings (to localized strings) in HTML templates are now in the format
-<code><i>attribute</i>="string:<i>key</i>"</code>.</li>
-<li>Allow &lt;set-property&gt; element of specification to specify the expression as an attribute or
-as wrapped character data.</li>
-<li>The interfaces for <link href="http://jakarta.apache.org/tapestry/doc/api/org/apache/tapestry/valid/IValidationDelegate.html">IValidationDelegate</link>,
- <link href="http://jakarta.apache.org/tapestry/doc/api/org/apache/tapestry/valid/IValidator.html">IValidator</link> and
-  <link href="http://jakarta.apache.org/tapestry/doc/api/org/apache/tapestry/valid/ValidatorException.html">ValidatorException</link>
-changed incompatibly.  This will only be an issue if you have created custom validation delegates or custom
-validators.</li>
-<li>Added methods to <link href="http://jakarta.apache.org/tapestry/doc/api/org/apache/tapestry/valid/IComponentStrings.html">IComponentStrings</link> for formatting localized strings
-with arguments.</li>
-<li>Remove ejb.jar and any direct dependencies on javax.ejb classes (application servers are responsible for properly replicating
-EJBObject and EJBHome instances).</li>
-<li>Added a <code>createRequestCycle()</code> method to 
-<link href="http://jakarta.apache.org/tapestry/doc/api/org/apache/tapestry/engine/AbstractEngine.html">AbstractEngine</link>.</li>
-<li>Moved the invocation of the 
-<link href="http://jakarta.apache.org/tapestry/doc/api/org/apache/tapestry/IMonitor.html">IMonitor</link> method  <code>serviceEnd()</code>
-to always occur after the invocation of <code>serviceException()</code>.</li>
-<li>The <link href="http://jakarta.apache.org/tapestry/doc/ComponentReference/Upload.html">Upload</link> component now works with the enclosing Form
-to automatically set the encoding type to <code>multipart/form-data</code>.  It is no longer necessary to set
-the <code>enctype</code> attribute of the Form.</li>
-<li>Removed the code related to making copies of persistent properties.</li>
-<li>Removed non-ASL libraries from CVS.  These files will need to be downloaded separately.</li>
-<li>Removed some of the old tutorials, leaving just the Workbench and Virtual Library as examples.</li>
-<li>Removed the "Demo" pages from the web site, until we find a stable home.</li>
-</ul>		
-	
-</section>
-<section><title>Release 2.4-alpha-3</title>
-
-<ul>
-<li>
-Reorganized the packaging into a binary distribution (which includes documentation) and a second,
-smaller, source-only distribution.</li>
-<li>Renamed the JARs, stripping off the "net.sf." prefix.</li>
-<li>Updated all examples to use the 1.4 Specification DTD.</li>
-<li>Refactored (severely) the relationship between services and link components, splitting
- the rendering portion of links into a separate interface.</li>
-<li>Upgrade to McKoi database 0.94h.</li>
-<li>Tapestry will now create properties for connected parameters, if the properties
- do not already exist (or are abstract).</li>
-<li>Renamed the <code>java-type</code> attribute of the <code>&lt;parameter&gt;</code> element (in component
- specifications) to <code>type</code> (for the 1.4 DTD).</li>
-<li>Allowed more elements to specify values as character data inside the element as an alternative
-to using a particular attribute (useful for complex OGNL expressions).</li>
-<li>Continued extending the JUnit test suite.</li>
-<li>Deprecated the <code>PageCleanupListener</code> interface and removed support for it.</li>
-</ul>
-		
-<pre>
-[ 665622 ] net.sf.tapestry.html.Frame uses old DOCTYPE
-[ 675882 ] option component generates invalid HTML
-[ 622691 ] Full release
-[ 679655 ] Upload component very slow on file uploads
-</pre>		
-		
-</section>
-<section><title>Release 2.4-alpha-2</title>
-
-<ul>
-<li>Made improvements to how Tapestry handles arrays of objects and scalars</li>
-<li>Upgrade demos to deploy into JBoss 3.0.4</li>   
-<li>Merge in changes from Tapestry 2.3</li>
-<li><code>&lt;binding&gt;</code> elements may now specify the expression as the parsed data
-instead of the expression attribute</li> 
-<li>The template extension may now be overriden using the configuration property <code>net.sf.tapestry.template-extension</code></li>
-<li>Added support for declarative transient and persistent properties via <code>&lt;property-specification&gt;</code> element in page and component specifications.  Tapestry will create (on the fly) a subclass with the necessary accessor methods and fields, as well as any necessary notification and cleanup methods. </li>
-</ul>
-
-<pre>
-[ 594878 ] Deploy Tapestry into JBoss 3.0.4
-[ 672743 ] Pages Implementing Listeners cause NPE
-</pre>
-
-</section>
-<section><title>Release 2.4-alpha-1</title>
-
-<ul>
-<li>
-Added support for specifying expressions in the component template.  Expressions
-are specified as attributes with the format "<code>[[ <i>expression</i> ]]</code>".
-The brackets and leading and trailing whitespace are removed.
-Expressions specified this way are the equivalent of the
-<code>&lt;binding&gt;</code> 
-        element in a specification. 
-</li>
-<li>
-Tapestry now supports <i>implicit components</i>.  Implicit components are
-declared exclusively in the containing component's template (instead of in
-the containing component's specification) using a special
-<code>jwcid</code> syntax:
-<code>@<i>type</i></code> (for anonymous components) or
-<code><i>id</i>@<i>type</i></code> (for named components). Implicit 
-        components are especially useful for components that take no parameters, 
-        but may also make use of template expressions. 
-</li>
-<li>
-Added support for the <code>&lt;listener-binding&gt;</code> element in page 
-and component specifications.  This allows a listener method to be provided,
-directly within the specification, as a script written in a 
-<link href="http://jakarta.apache.org/bsf">BSF</link>-supported language. 
-</li>
-<li>
-A number of non-backwards compatible changes were made to several
-framework interfaces to support more flexibility on where specifications
-and templates may be located, but these should not affect the overwhelming
-majority of Tapestry users.  In addition, private assets and context assets
-may also be relative. <br/>
-Private assets are relative to the component 
-specification which declares them, context assets are relative to the 
-application servlet (within the servlet context). 
-</li>
-<li>
-Moved the Inspector out of the framework and 
-into the contrib library. 
-</li>
-<li>
-Created smarter checks for stale sessions for 
-ActionLink, DirectLink and Form. The action and direct services used by
-the components now encode whether the application was stateful into the
-URL. The stateful check only occurs if the application was stateful when
-the URL was rendered. 
-</li>
-<li>
-Changed Form to record the exact ids generated during the render (it used to just store the count).
-This allows a more useful exception message to be generated 
-for the
-<link href="http://jakarta.apache.org/tapestry/doc/api/org/apache/tapestry/StaleLinkException.html">StaleLinkException</link>. 
-</li>
-<li>
-Changed the default StaleLink page to have a 
-        message property, and to display the message from the 
-        StaleLinkException. 
-</li>
-<li>
-Components (and even pages) can now implement page listener interfaces
-(<link href="http://jakarta.apache.org/tapestry/doc/api/org/apache/tapestry/event/PageDetachListener.html">PageDetachListener</link>,
-<link href="http://jakarta.apache.org/tapestry/doc/api/org/apache/tapestry/event/PageRenderListener.html">PageRenderListener</link> or
-<link href="http://jakarta.apache.org/tapestry/doc/api/org/apache/tapestry/event/PageCleanupListener.html">PageCleanupListener</link>)
-and <code>finishLoad()</code> will <i>automatically</i> add them as a listener to the 
-        corresponding page events. 
-</li>
-<li>
-The entire mechanism used to store persistant 
-        page properties has been revised. 
-</li>
-<li>
-Implemented a number of improvements to
-<link href="http://jakarta.apache.org/tapestry/doc/api/org/apache/tapestry/util/pool/Pool.html">Pool</link>
-to support greater flexibility in managing objects stored into and discarded
-from the pool.
-</li>
-
-</ul>
-
-<pre>
-[ 653358 ] IPage.getName() == qualified name
-[ 608768 ] Changes saved AFTER IPage.detach()
-</pre>
-
-</section>
-<section><title>More ...</title>
-<p>
-<link href="more_new.html">Earlier entries</link>
-</p>
-<!-- END Content -->
-</section>
-</body>
-</document>
diff --git a/3.0.4/doc/forrest/content/xdocs/problems.xml b/3.0.4/doc/forrest/content/xdocs/problems.xml
deleted file mode 100644
index 053a33d..0000000
--- a/3.0.4/doc/forrest/content/xdocs/problems.xml
+++ /dev/null
@@ -1,137 +0,0 @@
-<?xml version="1.0"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.2//EN" "./dtd/document-v12.dtd">
-<document>
-
- <header>
-  <title>Jakarta Tapestry - Reporting Problems</title>
- </header>
-
-<body>
-
-
-		
-<p>
-So, you've hit a problem with Tapestry and you want help, what do you do? You may need help, and we (the Tapestry
-community) want to help you, but the first step is to make sure you really have a problem.
-</p>
-
-		
-<section><title>Things To Check First</title>
-<p>
-Has your environment changed recently? Did you change JDKs, operating systems, application servers or change to a new
-version of Tapestry? The most common cause of problems is Java's special version of <i>DLL hell</i>: conflicting versions
-of the same JAR file on the classpath. Perhaps you upgraded to a new version of Tapestry and some of the old JAR files
-are still hanging around. Perhaps an innocuous change to your build file no longer builds your WAR files correctly.
-Take a moment to check the classpath.
-</p>
-</section>
-
-<section><title>Search For The Answer</title>
-
-<p>
-New users often hit the same problems; likely, your problem has been reported and solved already.	
-Check the online documentation: there's a <link href="site:faq">Frequently Asked Questions list</link>	
-to check, and more information on the <link href="site:wiki">Wiki</link>. A quick check at
-<link href="http://www.google.com">Google</link> is also worthwhile (the mailing list discussions are mirrored
-in many places).
-</p>
-</section>
-
-<section><title>Post Your Question</title>
-<p>
-Next, you want to <link href="http://www.catb.org/~esr/faqs/smart-questions.html">learn how to ask questions properly</link>. 
-This is <em>very important</em> -- volunteers are taking time off from thier own jobs, or own spare time, to answer <em>your</em> question.
-<em>You aren't owed anything.</em> Questions get answered if they are easy or if they are interesting. Questions that are lacking in detail are easier to ignore
-than to work on. Questions that are antagonistic get ignored. Questions that have been covered to death in 
-the <link href="site:doc">documentation</link>, 
-the <link href="site:faq">FAQ</link>, the 
-<link href="site:wiki">Wiki</link> or 
-<a href="http://www.manning.com/lewisship/">The Book</a> will likely be ignored.
-</p>
-
-<p>
-Subscribe to the Tapestry user mailing list (tapestry-user@jakarta.apache.org) and post your message there <em>and only there</em>.
-Sending mail directly to a Tapestry developer will, at most, result in a curt reminder to use the user mailing list. 
-</p>
-
-<p>
-Tapestry provides a <em>wealth</em> of information when errors occur.  Don't just say "it broke": <em>cut and past the exception report</em> into your message.
-If there's no error message or exception report, tell us <em>exactly</em> what behavior occured, and <em>exactly</em> what behavior you expected.
-</p>
-
-<p>
-We'll need to know your environment:
-<ul>
-	<li>Tapestry version</li>	
-	<li>JDK version</li>
-	<li>Operating System</li>
-	<li>Application Server</li>
-</ul>	
-</p>
-
-<p>
-Finally, 	for most non-trivial problems, we'll need to know what was in your HTML template and page (or component) 
-specification, and probably your Java class as well. For the best, and fastest,
-response, post as much of this as possible.
-</p>
-
-</section>
-
-<section>
-	<title>Problem Resolution</title>	
-	
-<p>
-In farily rare cases, you may have uncovered an actual problem. In other cases, we (the Tapestry developers)
-may discuss an improvement to the framework to address your situtation. In <em>either case</em>, it is incumbent
-upon you to add a bug or improvement request into the 
-<a href="http://jakarta.apache.org/site/bugs.html">Bugzilla</a> issue tracking system. If it doesn't go into Bugzilla,
-its very unlikely that anything further will happen. Think of this tiny effort as
-your payment for all the free software and support we've provided you with.
-</p>
-</section>
-
-<section>
-	<title>Submitting Patches</title>	
-	
-<p>
-If you have a bug you want fixed, you may want to fix it yourself!  This is an excellent opportunity to
-get more involved in Tapestry and the Tapestry community. Creating a patch and getting it applied are two different things, however.
-
-</p>
-
-<p>
-Don't post your patch to the mailing list ... there's any number of reasons that attachments will be lost or deleted.
-Find (or create) a Bugzilla issue and add the patch as a Bugzilla attachment.
-</p>
-
-<p>
-A patch is <em>not</em>	an updated file: a patch is a difference file, usually generated with the <code>cvs diff</code> command.
-The easier you make it for us, the more likely it is that your patch will be applied.
-<ul>
-<li>A single patch (covering multiple files) is easier than a scattering of individual patches</li>
-<li>A real patch (generated by CVS) is <em>vastly</em> preferable
-	 to attaching changed source files</li>
-<li>A patch generated at the project root is preferable to lower-level patches (it takes the guesswork out of applying the patch).</li>
-</ul>
-</p>
-
-</section>
-
-</body>
-</document>
diff --git a/3.0.4/doc/forrest/content/xdocs/quotes.xml b/3.0.4/doc/forrest/content/xdocs/quotes.xml
deleted file mode 100644
index 34f5c75..0000000
--- a/3.0.4/doc/forrest/content/xdocs/quotes.xml
+++ /dev/null
@@ -1,391 +0,0 @@
-<?xml version="1.0"?>
-<!-- $Id$ -->
-<!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.2//EN" "./dtd/document-v12.dtd">
-<document>
-
- <header>
-  <title>Jakarta Tapestry - Quotes</title>
- </header>
-
-<body>
-
-
-<p>This page contains quotes from the Tapestry community, appearing on the 
-Tapestry mailing lists
-and in online forums such as 
-	<link href="http://theserverside.com/home/thread.jsp?thread_id=12750" target="_top">TheServerSide.com</link>.
-</p>
-<p>
-<small>These entries have been editted for grammar and readability.</small>
-</p>
-
-
-<section>
-		<title>Dorothy Gantenbein</title>
-
-<p>
-We used Tapestry to implement the monitoring and administration console
-for
-a wireless network management product.  Initially, we implemented a
-demonstration using standard JSP but we realized that JSPs presented
- difficulties for implementation.  Some of our requirements were a very
-aggressive development schedule, integration with EJB 2.0 beans, ability
-to
-write modular reusable components, very reliable, easy code maintenance,
- internationalization, and of course easier debugging than the generated
-JSP
-code.  Tapestry met all of our requirements and helped us proceed onto a
- successful release.
-</p>
-<p>
-After reading the tutorial and reviewing the examples, we started with
-writing simple components.  We started with a StatusImage
-component.  The
-GIF for the status image should be localized and selected based on
-standard
- network status states.  Another example of a simple component was a
-validating IP address 
-text field.  The IP address field uses the Tapestry
-validation framework.  After that, we moved onto more complex components
-like the StatusTable shown in the figure.  
-This table has a varying number of rows depending on the configuration of the product using the Tapestry
-Foreach component (very cool).  This StatusTable makes use of another
- essential Tapestry component, the Conditional.  Looking at the Actions
-columns, the set of actions is conditional based on the row.  All this
-logic
- happens in the Java class and is not embedded into our HTML making
-maintenance much easier.
-</p>
-
-<p>
-Finally, we integrated servlets and JSPs into our Tapestry web
-application.
- We needed servlet integration for charting and JSPs for reporting.  With
-all
- this flexibility, we could use each technology where they worked best.
-
-Overall, all of Tapestry's flexibility along with its clean
-object-oriented
- architecture made our web interface shine.
-</p>
-
-
- <link href="images/success/edit-form.gif">Screen shot 1</link>
- <link href="images/success/status-table.gif">Screen shot 2</link>
-
-
-</section>
-
-<section>
-	<title>Jason Cox</title>	
-	
-<p>
-When I see things like "I can use Struts+Tiles+JSP 2.0 Taglibs" I kind of chuckle.
- While you have to learn three different, albeit related, technologies 
- I just have to use Tapestry. With this kind of mindset, is it any wonder 
- companies are looking to ASP for their front-ends? 
-</p>
-	
-<p>
-	When I took my current position, I decided to use ASP to develop the front-end
-	 piece for similar reasons ... 
-
-	I was fortunate to find Tapestry before I started development in ASP.
-	 Not only did it allow for me to meet my goals, but I actually have fun developing now. 
-	 I used to spend at least a day formatting and introducing the 
-	 proper presentation logic into an application. What took a day 
-	 now takes maybe a couple of hours. Performance is excellence, the MVC design couldn't be 
-	 better, and no messy JSP compilations to worry about. 
-	</p>
-	
-<p>To me, simplicity with functionality is the greatest achievement of the Tapestry framework.
-</p> 
-</section>
-
-<section>
-		<title>Paul Witt</title>
-<p>
-Of all the web presentation frameworks out there, Tapestry is the most elegant. </p>
-
-<p>
-For me ELEGANT is the goal of a programmer/developer (I've been around awhile). 
-When, in your MVC framework, VIEW is pure HTML, and your CONTROL - controls (wow - nice control; exception/debugger/session handlers they are -- 
-well, elegant) and the link to your model is - often as simple (elegant) as get/set, 
-then the philosophy of web applications has moved to a new and cleaner level.
-</p>
-
-<p>
-But elegance is a moving target, and Tapestry, with this latest release 3.0, 
-puts me not only on board (I already am) but I've fastened my seatbeat, and I'm ready for takeoff.
-</p>
-
-
-</section>
-
-<section>
-		<title>Miles Egan</title>
-
-<p>
-The learning curve for Tapestry is still somewhat steep ... but I'm 
-really enjoying it now that I'm beginning to get it and, most importantly, 
-I don't feel like I'm writing much, if any, superfluous code.  It really seems 
-like all the code directly contributes to functionality and that there's very little boilerplate. 
-One of the hallmarks of a good framework, in my opinion.
-</p>
-
-
-</section>
-
-<section>
-		<title>Andrus Adamchik </title>
-<p>
-You know, Tapestry in fact is different from your average JSP taglib. 
-Anyone who had a chance to use component-based web frameworks 
-(like WebObjects, I don't know any other in this category) would know what I 
-am talking about. This is a *different* and highly powerful and convenient way of doing things.
-</p>
-<p>
-Surprisingly enough with so many web application layers out there, Tapestry seems to be the only 
-one (OpenSource, that is) that allows you to create a set of reusable components 
-and build the design around this. The level of reuse is unmatched with anything JSP. 
-In many ways it is even stronger than commercial implementation of the same design idea (WebObjects). 
-In particular it makes it extremely easy for graphics designers to modify HTML, since dynamic content 
-does not use *any* custom tags. Also the amount of code (and time) it 
-takes to hook up an average model layer to the HTML presentation is so small 
-that at first you may think you've missed something along the way :-).
-</p>
-
-</section>
-
-<section>
-		<title>Chris Wilson</title>
-I've said it before and I'll say it again... 
-You owe it to yourself to take a serious look at Tapestry. 
-It's the most exciting model in Java web development 
-I've seen in a long time. It really allows you to build applications--not web sites--that "execute on the web." Very cool stuff. 
-
-
-</section>
-
-<section>
-		<title>David Solis</title>
-	
-<p>
-Tapestry is the best solution to the presentation tier and it provides a clean separation of content and developer code. 
-First, I extended it for WAP support, then I developed several WAP components and 
-finally I developed a complete email application for WAP in record time. 
-</p>
-
-</section>
-
-<section>
-		<title>Jim Birchfield</title>
-<p>
- When using Struts or Velocity, in order to see what the finished
-page will look like, our graphic designers
-must assemble the application, deploy it ... they
-basically lose all the luxuries of WYSIWYG development ...
-I spent 30 minutes or so with one of our graphic designers here, 
-and he was giddy at what I showed him as I redesigned one of our smaller 
-apps using Tapestry. 
-</p>
-<p>
-Bottom line for us is this: We have graphic designers and we have developers, 
-and I don't want them to necessarily have to know each others' job to get things done.
-Tapestry is the best framework I have seen that offers this sort of separation. </p>
-
-</section>
-
-<section>
-		<title>Jiri Lundak</title>
-
-<p>
-As a 'lay developer' using Tapestry I can only recommend it. 
-We have built a content management system
-based on Tapestry, plus multiple sites that are now powered by it. 
-Thanks to its component architecture, we 
-are able to publish any kind of our metadata-driven business objects with just 
-a handful of generic, highly dynamic pages, using customizable components. 
-All business logic is encapsulated in business objects 
-and services, so there is not really much logic in the presentation layer besides the navigation parts. 
-</p>
-<p>
-The learning curve is not flat, but is really worth 
-the effort. If you need to bring a dynamic web-app to the browser 
-Tapestry offers many predefined and stable components to build on. 
-We have gone with Tapestry and we will continue to use it
-in the next couple of projects needing a web-interface, too. 
-</p>
-
-
-</section>
-
-<section>
-		<title>Malcom Edgar</title>
-
-<p>
-I just wanted to send you a quick note of appreciation for your Tapestry 
-framework. It is a truly original and innovative approach.
-</p>
-<p>
-While the learning curve is steep compared to thinner webapp frameworks, I 
-have found it is well worth the effort. The amount of code I am having to 
-write is greatly reduced and I am achieving a much greater level of reuse.
-</p>
-
-
-</section>
-
-
-<section>
-		<title>Mind Bridge</title>
-<p>
-I just want to second the positive comments about Tapestry. 
-We have evaluated a lot of frameworks in the past couple of years, 
-and in our opinion Tapestry is the only open source Java framework 
-at the moment that provides everything necessary for Web-centric component 
-oriented development. 
-</p>
-<p>
-The most important feature of Tapestry is 
-indisputably the ability to package common 
-Web functionality into components that can then 
-be effortlessly reused again and again. Building a 
-Tapestry application is pretty much like playing with 
-Lego bricks -- all you have to do is just fit the different 
-pieces together and not worry about how each brick would 
-work internally or how the different pieces would interract 
-with one another (an OO approach at its best). As a result, 
-after gaining some experience and accumulating a set of components, 
-one can build incredibly complex Web applications quickly and easily, 
-and yet be assured that those applications are of a very high quality. 
-</p>
-<p>
-Tapestry has another major advantage as well -- 
-it provides very clean separation between presentation and logic 
-(cleaner than that of the most commonly used frameworks). The 
-design of its templates is also very mindful of the actual web 
-development process, accomodates very nicely the work of the
-web designers from the start, and allows them to play along
-even in later stages of the application development. This, 
-again, is something rarely found in the other frameworks. 
-</p>
-
-<p>
-I will mention just one more superb feature -- the Tapestry design 
-and APIs provide a huge number of extension points that allow you to 
-customize the behaviour of the framework almost to no 
-end. In order to achieve a specific goal for one customer we twisted the 
-behaviour of the system so much, that Howard would faint if he sees 
-it. In any case, being able to easily modify and extend specific elements 
-of the framework is a major advantage. 
-</p>
-<p>
-This may sound a bit like an advertisement, but it is not -- 
-we are just very satisfied users. We've 
-got a significant increase in productivity, we've got increased quality,
-we've got happy web designers, and we've 
-put an end to the repetitive operations -- it would be hard to think 
-of a better scenario. 
-</p>
-<p>
-If you are experienced in OO and/or components and care about 
-Web development, I would suggest that you have a look at Tapestry.
-I would be very surprised if you do not find it 
-a far more viable solution for your needs than JSP or Struts, 
-for example. 
-</p>
-
-
-</section>
-
-
-<section>
-		<title>Luis Neves</title>
-<p>
-Actually what drove me to Tapestry wasn't the saved development time, it was 
-the sheer beauty of it :-)
-</p>
-<p>
-I come from an ASP/VB background and I was getting sick and tired of that mess, designers 
-constantly asking me "Is it OK to move this part of code to the bottom 
-of the page?" , "Could you take a look and see if I didn't mess anything 
-when I added the picture?", "Ohh, I'm sorry. that was an include file, 
-I thought it was just a comment" ... well you get the picture, and tools like 
-Dreamweaver only help to some extent. The
-perfect separation of roles was what drew me to Tapestry ... the rest of the things 
-(and there are a lot of them) were the iceing on the cake.
-</p>
-
-
-</section>
-
-<section>
-		<title>Adam Greene</title>
-
-<p>
-The company that I work for did a research project with the 
-National Research Council of Canada, and we spent several months reviewing 
-web services, J2EE, and Database systems for a technical risk project that we were doing. Out of that we learned 3 things: 
-</p>
-<ol>
-<li>Web services were immature. </li>
-<li>J2EE was overrated. </li>
-<li>That JSP and anything else that stuck anything 
-        other than HTML into an HTML file was not only counter-productive but 
-        dangerous to the life of the project.</li>
-</ol>
-
-
-<p>
-I will give you an example. We have a "legacy" project that is done in 
-JSP (all of our development efforts have moved to Tapestry). We had to perfect the 
-logic of the project while the text and look of the project was still in flux. Everytime our 
-graphics guys fixed the pages, code would get damaged, or vice versa. Everytime 
-our graphics guys created new pages, our programmers would have to go mark 
-up the pages with code and could not work on the logic of the given page until after 
-our graphics guy had finished it. On top of that the whole system has to be translated 
-into French. Which means that we not only have doubled our work, we have actually ended up 
-tripling it, pushing back deadlines, etc. If it had not been for the fact that we "inherited" the code, 
-it would have been done in Tapestry to start with, because: 
-</p>
-
-<ol>
-<li>Our graphics designers could do their thing without disturbing the work of our programmers. </li>
-<li>The programmer wouldn't have to wait for the designers to finish a page to start work on it. 
-Many times our programmers work with pages that are simple white with text and form fields and after it works, 
-our designers integrate the pages together. </li>
-<li>Localizing for French simply involves 
-copying the existing layout, replacing English text with French, and saving it with a new file extension ... no need to recreate the code of a JSP. </li>
-<li>If our client doesn't like the look, it is a 
-simple matter of changing it, no code is disturbed, no code is broken, 
-it will work when it is done being modified without our programmers even 
-looking at it. (And our designers don't even know Java....)</li>
-</ol>
-
-<p>
-If you are using a language or framework that puts proprietary (non-HTML) code into your
-templates or HTML files, I seriously suggest that you take a look at the approach that Tapestry 
-takes as you will probably find that it is quite revolutionary in its approach to web development (as stated above).
-</p>
-<p>
- So take it from someone who just researched existing and upcoming technology for three months, Tapestry 
-frags the snot out of frameworks like JSF, Struts, and the like. 
-</p>
-
-<p>
-I will give Apache one thing though, they have built a lot of production quality 
-software that beats even Microsoft. We added Torque to Tapestry to 
-fill a void in the database support (Tapestry by itself has no database support) because Tapestry's model 
-fit so perfectly that I can actually create a web page to display all the records in a table using only 
-14 lines of Java code, of which less than half (only 6 lines of code) are actually 
-hand written (the rest are auto-generated by Eclipse). So I guess that is another point 
-for Tapestry: Integration of other packages / APIs that support a Java Beans 
-style is a no-brainer. No taglibs need to be written, no new scripting needs to be created, it simply works. 
-</p>
-
-</section>
-
-
-</body>
-</document>
diff --git a/3.0.4/doc/forrest/content/xdocs/site.xml b/3.0.4/doc/forrest/content/xdocs/site.xml
deleted file mode 100644
index bbb6c47..0000000
--- a/3.0.4/doc/forrest/content/xdocs/site.xml
+++ /dev/null
@@ -1,77 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!--
-
-$Id$
-
-Forrest site.xml
-
-This file contains an outline of the site's information content.  It is used to:
-- Generate the website menus (though these can be overridden - see docs)
-- Provide semantic, location-independent aliases for internal 'site:' URIs, eg
-<link href="site:changes"> links to changes.html (or ../changes.html if in
-  subdir).
-- Provide aliases for external URLs in the external-refs section.  Eg, <link
-  href="ext:cocoon"> links to http://xml.apache.org/cocoon/ 
-
-See http://xml.apache.org/forrest/linking.html for more info
--->
-
-<site label="Tapestry" href="" xmlns="http://apache.org/forrest/linkmap/1.0" tab="">
-    <tapestry label="Tapestry">
-    <home label="Home" href="index.html"/>
-    <api label="API" href="doc/api/index.html"/>
-    <quotes label="Quotes" href="quotes.html"/>
-    <doc label="Documentation" href="doc.html"/>
-    <comp-ref label="Component Reference" href="doc/ComponentReference/index.html"/>
-    <faq label="FAQ" href="faq.html"/>
-    <todo label="TODO" href="todo.html"/>
-    <changes label="Change Log" href="changes.html"/>
-    <wiki label="Wiki" href="http://wiki.apache.org/jakarta-tapestry/"/>
-    <dev label="Developers" href="dev.html"/>
-    <clover label="Clover Report" href="doc/clover/index.html"/>
-    <new label="What's New" href="new.html"/>    
-    </tapestry>
-    
-    <project label="Project">
-        <item label="Mailing Lists"     href="http://jakarta.apache.org/site/mail2.html#tapestry"/>
-        <item label="Bug Database"     href="http://issues.apache.org/jira/secure/BrowseProject.jspa?id=10573"/>
-        <item label="CVS Repositories"      href="http://jakarta.apache.org/site/cvsindex.html"/>
-    </project>
-    
-    <info label="Useful Information">
-    	<item label="Reporting Problems" href="problems.html"/>
-        <item label="Get Involved"          href="http://jakarta.apache.org/site/getinvolved.html"/>
-        <item label="Reference Library"     href="http://jakarta.apache.org/site/library.html"/>
-        <item label="Apache FAQ"                href="http://apache.org/foundation/faq.html"/>
-        <item label="Tapestry and HiveMind Blog"
-        	href="http://howardlewisship.com/blog/"/>
-    </info>
-    
-    <downloads label="Downloads">
-      <item label="Binary" href="http://jakarta.apache.org/site/binindex.cgi#tapestry-milestone"/>
-      <item label="Source" href="http://jakarta.apache.org/site/sourceindex.cgi#tapestry-milestone"/>
-    </downloads>
-    
-    <related label="Related Projects">
-    	<item label="Spindle" href="http://spindle.sourceforge.net/"/>
-    	<item label="Tacos" href="http://sf.net/projects/tacos/"/>
-    </related>  
-
-	<!-- Temporarily removed whole site stuff due to build problems. -->
-	
-</site>
diff --git a/3.0.4/doc/forrest/content/xdocs/tabs.xml b/3.0.4/doc/forrest/content/xdocs/tabs.xml
deleted file mode 100644
index ffb8ade..0000000
--- a/3.0.4/doc/forrest/content/xdocs/tabs.xml
+++ /dev/null
@@ -1,41 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE tabs PUBLIC "-//APACHE//DTD Cocoon Documentation Tab V1.0//EN" "http://apache.org/forrest/dtd/tab-cocoon-v10.dtd">
-
-<!-- Tetsuya left these as 'James' and I don't know what that means! -->
-
-<tabs software="James"
-  title="James"
-  copyright="James"
-  xmlns:xlink="http://www.w3.org/1999/xlink">
-
-  <!-- The rules are:
-    @dir will always have '/@indexfile' added.
-    @indexfile gets appended to @dir if the tab is selected. Defaults to 'index.html'
-    @href is not modified unless it is root-relative and obviously specifies a
-    directory (ends in '/'), in which case /index.html will be added
-    If @id's are present, site.xml entries with a matching @tab will be in that tab.
-  -->
-
-  <tab id="" label="Tapestry" dir="" indexfile="index.html"/>
-  <!-- Add new tabs here, eg:
-  <tab label="How-Tos" dir="community/howto/"/>
-  <tab label="XML Site" dir="xml-site/"/>
-  -->
-  
- </tabs>
diff --git a/3.0.4/doc/forrest/resources/favicon.ico b/3.0.4/doc/forrest/resources/favicon.ico
deleted file mode 100644
index 9c23daf..0000000
--- a/3.0.4/doc/forrest/resources/favicon.ico
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/forrest/resources/images/LinePrecise.png b/3.0.4/doc/forrest/resources/images/LinePrecise.png
deleted file mode 100644
index 5c023bd..0000000
--- a/3.0.4/doc/forrest/resources/images/LinePrecise.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/forrest/resources/images/LinePrecise_thumb.png b/3.0.4/doc/forrest/resources/images/LinePrecise_thumb.png
deleted file mode 100644
index d0dc640..0000000
--- a/3.0.4/doc/forrest/resources/images/LinePrecise_thumb.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/forrest/resources/images/Tapestry-Banner.png b/3.0.4/doc/forrest/resources/images/Tapestry-Banner.png
deleted file mode 100644
index a986059..0000000
--- a/3.0.4/doc/forrest/resources/images/Tapestry-Banner.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/forrest/resources/images/jakarta-banner.png b/3.0.4/doc/forrest/resources/images/jakarta-banner.png
deleted file mode 100644
index da328b9..0000000
--- a/3.0.4/doc/forrest/resources/images/jakarta-banner.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/forrest/resources/images/jakarta-logo.svg b/3.0.4/doc/forrest/resources/images/jakarta-logo.svg
deleted file mode 100644
index b64c755..0000000
--- a/3.0.4/doc/forrest/resources/images/jakarta-logo.svg
+++ /dev/null
@@ -1,777 +0,0 @@
-<?xml version="1.0" standalone="no"?>

-<!-- ========================================================================= -->

-<!-- Copyright (C) The Apache Software Foundation. All rights reserved.        -->

-<!--                                                                           -->

-<!-- This software is published under the terms of the Apache Software License -->

-<!-- version 1.1, a copy of which has been included with this distribution in  -->

-<!-- the LICENSE file.                                                         -->

-<!-- ========================================================================= -->

-<!-- ========================================================================= -->

-<!-- Test description here                                                     -->

-<!--                                                                           -->

-<!-- @version $Id: apache-incubator-source.svg,v 1.1 2003/10/16 17:41:10 nicolaken Exp $ -->

-<!-- ========================================================================= -->

-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN"

-"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd" [

-	<!ENTITY st0 "fill-rule:nonzero;fill:#D9D9D9;stroke:#D9D9D9;stroke-width:0.5956;stroke-miterlimit:4;">

-	<!ENTITY st1 "fill:url(#AIgd2);">

-	<!ENTITY st2 "fill:url(#AIgd3);">

-	<!ENTITY st3 "fill:url(#AIgd4);">

-	<!ENTITY st4 "fill:url(#AIgd6);">

-	<!ENTITY st5 "fill:url(#AIgd8);">

-	<!ENTITY st6 "fill-rule:nonzero;fill:#D9D9D9;stroke:#D9D9D9;stroke-width:0.254;stroke-miterlimit:4;">

-	<!ENTITY st7 "fill:url(#AIgd1);stroke:#000000;">

-	<!ENTITY st8 "fill:url(#AIgd10);">

-	<!ENTITY st9 "fill:url(#AIgd11);">

-	<!ENTITY st10 "fill:url(#AIgd16);">

-	<!ENTITY st11 "fill:url(#AIgd18);">

-	<!ENTITY st12 "fill:url(#AIgd19);">

-	<!ENTITY st13 "fill:url(#AIgd31);">

-	<!ENTITY st14 "fill:url(#AIgd35);">

-	<!ENTITY st15 "fill:url(#AIgd36);">

-	<!ENTITY st16 "fill:url(#AIgd38);">

-	<!ENTITY st17 "fill:url(#AIgd41);">

-	<!ENTITY st18 "fill:url(#AIgd42);">

-	<!ENTITY st19 "fill:url(#AIgd52);">

-	<!ENTITY st20 "fill:url(#AIgd69);">

-	<!ENTITY st21 "fill:url(#AIgd71);">

-	<!ENTITY st22 "fill:url(#AIgd72);">

-	<!ENTITY st23 "fill:#000000;stroke-width:0.5956;">

-]>

-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" id="body" xml:space="preserve" 

-      width="350" height="68">

-<defs>

-     <filter id="medGlow" x="-5%" y="-5%" width="110%" height="110%">

-       <feGaussianBlur in="SourceGraphic" stdDeviation="2.0" result="glowSrc"/>

-       <feComponentTransfer in="glowSrc"  result="glowingGraphic">

-         <feFuncA type="linear" slope="3"/>

-       </feComponentTransfer>

-     </filter>

-</defs>

-<rect id="background" x="0" y="0" width="100%" height="100%" style="fill:white"/>

-<g transform="translate(0,0) scale(1, 1)">

-<g transform="translate(168,0) scale(-1, 1)">

-<g id="Feather_x0020_shadow" style="filter:url(#medGlow)" transform="translate(-0.5,-3.5)">

-	<path style="&st0;" d="M0.281,44.304c13.561-1.867,63.613-4.392,85.943-8.05c17.961-2.937,35.502-8.285,52.242-13.9c4.328-1.453,11.991-4.434,16.896-7.07c3.104-2.373,10.571-5.889,12.606-9.222c-32.45,15.407-45.513,19.649-83.582,27.354

-		c-15.436,3.169-71.617,7.72-84.105,10.888z"/>

-	<path style="&st6;" d="M48.301,50.277l1.454,0.498l1.418,0.119l1.417-0.23l1.417-0.574l1.379-0.766l1.38-0.994l1.305-1.145l1.301-1.227l1.228-1.26l1.149-1.266l1.111-1.225l1.035-1.148l0.958-0.957l0.881-0.763L66.5,38.84l0.689-0.228l-0.576,0.036l-0.611,0.038

-		l-0.689,0.077l-0.688,0.074l-0.69,0.078l-0.689,0.076l-0.689,0.038l-0.612,0.076l-0.957,0.88l-0.921,0.841l-0.805,0.842l-0.729,0.844l-0.727,0.801l-0.688,0.805l-0.652,0.764l-0.691,0.729l-0.688,0.727l-0.729,0.65l-0.767,0.65l-0.882,0.611l-0.919,0.576

-		l-1.034,0.535l-1.149,0.496l-1.302,0.42z"/>

-	<path style="&st6;" d="M43.551,50.082l1.688,0.271l1.569,0.037l1.455-0.15l1.377-0.344l1.265-0.535l1.151-0.652l1.148-0.766l1.034-0.879l1.035-0.918l0.957-0.994l0.959-1.072l0.921-1.033l0.956-1.033l0.96-1.033l0.958-0.955l0.995-0.881l-0.381,0.037h-0.423

-		l-0.384,0.039l-0.419,0.037l-0.424,0.037l-0.421,0.078l-0.42,0.035l-0.42,0.041l-0.421,0.037l-0.461,0.037l-0.422,0.078l-0.459,0.037l-0.459,0.037l-0.46,0.037h-0.46l-0.459,0.039l-0.347,0.535l-0.42,0.652l-0.537,0.764l-0.575,0.805l-0.69,0.881l-0.729,0.879

-		l-0.766,0.918l-0.805,0.879l-0.844,0.844l-0.84,0.805l-0.885,0.727l-0.842,0.611l-0.844,0.496l-0.843,0.346l-0.804,0.189h-0.768z"/>

-	<path style="&st6;" d="M40.411,50.119l0.958,0.115l0.919,0.076l0.881-0.037l0.881-0.152l0.882-0.189l0.843-0.344l0.841-0.422l0.883-0.574l0.882-0.65l0.882-0.764l0.882-0.92l0.919-0.994l0.958-1.188l0.997-1.301l1.034-1.416l1.074-1.607l-0.651-0.002l-0.613,0.039

-		l-0.614,0.076l-0.612,0.076l-0.611,0.078l-0.613,0.072h-0.688h-0.727l-0.616,0.613l-0.573,0.65l-0.576,0.613l-0.574,0.688l-0.575,0.65l-0.535,0.689l-0.576,0.648l-0.539,0.691l-0.572,0.65l-0.574,0.65l-0.612,0.65L43.094,47.9l-0.65,0.572l-0.652,0.574l-0.65,0.574

-		l-0.729,0.498z"/>

-	<path style="&st6;" d="M37.081,49.96l0.728,0.387l0.802,0.154l0.807-0.117l0.842-0.342l0.844-0.5l0.881-0.689l0.88-0.764l0.884-0.916l0.841-0.959l0.884-0.992l0.804-0.998l0.805-0.957l0.768-0.957l0.729-0.84l0.689-0.729l0.614-0.613l-4.099,0.382l-0.462,0.611

-		l-0.498,0.611l-0.458,0.615l-0.459,0.609l-0.46,0.613l-0.5,0.613l-0.461,0.611l-0.497,0.613l-0.537,0.572l-0.537,0.611l-0.536,0.578l-0.613,0.57l-0.612,0.574l-0.653,0.576l-0.688,0.537l-0.728,0.531z"/>

-	<path style="&st6;" d="M30.302,49.076l1.188,0.768l1.109,0.5l1.11,0.23h1.074l1.033-0.191l0.995-0.342l0.955-0.539l0.96-0.686l0.919-0.842l0.923-0.881l0.84-1.037l0.884-1.031l0.843-1.109l0.844-1.146l0.805-1.148l0.805-1.111L44.9,40.625l-0.536,0.037

-		l-0.384,0.037l-0.345,0.039l-0.343,0.039h-0.346l-0.499,0.037l-0.651,0.037l-0.729,1.033l-0.727,0.955l-0.729,0.922l-0.805,0.803l-0.767,0.727l-0.767,0.689l-0.804,0.611l-0.768,0.537l-0.766,0.457l-0.768,0.422l-0.727,0.305l-0.689,0.27l-0.689,0.229l-0.614,0.152

-		l-0.612,0.076l-0.537,0.037z"/>

-	<path style="&st6;" d="M26.74,48.843l1.228,0.152l1.186,0.08l1.149-0.078l1.109-0.15l1.036-0.227l1.033-0.346l0.958-0.422l0.92-0.535l0.92-0.572l0.844-0.65l0.843-0.727l0.803-0.805l0.766-0.842l0.73-0.918l0.729-0.959l0.689-0.994l-0.767,0.039l-0.844,0.074

-		l-0.802,0.076l-0.806,0.039l-0.69,0.076l-0.574,0.035L36.78,41.23l-0.191,0.037l-0.076,0.078l-0.191,0.191l-0.308,0.305l-0.382,0.385l-0.422,0.459l-0.536,0.537l-0.577,0.572l-0.648,0.615l-0.731,0.607l-0.764,0.65l-0.768,0.615l-0.843,0.611l-0.88,0.572

-		l-0.881,0.535l-0.921,0.461l-0.921,0.381z"/>

-	<path style="&st6;" d="M22.031,49.109l1.033,0.191l0.998,0.076l1.033-0.113l1.034-0.191l1.034-0.342l0.994-0.422l0.996-0.498l0.998-0.611l0.919-0.648l0.918-0.689l0.881-0.727l0.845-0.766l0.806-0.803l0.766-0.766l0.69-0.768l0.651-0.766h-0.461l-0.574,0.041

-		l-0.611,0.035H34.33l-0.613,0.074l-0.613,0.041l-0.496,0.039l-0.423,0.074v0.078l-0.154,0.189l-0.381,0.346l-0.537,0.42L30.46,43.14l-0.764,0.613l-0.845,0.652l-0.882,0.648l-0.92,0.686l-0.918,0.691l-0.881,0.65l-0.846,0.574l-0.766,0.535l-0.689,0.422

-		l-0.537,0.305l-0.382,0.191z"/>

-	<path style="&st6;" d="M16.822,49.066l0.612,0.613l0.806,0.266l0.996,0.002l1.11-0.266l1.227-0.461l1.262-0.646l1.341-0.768l1.305-0.84l1.302-0.92l1.227-0.916l1.147-0.879l0.999-0.844l0.881-0.688l0.65-0.574l0.423-0.381l0.192-0.154l-0.498,0.039l-0.538,0.035

-		l-0.574,0.037l-0.572,0.041l-0.614,0.072l-0.614,0.039l-0.611,0.041l-0.652,0.037l-0.688,0.42l-0.688,0.422l-0.693,0.455l-0.649,0.426l-0.689,0.455l-0.653,0.498l-0.688,0.459l-0.653,0.459l-0.69,0.496l-0.65,0.461l-0.688,0.459l-0.651,0.459l-0.688,0.42

-		l-0.691,0.422l-0.651,0.42l-0.69,0.383z"/>

-	<path style="&st6;" d="M12.993,49.14l0.652,0.229l0.649,0.115l0.65,0.037l0.653-0.109l0.65-0.195l0.689-0.264l0.727-0.383l0.768-0.461l0.843-0.535l0.881-0.611l0.959-0.688l1.072-0.729l1.187-0.803l1.265-0.881l1.379-0.918l1.534-0.957l-0.653,0.039l-0.727,0.039

-		h-0.65l-0.65,0.037l-0.574,0.037l-0.459,0.039l-0.307,0.039l-0.116,0.035l-0.077,0.115l-0.229,0.23l-0.346,0.307l-0.458,0.42l-0.574,0.496L21.077,44.4l-0.689,0.57l-0.805,0.613l-0.805,0.611l-0.843,0.613l-0.843,0.533l-0.882,0.537l-0.842,0.457l-0.842,0.383

-		l-0.805,0.268l-0.729,0.154z"/>

-	<path style="&st6;" d="M10.198,48.716l0.879,0.344l0.958,0.152l0.998-0.072l1.033-0.268l1.072-0.383l1.033-0.498l1.074-0.607l0.996-0.691l0.958-0.688l0.92-0.729l0.843-0.688l0.728-0.691l0.653-0.572l0.495-0.498l0.383-0.342l0.232-0.232l-0.613,0.039l-0.577,0.039

-		l-0.571,0.037l-0.575,0.074l-0.535,0.041l-0.577,0.037l-0.61,0.074l-0.613,0.039l-0.459,0.42l-0.501,0.42l-0.458,0.422l-0.499,0.459l-0.498,0.498l-0.497,0.459l-0.536,0.459l-0.538,0.459l-0.536,0.422l-0.534,0.422l-0.577,0.381l-0.534,0.342l-0.614,0.309

-		l-0.574,0.266l-0.613,0.193l-0.613,0.152z"/>

-	<path style="&st6;" d="M6.831,47.642l0.765,0.535l0.763,0.346l0.767,0.154l0.767,0.039l0.768-0.152l0.766-0.232l0.766-0.342l0.765-0.459l0.729-0.498l0.766-0.611l0.729-0.613l0.729-0.65l0.727-0.648l0.69-0.689l0.689-0.65l0.69-0.615l-0.422,0.041l-0.46,0.076

-		l-0.497,0.037l-0.535,0.039l-0.575,0.074l-0.612,0.039l-0.652,0.074l-0.612,0.037l-0.192,0.461l-0.267,0.459l-0.271,0.422l-0.346,0.422l-0.381,0.383l-0.424,0.383l-0.42,0.381l-0.496,0.307l-0.5,0.307l-0.537,0.268l-0.573,0.268l-0.576,0.191l-0.612,0.154

-		l-0.61,0.15L7.48,47.603l-0.649,0.039z"/>

-	<path style="&st6;" d="M3.803,47.066l0.652,0.266l0.69,0.193l0.726,0.115l0.806,0.002l0.767-0.039l0.842-0.115l0.805-0.229l0.803-0.229l0.768-0.344l0.729-0.383l0.65-0.422l0.614-0.494l0.536-0.539l0.46-0.572l0.345-0.65l0.23-0.652l-0.46,0.039l-0.46,0.037

-		l-0.497,0.076l-0.5,0.039l-0.495,0.037l-0.537,0.037l-0.574,0.039l-0.652,0.037L9.78,43.699l-0.307,0.385l-0.306,0.344l-0.306,0.307l-0.307,0.305l-0.348,0.229l-0.343,0.27l-0.347,0.229l-0.381,0.191l-0.422,0.191l-0.421,0.189l-0.459,0.154l-0.462,0.152

-		l-0.495,0.152l-0.537,0.115l-0.539,0.154z"/>

-	<path style="&st6;" d="M2.233,46.529l0.23,0.229l0.347,0.152l0.42,0.078h0.46l0.536-0.037L4.8,46.837l0.613-0.193l0.612-0.189l0.613-0.27l0.614-0.307l0.612-0.342l0.537-0.385l0.537-0.42l0.458-0.459l0.345-0.459l0.307-0.498l-0.343,0.041l-0.308,0.037

-		l-0.383,0.037L8.67,43.468l-0.344,0.039L8.02,43.544H7.752H7.483v0.152L7.14,44.001l-0.576,0.422l-0.767,0.498L4.88,45.417l-0.922,0.5l-0.919,0.381l-0.806,0.23z"/>

-	<path style="&st6;" d="M1.124,45.455l0.078,0.535l0.192,0.344l0.305,0.156l0.42,0.076l0.499-0.076l0.574-0.191l0.573-0.229l0.614-0.307l0.613-0.346l0.574-0.381l0.575-0.381l0.461-0.346l0.42-0.307l0.307-0.23l0.191-0.152l0.038-0.076l-2.986,0.342l-0.229,0.152

-		L3.959,44.23l-0.458,0.23l-0.5,0.229l-0.535,0.27l-0.497,0.189l-0.461,0.191l-0.384,0.115z"/>

-	<path style="&st6;" d="M4.573,43.886l-0.651,0.039l-0.574,0.039L2.812,44l-0.498,0.037l-0.46,0.041l-0.497,0.035l-0.498,0.078l-0.577,0.113l0.117,0.729l0.343,0.346h0.537l0.689-0.189l0.689-0.348l0.729-0.381l0.651-0.346l0.536-0.229z"/>

-	<path style="&st6;" d="M4.459,43.505l-0.653,0.113l-0.573,0.076l-0.497,0.113l-0.5,0.076l-0.458,0.113l-0.459,0.115L0.781,44.23l-0.574,0.152l-0.038-0.844l0.345-0.535l0.537-0.193l0.727-0.033l0.766,0.15l0.766,0.193l0.651,0.23l0.499,0.154z"/>

-	<path style="&st6;" d="M44.298,27.949l1.684-0.651l1.611-0.419l1.491-0.113l1.417,0.076l1.379,0.309l1.262,0.459l1.227,0.652l1.187,0.729l1.149,0.845l1.11,0.919l1.106,0.959l1.074,0.996l1.071,0.957l1.07,0.921l1.073,0.882l1.109,0.807l-0.384,0.073l-0.421,0.038

-		l-0.421,0.039l-0.383,0.076l-0.423,0.039l-0.421,0.038l-0.459,0.036l-0.421,0.039l-0.422,0.035l-0.461,0.041l-0.458,0.076l-0.422,0.037l-0.461,0.04l-0.457,0.074l-0.498,0.037l-0.461,0.077l-0.382-0.534l-0.495-0.653l-0.576-0.766l-0.688-0.768l-0.727-0.843

-		l-0.805-0.843l-0.879-0.844l-0.881-0.806l-0.959-0.766l-0.953-0.688l-0.957-0.615l-0.997-0.497l-0.957-0.385l-0.958-0.23l-0.956-0.039l-0.88,0.152z"/>

-	<path style="&st6;" d="M41.423,28.597l0.96-0.345l0.92-0.227l0.878-0.152l0.923-0.077l0.878,0.077l0.919,0.192l0.88,0.268l0.919,0.423l0.956,0.537l0.959,0.691l0.995,0.803l1.033,0.96l1.108,1.11l1.11,1.266l1.186,1.418l1.264,1.57l-0.69,0.039l-0.611,0.072

-		l-0.576,0.039l-0.534,0.076l-0.537,0.076l-0.573,0.076l-0.653,0.113l-0.765,0.117l-0.689-0.574l-0.65-0.613l-0.689-0.653l-0.612-0.653l-0.649-0.649l-0.649-0.65l-0.613-0.653l-0.651-0.651l-0.651-0.612l-0.688-0.574l-0.651-0.576l-0.688-0.574l-0.727-0.498

-		l-0.767-0.423l-0.766-0.421l-0.805-0.347z"/>

-	<path style="&st6;" d="M38.207,29.438l0.727-0.611l0.808-0.307l0.88-0.074l0.879,0.191l0.958,0.383l0.956,0.538l0.995,0.688l0.996,0.805l0.996,0.881l0.993,0.921l0.956,0.921l0.92,0.958l0.841,0.88l0.84,0.805l0.729,0.691l0.69,0.574l-4.176,0.496l-0.536-0.613

-		l-0.536-0.615l-0.498-0.613l-0.533-0.611l-0.537-0.613l-0.534-0.651l-0.573-0.614l-0.535-0.576l-0.613-0.574l-0.612-0.573l-0.652-0.538l-0.688-0.498l-0.728-0.497l-0.766-0.423l-0.804-0.383l-0.843-0.346z"/>

-	<path style="&st6;" d="M31.926,32.113l1.148-1.111l1.111-0.802l1.073-0.534l1.072-0.307l1.072-0.037l1.034,0.154l1.033,0.385l0.996,0.498l0.994,0.689l0.955,0.804l0.996,0.921l0.919,0.996l0.957,1.035l0.917,1.111l0.918,1.111l0.919,1.11l-0.729,0.04l-0.611,0.035

-		l-0.498,0.039l-0.461,0.076l-0.458,0.076l-0.499,0.075l-0.571,0.078l-0.692,0.112l-0.803-1.034l-0.766-0.919l-0.803-0.844l-0.766-0.728l-0.802-0.612l-0.766-0.538l-0.728-0.461l-0.768-0.382l-0.728-0.309l-0.688-0.229l-0.728-0.192l-0.689-0.152l-0.648-0.08

-		l-0.653-0.074h-0.649l-0.612-0.002z"/>

-	<path style="&st6;" d="M27.442,33.145l1.267-0.461l1.187-0.344l1.187-0.189l1.109-0.077l1.111,0.001l1.071,0.155l1.035,0.231l0.996,0.347l0.995,0.419l0.919,0.537l0.957,0.613l0.878,0.689l0.882,0.768l0.84,0.842l0.806,0.922l0.803,0.996l-0.803,0.115l-0.919,0.111

-		l-0.921,0.115l-0.921,0.115l-0.842,0.113l-0.649,0.078l-0.499,0.037l-0.191-0.002l-0.075-0.075l-0.192-0.153l-0.269-0.268l-0.343-0.346l-0.423-0.42l-0.495-0.424l-0.575-0.496l-0.65-0.538l-0.728-0.499l-0.765-0.536l-0.844-0.5l-0.918-0.495l-0.92-0.424

-		l-0.993-0.383l-1.034-0.348l-1.073-0.229z"/>

-	<path style="&st6;" d="M21.775,33.828l1.034-0.418l1.035-0.307l1.108-0.115l1.073,0.001l1.111,0.118l1.108,0.229l1.072,0.346l1.111,0.422l1.033,0.498l1.033,0.537l0.995,0.651l0.994,0.651l0.882,0.693l0.881,0.727l0.802,0.728l0.726,0.729l-0.495,0.037

-		l-0.612,0.076l-0.689,0.075l-0.728,0.077l-0.729,0.075l-0.652,0.076l-0.573,0.037h-0.422l-0.001-0.077l-0.191-0.191l-0.38-0.268l-0.574-0.385l-0.689-0.42l-0.805-0.5l-0.919-0.537l-0.956-0.533l-0.955-0.54l-0.996-0.538l-0.998-0.496l-0.916-0.457l-0.846-0.387

-		l-0.762-0.307l-0.616-0.193l-0.495-0.115z"/>

-	<path style="&st6;" d="M16.413,34.936l0.537-0.842l0.805-0.498l0.996-0.188h1.147l1.264,0.268l1.379,0.422l1.455,0.576l1.415,0.651l1.455,0.729l1.339,0.766l1.265,0.73l1.149,0.727l0.954,0.615l0.729,0.459l0.496,0.342l0.23,0.117l-0.537,0.116l-0.61,0.077

-		l-0.653,0.073l-0.689,0.038l-0.727,0.078l-0.729,0.074l-0.688,0.115l-0.689,0.115l-0.729-0.345l-0.688-0.348l-0.729-0.381l-0.688-0.385l-0.69-0.346l-0.688-0.383l-0.728-0.384l-0.688-0.382l-0.689-0.35l-0.688-0.382l-0.729-0.343l-0.688-0.307l-0.689-0.348

-		l-0.727-0.305l-0.727-0.311l-0.729-0.266z"/>

-	<path style="&st6;" d="M9.558,36.768l0.844-0.611l0.956-0.346l0.996-0.149l1.07,0.001l1.113,0.189l1.148,0.348l1.11,0.421l1.108,0.5l1.035,0.574l1.032,0.575l0.919,0.614l0.804,0.536l0.727,0.499l0.574,0.459l0.42,0.307l0.229,0.193l-0.612,0.074l-0.574,0.076

-		l-0.495,0.076l-0.501,0.037l-0.536,0.037l-0.496,0.076l-0.576,0.076l-0.61,0.074l-0.537-0.342l-0.536-0.348l-0.574-0.419l-0.574-0.383l-0.611-0.422l-0.613-0.421l-0.612-0.423l-0.612-0.383l-0.614-0.384l-0.647-0.308l-0.652-0.305l-0.613-0.232l-0.648-0.189

-		l-0.615-0.117H10.17l-0.612,0.037z"/>

-	<path style="&st6;" d="M12.084,35.661l0.653-0.423l0.688-0.305l0.652-0.154l0.688-0.074l0.689,0.037l0.728,0.152l0.807,0.27l0.838,0.308l0.921,0.423l0.959,0.459l1.07,0.576l1.147,0.614l1.265,0.65l1.378,0.692l1.49,0.765l1.648,0.768l-0.613,0.039l-0.689,0.074

-		l-0.688,0.078l-0.691,0.111L24.41,40.8l-0.457,0.078l-0.346,0.035l-0.153-0.035L23.379,40.8l-0.27-0.191l-0.345-0.308l-0.459-0.344l-0.573-0.422l-0.689-0.459l-0.729-0.5l-0.803-0.499l-0.879-0.498l-0.882-0.497l-0.955-0.425l-0.957-0.384L14.88,35.97l-0.957-0.196

-		l-0.92-0.111l-0.919-0.001z"/>

-	<path style="&st6;" d="M6.491,38.719l0.691-0.766l0.726-0.574l0.729-0.382l0.766-0.229l0.767-0.037l0.804,0.076l0.844,0.192l0.804,0.271l0.84,0.422l0.805,0.42l0.842,0.536l0.843,0.539l0.843,0.536l0.803,0.574l0.805,0.578l0.803,0.496l-0.459,0.076l-0.498,0.039

-		l-0.574,0.115l-0.613,0.072l-0.649,0.08l-0.69,0.072l-0.65,0.078l-0.653,0.076l-0.229-0.498l-0.269-0.422l-0.305-0.422l-0.384-0.382l-0.383-0.344l-0.419-0.27l-0.5-0.271l-0.497-0.229l-0.536-0.191l-0.572-0.154l-0.576-0.114l-0.612-0.079l-0.65-0.037l-0.652,0.001

-		l-0.65,0.073l-0.689,0.078z"/>

-	<path style="&st6;" d="M1.778,41.242l0.193-0.307l0.306-0.268l0.422-0.227l0.459-0.155l0.536-0.114l0.612-0.036l0.613,0.001l0.689,0.037l0.65,0.114l0.689,0.155l0.652,0.229l0.61,0.27l0.576,0.307l0.534,0.383l0.422,0.422l0.381,0.461l-0.343,0.076L9.36,42.666

-		l-0.42,0.076l-0.423,0.074l-0.382,0.037l-0.308,0.041H7.6H7.522l-0.153-0.078l-0.381-0.23l-0.652-0.307L5.57,41.937l-0.881-0.309l-0.995-0.27l-0.957-0.154l-0.959,0.037z"/>

-	<path style="&st6;" d="M0.858,42.81l-0.036-0.609l0.152-0.461l0.271-0.307l0.42-0.191l0.497-0.078l0.575,0.041l0.613,0.076l0.688,0.154l0.65,0.23l0.65,0.23l0.613,0.23l0.535,0.23l0.46,0.23l0.383,0.154l0.191,0.152l0.078,0.037l-3.065,0.533l-0.27-0.113

-		l-0.42-0.117l-0.459-0.152L2.85,42.927l-0.536-0.115l-0.535-0.074L1.28,42.736L0.858,42.81z"/>

-	<path style="&st6;" d="M3.389,40.248l0.612-0.498l0.651-0.383l0.729-0.342l0.805-0.231l0.806-0.153l0.803-0.11l0.844,0.001l0.841,0.072l0.804,0.156l0.804,0.27l0.729,0.307l0.689,0.383l0.649,0.461l0.536,0.535l0.421,0.613l0.344,0.689l-0.499,0.039l-0.457,0.078

-		l-0.5,0.035l-0.536,0.076l-0.535,0.078l-0.574,0.037l-0.612,0.115l-0.65,0.072l-0.231-0.34L9.591,41.9l-0.307-0.268l-0.343-0.27l-0.383-0.23l-0.421-0.23L7.715,40.71l-0.459-0.152l-0.459-0.154L6.3,40.289l-0.46-0.076l-0.499-0.04l-0.497-0.037l-0.496-0.001

-		l-0.499,0.038l-0.46,0.075z"/>

-	<path style="&st6;" d="M139.729,21.932l0.077,0.117l0.192,0.307l0.267,0.497l0.344,0.613l0.386,0.727l0.382,0.806l0.346,0.92l0.303,0.918l0.228,0.959l0.079,0.92l-0.041,0.918l-0.192,0.842l-0.422,0.768l-0.651,0.687l-0.919,0.535l-1.189,0.384l0.193-0.578

-		l0.117-0.611l0.113-0.611l0.076-0.689l0.039-0.689v-0.726l-0.037-0.69l-0.037-0.729l-0.076-0.729l-0.074-0.725l-0.116-0.69l-0.152-0.651l-0.113-0.651l-0.154-0.575l-0.188-0.574l-0.155-0.498l0.191-0.075l0.154-0.04l0.19-0.076l0.156-0.036l0.153-0.077l0.15-0.039

-		l0.191-0.078l0.19-0.076z"/>

-	<path style="&st6;" d="M138.429,22.468l0.534,2.108l0.382,1.914l0.189,1.646l0.037,1.455l-0.077,1.264l-0.23,1.072l-0.307,0.92l-0.347,0.764l-0.46,0.613l-0.497,0.496l-0.498,0.347l-0.495,0.267l-0.54,0.191l-0.459,0.076l-0.42,0.037h-0.384l0.229-0.613

-		l0.229-0.612l0.192-0.688l0.154-0.689l0.152-0.767l0.118-0.764l0.116-0.767l0.075-0.803l0.041-0.806l0.001-0.843l-0.041-0.804l-0.073-0.843l-0.114-0.804l-0.155-0.843l-0.188-0.766l-0.229-0.805l0.457-0.154l0.463-0.152l0.422-0.152l0.418-0.115l0.348-0.113

-		l0.381-0.115l0.306-0.076l0.27-0.077z"/>

-	<path style="&st6;" d="M135.325,23.424l0.231,0.765l0.227,0.959l0.155,1.073l0.072,1.186l0.041,1.303l-0.002,1.301l-0.116,1.301l-0.192,1.267l-0.271,1.187l-0.345,1.109l-0.499,0.957l-0.572,0.766l-0.731,0.574l-0.84,0.304l-0.96,0.04l-1.108-0.307l0.422-0.691

-		l0.421-0.727l0.347-0.766l0.307-0.727l0.229-0.803l0.231-0.768l0.152-0.805l0.154-0.805l0.077-0.804l0.038-0.841v-0.805l-0.073-0.842l-0.076-0.842l-0.152-0.806l-0.152-0.845l-0.229-0.803l0.383-0.152l0.458-0.152l0.461-0.153l0.46-0.153l0.46-0.151l0.382-0.153

-		l0.346-0.117l0.267-0.074z"/>

-	<path style="&st6;" d="M125.586,39.307l1.036,0.08l0.997-0.154l0.879-0.381l0.805-0.535l0.766-0.73l0.652-0.879l0.536-0.994l0.499-1.109l0.384-1.188l0.309-1.266l0.192-1.3l0.078-1.302l0.001-1.301l-0.114-1.303l-0.229-1.265l-0.343-1.188l-0.422,0.152

-		l-0.425,0.154l-0.456,0.114l-0.463,0.152l-0.458,0.154l-0.497,0.153l-0.46,0.152l-0.497,0.152v0.804l-0.001,0.879l-0.04,0.999l-0.039,1.033l-0.039,1.033l-0.038,1.072l-0.116,1.11l-0.113,1.032l-0.156,1.035l-0.152,0.957l-0.233,0.919l-0.268,0.806l-0.308,0.687

-		l-0.384,0.577l-0.421,0.419l-0.461,0.267z"/>

-	<path style="&st6;" d="M128.317,25.715l-0.384,0.153l-0.383,0.114l-0.343,0.115l-0.386,0.077l-0.382,0.114l-0.347,0.113l-0.384,0.116l-0.38,0.153l-0.077,0.766l-0.041,0.84l-0.039,0.92l-0.038,0.958l-0.001,0.958l-0.001,1.031l-0.04,1.037l-0.039,0.994

-		l-0.076,0.997l-0.115,0.994l-0.193,0.919l-0.191,0.844l-0.305,0.802l-0.346,0.727l-0.422,0.616l-0.536,0.496l1.108-0.267l0.919-0.383l0.767-0.533l0.651-0.614l0.537-0.729l0.423-0.839l0.306-0.919l0.232-0.959l0.156-1.072l0.112-1.11l0.039-1.15l0.042-1.225

-		l0.037-1.225l0.039-1.264l0.001-1.264l0.078-1.303z"/>

-	<path style="&st6;" d="M118.156,42.058l1.531-0.074l1.304-0.305l1.07-0.496l0.882-0.652l0.689-0.841l0.502-0.958l0.419-1.071l0.27-1.188l0.154-1.226l0.114-1.261l0.041-1.305l0.001-1.262l0.001-1.305l0.001-1.223l0.076-1.15l0.078-1.071l-0.421,0.114l-0.383,0.113

-		l-0.343,0.117l-0.387,0.113l-0.382,0.113l-0.343,0.115l-0.384,0.077l-0.423,0.114l0.039,0.113l0.075,0.269l0.078,0.423l0.114,0.537l0.074,0.688l0.078,0.768l0.039,0.881l-0.04,0.996l-0.114,1.035l-0.195,1.145l-0.347,1.189l-0.42,1.225l-0.614,1.265l-0.766,1.339

-		l-0.921,1.3l-1.15,1.338z"/>

-	<path style="&st6;" d="M112.945,43.703l1.035,0.191l1.035-0.074l0.995-0.346l0.996-0.537l0.956-0.725l0.92-0.881l0.844-1.07l0.769-1.188l0.649-1.265l0.576-1.378l0.462-1.456l0.309-1.489l0.192-1.496l0.041-1.531l-0.152-1.454l-0.308-1.456l-3.638,1.146

-		l0.037,0.613l0.037,0.729l-0.038,0.801l-0.08,0.92l-0.112,0.958l-0.192,1.034l-0.192,1.072l-0.308,1.109l-0.347,1.109l-0.421,1.073l-0.461,1.071l-0.575,1.035l-0.612,0.996l-0.729,0.918l-0.805,0.842l-0.883,0.727z"/>

-	<path style="&st6;" d="M118.702,28.619l-0.573,0.189L117.4,29l-0.807,0.268l-0.84,0.229l-0.806,0.27l-0.804,0.227l-0.689,0.191l-0.537,0.115l-0.076,0.881l-0.042,0.955l-0.075,0.959l-0.038,0.995l-0.117,0.995l-0.077,1.037l-0.115,0.994l-0.153,0.996l-0.19,0.956

-		l-0.232,0.921l-0.309,0.916l-0.344,0.842l-0.422,0.807l-0.498,0.688l-0.536,0.65l-0.65,0.576l0.766,0.115l0.803-0.039l0.804-0.189l0.805-0.344l0.804-0.5l0.807-0.611l0.768-0.764l0.766-0.957l0.689-1.035l0.611-1.227l0.578-1.339l0.495-1.528l0.388-1.65

-		l0.307-1.758l0.194-1.955l0.077-2.066z"/>

-	<path style="&st6;" d="M104.021,45.226l1.725,0.08l1.455-0.154l1.265-0.418l0.998-0.652l0.841-0.803l0.691-0.957l0.497-1.072l0.386-1.224l0.308-1.225l0.19-1.343l0.116-1.3l0.117-1.302l0.038-1.303l0.078-1.188l0.075-1.11l0.117-0.995l-0.535,0.114l-0.463,0.115

-		l-0.419,0.153l-0.418,0.112l-0.463,0.117l-0.422,0.111l-0.496,0.154l-0.576,0.151l-0.116,1.038l-0.112,0.992l-0.116,0.996l-0.156,0.955l-0.116,0.961l-0.153,0.918l-0.189,0.879l-0.194,0.881l-0.269,0.844l-0.308,0.841l-0.382,0.805l-0.422,0.805l-0.536,0.801

-		l-0.576,0.768L104.79,44.5l-0.77,0.727z"/>

-	<path style="&st6;" d="M99.389,46.066l1.532,0.078l1.34-0.193l1.188-0.418l1.036-0.65l0.88-0.805l0.766-0.957l0.615-1.107l0.537-1.188l0.458-1.226l0.347-1.3l0.269-1.266l0.194-1.299l0.19-1.226l0.116-1.15l0.116-1.073l0.079-0.919l-0.539,0.117l-0.459,0.112

-		l-0.42,0.115l-0.423,0.077l-0.38,0.113l-0.425,0.074l-0.495,0.152l-0.576,0.115l-0.192,1.496l-0.229,1.417l-0.27,1.301l-0.269,1.226l-0.31,1.109l-0.345,1.071l-0.383,0.918l-0.384,0.883l-0.383,0.803l-0.425,0.727l-0.459,0.613l-0.422,0.574l-0.459,0.535

-		l-0.461,0.42l-0.498,0.383l-0.459,0.346z"/>

-	<path style="&st6;" d="M95.021,46.636l1.457,0.078l1.302-0.189l1.151-0.424l1.071-0.611l0.881-0.801l0.805-0.92l0.69-1.072l0.614-1.145l0.535-1.189l0.422-1.263l0.347-1.264l0.308-1.262l0.271-1.188l0.192-1.149l0.152-1.031l0.155-0.922l-0.459,0.076l-0.46,0.116

-		l-0.462,0.114l-0.459,0.115l-0.462,0.115l-0.458,0.112l-0.46,0.114l-0.497,0.117l-0.038,0.725l-0.116,0.805l-0.153,0.843l-0.269,0.918l-0.27,0.995l-0.382,0.957l-0.385,1.033l-0.422,0.998l-0.499,0.996l-0.537,0.957l-0.534,0.879l-0.577,0.84l-0.574,0.807

-		l-0.614,0.689l-0.649,0.572l-0.617,0.459z"/>

-	<path style="&st6;" d="M90.237,47.513l1.49,0.193l1.38-0.191l1.264-0.496l1.15-0.766l1.073-0.955l0.921-1.148l0.84-1.301l0.77-1.34l0.613-1.416l0.537-1.381l0.46-1.302l0.384-1.262l0.23-1.074l0.192-0.88l0.114-0.65l0.001-0.381l-0.573,0.111l-0.537,0.115

-		l-0.535,0.152l-0.536,0.115l-0.536,0.152l-0.5,0.113l-0.497,0.115l-0.499,0.078l-0.191,0.651l-0.19,0.765l-0.229,0.879l-0.271,0.996l-0.308,1.035l-0.343,1.071l-0.384,1.069l-0.424,1.115l-0.461,1.07l-0.497,0.994l-0.537,0.959l-0.574,0.842l-0.653,0.725

-		l-0.65,0.574l-0.728,0.422l-0.765,0.229z"/>

-	<path style="&st6;" d="M86.752,47.32l1.377,0.307l1.223,0.002l1.113-0.268l1.034-0.535l0.882-0.729l0.805-0.881l0.727-1.068l0.652-1.15l0.539-1.225l0.498-1.262l0.384-1.264l0.385-1.227l0.307-1.147l0.231-1.035l0.23-0.918l0.189-0.727l-0.419,0.076l-0.423,0.038

-		l-0.38,0.075l-0.347,0.076l-0.384,0.076l-0.346,0.078l-0.305,0.074l-0.345,0.041l-0.118,0.879l-0.189,0.919l-0.232,0.917l-0.228,0.883l-0.309,0.918l-0.347,0.881l-0.382,0.843l-0.461,0.842l-0.46,0.842l-0.537,0.805l-0.615,0.764l-0.61,0.689l-0.729,0.689

-		l-0.727,0.611l-0.806,0.574l-0.879,0.535z"/>

-	<path style="&st6;" d="M82.385,48.005l1.147,0.002l1.112-0.115l1.07-0.268l1.037-0.383l0.956-0.533l0.959-0.65l0.842-0.764l0.841-0.842l0.73-0.959l0.69-1.033l0.614-1.15l0.573-1.185l0.461-1.264l0.385-1.34l0.347-1.379l0.23-1.414l-0.498,0.113l-0.499,0.076

-		l-0.536,0.115l-0.496,0.074l-0.497,0.078l-0.459,0.112l-0.5,0.077l-0.459,0.115l-0.231,0.805l-0.191,0.842l-0.231,0.805l-0.194,0.803l-0.23,0.804l-0.228,0.803l-0.307,0.766l-0.346,0.805l-0.42,0.766l-0.463,0.803l-0.576,0.766l-0.688,0.766l-0.768,0.729

-		l-0.918,0.766l-1.073,0.766l-1.188,0.725z"/>

-	<path style="&st6;" d="M76.18,48.728l1.495,0.117l1.454-0.076l1.34-0.229l1.266-0.383l1.187-0.496l1.112-0.65l1.033-0.768l0.918-0.916l0.844-0.955l0.767-1.074l0.693-1.148l0.573-1.221l0.496-1.304l0.425-1.34l0.307-1.377l0.233-1.381l-0.423,0.076l-0.46,0.117

-		l-0.456,0.074l-0.461,0.075l-0.459,0.078l-0.5,0.114l-0.497,0.076l-0.5,0.115l-0.152,0.955l-0.23,0.957l-0.31,0.96l-0.383,0.917l-0.457,0.917l-0.502,0.918l-0.574,0.883l-0.648,0.842l-0.691,0.844l-0.767,0.762l-0.808,0.727l-0.879,0.689l-0.921,0.611l-0.995,0.576

-		l-0.997,0.496l-1.072,0.42z"/>

-	<path style="&st6;" d="M72.772,49.107l1.264-0.074l1.226-0.189l1.228-0.307l1.186-0.457l1.112-0.537l1.109-0.648l1.034-0.729l0.958-0.842l0.881-0.916l0.843-0.994l0.73-1.076l0.65-1.109l0.536-1.183l0.46-1.226l0.348-1.267l0.229-1.299l-0.419,0.074l-0.385,0.037

-		l-0.346,0.039l-0.343,0.039l-0.346,0.037l-0.382,0.077l-0.458,0.075l-0.539,0.075l-0.537,1.112l-0.459,1.031l-0.46,0.997l-0.422,0.918l-0.46,0.881l-0.424,0.805l-0.461,0.764l-0.498,0.727l-0.537,0.729l-0.613,0.65l-0.688,0.689l-0.765,0.611l-0.884,0.65

-		l-0.996,0.611l-1.108,0.613l-1.265,0.609z"/>

-	<path style="&st6;" d="M66.645,49.488l1.877,0.076l1.763-0.072l1.57-0.268l1.455-0.422l1.34-0.572l1.187-0.691l1.113-0.801l0.993-0.92l0.921-0.992l0.844-1.072l0.729-1.109l0.688-1.189l0.652-1.184l0.577-1.187l0.538-1.227l0.496-1.187l-0.343,0.036l-0.461,0.078

-		l-0.573,0.076l-0.575,0.076l-0.613,0.115l-0.537,0.076l-0.456,0.076l-0.347,0.035l-0.46,1.074l-0.499,1.074l-0.577,0.994l-0.573,0.955l-0.652,0.881l-0.688,0.879l-0.729,0.805l-0.804,0.807l-0.804,0.727l-0.885,0.688l-0.917,0.688l-0.96,0.613l-0.995,0.572

-		l-1.072,0.535l-1.072,0.496l-1.149,0.461z"/>

-	<path style="&st6;" d="M63.006,50.019l1.034-0.037l1.071-0.152l1.15-0.268l1.186-0.42l1.188-0.494l1.189-0.613l1.188-0.727l1.187-0.803l1.149-0.918l1.111-0.957l1.035-1.07l0.999-1.15l0.879-1.188l0.804-1.261l0.691-1.34l0.576-1.38l-0.575,0.079l-0.575,0.074

-		l-0.611,0.037l-0.612,0.077l-0.536,0.037l-0.461,0.077l-0.382,0.076l-0.192,0.115l-0.69,0.535l-0.689,0.575l-0.729,0.688l-0.729,0.688l-0.727,0.765l-0.767,0.803l-0.767,0.844l-0.768,0.844l-0.766,0.879l-0.804,0.842l-0.805,0.842l-0.845,0.84l-0.842,0.844

-		l-0.845,0.762l-0.842,0.768l-0.882,0.688z"/>

-	<path style="&st6;" d="M57.415,50.015l0.997,0.654l1.032,0.268l1.034,0.002l1.073-0.268l1.071-0.537l1.073-0.729l1.111-0.916l1.11-1.033l1.112-1.188l1.148-1.225l1.189-1.301l1.188-1.299l1.188-1.264l1.226-1.263l1.228-1.148l1.226-1.031h-0.425l-0.494,0.074

-		l-0.576,0.038l-0.573,0.116l-0.614,0.076l-0.612,0.113l-0.572,0.115l-0.5,0.075l-0.956,0.88l-0.957,0.88l-0.923,0.918l-0.919,0.92l-0.881,0.916l-0.883,0.92l-0.88,0.92l-0.845,0.84l-0.844,0.84l-0.842,0.768l-0.805,0.688l-0.804,0.613l-0.805,0.535l-0.767,0.459

-		l-0.766,0.344l-0.767,0.229z"/>

-	<path style="&st6;" d="M53.086,50.511l1.572,0.002l1.492-0.152l1.342-0.385l1.304-0.494l1.187-0.613l1.109-0.766l1.075-0.84l0.995-0.92l0.997-0.994l0.956-1.033l0.921-1.035l0.959-1.07l0.959-1.07l0.994-1.034l1.035-0.957l1.072-0.918l-0.382,0.04l-0.458,0.037

-		l-0.577,0.074l-0.572,0.041l-0.577,0.073l-0.459,0.038l-0.382,0.041l-0.229-0.001l-0.651,0.151l-0.651,0.306l-0.649,0.423l-0.692,0.573l-0.689,0.686l-0.729,0.805l-0.766,0.844l-0.769,0.916l-0.88,0.957l-0.883,0.955l-0.997,0.996l-1.032,0.959l-1.111,0.955

-		l-1.188,0.881l-1.264,0.801l-1.381,0.729z"/>

-	<path style="&st6;" d="M138.314,18.982v-0.153l0.04-0.42l0.038-0.649l0.04-0.807l0.039-0.957l-0.037-1.033l-0.038-1.072l-0.111-1.111l-0.229-1.033l-0.309-0.996l-0.38-0.882l-0.572-0.728l-0.654-0.537l-0.843-0.307l-1.034-0.039l-1.186,0.306l0.385,0.384

-		l0.343,0.459l0.345,0.574l0.306,0.613l0.305,0.689l0.27,0.689l0.264,0.767l0.271,0.804l0.228,0.767l0.19,0.806l0.194,0.803l0.188,0.766l0.155,0.768l0.152,0.727l0.114,0.65l0.113,0.613l0.19-0.037l0.154-0.037l0.189-0.078l0.155-0.037l0.151-0.079l0.155-0.075

-		l0.192-0.037l0.226-0.078z"/>

-	<path style="&st6;" d="M136.9,19.558l-0.497-2.489l-0.535-2.108l-0.535-1.801l-0.532-1.492l-0.539-1.188l-0.534-0.958l-0.533-0.689l-0.499-0.497l-0.536-0.347l-0.458-0.153l-0.502-0.039l-0.42,0.078l-0.419,0.152l-0.382,0.191l-0.348,0.229l-0.306,0.23l0.536,0.497

-		l0.533,0.573l0.462,0.538l0.494,0.611l0.424,0.615l0.422,0.648l0.382,0.652l0.344,0.691l0.344,0.727l0.306,0.766l0.307,0.768l0.268,0.805l0.227,0.842l0.23,0.842l0.227,0.882l0.194,0.919l0.457-0.077l0.345-0.036l0.232-0.077l0.153-0.077l0.151-0.037l0.156-0.076

-		l0.153-0.039l0.229-0.075z"/>

-	<path style="&st6;" d="M134.984,20.283l-0.113-0.918l-0.194-1.035l-0.305-1.15l-0.379-1.226l-0.5-1.264l-0.571-1.227l-0.611-1.187l-0.688-1.111l-0.729-0.996l-0.765-0.843l-0.803-0.65l-0.842-0.425L127.603,8.1l-0.882,0.152l-0.842,0.499l-0.882,0.878l0.688,0.498

-		l0.65,0.576l0.613,0.574l0.574,0.576l0.574,0.611l0.496,0.689l0.459,0.691l0.42,0.688l0.423,0.769l0.343,0.767l0.345,0.805l0.267,0.842l0.267,0.879l0.193,0.92l0.189,0.959l0.155,0.994l0.416-0.114l0.461-0.152l0.499-0.153l0.498-0.191l0.461-0.189l0.421-0.154

-		l0.344-0.151l0.23-0.077z"/>

-	<path style="&st6;" d="M120.057,10.239l0.919-0.612l0.92-0.344l0.957-0.115l0.919,0.115l0.958,0.307l0.919,0.5l0.882,0.689l0.843,0.805l0.762,0.919l0.766,1.073l0.65,1.188l0.572,1.226l0.496,1.305l0.384,1.376l0.306,1.38l0.151,1.416L131,21.581l-0.459,0.116

-		l-0.46,0.15l-0.46,0.154l-0.497,0.191l-0.499,0.113l-0.457,0.154l-0.498,0.075l-0.346-0.88l-0.305-0.959l-0.383-0.957l-0.348-0.957l-0.379-0.996l-0.419-0.998l-0.423-0.956l-0.421-0.918l-0.456-0.884l-0.499-0.805l-0.533-0.766l-0.539-0.651l-0.609-0.575

-		l-0.615-0.459l-0.648-0.346l-0.69-0.19z"/>

-	<path style="&st6;" d="M115.844,11.383l1.455-0.648l1.302-0.344l1.149-0.038l1.034,0.193l0.919,0.421l0.806,0.65l0.724,0.807l0.65,0.957l0.575,1.072l0.495,1.188l0.5,1.229l0.457,1.225l0.457,1.264l0.421,1.264l0.459,1.188l0.497,1.111l-0.421,0.037l-0.384,0.115

-		l-0.383,0.113l-0.385,0.152l-0.381,0.118l-0.384,0.151l-0.421,0.114l-0.422,0.074l-0.038-0.151l-0.038-0.383l-0.114-0.498l-0.114-0.689l-0.189-0.803l-0.27-0.92l-0.306-0.996l-0.42-1.034l-0.494-1.034l-0.574-1.035l-0.728-1.035l-0.803-0.958l-0.96-0.918

-		l-1.07-0.767l-1.228-0.691l-1.375-0.5z"/>

-	<path style="&st6;" d="M110.406,12.185l0.882-0.651l0.997-0.42l1.069-0.153l1.072,0.04l1.149,0.229l1.148,0.461l1.108,0.615l1.111,0.768l1.07,0.956l0.997,1.075l0.878,1.225l0.805,1.342l0.687,1.416l0.537,1.533l0.342,1.57l0.19,1.687l-3.945,1.029l-0.228-0.649

-		l-0.307-0.77l-0.306-0.803l-0.382-0.881l-0.461-0.92l-0.457-0.956l-0.537-0.961l-0.573-0.956l-0.652-0.957l-0.725-0.92l-0.766-0.842l-0.803-0.808l-0.878-0.728l-0.959-0.613l-0.996-0.537l-1.07-0.421z"/>

-	<path style="&st6;" d="M120.542,25.02l-0.572,0.115l-0.727,0.152l-0.729,0.23l-0.808,0.229l-0.764,0.267l-0.729,0.191l-0.649,0.189l-0.536,0.152l-0.382-0.957l-0.421-0.995l-0.422-0.996l-0.42-1.036l-0.421-1.032l-0.458-0.997l-0.498-0.995l-0.497-0.997

-		l-0.533-0.918l-0.573-0.845l-0.614-0.804l-0.651-0.727l-0.65-0.652l-0.728-0.537l-0.804-0.423l-0.804-0.306l0.692-0.459l0.764-0.344l0.806-0.23l0.88-0.075l0.918,0.076l0.959,0.231l0.957,0.383l0.992,0.576l0.999,0.728l0.993,0.92l0.995,1.149l0.954,1.304

-		l0.919,1.532l0.917,1.723l0.843,1.992l0.802,2.184z"/>

-	<path style="&st6;" d="M101.328,14.973l1.571-0.841l1.415-0.498l1.304-0.114l1.187,0.193l1.032,0.458l0.996,0.691l0.841,0.883l0.805,1.073l0.688,1.188l0.649,1.265l0.573,1.341l0.534,1.34l0.536,1.302l0.498,1.265l0.458,1.148l0.456,1.035l-0.534,0.076

-		l-0.459,0.112l-0.422,0.079l-0.422,0.114l-0.421,0.114l-0.459,0.115l-0.498,0.076l-0.572,0.112l-0.5-1.033l-0.458-1.036l-0.46-0.994l-0.458-0.958l-0.459-0.958l-0.495-0.88l-0.5-0.881l-0.495-0.806l-0.575-0.807l-0.61-0.727l-0.612-0.688l-0.688-0.652l-0.769-0.615

-		l-0.801-0.536l-0.92-0.498l-0.956-0.46z"/>

-	<path style="&st6;" d="M96.577,16.348l1.419-0.765l1.339-0.383l1.265-0.075l1.225,0.191l1.111,0.461l1.069,0.689l0.996,0.844l0.921,0.998l0.841,1.149l0.802,1.187l0.726,1.227l0.652,1.264l0.611,1.266l0.537,1.148l0.455,1.111l0.423,0.957l-0.574,0.113l-0.5,0.115

-		l-0.46,0.113l-0.421,0.076l-0.458,0.115l-0.461,0.115l-0.536,0.076l-0.613,0.115l-0.688-1.533l-0.688-1.417l-0.646-1.302l-0.651-1.188l-0.614-1.071l-0.573-0.961l-0.61-0.84l-0.574-0.807l-0.612-0.651l-0.613-0.575l-0.611-0.498l-0.65-0.421l-0.653-0.308

-		l-0.685-0.269l-0.731-0.155l-0.765-0.113z"/>

-	<path style="&st6;" d="M92.977,17.379l1.378-0.65l1.307-0.308l1.222,0.001l1.19,0.233l1.07,0.458l1.033,0.654l0.956,0.844l0.92,0.957l0.802,1.072l0.766,1.148l0.726,1.188l0.613,1.188l0.609,1.189l0.5,1.15l0.456,1.033l0.421,0.959l-0.459,0.113l-0.42,0.113

-		l-0.424,0.076l-0.383,0.116l-0.421,0.077l-0.42,0.075l-0.462,0.113l-0.496,0.077l-0.231-0.765l-0.342-0.845l-0.42-0.842l-0.497-0.919l-0.535-0.919l-0.651-0.921l-0.649-0.92l-0.728-0.92l-0.765-0.841l-0.805-0.846l-0.803-0.766l-0.804-0.652l-0.843-0.613

-		l-0.805-0.498l-0.802-0.383l-0.806-0.23z"/>

-	<path style="&st6;" d="M88.648,18.484l1.417-0.762l1.38-0.345l1.379,0.039l1.301,0.385l1.264,0.612l1.226,0.879l1.149,1.038l1.069,1.147l0.995,1.229l0.881,1.264l0.8,1.227l0.65,1.187l0.536,1.036l0.422,0.879l0.23,0.652l0.113,0.383l-0.574,0.115l-0.498,0.113

-		l-0.498,0.115l-0.5,0.115l-0.496,0.115l-0.459,0.074l-0.499,0.077l-0.497,0.076l-0.344-0.651l-0.384-0.804l-0.458-0.882l-0.537-0.921l-0.571-1.033l-0.614-1.034l-0.646-0.997l-0.691-1.034l-0.727-0.959L93.7,20.939l-0.802-0.804l-0.803-0.652l-0.844-0.537

-		l-0.844-0.345l-0.878-0.152l-0.882,0.035z"/>

-	<path style="&st6;" d="M85.508,19.709l1.266-0.842l1.224-0.459l1.149-0.113l1.149,0.19l1.071,0.461l1.033,0.692l0.958,0.842l0.915,1.035l0.844,1.113l0.805,1.184l0.727,1.229l0.687,1.225l0.574,1.15l0.535,1.073l0.421,0.918l0.383,0.766l-0.46,0.077l-0.382,0.114

-		l-0.344,0.115l-0.308,0.113l-0.347,0.114l-0.305,0.115L96.796,30.9l-0.343,0.073l-0.344-0.955l-0.421-0.958l-0.422-0.921l-0.46-0.918l-0.537-0.919l-0.531-0.844l-0.613-0.844l-0.65-0.805l-0.689-0.767l-0.764-0.688l-0.765-0.614l-0.844-0.574l-0.919-0.5

-		l-0.919-0.421l-0.996-0.308l-1.071-0.229z"/>

-	<path style="&st6;" d="M81.523,20.625l1.113-0.422l1.109-0.266l1.148-0.077l1.074,0.078l1.109,0.231l1.032,0.345l1.034,0.536l1.034,0.652l0.956,0.768l0.918,0.92l0.881,0.996l0.842,1.112l0.802,1.226l0.689,1.34l0.688,1.418l0.571,1.491l-0.498,0.077l-0.495,0.076

-		l-0.501,0.115l-0.497,0.153l-0.496,0.115l-0.498,0.153l-0.497,0.115l-0.5,0.074l-0.343-0.842l-0.343-0.882l-0.347-0.843l-0.342-0.883l-0.422-0.842l-0.419-0.805l-0.501-0.842l-0.534-0.767l-0.649-0.729l-0.688-0.728l-0.805-0.652l-0.88-0.613l-0.996-0.537

-		l-1.11-0.498l-1.261-0.424l-1.381-0.344z"/>

-	<path style="&st6;" d="M75.855,21.961l1.455-0.609l1.457-0.385l1.34-0.189l1.34-0.037l1.265,0.191l1.226,0.346l1.147,0.498l1.111,0.652l0.992,0.805l0.994,0.919l0.884,1.036l0.84,1.15l0.764,1.264l0.652,1.34l0.611,1.381l0.535,1.491l-0.459,0.077l-0.46,0.076

-		l-0.536,0.078l-0.501,0.074l-0.533,0.078l-0.538,0.074l-0.535,0.076l-0.535,0.076l-0.269-1.072l-0.383-0.994l-0.42-0.996l-0.533-0.959l-0.575-0.881l-0.651-0.843l-0.688-0.805l-0.766-0.729l-0.842-0.689l-0.916-0.574l-0.959-0.539l-0.995-0.459l-1.071-0.346

-		L78.19,22.23l-1.146-0.191l-1.188-0.078z"/>

-	<path style="&st6;" d="M73.062,22.265l1.302-0.19l1.262-0.113L76.888,22l1.228,0.154l1.224,0.307l1.15,0.385l1.109,0.498l1.073,0.613l0.995,0.729l0.954,0.844l0.844,0.919l0.803,1.034l0.688,1.15l0.611,1.226l0.499,1.341l0.38,1.419l-0.46,0.035l-0.383,0.038

-		l-0.382,0.077l-0.384,0.077l-0.384,0.074l-0.382,0.078l-0.46,0.114l-0.496,0.076l-0.651-1.111l-0.613-1.073l-0.532-0.958l-0.5-0.956l-0.535-0.844l-0.498-0.804l-0.497-0.767l-0.572-0.69l-0.612-0.651l-0.688-0.575l-0.768-0.535l-0.842-0.498l-0.995-0.425

-		l-1.071-0.383l-1.264-0.346l-1.415-0.308z"/>

-	<path style="&st6;" d="M66.973,23.064l1.914-0.457l1.8-0.268l1.646-0.075l1.531,0.154l1.417,0.307l1.302,0.461l1.187,0.573l1.074,0.77l1.03,0.842l0.917,0.96l0.844,1.034l0.802,1.112l0.728,1.147l0.688,1.227l0.612,1.226l0.611,1.265l-0.307,0.037l-0.42,0.037

-		l-0.459,0.115l-0.501,0.076l-0.496,0.115l-0.462,0.114l-0.419,0.036l-0.346,0.039l-0.571-1.148l-0.613-1.035l-0.689-0.996l-0.726-0.918l-0.766-0.883l-0.805-0.806L76.618,27.4l-0.919-0.69l-0.956-0.616l-0.996-0.573l-1.034-0.498l-1.07-0.498l-1.111-0.423

-		l-1.147-0.383l-1.189-0.346l-1.222-0.309z"/>

-	<path style="&st6;" d="M63.335,23.443l1.068-0.189l1.113-0.037l1.225,0.038l1.263,0.192l1.267,0.271l1.3,0.384l1.303,0.497l1.302,0.614l1.3,0.729l1.224,0.845l1.186,0.92l1.147,1.035l1.035,1.149l0.956,1.225l0.841,1.342l0.728,1.455l-0.537,0.039l-0.533,0.076

-		l-0.538,0.115l-0.536,0.113l-0.459,0.113l-0.385,0.117l-0.306,0.036l-0.19-0.037l-0.769-0.46l-0.763-0.537l-0.804-0.613l-0.843-0.689l-0.843-0.729l-0.878-0.768l-0.92-0.768l-0.916-0.802l-0.959-0.806l-0.956-0.807l-0.995-0.803l-0.996-0.729l-1.033-0.729

-		l-0.995-0.652l-1.071-0.613l-1.031-0.537z"/>

-	<path style="&st6;" d="M58.237,24.895l0.958-0.955l1.034-0.572l1.074-0.23l1.109,0.077l1.148,0.308l1.225,0.575l1.227,0.769l1.3,0.879l1.301,1.074l1.341,1.11l1.34,1.19l1.34,1.188l1.377,1.188l1.377,1.112l1.376,1.035l1.381,0.92l-0.421,0.074l-0.499,0.037

-		l-0.612,0.041l-0.613,0.037l-0.648,0.037h-0.653h-0.574l-0.497-0.002l-1.034-0.766l-0.993-0.804l-0.996-0.808l-0.918-0.842l-0.919-0.805l-0.883-0.807l-0.878-0.805l-0.88-0.767l-0.919-0.688l-0.879-0.651l-0.92-0.575l-0.956-0.5l-0.996-0.422l-1.034-0.345

-		l-1.073-0.192l-1.11-0.117z"/>

-	<path style="&st6;" d="M54.408,25.352l1.61-0.381l1.493-0.152l1.415,0.076l1.343,0.271l1.262,0.461l1.226,0.575l1.186,0.729l1.148,0.805l1.11,0.919l1.109,0.922l1.071,0.995l1.111,0.996l1.109,0.958l1.107,0.959l1.188,0.843l1.185,0.807l-0.38,0.037l-0.498,0.075

-		l-0.576,0.078l-0.576,0.036l-0.572,0.079l-0.5,0.072l-0.38,0.041l-0.231,0.037l-0.688-0.002l-0.69-0.189l-0.727-0.348l-0.766-0.496l-0.766-0.614l-0.843-0.728l-0.879-0.807l-0.919-0.844l-0.959-0.881l-1.031-0.918l-1.109-0.882l-1.148-0.844l-1.262-0.808

-		l-1.302-0.728l-1.379-0.651l-1.494-0.5z"/>

-	<path style="&st6;" d="M49.583,26.689L51,25.885l1.495-0.342h1.455l1.49,0.309l1.495,0.576l1.494,0.804l1.454,0.96l1.415,1.034l1.339,1.149l1.302,1.15l1.263,1.075l1.148,0.993l1.033,0.844l0.956,0.65l0.843,0.385l0.726,0.116l-0.61,0.077l-0.653,0.113

-		l-0.727,0.113l-0.765,0.117l-0.767,0.074l-0.767,0.115l-0.728,0.038l-0.652,0.037l-1.07-0.806l-0.958-0.766l-0.879-0.767l-0.84-0.728l-0.767-0.73L59,31.752l-0.767-0.691l-0.726-0.651l-0.729-0.612l-0.804-0.576l-0.841-0.537l-0.919-0.496l-0.996-0.461

-		l-1.071-0.383l-1.226-0.348l-1.34-0.307z"/>

-	<g style="&st6;">

-		<path d="M142.345,10.982l0.191-0.383l0.153-0.42l0.152-0.423l0.113-0.421l0.117-0.459l0.115-0.496l0.077-0.459l0.042-0.5l0.036-0.459l0.035-0.498l0.001-0.499l-0.035-0.46l-0.036-0.459l-0.08-0.457l-0.112-0.461l-0.114-0.42l0.611,0.804l0.459,0.882l0.345,0.842

-			l0.189,0.88l0.076,0.919v0.92l-0.116,0.918l-0.194,0.92l-0.228,0.918l-0.31,0.883l-0.343,0.879l-0.343,0.88l-0.385,0.843l-0.347,0.842l-0.346,0.765l-0.343,0.767l0.074-0.152l0.037-0.269l0.042-0.266v-0.345l0.037-0.424v-0.421v-0.46l0.001-0.496l0.038-0.499

-			v-0.498l0.039-0.534l0.04-0.498l0.038-0.461l0.078-0.461l0.075-0.42l0.116-0.383z"/>

-		<path d="M154.014,26.885l-0.729-0.422l-0.729-0.462l-0.687-0.421l-0.688-0.422l-0.65-0.383l-0.651-0.422l-0.616-0.385l-0.609-0.42L148,23.165l-0.607-0.384l-0.614-0.422l-0.652-0.382l-0.611-0.386l-0.654-0.342l-0.686-0.386l-0.689-0.382l0.61,0.61l0.613,0.616

-			l0.613,0.611l0.612,0.576l0.65,0.611l0.651,0.536l0.65,0.539l0.688,0.497l0.651,0.461l0.689,0.383l0.651,0.346l0.688,0.269l0.688,0.229l0.688,0.115l0.691,0.037l0.691-0.035z"/>

-		<path d="M148.317,11.561l-0.536,0.308l-0.5,0.345l-0.495,0.345l-0.461,0.344l-0.46,0.343l-0.419,0.383l-0.424,0.421l-0.423,0.383l-0.384,0.422l-0.384,0.422l-0.382,0.421l-0.345,0.457l-0.383,0.422l-0.346,0.459l-0.344,0.459l-0.346,0.459l0.153-0.496l0.192-0.499

-			l0.191-0.537l0.229-0.534l0.231-0.536l0.265-0.499l0.31-0.498l0.346-0.495l0.382-0.46l0.461-0.381l0.498-0.385l0.537-0.344l0.612-0.269l0.652-0.229l0.765-0.152l0.805-0.076z"/>

-		<path d="M142.614,6.961l-0.153,0.767l-0.114,0.767l-0.154,0.766l-0.116,0.689L142,10.676l-0.114,0.689l-0.079,0.689l-0.115,0.689l-0.075,0.688l-0.117,0.689l-0.074,0.651l-0.118,0.689l-0.116,0.689l-0.115,0.689l-0.15,0.689l-0.157,0.727l-0.076-0.842

-			l-0.113-0.805l-0.077-0.843l-0.076-0.841l-0.037-0.807l-0.038-0.805l0.039-0.805l0.039-0.764l0.076-0.767l0.116-0.688l0.194-0.689l0.229-0.651l0.269-0.573l0.384-0.537l0.422-0.46l0.497-0.421z"/>

-		<path d="M146.714,5.703l0.692,0.648l0.416,0.729l0.189,0.766l0.04,0.805l-0.153,0.804l-0.307,0.843l-0.424,0.844l-0.498,0.841l-0.575,0.804l-0.611,0.805l-0.653,0.764l-0.65,0.689l-0.614,0.689l-0.534,0.572l-0.463,0.539l-0.383,0.418l0.077-1.147l0.154-0.995

-			l0.191-0.844l0.307-0.764l0.306-0.65l0.386-0.574l0.382-0.535l0.424-0.501l0.383-0.496l0.424-0.495l0.382-0.538l0.307-0.613l0.307-0.688l0.23-0.766l0.194-0.919l0.075-1.032z"/>

-		<path d="M141.803,17.951v-0.805l-0.039-0.765l-0.034-0.765l-0.04-0.768l-0.036-0.729l-0.077-0.727l-0.076-0.727l-0.073-0.691l-0.117-0.688l-0.114-0.728l-0.189-0.689l-0.152-0.689l-0.193-0.689l-0.268-0.689l-0.229-0.689l-0.306-0.689l1.111,1.073l0.918,1.034

-			l0.649,0.959l0.457,0.92l0.309,0.879l0.151,0.805l0.037,0.806l-0.077,0.727l-0.195,0.689l-0.187,0.651l-0.27,0.613l-0.271,0.533l-0.23,0.537l-0.229,0.459l-0.152,0.459l-0.078,0.383z"/>

-		<path d="M153.022,20.603l-0.613,0.114l-0.614,0.116l-0.611,0.075l-0.613,0.075l-0.609,0.038l-0.616,0.037h-0.613h-0.575l-0.612-0.039h-0.574l-0.613-0.077l-0.573-0.038l-0.613-0.04l-0.575-0.075l-0.612-0.079l-0.574-0.075l0.498,0.229l0.498,0.192l0.535,0.231

-			l0.537,0.19l0.574,0.193l0.576,0.151l0.61,0.156l0.61,0.076l0.612,0.039h0.651l0.651-0.039l0.654-0.15l0.651-0.191l0.651-0.27l0.648-0.381l0.654-0.46z"/>

-		<path d="M149.457,23.702l0.461,0.078l0.419,0.075l0.461,0.115l0.457,0.115l0.463,0.194l0.456,0.151l0.421,0.191l0.46,0.23l0.421,0.23l0.421,0.267l0.383,0.271l0.386,0.268l0.343,0.307l0.308,0.307l0.304,0.307l0.27,0.344l-0.269-0.917l-0.422-0.808l-0.494-0.688

-			l-0.615-0.651l-0.688-0.536l-0.768-0.5l-0.84-0.421l-0.882-0.347l-0.919-0.306l-0.919-0.307l-0.955-0.231l-0.958-0.23l-0.957-0.193l-0.919-0.189l-0.843-0.154l-0.842-0.192l0.42,0.153l0.574,0.306l0.69,0.463l0.841,0.497l0.843,0.535l0.879,0.499l0.842,0.46

-			l0.768,0.308z"/>

-		<path d="M151.214,30.559l0.345-0.881l0.117-0.844l-0.116-0.842l-0.307-0.766l-0.457-0.729l-0.612-0.727l-0.728-0.69l-0.804-0.614l-0.843-0.613l-0.879-0.536l-0.919-0.538l-0.884-0.459l-0.801-0.42l-0.767-0.387l-0.651-0.344l-0.496-0.309l0.532,1.113l0.538,0.919

-			l0.573,0.728l0.536,0.652l0.574,0.498l0.574,0.459l0.574,0.346l0.574,0.346l0.571,0.346l0.577,0.382l0.572,0.384l0.536,0.46l0.537,0.573l0.535,0.691l0.497,0.806l0.498,0.995z"/>

-		<path d="M141.569,21.129l0.422,0.652l0.42,0.652l0.421,0.65l0.38,0.613l0.346,0.613l0.345,0.649l0.346,0.614l0.305,0.613l0.304,0.652l0.268,0.65l0.271,0.613l0.229,0.65l0.19,0.689l0.192,0.65l0.152,0.689l0.152,0.73l0.384-1.455l0.191-1.265l0.041-1.149

-			l-0.115-0.994l-0.229-0.844l-0.346-0.766l-0.42-0.652l-0.458-0.537l-0.538-0.499l-0.535-0.421l-0.573-0.346l-0.537-0.306l-0.496-0.306l-0.46-0.268l-0.342-0.307l-0.31-0.271z"/>

-	</g>

-</g><!-- Feather_x0020_shadow -->

-<g id="Layer_x0020_1">

-	<defs>

-		<linearGradient gradientUnits="userSpaceOnUse"  id="AIgd1" x1="-3510.3682" y1="4186.3037" x2="-3520.3882" y2="4153.2837" gradientTransform="matrix(0.5318 0.0004 -0.0004 0.5318 -2022.5977 2980.6621)">

-			<stop  offset="0" style="stop-color:#4F0C81"/>

-			<stop  offset="0.0701" style="stop-color:#690C73"/>

-			<stop  offset="0.209" style="stop-color:#9A0A5B"/>

-			<stop  offset="0.3368" style="stop-color:#C20748"/>

-			<stop  offset="0.4512" style="stop-color:#E0053A"/>

-			<stop  offset="0.5481" style="stop-color:#F20032"/>

-			<stop  offset="0.6158" style="stop-color:#FA002F"/>

-			<stop  offset="1" style="stop-color:#F7EE5F"/>

-		</linearGradient>

-	</defs>

-	<g style="fill-rule:nonzero;fill:url(#AIgd1);stroke:#000000;stroke-width:0.254;stroke-miterlimit:4;">

-		<path style="&st23;" d="M0.241,40.672c13.561-1.867,63.613-4.393,85.943-8.051c17.961-2.937,35.502-8.285,52.242-13.9c4.328-1.453,11.991-4.434,16.896-7.07c3.104-2.373,10.571-5.889,12.606-9.222c-32.45,15.407-45.513,19.649-83.582,27.354

-			c-15.436,3.169-71.617,7.721-84.105,10.889z"/>

-		<defs>

-			<linearGradient id="AIgd2" gradientUnits="userSpaceOnUse" x1="-3788.0986" y1="-3507.6162" x2="-3789.1638" y2="-3479.4058" gradientTransform="matrix(0.5318 0.0004 -0.0004 0.5318 2070.8274 1900.0875)">

-				<stop  offset="0" style="stop-color:#4F0C81"/>

-				<stop  offset="0.0701" style="stop-color:#690C73"/>

-				<stop  offset="0.209" style="stop-color:#9A0A5B"/>

-				<stop  offset="0.3368" style="stop-color:#C20748"/>

-				<stop  offset="0.4512" style="stop-color:#E0053A"/>

-				<stop  offset="0.5481" style="stop-color:#F20032"/>

-				<stop  offset="0.6158" style="stop-color:#FA002F"/>

-				<stop  offset="1" style="stop-color:#F7EE5F"/>

-			</linearGradient>

-		</defs>

-		<path style="&st1;" d="M48.261,46.645l1.454,0.498l1.418,0.118l1.417-0.229l1.417-0.574l1.379-0.766l1.38-0.994l1.305-1.146l1.301-1.226l1.228-1.26l1.149-1.267l1.111-1.224l1.035-1.148l0.958-0.957l0.881-0.763l0.767-0.501l0.689-0.228l-0.576,0.036l-0.611,0.038

-			l-0.689,0.077l-0.688,0.074l-0.69,0.078l-0.689,0.076l-0.689,0.038l-0.612,0.076l-0.957,0.88l-0.921,0.842l-0.805,0.842l-0.729,0.844l-0.727,0.801l-0.688,0.805l-0.652,0.764l-0.691,0.729l-0.688,0.727l-0.729,0.65l-0.767,0.65l-0.882,0.61l-0.919,0.576

-			l-1.034,0.535l-1.149,0.496l-1.302,0.421z"/>

-		<defs>

-			<linearGradient gradientUnits="userSpaceOnUse"  id="AIgd3" x1="-3817.4316" y1="-3498.7192" x2="-3818.3076" y2="-3475.5176" gradientTransform="matrix(0.5318 0.0004 -0.0004 0.5318 2070.8274 1900.0875)">

-				<stop  offset="0" style="stop-color:#4F0C81"/>

-				<stop  offset="0.0701" style="stop-color:#690C73"/>

-				<stop  offset="0.209" style="stop-color:#9A0A5B"/>

-				<stop  offset="0.3368" style="stop-color:#C20748"/>

-				<stop  offset="0.4512" style="stop-color:#E0053A"/>

-				<stop  offset="0.5481" style="stop-color:#F20032"/>

-				<stop  offset="0.6158" style="stop-color:#FA002F"/>

-				<stop  offset="1" style="stop-color:#F7EE5F"/>

-			</linearGradient>

-		</defs>

-		<path style="&st2;" d="M43.511,46.45l1.688,0.271l1.569,0.038l1.455-0.15l1.377-0.345l1.265-0.534l1.151-0.652l1.148-0.766l1.034-0.879l1.035-0.918l0.957-0.995l0.959-1.072l0.921-1.032l0.956-1.033l0.96-1.033l0.958-0.955l0.995-0.881l-0.381,0.037h-0.423

-			l-0.384,0.039l-0.419,0.037l-0.424,0.037l-0.421,0.078l-0.42,0.035l-0.42,0.041l-0.421,0.037l-0.461,0.037l-0.422,0.078l-0.459,0.037l-0.459,0.037l-0.46,0.037h-0.46l-0.459,0.039l-0.347,0.535l-0.42,0.651l-0.537,0.765l-0.575,0.805l-0.69,0.881l-0.729,0.879

-			l-0.766,0.918l-0.805,0.879l-0.844,0.844l-0.84,0.805l-0.885,0.726l-0.842,0.612l-0.844,0.496l-0.843,0.346l-0.804,0.189h-0.768z"/>

-		<defs>

-			<linearGradient gradientUnits="userSpaceOnUse"  id="AIgd4" x1="-3806.9058" y1="-3505.3105" x2="-3807.8401" y2="-3480.5605" gradientTransform="matrix(0.5318 0.0004 -0.0004 0.5318 2070.8274 1900.0875)">

-				<stop  offset="0" style="stop-color:#4F0C81"/>

-				<stop  offset="0.0701" style="stop-color:#690C73"/>

-				<stop  offset="0.209" style="stop-color:#9A0A5B"/>

-				<stop  offset="0.3368" style="stop-color:#C20748"/>

-				<stop  offset="0.4512" style="stop-color:#E0053A"/>

-				<stop  offset="0.5481" style="stop-color:#F20032"/>

-				<stop  offset="0.6158" style="stop-color:#FA002F"/>

-				<stop  offset="1" style="stop-color:#F7EE5F"/>

-			</linearGradient>

-		</defs>

-		<path style="&st3;" d="M40.371,46.487l0.958,0.115l0.919,0.076l0.881-0.037l0.881-0.152l0.882-0.19l0.843-0.344l0.841-0.421l0.883-0.574l0.882-0.65l0.882-0.764l0.882-0.921l0.919-0.993l0.958-1.188l0.997-1.3l1.034-1.416l1.074-1.607l-0.651-0.002l-0.613,0.039

-			l-0.614,0.076l-0.612,0.076l-0.611,0.078l-0.613,0.072h-0.688h-0.727l-0.616,0.612l-0.573,0.65l-0.576,0.614l-0.574,0.688l-0.575,0.65l-0.535,0.689l-0.576,0.648l-0.539,0.691l-0.572,0.65l-0.574,0.65l-0.612,0.65l-0.577,0.613l-0.65,0.572l-0.652,0.574

-			l-0.65,0.573l-0.729,0.499z"/>

-		<path style="&st2;" d="M37.041,46.329l0.728,0.387l0.802,0.153l0.807-0.116l0.842-0.342l0.844-0.5l0.881-0.689l0.88-0.764l0.884-0.917l0.841-0.958l0.884-0.993l0.804-0.997l0.805-0.957l0.768-0.957l0.729-0.84l0.689-0.729l0.614-0.613l-4.099,0.382l-0.462,0.612

-			l-0.498,0.61l-0.458,0.616l-0.459,0.608l-0.46,0.614l-0.5,0.612l-0.461,0.612l-0.497,0.612l-0.537,0.573l-0.537,0.611l-0.536,0.578l-0.613,0.57l-0.612,0.574l-0.653,0.576l-0.688,0.536l-0.728,0.532z"/>

-		<defs>

-			<linearGradient gradientUnits="userSpaceOnUse"  id="AIgd6" x1="-3825.4375" y1="-3503.8936" x2="-3826.3342" y2="-3480.1453" gradientTransform="matrix(0.5318 0.0004 -0.0004 0.5318 2070.8274 1900.0875)">

-				<stop  offset="0" style="stop-color:#4F0C81"/>

-				<stop  offset="0.0701" style="stop-color:#690C73"/>

-				<stop  offset="0.209" style="stop-color:#9A0A5B"/>

-				<stop  offset="0.3368" style="stop-color:#C20748"/>

-				<stop  offset="0.4512" style="stop-color:#E0053A"/>

-				<stop  offset="0.5481" style="stop-color:#F20032"/>

-				<stop  offset="0.6158" style="stop-color:#FA002F"/>

-				<stop  offset="1" style="stop-color:#F7EE5F"/>

-			</linearGradient>

-		</defs>

-		<path style="&st4;" d="M30.262,45.444l1.188,0.767l1.109,0.5l1.11,0.231h1.074l1.033-0.191l0.995-0.343l0.955-0.538l0.96-0.687l0.919-0.841l0.923-0.881l0.84-1.037l0.884-1.031l0.843-1.109l0.844-1.146l0.805-1.148l0.805-1.111l-0.688,0.115l-0.536,0.037

-			l-0.384,0.037l-0.345,0.039l-0.343,0.039l-0.346-0.001l-0.499,0.037l-0.651,0.037l-0.729,1.034l-0.727,0.955l-0.729,0.921l-0.805,0.804l-0.767,0.727l-0.767,0.689l-0.804,0.611l-0.768,0.536l-0.766,0.458l-0.768,0.421l-0.727,0.306l-0.689,0.269l-0.689,0.229

-			l-0.614,0.152l-0.612,0.075l-0.537,0.038z"/>

-		<path style="&st2;" d="M26.7,45.21l1.228,0.153l1.186,0.08l1.149-0.078l1.109-0.151l1.036-0.227l1.033-0.345l0.958-0.422l0.92-0.535l0.92-0.572l0.844-0.651l0.843-0.727l0.803-0.804l0.766-0.842l0.73-0.918l0.729-0.959l0.689-0.994l-0.767,0.039l-0.844,0.074

-			l-0.802,0.076l-0.806,0.038l-0.69,0.077l-0.574,0.035l-0.421,0.039l-0.191,0.037l-0.076,0.078l-0.191,0.19l-0.308,0.306l-0.382,0.385l-0.422,0.459l-0.536,0.536l-0.577,0.573l-0.648,0.614l-0.731,0.608l-0.764,0.65l-0.768,0.615l-0.843,0.611l-0.88,0.572

-			l-0.881,0.535l-0.921,0.46L26.7,45.21z"/>

-		<defs>

-			<linearGradient gradientUnits="userSpaceOnUse"  id="AIgd8" x1="-3841.6636" y1="-3502.4297" x2="-3842.4236" y2="-3482.3" gradientTransform="matrix(0.5318 0.0004 -0.0004 0.5318 2070.8274 1900.0875)">

-				<stop  offset="0" style="stop-color:#4F0C81"/>

-				<stop  offset="0.0701" style="stop-color:#690C73"/>

-				<stop  offset="0.209" style="stop-color:#9A0A5B"/>

-				<stop  offset="0.3368" style="stop-color:#C20748"/>

-				<stop  offset="0.4512" style="stop-color:#E0053A"/>

-				<stop  offset="0.5481" style="stop-color:#F20032"/>

-				<stop  offset="0.6158" style="stop-color:#FA002F"/>

-				<stop  offset="1" style="stop-color:#F7EE5F"/>

-			</linearGradient>

-		</defs>

-		<path style="&st5;" d="M21.991,45.476l1.033,0.192l0.998,0.076l1.033-0.113l1.034-0.191l1.034-0.342l0.994-0.423l0.996-0.497l0.998-0.611l0.919-0.648l0.918-0.69l0.881-0.726l0.845-0.766l0.806-0.804l0.766-0.765l0.69-0.768l0.651-0.766h-0.461l-0.574,0.04

-			l-0.611,0.036H34.29l-0.613,0.073l-0.613,0.041l-0.496,0.039l-0.423,0.075v0.077l-0.154,0.189l-0.381,0.347l-0.537,0.42l-0.652,0.535l-0.764,0.613l-0.845,0.652l-0.882,0.647l-0.92,0.687l-0.918,0.691l-0.881,0.65l-0.846,0.574L23.6,44.559L22.91,44.98

-			l-0.537,0.305l-0.382,0.191z"/>

-		<path style="&st2;" d="M16.782,45.434l0.612,0.612l0.806,0.267l0.996,0.001l1.11-0.266l1.227-0.46l1.262-0.646l1.341-0.768l1.305-0.841l1.302-0.919l1.227-0.916l1.147-0.879l0.999-0.844l0.881-0.688l0.65-0.574l0.423-0.381l0.192-0.154l-0.498,0.038l-0.538,0.036

-			l-0.574,0.037l-0.572,0.041l-0.614,0.072l-0.614,0.039l-0.611,0.04l-0.652,0.038l-0.688,0.419l-0.688,0.422l-0.693,0.456l-0.649,0.425l-0.689,0.456l-0.653,0.498l-0.688,0.459l-0.653,0.459l-0.69,0.496l-0.65,0.461l-0.688,0.459l-0.651,0.458l-0.688,0.421

-			l-0.691,0.422l-0.651,0.419l-0.69,0.384z"/>

-		<defs>

-			<linearGradient gradientUnits="userSpaceOnUse"  id="AIgd10" x1="-3872.1543" y1="-3503.9727" x2="-3872.3848" y2="-3493.1567" gradientTransform="matrix(0.5318 0.0004 -0.0004 0.5318 2070.8274 1900.0875)">

-				<stop  offset="0" style="stop-color:#F7EE5F"/>

-				<stop  offset="0.186" style="stop-color:#F5D65D"/>

-				<stop  offset="0.3825" style="stop-color:#F4C35B"/>

-				<stop  offset="0.5198" style="stop-color:#F4BC5A"/>

-				<stop  offset="0.7809" style="stop-color:#F5DA5D"/>

-				<stop  offset="1" style="stop-color:#F7EE5F"/>

-			</linearGradient>

-		</defs>

-		<path style="&st8;" d="M12.953,45.507l0.652,0.229l0.649,0.115l0.65,0.037l0.653-0.11l0.65-0.194l0.689-0.265l0.727-0.383l0.768-0.46l0.843-0.535l0.881-0.612l0.959-0.688l1.072-0.728l1.187-0.803l1.265-0.881l1.379-0.918l1.534-0.957l-0.653,0.039l-0.727,0.039

-			l-0.65-0.001l-0.65,0.038l-0.574,0.037l-0.459,0.038l-0.307,0.039l-0.116,0.036l-0.077,0.115l-0.229,0.23l-0.346,0.307l-0.458,0.42L21.69,40.19l-0.653,0.577l-0.689,0.571l-0.805,0.613l-0.805,0.611l-0.843,0.612l-0.843,0.534l-0.882,0.537l-0.842,0.457

-			l-0.842,0.383l-0.805,0.267l-0.729,0.154z"/>

-		<defs>

-			<linearGradient gradientUnits="userSpaceOnUse"  id="AIgd11" x1="-3878.0732" y1="-3508.4204" x2="-3874.5449" y2="-3484.9487" gradientTransform="matrix(0.5318 0.0004 -0.0004 0.5318 2070.8274 1900.0875)">

-				<stop  offset="0" style="stop-color:#F7EE5F"/>

-				<stop  offset="0.186" style="stop-color:#F5D65D"/>

-				<stop  offset="0.3825" style="stop-color:#F4C35B"/>

-				<stop  offset="0.5198" style="stop-color:#F4BC5A"/>

-				<stop  offset="0.7809" style="stop-color:#F5DA5D"/>

-				<stop  offset="1" style="stop-color:#F7EE5F"/>

-			</linearGradient>

-		</defs>

-		<path style="&st9;" d="M10.158,45.084l0.879,0.344l0.958,0.152l0.998-0.072l1.033-0.268l1.072-0.383l1.033-0.498l1.074-0.608l0.996-0.69l0.958-0.688l0.92-0.728l0.843-0.688l0.728-0.691l0.653-0.572l0.495-0.499l0.383-0.341l0.232-0.232l-0.613,0.038l-0.577,0.04

-			l-0.571,0.037l-0.575,0.074l-0.535,0.041l-0.577,0.037l-0.61,0.074l-0.613,0.038l-0.459,0.421l-0.501,0.42l-0.458,0.421l-0.499,0.46l-0.498,0.498l-0.497,0.459l-0.536,0.459l-0.538,0.458l-0.536,0.423l-0.534,0.421l-0.577,0.381l-0.534,0.343l-0.614,0.309

-			l-0.574,0.266l-0.613,0.193l-0.613,0.152z"/>

-		<path style="&st8;" d="M6.791,44.01l0.765,0.535l0.763,0.345l0.767,0.154l0.767,0.039l0.768-0.151l0.766-0.232l0.766-0.343l0.765-0.458l0.729-0.498l0.766-0.611l0.729-0.613l0.729-0.65l0.727-0.648l0.69-0.69l0.689-0.649l0.69-0.615l-0.422,0.041l-0.46,0.076

-			l-0.497,0.037l-0.535,0.039l-0.575,0.074l-0.612,0.039l-0.652,0.074l-0.612,0.037l-0.192,0.461L13.84,40.26l-0.271,0.422l-0.346,0.422l-0.381,0.383l-0.424,0.383l-0.42,0.381l-0.496,0.306l-0.5,0.308l-0.537,0.268l-0.573,0.268L9.316,43.59l-0.612,0.154

-			l-0.61,0.15L7.44,43.971L6.791,44.01z"/>

-		<path style="&st9;" d="M3.763,43.434L4.415,43.7l0.69,0.193l0.726,0.115l0.806,0.001l0.767-0.038l0.842-0.115l0.805-0.229l0.803-0.229l0.768-0.344l0.729-0.384l0.65-0.421l0.614-0.495l0.536-0.538l0.46-0.572l0.345-0.651l0.23-0.652l-0.46,0.04l-0.46,0.037

-			l-0.497,0.076l-0.5,0.038l-0.495,0.038l-0.537,0.037l-0.574,0.039l-0.652,0.036L9.74,40.067l-0.307,0.384l-0.306,0.345l-0.306,0.306l-0.307,0.306l-0.348,0.229l-0.343,0.27l-0.347,0.229l-0.381,0.191l-0.422,0.19l-0.421,0.19L5.796,42.86l-0.462,0.152

-			l-0.495,0.152L4.302,43.28l-0.539,0.154z"/>

-		<path style="&st8;" d="M2.193,42.896l0.23,0.229l0.347,0.152l0.42,0.078h0.46l0.536-0.038l0.573-0.112l0.613-0.193l0.612-0.189l0.613-0.27l0.614-0.307l0.612-0.342l0.537-0.385l0.537-0.42l0.458-0.459l0.345-0.46l0.307-0.498l-0.343,0.041l-0.308,0.037

-			l-0.383,0.038L8.63,39.836l-0.344,0.039l-0.307,0.036l-0.268,0.001l-0.269-0.001v0.153L7.1,40.37l-0.576,0.422L5.757,41.29L4.84,41.786l-0.922,0.499l-0.919,0.381l-0.806,0.23z"/>

-		<path style="&st8;" d="M1.084,41.822l0.078,0.536l0.192,0.344l0.305,0.155l0.42,0.076l0.499-0.075l0.574-0.192l0.573-0.229l0.614-0.306l0.613-0.346l0.574-0.381l0.575-0.381l0.461-0.347l0.42-0.307l0.307-0.229l0.191-0.152l0.038-0.076l-2.986,0.341l-0.229,0.152

-			l-0.386,0.192l-0.458,0.23l-0.5,0.229l-0.535,0.269l-0.497,0.189l-0.461,0.192l-0.384,0.114z"/>

-		<defs>

-			<linearGradient gradientUnits="userSpaceOnUse"  id="AIgd16" x1="-3892.5645" y1="-3497.0415" x2="-3892.7126" y2="-3490.0823" gradientTransform="matrix(0.5318 0.0004 -0.0004 0.5318 2070.8274 1900.0875)">

-				<stop  offset="0" style="stop-color:#F7EE5F"/>

-				<stop  offset="0.186" style="stop-color:#F5D65D"/>

-				<stop  offset="0.3825" style="stop-color:#F4C35B"/>

-				<stop  offset="0.5198" style="stop-color:#F4BC5A"/>

-				<stop  offset="0.7809" style="stop-color:#F5DA5D"/>

-				<stop  offset="1" style="stop-color:#F7EE5F"/>

-			</linearGradient>

-		</defs>

-		<path style="&st10;" d="M4.533,40.253l-0.651,0.039l-0.574,0.039l-0.536,0.036l-0.498,0.037l-0.46,0.04l-0.497,0.036l-0.498,0.077l-0.577,0.114l0.117,0.729l0.343,0.345l0.537,0.001l0.689-0.19l0.689-0.347l0.729-0.382l0.651-0.345l0.536-0.229z"/>

-		<path style="&st8;" d="M4.419,39.874l-0.653,0.112l-0.573,0.076l-0.497,0.114l-0.5,0.075l-0.458,0.114l-0.459,0.115l-0.537,0.116L0.167,40.75l-0.038-0.844l0.345-0.536l0.537-0.192l0.727-0.034l0.766,0.151l0.766,0.193l0.651,0.23l0.499,0.154z"/>

-		<defs>

-			<linearGradient gradientUnits="userSpaceOnUse"  id="AIgd18" x1="-3716.793" y1="-3522.1724" x2="-3726.813" y2="-3555.1924" gradientTransform="matrix(0.5318 0.0004 -0.0004 0.5318 2070.8274 1900.0875)">

-				<stop  offset="0" style="stop-color:#4F0C81"/>

-				<stop  offset="0.0701" style="stop-color:#690C73"/>

-				<stop  offset="0.209" style="stop-color:#9A0A5B"/>

-				<stop  offset="0.3368" style="stop-color:#C20748"/>

-				<stop  offset="0.4512" style="stop-color:#E0053A"/>

-				<stop  offset="0.5481" style="stop-color:#F20032"/>

-				<stop  offset="0.6158" style="stop-color:#FA002F"/>

-				<stop  offset="1" style="stop-color:#F7EE5F"/>

-			</linearGradient>

-		</defs>

-		<path style="&st11;" d="M44.258,24.317l1.684-0.651l1.611-0.419l1.491-0.113l1.417,0.076l1.379,0.309l1.262,0.459l1.227,0.652l1.187,0.729l1.149,0.845l1.11,0.919l1.106,0.959l1.074,0.996l1.071,0.957l1.07,0.921l1.073,0.882l1.109,0.807l-0.384,0.073

-			l-0.421,0.038l-0.421,0.039l-0.383,0.076l-0.423,0.039l-0.421,0.038l-0.459,0.036l-0.421,0.039l-0.422,0.035l-0.461,0.041l-0.458,0.076l-0.422,0.037l-0.461,0.04l-0.457,0.074l-0.498,0.037l-0.461,0.077l-0.382-0.534l-0.495-0.653l-0.576-0.766l-0.688-0.768

-			l-0.727-0.843l-0.805-0.843l-0.879-0.844l-0.881-0.806l-0.959-0.766l-0.953-0.688l-0.957-0.615l-0.997-0.497l-0.957-0.385l-0.958-0.23l-0.956-0.039l-0.88,0.152z"/>

-		<defs>

-			<linearGradient gradientUnits="userSpaceOnUse"  id="AIgd19" x1="-3818.3081" y1="-3506.1616" x2="-3836.2568" y2="-3532.4282" gradientTransform="matrix(0.5318 0.0004 -0.0004 0.5318 2070.8274 1900.0875)">

-				<stop  offset="0" style="stop-color:#4F0C81"/>

-				<stop  offset="0.0701" style="stop-color:#690C73"/>

-				<stop  offset="0.209" style="stop-color:#9A0A5B"/>

-				<stop  offset="0.3368" style="stop-color:#C20748"/>

-				<stop  offset="0.4512" style="stop-color:#E0053A"/>

-				<stop  offset="0.5481" style="stop-color:#F20032"/>

-				<stop  offset="0.6158" style="stop-color:#FA002F"/>

-				<stop  offset="1" style="stop-color:#F7EE5F"/>

-			</linearGradient>

-		</defs>

-		<path style="&st12;" d="M41.383,24.964l0.96-0.345l0.92-0.227l0.878-0.152l0.923-0.077l0.878,0.077l0.919,0.192l0.88,0.268l0.919,0.423l0.956,0.537l0.959,0.691l0.995,0.803l1.033,0.96l1.108,1.11l1.11,1.266l1.186,1.418l1.264,1.57l-0.69,0.039l-0.611,0.072

-			l-0.576,0.039l-0.534,0.076l-0.537,0.076l-0.573,0.076l-0.653,0.113l-0.765,0.117l-0.689-0.574l-0.65-0.613l-0.689-0.653l-0.612-0.653l-0.649-0.649l-0.649-0.65l-0.613-0.653l-0.651-0.651l-0.651-0.612l-0.688-0.574l-0.651-0.576l-0.688-0.574l-0.727-0.498

-			l-0.767-0.423l-0.766-0.421l-0.805-0.347z"/>

-		<path style="&st11;" d="M38.167,25.805l0.727-0.611l0.808-0.307l0.88-0.074l0.879,0.191l0.958,0.383l0.956,0.538l0.995,0.688l0.996,0.805l0.996,0.881l0.993,0.921l0.956,0.921l0.92,0.958l0.841,0.88l0.84,0.805l0.729,0.691l0.69,0.574l-4.176,0.496l-0.536-0.613

-			l-0.536-0.615l-0.498-0.613l-0.533-0.611l-0.537-0.613l-0.534-0.651l-0.573-0.614l-0.535-0.576l-0.613-0.574l-0.612-0.573l-0.652-0.538l-0.688-0.498l-0.728-0.497l-0.766-0.423l-0.804-0.383l-0.843-0.346z"/>

-		<path style="&st12;" d="M31.886,28.481l1.148-1.111l1.111-0.802l1.073-0.534l1.072-0.307l1.072-0.037l1.034,0.154l1.033,0.385l0.996,0.498l0.994,0.689l0.955,0.804l0.996,0.921l0.919,0.996l0.957,1.035l0.917,1.111l0.918,1.111l0.919,1.11l-0.729,0.04

-			l-0.611,0.035l-0.498,0.039l-0.461,0.076l-0.458,0.076l-0.499,0.075l-0.571,0.078l-0.692,0.112l-0.803-1.034l-0.766-0.919l-0.803-0.844l-0.766-0.728l-0.802-0.612l-0.766-0.538l-0.728-0.461l-0.768-0.382l-0.728-0.309l-0.688-0.229l-0.728-0.192l-0.689-0.152

-			l-0.648-0.08l-0.653-0.074h-0.649l-0.612-0.002z"/>

-		<path style="&st11;" d="M27.402,29.512l1.267-0.461l1.187-0.344l1.187-0.189l1.109-0.077l1.111,0.001l1.071,0.155l1.035,0.231l0.996,0.347l0.995,0.419l0.919,0.537l0.957,0.613l0.878,0.689l0.882,0.768l0.84,0.842l0.806,0.922l0.803,0.996l-0.803,0.115

-			l-0.919,0.111l-0.921,0.115l-0.921,0.115l-0.842,0.113L38.39,35.61l-0.499,0.037l-0.191-0.002l-0.075-0.075l-0.192-0.153l-0.269-0.268l-0.343-0.346l-0.423-0.42l-0.495-0.424l-0.575-0.496l-0.65-0.538l-0.728-0.499l-0.765-0.536l-0.844-0.5l-0.918-0.495

-			l-0.92-0.424l-0.993-0.383l-1.034-0.348l-1.073-0.229z"/>

-		<path style="&st12;" d="M21.735,30.196l1.034-0.418l1.035-0.307l1.108-0.115l1.073,0.001l1.111,0.118l1.108,0.229l1.072,0.346l1.111,0.422l1.033,0.498l1.033,0.537l0.995,0.651l0.994,0.651l0.882,0.693l0.881,0.727l0.802,0.728l0.726,0.729l-0.495,0.037

-			l-0.612,0.076l-0.689,0.075l-0.728,0.077l-0.729,0.075l-0.652,0.076l-0.573,0.037h-0.422l-0.001-0.077l-0.191-0.191l-0.38-0.268l-0.574-0.385l-0.689-0.42l-0.805-0.5l-0.919-0.537l-0.956-0.533l-0.955-0.54l-0.996-0.538l-0.998-0.496l-0.916-0.457l-0.846-0.387

-			l-0.762-0.307l-0.616-0.193l-0.495-0.115z"/>

-		<path style="&st11;" d="M16.373,31.303l0.537-0.842l0.805-0.498l0.996-0.188h1.147l1.264,0.268l1.379,0.422l1.455,0.576l1.415,0.651l1.455,0.729l1.339,0.766l1.265,0.73l1.149,0.727l0.954,0.615l0.729,0.459l0.496,0.342l0.23,0.117l-0.537,0.116l-0.61,0.077

-			l-0.653,0.073l-0.689,0.038l-0.727,0.078l-0.729,0.074l-0.688,0.115l-0.689,0.115l-0.729-0.346l-0.688-0.348l-0.729-0.381l-0.688-0.385l-0.69-0.346l-0.688-0.383l-0.728-0.384l-0.688-0.382l-0.689-0.35l-0.688-0.382l-0.729-0.343l-0.688-0.307l-0.689-0.348

-			l-0.727-0.305l-0.727-0.311l-0.729-0.266z"/>

-		<path style="&st8;" d="M9.518,33.135l0.844-0.611l0.956-0.346l0.996-0.149l1.07,0.001l1.113,0.189l1.148,0.348l1.11,0.421l1.108,0.5l1.035,0.574l1.032,0.575l0.919,0.614l0.804,0.536l0.727,0.499l0.574,0.46l0.42,0.306l0.229,0.193l-0.612,0.074l-0.574,0.077

-			l-0.495,0.076l-0.501,0.037l-0.536,0.037l-0.496,0.076L19.813,37.7l-0.61,0.074l-0.537-0.342l-0.536-0.348l-0.574-0.42l-0.574-0.383L16.37,35.86l-0.613-0.421l-0.612-0.423l-0.612-0.383l-0.614-0.384l-0.647-0.308l-0.652-0.305l-0.613-0.232l-0.648-0.189

-			l-0.615-0.117H10.13l-0.612,0.037z"/>

-		<path style="&st9;" d="M12.044,32.029l0.653-0.423l0.688-0.305l0.652-0.154l0.688-0.074l0.689,0.037l0.728,0.152l0.807,0.27l0.838,0.308l0.921,0.423l0.959,0.459l1.07,0.576l1.147,0.614l1.265,0.65l1.378,0.692l1.49,0.765l1.648,0.768l-0.613,0.04L26.363,36.9

-			l-0.688,0.078l-0.691,0.112l-0.613,0.078l-0.457,0.078l-0.346,0.035l-0.153-0.035l-0.075-0.079l-0.27-0.19l-0.345-0.309l-0.459-0.344l-0.573-0.422l-0.689-0.459l-0.729-0.5l-0.803-0.499l-0.879-0.498l-0.882-0.497l-0.955-0.425l-0.957-0.384l-0.959-0.304

-			l-0.957-0.196l-0.92-0.111l-0.919-0.001z"/>

-		<path style="&st9;" d="M6.451,35.086l0.691-0.766l0.726-0.574l0.729-0.382l0.766-0.229l0.767-0.037l0.804,0.076l0.844,0.192l0.804,0.271l0.84,0.422l0.805,0.42l0.842,0.536l0.843,0.539l0.843,0.536l0.803,0.574l0.805,0.578l0.803,0.496l-0.459,0.076l-0.498,0.038

-			l-0.574,0.116l-0.613,0.072l-0.649,0.079l-0.69,0.073l-0.65,0.078l-0.653,0.075l-0.229-0.497l-0.269-0.422l-0.305-0.422l-0.384-0.383l-0.383-0.344l-0.419-0.27l-0.5-0.271l-0.497-0.229l-0.536-0.191l-0.572-0.154L9.706,35.05l-0.612-0.079l-0.65-0.037

-			l-0.652,0.001l-0.65,0.073l-0.689,0.078z"/>

-		<path style="&st9;" d="M1.738,37.609l0.193-0.306l0.306-0.268l0.422-0.228l0.459-0.154l0.536-0.114l0.612-0.036l0.613,0.001l0.689,0.037l0.65,0.114l0.689,0.155l0.652,0.229l0.61,0.269l0.576,0.308l0.534,0.383l0.422,0.422l0.381,0.461l-0.343,0.076L9.32,39.034

-			L8.9,39.11l-0.423,0.074l-0.382,0.037l-0.308,0.041H7.56H7.482l-0.153-0.078l-0.381-0.23l-0.652-0.307L5.53,38.304l-0.881-0.309l-0.995-0.269l-0.957-0.154l-0.959,0.036z"/>

-		<path style="&st8;" d="M0.818,39.178l-0.036-0.609l0.152-0.461l0.271-0.307l0.42-0.191l0.497-0.078l0.575,0.041l0.613,0.076l0.688,0.154l0.65,0.229l0.65,0.231l0.613,0.23l0.535,0.23l0.46,0.23l0.383,0.154l0.191,0.152l0.078,0.036l-3.065,0.533l-0.27-0.112

-			l-0.42-0.117l-0.459-0.153L2.81,39.294l-0.536-0.115l-0.535-0.074L1.24,39.104l-0.422,0.074z"/>

-		<path style="&st8;" d="M3.349,36.616l0.612-0.498l0.651-0.383l0.729-0.342l0.805-0.231l0.806-0.153l0.803-0.11l0.844,0.001l0.841,0.072l0.804,0.156l0.804,0.27l0.729,0.307l0.689,0.383l0.649,0.461l0.536,0.535l0.421,0.613l0.344,0.689l-0.499,0.039l-0.457,0.077

-			l-0.5,0.036l-0.536,0.076l-0.535,0.078l-0.574,0.037L10.7,38.844l-0.65,0.072l-0.231-0.341l-0.268-0.308L9.244,38l-0.343-0.27L8.519,37.5l-0.421-0.23l-0.423-0.192l-0.459-0.151l-0.459-0.154L6.26,36.657L5.8,36.581l-0.499-0.04l-0.497-0.037l-0.496-0.001

-			l-0.499,0.038l-0.46,0.075z"/>

-		<defs>

-			<linearGradient gradientUnits="userSpaceOnUse"  id="AIgd31" x1="-3644.5117" y1="-3531.5527" x2="-3636.6318" y2="-3508.3506" gradientTransform="matrix(0.5318 0.0004 -0.0004 0.5318 2070.8274 1900.0875)">

-				<stop  offset="0" style="stop-color:#681083"/>

-				<stop  offset="0.0006" style="stop-color:#681083"/>

-				<stop  offset="0.072" style="stop-color:#8D0F6D"/>

-				<stop  offset="0.1459" style="stop-color:#AD0D5A"/>

-				<stop  offset="0.2229" style="stop-color:#C80A4A"/>

-				<stop  offset="0.3041" style="stop-color:#DE083E"/>

-				<stop  offset="0.3913" style="stop-color:#ED0335"/>

-				<stop  offset="0.4884" style="stop-color:#F60030"/>

-				<stop  offset="0.6158" style="stop-color:#FA002F"/>

-				<stop  offset="1" style="stop-color:#F7EE5F"/>

-			</linearGradient>

-		</defs>

-		<path style="&st13;" d="M139.689,18.299l0.077,0.117l0.192,0.307l0.267,0.497l0.344,0.613l0.386,0.727l0.382,0.806l0.346,0.92l0.303,0.918l0.228,0.959l0.079,0.92L142.251,26l-0.192,0.842l-0.422,0.768l-0.651,0.687l-0.919,0.535l-1.189,0.384l0.193-0.578

-			l0.117-0.611l0.113-0.611l0.076-0.689l0.039-0.689V25.31l-0.037-0.69l-0.037-0.729l-0.076-0.729l-0.074-0.725l-0.116-0.69l-0.152-0.651l-0.113-0.651l-0.154-0.575l-0.188-0.574l-0.155-0.498l0.191-0.075l0.154-0.04l0.19-0.076l0.156-0.036l0.153-0.077l0.15-0.039

-			l0.191-0.078l0.19-0.076z"/>

-		<path style="&st13;" d="M138.389,18.835l0.534,2.108l0.382,1.914l0.189,1.646l0.037,1.455l-0.077,1.264l-0.23,1.072l-0.307,0.92l-0.347,0.764l-0.46,0.613l-0.497,0.496l-0.498,0.347l-0.495,0.267l-0.54,0.191l-0.459,0.076l-0.42,0.037h-0.384l0.229-0.613

-			l0.229-0.612l0.192-0.688l0.154-0.689l0.152-0.767l0.118-0.764l0.116-0.767l0.075-0.803l0.041-0.806l0.001-0.843l-0.041-0.804l-0.073-0.843l-0.114-0.804l-0.155-0.843l-0.188-0.766l-0.229-0.805l0.457-0.154l0.463-0.152l0.422-0.152l0.418-0.115l0.348-0.113

-			l0.381-0.115l0.306-0.076l0.27-0.077z"/>

-		<path style="&st13;" d="M135.285,19.792l0.231,0.765l0.227,0.959l0.155,1.073l0.072,1.186l0.041,1.303l-0.002,1.301l-0.116,1.301l-0.192,1.267l-0.271,1.187l-0.345,1.109l-0.499,0.957l-0.572,0.766l-0.731,0.574l-0.84,0.304l-0.96,0.04l-1.108-0.307l0.422-0.691

-			l0.421-0.727l0.347-0.766l0.307-0.727l0.229-0.803l0.231-0.768l0.152-0.805l0.154-0.805l0.077-0.804l0.038-0.841v-0.805l-0.073-0.842l-0.076-0.842l-0.152-0.806l-0.152-0.845l-0.229-0.803l0.383-0.152l0.458-0.152l0.461-0.153l0.46-0.153l0.46-0.151l0.382-0.153

-			l0.346-0.117l0.267-0.074z"/>

-		<path style="&st13;" d="M125.546,35.674l1.036,0.08l0.997-0.154l0.879-0.381l0.805-0.535l0.766-0.73l0.652-0.879l0.536-0.994l0.499-1.109l0.384-1.188l0.309-1.266l0.192-1.3l0.078-1.302l0.001-1.301l-0.114-1.303l-0.229-1.265l-0.343-1.188l-0.422,0.152

-			l-0.425,0.154l-0.456,0.114l-0.463,0.152l-0.458,0.154l-0.497,0.153l-0.46,0.152l-0.497,0.152v0.804l-0.001,0.879l-0.04,0.999l-0.039,1.033l-0.039,1.033l-0.038,1.072l-0.116,1.11l-0.113,1.032l-0.156,1.035L127.62,32l-0.233,0.919l-0.268,0.806l-0.308,0.687

-			l-0.384,0.577l-0.421,0.419l-0.461,0.267z"/>

-		<defs>

-			<linearGradient gradientUnits="userSpaceOnUse"  id="AIgd35" x1="-3738.23" y1="-3453.355" x2="-3733.0664" y2="-3424.071" gradientTransform="matrix(0.5318 0.0004 -0.0004 0.5318 2110.5286 1859.3658)">

-				<stop  offset="0" style="stop-color:#681083"/>

-				<stop  offset="0.0752" style="stop-color:#6F1182"/>

-				<stop  offset="0.1935" style="stop-color:#831380"/>

-				<stop  offset="0.3399" style="stop-color:#A3157B"/>

-				<stop  offset="0.5088" style="stop-color:#D11975"/>

-				<stop  offset="0.6158" style="stop-color:#F21B71"/>

-				<stop  offset="1" style="stop-color:#F7EE5F"/>

-			</linearGradient>

-		</defs>

-		<path style="&st14;" d="M128.277,22.083l-0.384,0.153l-0.383,0.114l-0.343,0.115l-0.386,0.077l-0.382,0.114l-0.347,0.113l-0.384,0.116l-0.38,0.153l-0.077,0.766l-0.041,0.84l-0.039,0.92l-0.038,0.958l-0.001,0.958l-0.001,1.031l-0.04,1.037l-0.039,0.994

-			l-0.076,0.997l-0.115,0.994l-0.193,0.919l-0.191,0.844l-0.305,0.802l-0.346,0.727l-0.422,0.616l-0.536,0.496l1.108-0.268l0.919-0.383l0.767-0.533l0.651-0.614l0.537-0.729l0.423-0.839l0.306-0.919l0.232-0.959l0.156-1.072l0.112-1.11l0.039-1.15l0.042-1.225

-			l0.037-1.225l0.039-1.264l0.001-1.264l0.078-1.303z"/>

-		<defs>

-			<linearGradient gradientUnits="userSpaceOnUse"  id="AIgd36" x1="-3716.3066" y1="-3509.6641" x2="-3713.6802" y2="-3491.7153" gradientTransform="matrix(0.5318 0.0004 -0.0004 0.5318 2070.8274 1900.0875)">

-				<stop  offset="0" style="stop-color:#681083"/>

-				<stop  offset="0.0006" style="stop-color:#681083"/>

-				<stop  offset="0.072" style="stop-color:#8D0F6D"/>

-				<stop  offset="0.1459" style="stop-color:#AD0D5A"/>

-				<stop  offset="0.2229" style="stop-color:#C80A4A"/>

-				<stop  offset="0.3041" style="stop-color:#DE083E"/>

-				<stop  offset="0.3913" style="stop-color:#ED0335"/>

-				<stop  offset="0.4884" style="stop-color:#F60030"/>

-				<stop  offset="0.6158" style="stop-color:#FA002F"/>

-				<stop  offset="1" style="stop-color:#F7EE5F"/>

-			</linearGradient>

-		</defs>

-		<path style="&st15;" d="M118.116,38.426l1.531-0.074l1.304-0.305l1.07-0.497l0.882-0.651l0.689-0.842l0.502-0.958l0.419-1.071l0.27-1.188l0.154-1.226l0.114-1.261l0.041-1.305l0.001-1.262l0.001-1.305l0.001-1.223l0.076-1.15l0.078-1.071l-0.421,0.114

-			l-0.383,0.113l-0.343,0.117l-0.387,0.113l-0.382,0.113l-0.343,0.115l-0.384,0.077l-0.423,0.114l0.039,0.113l0.075,0.269l0.078,0.423l0.114,0.537l0.074,0.688l0.078,0.768l0.039,0.881l-0.04,0.996l-0.114,1.035l-0.195,1.145l-0.347,1.189l-0.42,1.225l-0.614,1.265

-			l-0.766,1.339l-0.921,1.3l-1.15,1.339z"/>

-		<path style="&st15;" d="M112.905,40.07l1.035,0.191l1.035-0.073l0.995-0.346l0.996-0.537l0.956-0.725l0.92-0.881l0.844-1.07l0.769-1.188l0.649-1.265l0.576-1.378l0.462-1.456l0.309-1.489l0.192-1.496l0.041-1.531l-0.152-1.454l-0.308-1.456l-3.638,1.146

-			l0.037,0.613l0.037,0.729l-0.038,0.801l-0.08,0.92l-0.112,0.958l-0.192,1.034l-0.192,1.072l-0.308,1.109l-0.347,1.109l-0.421,1.073l-0.461,1.071l-0.575,1.035l-0.612,0.995l-0.729,0.919l-0.805,0.841l-0.883,0.727z"/>

-		<defs>

-			<linearGradient gradientUnits="userSpaceOnUse"  id="AIgd38" x1="-3716.5049" y1="-3512.9565" x2="-3712.3662" y2="-3473.3286" gradientTransform="matrix(0.5318 0.0004 -0.0004 0.5318 2070.8274 1900.0875)">

-				<stop  offset="0" style="stop-color:#681083"/>

-				<stop  offset="0.0006" style="stop-color:#681083"/>

-				<stop  offset="0.072" style="stop-color:#8D0F6D"/>

-				<stop  offset="0.1459" style="stop-color:#AD0D5A"/>

-				<stop  offset="0.2229" style="stop-color:#C80A4A"/>

-				<stop  offset="0.3041" style="stop-color:#DE083E"/>

-				<stop  offset="0.3913" style="stop-color:#ED0335"/>

-				<stop  offset="0.4884" style="stop-color:#F60030"/>

-				<stop  offset="0.6158" style="stop-color:#FA002F"/>

-				<stop  offset="1" style="stop-color:#F7EE5F"/>

-			</linearGradient>

-		</defs>

-		<path style="&st16;" d="M118.662,24.987l-0.573,0.189l-0.729,0.191l-0.807,0.268l-0.84,0.229l-0.806,0.27l-0.804,0.227l-0.689,0.191l-0.537,0.115l-0.076,0.881l-0.042,0.955l-0.075,0.959l-0.038,0.995l-0.117,0.995l-0.077,1.037l-0.115,0.994l-0.153,0.996

-			l-0.19,0.956l-0.232,0.921l-0.309,0.916l-0.344,0.842l-0.422,0.807l-0.498,0.688l-0.536,0.65l-0.65,0.576l0.766,0.114l0.803-0.038l0.804-0.19l0.805-0.343l0.804-0.5l0.807-0.612l0.768-0.763l0.766-0.958l0.689-1.034l0.611-1.227l0.578-1.339l0.495-1.528

-			l0.388-1.65l0.307-1.758l0.194-1.955l0.077-2.066z"/>

-		<path style="&st15;" d="M103.98,41.593l1.725,0.081l1.455-0.154l1.265-0.418l0.998-0.653l0.841-0.802l0.691-0.958l0.497-1.072l0.386-1.224l0.308-1.225l0.19-1.343l0.116-1.3l0.117-1.302l0.038-1.303l0.078-1.188l0.075-1.11l0.117-0.995l-0.535,0.114l-0.463,0.115

-			l-0.419,0.153l-0.418,0.112l-0.463,0.117l-0.422,0.111l-0.496,0.154l-0.576,0.151l-0.116,1.038l-0.112,0.992l-0.116,0.996l-0.156,0.955l-0.116,0.961l-0.153,0.918l-0.189,0.879l-0.194,0.881l-0.269,0.844l-0.308,0.841l-0.382,0.805l-0.422,0.806l-0.536,0.801

-			l-0.576,0.767l-0.689,0.728l-0.77,0.726z"/>

-		<path style="&st16;" d="M99.349,42.433l1.532,0.078l1.34-0.192l1.188-0.418l1.036-0.65l0.88-0.805l0.766-0.957l0.615-1.107l0.537-1.188l0.458-1.227l0.347-1.3l0.269-1.266l0.194-1.299l0.19-1.226l0.116-1.15l0.116-1.073l0.079-0.919l-0.539,0.117l-0.459,0.112

-			l-0.42,0.115l-0.423,0.077l-0.38,0.113l-0.425,0.074l-0.495,0.152l-0.576,0.115l-0.192,1.496l-0.229,1.417l-0.27,1.301l-0.269,1.226l-0.31,1.109l-0.345,1.071l-0.383,0.919l-0.384,0.883l-0.383,0.803l-0.425,0.727l-0.459,0.613l-0.422,0.573l-0.459,0.536

-			l-0.461,0.42l-0.498,0.383l-0.459,0.345z"/>

-		<defs>

-			<linearGradient gradientUnits="userSpaceOnUse"  id="AIgd41" x1="-3711.1768" y1="-3514.0366" x2="-3709.7402" y2="-3493.4663" gradientTransform="matrix(0.5318 0.0004 -0.0004 0.5318 2070.8274 1900.0875)">

-				<stop  offset="0" style="stop-color:#681083"/>

-				<stop  offset="0.0006" style="stop-color:#681083"/>

-				<stop  offset="0.072" style="stop-color:#8D0F6D"/>

-				<stop  offset="0.1459" style="stop-color:#AD0D5A"/>

-				<stop  offset="0.2229" style="stop-color:#C80A4A"/>

-				<stop  offset="0.3041" style="stop-color:#DE083E"/>

-				<stop  offset="0.3913" style="stop-color:#ED0335"/>

-				<stop  offset="0.4884" style="stop-color:#F60030"/>

-				<stop  offset="0.6158" style="stop-color:#FA002F"/>

-				<stop  offset="1" style="stop-color:#F7EE5F"/>

-			</linearGradient>

-		</defs>

-		<path style="&st17;" d="M94.98,43.004l1.457,0.078l1.302-0.189l1.151-0.424l1.071-0.611l0.881-0.802l0.805-0.919l0.69-1.072l0.614-1.146l0.535-1.189l0.422-1.263l0.347-1.264l0.308-1.262l0.271-1.188l0.192-1.149l0.152-1.031l0.155-0.922l-0.459,0.076l-0.46,0.116

-			l-0.462,0.114l-0.459,0.115l-0.462,0.115l-0.458,0.112l-0.46,0.114l-0.497,0.117l-0.038,0.725l-0.116,0.805l-0.153,0.843l-0.269,0.918l-0.27,0.995l-0.382,0.957l-0.385,1.033l-0.422,0.998l-0.499,0.996l-0.537,0.957l-0.534,0.879l-0.577,0.84l-0.574,0.806

-			l-0.614,0.69l-0.649,0.572l-0.617,0.459z"/>

-		<defs>

-			<linearGradient gradientUnits="userSpaceOnUse"  id="AIgd42" x1="-3718.4951" y1="-3510.1016" x2="-3716.7441" y2="-3482.9595" gradientTransform="matrix(0.5318 0.0004 -0.0004 0.5318 2070.8274 1900.0875)">

-				<stop  offset="0" style="stop-color:#681083"/>

-				<stop  offset="0.0006" style="stop-color:#681083"/>

-				<stop  offset="0.072" style="stop-color:#8D0F6D"/>

-				<stop  offset="0.1459" style="stop-color:#AD0D5A"/>

-				<stop  offset="0.2229" style="stop-color:#C80A4A"/>

-				<stop  offset="0.3041" style="stop-color:#DE083E"/>

-				<stop  offset="0.3913" style="stop-color:#ED0335"/>

-				<stop  offset="0.4884" style="stop-color:#F60030"/>

-				<stop  offset="0.6158" style="stop-color:#FA002F"/>

-				<stop  offset="1" style="stop-color:#F7EE5F"/>

-			</linearGradient>

-		</defs>

-		<path style="&st18;" d="M90.197,43.881l1.49,0.193l1.38-0.191l1.264-0.496l1.15-0.766l1.073-0.955l0.921-1.148l0.84-1.301l0.77-1.341l0.613-1.415l0.537-1.381l0.46-1.302l0.384-1.262l0.23-1.074l0.192-0.88l0.114-0.65l0.001-0.381l-0.573,0.111l-0.537,0.115

-			l-0.535,0.152l-0.536,0.115l-0.536,0.152l-0.5,0.113l-0.497,0.115l-0.499,0.078l-0.191,0.651l-0.19,0.765l-0.229,0.879l-0.271,0.996l-0.308,1.035l-0.343,1.071l-0.384,1.069l-0.424,1.114l-0.461,1.07l-0.497,0.995l-0.537,0.959l-0.574,0.842l-0.653,0.725

-			l-0.65,0.574l-0.728,0.422l-0.765,0.229z"/>

-		<path style="&st18;" d="M86.712,43.688l1.377,0.307l1.223,0.001l1.113-0.267l1.034-0.535l0.882-0.729l0.805-0.881l0.727-1.068l0.652-1.15l0.539-1.226l0.498-1.261l0.384-1.265l0.385-1.227l0.307-1.147l0.231-1.035l0.23-0.918l0.189-0.727l-0.419,0.076

-			l-0.423,0.038l-0.38,0.075l-0.347,0.076l-0.384,0.076l-0.346,0.078l-0.305,0.074l-0.345,0.041l-0.118,0.879l-0.189,0.919l-0.232,0.917l-0.228,0.883l-0.309,0.918l-0.347,0.881l-0.382,0.844l-0.461,0.842l-0.46,0.842l-0.537,0.804l-0.615,0.765l-0.61,0.688

-			l-0.729,0.69l-0.727,0.611l-0.806,0.574l-0.879,0.535z"/>

-		<path style="&st16;" d="M82.345,44.374l1.147,0.002l1.112-0.115l1.07-0.268l1.037-0.384l0.956-0.533l0.959-0.65l0.842-0.763l0.841-0.842l0.73-0.96l0.69-1.032l0.614-1.15l0.573-1.186l0.461-1.264l0.385-1.34l0.347-1.379l0.23-1.414l-0.498,0.113l-0.499,0.076

-			l-0.536,0.115l-0.496,0.074l-0.497,0.078l-0.459,0.112l-0.5,0.077l-0.459,0.115l-0.231,0.805l-0.191,0.842l-0.231,0.805l-0.194,0.803l-0.23,0.804l-0.228,0.804l-0.307,0.766l-0.346,0.804l-0.42,0.767l-0.463,0.803l-0.576,0.766l-0.688,0.766l-0.768,0.729

-			l-0.918,0.765l-1.073,0.766l-1.188,0.726z"/>

-		<path style="&st16;" d="M76.14,45.095l1.495,0.118l1.454-0.076l1.34-0.229l1.266-0.382l1.187-0.497l1.112-0.649l1.033-0.768l0.918-0.917l0.844-0.955l0.767-1.073l0.693-1.148l0.573-1.222l0.496-1.304l0.425-1.34l0.307-1.377l0.233-1.381l-0.423,0.076l-0.46,0.117

-			l-0.456,0.074l-0.461,0.075l-0.459,0.078l-0.5,0.114l-0.497,0.076l-0.5,0.115l-0.152,0.955l-0.23,0.957l-0.31,0.96l-0.383,0.917l-0.457,0.918l-0.502,0.918l-0.574,0.882l-0.648,0.843l-0.691,0.844l-0.767,0.762l-0.808,0.727l-0.879,0.689l-0.921,0.611

-			l-0.995,0.575l-0.997,0.497l-1.072,0.419z"/>

-		<path style="&st15;" d="M72.732,45.475l1.264-0.075l1.226-0.189l1.228-0.306l1.186-0.458l1.112-0.536l1.109-0.648l1.034-0.729l0.958-0.842l0.881-0.917l0.843-0.993l0.73-1.076l0.65-1.109l0.536-1.184l0.46-1.226l0.348-1.267l0.229-1.299l-0.419,0.074l-0.385,0.037

-			l-0.346,0.039l-0.343,0.039l-0.346,0.037l-0.382,0.077L83.849,33l-0.539,0.075l-0.537,1.112l-0.459,1.031l-0.46,0.997l-0.422,0.919l-0.46,0.881l-0.424,0.805l-0.461,0.764l-0.498,0.727l-0.537,0.729l-0.613,0.649l-0.688,0.69l-0.765,0.611l-0.884,0.65

-			l-0.996,0.611l-1.108,0.612l-1.265,0.61z"/>

-		<path style="&st16;" d="M66.604,45.855l1.877,0.077l1.763-0.073l1.57-0.267l1.455-0.422l1.34-0.572l1.187-0.691l1.113-0.801l0.993-0.92l0.921-0.993l0.844-1.072l0.729-1.109l0.688-1.189l0.652-1.184l0.577-1.187l0.538-1.227l0.496-1.187l-0.343,0.036l-0.461,0.078

-			l-0.573,0.076l-0.575,0.076l-0.613,0.115l-0.537,0.076l-0.456,0.076l-0.347,0.035l-0.46,1.074l-0.499,1.074l-0.577,0.994l-0.573,0.955l-0.652,0.881l-0.688,0.879l-0.729,0.804l-0.804,0.807l-0.804,0.727l-0.885,0.688l-0.917,0.688l-0.96,0.613l-0.995,0.572

-			l-1.072,0.535l-1.072,0.496l-1.149,0.46z"/>

-		<path style="&st15;" d="M62.966,46.387L64,46.35l1.071-0.152l1.15-0.269l1.186-0.419l1.188-0.495l1.189-0.613l1.188-0.726l1.187-0.803l1.149-0.918l1.111-0.957l1.035-1.07l0.999-1.15l0.879-1.188l0.804-1.262l0.691-1.34l0.576-1.38l-0.575,0.079l-0.575,0.074

-			l-0.611,0.037l-0.612,0.077l-0.536,0.037l-0.461,0.077l-0.382,0.076l-0.192,0.115l-0.69,0.535l-0.689,0.575l-0.729,0.688l-0.729,0.688l-0.727,0.766l-0.767,0.802l-0.767,0.844l-0.768,0.845l-0.766,0.879l-0.804,0.842l-0.805,0.842l-0.845,0.84l-0.842,0.843

-			l-0.845,0.763L63.848,45.7l-0.882,0.688z"/>

-		<path style="&st16;" d="M57.375,46.383l0.997,0.654l1.032,0.268l1.034,0.001l1.073-0.268l1.071-0.536l1.073-0.729l1.111-0.916l1.11-1.033l1.112-1.188l1.148-1.225l1.189-1.301l1.188-1.299l1.188-1.264l1.226-1.264l1.228-1.148l1.226-1.031h-0.425l-0.494,0.074

-			l-0.576,0.038l-0.573,0.116L72.7,34.411l-0.612,0.113l-0.572,0.115l-0.5,0.075l-0.956,0.88l-0.957,0.88l-0.923,0.919l-0.919,0.919l-0.881,0.916l-0.883,0.921l-0.88,0.92l-0.845,0.84l-0.844,0.84l-0.842,0.768l-0.805,0.688l-0.804,0.613l-0.805,0.535l-0.767,0.459

-			l-0.766,0.343l-0.767,0.229z"/>

-		<path style="&st15;" d="M53.046,46.879l1.572,0.001l1.492-0.151l1.342-0.385l1.304-0.494l1.187-0.614l1.109-0.765l1.075-0.84l0.995-0.92l0.997-0.994l0.956-1.033l0.921-1.035l0.959-1.07l0.959-1.07l0.994-1.034l1.035-0.957l1.072-0.918l-0.382,0.04l-0.458,0.037

-			l-0.577,0.074l-0.572,0.041l-0.577,0.073l-0.459,0.038l-0.382,0.041l-0.229-0.001l-0.651,0.151L66.076,35.4l-0.649,0.423l-0.692,0.573l-0.689,0.687l-0.729,0.805l-0.766,0.844l-0.769,0.915l-0.88,0.958l-0.883,0.955l-0.997,0.996l-1.032,0.959l-1.111,0.955

-			l-1.188,0.88l-1.264,0.802l-1.381,0.729z"/>

-		<path style="&st11;" d="M138.274,15.35v-0.153l0.04-0.42l0.038-0.649l0.04-0.807l0.039-0.957l-0.037-1.033l-0.038-1.072l-0.111-1.111l-0.229-1.033l-0.309-0.996l-0.38-0.882l-0.572-0.728l-0.654-0.537l-0.843-0.307l-1.034-0.039l-1.186,0.306l0.385,0.384

-			l0.343,0.459l0.345,0.574l0.306,0.613l0.305,0.689l0.27,0.689l0.264,0.767l0.271,0.804l0.228,0.767l0.19,0.806l0.194,0.803l0.188,0.766l0.155,0.768l0.152,0.727l0.114,0.65l0.113,0.613l0.19-0.037l0.154-0.037l0.189-0.078l0.155-0.037l0.151-0.079l0.155-0.075

-			l0.192-0.037l0.226-0.078z"/>

-		<defs>

-			<linearGradient gradientUnits="userSpaceOnUse"  id="AIgd52" x1="-3690.9155" y1="-3526.2993" x2="-3702.7354" y2="-3558.2568" gradientTransform="matrix(0.5318 0.0004 -0.0004 0.5318 2070.8274 1900.0875)">

-				<stop  offset="0" style="stop-color:#4F0C81"/>

-				<stop  offset="0.0701" style="stop-color:#690C73"/>

-				<stop  offset="0.209" style="stop-color:#9A0A5B"/>

-				<stop  offset="0.3368" style="stop-color:#C20748"/>

-				<stop  offset="0.4512" style="stop-color:#E0053A"/>

-				<stop  offset="0.5481" style="stop-color:#F20032"/>

-				<stop  offset="0.6158" style="stop-color:#FA002F"/>

-				<stop  offset="1" style="stop-color:#F7EE5F"/>

-			</linearGradient>

-		</defs>

-		<path style="&st19;" d="M136.86,15.925l-0.497-2.489l-0.535-2.108l-0.535-1.801l-0.532-1.492l-0.539-1.188l-0.534-0.958l-0.533-0.689l-0.499-0.497l-0.536-0.347l-0.458-0.153l-0.502-0.039l-0.42,0.078l-0.419,0.152l-0.382,0.191l-0.348,0.229l-0.306,0.23

-			l0.536,0.497l0.533,0.573l0.462,0.538l0.494,0.611l0.424,0.615l0.422,0.648l0.382,0.652l0.344,0.691l0.344,0.727l0.306,0.766l0.307,0.768l0.268,0.805l0.227,0.842l0.23,0.842l0.227,0.882l0.194,0.919l0.457-0.077l0.345-0.036l0.232-0.077l0.153-0.077l0.151-0.037

-			l0.156-0.076L136.632,16l0.229-0.075z"/>

-		<path style="&st11;" d="M134.944,16.651l-0.113-0.918l-0.194-1.035l-0.305-1.15l-0.379-1.226l-0.5-1.264l-0.571-1.227l-0.611-1.187l-0.688-1.111l-0.729-0.996l-0.765-0.843l-0.803-0.65l-0.842-0.425l-0.881-0.152l-0.882,0.152l-0.842,0.499l-0.882,0.878

-			l0.688,0.498l0.65,0.576l0.613,0.574l0.574,0.576l0.574,0.611l0.496,0.689l0.459,0.691l0.42,0.688l0.423,0.769l0.343,0.767l0.345,0.805l0.267,0.842l0.267,0.879l0.193,0.92l0.189,0.959l0.155,0.994l0.416-0.114l0.461-0.152l0.499-0.153l0.498-0.191l0.461-0.189

-			l0.421-0.154l0.344-0.151l0.23-0.077z"/>

-		<path style="&st19;" d="M120.017,6.607l0.919-0.612l0.92-0.344l0.957-0.115l0.919,0.115l0.958,0.307l0.919,0.5l0.882,0.689l0.843,0.805l0.762,0.919l0.766,1.073l0.65,1.188l0.572,1.226l0.496,1.305l0.384,1.376l0.306,1.38l0.151,1.416l-0.46,0.115l-0.459,0.116

-			l-0.46,0.15l-0.46,0.154l-0.497,0.191l-0.499,0.113l-0.457,0.154l-0.498,0.075l-0.346-0.88l-0.305-0.959l-0.383-0.957l-0.348-0.957l-0.379-0.996l-0.419-0.998l-0.423-0.956l-0.421-0.918l-0.456-0.884l-0.499-0.805l-0.533-0.766l-0.539-0.651l-0.609-0.575

-			l-0.615-0.459l-0.648-0.346l-0.69-0.19z"/>

-		<path style="&st11;" d="M115.804,7.75l1.455-0.648l1.302-0.344l1.149-0.038l1.034,0.193l0.919,0.421l0.806,0.65l0.724,0.807l0.65,0.957l0.575,1.072l0.495,1.188l0.5,1.229l0.457,1.225l0.457,1.264l0.421,1.264l0.459,1.188l0.497,1.111l-0.421,0.037l-0.384,0.115

-			l-0.383,0.113l-0.385,0.152l-0.381,0.118l-0.384,0.151l-0.421,0.114l-0.422,0.074l-0.038-0.151l-0.038-0.383l-0.114-0.498l-0.114-0.689l-0.189-0.803l-0.27-0.92l-0.306-0.996l-0.42-1.034l-0.494-1.034l-0.574-1.035l-0.728-1.035l-0.803-0.958l-0.96-0.918

-			l-1.07-0.767l-1.228-0.691l-1.375-0.5z"/>

-		<path style="&st19;" d="M110.366,8.552l0.882-0.651l0.997-0.42l1.069-0.153l1.072,0.04l1.149,0.229l1.148,0.461l1.108,0.615l1.111,0.768l1.07,0.956l0.997,1.075l0.878,1.225l0.805,1.342l0.687,1.416l0.537,1.533l0.342,1.57l0.19,1.687l-3.945,1.029l-0.228-0.649

-			l-0.307-0.77l-0.306-0.803l-0.382-0.881l-0.461-0.92l-0.457-0.956l-0.537-0.961l-0.573-0.956l-0.652-0.957l-0.725-0.92l-0.766-0.842l-0.803-0.808l-0.878-0.728l-0.959-0.613l-0.996-0.537l-1.07-0.421z"/>

-		<path style="&st11;" d="M120.502,21.387l-0.572,0.115l-0.727,0.152l-0.729,0.23l-0.808,0.229l-0.764,0.267l-0.729,0.191l-0.649,0.189l-0.536,0.152l-0.382-0.957l-0.421-0.995l-0.422-0.996l-0.42-1.036l-0.421-1.032l-0.458-0.997l-0.498-0.995l-0.497-0.997

-			l-0.533-0.918l-0.573-0.845l-0.614-0.804l-0.651-0.727l-0.65-0.652l-0.728-0.537l-0.804-0.423l-0.804-0.306l0.692-0.459l0.764-0.344l0.806-0.23l0.88-0.075l0.918,0.076l0.959,0.231l0.957,0.383l0.992,0.576l0.999,0.728l0.993,0.92l0.995,1.149l0.954,1.304

-			l0.919,1.532l0.917,1.723l0.843,1.992l0.802,2.184z"/>

-		<path style="&st11;" d="M101.288,11.34l1.571-0.841l1.415-0.498l1.304-0.114l1.187,0.193l1.032,0.458l0.996,0.691l0.841,0.883l0.805,1.073l0.688,1.188l0.649,1.265l0.573,1.341l0.534,1.34l0.536,1.302l0.498,1.265l0.458,1.148l0.456,1.035l-0.534,0.076

-			l-0.459,0.112l-0.422,0.079l-0.422,0.114l-0.421,0.114l-0.459,0.115l-0.498,0.076l-0.572,0.112l-0.5-1.033l-0.458-1.036l-0.46-0.994l-0.458-0.958l-0.459-0.958l-0.495-0.88l-0.5-0.881l-0.495-0.806l-0.575-0.807l-0.61-0.727l-0.612-0.688l-0.688-0.652

-			l-0.769-0.615l-0.801-0.536l-0.92-0.498l-0.956-0.46z"/>

-		<path style="&st19;" d="M96.537,12.715l1.419-0.765l1.339-0.383l1.265-0.075l1.225,0.191l1.111,0.461l1.069,0.689l0.996,0.844l0.921,0.998l0.841,1.149l0.802,1.187l0.726,1.227l0.652,1.264l0.611,1.266l0.537,1.148l0.455,1.111l0.423,0.957l-0.574,0.113

-			l-0.5,0.115l-0.46,0.113l-0.421,0.076l-0.458,0.115l-0.461,0.115l-0.536,0.076l-0.613,0.115l-0.688-1.533l-0.688-1.417l-0.646-1.302l-0.651-1.188l-0.614-1.071l-0.573-0.961l-0.61-0.84l-0.574-0.807l-0.612-0.651l-0.613-0.575l-0.611-0.498l-0.65-0.421

-			l-0.653-0.308l-0.685-0.269l-0.731-0.155l-0.765-0.113z"/>

-		<path style="&st11;" d="M92.937,13.747l1.378-0.65l1.307-0.308l1.222,0.001l1.19,0.233l1.07,0.458l1.033,0.654l0.956,0.844l0.92,0.957l0.802,1.072l0.766,1.148l0.726,1.188l0.613,1.188l0.609,1.189l0.5,1.15l0.456,1.033l0.421,0.959l-0.459,0.113l-0.42,0.113

-			l-0.424,0.076l-0.383,0.116l-0.421,0.077l-0.42,0.075l-0.462,0.113l-0.496,0.077l-0.231-0.765l-0.342-0.845l-0.42-0.842l-0.497-0.919l-0.535-0.919l-0.651-0.921l-0.649-0.92l-0.728-0.92l-0.765-0.841l-0.805-0.846l-0.803-0.766l-0.804-0.652l-0.843-0.613

-			l-0.805-0.498l-0.802-0.383l-0.806-0.23z"/>

-		<path style="&st19;" d="M88.608,14.852l1.417-0.762l1.38-0.345l1.379,0.039l1.301,0.385l1.264,0.612l1.226,0.879l1.149,1.038l1.069,1.147l0.995,1.229l0.881,1.264l0.8,1.227l0.65,1.187l0.536,1.036l0.422,0.879l0.23,0.652l0.113,0.383l-0.574,0.115l-0.498,0.113

-			l-0.498,0.115l-0.5,0.115l-0.496,0.115l-0.459,0.074l-0.499,0.077l-0.497,0.076l-0.344-0.651l-0.384-0.804l-0.458-0.882l-0.537-0.921l-0.571-1.033l-0.614-1.034l-0.646-0.997l-0.691-1.034l-0.727-0.959l-0.767-0.881l-0.802-0.804l-0.803-0.652l-0.844-0.537

-			l-0.844-0.345l-0.878-0.152l-0.882,0.035z"/>

-		<path style="&st11;" d="M85.468,16.077l1.266-0.842l1.224-0.459l1.149-0.113l1.149,0.19l1.071,0.461l1.033,0.692l0.958,0.842l0.915,1.035l0.844,1.113l0.805,1.184l0.727,1.229l0.687,1.225l0.574,1.15l0.535,1.073l0.421,0.918l0.383,0.766l-0.46,0.077l-0.382,0.114

-			l-0.344,0.115l-0.308,0.113l-0.347,0.114l-0.305,0.115l-0.308,0.078l-0.343,0.073l-0.344-0.955l-0.421-0.958l-0.422-0.921l-0.46-0.918l-0.537-0.919l-0.531-0.844l-0.613-0.844l-0.65-0.805l-0.689-0.767l-0.764-0.688l-0.765-0.614l-0.844-0.574l-0.919-0.5

-			l-0.919-0.421l-0.996-0.308l-1.071-0.229z"/>

-		<path style="&st19;" d="M81.483,16.993l1.113-0.422l1.109-0.266l1.148-0.077l1.074,0.078l1.109,0.231l1.032,0.345l1.034,0.536l1.034,0.652l0.956,0.768l0.918,0.92l0.881,0.996l0.842,1.112l0.802,1.226l0.689,1.34l0.688,1.418l0.571,1.491l-0.498,0.077

-			l-0.495,0.076l-0.501,0.115l-0.497,0.153l-0.496,0.115l-0.498,0.153l-0.497,0.115l-0.5,0.074l-0.343-0.842l-0.343-0.882l-0.347-0.843l-0.342-0.883l-0.422-0.842l-0.419-0.805l-0.501-0.842l-0.534-0.767l-0.649-0.729l-0.688-0.728l-0.805-0.652l-0.88-0.613

-			l-0.996-0.537l-1.11-0.498l-1.261-0.424l-1.381-0.344z"/>

-		<path style="&st11;" d="M75.815,18.329l1.455-0.609l1.457-0.385l1.34-0.189l1.34-0.037l1.265,0.191l1.226,0.346l1.147,0.498l1.111,0.652l0.992,0.805l0.994,0.919l0.884,1.036l0.84,1.15l0.764,1.264l0.652,1.34l0.611,1.381l0.535,1.491l-0.459,0.077l-0.46,0.076

-			l-0.536,0.078l-0.501,0.074l-0.533,0.078l-0.538,0.074l-0.535,0.076l-0.535,0.076l-0.269-1.072l-0.383-0.994l-0.42-0.996l-0.533-0.959l-0.575-0.881L85.5,23.046l-0.688-0.805l-0.766-0.729l-0.842-0.689l-0.916-0.574l-0.959-0.539l-0.995-0.459l-1.071-0.346

-			l-1.112-0.307l-1.146-0.191l-1.188-0.078z"/>

-		<path style="&st19;" d="M73.021,18.632l1.302-0.19l1.262-0.113l1.263,0.039l1.228,0.154l1.224,0.307l1.15,0.385l1.109,0.498l1.073,0.613l0.995,0.729l0.954,0.844l0.844,0.919l0.803,1.034L86.916,25l0.611,1.226l0.499,1.341l0.38,1.419l-0.46,0.035l-0.383,0.038

-			l-0.382,0.077l-0.384,0.077l-0.384,0.074l-0.382,0.078l-0.46,0.114l-0.496,0.076l-0.651-1.111l-0.613-1.073l-0.532-0.958l-0.5-0.956l-0.535-0.844l-0.498-0.804l-0.497-0.767l-0.572-0.69l-0.612-0.651l-0.688-0.575l-0.768-0.535l-0.842-0.498l-0.995-0.425

-			L75.7,19.286l-1.264-0.346l-1.415-0.308z"/>

-		<path style="&st11;" d="M66.933,19.432l1.914-0.457l1.8-0.268l1.646-0.075l1.531,0.154l1.417,0.307l1.302,0.461l1.187,0.573l1.074,0.77l1.03,0.842l0.917,0.96l0.844,1.034l0.802,1.112l0.728,1.147l0.688,1.227l0.612,1.226l0.611,1.265l-0.307,0.037l-0.42,0.037

-			l-0.459,0.115l-0.501,0.076l-0.496,0.115l-0.462,0.114l-0.419,0.036l-0.346,0.039l-0.571-1.148l-0.613-1.035L79.753,27.1l-0.726-0.918l-0.766-0.883l-0.805-0.806l-0.879-0.726l-0.919-0.69l-0.956-0.616l-0.996-0.573l-1.034-0.498l-1.07-0.498l-1.111-0.423

-			l-1.147-0.383l-1.189-0.346l-1.222-0.309z"/>

-		<path style="&st11;" d="M63.295,19.811l1.068-0.189l1.113-0.037l1.225,0.038l1.263,0.192l1.267,0.271l1.3,0.384l1.303,0.497l1.302,0.614l1.3,0.729l1.224,0.845l1.186,0.92l1.147,1.035l1.035,1.149l0.956,1.225l0.841,1.342l0.728,1.455l-0.537,0.039l-0.533,0.076

-			l-0.538,0.115l-0.536,0.113l-0.459,0.113l-0.385,0.117l-0.306,0.036l-0.19-0.037l-0.769-0.46l-0.763-0.537l-0.804-0.613l-0.843-0.689l-0.843-0.729l-0.878-0.768l-0.92-0.768l-0.916-0.802l-0.959-0.806l-0.956-0.807l-0.995-0.803l-0.996-0.729l-1.033-0.729

-			l-0.995-0.652l-1.071-0.613l-1.031-0.537z"/>

-		<path style="&st11;" d="M58.197,21.262l0.958-0.955l1.034-0.572l1.074-0.23l1.109,0.077l1.148,0.308l1.225,0.575l1.227,0.769l1.3,0.879l1.301,1.074l1.341,1.11l1.34,1.19l1.34,1.188l1.377,1.188l1.377,1.112l1.376,1.035l1.381,0.92l-0.421,0.074l-0.499,0.037

-			l-0.612,0.041l-0.613,0.037l-0.648,0.037h-0.653h-0.574l-0.497-0.002l-1.034-0.766l-0.993-0.804l-0.996-0.808l-0.918-0.842l-0.919-0.805l-0.883-0.807l-0.878-0.805l-0.88-0.767l-0.919-0.688l-0.879-0.651l-0.92-0.575l-0.956-0.5l-0.996-0.422l-1.034-0.345

-			l-1.073-0.192l-1.11-0.117z"/>

-		<defs>

-			<linearGradient gradientUnits="userSpaceOnUse"  id="AIgd69" x1="-3772.377" y1="-3509.7163" x2="-3797.2949" y2="-3537.6816" gradientTransform="matrix(0.5318 0.0004 -0.0004 0.5318 2070.8274 1900.0875)">

-				<stop  offset="0" style="stop-color:#4F0C81"/>

-				<stop  offset="0.0701" style="stop-color:#690C73"/>

-				<stop  offset="0.209" style="stop-color:#9A0A5B"/>

-				<stop  offset="0.3368" style="stop-color:#C20748"/>

-				<stop  offset="0.4512" style="stop-color:#E0053A"/>

-				<stop  offset="0.5481" style="stop-color:#F20032"/>

-				<stop  offset="0.6158" style="stop-color:#FA002F"/>

-				<stop  offset="1" style="stop-color:#F7EE5F"/>

-			</linearGradient>

-		</defs>

-		<path style="&st20;" d="M54.368,21.719l1.61-0.381l1.493-0.152l1.415,0.076l1.343,0.271l1.262,0.461l1.226,0.575l1.186,0.729l1.148,0.805l1.11,0.919l1.109,0.922l1.071,0.995l1.111,0.996l1.109,0.958l1.107,0.959l1.188,0.843l1.185,0.807l-0.38,0.037l-0.498,0.075

-			l-0.576,0.078l-0.576,0.036l-0.572,0.079l-0.5,0.072l-0.38,0.041l-0.231,0.037l-0.688-0.002l-0.69-0.189l-0.727-0.348l-0.766-0.496l-0.766-0.614l-0.843-0.728l-0.879-0.807l-0.919-0.844l-0.959-0.881l-1.031-0.918l-1.109-0.882l-1.148-0.844l-1.262-0.808

-			l-1.302-0.728l-1.379-0.651l-1.494-0.5z"/>

-		<path style="&st20;" d="M49.543,23.057l1.417-0.805l1.495-0.342h1.455l1.49,0.309l1.495,0.576l1.494,0.804l1.454,0.96l1.415,1.034l1.339,1.149l1.302,1.15l1.263,1.075l1.148,0.993l1.033,0.844l0.956,0.65l0.843,0.385l0.726,0.116l-0.61,0.077l-0.653,0.113

-			l-0.727,0.113l-0.765,0.117l-0.767,0.074l-0.767,0.115l-0.728,0.038L64.2,32.642l-1.07-0.806l-0.958-0.766l-0.879-0.767l-0.84-0.728l-0.767-0.73L58.96,28.12l-0.767-0.691l-0.726-0.651l-0.729-0.612l-0.804-0.576l-0.841-0.537l-0.919-0.496l-0.996-0.461

-			l-1.071-0.383l-1.226-0.348l-1.34-0.307z"/>

-		<defs>

-			<linearGradient gradientUnits="userSpaceOnUse"  id="AIgd71" x1="-3498.5225" y1="4158.0396" x2="-3482.3647" y2="4209.6001" gradientTransform="matrix(0.5318 0.0004 -0.0004 0.5318 -1982.8965 3021.3838)">

-				<stop  offset="0" style="stop-color:#D8E7EB"/>

-				<stop  offset="0.0849" style="stop-color:#C9D9DE"/>

-				<stop  offset="0.2184" style="stop-color:#A5B8C2"/>

-				<stop  offset="0.3836" style="stop-color:#728896"/>

-				<stop  offset="0.5537" style="stop-color:#405766"/>

-				<stop  offset="0.6417" style="stop-color:#667D8B"/>

-				<stop  offset="0.742" style="stop-color:#92A7B1"/>

-				<stop  offset="0.8374" style="stop-color:#B7C8D0"/>

-				<stop  offset="0.9257" style="stop-color:#CFDFE4"/>

-				<stop  offset="1" style="stop-color:#D8E7EB"/>

-			</linearGradient>

-		</defs>

-		<g style="&st21;">

-			<defs>

-				<linearGradient gradientUnits="userSpaceOnUse"  id="AIgd72" x1="-3704.9473" y1="-3493.9082" x2="-3688.7896" y2="-3442.3477" gradientTransform="matrix(0.5318 0.0004 -0.0004 0.5318 2110.5286 1859.3658)">

-					<stop  offset="0" style="stop-color:#D8E7EB"/>

-					<stop  offset="0.0849" style="stop-color:#C9D9DE"/>

-					<stop  offset="0.2184" style="stop-color:#A5B8C2"/>

-					<stop  offset="0.3836" style="stop-color:#728896"/>

-					<stop  offset="0.5537" style="stop-color:#405766"/>

-					<stop  offset="0.6417" style="stop-color:#667D8B"/>

-					<stop  offset="0.742" style="stop-color:#92A7B1"/>

-					<stop  offset="0.8374" style="stop-color:#B7C8D0"/>

-					<stop  offset="0.9257" style="stop-color:#CFDFE4"/>

-					<stop  offset="1" style="stop-color:#D8E7EB"/>

-				</linearGradient>

-			</defs>

-			<path style="&st22;" d="M142.305,7.35l0.191-0.383l0.153-0.42l0.152-0.423l0.113-0.421l0.117-0.459l0.115-0.496l0.077-0.459l0.042-0.5l0.036-0.459l0.035-0.498l0.001-0.499l-0.035-0.46l-0.036-0.459l-0.08-0.457l-0.112-0.461l-0.114-0.42l0.611,0.804l0.459,0.882

-				l0.345,0.842l0.189,0.88l0.076,0.919v0.92l-0.116,0.918l-0.194,0.92l-0.228,0.918l-0.31,0.883l-0.343,0.879l-0.343,0.88l-0.385,0.843l-0.347,0.842l-0.346,0.765l-0.343,0.767l0.074-0.152l0.037-0.269l0.042-0.266v-0.345l0.037-0.424V12.06V11.6l0.001-0.496

-				l0.038-0.499v-0.498l0.039-0.534l0.04-0.498l0.038-0.461l0.078-0.461l0.075-0.42l0.116-0.383z"/>

-			<path style="&st22;" d="M153.974,23.252l-0.729-0.422l-0.729-0.462l-0.687-0.421l-0.688-0.422l-0.65-0.383l-0.651-0.422l-0.616-0.385l-0.609-0.42l-0.653-0.384l-0.607-0.384l-0.614-0.422l-0.652-0.382l-0.611-0.386l-0.654-0.342l-0.686-0.386l-0.689-0.382

-				l0.61,0.61l0.613,0.616l0.613,0.611l0.612,0.576l0.65,0.611l0.651,0.536l0.65,0.539l0.688,0.497l0.651,0.461l0.689,0.383l0.651,0.346l0.688,0.269l0.688,0.229l0.688,0.115l0.691,0.037l0.691-0.035z"/>

-			<path style="&st22;" d="M148.277,7.928l-0.536,0.308l-0.5,0.345l-0.495,0.345l-0.461,0.344l-0.46,0.343l-0.419,0.383l-0.424,0.421l-0.423,0.383l-0.384,0.422l-0.384,0.422l-0.382,0.421l-0.345,0.457l-0.383,0.422l-0.346,0.459l-0.344,0.459l-0.346,0.459

-				l0.153-0.496l0.192-0.499l0.191-0.537l0.229-0.534l0.231-0.536l0.265-0.499l0.31-0.498l0.346-0.495l0.382-0.46l0.461-0.381l0.498-0.385l0.537-0.344l0.612-0.269l0.652-0.229l0.765-0.152l0.805-0.076z"/>

-			<path style="&st22;" d="M142.574,3.329l-0.153,0.767l-0.114,0.767l-0.154,0.766l-0.116,0.689l-0.076,0.727l-0.114,0.689l-0.079,0.689l-0.115,0.689L141.576,9.8l-0.117,0.689l-0.074,0.651l-0.118,0.689l-0.116,0.689l-0.115,0.689l-0.15,0.689l-0.157,0.727

-				l-0.076-0.842l-0.113-0.805l-0.077-0.843l-0.076-0.841l-0.037-0.807l-0.038-0.805l0.039-0.805l0.039-0.764l0.076-0.767l0.116-0.688l0.194-0.689l0.229-0.651l0.269-0.573l0.384-0.537l0.422-0.46l0.497-0.421z"/>

-			<path style="&st22;" d="M146.674,2.071l0.692,0.648l0.416,0.729l0.189,0.766l0.04,0.805l-0.153,0.804l-0.307,0.843l-0.424,0.844l-0.498,0.841l-0.575,0.804l-0.611,0.805l-0.653,0.764l-0.65,0.689l-0.614,0.689l-0.534,0.572l-0.463,0.539l-0.383,0.418l0.077-1.147

-				l0.154-0.995l0.191-0.844l0.307-0.764l0.306-0.65l0.386-0.574l0.382-0.535l0.424-0.501l0.383-0.496l0.424-0.495l0.382-0.538l0.307-0.613l0.307-0.688l0.23-0.766l0.194-0.919l0.075-1.032z"/>

-			<path style="&st22;" d="M141.763,14.319v-0.805l-0.039-0.765l-0.034-0.765l-0.04-0.768l-0.036-0.729l-0.077-0.727l-0.076-0.727l-0.073-0.691l-0.117-0.688l-0.114-0.728l-0.189-0.689l-0.152-0.689L140.62,4.86l-0.268-0.689l-0.229-0.689l-0.306-0.689l1.111,1.073

-				l0.918,1.034l0.649,0.959l0.457,0.92l0.309,0.879l0.151,0.805l0.037,0.806l-0.077,0.727l-0.195,0.689l-0.187,0.651l-0.27,0.613l-0.271,0.533l-0.23,0.537l-0.229,0.459l-0.152,0.459l-0.078,0.383z"/>

-			<path style="&st22;" d="M152.982,16.97l-0.613,0.114l-0.614,0.116l-0.611,0.075l-0.613,0.075l-0.609,0.038l-0.616,0.037h-0.613h-0.575l-0.612-0.039h-0.574l-0.613-0.077l-0.573-0.038l-0.613-0.04l-0.575-0.075l-0.612-0.079l-0.574-0.075l0.498,0.229l0.498,0.192

-				l0.535,0.231l0.537,0.19l0.574,0.193l0.576,0.151l0.61,0.156l0.61,0.076l0.612,0.039h0.651l0.651-0.039l0.654-0.15l0.651-0.191l0.651-0.27l0.648-0.381l0.654-0.46z"/>

-			<path style="&st22;" d="M149.417,20.07l0.461,0.078l0.419,0.075l0.461,0.115l0.457,0.115l0.463,0.194l0.456,0.151l0.421,0.191l0.46,0.23l0.421,0.23l0.421,0.267l0.383,0.271l0.386,0.268l0.343,0.307l0.308,0.307l0.304,0.307l0.27,0.344l-0.269-0.917l-0.422-0.808

-				l-0.494-0.688l-0.615-0.651l-0.688-0.536l-0.768-0.5L151.754,19l-0.882-0.347l-0.919-0.306l-0.919-0.307l-0.955-0.231l-0.958-0.23l-0.957-0.193l-0.919-0.189l-0.843-0.154l-0.842-0.192l0.42,0.153l0.574,0.306l0.69,0.463l0.841,0.497l0.843,0.535l0.879,0.499

-				l0.842,0.46l0.768,0.308z"/>

-			<path style="&st22;" d="M151.174,26.926l0.345-0.881l0.117-0.844l-0.116-0.842l-0.307-0.766l-0.457-0.729l-0.612-0.727l-0.728-0.69l-0.804-0.614l-0.843-0.613l-0.879-0.536l-0.919-0.538l-0.884-0.459l-0.801-0.42l-0.767-0.387l-0.651-0.344l-0.496-0.309

-				l0.532,1.113l0.538,0.919l0.573,0.728l0.536,0.652l0.574,0.498l0.574,0.459l0.574,0.346l0.574,0.346l0.571,0.346l0.577,0.382l0.572,0.384l0.536,0.46l0.537,0.573l0.535,0.691l0.497,0.806l0.498,0.995z"/>

-			<path style="&st22;" d="M141.529,17.497l0.422,0.652l0.42,0.652l0.421,0.65l0.38,0.613l0.346,0.613l0.345,0.649l0.346,0.614l0.305,0.613l0.304,0.652l0.268,0.65l0.271,0.613l0.229,0.65l0.19,0.689l0.192,0.65l0.152,0.689l0.152,0.73l0.384-1.455l0.191-1.265

-				l0.041-1.149l-0.115-0.994l-0.229-0.844l-0.346-0.766l-0.42-0.652l-0.458-0.537l-0.538-0.499l-0.535-0.421l-0.573-0.346l-0.537-0.306l-0.496-0.306l-0.46-0.268l-0.342-0.307l-0.31-0.271z"/>

-		</g>

-	</g>

-</g><!-- Layer_x0020_1 -->

-</g><!-- translate and flip -->

-<g id="project_text1" style='font-family: "Tahoma"; font-size: 15px; font-weight: bold;'>

-	<text x="114" y="15" fill="black" text-anchor="start">The</text>

-</g>

-<g id="project_text2" style='font-family: "Tahoma"; font-size: 26px; font-weight: bold;'>

-	<text x="150" y="23" fill="black" text-anchor="start">Apache Jakarta</text>

-</g>

-<g id="project_text3" style='font-family: "Tahoma"; font-size: 26px; font-weight: bold;'>

-	<text x="200" y="44" fill="black" text-anchor="start">Project</text>

-</g>

-<g id="project_text3" style='font-family: "Tahoma"; font-size: 16px; '>

-	<text x="30" y="65" fill="black" text-anchor="start">h t t p : / / j a k a r t a . a p a c h e . o r g / </text>

-</g>

-

-

-</g>

-</svg>

diff --git a/3.0.4/doc/forrest/resources/images/jakarta.png b/3.0.4/doc/forrest/resources/images/jakarta.png
deleted file mode 100644
index ab945d3..0000000
--- a/3.0.4/doc/forrest/resources/images/jakarta.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/forrest/resources/images/success/edit-form.gif b/3.0.4/doc/forrest/resources/images/success/edit-form.gif
deleted file mode 100644
index 6d9578d..0000000
--- a/3.0.4/doc/forrest/resources/images/success/edit-form.gif
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/forrest/resources/images/success/status-table.gif b/3.0.4/doc/forrest/resources/images/success/status-table.gif
deleted file mode 100644
index 94ef49d..0000000
--- a/3.0.4/doc/forrest/resources/images/success/status-table.gif
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/forrest/resources/images/tapestry-german-cover.gif b/3.0.4/doc/forrest/resources/images/tapestry-german-cover.gif
deleted file mode 100644
index 935bafe..0000000
--- a/3.0.4/doc/forrest/resources/images/tapestry-german-cover.gif
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/forrest/resources/images/tapestry-in-action.png b/3.0.4/doc/forrest/resources/images/tapestry-in-action.png
deleted file mode 100644
index 98c73ea..0000000
--- a/3.0.4/doc/forrest/resources/images/tapestry-in-action.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/forrest/resources/robots.txt b/3.0.4/doc/forrest/resources/robots.txt
deleted file mode 100644
index ddc8ef5..0000000
--- a/3.0.4/doc/forrest/resources/robots.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-User-Agent: *
-Disallow: /vlib
-Disallow: /tutorial
-
-
diff --git a/3.0.4/doc/forrest/resources/stylesheets/changes2document.xsl b/3.0.4/doc/forrest/resources/stylesheets/changes2document.xsl
deleted file mode 100644
index 9fa4d3e..0000000
--- a/3.0.4/doc/forrest/resources/stylesheets/changes2document.xsl
+++ /dev/null
@@ -1,198 +0,0 @@
-<?xml version="1.0"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<xsl:stylesheet
-    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
-    version="1.0">
-
- <xsl:import href="copyover.xsl"/>
- 
-
- <!-- FIXME (JJP):  bugzilla is hardwired -->
- <xsl:variable name="bugzilla" select="'http://nagoya.apache.org/bugzilla/buglist.cgi?bug_id='"/>
-
- <xsl:param name="bugtracking-url" select="$bugzilla"/>
-
- <xsl:template match="/">
-   <document>
-   <header>
-    <title>History of Changes</title>
-   </header>
-   <body>
-   	
-   <p><link href="changes.rss"><img border="0" src="images/rss.png" alt="RSS"/></link></p>    
- 
-   <xsl:apply-templates select="status/changes"/>
-   <xsl:apply-templates select="status/votes"/>
-   
-     </body>
-  </document>
- </xsl:template>
-
- 
- <xsl:template match="changes">
- 
- 	<section>
- 		<title>Recent Changes</title>
- 		
- 		<xsl:apply-templates/>
- 	</section>
- 	
- </xsl:template>
-
-
-
- <xsl:template match="release">
-  <section id="{@version}">
-   <title>Version <xsl:value-of select="@version"/> (<xsl:value-of select="@date"/>)</title>
-   <table>
-    <xsl:apply-templates/>
-   </table>
-  </section>
- </xsl:template>
-
- <xsl:template match="action">
-  <tr>
-   <td>   <icon src="images/{@type}.jpg" alt="{@type}"/> </td>
-   <td> <xsl:apply-templates/> </td>
-   
-   <td><xsl:value-of select="@dev"/>
-   	
-   	<xsl:if test="not(@dev)">
-<!-- This is a lot of work; perhaps we should change the document2html.xslt to
-	   output the space inside otherwise empty TD table cells. In addition, this approach
-	   doesn't gel well with the PDF output ("&nbsp;" appears inside the table cell. -->
-<xsl:text disable-output-escaping="yes"><![CDATA[&nbsp;]]></xsl:text>
-   	</xsl:if>
-   	
-   	</td>
-
-   <td>
-   	
-   <xsl:if test="not((@due-to and @due-to!='') or @fixes-bug)">
-<xsl:text disable-output-escaping="yes"><![CDATA[&nbsp;]]></xsl:text>
-   </xsl:if>
-   	
-   <xsl:if test="@due-to and @due-to!=''">
-    <xsl:text> Thanks to </xsl:text>
-    <xsl:choose>
-     <xsl:when test="@due-to-email and @due-to-email!=''">
-      <link href="mailto:{@due-to-email}">
-       <xsl:value-of select="@due-to"/>
-      </link>
-     </xsl:when>
-     <xsl:otherwise>
-      <xsl:value-of select="@due-to"/>
-     </xsl:otherwise>
-    </xsl:choose>
-    <xsl:text>.</xsl:text>
-   </xsl:if>
-
-   <xsl:if test="@fixes-bug">
-     <xsl:text> Fixes </xsl:text>
-     <xsl:call-template name="print-bugs">
-       <xsl:with-param name="buglist" select="translate(normalize-space(@fixes-bug),' ','')"/>
-     </xsl:call-template>
-     <!--
-     <xsl:choose>
-       <xsl:when test="contains(@fixes-bug, ',')">
-         <!-<link href="{$bugtracking-url}{translate(normalize-space(@fixes-bug),' ','')}">->
-           <link href="{$bugtracking-url}">
-             <xsl:text>bugs </xsl:text><xsl:value-of select="normalize-space(@fixes-bug)"/>
-           </link>
-         </xsl:when>
-         <xsl:otherwise>
-           <link href="{$bugtracking-url}{@fixes-bug}">
-             <xsl:text>bug </xsl:text><xsl:value-of select="@fixes-bug"/>
-           </link>
-         </xsl:otherwise>
-       </xsl:choose>
-       -->
-       <xsl:text>.</xsl:text>
-     </xsl:if>
-     </td>
-   </tr>
- </xsl:template>
-
- <!-- Print each bug id in a comma-separated list -->
- <xsl:template name="print-bugs">
-   <xsl:param name="buglist"/>
-   <xsl:choose>
-     <xsl:when test="contains($buglist, ',')">
-       <xsl:variable name="current" select="substring-before($buglist, ',')"/>
-       <link href="{concat($bugtracking-url, $current)}">
-         <xsl:value-of select="$current"/>
-       </link>
-       <xsl:text>, </xsl:text>
-       <xsl:call-template name="print-bugs">
-         <xsl:with-param name="buglist" select="substring-after($buglist, ',')"/>
-       </xsl:call-template>
-     </xsl:when>
-     <xsl:otherwise>
-       <link href="{concat($bugtracking-url, $buglist)}"><xsl:value-of select="$buglist"/></link>
-     </xsl:otherwise>
-   </xsl:choose>
- </xsl:template>
-
- 
-	<xsl:template match="votes">
-	
-		<section>
-			<title>Votes</title>	
-			
-			<table>
-			
-				<xsl:apply-templates/>
-				
-			</table>
-			
-		</section>
-	</xsl:template>
-	
-	<xsl:template match="vote">
-	
-		<tr>
-			
-			<td><xsl:value-of select="@date"/></td>
-		
-			<td>
-				<b><xsl:value-of select="@title"/>:</b>
-				<br/>
-					
-			<xsl:value-of select="motion"/>
-			
-			<ul>
-				<xsl:apply-templates select="response"/>				
-			</ul>
-			
-				
-			</td>
-			
-			<td>
-				<xsl:value-of select="@dev"/>	
-			</td>
-		</tr>
-		
-	</xsl:template>
-	
-	<xsl:template match="response">
-		<li>
-			<xsl:value-of select="."/>	
-		</li>	
-	</xsl:template>
-	
-</xsl:stylesheet>
diff --git a/3.0.4/doc/forrest/skinconf.xml b/3.0.4/doc/forrest/skinconf.xml
deleted file mode 100644
index b6f46a4..0000000
--- a/3.0.4/doc/forrest/skinconf.xml
+++ /dev/null
@@ -1,139 +0,0 @@
-<?xml version="1.0"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!--
-Skin configuration file. This file contains details of your project, which will
-be used to configure the chosen Forrest skin.
--->
-
-<!DOCTYPE skinconfig [
-
-  <!ENTITY % links.att 'name CDATA #REQUIRED'>
-  <!ENTITY % link.att 'name CDATA #REQUIRED href CDATA #REQUIRED'>
-  <!ELEMENT skinconfig (disable-search?, disable-print-link?, disable-pdf-link?,
-  disable-xml-link?, disable-compliance-links?, searchsite-domain?, searchsite-name?,
-  project-name, project-url, project-logo, group-name?, group-url?, group-logo?,
-  host-url?, host-logo?, year?, vendor?, trail?, toc?, credits?)*>
-  <!ELEMENT credits (credit*)>
-  <!ELEMENT credit (name, url, image?, width?, height?)>
-  <!-- id uniquely identifies the tool, and role indicates its function -->
-  <!ATTLIST credit id   CDATA #IMPLIED
-                   role CDATA #IMPLIED>
-  <!ELEMENT disable-search (#PCDATA)>
-  <!ELEMENT disable-print-link (#PCDATA)>
-  <!ELEMENT disable-pdf-link (#PCDATA)>
-  <!ELEMENT disable-xml-link (#PCDATA)>    
-  <!ELEMENT disable-compliance-links (#PCDATA)>   
-  <!ELEMENT searchsite-domain (#PCDATA)>
-  <!ELEMENT searchsite-name (#PCDATA)>  
-  <!ELEMENT project-name (#PCDATA)>
-  <!ELEMENT project-url (#PCDATA)>
-  <!ELEMENT project-logo (#PCDATA)>
-  <!ELEMENT group-name (#PCDATA)>
-  <!ELEMENT group-url (#PCDATA)>
-  <!ELEMENT group-logo (#PCDATA)>
-  <!ELEMENT host-url (#PCDATA)>
-  <!ELEMENT host-logo (#PCDATA)>
-  <!ELEMENT year (#PCDATA)>
-  <!ELEMENT vendor (#PCDATA)>
-  <!ELEMENT trail (link1, link2, link3)>
-  <!ELEMENT link1 EMPTY>
-  <!-- Seems we can't use param entity refs until this is DTDified -->
-  <!ATTLIST link1 name CDATA #REQUIRED href CDATA #IMPLIED>
-  <!ELEMENT link2 EMPTY>
-  <!ATTLIST link2 name CDATA #REQUIRED href CDATA #IMPLIED>
-  <!ELEMENT link3 EMPTY>
-  <!ATTLIST link3 name CDATA #REQUIRED href CDATA #IMPLIED>
-  <!ELEMENT name (#PCDATA)>
-  <!ELEMENT url (#PCDATA)>
-  <!ELEMENT image (#PCDATA)>
-  <!ELEMENT width (#PCDATA)>
-  <!ELEMENT height (#PCDATA)>
-  <!ELEMENT toc EMPTY>
-  <!ATTLIST toc level CDATA #IMPLIED>
-  ]>
-
-<skinconfig>
-  <!-- Do we want to disable the Google search box? -->
-  <disable-search>true</disable-search>
-  <!-- Do we want to disable the print link? -->
-  <disable-print-link>true</disable-print-link>  
-  <!-- Do we want to disable the PDF link? -->
-  <disable-pdf-link>true</disable-pdf-link>
-  <!-- Do we want to disable the xml source link? -->
-  <disable-xml-link>true</disable-xml-link>
-  <!-- Do we want to disable w3c compliance links? -->
-  <disable-compliance-links>true</disable-compliance-links>
-
-  <searchsite-domain>jakarta.apache.org</searchsite-domain>  
-  <searchsite-name>Jakarta</searchsite-name>  
-
-  <!-- mandatory project logo
-       skin: forrest-site renders it at the top -->
-  <project-name>Jakarta Tapestry Project</project-name>
-  <project-url>http://jakarta.apache.org/tapestry/</project-url>
-  <project-logo>images/Tapestry-Banner.png</project-logo>
-  <!-- Alternative static image:
-  <project-logo>images/project-logo.gif</project-logo> -->
-
-  <!-- optional group logo
-       skin: forrest-site renders it at the top-left corner -->
-  <group-name>The Apache Jakarta Project</group-name>
-  <group-url>http://jakarta.apache.org/</group-url>
-  <group-logo>images/jakarta.png</group-logo>
-  <!-- Alternative static image:
-  <group-logo>images/group-logo.gif</group-logo> -->
-
-  <!-- optional host logo (e.g. sourceforge logo)
-       skin: forrest-site renders it at the bottom-left corner -->
-  <host-url></host-url>
-  <host-logo></host-logo>
-
-  <!-- The following are used to construct a copyright statement -->
-  <year>2005</year>
-  <vendor>The Apache Software Foundation</vendor>
-
-  <!-- Some skins use this to form a 'breadcrumb trail' of links. If you don't
-  want these, set the attributes to blank. The DTD purposefully requires them.
-  -->
-  <trail>
-    <link1 name="Apache" href="http://www.apache.org/"/>
-    <link2 name="Jakarta" href="http://jakarta.apache.org/"/>
-    <link3 name="Tapestry" href="http://jakarta.apache.org/tapestry/"/>
-  </trail>
-
-  <!-- Configure how many "section" levels need to be included in the
-  generated Table of Contents (TOC). By default, if no toc element is provided
-  below, then 2 levels are included. Level 0 does not generate any TOC at all.
-  -->
-  <toc level="3"/>
-
-  <!-- Credits are typically rendered as a set of small clickable images in the
-  page footer -->
-  <credits>
-    <credit>
-      <name>Built with Apache Forrest</name>
-      <url>http://xml.apache.org/forrest/</url>
-      <image>images/built-with-forrest-button.png</image>
-      <width>88</width>
-      <height>31</height>
-    </credit>
-    <!-- A credit with @role='pdf' will have its name and url displayed in the
-    PDF page's footer. -->
-  </credits>
-
-</skinconfig>
diff --git a/3.0.4/doc/forrest/skins/common/images/README.txt b/3.0.4/doc/forrest/skins/common/images/README.txt
deleted file mode 100644
index 24bf01a..0000000
--- a/3.0.4/doc/forrest/skins/common/images/README.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-This directory is currently useless, as the sitemap only looks in
-skins/{forrest:skin}, so files must be kept in synch manually until this is
-fixed.
diff --git a/3.0.4/doc/forrest/skins/common/images/built-with-forrest-button.png b/3.0.4/doc/forrest/skins/common/images/built-with-forrest-button.png
deleted file mode 100644
index 4a787ab..0000000
--- a/3.0.4/doc/forrest/skins/common/images/built-with-forrest-button.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/forrest/skins/common/images/pdfdoc.gif b/3.0.4/doc/forrest/skins/common/images/pdfdoc.gif
deleted file mode 100644
index 00dee28..0000000
--- a/3.0.4/doc/forrest/skins/common/images/pdfdoc.gif
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/forrest/skins/common/images/printer.gif b/3.0.4/doc/forrest/skins/common/images/printer.gif
deleted file mode 100644
index 5021187..0000000
--- a/3.0.4/doc/forrest/skins/common/images/printer.gif
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/forrest/skins/common/images/spacer.gif b/3.0.4/doc/forrest/skins/common/images/spacer.gif
deleted file mode 100644
index 35d42e8..0000000
--- a/3.0.4/doc/forrest/skins/common/images/spacer.gif
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/forrest/skins/common/images/valid-html401.png b/3.0.4/doc/forrest/skins/common/images/valid-html401.png
deleted file mode 100644
index 3855210..0000000
--- a/3.0.4/doc/forrest/skins/common/images/valid-html401.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/forrest/skins/common/images/xmldoc.gif b/3.0.4/doc/forrest/skins/common/images/xmldoc.gif
deleted file mode 100644
index ca1224f..0000000
--- a/3.0.4/doc/forrest/skins/common/images/xmldoc.gif
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/forrest/skins/common/xslt/fo/document2fo.xsl b/3.0.4/doc/forrest/skins/common/xslt/fo/document2fo.xsl
deleted file mode 100644
index cbb7f12..0000000
--- a/3.0.4/doc/forrest/skins/common/xslt/fo/document2fo.xsl
+++ /dev/null
@@ -1,705 +0,0 @@
-<?xml version="1.0"?>
-
-<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
-                xmlns:fo="http://www.w3.org/1999/XSL/Format"
-                version="1.0">
-
-  <xsl:output method="xml"/>
-  <xsl:param name="numbersections" select="'true'"/>
-
-  <!-- Section depth at which we stop numbering and just indent -->
-  <xsl:param name="numbering-max-depth" select="'3'"/>
-  <xsl:param name="ctxbasedir" select="."/>
-  <xsl:param name="xmlbasedir"/>
-  <xsl:include href="pdfoutline.xsl"/>
-  <xsl:include href="footerinfo.xsl"/>
-
-  <xsl:template match="/">
-    <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
-      <fo:layout-master-set>
-
-        <fo:simple-page-master master-name="first-page"
-          page-height="11in" 
-          page-width="8.5in"
-          margin-top="1in" 
-          margin-bottom="1in" 
-          margin-left="1.25in" 
-          margin-right="1in">
-          <fo:region-body
-            margin-top="0.5in"
-            margin-bottom=".5in"/>
-          <fo:region-after 
-            region-name="first-footer"
-            extent=".5in"
-            display-align="before"/>
-        </fo:simple-page-master>
-
-        <fo:simple-page-master master-name="even-page"
-          page-height="11in" 
-          page-width="8.5in"
-          margin-top="1in" 
-          margin-bottom="1in" 
-          margin-left="1.25in" 
-          margin-right="1in">
-          <fo:region-before
-            region-name="even-header"
-            extent="0.5in"
-            border-bottom="0.5pt solid"/>
-          <fo:region-body
-            margin-top="0.5in"
-            margin-bottom=".5in"/>
-          <fo:region-after 
-            region-name="even-footer"
-            extent=".5in"
-            display-align="before"/>
-        </fo:simple-page-master>
-
-        <fo:simple-page-master master-name="odd-page"
-          page-height="11in" 
-          page-width="8.5in"
-          margin-top="1in" 
-          margin-bottom="1in" 
-          margin-left="1.25in" 
-          margin-right="1in">
-          <fo:region-before
-            region-name="odd-header"
-            extent="0.5in"
-            border-bottom="0.5pt solid"/>
-          <fo:region-body
-            margin-top="0.5in"
-            margin-bottom=".5in"/>
-          <fo:region-after 
-            region-name="odd-footer"
-            extent=".5in"
-            display-align="before"/>
-        </fo:simple-page-master>
-
-        <fo:page-sequence-master master-name="book">
-          <fo:repeatable-page-master-alternatives>
-            <fo:conditional-page-master-reference
-              page-position="first"
-              master-reference="first-page"/>
-            <fo:conditional-page-master-reference
-              odd-or-even="odd"
-              master-reference="odd-page"/>
-            <fo:conditional-page-master-reference
-              odd-or-even="even"
-              master-reference="even-page"/>
-          </fo:repeatable-page-master-alternatives>
-        </fo:page-sequence-master>
-      </fo:layout-master-set>
-
-      <xsl:apply-templates select="/document" mode="outline"/>
-
-      <fo:page-sequence master-reference="book">
-        <fo:title><xsl:value-of select="document/header/title"/></fo:title>
-        <xsl:apply-templates/>
-      </fo:page-sequence>
-      
-    </fo:root>
-  </xsl:template>
-
-  <xsl:template match="document">
-    <fo:title><xsl:value-of select="header/title"/></fo:title>
-    
-    <fo:static-content flow-name="first-footer">
-      <fo:block
-        border-top="0.25pt solid"
-        padding-before="6pt"
-        text-align="center">
-        <xsl:apply-templates select="footer"/>
-      </fo:block>
-      <fo:block
-        text-align="start">
-        Page <fo:page-number/>
-      </fo:block>
-      <xsl:call-template name="info"/>
-    </fo:static-content>
-
-    <fo:static-content flow-name="even-header">
-      <fo:block
-        text-align="end"
-        font-style="italic">
-        <xsl:value-of select="header/title"/>
-      </fo:block>
-    </fo:static-content>
-
-    <fo:static-content flow-name="even-footer">
-      <fo:block
-        border-top="0.25pt solid"
-        padding-before="6pt"
-        text-align="center">
-        <xsl:apply-templates select="footer"/>
-      </fo:block>
-      <fo:block
-        text-align="end">
-        Page <fo:page-number/>
-      </fo:block>
-      <xsl:call-template name="info"/>
-    </fo:static-content>
-
-    <fo:static-content flow-name="odd-header">
-      <fo:block
-        text-align="start"
-        font-style="italic">
-        <xsl:value-of select="header/title"/>
-      </fo:block>
-    </fo:static-content>
-    
-    <fo:static-content flow-name="odd-footer">
-      <fo:block
-        border-top="0.25pt solid"
-        padding-before="6pt"
-        text-align="center">
-        <xsl:apply-templates select="footer"/>
-      </fo:block>
-      <fo:block
-        text-align="start">
-        Page <fo:page-number/>
-      </fo:block>
-      <xsl:call-template name="info"/>
-    </fo:static-content>
-
-    <fo:flow flow-name="xsl-region-body">
-      <fo:block
-        padding-before="24pt"
-        padding-after="24pt"
-        font-size="24pt"
-        font-weight="bold"
-        id="{generate-id()}">
-
-        <xsl:value-of select="header/title"/>
-      </fo:block>
-      
-      <fo:block
-        text-align="justify"
-        padding-before="18pt"
-        padding-after="18pt">
-        <xsl:apply-templates/>
-      </fo:block>
-    </fo:flow>
-  </xsl:template>
-  
-  <xsl:template match="abstract">
-    <fo:block
-      font-size="12pt"
-      text-align="center"
-      space-before="20pt"
-      space-after="25pt"
-      width="7.5in"
-      font-family="serif"
-      font-style="italic">
-      <xsl:apply-templates/>
-    </fo:block>
-  </xsl:template>
-  
-  <xsl:template match="notice">
-    <fo:block
-      font-size="10pt"
-      text-align="left"
-      space-before="20pt"
-      width="7.5in"
-      font-family="serif"
-      border-top="0.25pt solid"
-      border-bottom="0.25pt solid"
-      padding-before="6pt"
-      padding-after="6pt">
-      NOTICE: <xsl:apply-templates/>
-    </fo:block>
-  </xsl:template>
-
-  <xsl:template match="anchor">
-    <fo:block id="{@id}"/>
-    <xsl:apply-templates/>
-  </xsl:template>
-
-  <xsl:template match="section">
-    
-    <xsl:param name="level">0</xsl:param>
-
-    <xsl:variable name="size">
-      <xsl:choose>
-        <xsl:when test="number($level) = 1">
-          <xsl:value-of select="14"/>
-        </xsl:when>
-        <xsl:otherwise>
-          <xsl:value-of select="12"/>
-        </xsl:otherwise>
-      </xsl:choose>
-    </xsl:variable>
-    
-    <fo:block
-      font-family="serif"
-      font-size="{$size}pt"
-      font-weight="bold"
-      space-before="12pt"
-      space-after="4pt">
-
-      <xsl:attribute name="id">
-        <xsl:choose>
-          <xsl:when test="normalize-space(@id)!=''">
-            <xsl:value-of select="@id"/>
-          </xsl:when>
-          <xsl:otherwise>
-            <xsl:value-of select="generate-id()"/>
-          </xsl:otherwise>
-        </xsl:choose>
-      </xsl:attribute>
-
-      <xsl:if test="$numbersections = 'true' and number($level) &lt; $numbering-max-depth+1">
-        <xsl:number format="1.1.1.1.1.1.1" count="section" level="multiple"/>
-        <xsl:text>. </xsl:text>
-      </xsl:if>
-
-      <!-- For sections 4  or more nestings deep, indent instead of number -->
-      <xsl:if test="number($level) &gt; $numbering-max-depth+1">
-        <xsl:attribute name="start-indent">
-          <xsl:value-of select="4+number($level)"/><xsl:text>pt</xsl:text>
-        </xsl:attribute>
-      </xsl:if>
-
-      <xsl:value-of select="title"/>
-    </fo:block>
-    <xsl:apply-templates>
-      <xsl:with-param name="level" select="number($level)+1"/>
-    </xsl:apply-templates>
-    
-  </xsl:template>
-  
-  <xsl:template match="title">
-    <!-- do nothing as titles are handled in their parent templates -->
-  </xsl:template>
-  
-  <xsl:template match="subtitle">
-    <xsl:param name="level">0</xsl:param>
-    <xsl:variable name="size" select="16-(number($level)*1.5)"/>
-
-    <fo:block
-      font-weight="bold"
-      font-size="{$size}pt">
-      <xsl:apply-templates/>
-    </fo:block>
-  </xsl:template>
-
-  <xsl:template match="authors">
-    <fo:block
-      space-before="20pt"
-      font-weight="bold"
-      font-size="9pt">
-      by
-      <xsl:for-each select="person">
-        <xsl:value-of select="@name"/>
-        <xsl:if test="not(position() = last())">, </xsl:if>
-      </xsl:for-each>
-    </fo:block>
-  </xsl:template>
-
-  <xsl:template match="p">
-    <fo:block
-      space-before="4pt"
-      space-after="4pt"
-      font-family="serif">
-      <xsl:apply-templates/>
-    </fo:block>
-  </xsl:template>
-  
-
-  <xsl:template match="source">
-    <fo:block
-      font-family="monospace"
-      font-size="10pt"
-      background-color="#f0f0f0"
-      white-space-collapse="false"
-      linefeed-treatment="preserve"
-      white-space-treatment="preserve"
-      wrap-option="no-wrap"
-      text-align="start">
-      <xsl:apply-templates/>
-    </fo:block>
-  </xsl:template>
-  
-  
-  <xsl:template match="ol|ul">
-    <fo:list-block 
-      provisional-distance-between-starts="18pt"
-      provisional-label-separation="3pt"
-      text-align="start">
-      <xsl:apply-templates/>
-    </fo:list-block>
-  </xsl:template>
-  
-  <xsl:template match="ol/li">
-    <fo:list-item>
-      <fo:list-item-label 
-        end-indent="label-end()">
-        <fo:block>
-          <xsl:number format="1."/>
-        </fo:block>
-      </fo:list-item-label>
-      <fo:list-item-body 
-        start-indent="body-start()">
-        <fo:block
-          font-family="serif">
-          <xsl:apply-templates/>
-        </fo:block>
-      </fo:list-item-body>
-    </fo:list-item>
-  </xsl:template>
-
-  <!-- Emulate browser handling of these invalid combinations that our DTD
-  unfortunately allows -->
-  <xsl:template match="ul/ul | ul/ol | ol/ul | ol/ol">
-    <fo:list-item>
-      <fo:list-item-label end-indent="label-end()">
-        <fo:block></fo:block>
-      </fo:list-item-label>
-      <fo:list-item-body start-indent="body-start()">
-        <fo:block font-family="serif">
-          <xsl:apply-templates/>
-        </fo:block>
-      </fo:list-item-body>
-    </fo:list-item>
-  </xsl:template>
-
-  <xsl:template match="ul/li">
-    <fo:list-item>
-      <fo:list-item-label end-indent="label-end()">
-        <fo:block>&#x2022;</fo:block>
-      </fo:list-item-label>
-      <fo:list-item-body start-indent="body-start()">
-        <fo:block
-          font-family="serif">
-          <xsl:apply-templates/>
-        </fo:block>
-      </fo:list-item-body>
-    </fo:list-item>
-  </xsl:template>
-  
-  <xsl:template match="dl">
-    <fo:list-block
-      provisional-distance-between-starts="18pt"
-      provisional-label-separation="3pt"
-      text-align="start">
-      <xsl:apply-templates/>
-    </fo:list-block>
-  </xsl:template>
-  
-  <xsl:template match="dt">
-    <fo:list-item>
-      <fo:list-item-label end-indent="label-end()">
-        <fo:block></fo:block>
-      </fo:list-item-label>
-      <fo:list-item-body start-indent="body-start()">
-        <fo:block
-          font-weight="bold">
-          <xsl:apply-templates/>
-        </fo:block>
-      </fo:list-item-body>
-    </fo:list-item>
-  </xsl:template>
-  
-  <xsl:template match="dd">
-    <fo:list-item>
-      <fo:list-item-label end-indent="label-end()">
-        <fo:block></fo:block>
-      </fo:list-item-label>
-      <fo:list-item-body start-indent="body-start()">
-        <fo:block>
-          <xsl:apply-templates/>
-        </fo:block>
-      </fo:list-item-body>
-    </fo:list-item>
-  </xsl:template>
-  
-  <xsl:template match="strong">
-    <fo:inline font-weight="bold"><xsl:apply-templates/></fo:inline>
-  </xsl:template>
-  
-  <xsl:template match="em">
-    <fo:inline font-style="italic"><xsl:apply-templates/></fo:inline>
-  </xsl:template>
-
-  <xsl:template match="code">
-    <fo:inline font-family="monospace"><xsl:apply-templates/></fo:inline>
-  </xsl:template>
-
-  <xsl:template match="warning">
-    <fo:block
-      margin-left="0.25in"
-      margin-right="0.25in"
-      font-weight="bold"
-      font-size="10pt"
-      font-family="serif"
-      space-before="10pt"
-      border-before-style="solid"
-      border-start-style="solid"
-      border-end-style="solid"
-      border-color="#D00000"
-      background-color="#D00000"
-      color="#ffffff">
-      <xsl:choose>
-        <xsl:when test="@label"><xsl:value-of select="@label"/></xsl:when>
-        <xsl:otherwise>Note: </xsl:otherwise>
-      </xsl:choose><xsl:value-of select="title"/>       
-    </fo:block>
-    <fo:block
-      margin-left="0.25in"
-      margin-right="0.25in"
-      font-family="serif"
-      font-size="8pt"
-      border-after-style="solid"
-      border-start-style="solid"
-      border-end-style="solid"
-      border-color="#D00000"
-      background-color="#fff0f0"
-      padding-start="3pt"
-      padding-end="3pt"
-      padding-before="3pt"
-      padding-after="3pt"
-      space-after="10pt">
-      <xsl:apply-templates/>
-    </fo:block>
-  </xsl:template>
-
-  <xsl:template match="note">
-    <fo:block
-      margin-left="0.25in"
-      margin-right="0.25in"
-      font-weight="bold"
-      font-size="10pt"
-      color="#ffffff"
-      font-family="serif"
-      space-before="10pt"
-      border-before-style="solid"
-      border-start-style="solid"
-      border-end-style="solid"
-      border-color="#A0C9F5"
-      background-color="#A0C9F5">
-      <xsl:choose>
-        <xsl:when test="@label"><xsl:value-of select="@label"/></xsl:when>
-        <xsl:otherwise>Note: </xsl:otherwise>
-      </xsl:choose><xsl:value-of select="title"/>
-    </fo:block>
-    <fo:block
-      margin-left="0.25in"
-      margin-right="0.25in"
-      font-family="serif"
-      font-size="8pt"
-      space-after="10pt"
-      border-after-style="solid"
-      border-start-style="solid"
-      border-end-style="solid"
-      border-color="#A0C9F5"
-      background-color="#F0F0FF"
-      padding-start="3pt"
-      padding-end="3pt"
-      padding-before="3pt"
-      padding-after="3pt">
-      <xsl:apply-templates/>
-    </fo:block>
-  </xsl:template>
-
-  <xsl:template match="fixme">
-    <fo:block
-      margin-left="0.25in"
-      margin-right="0.25in"
-      font-weight="bold"
-      font-size="10pt"
-      color="#FFFFFF"
-      font-family="serif"
-      space-before="10pt"
-      border-before-style="solid"
-      border-start-style="solid"
-      border-end-style="solid"
-      border-color="#C6C650"
-      background-color="#C6C650">
-      FIXME (<xsl:value-of select="@author"/>): <xsl:value-of select="title"/>
-    </fo:block>
-    <fo:block
-      margin-left="0.25in"
-      margin-right="0.25in"
-      font-family="serif"
-      font-size="8pt"
-      space-after="10pt"
-      border-after-style="solid"
-      border-start-style="solid"
-      border-end-style="solid"
-      border-color="#C6C650"
-      background-color="#FFF0F0"
-      padding-start="3pt"
-      padding-end="3pt"
-      padding-before="3pt"
-      padding-after="3pt">
-      <xsl:apply-templates/>
-    </fo:block>
-  </xsl:template>
-
-  <xsl:template match="link">
-    <xsl:choose>
-      <xsl:when test="starts-with(@href, '#')">
-    <fo:basic-link color="blue" text-decoration="underline" internal-destination="{substring(@href,2)}">
-      <xsl:apply-templates/>
-    </fo:basic-link>
-      </xsl:when>
-      <xsl:otherwise>
-    <fo:basic-link color="blue" text-decoration="underline" external-destination="{@href}"><xsl:apply-templates/></fo:basic-link>
-      </xsl:otherwise>
-    </xsl:choose>
-  </xsl:template>
-
-  <xsl:template match="figure|img">
-    <fo:block text-align="center">
-      <xsl:if test="normalize-space(@id)!=''">
-          <xsl:attribute name="id"><xsl:value-of select="@id"/></xsl:attribute>
-      </xsl:if>
-
-      <!-- Make relative paths absolute -->
-      <xsl:variable name="imgpath">
-      <xsl:choose>
-        <xsl:when test="starts-with(string(@src), 'images/') or contains(string(@src), '../images')">
-          <xsl:value-of select="concat($ctxbasedir, 'resources/images/' , substring-after(@src, 'images'))"/>
-        </xsl:when>
-        <xsl:otherwise><xsl:value-of select="concat($ctxbasedir, $xmlbasedir, @src)"/></xsl:otherwise>
-      </xsl:choose>
-      </xsl:variable>
-      <fo:external-graphic src="{$imgpath}">
-        <xsl:if test="@height">
-          <xsl:attribute name="height"><xsl:value-of select="@height"/></xsl:attribute>
-        </xsl:if>
-        <xsl:if test="@width">
-          <xsl:attribute name="width"><xsl:value-of select="@width"/></xsl:attribute>
-        </xsl:if>
-      </fo:external-graphic>
-      <!-- alt text -->
-      <xsl:if test="normalize-space(@alt)!=''">
-          <fo:block><xsl:value-of select="@alt"/></fo:block>
-      </xsl:if>
-    </fo:block>
-  </xsl:template>
-
-  <xsl:template match="table">
-    <!-- FIXME: Apache FOP must have column widths specified at present,
-         this section can be removed when this limitation is removed from Fop. 
-         Unfortunately, this means that each column is a fixed width,
-         but at least the table displays! -->
-
-    <xsl:variable name="max-number-columns">
-      <xsl:for-each select="tr">
-        <xsl:sort select="count(td|th)" data-type="number" order="descending"/>
-        <xsl:if test="position() = 1">
-          <xsl:value-of select="count(td|th)"/>
-        </xsl:if>
-      </xsl:for-each>
-    </xsl:variable>
-
-
-    <xsl:variable name="column-width">
-      <xsl:value-of select="6.25 div number($max-number-columns)"/>in
-    </xsl:variable>
-
-    <fo:table>
-                  
-      <fo:table-column>
-        <xsl:attribute name="column-width">
-          <xsl:value-of select="$column-width"/>
-        </xsl:attribute>
-
-        <xsl:attribute name="number-columns-repeated">
-          <xsl:value-of select="number($max-number-columns)"/>
-        </xsl:attribute>
-      </fo:table-column>
-
-      <!-- End of hack for Fop support (if removing this hack, remember 
-           you need the <fo:table> element) -->
-
-      <fo:table-body
-        font-size="10pt"
-        font-family="sans-serif">
-        <xsl:apply-templates select="tr"/>
-      </fo:table-body>
-    </fo:table>
-
-    <!-- FIXME: Apache Fop does not support the caption element yet.
-         This hack will display the table caption accordingly. -->
-    <xsl:if test="caption">
-      <fo:block
-        text-align="center"
-        font-weight="bold">
-        Table
-        <xsl:text> </xsl:text>
-        <xsl:number count="table" level="multiple"/>
-        <xsl:text>: </xsl:text>
-        <xsl:value-of select="caption"/>
-      </fo:block>
-    </xsl:if>
-  </xsl:template>
-
-  <xsl:template match="tr">
-    <fo:table-row>
-      <xsl:apply-templates/>
-    </fo:table-row>
-  </xsl:template>
-
-  <xsl:template match="th">
-      <fo:table-cell
-        padding-before="4pt"
-        padding-after="4pt"
-        padding-start="4pt"
-        padding-end="4pt"
-        background-color="#A0C9F5">
-        <xsl:attribute name="number-columns-spanned">
-          <xsl:value-of select="@colspan"/>
-        </xsl:attribute>
-        <xsl:attribute name="number-rows-spanned">
-          <xsl:value-of select="@rowspan"/>
-        </xsl:attribute>
-        <fo:block
-          text-align="center">
-          <xsl:apply-templates/>
-        </fo:block>
-      </fo:table-cell>
-  </xsl:template>
-
-  <xsl:template match="td">
-    <fo:table-cell
-      padding-before="4pt"
-      padding-after="4pt"
-      padding-start="4pt"
-      padding-end="4pt"
-      border="1pt solid #A0C9F5">
-      <xsl:attribute name="number-columns-spanned">
-          <xsl:value-of select="@colspan"/>
-        </xsl:attribute>
-        <xsl:attribute name="number-rows-spanned">
-          <xsl:value-of select="@rowspan"/>
-        </xsl:attribute>
-      <fo:block>
-        <xsl:apply-templates/>
-      </fo:block>
-    </fo:table-cell>
-  </xsl:template>
-
-  <xsl:template match="br">
-    <fo:block></fo:block>
-  </xsl:template>
-
-  <xsl:template match="legal">
-    <fo:inline
-      font-size="8pt">
-      <xsl:apply-templates/>
-    </fo:inline>
-  </xsl:template>
-
-<!-- ====================================================================== -->
-<!-- Local Extensions section -->
-<!-- ====================================================================== -->
-
- <xsl:template match="citation">
-   <fo:inline>
-     [<xsl:value-of select="@def"/>]
-   </fo:inline>
- </xsl:template>
-
-
-
-</xsl:stylesheet>
diff --git a/3.0.4/doc/forrest/skins/common/xslt/fo/footerinfo.xsl b/3.0.4/doc/forrest/skins/common/xslt/fo/footerinfo.xsl
deleted file mode 100644
index 355ae3e..0000000
--- a/3.0.4/doc/forrest/skins/common/xslt/fo/footerinfo.xsl
+++ /dev/null
@@ -1,58 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
-                xmlns:fo="http://www.w3.org/1999/XSL/Format"
-                version="1.0">
-
-<!--
-Named template to generate a short message in the PDF footer, from text in
-skinconf.xml.  By default, the message is a copyright statement.  If a credit
-with @role='pdf' is present, that is used instead.  Eg:
-
-<credit role="pdf">
-  <name>Generated by Apache FOP 1.0-dev</name>
-  <url>http://xml.apache.org/forrest/fop/dev/</url>
-</credit>
--->
-
-  <xsl:param name="config-file" select="'../../../../skinconf.xml'"/>
-  <xsl:variable name="config" select="document($config-file)/skinconfig"/>
-
-  <xsl:template name="info">
-    <xsl:variable name="pdfcredit" select="$config/credits/credit[@role = 'pdf']"/>
-    <xsl:variable name="text">
-      <xsl:if test="$pdfcredit">
-        <xsl:value-of select="$pdfcredit/name"/>
-      </xsl:if>
-      <xsl:if test="not($pdfcredit)">
-        <xsl:text>Copyright &#169; </xsl:text><xsl:value-of select="$config/year"/>&#160;<xsl:value-of
-          select="$config/vendor"/><xsl:text> All rights reserved.</xsl:text>
-      </xsl:if>
-    </xsl:variable>
-    <xsl:variable name="url" select="$pdfcredit/url"/>
-
-    <fo:block-container font-style="italic" absolute-position="absolute"
-      left="0pt" top="0pt" right="6.25in" bottom="150pt"
-      font-size="10pt">
-      <xsl:if test="not($url)">
-        <fo:block text-align="center" color="lightgrey">
-          <xsl:value-of select="$text"/>
-        </fo:block>
-      </xsl:if>
-      <xsl:if test="$url">
-        <fo:block text-align="center">
-          <fo:basic-link color="lightgrey"
-            external-destination="{$url}">
-            <xsl:value-of select="$text"/>
-          </fo:basic-link>
-        </fo:block>
-        <fo:block text-align="center">
-          <fo:basic-link color="lightgrey"
-            external-destination="{$url}">
-            <xsl:value-of select="$url"/>
-          </fo:basic-link>
-        </fo:block>
-      </xsl:if>
-    </fo:block-container>
-  </xsl:template>
-
-</xsl:stylesheet>
diff --git a/3.0.4/doc/forrest/skins/common/xslt/fo/pdfoutline.xsl b/3.0.4/doc/forrest/skins/common/xslt/fo/pdfoutline.xsl
deleted file mode 100644
index e90850d..0000000
--- a/3.0.4/doc/forrest/skins/common/xslt/fo/pdfoutline.xsl
+++ /dev/null
@@ -1,33 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
-                xmlns:fo="http://www.w3.org/1999/XSL/Format"
-                xmlns:fox="http://xml.apache.org/fop/extensions"
-                version="1.0">
-
-<xsl:template match="document" mode="outline">
-      <xsl:apply-templates select="body/section" mode="outline"/>
-</xsl:template>
-
-<xsl:template match="section" mode="outline">
-  <fox:outline>
-    <xsl:attribute name="internal-destination">
-      <xsl:choose>
-        <xsl:when test="normalize-space(@id)!=''">
-          <xsl:value-of select="@id"/>
-        </xsl:when>
-        <xsl:otherwise>
-          <xsl:value-of select="generate-id()"/>
-        </xsl:otherwise>
-      </xsl:choose>
-    </xsl:attribute>
-    <fox:label>
-      <xsl:number format="1.1.1.1.1.1.1" count="section" level="multiple"/>
-      <xsl:text> </xsl:text>
-      <xsl:value-of select="title"/>
-
-    </fox:label>
-    <xsl:apply-templates select="section" mode="outline"/>
-  </fox:outline>
-</xsl:template>
-
-</xsl:stylesheet>
diff --git a/3.0.4/doc/forrest/skins/common/xslt/html/book2menu.xsl b/3.0.4/doc/forrest/skins/common/xslt/html/book2menu.xsl
deleted file mode 100644
index 263f16a..0000000
--- a/3.0.4/doc/forrest/skins/common/xslt/html/book2menu.xsl
+++ /dev/null
@@ -1,163 +0,0 @@
-<?xml version="1.0"?>
-<!--
-book2menu.xsl generates the HTML menu. It outputs XML/HTML of the form:
-  <div class="menu">
-     ...
-  </div>
-which is then merged with other HTML by site2xhtml.xsl
-
-$Id$
--->
-
-<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
-
-  <!-- ================================================================ -->
-  <!-- These templates SHOULD be overridden                             -->
-  <!-- ================================================================ -->
-
-  <xsl:template name="selected">
-    <xsl:value-of select="@label"/>
-  </xsl:template>
-
-  <xsl:template name="unselected">
-    <a href="{@href}">
-      <xsl:if test="@description">
-        <xsl:attribute name="title">
-          <xsl:value-of select="@description"/>
-        </xsl:attribute>
-      </xsl:if>
-      <xsl:value-of select="@label"/>
-    </a>
-  </xsl:template>
-
-  <xsl:template name="print-external">
-    <!-- Use apply-imports when overriding -->
-    <xsl:value-of select="@label"/>
-  </xsl:template>
-
-
-  <!-- ================================================================ -->
-  <!-- These templates CAN be overridden                                -->
-  <!-- ================================================================ -->
-
-  <!-- Eg, if tab href is 'index.html#foo', this will be called when index.html
-  is selected -->
-  <xsl:template name="selected-anchor">
-    <!-- By default, render as unselected so that it is clickable (takes user
-    to the anchor) -->
-    <xsl:call-template name="unselected"/>
-  </xsl:template>
-
-  <xsl:template name="unselected-anchor">
-    <xsl:call-template name="unselected"/>
-  </xsl:template>
-
-
-  <xsl:template match="book">
-    <xsl:apply-templates select="menu"/>
-  </xsl:template>
-
-
-  <xsl:template match="menu">
-    <div class="menu">
-      <xsl:call-template name="base-menu"/>
-    </div>
-  </xsl:template>
-
-  <xsl:template match="menu-item">
-    <!-- Use apply-imports when overriding -->
-
-    <xsl:variable name="href-nofrag">
-      <xsl:call-template name="path-nofrag">
-        <xsl:with-param name="path" select="@href"/>
-      </xsl:call-template>
-    </xsl:variable>
-
-    <xsl:variable name="node-path">
-      <xsl:call-template name="normalize">
-        <xsl:with-param name="path" select="concat($dirname, $href-nofrag)"/>
-      </xsl:call-template>
-    </xsl:variable>
-
-    <xsl:choose>
-      <!-- Compare with extensions stripped -->
-      <xsl:when test="$node-path = $path-nofrag">
-        <xsl:choose>
-          <xsl:when test="contains(@href, '#')">
-            <xsl:call-template name="selected-anchor"/>
-          </xsl:when>
-          <xsl:otherwise>
-            <xsl:call-template name="selected"/>
-          </xsl:otherwise>
-        </xsl:choose>
-      </xsl:when>
-      <xsl:otherwise>
-        <xsl:choose>
-          <xsl:when test="contains(@href, '#')">
-            <xsl:call-template name="unselected-anchor"/>
-          </xsl:when>
-          <xsl:otherwise>
-            <xsl:call-template name="unselected"/>
-          </xsl:otherwise>
-        </xsl:choose>
-      </xsl:otherwise>
-    </xsl:choose>
-  </xsl:template>
-
-  <!-- ================================================================ -->
-  <!-- These templates SHOULD NOT be overridden                         -->
-  <!-- ================================================================ -->
-
-
-  <xsl:param name="path"/>
-
-  <xsl:include href="pathutils.xsl"/>
-
-  <xsl:variable name="filename">
-    <xsl:call-template name="filename">
-      <xsl:with-param name="path" select="$path"/>
-    </xsl:call-template>
-  </xsl:variable>
-
-  <xsl:variable name="path-nofrag">
-    <xsl:call-template name="path-nofrag">
-      <xsl:with-param name="path" select="$path"/>
-    </xsl:call-template>
-  </xsl:variable>
-
-  <xsl:variable name="path-nofrag">
-    <xsl:call-template name="path-nofrag">
-      <xsl:with-param name="path" select="$path"/>
-    </xsl:call-template>
-  </xsl:variable>
-
-  <xsl:variable name="dirname">
-    <xsl:call-template name="dirname">
-      <xsl:with-param name="path" select="$path"/>
-    </xsl:call-template>
-  </xsl:variable>
-
-  <xsl:template match="external">
-    <li>
-      <xsl:choose>
-        <xsl:when test="starts-with(@href, $path-nofrag)">
-          <span class="externalSelected">
-            <xsl:call-template name="print-external"/>
-          </span>
-        </xsl:when>
-        <xsl:otherwise>
-          <a href="{@href}" target="_blank"><xsl:value-of select="@label"/></a>
-        </xsl:otherwise>
-      </xsl:choose>
-    </li>
-  </xsl:template>
-
-  <xsl:template match="menu-item[@type='hidden']"/>
-
-  <xsl:template match="external[@type='hidden']"/>
-
-  <xsl:template name="base-menu">
-    <xsl:apply-templates/>
-  </xsl:template>
-
-</xsl:stylesheet>
diff --git a/3.0.4/doc/forrest/skins/common/xslt/html/document2html.xsl b/3.0.4/doc/forrest/skins/common/xslt/html/document2html.xsl
deleted file mode 100644
index 4dc5214..0000000
--- a/3.0.4/doc/forrest/skins/common/xslt/html/document2html.xsl
+++ /dev/null
@@ -1,450 +0,0 @@
-<?xml version="1.0"?>
-<!--
-This stylesheet contains the majority of templates for converting documentv11
-to HTML.  It renders XML as HTML in this form:
-
-  <div class="content">
-   ...
-  </div>
-
-..which site2xhtml.xsl then combines with HTML from the index (book2menu.xsl)
-and tabs (tab2menu.xsl) to generate the final HTML.
-
-Section handling
-  - <a name/> anchors are added if the id attribute is specified
-
-$Id$
--->
-<xsl:stylesheet version="1.0" 
-                xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
-
-  <!-- the skinconf file -->
-  <xsl:param name="config-file" select="'../../../../skinconf.xml'"/>
-  <xsl:variable name="config" select="document($config-file)/skinconfig"/>
-  
-  <!-- If true, a PDF link for this page will not be generated -->
-  <xsl:variable name="disable-pdf-link" select="$config/disable-pdf-link"/>
-  <!-- If true, a "print" link for this page will not be generated -->
-  <xsl:variable name="disable-print-link" select="$config/disable-print-link"/>
-  <!-- If true, an XML link for this page will not be generated -->
-  <xsl:variable name="disable-xml-link" select="$config/disable-xml-link"/>  
-  <!-- Get the section depth to use when generating the minitoc (default is 2) -->
-  <xsl:variable name="config-max-depth" select="$config/toc/@level"/>
-  <!-- Whether to obfuscate email links -->
-  <xsl:variable name="obfuscate-mail-links" select="$config/obfuscate-mail-links"/>
-
-  <xsl:variable name="max-depth">
-    <xsl:choose>
-      <xsl:when test="string-length($config-max-depth)&gt;0">
-        <xsl:value-of select="$config-max-depth"/>
-      </xsl:when>
-      <xsl:otherwise>2</xsl:otherwise>
-    </xsl:choose>
-  </xsl:variable>
-    
-  <xsl:param name="notoc"/>
-  <xsl:param name="path"/>
-  <!-- <xsl:include href="split.xsl"/> -->
-  <xsl:include href="dotdots.xsl"/>
-  <xsl:include href="pathutils.xsl"/>
-
-  <!-- Path to site root, eg '../../' -->
-  <xsl:variable name="root">
-    <xsl:call-template name="dotdots">
-      <xsl:with-param name="path" select="$path"/>
-    </xsl:call-template>
-  </xsl:variable>
-
-  <xsl:variable name="filename-noext">
-    <xsl:call-template name="filename-noext">
-      <xsl:with-param name="path" select="$path"/>
-    </xsl:call-template>
-  </xsl:variable>
- 
-  <xsl:variable name="skin-img-dir" select="concat(string($root), 'skin/images')"/>
-
-  <xsl:template match="document">
-    <div class="content">
-      <table summary="" class="title">
-        <tr> 
-          <td valign="middle"> 
-            <xsl:if test="normalize-space(header/title)!=''">
-              <h1>
-                <xsl:value-of select="header/title"/>
-              </h1>
-            </xsl:if>
-          </td>
-          <xsl:call-template name="printlink"/> 
-          <xsl:call-template name="pdflink"/>
-          <xsl:call-template name="xmllink"/>
-        </tr>
-      </table>
-      <xsl:if test="normalize-space(header/subtitle)!=''">
-        <h3>
-          <xsl:value-of select="header/subtitle"/>
-        </h3>
-      </xsl:if>
-      <xsl:apply-templates select="header/type"/>
-      <xsl:apply-templates select="header/notice"/>
-      <xsl:apply-templates select="header/abstract"/>
-      <xsl:apply-templates select="body"/>
-      <div class="attribution">
-        <xsl:apply-templates select="header/authors"/>
-        <xsl:if test="header/authors and header/version">
-          <xsl:text>; </xsl:text>
-        </xsl:if>
-        <xsl:apply-templates select="header/version"/>
-      </div>
-    </div>
-  </xsl:template>
-
-  <!-- Generates the "printer friendly version" link -->
-  <xsl:template name="printlink">
-    <xsl:if test="$disable-print-link = 'false'"> 
-<script type="text/javascript" language="Javascript">
-function printit() {  
-if (window.print) {
-    window.print() ;  
-} else {
-    var WebBrowser = '&lt;OBJECT ID="WebBrowser1" WIDTH="0" HEIGHT="0" CLASSID="CLSID:8856F961-340A-11D0-A96B-00C04FD705A2">&lt;/OBJECT>';
-document.body.insertAdjacentHTML('beforeEnd', WebBrowser);
-    WebBrowser1.ExecWB(6, 2);//Use a 1 vs. a 2 for a prompting dialog box    WebBrowser1.outerHTML = "";  
-}
-}
-</script>
-
-<script type="text/javascript" language="Javascript">
-var NS = (navigator.appName == "Netscape");
-var VERSION = parseInt(navigator.appVersion);
-if (VERSION > 3) {
-    document.write('<td align="center" width="40" nowrap="nowrap">');
-    document.write('  <a href="javascript:printit()" class="dida">');
-    document.write('    <img class="skin" src="{$skin-img-dir}/printer.gif" alt="Print this Page"/><br />');
-    document.write('  print</a>');
-    document.write('</td>');
-}
-</script>
-
-    </xsl:if>
-  </xsl:template>
-
-  <!-- Generates the PDF link -->
-  <xsl:template name="pdflink">
-    <xsl:if test="not($config/disable-pdf-link) or $disable-pdf-link = 'false'"> 
-      <td align="center" width="40" nowrap="nowrap"><a href="{$filename-noext}.pdf" class="dida">
-          <img class="skin" src="{$skin-img-dir}/pdfdoc.gif" alt="PDF"/><br/>
-          PDF</a>
-      </td>
-    </xsl:if>
-  </xsl:template>
-  
-
-  <!-- Generates the XML link -->
-  <xsl:template name="xmllink">
-    <xsl:if test="$disable-xml-link = 'false'">
-      <td align="center" width="40" nowrap="nowrap"><a href="{$filename-noext}.xml" class="dida">
-          <img class="skin" src="{$skin-img-dir}/xmldoc.gif" alt="xml"/><br/>
-          xml</a>
-      </td>
-    </xsl:if>
-  </xsl:template>
-  
-  <xsl:template match="body">
-    <xsl:if test="$max-depth&gt;0 and not($notoc='true')" >
-      <xsl:call-template name="minitoc">
-        <xsl:with-param name="tocroot" select="."/>
-        <xsl:with-param name="depth">1</xsl:with-param>
-      </xsl:call-template>
-    </xsl:if>
-    <xsl:apply-templates/>
-  </xsl:template>
-
-
-  <!-- Generate a <a name="..."> tag for an @id -->
-  <xsl:template match="@id">
-    <xsl:if test="normalize-space(.)!=''">
-      <a name="{.}"/>
-    </xsl:if>
-  </xsl:template>
-
-  <xsl:template match="section">
-    <!-- count the number of section in the ancestor-or-self axis to compute
-         the title element name later on -->
-    <xsl:variable name="sectiondepth" select="count(ancestor-or-self::section)"/>
-    <a name="{generate-id()}"/>
-    <xsl:apply-templates select="@id"/>
-    <!-- generate a title element, level 1 -> h3, level 2 -> h4 and so on... -->
-    <xsl:element name="{concat('h',$sectiondepth + 2)}">
-      <xsl:value-of select="title"/>
-      <xsl:if test="$notoc='true' and $sectiondepth = 3">
-        <span style="float: right"><a href="#{@id}-menu">^</a></span>
-      </xsl:if>
-    </xsl:element>
-
-    <!-- Indent FAQ entry text 15 pixels -->
-    <xsl:variable name="indent">
-      <xsl:choose>
-        <xsl:when test="$notoc='true' and $sectiondepth = 3">
-          <xsl:text>15</xsl:text>
-        </xsl:when>
-        <xsl:otherwise>
-          <xsl:text>0</xsl:text>
-        </xsl:otherwise>
-      </xsl:choose>
-    </xsl:variable>
-
-    <div style="margin-left: {$indent} ; border: 2px">
-          <xsl:apply-templates select="*[not(self::title)]"/>
-    </div>
-  </xsl:template>
-
-  <xsl:template match="note | warning | fixme">
-    <xsl:apply-templates select="@id"/>
-    <div class="frame {local-name()}">
-      <div class="label">
-        <xsl:choose>
-          <xsl:when test="@label"><xsl:value-of select="@label"/></xsl:when>
-          <xsl:when test="local-name() = 'note'">Note</xsl:when>
-          <xsl:when test="local-name() = 'warning'">Warning</xsl:when>
-          <xsl:otherwise>Fixme (<xsl:value-of select="@author"/>)</xsl:otherwise>
-        </xsl:choose>
-      </div>
-      <div class="content">
-        <xsl:apply-templates/>
-      </div>
-    </div>
-  </xsl:template>
-
-  <xsl:template match="notice">
-    <div class="notice">
-    <!-- FIXME: i18n Transformer here -->
-    <xsl:text>Notice: </xsl:text>
-      <xsl:apply-templates/>
-    </div>
-  </xsl:template>
-
-  <xsl:template match="link">
-    <xsl:apply-templates select="@id"/>
-    <xsl:choose>
-      <xsl:when test="$obfuscate-mail-links='true' and starts-with(@href, 'mailto:') and contains(@href, '@')">
-        <xsl:variable name="mailto-1" select="substring-before(@href,'@')"/>
-        <xsl:variable name="mailto-2" select="substring-after(@href,'@')"/>
-          <a href="{$mailto-1}.at.{$mailto-2}">
-            <xsl:apply-templates/>
-          </a>
-       </xsl:when>
-       <xsl:otherwise>
-          <a href="{@href}">
-            <xsl:apply-templates/>
-          </a>
-      </xsl:otherwise>
-    </xsl:choose>
-  </xsl:template>
-
-  <xsl:template match="jump">
-    <xsl:apply-templates select="@id"/>
-    <a href="{@href}" target="_top">
-      <xsl:apply-templates/>
-    </a>
-  </xsl:template>
-
-  <xsl:template match="fork">
-    <xsl:apply-templates select="@id"/>
-    <a href="{@href}" target="_blank">
-      <xsl:apply-templates/>
-    </a>
-  </xsl:template>
-
-  <xsl:template match="p[@xml:space='preserve']">
-    <xsl:apply-templates select="@id"/>
-    <div class="pre">
-      <xsl:apply-templates/>
-    </div>
-  </xsl:template>
-
-  <xsl:template match="source">
-    <xsl:apply-templates select="@id"/>
-    <pre class="code">
-<!-- Temporarily removed long-line-splitter ... gives out-of-memory problems -->
-      <xsl:apply-templates/>
-<!--
-    <xsl:call-template name="format">
-    <xsl:with-param select="." name="txt" /> 
-     <xsl:with-param name="width">80</xsl:with-param> 
-     </xsl:call-template>
--->
-    </pre>
-  </xsl:template>
-
-  <xsl:template match="anchor">
-    <a name="{@id}"/>
-  </xsl:template>
-
-  <xsl:template match="icon">
-    <xsl:apply-templates select="@id"/>
-    <img src="{@src}" alt="{@alt}" class="icon">
-      <xsl:if test="@height">
-        <xsl:attribute name="height"><xsl:value-of select="@height"/></xsl:attribute>
-      </xsl:if>
-      <xsl:if test="@width">
-        <xsl:attribute name="width"><xsl:value-of select="@width"/></xsl:attribute>
-      </xsl:if>
-    </img>
-  </xsl:template>
-
-  <xsl:template match="code">
-    <xsl:apply-templates select="@id"/>
-    <span class="codefrag"><xsl:value-of select="."/></span>
-  </xsl:template>
-
-  <xsl:template match="figure">
-    <xsl:apply-templates select="@id"/>
-    <div align="center">
-      <img src="{@src}" alt="{@alt}" class="figure">
-        <xsl:if test="@height">
-          <xsl:attribute name="height"><xsl:value-of select="@height"/></xsl:attribute>
-        </xsl:if>
-        <xsl:if test="@width">
-          <xsl:attribute name="width"><xsl:value-of select="@width"/></xsl:attribute>
-        </xsl:if>
-      </img>
-    </div>
-  </xsl:template>
-
-  <xsl:template match="table">
-    <xsl:apply-templates select="@id"/>
-    <table cellpadding="4" cellspacing="1" class="ForrestTable">
-      <xsl:if test="@cellspacing"><xsl:attribute name="cellspacing"><xsl:value-of select="@cellspacing"/></xsl:attribute></xsl:if>
-      <xsl:if test="@cellpadding"><xsl:attribute name="cellpadding"><xsl:value-of select="@cellpadding"/></xsl:attribute></xsl:if>
-      <xsl:if test="@border"><xsl:attribute name="border"><xsl:value-of select="@border"/></xsl:attribute></xsl:if>
-      <xsl:if test="@class"><xsl:attribute name="class"><xsl:value-of select="@class"/></xsl:attribute></xsl:if>
-      <xsl:if test="@bgcolor"><xsl:attribute name="bgcolor"><xsl:value-of select="@bgcolor"/></xsl:attribute></xsl:if>
-      <xsl:apply-templates/>
-    </table>
-  </xsl:template>
-
-  <xsl:template match="acronym/@title">
-    <xsl:attribute name="title">
-      <xsl:value-of select="normalize-space(.)"/>
-    </xsl:attribute>
-  </xsl:template>
-
-  <xsl:template name="minitoc">  
-    <xsl:param name="tocroot"/>
-    <xsl:param name="depth"/>     
-    <xsl:if test="count($tocroot/section) > 0">
-      <ul class="minitoc">
-        <xsl:for-each select="$tocroot/section">
-          <li>
-            <xsl:call-template name="toclink"/>
-            <xsl:if test="$depth&lt;$max-depth">
-              <xsl:call-template name="minitoc">
-                <xsl:with-param name="tocroot" select="."/>
-                <xsl:with-param name="depth" select="$depth + 1"/>
-              </xsl:call-template>
-            </xsl:if>
-          </li>
-        </xsl:for-each>
-      </ul>
-    </xsl:if>
-  </xsl:template>
-
-  <xsl:template name="toclink">
-    <xsl:variable name="tocitem" select="normalize-space(title)"/>
-    <xsl:if test="string-length($tocitem)>0">
-      <a>
-        <xsl:attribute name="href">
-          <xsl:text>#</xsl:text>
-          <xsl:if test="@id">
-            <xsl:value-of select="@id"/>
-          </xsl:if>
-        </xsl:attribute>
-        <xsl:value-of select="$tocitem"/>
-      </a>
-    </xsl:if>
-  </xsl:template>
-
-  <xsl:template match="header/authors">
-    <xsl:for-each select="person">
-      <xsl:choose>
-        <xsl:when test="position()=1">by&#160;</xsl:when>
-        <xsl:otherwise>,&#160;</xsl:otherwise>
-      </xsl:choose>
-      <xsl:value-of select="@name"/>
-    </xsl:for-each>
-  </xsl:template>
-
-  <xsl:template match="version">
-    <span class="version">
-      <xsl:apply-templates select="@major"/>
-      <xsl:apply-templates select="@minor"/>
-      <xsl:apply-templates select="@fix"/>
-      <xsl:apply-templates select="@tag"/>
-      <xsl:choose>
-        <xsl:when test="starts-with(., '$Revision: ')">
-          version <xsl:value-of select="substring(., 12, string-length(.) -11-2)"/>
-        </xsl:when>
-        <xsl:otherwise>
-          <xsl:value-of select="."/>
-        </xsl:otherwise>
-      </xsl:choose>
-    </span>
-  </xsl:template>
-  
-  <xsl:template match="@major">
-     v<xsl:value-of select="."/>
-  </xsl:template>
-  
-  <xsl:template match="@minor">
-     <xsl:value-of select="concat('.',.)"/>
-  </xsl:template>
-  
-  <xsl:template match="@fix">
-     <xsl:value-of select="concat('.',.)"/>
-  </xsl:template>
-  
-  <xsl:template match="@tag">
-     <xsl:value-of select="concat('-',.)"/>
-  </xsl:template>
-
-  <xsl:template match="type">
-    <p class="type">
-    <!-- FIXME: i18n Transformer here -->
-    <xsl:text>Type: </xsl:text>
-    <xsl:value-of select="."/>
-    </p>
-  </xsl:template>
-
-  <xsl:template match="abstract">
-    <p>
-      <xsl:apply-templates/>
-    </p>
-  </xsl:template>
-
-  <xsl:template name="email">
-    <a>
-    <xsl:attribute name="href">
-      <xsl:choose>
-      <xsl:when test="$obfuscate-mail-links='true'">
-        <xsl:variable name="user" select="substring-before(@email,'@')"/>
-	<xsl:variable name="host" select="substring-after(@email,'@')"/>
-	<xsl:value-of select="concat('mailto:',$user,'.at.',$host)"/>
-      </xsl:when>
-      <xsl:otherwise>
-        <xsl:value-of select="concat('mailto:',@email)"/>
-      </xsl:otherwise>
-      </xsl:choose>
-    </xsl:attribute>
-       <xsl:value-of select="@name"/>
-    </a>
-  </xsl:template>
-
-  <xsl:template match="node()|@*" priority="-1">
-    <xsl:copy>
-      <xsl:apply-templates select="@*"/>
-      <xsl:apply-templates/>
-    </xsl:copy>
-  </xsl:template>
-  
-</xsl:stylesheet>
-
diff --git a/3.0.4/doc/forrest/skins/common/xslt/html/dotdots.xsl b/3.0.4/doc/forrest/skins/common/xslt/html/dotdots.xsl
deleted file mode 100644
index f0436c0..0000000
--- a/3.0.4/doc/forrest/skins/common/xslt/html/dotdots.xsl
+++ /dev/null
@@ -1,63 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-
-<!--
-Contains the 'dotdots' template, which, given a path, will output a set of
-directory traversals to get back to the source directory. Handles both '/' and
-'\' directory separators.
-
-Examples:
-  Input                           Output 
-    index.html                    ""
-    dir/index.html                "../"
-    dir/subdir/index.html         "../../"
-    dir//index.html              "../"
-    dir/                          "../"
-    dir//                         "../"
-    \some\windows\path            "../../"
-    \some\windows\path\           "../../../"
-    \Program Files\mydir          "../"
-
-Cannot handle ..'s in the path, so don't expect 'dir/subdir/../index.html' to
-work.
-
-jefft@apache.org
--->
-
-<xsl:stylesheet
-  version="1.0"
-  xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
-
-  <xsl:template name="dotdots">
-    <xsl:param name="path"/>
-    <xsl:variable name="dirs" select="normalize-space(translate(concat($path, 'x'), ' /\', '_  '))"/>
-    <!-- The above does the following:
-       o Adds a trailing character to the path. This prevents us having to deal
-         with the special case of ending with '/'
-       o Translates all directory separators to ' ', and normalize spaces,
-		 cunningly eliminating duplicate '//'s. We also translate any real
-		 spaces into _ to preserve them.
-    -->
-    <xsl:variable name="remainder" select="substring-after($dirs, ' ')"/>
-    <xsl:if test="$remainder">
-      <xsl:text>../</xsl:text>
-      <xsl:call-template name="dotdots">
-        <xsl:with-param name="path" select="translate($remainder, ' ', '/')"/>
-		<!-- Translate back to /'s because that's what the template expects. -->
-      </xsl:call-template>
-    </xsl:if>
-  </xsl:template>
-
-<!--
-  Uncomment to test.
-  Usage: saxon dotdots.xsl dotdots.xsl path='/my/test/path'
-
-  <xsl:param name="path"/>
-  <xsl:template match="/">
-    <xsl:message>Path: <xsl:value-of select="$path"/></xsl:message>
-    <xsl:call-template name="dotdots">
-      <xsl:with-param name="path" select="$path"/>
-    </xsl:call-template>
-  </xsl:template>
- -->
-
-</xsl:stylesheet>
diff --git a/3.0.4/doc/forrest/skins/common/xslt/html/pathutils.xsl b/3.0.4/doc/forrest/skins/common/xslt/html/pathutils.xsl
deleted file mode 100644
index 5590575..0000000
--- a/3.0.4/doc/forrest/skins/common/xslt/html/pathutils.xsl
+++ /dev/null
@@ -1,224 +0,0 @@
-<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
-<!--
-PathUtils.xsl
-
-A set of XSLT templates useful for parsing URI paths:
-
-dirname: return the directory part of a path
-filename: return the file part of a path
-ext: return the last extension of the filename in a path
-filename-noext: return the file part of a path without its last extension
-
-@author Jeff Turner <jefft@apache.org>
-$Id$
--->
-
-<!-- Returns the directory part of a path.  Equivalent to Unix 'dirname'.
-Examples:
-'' -> ''
-'foo/index.html' -> 'foo/'
--->
-<xsl:template name="dirname">
-  <xsl:param name="path" />
-  <xsl:if test="contains($path, '/')">
-    <xsl:value-of select="concat(substring-before($path, '/'), '/')" />
-    <xsl:call-template name="dirname">
-      <xsl:with-param name="path"
-        select="substring-after($path, '/')" />
-    </xsl:call-template>
-  </xsl:if>
-</xsl:template>
-
-<!-- Normalized (..'s eliminated) version of 'dirname' -->
-<xsl:template name="dirname-nz">
-  <xsl:param name="path" />
-  <xsl:call-template name="normalize">
-    <xsl:with-param name="path">
-      <xsl:call-template name="dirname">
-        <xsl:with-param name="path" select="$path" />
-      </xsl:call-template>
-    </xsl:with-param>
-  </xsl:call-template>
-</xsl:template>
-
-
-<!-- Returns the filename part of a path.  Equivalent to Unix 'basename'
-Examples:
-'index.html'  ->  'index.html' 
-'foo/bar/'  ->  '' 
-'foo/bar/index.html'  ->  'index.html' 
--->
-<xsl:template name="filename">
-  <xsl:param name="path"/>
-  <xsl:choose>
-    <xsl:when test="contains($path, '/')">
-      <xsl:call-template name="filename">
-        <xsl:with-param name="path" select="substring-after($path, '/')"/>
-      </xsl:call-template>
-    </xsl:when>
-    <xsl:otherwise>
-      <xsl:value-of select="$path"/>
-    </xsl:otherwise>
-  </xsl:choose>
-</xsl:template>
-
-<!-- Returns the last extension of a filename in a path.
-Examples:
-'index.html'  ->  '.html' 
-'index.dtdx.html'  ->  '.html' 
-'foo/bar/'  ->  '' 
-'foo/bar/index.html'  ->  '.html' 
-'foo/bar/index'  ->  '' 
--->
-<xsl:template name="ext">
-  <xsl:param name="path"/>
-  <xsl:param name="subflag"/> <!-- Outermost call? -->
-  <xsl:choose>
-    <xsl:when test="contains($path, '.')">
-      <xsl:call-template name="ext">
-        <xsl:with-param name="path" select="substring-after($path, '.')"/>
-        <xsl:with-param name="subflag" select="'sub'"/>
-      </xsl:call-template>
-    </xsl:when>
-    <!-- Handle extension-less filenames by returning '' -->
-    <xsl:when test="not($subflag) and not(contains($path, '.'))">
-      <xsl:text/>
-    </xsl:when>
-    <xsl:otherwise>
-      <xsl:value-of select="concat('.', $path)"/>
-    </xsl:otherwise>
-  </xsl:choose>
-</xsl:template>
-
-<!-- Returns a filename of a path stripped of its last extension.
-Examples:
-'foo/bar/index.dtdx.html' -> 'index.dtdx'
--->
-<xsl:template name="filename-noext">
-  <xsl:param name="path"/>
-  <xsl:variable name="filename">
-    <xsl:call-template name="filename">
-      <xsl:with-param name="path" select="$path"/>
-    </xsl:call-template>
-  </xsl:variable>
-  <xsl:variable name="ext">
-    <xsl:call-template name="ext">
-      <xsl:with-param name="path" select="$filename"/>
-    </xsl:call-template>
-  </xsl:variable>
-  <xsl:value-of select="substring($filename, 1, string-length($filename) - string-length($ext))"/>
-</xsl:template>
-
-<!-- Returns a path with the filename stripped of its last extension.
-Examples:
-'foo/bar/index.dtdx.html' -> 'foo/bar/index.dtdx'
--->
-<xsl:template name="path-noext">
-  <xsl:param name="path"/>
-  <xsl:variable name="ext">
-    <xsl:call-template name="ext">
-      <xsl:with-param name="path" select="$path"/>
-    </xsl:call-template>
-  </xsl:variable>
-  <xsl:value-of select="substring($path, 1, string-length($path) - string-length($ext))"/>
-</xsl:template>
-
-<!-- Normalized (..'s eliminated) version of 'path-noext' -->
-<xsl:template name="path-noext-nz">
-  <xsl:param name="path" />
-  <xsl:call-template name="normalize">
-    <xsl:with-param name="path">
-      <xsl:call-template name="path-noext">
-        <xsl:with-param name="path" select="$path" />
-      </xsl:call-template>
-    </xsl:with-param>
-  </xsl:call-template>
-</xsl:template>
-
-<!-- Returns a path with any fragment identifier ('#...') stripped off
-Examples:
-'foo/bar/index.dtdx.html#blah' -> 'foo/bar/index.dtdx.html'
--->
-<xsl:template name="path-nofrag">
-  <xsl:param name="path"/>
-  <xsl:if test="not(contains($path, '#'))">
-    <xsl:value-of select="$path"/>
-  </xsl:if>
-  <xsl:if test="contains($path, '#')">
-    <xsl:value-of select="substring-before($path, '#')"/>
-  </xsl:if>
-</xsl:template>
-
-
-
-<!-- Normalizes a path, converting '/' to '\' and eliminating ..'s
-Examples:
-'foo/bar/../baz/index.html' -> foo/baz/index.html'
--->
-<xsl:template name="normalize">
-  <xsl:param name="path"/>
-  <xsl:variable name="path-" select="translate($path, '\', '/')"/>
-  <xsl:choose>
-    <xsl:when test="contains($path-, '/../')">
-
-      <xsl:variable name="pa" select="substring-before($path-, '/../')"/>
-      <xsl:variable name="th" select="substring-after($path-, '/../')"/>
-      <xsl:variable name="pa-">
-        <xsl:call-template name="dirname">
-          <xsl:with-param name="path" select="$pa"/>
-        </xsl:call-template>
-      </xsl:variable>
-      <xsl:variable name="pa-th" select="concat($pa-, $th)"/>
-      <xsl:call-template name="normalize">
-        <xsl:with-param name="path" select="$pa-th"/>
-      </xsl:call-template>
-    </xsl:when>
-
-    <xsl:otherwise>
-      <xsl:value-of select="$path-"/>
-    </xsl:otherwise>
-  </xsl:choose>
-
-</xsl:template>
-
-<!--
-Uncomment this to test.
-Usage: saxon pathutils.xsl pathutils.xsl path=foo/bar
-
-<xsl:param name="path" select="'/foo/bar/../baz/index.html'"/>
-<xsl:template match="/">
-  <xsl:message>
-    path           = <xsl:value-of select="$path"/>
-    normalize      = <xsl:call-template name="normalize">
-      <xsl:with-param name="path" select="$path"/>
-    </xsl:call-template>
-    dirname        = <xsl:call-template name="dirname">
-      <xsl:with-param name="path" select="$path"/>
-    </xsl:call-template>
-    dirname-nz     = <xsl:call-template name="dirname-nz">
-      <xsl:with-param name="path" select="$path"/>
-    </xsl:call-template>
-    filename       = <xsl:call-template name="filename">
-      <xsl:with-param name="path" select="$path"/>
-    </xsl:call-template>
-    ext            = <xsl:call-template name="ext">
-      <xsl:with-param name="path" select="$path"/>
-    </xsl:call-template>
-    filename-noext = <xsl:call-template name="filename-noext">
-      <xsl:with-param name="path" select="$path"/>
-    </xsl:call-template>
-    path-noext     = <xsl:call-template name="path-noext">
-      <xsl:with-param name="path" select="$path"/>
-    </xsl:call-template>
-    path-noext-nz  = <xsl:call-template name="path-noext-nz">
-      <xsl:with-param name="path" select="$path"/>
-    </xsl:call-template>
-    path-nofrag    = <xsl:call-template name="path-nofrag">
-      <xsl:with-param name="path" select="$path"/>
-    </xsl:call-template>
- 
-  </xsl:message>
-</xsl:template>
--->
-
-</xsl:stylesheet>
diff --git a/3.0.4/doc/forrest/skins/common/xslt/html/renderlogo.xsl b/3.0.4/doc/forrest/skins/common/xslt/html/renderlogo.xsl
deleted file mode 100644
index 7e96385..0000000
--- a/3.0.4/doc/forrest/skins/common/xslt/html/renderlogo.xsl
+++ /dev/null
@@ -1,47 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-
-<!--
-A simple callable template that renders a logo for an entity. The logo will 
-be a hyperlink and may include an image (with width and height if specified)
-or else it will just include the specified text.
-
-Note that text and image are mandatory parts of the template.
--->
-
-<xsl:stylesheet
-  version="1.0"
-  xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
-
-  <xsl:template name="renderlogo">
-    <xsl:param name="name"/>
-    <xsl:param name="url"/>
-    <xsl:param name="logo"/>
-    <xsl:param name="width"/>
-    <xsl:param name="height"/>
-    <xsl:param name="root"/>
-    <xsl:param name="description"/>
-    <a href="{$url}">
-      <xsl:choose>
-        <xsl:when test="$logo and not($logo = '')">
-          <img alt="{$name}" class="logoImage" border="0">
-            <xsl:attribute name="src">
-	      <xsl:if test="not(starts-with($logo, 'http://'))"><xsl:value-of select="$root"/></xsl:if>
-              <xsl:value-of select="$logo"/>
-            </xsl:attribute>
-            <xsl:if test="$width">
-              <xsl:attribute name="width"><xsl:value-of select="$width"/></xsl:attribute>
-            </xsl:if>
-            <xsl:if test="$height">
-              <xsl:attribute name="height"><xsl:value-of select="$height"/></xsl:attribute>
-            </xsl:if>
-            <xsl:if test="$description">
-              <xsl:attribute name="title"><xsl:value-of select="$description"/></xsl:attribute>
-            </xsl:if>
-	  </img>
-        </xsl:when>
-        <xsl:otherwise><xsl:value-of select="$name"/></xsl:otherwise>
-      </xsl:choose>
-    </a>
-  </xsl:template>
-
-</xsl:stylesheet>
diff --git a/3.0.4/doc/forrest/skins/common/xslt/html/site2xhtml.xsl b/3.0.4/doc/forrest/skins/common/xslt/html/site2xhtml.xsl
deleted file mode 100644
index 9757dae..0000000
--- a/3.0.4/doc/forrest/skins/common/xslt/html/site2xhtml.xsl
+++ /dev/null
@@ -1,138 +0,0 @@
-<?xml version="1.0"?>
-<!--
-site2xhtml.xsl is the final stage in HTML page production.  It merges HTML from
-document2html.xsl, tab2menu.xsl and book2menu.xsl, and adds the site header,
-footer, searchbar, css etc.  As input, it takes XML of the form:
-
-<site>
-  <div class="menu">
-    ...
-  </div>
-  <div class="tab">
-    ...
-  </div>
-  <div class="content">
-    ...
-  </div>
-</site>
-
-$Id$
--->
-
-<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
-
-  <!-- Default skinconf.xml in the skins/ directory -->
-  <xsl:param name="config-file" select="'../../../../skinconf.xml'"/>
-  <xsl:variable name="config" select="document($config-file)/skinconfig"/>
-  <xsl:param name="path"/>
-
-  <xsl:include href="dotdots.xsl"/>
-  <xsl:include href="pathutils.xsl"/>
-  <xsl:include href="renderlogo.xsl"/>
-
-  <!-- Path (..'s) to the root directory -->
-  <xsl:variable name="root">
-    <xsl:call-template name="dotdots">
-      <xsl:with-param name="path" select="$path"/>
-    </xsl:call-template>
-  </xsl:variable>
-
-  <!-- Source filename (eg 'foo.xml') of current page -->
-  <xsl:variable name="filename">
-    <xsl:call-template name="filename">
-      <xsl:with-param name="path" select="$path"/>
-    </xsl:call-template>
-  </xsl:variable>
-
-  <xsl:variable name="skin-img-dir" select="concat(string($root), 'skin/images')"/>
-  <xsl:variable name="spacer" select="concat($root, 'skin/images/spacer.gif')"/>
-
-  <xsl:template match="site">
-    <html>
-      <head>
-        <title><xsl:value-of select="div[@class='content']/table/tr/td/h1"/></title>
-      </head>
-      <body>
-        <xsl:if test="$config/group-url">
-          <xsl:call-template name="renderlogo">
-            <xsl:with-param name="name" select="$config/group-name"/>
-            <xsl:with-param name="url" select="$config/group-url"/>
-            <xsl:with-param name="logo" select="$config/group-logo"/>
-            <xsl:with-param name="root" select="$root"/>
-            <xsl:with-param name="description" select="$config/group-description"/>
-          </xsl:call-template>
-        </xsl:if>
-        <xsl:call-template name="renderlogo">
-          <xsl:with-param name="name" select="$config/project-name"/>
-          <xsl:with-param name="url" select="$config/project-url"/>
-          <xsl:with-param name="logo" select="$config/project-logo"/>
-          <xsl:with-param name="root" select="$root"/>
-          <xsl:with-param name="description" select="$config/project-description"/>
-        </xsl:call-template>
-        <xsl:comment>================= start Tabs ==================</xsl:comment>
-        <xsl:apply-templates select="div[@class='tab']"/>
-        <xsl:comment>================= end Tabs ==================</xsl:comment>
-        <xsl:comment>================= start Menu items ==================</xsl:comment>
-        <xsl:apply-templates select="div[@class='menu']"/>
-        <xsl:comment>================= end Menu items ==================</xsl:comment>
-        <xsl:comment>================= start Content==================</xsl:comment>
-        <xsl:apply-templates select="div[@class='content']"/>
-        <xsl:comment>================= end Content==================</xsl:comment>
-
-        <xsl:comment>================= start Footer ==================</xsl:comment>
-        Copyright &#169; <xsl:value-of select="$config/year"/>&#160;<xsl:value-of
-          select="$config/vendor"/> All rights reserved.
-        <script language="JavaScript" type="text/javascript"><![CDATA[<!--
-          document.write(" - "+"Last Published: " + document.lastModified);
-          //  -->]]></script>
-        <xsl:if test="$config/host-logo and not($config/host-logo = '')">
-          <a href="{$config/host-url}">
-            <xsl:call-template name="renderlogo">
-              <xsl:with-param name="name" select="$config/host-name"/>
-              <xsl:with-param name="url" select="$config/host-url"/>
-              <xsl:with-param name="logo" select="$config/host-logo"/>
-              <xsl:with-param name="root" select="$root"/>
-            </xsl:call-template>
-          </a>
-        </xsl:if>
-        <xsl:if test="$filename = 'index.html' and $config/credits">
-          <xsl:for-each select="$config/credits/credit[not(@role='pdf')]">
-            <xsl:call-template name="renderlogo">
-              <xsl:with-param name="name" select="name"/>
-              <xsl:with-param name="url" select="url"/>
-              <xsl:with-param name="logo" select="image"/>
-              <xsl:with-param name="root" select="$root"/>
-              <xsl:with-param name="width" select="width"/>
-              <xsl:with-param name="height" select="height"/>
-            </xsl:call-template>
-          </xsl:for-each>
-        </xsl:if>
-        <a href="http://validator.w3.org/check/referer"><img class="skin" border="0"
-            src="http://www.w3.org/Icons/valid-html401"
-            alt="Valid HTML 4.01!" height="31" width="88"/></a>
-      </body>
-    </html>
-  </xsl:template>
-
-  <!-- Add links to any standards-compliance logos -->
-  <xsl:template name="compliancy-logos">
-    <xsl:if test="$config/disable-compliance-links = 'false'">
-      <a href="http://validator.w3.org/check/referer"><img class="logoImage" 
-          src="{$skin-img-dir}/valid-html401.png"
-          alt="Valid HTML 4.01!" height="31" width="88"/></a>
-          
-      <a href="http://jigsaw.w3.org/css-validator/"><img class="logoImage" 
-          src="{$skin-img-dir}/vcss.png" 
-          alt="Valid CSS!" height="31" width="88"/></a>
-    </xsl:if>
-  </xsl:template>
-
-
-  <xsl:template match="node()|@*" priority="-1">
-    <xsl:copy>
-      <xsl:apply-templates select="@*"/>
-      <xsl:apply-templates/>
-    </xsl:copy>
-  </xsl:template>
-
-</xsl:stylesheet>
diff --git a/3.0.4/doc/forrest/skins/common/xslt/html/split.xsl b/3.0.4/doc/forrest/skins/common/xslt/html/split.xsl
deleted file mode 100644
index 0076a36..0000000
--- a/3.0.4/doc/forrest/skins/common/xslt/html/split.xsl
+++ /dev/null
@@ -1,141 +0,0 @@
-<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
-
-<!--
- This stylesheet was taken from the XSLT FAQ http://www.dpawson.co.uk/xsl/
- 
- Comments and adaption to be used without normalize-space()
-  by Nicola Ken Barozzi nicolaken@apache.org
---> 
-
-<!--
-  Input:
-
-<doc>
-
-<para>
- 123456 2345 343434 545454 43434 343 
- 12345 343434 545454 43434 343 
- 32345645 343434 545454 43434 343 
- 3422222225 343434 545454 43434 343 
- llllllllllllllllllllllooooooooooooooonnnnnnnnnnnggggggggg
- 345 343434 545454 43434 343 
-</para>
-
-</doc>
-
-Output:
-
-<HTML>
-<BODY>
-<PRE>123456 2345 343434 545454 
-43434 343 12345 343434 545454 
-43434 343 32345645 343434 
-545454 43434 343 3422222225 
-343434 545454 43434 343 
-lllllllllllllllllllllloooooooo
-ooooooonnnnnnnnnnnggggggggg 
-345 343434 545454 43434 
-343
-</PRE>
-</BODY>
-</HTML>
-
-Fragment ised: 
-
- <xsl:template match="/doc">
- <HTML><BODY><PRE>
-    <xsl:call-template name="format">
-    <xsl:with-param select="normalize-space(para)" name="txt" /> 
-     <xsl:with-param name="width">30</xsl:with-param> 
-     </xsl:call-template>
-  </PRE></BODY></HTML>
-  </xsl:template>
-
-
--->
-
- <xsl:template match="/body">
-   <body>
-    <xsl:call-template name="format">
-    <xsl:with-param select="source" name="txt" /> 
-     <xsl:with-param name="width">40</xsl:with-param> 
-     </xsl:call-template>
-  </body>
-  </xsl:template>
-  
-  <xsl:template name="format">
-    <xsl:param name="txt" /> 
-    <xsl:param name="width" /> 
-
-    <!-- if there is still text left -->
-    <xsl:if test="$txt">
-    
-    <xsl:variable name = "pretxt" select = "substring($txt,0, $width)" />
-    
-    <xsl:choose>
-      <xsl:when test="contains($pretxt, '&#xA;')">
-        <xsl:value-of select="substring-before($pretxt, '&#xA;')"/>
-        <xsl:text>&#xA;</xsl:text> 
-        <xsl:call-template name="format">
-          <xsl:with-param name="txt" select="substring-after($txt,'&#xA;')"/>
-          <xsl:with-param select="$width" name="width" />           
-        </xsl:call-template>
-      </xsl:when>
-      
-      <xsl:otherwise>
-      <!-- get the width at which to break-->
-      <xsl:variable name="real-width">
-        <xsl:call-template name="tune-width">
-          <xsl:with-param select="$txt" name="txt" /> 
-          <xsl:with-param select="$width" name="width" /> 
-          <xsl:with-param select="$width" name="def" /> 
-        </xsl:call-template>
-      </xsl:variable>
-
-      <!-- output the first part of the broken string -->
-      <xsl:value-of select="substring($txt, 1, $real-width)" /> 
-
-      <!-- output a newline -->
-      <xsl:text>&#xA;</xsl:text> 
-
-      <!-- call itself with the remaining part of the text -->
-      <xsl:call-template name="format">
-       <xsl:with-param select="substring($txt,$real-width + 1)" name="txt" /> 
-       <xsl:with-param select="$width" name="width" /> 
-      </xsl:call-template>
-      </xsl:otherwise>
-      </xsl:choose>
-    </xsl:if>
-  </xsl:template>
-  
-   
-  <!-- used by template "format", it calculates the width at the given def 
-       
-       It starts at def length and comes back till it finds a space -->
-  <xsl:template name="tune-width">
-    <xsl:param name="txt" /> 
-    <xsl:param name="width" /> 
-    <xsl:param name="def" /> 
-
-    <xsl:choose>
-      <xsl:when test="$width = 0">
-       <xsl:value-of select="$def" /> 
-      </xsl:when>
-                 
-      <xsl:when test="substring($txt, $width, 1 ) = ' '">
-          <xsl:value-of select="$width" /> 
-       </xsl:when>
-       
-       <xsl:otherwise>
-         <!-- otherwise need to tune again, trying with $width - 1 -->
-         <xsl:call-template name="tune-width">
-           <xsl:with-param select="$width - 1" name="width" /> 
-           <xsl:with-param select="$txt" name="txt" /> 
-           <xsl:with-param select="$def" name="def" /> 
-         </xsl:call-template>
-       </xsl:otherwise>
-     </xsl:choose>
-
-  </xsl:template>
-
-  </xsl:stylesheet>
diff --git a/3.0.4/doc/forrest/skins/common/xslt/html/tab2menu.xsl b/3.0.4/doc/forrest/skins/common/xslt/html/tab2menu.xsl
deleted file mode 100644
index cb95ecb..0000000
--- a/3.0.4/doc/forrest/skins/common/xslt/html/tab2menu.xsl
+++ /dev/null
@@ -1,159 +0,0 @@
-<?xml version="1.0"?>
-<!--
-This stylesheet generates 'tabs' at the top left of the screen.  Tabs are
-visual indicators that a certain subsection of the URI space is being browsed.
-For example, if we had tabs with paths:
-
-Tab1:  ''
-Tab2:  'community'
-Tab3:  'community/howto'
-Tab4:  'community/howto/xmlform/index.html'
-
-Then if the current path was 'community/howto/foo', Tab3 would be highlighted.
-The rule is: the tab with the longest path that forms a prefix of the current
-path is enabled.
-
-The output of this stylesheet is HTML of the form:
-    <div class="tab">
-      ...
-    </div>
-
-which is then merged by site2xhtml.xsl
-
-$Id$
--->
-
-<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
-
-  <!-- ================================================================ -->
-  <!-- These templates SHOULD be overridden                             -->
-  <!-- ================================================================ -->
-
-  <!-- Called before first tag -->
-  <xsl:template name="pre-separator">
-  </xsl:template>
-
-  <!-- Called after last tag -->
-  <xsl:template name="post-separator">
-  </xsl:template>
-
-  <!-- Called between tags -->
-  <xsl:template name="separator">
-    <xsl:text> | </xsl:text>
-  </xsl:template>
-
-  <!--
-  Note: sub-stylesheets can't do apply-imports here, because it would choose
-  the 'tags' template and infinitely recurse. Hence call-template used instead.
-  -->
-
-  <!-- Display a selected tab node -->
-  <xsl:template name="selected">
-    <xsl:call-template name="base-selected"/>
-  </xsl:template>
-
-  <!-- Display an unselected tab node -->
-  <xsl:template name="not-selected">
-    <xsl:call-template name="base-not-selected"/>
-  </xsl:template>
-
-
-  <!-- ================================================================ -->
-  <!-- These templates CAN be overridden                             -->
-  <!-- ================================================================ -->
-
-  <xsl:template match="tabs">
-    <div class="tab">
-      <xsl:call-template name="base-tabs"/>
-    </div>
-  </xsl:template>
-
-
-  <!-- ================================================================ -->
-  <!-- These templates SHOULD NOT be overridden                         -->
-  <!-- ================================================================ -->
-
-  <xsl:param name="path"/>
-
-  <xsl:include href="dotdots.xsl"/>
-  <xsl:include href="tabutils.xsl"/>
-
-  <!-- NOTE: Xalan has a bug (race condition?) where sometimes $root is only half-evaluated -->
-  <xsl:variable name="root">
-    <xsl:call-template name="dotdots">
-      <xsl:with-param name="path" select="$path"/>
-    </xsl:call-template>
-  </xsl:variable>
-
-  <xsl:variable name="skin-img-dir" select="concat(string($root), 'skin/images')"/>
-
-  <!--
-    The longest path of any tab, whose path is a subset of the current URL.  Ie,
-    the path of the 'current' tab.
-  -->
-  <xsl:variable name="longest-dir">
-    <xsl:call-template name="longest-dir">
-      <xsl:with-param name="tabfile" select="/"/>
-    </xsl:call-template>
-  </xsl:variable>
-
-  <xsl:variable name="matching-id">
-    <xsl:call-template name="matching-id">
-      <xsl:with-param name="tabfile" select="/"/>
-    </xsl:call-template>
-  </xsl:variable>
-
-
-  <!-- Called from tabs, after it has written the outer 'div class=tabs' and
-  any other HTML -->
-  <xsl:template name="base-tabs">
-    <xsl:call-template name="pre-separator"/>
-    <xsl:for-each select="//tab">
-      <xsl:if test="position()!=1"><xsl:call-template name="separator"/></xsl:if>
-      <xsl:apply-templates select="."/>
-    </xsl:for-each>
-    <xsl:call-template name="post-separator"/>
-  </xsl:template>
-
-
-  <xsl:template match="tab">
-    <xsl:choose>
-      <xsl:when test="@id and @id = $matching-id">
-        <xsl:call-template name="selected"/>
-      </xsl:when>
-      <xsl:when test="not(@id) and @dir = $longest-dir or @href = $longest-dir">
-        <xsl:call-template name="selected"/>
-      </xsl:when>
-      <xsl:otherwise>
-        <xsl:call-template name="not-selected"/>
-      </xsl:otherwise>
-    </xsl:choose>
-  </xsl:template>
-
-  <!-- Called from 'selected' -->
-  <xsl:template name="base-selected">
-    <a class="base-selected">
-      <xsl:attribute name="href">
-        <xsl:call-template name="calculate-tab-href">
-          <xsl:with-param name="tab" select="."/>
-          <xsl:with-param name="path" select="$path"/>
-        </xsl:call-template>
-      </xsl:attribute>
-        <xsl:value-of select="@label"/>
-    </a>
-  </xsl:template>
-
-  <!-- Called from 'not-selected' -->
-  <xsl:template name="base-not-selected">
-    <a class="base-not-selected">
-      <xsl:attribute name="href">
-        <xsl:call-template name="calculate-tab-href">
-          <xsl:with-param name="tab" select="."/>
-          <xsl:with-param name="path" select="$path"/>
-        </xsl:call-template>
-      </xsl:attribute>
-        <xsl:value-of select="@label"/>
-    </a>
-  </xsl:template>
-
-</xsl:stylesheet>
diff --git a/3.0.4/doc/forrest/skins/common/xslt/html/tabutils.xsl b/3.0.4/doc/forrest/skins/common/xslt/html/tabutils.xsl
deleted file mode 100644
index 2208e02..0000000
--- a/3.0.4/doc/forrest/skins/common/xslt/html/tabutils.xsl
+++ /dev/null
@@ -1,78 +0,0 @@
-<?xml version="1.0"?>
-
-<!--
-Some callable templates useful when dealing with tab paths.  Mostly used in
-tab2menu.xsl
--->
-
-<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
-
-  <xsl:param name="site-file" select="'cocoon://abs-menulinks'"/>
-  <xsl:variable name="site" select="document($site-file)"/>
- 
-  <!-- Given the current path and a tabs.xml entry, returns a relative path to
-  the specified tab's URL.  When rendering a set of tabs, this template will be
-  called once per tab.
-  -->
-  <xsl:template name="calculate-tab-href">
-
-    <xsl:param name="dir_index" select="'index.html'"/>
-
-    <xsl:param name="tab"/> <!-- current 'tab' node -->
-    <xsl:param name="path" select="$path"/>
-
-    <xsl:if test="starts-with($tab/@href, 'http')">  <!-- Absolute URL -->
-      <xsl:value-of select="$tab/@href"/>
-    </xsl:if>
-    <xsl:if test="not(starts-with($tab/@href, 'http'))">  <!-- Root-relative path -->
-      <xsl:variable name="backpath">
-        <xsl:call-template name="dotdots">
-          <xsl:with-param name="path" select="$path"/>
-        </xsl:call-template>
-        <xsl:text>/</xsl:text>
-        <xsl:value-of select="$tab/@dir | $tab/@href"/>
-        <!-- If we obviously have a directory, add /index.html -->
-        <xsl:if test="$tab/@dir or substring($tab/@href, string-length($tab/@href),
-          string-length($tab/@href)) = '/'">
-          <xsl:text>/</xsl:text>
-          <xsl:if test="$tab/@indexfile">
-            <xsl:value-of select="$tab/@indexfile"/>
-          </xsl:if>
-          <xsl:if test="not(@indexfile)">
-            <xsl:value-of select="$dir_index"/>
-          </xsl:if>
-        </xsl:if>
-      </xsl:variable>
-
-      <xsl:value-of
-        select="translate(normalize-space(translate($backpath, ' /', '/ ')), ' /', '/ ')"/>
-      <!-- Link to backpath, normalizing slashes -->
-    </xsl:if>
-  </xsl:template>
-
-  <!--
-    The id of any tab, whose path is a subset of the current URL.  Ie,
-    the path of the 'current' tab.
-  -->
-  <xsl:template name="matching-id" xmlns:l="http://apache.org/forrest/linkmap/1.0">
-    <xsl:value-of select="$site//*[starts-with(@href, $path)]/@tab"/>
-  </xsl:template>
- 
-  <!--
-    The longest path of any tab, whose path is a subset of the current URL.  Ie,
-    the path of the 'current' tab.
-  -->
-  <xsl:template name="longest-dir">
-    <xsl:param name="tabfile"/>
-    <xsl:for-each select="$tabfile/tabs/tab[starts-with($path, @dir|@href)]">
-      <xsl:sort select="string-length(@dir|@href)"
-        data-type="number" order="descending"/>
-      <xsl:if test="position()=1">
-        <xsl:value-of select="@dir|@href"/>
-      </xsl:if>
-    </xsl:for-each>
-  </xsl:template>
-
-
-</xsl:stylesheet>
-
diff --git a/3.0.4/doc/forrest/skins/jakarta-site/css/mysite.css b/3.0.4/doc/forrest/skins/jakarta-site/css/mysite.css
deleted file mode 100644
index 63d7fb2..0000000
--- a/3.0.4/doc/forrest/skins/jakarta-site/css/mysite.css
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- * Other colors:
- *  - dark blue: #036
- *  - bluish: #269
- *
- */
-
-/*
- * The Banner section.
- */
-.banner, .projectLogo, .groupLogo, .projectLogo a, .groupLogo a,
-    .groupLogo a:visited, .projectLogo a:visited,
-    .groupLogo a:link, .projectLogo a:link {
-}
-
-/*
- * The Status + Footer section.
- */
-.status, .breadcrumb, .searcher, .tabs {
-}
-
-.selectedTab {
-}
-
-/*
- * The Menu section.
- */
-.menuColumn {
-}
-.menubar {
-}
-.menu {
-}
-.menuLabel {
-}
-.menuItem {
-}
-
-/*
- * The Content section.
- */
-.contentColumn {
-}
-
-h1, h2, h3, h4 {
-}
-
-h3, h4 {
- }
-h3 {
-  }
-h4 {  
-}
-
-.code {
-}
-
-.section {
-}
-
-.subsection {
-}
-
-/*
- * The Footer section.
- */
-.footer, .copyright, .host, .credit {
-}
-
-/*
- * General Settings
- */
-body {
-}
-
-a:link, .menuItem a:visited, .status a:visited {
- color: #036;
-}
-
-a:active, a:hover {
-
-}
-
-body, th, td {
-}
-
-.logoImage {
-}
-
-
diff --git a/3.0.4/doc/forrest/skins/jakarta-site/css/print.css b/3.0.4/doc/forrest/skins/jakarta-site/css/print.css
deleted file mode 100644
index 059fd68..0000000
--- a/3.0.4/doc/forrest/skins/jakarta-site/css/print.css
+++ /dev/null
@@ -1,16 +0,0 @@
-#banner, #footer, #leftcol, #breadcrumbs, .docs #toc, .docs .courtesylinks	{
-	display: none;
-	}
-body.docs div.docs	{
-	margin: 0 !important;
-	border: none !important
-	}
-
-/* just to be sure */
-#navcolumn {
- width: 0px;
-}
-
-#leftcol {
- width: 0px;
-}
diff --git a/3.0.4/doc/forrest/skins/jakarta-site/css/site.css b/3.0.4/doc/forrest/skins/jakarta-site/css/site.css
deleted file mode 100644
index 1a9865a..0000000
--- a/3.0.4/doc/forrest/skins/jakarta-site/css/site.css
+++ /dev/null
@@ -1,86 +0,0 @@
-div#banner {
- border-top: 1px solid #fff;
- border-bottom: 1px solid #aaa;
-}
-
-#banner, #banner td {
- background: #fff;
- color: #036;
-}
-
-#tabs {
-  text-align: right;
-}
-
-.selectedTab {
-  color: #036;	
-}
-
- a.unselectedTab {
-  color: #888888;	
-}
-
-#source {
- background-color: #fff;
- color: #000;
- border-right: 1px solid #888;
- border-left: 1px solid #888;
- border-top: 1px solid #888;
- border-bottom: 1px solid #888;
- margin-right: 7px;
- margin-left: 7px;
- margin-top: 1em;
-}
-
-#source pre {
- margin-right: 7px;
- margin-left: 7px;
-}
-
-/* make the whole column grey */
-#navcolumn {
- width: 150px;
- }
-
-#leftcol {
- width: 150px;
-}
-
-/*
- * The Menu section.
- */
-.menuColumn {
-}
-
-.menu {
-  padding-bottom: .2em;
-  font-size: x-small;
-  text-decoration: none;
-}
-.menuLabel { font-weight: bold; }
-.menuItem {
-  padding-left: 12px;
-  text-decoration: none;
-}
-
-/* breadcrumbs */
-#breadcrumbs
-{
-	font-weight: bold;
-}
-.breadcrumbTrail
-{
-	padding-left: 5px;
-}
-.breadcrumb
-{
-	font-weight: bold;
-}
-.crumbSeparator
-{
-}
-
-SPAN.codefrag
-{
-  font-family: monospace;
-}
diff --git a/3.0.4/doc/forrest/skins/jakarta-site/css/tigris.css b/3.0.4/doc/forrest/skins/jakarta-site/css/tigris.css
deleted file mode 100644
index 9ca63d6..0000000
--- a/3.0.4/doc/forrest/skins/jakarta-site/css/tigris.css
+++ /dev/null
@@ -1,469 +0,0 @@
-/* contains rules unsuitable for Netscape 4.x; simpler rules are in ns4_only.css. see <http://style.tigris.org/> */
-
-/* colors, backgrounds, borders, link indication */ 
-
-body {
- background: #fff;
- color: #000;
- }
-.app h3, .app h4, .app th, .tabs td, .tabs th, .functnbar {
- background-image: url(images/nw_maj_rond.gif);
- background-repeat: no-repeat;
- }
-#navcolumn div div, body.docs #toc li li  {
- background-image: url(images/strich.gif);
- background-repeat: no-repeat;
- background-position: .5em .5em;
- }
-#navcolumn div div.heading  {
- background-image: none;
- }
-.app h3, .app h4 {
- color: #fff;
- }
-.app h3 {
- background-color: #036;
- }
-.app h4 {
- background-color: #888;
- }
-.a td {
- background: #ddd;
- }
-.b td {
- background: #efefef;
- }
-table, th, td {
- border: none
- }
-.mtb {
- border-top: solid 1px #ddd;
- }
-div.colbar {
- background: #bbb;
- }
-div#banner {
- border-top: 1px solid #369;
- border-bottom: 1px solid #003;
- }
-div#helptext th {
- border-bottom: 1px solid #996;
- border-right: 1px solid #996;
- }
-div#helptext td {
- border-bottom: 1px solid #cc9;
- border-right: 1px solid #cc9;
- }
-.tabs { 
- border-bottom: .75em #888 solid;
- }
-.tabs th, .tabs td {
- border-right: 1px solid #333;
- }
-.tabs td {
- border-bottom: 1px solid #ddd;
- }
-#navcolumn {
- background: #eee;
- border-right: 1px solid #aaa;
- border-bottom: 1px solid #aaa;
- }
-#breadcrumbs {
- border-bottom: 1px solid #aaa;
- background-color: #ddd;
- }
-#navcolumn, #breadcrumbs {
- border-top: 1px solid #fff;
- }
-#rightcol div.www, #rightcol div.help {
- border: 1px solid #ddd;
- }
-div#navcolumn div.focus {
- border-top: 1px solid #aaa;
- border-left: 1px solid #aaa;
- background-color: #fff;
- } 
-body.docs div.docs { 
- background: #fff;
- border-left: 1px solid #ddd;
- border-top: 1px solid #ddd;
- }
-body.docs { 
- background: #eee url(images/help_logo.gif) top right no-repeat !important;
- }
-.docs h3, .docs h4 {
- border-top: solid 1px #000;
- }
-#alerterrormessage { 
- background: url(images/icon_alert.gif) top left no-repeat !important;
- }
-.functnbar {
- background-color: #aaa;
- }
-.functnbar2, .functnbar3  {
- background: #aaa;
- }
-.functnbar3 {
- background-color: #ddd;
- }
-.functnbar, .functnbar2, .functnbar3 {
- color: #000;
- }
-.functnbar a, .functnbar2 a, .functnbar3 a {
- color: #000;
- text-decoration: underline;
- }
-#topmodule {
- background: #ddd;
- border-top: 1px solid #fff;
- border-bottom: 1px solid #aaa; 
- border-right: 1px solid #aaa; 
- }
-#topmodule #issueid {
- border-right: 1px solid #aaa;
- }
-a:link, #navcolumn a:visited, .app a:visited, .tasknav a:visited {
- color: blue;
- }
-a:active, a:hover, #leftcol a:active, #leftcol a:hover {
- color: #f30 !important;
- }
-#login a:link, #login a:visited {
- color: white; 
- text-decoration: underline;
- }
-#banner a:active, #banner a:hover {
- color: #f90 !important;
- }
-#leftcol a, #breadcrumbs a  {
- text-decoration: none;
- }
-a:link.selfref, a:visited.selfref {
- color: #555 !important;
- text-decoration: none;
- }
-h2 .lastchild {
- color: #777
- } 
-.tabs td, .tabs th {
- background-color: #ddd;
- }
-.app th {
- background-color: #bbb;
- }
-.tabs th {
- background-color: #888;
- color: #fff;
- }
-.axial th {
- background-color: #ddd;
- color: black
- }
-.tabs td {
- background-color: #ddd;
- }
-.alert { 
- color: #c00;
- }
-.confirm {
- color: green;
- }
-.info {
- color: blue;
- }
-.selection {
- background: #ffc;
- }
-#login {
- color: #fff;
- }
-#helptext th {
- background: #cc9;
- }
-#helptext td {
- background: #ffc;
- }
-.tabs a  {
- text-decoration: none;
- }
-#navcolumn div strong {
- color: #000;
- }
-#banner, #banner td { 
- background: #036;
- color: #fff;
- }
-body #banner #login a { 
- color: #fff;
- }
-
-
-/* font and text properties, exclusive of link indication, alignment, text-indent */
-
-body, th, td, input, select, textarea, h2 small {
- font-family: Verdana, Helvetica, Arial, sans-serif;
- }
-code, pre {
- font-family: 'Andale Mono', Courier, monospace;
- }
-html body, body th, body td, textarea, h2 small, .app h3, .app h4, #rightcol h3, #bodycol pre, #bodycol code {
- font-size: x-small;
- voice-family: "\"}\"";
- voice-family: inherit;
- font-size: small
- }
-html>body, html>body th, html>body td, html>body input, html>body select, html>body textarea, html>body h2 small, html>body .app h3, html>body .app h4, html>body #rightcol h3, html>body #bodycol pre, html>body #bodycol code {
- font-size: small
- }
-small, div#footer td, div#login, div.tabs th, div.tabs td, input, select, .paginate, .functnbar, .functnbar2, .functnbar3, #breadcrumbs td, .courtesylinks, #rightcol div.help, .colbar, .tasknav, body.docs div#toc, #leftcol {
- font-size: x-small;
- voice-family: "\"}\"";
- voice-family: inherit;
- font-size: x-small
- }
-html>body small, html>body div#footer td, html>body div#login, html>body div#helptext td, html>body div#helptext th, html>body div.tabs th, html>body div.tabs td, html>body input, html>body select, html>body .paginate, html>body .functnbar, html>body .functnbar2, html>body .functnbar3, html>body #breadcrumbs td, html>body .courtesylinks, html>body #rightcol div.help, html>body .colbar, html>body .tasknav, html>body.docs #toc {
- font-size: x-small
- }
-#bodycol h2 {
- font-family: Tahoma, Verdana, Helvetica, Arial, sans-serif;
- font-size: 1.5em;
- font-weight: normal;
- }
-h2 small {
- font-weight: bold;
- letter-spacing: .06em;
- }
-dt {
- font-weight: bold
- }
-#login .username {
- font-weight: bold;
- }
-h4 {
- font-size: 1em;
- }
-#breadcrumbs td {
- font-weight: bold;
- } 
-.selection {
- font-weight: bold
- }
-
-
-/* box properties (exclusive of borders), positioning, alignments, list types, text-indent */
-
-#bodycol h2 {
- margin-top: .3em;
- margin-bottom: .5em;
- }
-p, ul, ol, dl {
- margin-top: .67em;
- margin-bottom: .67em;
- }
-h3, h4 {
- margin-bottom: 0;
- }
-form {
- margin-top: 0;
- margin-bottom: 0;
- }
-#bodycol {
- padding-left: 12px;
- padding-right: 12px;
- width: 100%;
- voice-family: "\"}\"";
- voice-family: inherit;
- width: auto;
- }
-html>body #bodycol {
- width: auto;
- }
-.docs {
- line-height: 1.4;
- }
-.app h3, .app h4 {
- padding: 5px;
- margin-right: 2px;
- margin-left: 2px;
- }
-.h3 p, .h4 p, .h3 dt, .h4 dt {
- margin-right: 7px;
- margin-left: 7px;
- }
-.tasknav {
- margin-bottom: 1.33em
- }
-div.colbar {
- padding: 4px;
- margin: 2px 2px 0;
- }
-.tabs { 
- margin-top: .67em;
- margin-right: 2px;
- margin-left: 2px;
- }
-#leftcol {
- padding-bottom: .5em;
- }
-#breadcrumbs td {
- vertical-align: middle;
- padding: 2px 8px;
- } 
-#rightcol div.www, #rightcol div.help {
- padding: 0 .5em
- }
-#navcolumn {
- margin: -8px -8px 0 -8px;
- padding: 4px;
- }
-#navcolumn div {
- padding-left: 5px
- }
-div#navcolumn div div {
- margin-top: .3em;
- margin-bottom: .3em;
- }
-div#navcolumn div.focus { 
- margin-top: -.1em;
- padding: .2em 4px; 
- } 
-body.docs #toc { 
- position: absolute;
- top: 15px;
- left: 0px;
- width: 120px;
- padding: 0 20px 0 0
- }
-body.docs #toc ul, #toc ol {
- margin-left: 0;
- padding-left: 0;
- }
-body.docs #toc li {
- margin-top: 7px;
- padding-left: 10px;
- list-style-type: none;
- }
-body.docs div.docs { 
- margin: 61px 0 0 150px;
- padding: 1em 2em 1em 1em !important;
- }
-.docs p+p {
- text-indent: 5%;
- margin-top: -.67em
- }
-.docs h3, .docs h4 {
- margin-bottom: .1em;
- padding-top: .3em;
- }
-#alerterrormessage { 
- padding-left: 100px;
- }
-.functnbar, .functnbar2, .functnbar3 {
- padding: 5px;
- margin: .67em 2px;
- }
-#topmodule td {
- vertical-align: middle;
- padding: 2px 8px
- } 
-body {
- padding: 1em;
- }
-body.composite, body.docs {
- margin: 0;
- padding: 0;
- }
-th, td {
- text-align: left;
- vertical-align: top 
- }
-.right {
- text-align: right !important;
- }
-.center {
- text-align: center !important;
- }
-.tabs td, .tabs th {
- padding-left: 7px;
- padding-right: 7px;
- }
-.axial th {
- text-align: right;
- }
-.app .axial td th {
- text-align: left;
- }
-body td .stb {
- margin-top: 1em;
- text-indent: 0;
- }
-body td .mtb {
- margin-top: 2em;
- text-indent: 0;
- }
-dd {
- margin-bottom: .67em;
- }
-#footer {
- margin: 4px
- }
-#helptext {
- margin-top: 1em
- }
-#helptext td div {
- margin: .5em
- }
-.courtesylinks {
- margin-top: 1em;
- padding-top: 1em
- }
-#navcolumn div {
- margin-bottom: .5em;
- }
-#navcolumn div div {
- margin-top: .3em
- }
-#navcolumn div div {
- padding-left: 1em;
- }
-#banner, #banner td { 
- vertical-align: middle;
- }
-body.docs, body.nonav {
- margin: 1em
- }
-
-.note, .warning, .fixme {
-	border-top: 3px solid #900;
-	border-bottom: 3px solid #900;
-	background-image: url(images/icon_error_lrg.gif);
-	background-repeat: no-repeat;
-	background-position: 0 1.33em;
-	margin: 1.33em 0;
-	padding: .33em 0 .67em 36px;
-	min-height: 32px;
-}
-
-
-.fixme {
-	background-image: url(images/icon_warning_lrg.gif);
-	border-color: #c60;
-}
-
-.note {
-	background-image: url(images/icon_info_lrg.gif);
-	border-color: #069;
-}
-
-.label{
-	font-weight: bold;
-}
-
-
-.code { background-color: #F7F7F7;
-        border-color: #CFDCED;
-        border-style: solid; 
-        border-width: 1px; 
-        font-size : 120%;
-        padding: 1em 1.33em 1em 1.33em;
-}
diff --git a/3.0.4/doc/forrest/skins/jakarta-site/images/add.jpg b/3.0.4/doc/forrest/skins/jakarta-site/images/add.jpg
deleted file mode 100644
index 06831ee..0000000
--- a/3.0.4/doc/forrest/skins/jakarta-site/images/add.jpg
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/forrest/skins/jakarta-site/images/bottom-left.png b/3.0.4/doc/forrest/skins/jakarta-site/images/bottom-left.png
deleted file mode 100644
index cbe127a..0000000
--- a/3.0.4/doc/forrest/skins/jakarta-site/images/bottom-left.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/forrest/skins/jakarta-site/images/bottom-right.png b/3.0.4/doc/forrest/skins/jakarta-site/images/bottom-right.png
deleted file mode 100644
index f4325cb..0000000
--- a/3.0.4/doc/forrest/skins/jakarta-site/images/bottom-right.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/forrest/skins/jakarta-site/images/built-with-forrest-button.png b/3.0.4/doc/forrest/skins/jakarta-site/images/built-with-forrest-button.png
deleted file mode 100644
index 4a787ab..0000000
--- a/3.0.4/doc/forrest/skins/jakarta-site/images/built-with-forrest-button.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/forrest/skins/jakarta-site/images/chapter.gif b/3.0.4/doc/forrest/skins/jakarta-site/images/chapter.gif
deleted file mode 100644
index d3d8245..0000000
--- a/3.0.4/doc/forrest/skins/jakarta-site/images/chapter.gif
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/forrest/skins/jakarta-site/images/chapter_open.gif b/3.0.4/doc/forrest/skins/jakarta-site/images/chapter_open.gif
deleted file mode 100644
index eecce18..0000000
--- a/3.0.4/doc/forrest/skins/jakarta-site/images/chapter_open.gif
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/forrest/skins/jakarta-site/images/current.gif b/3.0.4/doc/forrest/skins/jakarta-site/images/current.gif
deleted file mode 100644
index fd82c08..0000000
--- a/3.0.4/doc/forrest/skins/jakarta-site/images/current.gif
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/forrest/skins/jakarta-site/images/favicon.ico b/3.0.4/doc/forrest/skins/jakarta-site/images/favicon.ico
deleted file mode 100644
index 161bcf7..0000000
--- a/3.0.4/doc/forrest/skins/jakarta-site/images/favicon.ico
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/forrest/skins/jakarta-site/images/fix.jpg b/3.0.4/doc/forrest/skins/jakarta-site/images/fix.jpg
deleted file mode 100644
index 1d6820b..0000000
--- a/3.0.4/doc/forrest/skins/jakarta-site/images/fix.jpg
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/forrest/skins/jakarta-site/images/icon_doc_lrg.gif b/3.0.4/doc/forrest/skins/jakarta-site/images/icon_doc_lrg.gif
deleted file mode 100644
index b458267..0000000
--- a/3.0.4/doc/forrest/skins/jakarta-site/images/icon_doc_lrg.gif
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/forrest/skins/jakarta-site/images/icon_doc_sml.gif b/3.0.4/doc/forrest/skins/jakarta-site/images/icon_doc_sml.gif
deleted file mode 100644
index 239bfaa..0000000
--- a/3.0.4/doc/forrest/skins/jakarta-site/images/icon_doc_sml.gif
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/forrest/skins/jakarta-site/images/icon_error_lrg.gif b/3.0.4/doc/forrest/skins/jakarta-site/images/icon_error_lrg.gif
deleted file mode 100644
index fccffd1..0000000
--- a/3.0.4/doc/forrest/skins/jakarta-site/images/icon_error_lrg.gif
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/forrest/skins/jakarta-site/images/icon_error_sml.gif b/3.0.4/doc/forrest/skins/jakarta-site/images/icon_error_sml.gif
deleted file mode 100644
index 61132ef..0000000
--- a/3.0.4/doc/forrest/skins/jakarta-site/images/icon_error_sml.gif
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/forrest/skins/jakarta-site/images/icon_folder_lrg.gif b/3.0.4/doc/forrest/skins/jakarta-site/images/icon_folder_lrg.gif
deleted file mode 100644
index 3683e75..0000000
--- a/3.0.4/doc/forrest/skins/jakarta-site/images/icon_folder_lrg.gif
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/forrest/skins/jakarta-site/images/icon_folder_sml.gif b/3.0.4/doc/forrest/skins/jakarta-site/images/icon_folder_sml.gif
deleted file mode 100644
index 8e26f89..0000000
--- a/3.0.4/doc/forrest/skins/jakarta-site/images/icon_folder_sml.gif
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/forrest/skins/jakarta-site/images/icon_help_sml.gif b/3.0.4/doc/forrest/skins/jakarta-site/images/icon_help_sml.gif
deleted file mode 100644
index 43bfd56..0000000
--- a/3.0.4/doc/forrest/skins/jakarta-site/images/icon_help_sml.gif
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/forrest/skins/jakarta-site/images/icon_info_lrg.gif b/3.0.4/doc/forrest/skins/jakarta-site/images/icon_info_lrg.gif
deleted file mode 100644
index b390fd4..0000000
--- a/3.0.4/doc/forrest/skins/jakarta-site/images/icon_info_lrg.gif
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/forrest/skins/jakarta-site/images/icon_info_sml.gif b/3.0.4/doc/forrest/skins/jakarta-site/images/icon_info_sml.gif
deleted file mode 100644
index c6cb9ad..0000000
--- a/3.0.4/doc/forrest/skins/jakarta-site/images/icon_info_sml.gif
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/forrest/skins/jakarta-site/images/icon_success_lrg.gif b/3.0.4/doc/forrest/skins/jakarta-site/images/icon_success_lrg.gif
deleted file mode 100644
index 9af317d..0000000
--- a/3.0.4/doc/forrest/skins/jakarta-site/images/icon_success_lrg.gif
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/forrest/skins/jakarta-site/images/icon_success_sml.gif b/3.0.4/doc/forrest/skins/jakarta-site/images/icon_success_sml.gif
deleted file mode 100644
index 52e85a4..0000000
--- a/3.0.4/doc/forrest/skins/jakarta-site/images/icon_success_sml.gif
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/forrest/skins/jakarta-site/images/icon_warning_lrg.gif b/3.0.4/doc/forrest/skins/jakarta-site/images/icon_warning_lrg.gif
deleted file mode 100644
index 83359d8..0000000
--- a/3.0.4/doc/forrest/skins/jakarta-site/images/icon_warning_lrg.gif
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/forrest/skins/jakarta-site/images/icon_warning_sml.gif b/3.0.4/doc/forrest/skins/jakarta-site/images/icon_warning_sml.gif
deleted file mode 100644
index 873bbb5..0000000
--- a/3.0.4/doc/forrest/skins/jakarta-site/images/icon_warning_sml.gif
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/forrest/skins/jakarta-site/images/label.gif b/3.0.4/doc/forrest/skins/jakarta-site/images/label.gif
deleted file mode 100644
index c83a389..0000000
--- a/3.0.4/doc/forrest/skins/jakarta-site/images/label.gif
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/forrest/skins/jakarta-site/images/note.gif b/3.0.4/doc/forrest/skins/jakarta-site/images/note.gif
deleted file mode 100644
index 83ce9ec..0000000
--- a/3.0.4/doc/forrest/skins/jakarta-site/images/note.gif
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/forrest/skins/jakarta-site/images/nw_maj_rond.gif b/3.0.4/doc/forrest/skins/jakarta-site/images/nw_maj_rond.gif
deleted file mode 100644
index add42a4..0000000
--- a/3.0.4/doc/forrest/skins/jakarta-site/images/nw_maj_rond.gif
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/forrest/skins/jakarta-site/images/nw_min.gif b/3.0.4/doc/forrest/skins/jakarta-site/images/nw_min.gif
deleted file mode 100644
index bf4bc75..0000000
--- a/3.0.4/doc/forrest/skins/jakarta-site/images/nw_min.gif
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/forrest/skins/jakarta-site/images/page.gif b/3.0.4/doc/forrest/skins/jakarta-site/images/page.gif
deleted file mode 100644
index a144d32..0000000
--- a/3.0.4/doc/forrest/skins/jakarta-site/images/page.gif
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/forrest/skins/jakarta-site/images/pdfdoc.gif b/3.0.4/doc/forrest/skins/jakarta-site/images/pdfdoc.gif
deleted file mode 100644
index 00dee28..0000000
--- a/3.0.4/doc/forrest/skins/jakarta-site/images/pdfdoc.gif
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/forrest/skins/jakarta-site/images/printer.gif b/3.0.4/doc/forrest/skins/jakarta-site/images/printer.gif
deleted file mode 100644
index a8d0d41..0000000
--- a/3.0.4/doc/forrest/skins/jakarta-site/images/printer.gif
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/forrest/skins/jakarta-site/images/remove.jpg b/3.0.4/doc/forrest/skins/jakarta-site/images/remove.jpg
deleted file mode 100644
index 8c9b9ef..0000000
--- a/3.0.4/doc/forrest/skins/jakarta-site/images/remove.jpg
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/forrest/skins/jakarta-site/images/singlepage.gif b/3.0.4/doc/forrest/skins/jakarta-site/images/singlepage.gif
deleted file mode 100644
index cb0d293..0000000
--- a/3.0.4/doc/forrest/skins/jakarta-site/images/singlepage.gif
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/forrest/skins/jakarta-site/images/spacer.gif b/3.0.4/doc/forrest/skins/jakarta-site/images/spacer.gif
deleted file mode 100644
index 35d42e8..0000000
--- a/3.0.4/doc/forrest/skins/jakarta-site/images/spacer.gif
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/forrest/skins/jakarta-site/images/strich.gif b/3.0.4/doc/forrest/skins/jakarta-site/images/strich.gif
deleted file mode 100644
index a33e79d..0000000
--- a/3.0.4/doc/forrest/skins/jakarta-site/images/strich.gif
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/forrest/skins/jakarta-site/images/top-left.png b/3.0.4/doc/forrest/skins/jakarta-site/images/top-left.png
deleted file mode 100644
index 53c04e1..0000000
--- a/3.0.4/doc/forrest/skins/jakarta-site/images/top-left.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/forrest/skins/jakarta-site/images/top-right.png b/3.0.4/doc/forrest/skins/jakarta-site/images/top-right.png
deleted file mode 100644
index 7666e93..0000000
--- a/3.0.4/doc/forrest/skins/jakarta-site/images/top-right.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/forrest/skins/jakarta-site/images/update.jpg b/3.0.4/doc/forrest/skins/jakarta-site/images/update.jpg
deleted file mode 100644
index beb9207..0000000
--- a/3.0.4/doc/forrest/skins/jakarta-site/images/update.jpg
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/forrest/skins/jakarta-site/images/valid-html401.png b/3.0.4/doc/forrest/skins/jakarta-site/images/valid-html401.png
deleted file mode 100644
index 3855210..0000000
--- a/3.0.4/doc/forrest/skins/jakarta-site/images/valid-html401.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/forrest/skins/jakarta-site/images/vcss.png b/3.0.4/doc/forrest/skins/jakarta-site/images/vcss.png
deleted file mode 100644
index 9b2f596..0000000
--- a/3.0.4/doc/forrest/skins/jakarta-site/images/vcss.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/forrest/skins/jakarta-site/images/void.gif b/3.0.4/doc/forrest/skins/jakarta-site/images/void.gif
deleted file mode 100644
index 75b945d..0000000
--- a/3.0.4/doc/forrest/skins/jakarta-site/images/void.gif
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/forrest/skins/jakarta-site/images/xmldoc.gif b/3.0.4/doc/forrest/skins/jakarta-site/images/xmldoc.gif
deleted file mode 100644
index ca1224f..0000000
--- a/3.0.4/doc/forrest/skins/jakarta-site/images/xmldoc.gif
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/forrest/skins/jakarta-site/xslt/fo/document2fo.xsl b/3.0.4/doc/forrest/skins/jakarta-site/xslt/fo/document2fo.xsl
deleted file mode 100644
index 9b845e7..0000000
--- a/3.0.4/doc/forrest/skins/jakarta-site/xslt/fo/document2fo.xsl
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0"?>
-
-<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
-                xmlns:fo="http://www.w3.org/1999/XSL/Format"
-                version="1.0">
-
-<xsl:import href="../../../common/xslt/fo/document2fo.xsl"/>
-
-</xsl:stylesheet>
-
-
diff --git a/3.0.4/doc/forrest/skins/jakarta-site/xslt/html/book2menu.xsl b/3.0.4/doc/forrest/skins/jakarta-site/xslt/html/book2menu.xsl
deleted file mode 100644
index a0775a4..0000000
--- a/3.0.4/doc/forrest/skins/jakarta-site/xslt/html/book2menu.xsl
+++ /dev/null
@@ -1,47 +0,0 @@
-<?xml version="1.0"?>
-<!--
-book2menu.xsl generates the HTML menu.  See the imported book2menu.xsl for
-details.
--->
-
-<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
-
-  <xsl:import href="../../../common/xslt/html/book2menu.xsl"/>
-
-  <xsl:template match="book">
-    <div class="menuBar">
-      <xsl:apply-templates select="menu"/>
-    </div>
-  </xsl:template>
-
-  <xsl:template match="menu">
-    <div class="menu">
-      <span class="menuLabel"><xsl:value-of select="@label"/></span>
-      <xsl:call-template name="base-menu"/>
-    </div>
-  </xsl:template>
-
-  <xsl:template match="menu-item[@type='hidden']"/>
-
-  <xsl:template match="menu-item">
-    <div class="menuItem">
-      <xsl:apply-imports/>
-    </div>
-  </xsl:template>
-
-  <xsl:template name="selected">
-    <span class="menuSelected">
-      <xsl:value-of select="@label"/>
-    </span>
-  </xsl:template>
-
-  <xsl:template name="print-external">
-    <font color="#ffcc00">
-      <span class="externalSelected">
-        <xsl:apply-imports/>
-      </span>
-    </font>
-  </xsl:template>
-
-
-</xsl:stylesheet>
diff --git a/3.0.4/doc/forrest/skins/jakarta-site/xslt/html/document2html.xsl b/3.0.4/doc/forrest/skins/jakarta-site/xslt/html/document2html.xsl
deleted file mode 100644
index 110a679..0000000
--- a/3.0.4/doc/forrest/skins/jakarta-site/xslt/html/document2html.xsl
+++ /dev/null
@@ -1,271 +0,0 @@
-<?xml version="1.0"?>
-<!--
-This stylesheet contains the majority of templates for converting documentv11
-to HTML.  It renders XML as HTML in this form:
-
-  <div class="content">
-   ...
-  </div>
-
-..which site2xhtml.xsl then combines with HTML from the index (book2menu.xsl)
-and tabs (tab2menu.xsl) to generate the final HTML.
-
-$Id$
--->
-<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
-
-  <xsl:import href="../../../common/xslt/html/document2html.xsl"/>
-
-<!-- ====================================================================== -->
-<!-- document section -->
-<!-- ====================================================================== -->
-
- <xsl:template match="document">
-  <!-- checks if this is the included document to avoid neverending loop -->
-  <xsl:if test="not(book)">
-      <document>
-      <xsl:choose>
-		<xsl:when test="header/title">
-		      <title><xsl:value-of select="header/title"/></title>
-		</xsl:when>
-		<xsl:otherwise>
-			<title>NO TITLE</title>
-		</xsl:otherwise>
-	</xsl:choose>
-      <body>
-        <xsl:apply-templates/>
-        <xsl:if test="header/authors">
-            <div align="right" id="authors">       
-               <xsl:for-each select="header/authors/person">
-                     <xsl:choose>
-                        <xsl:when test="position()=1">by&#160;</xsl:when>
-
-                        <xsl:otherwise>,&#160;</xsl:otherwise>
-                     </xsl:choose>
-                     <!-- <a href="mailto:{@email}"> -->
-                      <xsl:value-of select="@name" />
-                     <!-- </a> -->
-                  </xsl:for-each>
-              </div>
-         </xsl:if>         
-        <xsl:call-template name="pdflink"/>
-      </body>
-      </document>
-   </xsl:if>
-
-  
-    
-   <xsl:if test="book">
-    <xsl:apply-templates/>
-   </xsl:if>
-  </xsl:template>
-
-   <xsl:template match="body">
-    <xsl:apply-templates/>
-  </xsl:template>
-  
- 
-<!-- ====================================================================== -->
-<!-- header section -->
-<!-- ====================================================================== -->
-
- <xsl:template match="header">
-  <!-- ignore on general document -->
- </xsl:template>
-
-<!-- ====================================================================== -->
-<!-- body section -->
-<!-- ====================================================================== -->
-
-   <xsl:template match="section">
-	
-	 <xsl:variable name = "level" select = "count(ancestor::section)+1" />
-	 
-	 <xsl:choose>
-	 	<xsl:when test="$level=1">
-	 	  <div class="h3"><h3><xsl:value-of select="title"/></h3></div>
-	      <xsl:apply-templates/>
-	 	</xsl:when>
-	 	<xsl:when test="$level=2">
-	 	  <div class="h4"><h4><xsl:value-of select="title"/></h4></div>
-	      <xsl:apply-templates/>
-	 	</xsl:when>
-	 	<xsl:when test="$level=3">
-	 	  <div class="h2"><h2><xsl:value-of select="title"/></h2></div>
-	      <xsl:apply-templates/>
-	 	</xsl:when>
-	 	<xsl:otherwise>
-	 	  <div class="h5"><h5><xsl:value-of select="title"/></h5></div>
-	      <xsl:apply-templates/>	 	 
-	 	</xsl:otherwise>
-	 </xsl:choose>
-
-	</xsl:template>  
-
- <xsl:template match="title">
- </xsl:template>
- 	       
-<!-- ====================================================================== -->
-<!-- footer section -->
-<!-- ====================================================================== -->
-
- <xsl:template match="footer">
-  <!-- ignore on general documents -->
- </xsl:template>
-
-<!-- ====================================================================== -->
-<!-- paragraph section -->
-<!-- ====================================================================== -->
-
-  <xsl:template match="p">
-    <xsl:apply-imports/>
-  </xsl:template>
-
-  <xsl:template match="source">
-    <xsl:apply-imports/>
-  </xsl:template>
-  
-  <xsl:template match="//source/font">
-    <font color="{@color}"><xsl:apply-templates/></font>
-  </xsl:template>
-
-  <xsl:template match="fixme | note | warning">
-    <xsl:apply-imports/>
-  </xsl:template>
-
-
-<!-- ====================================================================== -->
-<!-- list section -->
-<!-- ====================================================================== -->
-
- <xsl:template match="ul|ol|dl">
-    <xsl:apply-imports/>
- </xsl:template>
- 
- <xsl:template match="li">
-    <xsl:apply-imports/>
- </xsl:template>
-
- <xsl:template match="sl">
-    <xsl:apply-imports/>
- </xsl:template>
-
- <xsl:template match="dt">
-    <xsl:apply-imports/>
- </xsl:template>
-
-<!-- ====================================================================== -->
-<!-- table section -->
-<!-- ====================================================================== -->
-
-  <xsl:template match="table">
-    <xsl:apply-imports/>
-  </xsl:template>
-
-  <xsl:template match="tr">
-    <xsl:variable name="index"><xsl:number/></xsl:variable>
-    <tr>
-       <xsl:choose>
-          <xsl:when test="($index mod 2) = 0">
-             <xsl:attribute name="class">a</xsl:attribute>
-          </xsl:when>
-          <xsl:otherwise>
-             <xsl:attribute name="class">b</xsl:attribute>
-          </xsl:otherwise>
-       </xsl:choose>
-     
-       <xsl:apply-templates/>
-    </tr>
-  </xsl:template>
-
-  <xsl:template match="th">
-    <xsl:apply-imports/>
-  </xsl:template>
-
-  <xsl:template match="td">
-    <xsl:apply-imports/>
-  </xsl:template>
-
-  <xsl:template match="tn">
-    <xsl:apply-imports/>
-  </xsl:template>
-  
-  <xsl:template match="caption">
-    <!-- ignore since already used -->
-  </xsl:template>
-
-<!-- ====================================================================== -->
-<!-- markup section -->
-<!-- ====================================================================== -->
-
- <xsl:template match="strong">
-    <xsl:apply-imports/>
- </xsl:template>
-
- <xsl:template match="em">
-    <xsl:apply-imports/>
- </xsl:template>
-
- <xsl:template match="code">
-    <xsl:apply-imports/>
- </xsl:template>
- 
-<!-- ====================================================================== -->
-<!-- images section -->
-<!-- ====================================================================== -->
-
- <xsl:template match="figure">
-    <xsl:apply-imports/>
- </xsl:template>
- 
- <xsl:template match="img">
-    <xsl:apply-imports/>
- </xsl:template>
-
- <xsl:template match="icon">
-    <xsl:apply-imports/>
- </xsl:template>
-
-<!-- ====================================================================== -->
-<!-- links section -->
-<!-- ====================================================================== -->
-
- <xsl:template match="link">
-    <xsl:apply-imports/>
- </xsl:template>
-
- <xsl:template match="connect">
-    <xsl:apply-imports/>
- </xsl:template>
-
- <xsl:template match="jump">
-    <xsl:apply-imports/>
- </xsl:template>
-
- <xsl:template match="fork">
-    <xsl:apply-imports/>
- </xsl:template>
-
- <xsl:template match="anchor">
-    <xsl:apply-imports/>
- </xsl:template>  
-
-<!-- ====================================================================== -->
-<!-- specials section -->
-<!-- ====================================================================== -->
-
- <xsl:template match="br">
-    <xsl:apply-imports/>
- </xsl:template>
-
-  <!-- Generates the PDF link -->
-  <xsl:template name="pdflink">
-    <xsl:if test="not($config/disable-pdf-link) or $disable-pdf-link = 'false'"> 
-      <div align="right" id="pdf"><a href="{$filename-noext}.pdf">
-          <img class="skin" border="0" src="{$skin-img-dir}/pdfdoc.gif" alt="PDF"/><br/>
-          PDF</a>
-      </div>
-    </xsl:if>
-  </xsl:template>
-
-</xsl:stylesheet>
diff --git a/3.0.4/doc/forrest/skins/jakarta-site/xslt/html/site2xhtml.xsl b/3.0.4/doc/forrest/skins/jakarta-site/xslt/html/site2xhtml.xsl
deleted file mode 100644
index 195c8c0..0000000
--- a/3.0.4/doc/forrest/skins/jakarta-site/xslt/html/site2xhtml.xsl
+++ /dev/null
@@ -1,254 +0,0 @@
-<?xml version="1.0"?>
-<!--
-site2xhtml.xsl is the final stage in HTML page production.  It merges HTML from
-document2html.xsl, tab2menu.xsl and book2menu.xsl, and adds the site header,
-footer, searchbar, css etc.  As input, it takes XML of the form:
-
-<site>
-  <div class="menu">
-    ...
-  </div>
-  <div class="tab">
-    ...
-  </div>
-  <div class="content">
-    ...
-  </div>
-</site>
-
-$Id$
--->
-
-<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
-
-  <xsl:import href="../../../common/xslt/html/site2xhtml.xsl"/>
-
-  <xsl:template match="site">
-      <html>
-         <head>
-            <xsl:comment>*** This is a generated file.  Do not edit.  ***</xsl:comment>
-            <link type="text/css" href="{$root}skin/tigris.css" rel="stylesheet" />
-            <link type="text/css" href="{$root}skin/mysite.css" rel="stylesheet" />
-            <link type="text/css" href="{$root}skin/site.css"   rel="stylesheet" />
-            <link type="text/css" href="{$root}skin/print.css"  rel="stylesheet" media="print" />
-
-            <title>
-              <xsl:value-of select="/site/document/title" />
-            </title>
-         </head>
-    
-  <body class="composite" bgcolor="white">
-    
-    <xsl:comment>================= start Banner ==================</xsl:comment>
-      <div id="banner">
-        <table border="0" summary="banner" cellspacing="0" cellpadding="8" width="100%">
-         <tbody>        
-          <tr>
-            <xsl:comment>================= start Group Logo ==================</xsl:comment>
-            <xsl:if test="$config/group-name">
-            <td align="left">
-              <div class="groupLogo">
-                <xsl:call-template name="renderlogo">
-                  <xsl:with-param name="name" select="$config/group-name"/>
-                  <xsl:with-param name="url" select="$config/group-url"/>
-                  <xsl:with-param name="logo" select="$config/group-logo"/>
-                  <xsl:with-param name="root" select="$root"/>
-                </xsl:call-template>
-              </div>
-            </td>
-            </xsl:if>
-            <xsl:comment>================= end Group Logo ==================</xsl:comment>
-            <xsl:comment>================= start Project Logo ==================</xsl:comment>
-            <td align="right">
-              <div class="projectLogo">
-                <xsl:call-template name="renderlogo">
-                  <xsl:with-param name="name" select="$config/project-name"/>
-                  <xsl:with-param name="url" select="$config/project-url"/>
-                  <xsl:with-param name="logo" select="$config/project-logo"/>
-                  <xsl:with-param name="root" select="$root"/>
-                </xsl:call-template>
-              </div>
-            </td>
-            <xsl:comment>================= end Project Logo ==================</xsl:comment>
-            <xsl:comment>================= start Search ==================</xsl:comment>
-            <td class="search" align="right" rowspan="2" valign="top">
-              <xsl:if test="not($config/disable-search) or
-                $config/disable-search='false' and $config/searchsite-domain and
-                $config/searchsite-name">
-                <form method="get" action="http://www.google.com/search" target="_blank">
-                  <table cellpadding="0" cellspacing="0" border="0" summary="search">
-                    <tr>
-                      <td colspan="3" bgcolor="#a5b6c6"><img class="spacer" src="{$spacer}" alt="" width="1" height="10" /></td>
-                    </tr>
-                    <tr>
-                      <td colspan="3"><img class="spacer" src="{$spacer}" alt="" width="1" height="8" /></td>
-                    </tr>
-                    <tr>
-                      <td><img class="spacer" src="{$spacer}" alt="" width="1" height="1" /></td>
-                      <td nowrap="nowrap">
-                        <input type="hidden" name="sitesearch" value="{$config/searchsite-domain}"/>
-                        <input type="text" id="query" name="q" size="10"/>
-                        <img class="spacer" src="{$spacer}" alt="" width="5" height="1" />
-                        <input type="submit" value="Search" name="Search"/>
-                        <br />
-                          Search <xsl:value-of select="$config/searchsite-name"/>
-                          <!-- setting search options off for the moment -->
-                          <!--
-                          <input type="radio" name="web" value="web"/>web site&#160;&#160;<input type="radio" name="mail" value="mail"/>mail lists
-                          -->
-                      </td>
-                      <td><img class="spacer" src="{$spacer}" alt="" width="1" height="1" /></td>
-                    </tr>
-
-                    <tr>
-                      <td colspan="3"><img class="spacer" src="{$spacer}" alt="" width="1" height="7" /></td>
-                    </tr>
-
-                    <tr>
-                      <td class="bottom-left-thick"></td>
-                      <td bgcolor="#a5b6c6"><img class="spacer" src="{$spacer}" alt="" width="1" height="1" /></td>
-                      <td class="bottom-right-thick"></td>
-                    </tr>
-                  </table>
-                </form>
-              </xsl:if>
-            </td>
-            <xsl:comment>================= end Search ==================</xsl:comment>
-          </tr>
-         </tbody>          
-        </table>
-      </div>
-    <xsl:comment>================= end Banner ==================</xsl:comment>
-
-    <xsl:comment>================= start Main ==================</xsl:comment>
-    <table id="breadcrumbs" summary="nav" border="0" cellspacing="0" cellpadding="0" width="100%">
-     <tbody>    
-      <xsl:comment>================= start Status ==================</xsl:comment>
-      <tr class="status">
-        <td>
-          <xsl:comment>================= start BreadCrumb ==================</xsl:comment>
-            <a href="{$config/trail/link1/@href}"><xsl:value-of select="$config/trail/link1/@name" /></a> 
-            <xsl:if test = "($config/trail/link2/@name)and(normalize-space($config/trail/link2/@name)!='')"><xsl:text> | </xsl:text></xsl:if>                                 
-            <a href="{$config/trail/link2/@href}"><xsl:value-of select="$config/trail/link2/@name" /></a>
-            <xsl:if test = "($config/trail/link3/@name)and(normalize-space($config/trail/link3/@name)!='')"><xsl:text> | </xsl:text></xsl:if>                                 
-            <a href="{$config/trail/link3/@href}"><xsl:value-of select="$config/trail/link3/@name" /></a>
-          <!-- useful when we have <link> elements instead of link(n:=1..3)  
-          <xsl:for-each select="$config/trail/link">
-            <xsl:if test="position()!=1">|</xsl:if>
-            <a href="{@href}"><xsl:value-of select="@name"/></a>
-          </xsl:for-each>
-          -->
-          <xsl:comment>================= end BreadCrumb ==================</xsl:comment>
-        </td>
-        <td id="tabs">
-          <xsl:comment>================= start Tabs ==================</xsl:comment>
-          <xsl:apply-templates select="div[@class='tab']"/>
-          <xsl:comment>================= end Tabs ==================</xsl:comment>
-        </td>
-      </tr>
-     </tbody>      
-    </table>      
-      <xsl:comment>================= end Status ==================</xsl:comment>
-
-
-    <table border="0" summary="" cellspacing="0" cellpadding="8" width="100%" id="main">
-     <tbody>
-      <tr valign="top">
-        <xsl:comment>================= start Menu ==================</xsl:comment>
-        <td id="leftcol">
-          <div id="navcolumn">
-            <xsl:apply-templates select="div[@class='menuBar']"/>
-          </div>
-        </td>
-        <xsl:comment>================= end Menu ==================</xsl:comment>
-
-        <xsl:comment>================= start Content ==================</xsl:comment>
-        <td>
-          <div id="bodycol">
-            <div class="app">
-              <div align="center">
-                <h1><xsl:value-of select="/site/document/title" /></h1>
-                <xsl:if test="/site/document/subtitle">
-                  <h2><xsl:value-of select="/site/document/subtitle" /></h2>
-                </xsl:if>
-               </div>
-                <div class="h3">
-                   <xsl:copy-of select="/site/document/body/node()|@*" />
-                </div>
-              </div>
-                    <xsl:apply-templates select="div[@class='content']"/>
-            </div>
-        </td>
-        <xsl:comment>================= end Content ==================</xsl:comment>
-      </tr>
-     </tbody>      
-    </table>
-    <xsl:comment>================= end Main ==================</xsl:comment>
-
-    <xsl:comment>================= start Footer ==================</xsl:comment>
-    <div id="footer">
-    <table border="0" width="100%" cellpadding="4" cellspacing="0" summary="footer">
-     <tbody>
-      <tr>
-        <xsl:comment>================= start Copyright ==================</xsl:comment>
-        <td colspan="2">
-          <div align="center">
-            <div class="copyright">
-              Copyright &#169; <xsl:value-of select="$config/year"/>&#160;<xsl:value-of
-              select="$config/vendor"/>. All rights reserved.
-            </div>
-          </div>
-        </td>
-        <xsl:comment>================= end Copyright ==================</xsl:comment>
-      </tr>
-      <tr>
-      <td align="left">
-        <xsl:comment>================= start Host ==================</xsl:comment>
-        <xsl:if test="$config/host-logo and not($config/host-logo = '')">
-          <div align="left">
-            <div class="host">
-              <xsl:call-template name="renderlogo">
-                <xsl:with-param name="name" select="$config/host-name"/>
-                <xsl:with-param name="url" select="$config/host-url"/>
-                <xsl:with-param name="logo" select="$config/host-logo"/>
-                <xsl:with-param name="root" select="$root"/>
-              </xsl:call-template>
-            </div>
-          </div>
-        </xsl:if>
-        <xsl:comment>================= end Host ==================</xsl:comment>
-      </td>
-      <td align="right">
-        <xsl:comment>================= start Credits ==================</xsl:comment>
-        <div align="right">
-          <div class="credit">
-            <xsl:if test="$filename = 'index.html'">
-              <xsl:call-template name="compliancy-logos"/>
-              <xsl:if test="$config/credits">
-                <xsl:for-each select="$config/credits/credit[not(@role='pdf')]">
-                  <xsl:call-template name="renderlogo">
-                    <xsl:with-param name="name" select="name"/>
-                    <xsl:with-param name="url" select="url"/>
-                    <xsl:with-param name="logo" select="image"/>
-                    <xsl:with-param name="root" select="$root"/>
-                    <xsl:with-param name="width" select="width"/>
-                    <xsl:with-param name="height" select="height"/>
-                  </xsl:call-template>
-                </xsl:for-each>
-              </xsl:if>
-            </xsl:if>
-          </div>
-        </div>
-        <xsl:comment>================= end Credits ==================</xsl:comment>
-        </td>
-      </tr>
-     </tbody>
-    </table>
-    </div>
-    <xsl:comment>================= end Footer ==================</xsl:comment>
-
-      </body>
-    </html>
-    </xsl:template>
-
-</xsl:stylesheet>
diff --git a/3.0.4/doc/forrest/skins/jakarta-site/xslt/html/tab2menu.xsl b/3.0.4/doc/forrest/skins/jakarta-site/xslt/html/tab2menu.xsl
deleted file mode 100644
index 3d03a74..0000000
--- a/3.0.4/doc/forrest/skins/jakarta-site/xslt/html/tab2menu.xsl
+++ /dev/null
@@ -1,105 +0,0 @@
-<?xml version="1.0"?>
-<!--
-This stylesheet generates 'tabs' at the top left of the screen.
-See the imported tab2menu.xsl for details.
--->
-
-<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
-
-  <xsl:import href="../../../common/xslt/html/tab2menu.xsl"/>
-  <xsl:param name="config-file" select="'../../../../skinconf.xml'"/>
-  <xsl:variable name="config" select="document($config-file)/skinconfig"/>
-  
-  <xsl:param name="notoc"/>
-  <xsl:param name="path"/>
-  <!-- <xsl:include href="split.xsl"/> -->
-  <xsl:include href="../../../common/xslt/html/dotdots.xsl"/>
-  <xsl:include href="../../../common/xslt/html/pathutils.xsl"/>
-  
-  <!-- If true, a PDF link for this page will not be generated -->
-  <xsl:variable name="disable-pdf-link" select="$config/disable-pdf-link"/>
-  <!-- If true, a "print" link for this page will not be generated -->
-  <xsl:variable name="disable-print-link" select="$config/disable-print-link"/>
-  <!-- If true, an XML link for this page will not be generated -->
-  <xsl:variable name="disable-xml-link" select="$config/disable-xml-link"/>  
-  <!-- Get the section depth to use when generating the minitoc (default is 2) -->
-  <xsl:variable name="config-max-depth" select="$config/toc/@level"/>
-  <!-- Whether to obfuscate email links -->
-  <xsl:variable name="obfuscate-mail-links" select="$config/obfuscate-mail-links"/>
-
-  <!-- Path to site root, eg '../../' -->
-  <xsl:variable name="root">
-    <xsl:call-template name="dotdots">
-      <xsl:with-param name="path" select="$path"/>
-    </xsl:call-template>
-  </xsl:variable>
-
-  <xsl:variable name="filename-noext">
-    <xsl:call-template name="filename-noext">
-      <xsl:with-param name="path" select="$path"/>
-    </xsl:call-template>
-  </xsl:variable>
-
-  <xsl:template name="pre-separator">
-  </xsl:template>
-
-  <xsl:template name="post-separator">
-
-    <xsl:if test="not($config/disable-print-link) or $disable-print-link = 'false'">
-    <xsl:text> | </xsl:text>
-<script type="text/javascript" language="Javascript">
-function printit() {  
-if (window.print) {
-    window.print() ;  
-} else {
-    var WebBrowser = '&lt;OBJECT ID="WebBrowser1" WIDTH="0" HEIGHT="0" CLASSID="CLSID:8856F961-340A-11D0-A96B-00C04FD705A2">&lt;/OBJECT>';
-document.body.insertAdjacentHTML('beforeEnd', WebBrowser);
-    WebBrowser1.ExecWB(6, 2);//Use a 1 vs. a 2 for a prompting dialog box    WebBrowser1.outerHTML = "";  
-}
-}
-</script>
-
-<script type="text/javascript" language="Javascript">
-var NS = (navigator.appName == "Netscape");
-var VERSION = parseInt(navigator.appVersion);
-if (VERSION > 3) {
-    document.write('  <a href="javascript:printit()" title="PRINT this page OUT">PRINT</a>');
-}
-</script>
-   </xsl:if>
-
-   <xsl:if test="not($config/disable-xml-link) or $disable-xml-link = 'false'"> 
-    <xsl:text> | </xsl:text><a href="{$filename-noext}.xml" title="XML file of this page">XML</a>
-   </xsl:if>
-
-
-   <xsl:if test="not($config/disable-pdf-link) or $disable-pdf-link = 'false'"> 
-    <xsl:text> | </xsl:text><a href="{$filename-noext}.pdf" title="PDF file of this page">PDF</a>
-   </xsl:if>
-  </xsl:template>
-
-  <xsl:template name="separator">
-    <xsl:text> | </xsl:text>
-  </xsl:template>
-
-  <xsl:template name="selected" mode="print">
-    <span class="selectedTab">
-      <xsl:call-template name="base-selected"/>
-    </span>
-  </xsl:template>
-
-  <xsl:template name="not-selected" mode="print">
-    <span class="unselectedTab">
-    <!-- Called from 'not-selected' -->
-     <a>
-      <xsl:attribute name="href">
-        <xsl:call-template name="calculate-tab-href">
-          <xsl:with-param name="tab" select="."/>
-          <xsl:with-param name="path" select="$path"/>
-        </xsl:call-template>
-      </xsl:attribute>
-      <xsl:value-of select="@label"/>
-     </a>
-    </span>
-  </xsl:template>
-</xsl:stylesheet>
diff --git a/3.0.4/doc/src/ComponentReference/.cvsignore b/3.0.4/doc/src/ComponentReference/.cvsignore
deleted file mode 100644
index 52c775f..0000000
--- a/3.0.4/doc/src/ComponentReference/.cvsignore
+++ /dev/null
@@ -1,3 +0,0 @@
-common-images
-todo.txt
-
diff --git a/3.0.4/doc/src/ComponentReference/ActionLink.html b/3.0.4/doc/src/ComponentReference/ActionLink.html
deleted file mode 100644
index b5198aa..0000000
--- a/3.0.4/doc/src/ComponentReference/ActionLink.html
+++ /dev/null
@@ -1,274 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<!-- $Id$ --> 
-<html>
-<head>
-<title>ActionLink</title>
-<link rel="stylesheet" type="text/css" href="Tapestry.css" title="style">
-</head>
-
-<body>
-<table border="0" cellpadding="0" cellspacing="0" width="100%">
- <tr>
- <td align="left"><A href="index.html"><IMG alt="Component Index" src="common-images/home.png" ></a></td>  
- <td align="middle">&nbsp;</td>  
- <td align="right"><A href="Any.html"><IMG alt=Any src="common-images/next.png"></a></td>  
- <tr>
- <tr>
-  <td colspan="3"><hr></td>  
- </tr>
- <tr>
-  <td colspan="3">
-   <table border="0" cellpadding="4" cellspacing="4" width="100%">
-
-<tr valign="top">
- <td>
-  <table>
-	 <tr>
-	  <td><font size="+2"><b>ActionLink</b></font></td>
-	 </tr>
-	 <tr>
-	  <td>
-		 <A href="../api/org/apache/tapestry/link/ActionLink.html">org.apache.tapestry.link.ActionLink</a>
-		</td>
-	 </tr>
-  </table>
- </td>
- <td>
-  <table align="right" valign="middle" bgcolor="#c0c0c0" cellpadding="8">
-	 <tr>
-	  <td><A href="ActionLink.html"><font color="blue">Action Link</font></a></td>
-	 </tr>
-  </table>
- </td>
-</tr>
-
-<tr valign="center">
- <td colspan="2">&nbsp;</td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Description</b>
-	<br>
-  Creates an &lt;a&gt; hyperlink in the HTML response. If the link is 
-  triggered, then the ActionLink retrieves its listener, and invokes 
-  <tt>actionTriggered()</tt> on it.
-  <p>
-  See the Developers Guide 
-  <A href="../DevelopersGuide/cycle.listeners.html">ActionLink and DirectLink listeners</a> for 
-  a more complete description.</p>
-            
- </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>See Also</b>
-	<br>
-	<A href="DirectLink.html">DirectLink</a>, 
-	<A href="ExternalLink.html">ExternalLink</a>, 
-  <A href="GenericLink.html">GenericLink</a>,
-  <a href="PageLink.html">PageLink</a>,
-  <a href="ServiceLink.html">ServiceLink</a>
- </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Parameters</b>
-	<br>
-  <table border="1" cellpadding="4" cellspacing="4" class="parameters">
-  <tr> 
-    <th>Name</th>
-    <th>Type</th>
-	  <th>Direction</th>
-    <th>Required</th> 
-    <th>Default</th>
-    <th>Description</th>
-  </tr>
-  <tr>
-    <td>listener</td>
-    <td>
-     <A href="../api/org/apache/tapestry/IActionListener.html"><tt>IActionListener</tt></a>
-    </td>
-    <td>in</td>
-   	<td>yes</td>
-		<td>&nbsp;</td>
-		<td>Specifies an object that is notified when the link is clicked,
-		which is typically a listener method of its container
-		(for example, <tt>listeners.<i>method</i></tt>).</td>
-	</tr>
-  <tr>
-    <td>disabled</td>
-    <td>boolean</td>
-    <td>in</td>
-   	<td>no</td>
-		<td>false</td>
-		<td>Controls whether the link is produced. If disabled, the portion of the 
-    template the link surrounds is still rendered, but not the link itself.
-    </td>
-	</tr>
-  <tr>
-    <td>stateful</td>
-    <td>boolean</td>
-    <td>in</td>
-   	<td>no</td>
-		<td>true</td>
-		<td>
-    If true (the default), then the component requires an active (i.e., non-new) 
-    <tt>HttpSession</tt> when triggered. Failing that, it throws a 
-    <A href="../api/org/apache/tapestry/StaleLinkException.html"><tt>StaleLinkException</tt></a>. 
-    If false, then no check is necessary. The 
-    latter works well with links that encode all necessary state inside the URL 
-    itself.
-    </td>
-	</tr>
-	
-	  <tr>
-    <td>anchor</td>
-    <td>String</td>
-    <td>in</td>
-   	<td>no</td>
-		<td>&nbsp;</td>
-		<td>
-    The name of an anchor or element to link to. The final URL will have '#' 
-    and the anchor appended to it.
-    </td>
-	</tr>
-		
-	<tr>
-		<td>renderer</td>
-		<td><a href="../api/org/apache/tapestry/link/ILinkRenderer.html">ILinkRenderer</a></td>
-		<td>in</td>
-		<td>no</td>
-		<td>&nbsp;</td>
-		<td>
-		The object which will actually render the link.
-			</td>
-	</tr>		
-	</table>
-  <P>
-  Body: <STRONG>rendered</STRONG><BR>
-  Informal parameters: <STRONG>allowed</STRONG><br>
-  Reserved parameters: "href" 
-  </P>    
- </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Examples</b>
-	<p>
-	<p>
-  In this example the ActionLink component enables users to select a Customer 
-  from the Customer List table.
-	<p>
-
-<table class="examples" cellspacing="6">
-  <tr align="left">
-   <th>ID</th>
-   <th>&nbsp;</th>
-   <th>Name</th>
-   <th>&nbsp;</th>
-   <th>Level</th>
-  </tr>
-  <tr>
-   <td colspan="5"><hr></td>
-  </tr>
-  <tr>
-   <td>10276</td>
-   <td>&nbsp;</td>
-   <td><a href="ActionLink.html" style="{color:blue;}">Ms Sophie L. Jamies</a></td>
-   <td>&nbsp;</td>
-   <td>Platinum</td>
-  </tr>
-  <tr>
-   <td>10539</td>
-   <td>&nbsp;</td>
-   <td><a href="ActionLink.html" style="{color:blue;}">Mr Albert H. Davies</a></td>
-   <td>&nbsp;</td>
-   <td>Gold</td>
-  </tr>
-  <tr>
-   <td>10552</td>
-   <td>&nbsp;</td>
-   <td><a href="ActionLink.html" style="{color:blue;}">Mrs Jan S. Flawson</a></td>
-   <td>&nbsp;</td>
-   <td>Gold</td>
-  </tr>
-  <tr>
-   <td>10863</td>
-   <td>&nbsp;</td>
-   <td><a href="ActionLink.html" style="{color:blue;}">Mr Robert J. Hassel</a></td>
-   <td>&nbsp;</td>
-   <td>Silver</td>
-  </tr>
-</table>
-
-            <pre>
-&lt;table cellspacing="6"&gt;
-  &lt;tr&gt;
-   &lt;td&gt;ID&lt;/td&gt;
-   &lt;td&gt;&amp;nbsp;&lt;/td&gt;
-   &lt;td&gt;Name&lt;/td&gt;
-   &lt;td&gt;&amp;nbsp;&lt;/td&gt;
-   &lt;td&gt;Level&lt;/td&gt;
-  &lt;/tr&gt;
-  &lt;tr&gt;
-   &lt;td colspan="5"&gt;&lt;hr&gt;&lt;/td&gt;
-  &lt;/tr&gt;
-  &lt;tr jwcid="@<a href="Foreach.html">Foreach</a>" source=&quot;ognl:customerList&quot; value=&quot;ognl:customer&quot; element=&quot;tr&quot;&gt;
-   &lt;td&gt;&lt;span jwcid="@<a href="Insert.html">Insert</a>" value="ognl:customer.id"/&gt;&lt;/td&gt;
-   &lt;td&gt;&amp;nbsp;&lt;/td&gt;
-   &lt;td&gt;&lt;span jwcid="<span class="jwcid">@<a href="ActionLink.html">ActionLink</a></span>" listener=&quot;ognl:listeners.customerSelectAction&quot;&gt; &lt;span jwcid="@<a href="Insert.html">Insert</a>" value="ognl:customer.fullName"/&gt; &lt;/span&gt;&lt;/td&gt;
-   &lt;td&gt;&amp;nbsp;&lt;/td&gt;
-   &lt;td&gt;&lt;span jwcid="@<a href="Insert.html">Insert</a>" value="ognl:customer.memberLevel"/&gt;&lt;/td&gt;
-  &lt;/tr&gt;
-&lt;/table&gt;
-
-&lt;property-specification name=&quot;customerList&quot; type=&quot;java.util.List&quot; persistent=&quot;yes&quot;/&gt;<br>&lt;property-specification name=&quot;customer&quot; type=&quot;Customer&quot;/&gt;<br>
-public abstract class SalesPage extends BasePage {
-    public abstract List getCustomerList();
-    public abstract List setCustomerList(List value);
-
-    public abstract Customer getCustomer();
-
-    public void customerSelectAction(IRequestCycle cycle) {
-       Customer customer = getCustomer();
-       // Do something with customer
-    }
-}
-
-public class Customer implements Serializable {
-    private Integer id;
-    private String fullName;
-    private String memberLevel;
-
-    public Customer(Integer id, String fullName, String memberLevel) { 
-        this.id = id;
-        this.fullName = fullName;
-        this.memberLevel = memberLevel; 
-    }
-
-    public Integer getId() { return id; }
-		
-    public String getFullName() { return fullName; }
-
-    public String getMemberLevel() { return memberLevel; }
-}
-</pre>
-          </td>
-        </tr></table>
-</td></tr>
-<tr>
- <td colspan="3"><hr></td>  
-</tr>
-<tr>
- <td align="left"><A href="index.html"><IMG alt="Component Index" src="common-images/home.png" ></a></td>  
- <td align="middle">&nbsp;</td>  
- <td align="right"><A href="Any.html"><IMG alt=Any src="common-images/next.png"></a></td>  
-</tr>
-</table>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/3.0.4/doc/src/ComponentReference/Any.html b/3.0.4/doc/src/ComponentReference/Any.html
deleted file mode 100644
index f3fe443..0000000
--- a/3.0.4/doc/src/ComponentReference/Any.html
+++ /dev/null
@@ -1,189 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<!-- $Id$ --> 
-<html>
-<head>
-<title>Any</title>
-<link rel="stylesheet" type="text/css" href="Tapestry.css" title="style">
-</head>
-
-<body>
-<table border="0" cellpadding="0" cellspacing="0" width="100%">
- <tr>
-  <td align="left"><A href="ActionLink.html"><IMG alt=ActionLink src="common-images/prev.png"></a></td>  
-  <td align="middle"><A href="index.html"><IMG alt="Component Index" src="common-images/home.png" ></a></td>  
-  <td align="right"><A href="Block.html"><IMG alt=Block src="common-images/next.png"></a></td>  
- <tr>
- <tr>
-  <td colspan="3"><hr></td>  
- </tr>
- <tr>
-  <td colspan="3">
-   <table border="0" cellpadding="4" cellspacing="4" width="100%">
-
-<tr valign="top">
- <td>
-  <table>
-	 <tr>
-	  <td><font size="+2"><b>Any</b></font></td>
-	 </tr>
-	 <tr>
-	  <td>
-		 <A href="../api/org/apache/tapestry/components/Any.html">org.apache.tapestry.components.Any</a>
-		</td>
-	 </tr>
-  </table>
- </td>
- <td>
-  <table align="right" valign="middle" bgcolor="#c0c0c0" cellpadding="8">
-	 <tr>
-	  <td>Visual / Non Visual Component</td>
-	 </tr>
-  </table>
- </td>
-</tr>
-
-<tr valign="center">
- <td colspan="2">&nbsp;</td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Description</b>
-	<br>
-  A 
-            component that can substitute for any HTML or XML element. Informal 
-            parameters
-  are used to fill in the attributes of the element.   
- </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>See Also</b>
-	<br>
-	<A href="Insert.html">Insert</a>, 
-  <A href="Hidden.html">Hidden</a>
- </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Parameters</b> 
-	<br>
-  <table border="1" cellpadding="4" cellspacing="4" class="parameters">
-  <tr> 
-    <th>Name</th>
-    <th>Type</th>
-	  <th>Direction</th>
-    <th>Required</th> 
-    <th>Default</th>
-    <th>Description</th>
-  </tr>
-  <tr>
-    <td>element</td>
-    <td>String</td>
-    <td>in</td>
-   	<td>no</td>
-		        <td>HTML tag used to insert this component in its parent's template.</td>
-		<td>The element to be produced.</td>
-	</tr>
-	</table>
-            <P>Body: <STRONG>rendered<BR></STRONG>Informal parameters: 
-            <STRONG>allowed</STRONG>		
-    <br>
-  Reserved parameters: 
-            <EM>none</EM> </P>
-    
- </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Examples</b>
-	<p>
-  In this example the Any component is use to generate XML order list document. 
-	<p>
-
-<table class="examples" cellpadding="8">
-<tr>
- <td>
-<font color="blue">&lt;?xml version="1.0" encoding="ISO-8859-1" ?&gt;</font><br> 
-<font color="blue">&lt;</font><font color="brown">order-list</font><font color="blue">&gt;</font><br>
-&nbsp;<font color="blue">&lt;</font><font color="brown">order-item id</font><font color="blue">="</font><b>91307</b><font color="blue">"</font> <font color="brown">order-id</font><font color="blue">="</font><b>2137</b><font color="blue">"</font> <font color="brown">cust-id</font><font color="blue">="</font><b>94</b><font color="blue">"</font> <font color="brown">order-date</font><font color="blue">="</font><b>2002-04-13</b><font color="blue">"</font> <font color="brown">desc</font><font color="blue">="</font><b>AWB-TS 4.5mm</b><font color="blue">"</font><font color="blue">/&gt;</font><br>
-&nbsp;<font color="blue">&lt;</font><font color="brown">order-item id</font><font color="blue">="</font><b>91308</b><font color="blue">"</font> <font color="brown">order-id</font><font color="blue">="</font><b>2137</b><font color="blue">"</font> <font color="brown">cust-id</font><font color="blue">="</font><b>94</b><font color="blue">"</font> <font color="brown">order-date</font><font color="blue">="</font><b>2002-04-13</b><font color="blue">"</font> <font color="brown">desc</font><font color="blue">="</font><b>TGM-M2 30mm</b><font color="blue">"</font><font color="blue">/&gt;</font><br>
-&nbsp;<font color="blue">&lt;</font><font color="brown">order-item id</font><font color="blue">="</font><b>92571</b><font color="blue">"</font> <font color="brown">order-id</font><font color="blue">="</font><b>3846</b><font color="blue">"</font> <font color="brown">cust-id</font><font color="blue">="</font><b>94</b><font color="blue">"</font> <font color="brown">order-date</font><font color="blue">="</font><b>2002-05-09</b><font color="blue">"</font> <font color="brown">desc</font><font color="blue">="</font><b>AWB-TS 4.5mm</b><font color="blue">"</font><font color="blue">/&gt;</font><br>
-&nbsp;<font color="blue">&lt;</font><font color="brown">order-item id</font><font color="blue">="</font><b>92572</b><font color="blue">"</font> <font color="brown">order-id</font><font color="blue">="</font><b>3846</b><font color="blue">"</font> <font color="brown">cust-id</font><font color="blue">="</font><b>94</b><font color="blue">"</font> <font color="brown">order-date</font><font color="blue">="</font><b>2002-05-09</b><font color="blue">"</font> <font color="brown">desc</font><font color="blue">="</font><b>P6-AA Series 2</b><font color="blue">"</font><font color="blue">/&gt;</font><br>
-&nbsp;<font color="blue">&lt;</font><font color="brown">order-item id</font><font color="blue">="</font><b>92573</b><font color="blue">"</font> <font color="brown">order-id</font><font color="blue">="</font><b>3846</b><font color="blue">"</font> <font color="brown">cust-id</font><font color="blue">="</font><b>94</b><font color="blue">"</font> <font color="brown">order-date</font><font color="blue">="</font><b>2002-05-09</b><font color="blue">"</font> <font color="brown">desc</font><font color="blue">="</font><b>AWB-TS 10mm</b><font color="blue">"</font><font color="blue">/&gt;</font><br>
-<font color="blue">&lt;/</font><font color="brown">order-list</font><font color="blue">&gt;</font><br>
- </td>
-</tr>
-</table>
-
-            <pre>&lt;?xml version="1.0" encoding="ISO-8859-1" ?&gt; 
-&lt;order-list&gt;
- &lt;span jwcid="@<a href="Foreach.html">Foreach</a>" source="ognl:orderItemList" value=&quot;ognl:orderItem&quot;&gt;
-  &lt;order-item jwcid="<span class="jwcid">orderItem</span>"&gt; 
-  &lt;/order-item&gt;
- &lt;/span&gt;
-&lt;/order-list&gt;
-
-
-&lt;property-specification name=&quot;orderItemList&quot; type=&quot;java.util.List&quot;/&gt;<br>&lt;property-specification name=&quot;orderItem&quot; type=&quot;com.dsconsulting.order.model.OrderItem&quot;/&gt;<br>
-&lt;component id="<span class="jwcid">orderItem</span>" type="<A href="Any.html">Any</a>"&gt;
-    &lt;binding name="id" expression="orderItem.id"/&gt;
-    &lt;binding name="order-id" expression="orderItem.orderId"/&gt;
-    &lt;binding name="cust-id" expression="orderItem.customerId"/&gt;
-    &lt;binding name="order-date" expression="orderItem.orderDate"/&gt;
-    &lt;binding name="desc" expression="orderItem.description"/&gt;
-&lt;/component&gt;
-
-
-public abstract class OrderItemsXML extends BasePage {
-    
-    public abstract List getOrderItemList(); 
-    public abstract void setOrderItemList(List value); 
-}
-
-public class OrderItem {
-    private static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd");
-    private Integer id;
-    private Integer orderId;
-    private Integer customerId;
-    private Date orderDate;
-    private String description;
-
-    public OrderItem(Integer id, Integer orderId, Integer customerId, 
-            Date orderdDate, String description) {
-        this.id = id;
-        this.orderId = orderId;
-        this.customerId = customerId;
-        this.orderDate = orderDate;
-        this.description = description;
-    }
-
-    public Integer getId() { return id; }
-    
-    public Integer getOrderId() { return orderId; }
-    
-    public Integer getCustomerId() { return customerId; }
-
-    public String getOrderDate() { return DATE_FORMAT.format(orderDate); }                               
-
-    public String getDescription() { return description; }
-}
-</pre>
-          </td>
-        </tr></table>
-</td></tr>
-<tr>
- <td colspan="3"><hr></td>  
-</tr>
-<tr>
- <td align="left"><A href="ActionLink.html"><IMG alt=ActionLink src="common-images/prev.png"></a></td>  
- <td align="middle"><A href="index.html"><IMG alt="Component Index" src="common-images/home.png" ></a></td>  
- <td align="right"><A href="Block.html"><IMG alt=Block src="common-images/next.png"></a></td>  
-</tr>
-</table>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/3.0.4/doc/src/ComponentReference/Block.html b/3.0.4/doc/src/ComponentReference/Block.html
deleted file mode 100644
index 6ed43c3..0000000
--- a/3.0.4/doc/src/ComponentReference/Block.html
+++ /dev/null
@@ -1,121 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<!-- $Id$ --> 
-<html>
-<head>
-<title>Block</title>
-<link rel="stylesheet" type="text/css" href="Tapestry.css" title="style">
-</head>
-
-<body>
-<table border="0" cellpadding="0" cellspacing="0" width="100%">
- <tr>
-  <td align="left"><A href="Any.html"><IMG alt=Any src="common-images/prev.png"></A></td>  
-  <td align="middle"><A href="index.html"><IMG alt="Component Index" src="common-images/home.png" ></A></td>  
-  <td align="right"><A href="Body.html"><IMG alt=Body src="common-images/next.png"></A></td>  
- <tr>
- <tr>
-  <td colspan="3"><hr></td>  
- </tr>
- <tr>
-  <td colspan="3">
-   <table border="0" cellpadding="4" cellspacing="4" width="100%">
-
-<tr valign="top">
- <td>
-  <table>
-	 <tr>
-	  <td><font size="+2"><b>Block</b></font></td>
-	 </tr>
-	 <tr>
-	  <td>
-		 <A href="../api/org/apache/tapestry/components/Block.html">org.apache.tapestry.components.Block</A>
-		</td>
-	 </tr>
-  </table>
- </td>
- <td>
-  <table align="right" valign="middle" bgcolor="#c0c0c0" cellpadding="8">
-	 <tr>
-	  <td>Non Visual Component</td>
-	 </tr>
-  </table>
- </td>
-</tr>
-
-<tr valign="center">
- <td colspan="2">&nbsp;</td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Description</b>
-	<br>
-  A Block is used to prevent a section of an HTML template from being renderred. 
-  That is, a Block is allowed a body, but never renders it. Instead, an 
-  <a href="RenderBlock.html">RenderBlock</a> component is used to insert the body of 
-  the block. 
-  <p>
-  Block and <a href="RenderBlock.html">RenderBlock</a> are used to build a certain 
-  class of complicated component that can't be assembled using the normal 
-  wrapping containment. Such a complex component would have two or more sections 
-  that need to be supplied by the containing page (or component).
-  <p>
-  Blocks can be used to pass arbitrary blocks of HTML and components as 
-  parameters to a component. 
-  <p>
-  The runtime property <tt>inserter</tt> gives access to the
-  component, typically an <a href="RenderBlock.html">RenderBlock</a> 
-            that inserted the body of the Block. This allows for access to 
-            informal parameters of the InsertBlock, which is a useful (if 
-            roundabout) way to pass parameters to the components inside a Block 
-            from the container that inserts the Block.</p>
-           
- </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>See Also</b>
-	<br>
-	<A href="Conditional.html">Conditional</A>, 
-	<A href="Insert.html">Insert</A>, 
-  <a href="RenderBlock.html">RenderBlock</a>
- </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Parameters</b>
-	<br>
-  None
-  <p>
-  Body: <STRONG>rendered<BR></STRONG>
-  Informal parameters: 
-            <STRONG>forbidden</STRONG>
-     <br>
-  Reserved 
-            parameters: <EM>none</EM></p>
-    
- </td>
-</tr>
-
-<tr>
-          <td colspan="2"> <b>Examples</b> 
-            <p> Please see the documentation for the <a href="RenderBlock.html">RenderBlock</a> 
-              component.</p>
-      
-
- </td></tr></table>
-</td></tr>
-<tr>
- <td colspan="3"><hr></td>  
-</tr>
-<tr>
- <td align="left"><A href="Any.html"><IMG alt=Any src="common-images/prev.png"></A></td>  
- <td align="middle"><A href="index.html"><IMG alt="Component Index" src="common-images/home.png" ></A></td>  
- <td align="right"><A href="Body.html"><IMG alt=Body src="common-images/next.png"></A></td>  
-</tr>
-</table>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/3.0.4/doc/src/ComponentReference/Body.html b/3.0.4/doc/src/ComponentReference/Body.html
deleted file mode 100644
index 9d979be..0000000
--- a/3.0.4/doc/src/ComponentReference/Body.html
+++ /dev/null
@@ -1,147 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<!-- $Id$ --> 
-<html>
-<head>
-<title>Body</title>
-<link rel="stylesheet" type="text/css" href="Tapestry.css" title="style">
-</head>
-
-<body>
-<table border="0" cellpadding="0" cellspacing="0" width="100%">
- <tr>
-  <td align="left"><A href="Block.html"><IMG alt=Block src="common-images/prev.png"></A></td>  
-  <td align="middle"><A href="index.html"><IMG alt="Component Index" src="common-images/home.png" ></A></td>  
-  <td align="right"><A href="Button.html"><IMG alt="Button" src="common-images/next.png"></A></td>  
- <tr>
- <tr>
-  <td colspan="3"><hr></td>  
- </tr>
- <tr>
-  <td colspan="3">
-   <table border="0" cellpadding="4" cellspacing="4" width="100%">
-
-<tr valign="top">
- <td>
-  <table>
-	 <tr>
-	  <td><font size="+2"><b>Body</b></font></td>
-	 </tr>
-	 <tr>
-	  <td>
-		 <A href="../api/org/apache/tapestry/html/Body.html">org.apache.tapestry.html.Body</A>
-		</td>
-	 </tr>
-  </table>
- </td>
- <td>
-  <table align="right" valign="middle" bgcolor="#c0c0c0" cellpadding="8">
-	 <tr>
-	  <td>Visual / Non Visual Component</td>
-	 </tr>
-  </table>
- </td>
-</tr>
-
-<tr valign="center">
- <td colspan="2">&nbsp;</td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Description</b>
-	<br>
-  Provides the HTML &lt;body&gt; tag. The Body component is used dynamically
-  JavaScript for other components such as the <A href="Script.html">Script</A> 
-  and <A href="Rollover.html">Rollover</A>
-           component. 
- </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>See Also</b>
-	<br>
-	<A href="Rollover.html">Rollover</A>, 
-  <A href="Script.html">Script</A>, 
-  <A href="Shell.html">Shell</A> 
- </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Parameters</b>
-	<br>
-  <table border="1" cellpadding="4" cellspacing="4" class="parameters">
-  <tr> 
-    <th>Name</th>
-    <th>Type</th>
-	  <th>Direction</th>
-    <th>Required</th> 
-    <th>Default</th>
-    <th>Description</th>
-  </tr>
-  <tr>
-    <td>element</td>
-    <td>String</td>
-    <td>in</td>
-   	<td>no</td>
-		<td>body</td>
-		<td>The element to use when rendering a tag. When using a Body component 
-    in a frameset, this may be changed to "frameset". 
-		</td>
-	</tr>
-	</table>
-            <P>Body: <STRONG>rendered<BR></STRONG>Informal 
-            parameters: <STRONG>allowed</STRONG>
-    <br>
-  Reserved parameters: "onload" </P>
-    
- </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Examples</b>
-	<p>
-  The Body component is used here to dynamically set the page's background 
-  color using the informal parameter 'bgcolor'.	
-	<p>
-  Please also see the <A href="Shell.html">Shell</A> example which illustrates 
-  how to integrate style sheets into your applications.
-	<p>
-
-<table bgcolor="yellow" cellpadding="24">
-<tr>
- <td>Your account of $645.35 is 2 Months overdue.<td></td>
-</tr>
-</table>
-		
-            <pre>			
-&lt;body jwcid="@<span class="jwcid"><A href="Body.html">Body</A></span>" bgcolor="ognl:statusColor"&gt;
-  Your account &lt;span jwcid="@<a href="Insert.html">Insert</a>" value="ognl:accountStatus"/&gt;.
-&lt;/body&gt;
-
-
-&lt;property-specification name=&quot;accountStatus&quot; type=&quot;java.lang.String&quot; persistent=&quot;yes&quot;/&gt;<br>&lt;property-specification name=&quot;statusColor&quot; type=&quot;java.lang.String&quot; persistent=&quot;yes&quot;/&gt;<br>
-
-public abstract class AccountPage extends BasePage {
-    public void setAccountStatus(String accountStatus);
-
-    public void setStatusColor(String statusColor);
-}
-</pre>
-          </td>
-        </tr></table>
-</td></tr>
-<tr>
- <td colspan="3"><hr></td>  
-</tr>
-<tr>
- <td align="left"><A href="Block.html"><IMG alt=Block src="common-images/prev.png"></A></td>  
- <td align="middle"><A href="index.html"><IMG alt="Component Index" src="common-images/home.png" ></A></td>  
- <td align="right"><A href="Button.html"><IMG alt="Button" src="common-images/next.png"></A></td>  
-</tr>
-</table>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/3.0.4/doc/src/ComponentReference/Button.html b/3.0.4/doc/src/ComponentReference/Button.html
deleted file mode 100644
index 5c6500f..0000000
--- a/3.0.4/doc/src/ComponentReference/Button.html
+++ /dev/null
@@ -1,128 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<!-- $Id$ --> 
-<html>
-<head>
-<title>Button</title>
-<link rel="stylesheet" type="text/css" href="Tapestry.css" title="style">
-</head>
-<body>
-
-<table border="0" cellpadding="0" cellspacing="0" width="100%">
- <tr>
-  <td align="left"><A href="Body.html"><IMG alt="Body" src="common-images/prev.png"></A></td>  
-  <td align="middle"><A href="index.html"><IMG alt="Component Index" src="common-images/home.png" ></A></td>  
-  <td align="right"><A href="Checkbox.html"><IMG alt="Checkbox" src="common-images/next.png"></A></td>  
- <tr>
- <tr>
-  <td colspan="3"><hr></td>  
- </tr>
- <tr>
-  <td colspan="3">
-   <table border="0" cellpadding="4" cellspacing="4" width="100%">
-        <TBODY>
-
-<tr valign="top">
- <td>
-  <table>
-	 <tr>
-	  <td><font size="+2"><b>Button</b></font></td>
-	 </tr>
-	 <tr>
-	  <td>
-		 <A href="../api/org/apache/tapestry/form/Button.html">
-		 org.apache.tapestry.form.Button</A>
-		</td>
-	 </tr>
-  </table>
- </td>
- <td>
-  <table align="right" valign="middle" bgcolor="#c0c0c0" cellspacing="8">
-	 <tr>
-	  <td><input type="button" value="Button"></td>
-	 </tr>
-  </table>
- </td>
-
- </table></td>
-</tr>
-
-<tr valign="center">
- <td colspan="2">&nbsp;</td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Description</b>
-	<br>
-  Provides a HTML form button element &lt;input type="button"&gt; for attaching
-  JavaScript onclick event handlers.             
- </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>See Also</b>
-	<br>
-	<A href="Form.html">Form</A>, 
-	<A href="Script.html">Script</A>, 
-	<A href="Submit.html">Submit</A> 
- </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Parameters</b>
-  <br>
-  <table border="1" cellpadding="4" cellspacing="4" class="parameters">
-   <tr> 
-    <th>Name</th>
-    <th>Type</th>
-    <th>Direction</th>
-    <th>Required</th> 
-    <th>Default</th>
-    <th>Description</th>
-   </tr>
-   <tr>
-		<td>label</td>
-		<td>String</td>
-		<td>in</td>
-		<td>no</td>
-		<td>&nbsp;</td>
-		<td>The label put on the button (this becomes the HTML value attribute).
-		</td>
-	 </tr>
-   <tr>
-	  <td>disabled
-	  <td>boolean</td>
-    <td>in</td>
-    <td>no</td>
-	  <td>false</td>
-    <td>
-    If set to true, the button will be disabled (will not respond to
-    the mouse); the browser should provide a "greyed out" appearance.
-    </td> 
-   </tr>
-	</table><BR>Body: <STRONG>removed</STRONG><BR>
-  Informal parameters: <STRONG>allowed</STRONG><br>
-  Reserved parameters: "name", "type"  
- </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Examples</b>
-  <p>
-  This example is under construction.
-</td></tr></table>
-
-<tr>
- <td colspan="3"><hr></td>  
-</tr>
-<tr>
- <td align="left"><A href="Body.html"><IMG alt="Body" src="common-images/prev.png"></A></td>  
- <td align="middle"><A href="index.html"><IMG alt="Component Index" src="common-images/home.png" ></A></td>  
- <td align="right"><A href="Checkbox.html"><IMG alt="Checkbox" src="common-images/next.png"></A></td>  
-</tr></TBODY>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/3.0.4/doc/src/ComponentReference/Checkbox.html b/3.0.4/doc/src/ComponentReference/Checkbox.html
deleted file mode 100644
index fc34dcc..0000000
--- a/3.0.4/doc/src/ComponentReference/Checkbox.html
+++ /dev/null
@@ -1,164 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<!-- $Id$ --> 
-<html>
-<head>
-<title>Checkbox</title>
-<link rel="stylesheet" type="text/css" href="Tapestry.css" title="style">
-</head>
-
-<body>
-<table border="0" cellpadding="0" cellspacing="0" width="100%">
- <tr>
-  <td align="left"><A href="Button.html"><IMG alt="Button" src="common-images/prev.png"></a></td>  
-  <td align="middle"><A href="index.html"><IMG alt="Component Index" src="common-images/home.png" ></a></td>  
-  <td align="right"><A href="Conditional.html"><IMG alt=Conditional src="common-images/next.png"></a></td>  
- <tr>
- <tr>
-  <td colspan="3"><hr></td>  
- </tr>
- <tr>
-  <td colspan="3">
-   <table border="0" cellpadding="4" cellspacing="4" width="100%">
-
-<tr valign="top">
- <td>
-  <table>
-	 <tr>
-	  <td><font size="+2"><b>Checkbox</b></font></td>
-	 </tr>
-	 <tr>
-	  <td>
-		 <A href="../api/org/apache/tapestry/form/Checkbox.html">org.apache.tapestry.form.Checkbox</a>
-		</td>
-	 </tr>
-  </table>
- </td>
- <td>
-  <table align="right" valign="middle" bgcolor="#c0c0c0" cellspacing="8">
-	 <tr>
-	  <td>
-		 <input type="checkbox" checked>checkbox
-		</td>
-	 </tr>
-  </table>
- </td>
-</tr>
-
-<tr valign="center">
- <td colspan="2">&nbsp;</td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Description</b>
-	<br>
-  Provides a HTML checkbox form element &lt;input type="checkbox"&gt;. 
-	The Checkbox component must be wrapped by a <A href="Form.html">Form</a>.
- </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>See Also</b>
-	<br>
-	<A href="Form.html">Form</a>, <A href="Radio.html">Radio</a>, 
-	<A href="RadioGroup.html">RadioGroup</a> 
- </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Parameters</b>
-	<br>
-  <table border="1" cellpadding="4" cellspacing="4" class="parameters">
-  <tr> 
-    <th>Name</th>
-    <th>Type</th>
-	  <th>Direction</th>
-    <th>Required</th> 
-    <th>Default</th>
-    <th>Description</th>
-  </tr>
-  <tr>
-    <td>selected</td>
-    <td>boolean</td>
-    <td>in-out</td>
-   	<td>yes</td>
-		<td>&nbsp;</td>
-		<td>Indicates whether the checkbox is selected or not.
-		 Corresponds to the "checked" HTML attribute.
-		</td>
-	</tr>
-  <tr>
- 		<td>disabled</td>
-		<td>boolean</td>
-		<td>in</td>
-		<td>no</td>
-		<td>false</td>
-		<td>Controls whether the text field is active or not.  If disabled, then
-			any value that comes up when the form is submitted is ignored.			
-			Corresponds to the "disabled" HTML attribute.
-		</td>
-	</tr>
-	</table>
-            <P>Body: <STRONG>removed<BR></STRONG>Informal parameters: 
-            <STRONG>allowed</STRONG>
-    <br>
-  Reserved parameters: 
-            "type", "checked", "name" </P>
-      
- </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Examples</b>
-	<p>
-	Provides a checkbox for the user contact a sales representative. 
-	<p>
-	
-<table class="examples" cellspacing="8">
- <tr>
-	<td>
-	 <input type="checkbox" checked> Contact Sales Rep
-	</td>
- </tr>
-</table>
-		
-            <pre>
-&lt;form jwcid="@<a href="Form.html">Form</a>" listener="ognl:listeners.formSubmit"&gt;
- &lt;input type="checkbox" jwcid="<span class="jwcid">@<a href="Checkbox.html">Checkbox</a></span>" selected="ognl:contactRep" disabled="ognl:staff"/&gt; Contact Sales Rep
-&lt;/form&gt;
-
-&lt;property-specification name=&quot;contactRep&quot; type=&quot;boolean&quot; persistent=&quot;yes&quot;/&gt;<br>&lt;property-specification name=&quot;staff&quot; type=&quot;boolean&quot;/&gt;<br>
-public abstract class EnquiryPage extends BasePage {
-    public abstract boolean isContactRep();
-
-    public abstract void setContactRep(boolean value);
-   
-    public abstract boolean isStaff();
-
-    public abstract void setStaff(boolean staff);
-
-    public void formSubmit(RequestCycle cycle) {
-        if (isContactRep()) {
-           // Process contact a sales representative request
-        }
-    }
-}
-</pre>
-          </td>
-        </tr></table>
-</td></tr>
-<tr>
- <td colspan="3"><hr></td>  
-</tr>
-<tr>
- <td align="left"><A href="Button.html"><IMG alt="Button" src="common-images/prev.png"></a></td>  
- <td align="middle"><A href="index.html"><IMG alt="Component Index" src="common-images/home.png" ></a></td>  
- <td align="right"><A href="Conditional.html"><IMG alt=Conditional src="common-images/next.png"></a></td>  
-</tr>
-</table>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/3.0.4/doc/src/ComponentReference/Conditional.html b/3.0.4/doc/src/ComponentReference/Conditional.html
deleted file mode 100644
index 12fd7f3..0000000
--- a/3.0.4/doc/src/ComponentReference/Conditional.html
+++ /dev/null
@@ -1,178 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<!-- $Id$ --> 
-<html>
-<head>
-<title>Conditional</title>
-<link rel="stylesheet" type="text/css" href="Tapestry.css" title="style">
-</head>
-
-<body>
-<table border="0" cellpadding="0" cellspacing="0" width="100%">
- <tr>
-  <td align="left"><A href="Checkbox.html"><IMG alt=Checkbox src="common-images/prev.png"></a></td>  
-  <td align="middle"><A href="index.html"><IMG alt="Component Index" src="common-images/home.png" ></a></td>  
-  <td align="right"><A href="DatePicker.html"><IMG alt="DatePicker" src="common-images/next.png"></a></td>  
- <tr>
- <tr>
-  <td colspan="3"><hr></td>  
- </tr>
- <tr>
-  <td colspan="3">
-   <table border="0" cellpadding="4" cellspacing="4" width="100%">
-   
-<tr valign="top">
- <td>
-  <table>
-	 <tr>
-	  <td><font size="+2"><b>Conditional</b></font></td>
-	 </tr>
-	 <tr>
-	  <td>
-		 <A href="../api/org/apache/tapestry/components/Conditional.html">org.apache.tapestry.components.Conditional</a>
-		</td>
-	 </tr>
-  </table>
- </td>
- <td>
-  <table align="right" valign="middle" bgcolor="#c0c0c0" cellpadding="8">
-	 <tr>
-	  <td>Non Visual Component</td>
-	 </tr>
-  </table>
- </td>
-</tr>
-
-<tr valign="center">
- <td colspan="2">&nbsp;</td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Description</b>
-	<br>
-	Makes part of an HTML template conditional. The body of the Conditional 
-  component is only rendered if a specified condition is met. 
- </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>See Also</b>
-	<br>
-  <A href="Foreach.html">Foreach</a>, 
-	<A href="Insert.html">Insert</a>
- </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Parameters</b>
-	<br>
-  <table border="1" cellpadding="4" cellspacing="4" class="parameters">
-  <tr> 
-    <th>Name</th>
-    <th>Type</th>
-	  <th>Direction</th>
-    <th>Required</th> 
-    <th>Default</th>
-    <th>Description</th>
-  </tr>
-  <tr>
-    <td>condition</td>
-    <td>boolean</td>
-    <td>in</td>
-   	            <td>yes</td>
-		<td>false</td>
-		<td>The condition to be met. If this value is true, then the wrapped 
-		elements will be rendered.
-		</td>
-	</tr>
-  <tr>
- 		<td>invert</td>
-		<td>boolean</td>
-		<td>in</td>
-		<td>no</td>
-		<td>false</td>
-		<td>If true, then the condition is inverted. This is useful for 
-		simulating an else clause.
-    <p>
-    With Tapestry 2.2 it is easier to specify "!" operator in the condition's  
-    ONGL expression. 
-    </p>
-		</td>
-	</tr>
-	<tr>
-		<td>element</td>
-		<td>String</td>
-		<td>in</td>
-		<td>no</td>
-		<td>&nbsp;</td>
-		        <td>If specified and condition is satisfied, then the component acts like 
-                  an <A href="Any.html">Any</A>, emitting an open and close tag. 
-                  Informal parameters are applied to the tag. If no element is 
-                  specified, informal parameters are ignored.</td>
-	</tr>
-	</table>
-  <P>
-  Body: <STRONG>rendered</STRONG><BR>
-  Informal parameters: <STRONG>allowed</STRONG><br>
-  Reserved parameters: <EM>none</EM>
-  </P>    
- </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Examples</b>
-	<p>
-  The Conditional component in this example is used to display whether the 
-  person is a manager and if they are a manager whether they have any staff.	
-	<p>
-	
-<table class="examples" cellpadding="8">
-<tr>
- <td>
-John Smith is a Manager with <font color="red"><b>no</b></font> staff. 	
- <td></td>
-</tr>
-</table>
-		
-            <pre>
-&lt;span jwcid="@<a href="Insert.html">Insert</a>" value="ognl:fullName"/&gt;
-&lt;span jwcid="<span class="jwcid">@<a href="Conditional.html">Conditional</a></span>" condition="ognl:manager"&gt; is a Manager
- &lt;span jwcid="<span class="jwcid">@<a href="Conditional.html">Conditional</a></span>" condition="ognl:! staffList.empty"&gt; with staff.&lt;/span&gt;
- &lt;span jwcid="<span class="jwcid">@<a href="Conditional.html">Conditional</a></span>" condition="ognl:staffList.empty"&gt;
-  with &lt;font color="red"&gt;&lt;b&gt;no&lt;/b&gt;&lt;/font&gt; staff.&lt;/span&gt;
-&lt;/span&gt;
-&lt;span jwcid="@<a href="Conditional.html">Conditional</a>" condition="ognl:! manager"&gt; is not a Manager.&lt;/span&gt;
-
-
-&lt;property-specification name=&quot;fullName&quot; type=&quot;java.lang.String&quot;/&gt;<br>&lt;property-specification name=&quot;manager&quot; type=&quot;boolean&quot;/&gt;<br>&lt;property-specification name=&quot;staffList&quot; type=&quot;java.util.List&quot;/&gt;<br>
-
-public abstract class EnquiryPage extends BasePage {
-
-    public abstract String getFullName();
-    public abstract void setFullName(String value);
-    
-    public abstract boolean isManager();    
-    public abstract void setManager(boolean value);
-
-    public abstract List getStaffList();
-    public abstract void setStaffList(List value);
-}
-</pre>
-          </td>
-        </tr></table>
-</td></tr>
-<tr>
- <td colspan="3"><hr></td>  
-</tr>
-<tr>
- <td align="left"><A href="Checkbox.html"><IMG alt=Checkbox src="common-images/prev.png"></a></td>  
- <td align="middle"><A href="index.html"><IMG alt="Component Index" src="common-images/home.png" ></a></td>  
- <td align="right"><A href="DatePicker.html"><IMG alt="DatePicker" src="common-images/next.png"></a></td>  
-</tr>
-</table>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/3.0.4/doc/src/ComponentReference/DatePicker.html b/3.0.4/doc/src/ComponentReference/DatePicker.html
deleted file mode 100644
index bcbb8ee..0000000
--- a/3.0.4/doc/src/ComponentReference/DatePicker.html
+++ /dev/null
@@ -1,223 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<!-- $Id$ --> 
-<html>
-<head>
-<title>DatePicker</title>
-<link rel="stylesheet" type="text/css" href="Tapestry.css" title="style">
-</head>
-
-<body>
-<table border="0" cellpadding="0" cellspacing="0" width="100%">
- <tr>
-  <td align="left"><A href="Conditional.html"><IMG alt="Conditional" src="common-images/prev.png"></a></td>  
-  <td align="middle"><A href="index.html"><IMG alt="Component Index" src="common-images/home.png" ></a></td>
-  <td align="right"><A href="Delegator.html"><IMG alt="Delegator" src="common-images/next.png"></a></td>  
- <tr>
- <tr>
-  <td colspan="3"><hr></td>  
- </tr>
- <tr>
-  <td colspan="3">
-   <table border="0" cellpadding="4" cellspacing="4" width="100%">
-
-<tr valign="top">
- <td>
-  <table>
-   <tr>
-    <td><font size="+2"><b>DatePicker</b></font></td>
-   </tr>
-   <tr>
-    <td>
-     <A href="../api/org/apache/tapestry/form/DateEdit.html">org.apache.tapestry.form.DatePicker</a>
-    </td>
-   </tr>
-  </table>
- </td>
- <td>
-  <table align="right" valign="middle" bgcolor="#c0c0c0" cellpadding="8">
-   <tr>
-    <td><input type="text" size="15" value="21 Jan 2002"/>&nbsp; <img src="images/DatePickerIcon.png"/></td>
-   </tr>
-  </table>
- </td>
-</tr>
-
-<tr valign="center">
- <td colspan="2">&nbsp;</td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Description</b>
-  <br>
-  Provides a form 
-  <a href="http://java.sun.com/products/jdk/1.2/docs/api/java/util/Date.html">Date</a>
-  field component for selecting dates. DatePicker presents a drop down monthly 
-  calendar for users to select dates from.
-  <p>  
-  JavaScript must be enabled in the client browser to use the drop down 
-  calendar. If JavaScript is not enabled users can still enter a date value
-  in the HTML text field.  
-  <p>
-  Note a rendering feature of Netscape and Internet Explorer gives the HTML 
-  &lt;select&gt; element the highest Z-level index. The HTML &lt;select&gt; 
-  cannot be covered by other elements. If a &lt;select&gt; is located inside 
-  the DatePicker's popup calendar region, the &lt;select&gt; will render through 
-  the popup calendar obscuring part of the calendar. In these situation 
-  organize the form's UI layout so this does not occur.
- </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>See Also</b>
-  <br>
-  <A href="Button.html">Button</a>, 
-  <A href="Form.html">Form</a>, 
-  <A href="ValidField.html">ValidField</a>
- </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Parameters</b>
-  <br>
-  <table border="1" cellpadding="4" cellspacing="4" class="parameters">
-   <tr> 
-    <th>Name</th>
-    <th>Type</th>
-    <th>Direction</th>
-    <th>Required</th> 
-    <th>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Default&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</th>
-    <th>Description</th>
-   </tr>
-   <tr>
-    <td>value</td>
-    <td>
-     <a href="http://java.sun.com/products/jdk/1.2/docs/api/java/util/Date.html"><tt>java.util.Date</tt></a>
-    </td>
-    <td>in</td>
-    <td>yes</td>
-    <td>&nbsp;</td>
-    <td>
-    The data value.
-    <p> 
-    Take care to ensure date time values are 'normalized' before 
-    performing any millisec based comparison or equality operations.    
-    </td>
-   </tr>
-   <tr>
-    <td>format</td>
-    <td>String</td>
-    <td>in</td>
-    <td>no</td>
-    <td>dd MMM yyyy</td>
-    <td>
-     The date format string. See 
-     <a href="http://java.sun.com/products/jdk/1.2/docs/api/java/text/SimpleDateFormat.html"><tt>SimpleDateFormat</tt></a>
-     for format pattern letters. 
-    </td>
-   </tr>
-   <tr>
- 		<td>disabled</td>
-		<td>boolean</td>
-		<td>in</td>
-		<td>no</td>
-		<td>false</td>
-		<td>
-     Controls whether the date field and calendar button is active or not.
-    </td>
-	 </tr>
-	 
-	 <tr>
-	 	<td>icon</td>	
-    <td><A href="../api/org/apache/tapestry/IAsset.html"><tt>IAsset</tt></A></td>
-    <td>in</td>
-   	<td>no</td>
-		<td><img src="images/DatePickerIcon.png"/></td>
-		<td>The icon used to toggle the calendar on and off. The calendar will automatically line itself up
-			beneath the text input field.</td>
-	 </tr>
-  </table>
-  <P>
-  Body: <STRONG>removed</STRONG><BR>
-  Informal parameters: <STRONG>allowed</STRONG> (These parameters will be applied to the text field)<br>
-  Reserved parameters: none 
-  </P>    
- </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Examples</b>
-  <p>
-  This example provides a simple form where the user can select a start date and
-  an end date.
-  </p>
-
-<table class="examples" cellpadding="8">
-<tr>
- <td>
-<form jwcid="form">
-<table valign="middle">
- <tr>
-  <td>Start Date:</td><td><input type="text" size="15" value="1 Jan 2002"/>&nbsp; <img src="images/DatePickerIcon.png"/></td>
- </tr>
- <tr>
-  <td>End Date:</td><td><input type="text" size="15" value="31 Jun 2002"/>&nbsp; <img src="images/DatePickerIcon.png"/></td>
- </tr>
- <tr>
-  <td colspan="2">&nbsp;</td>
- </tr>
- <tr>
-  <td colspan="2" align="right"><input type="submit" value="Submit"/></td>
- </tr>
-</table>
- </form></td>
-</tr>
-</table>
-
-            <pre>  
-&lt;form jwcid="<a href="Form.html">Form</a>" listener="ognl:listeners.formSubmit"&gt;
-&lt;table valign="middle"&gt;
- &lt;tr&gt;
-  &lt;td&gt;Start Date:&lt;/td&gt; &lt;td&gt;&lt;span jwcid="<span class="jwcid">@<a href="DatePicker.html">DatePicker</a></span>" value="ognl:startDate"/&gt;&lt;/td&gt;
- &lt;/tr&gt;
- &lt;tr&gt;
-  &lt;td&gt;End Date:&lt;/td&gt; &lt;td&gt;&lt;span jwcid="<span class="jwcid">@<a href="DatePicker.html">DatePicker</a></span>" value="ognl:endDate"/&gt;&lt;/td&gt;
- &lt;/tr&gt;
- &lt;tr&gt;
-  &lt;td colspan="2"&gt;&amp;nbsp;&lt;/td&gt;
- &lt;/tr&gt;
- &lt;tr&gt;
-  &lt;td colspan="2" align="right"&gt;&lt;input type="submit" value="Submit"/&gt;&lt;/td&gt;
- &lt;/tr&gt;
-&lt;/table&gt;
-&lt;/form&gt;
-
-&lt;property-specification name=&quot;startDate&quot; type=&quot;java.util.Date&quot;/&gt;<br>&lt;property-specification name=&quot;endDate&quot; type=&quot;java.util.Date&quot;/&gt;<br>	
-public abstract class Dates extends BasePage {
-    public abstract Date getStartDate();
-	
-    public abstract Date getEndDate();
-
-    public void formSubmit(IRequestCycle cycle) {
-        // Process the submitted dates.
-    }
-}
-</pre>
-          </td>
-        </tr></table>
-</td></tr>
-<tr>
- <td colspan="3"><hr></td>  
-</tr>
-<tr>
- <td align="left"><A href="Conditional.html"><IMG alt="Conditional" src="common-images/prev.png"></a></td>  
- <td align="middle"><A href="index.html"><IMG alt="Component Index" src="common-images/home.png" ></a></td><!-- Next component in alphabetical order. -->
- <td align="right"><A href="Delegator.html"><IMG alt="Delegator" src="common-images/next.png"></a></td>  
-</tr>
-</table>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/3.0.4/doc/src/ComponentReference/Delegator.html b/3.0.4/doc/src/ComponentReference/Delegator.html
deleted file mode 100644
index 35aaa55..0000000
--- a/3.0.4/doc/src/ComponentReference/Delegator.html
+++ /dev/null
@@ -1,121 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<!-- $Id$ --> 
-<html>
-<head>
-<title>Delegator</title>
-<link rel="stylesheet" type="text/css" href="Tapestry.css" title="style">
-</head>
-
-<body>
-<table border="0" cellpadding="0" cellspacing="0" width="100%">
- <tr>
-  <td align="left"><A href="DatePicker.html"><IMG alt="DatePicker" src="common-images/prev.png"></a></td>  
-  <td align="middle"><A href="index.html"><IMG alt="Component Index" src="common-images/home.png" ></a></td>  
-  <td align="right"><A href="DirectLink.html"><IMG alt="DirectLink" src="common-images/next.png"></a></td>  
- <tr>
- <tr>
-  <td colspan="3"><hr></td>  
- </tr>
- <tr>
-  <td colspan="3">
-   <table border="0" cellpadding="4" cellspacing="4" width="100%">
-   
-<tr valign="top">
- <td>
-  <table>
-	 <tr>
-	  <td><font size="+2"><b>Delegator</b></font></td>
-	 </tr>
-	 <tr>
-	  <td>
-		 <A href="../api/org/apache/tapestry/components/Delegator.html">org.apache.tapestry.components.Delegator</a>
-		</td>
-	 </tr>
-  </table>
- </td>
- <td>
-  <table align="right" valign="middle" bgcolor="#c0c0c0" cellpadding="8">
-	 <tr>
-	  <td>Non Visual Component</td>
-	 </tr>
-  </table>
- </td>
-</tr>
-
-<tr valign="center">
- <td colspan="2">&nbsp;</td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Description</b>
-	<br>
-  A 
-            component which delegates its behavior (that is, the HTML rendered) 
-            to some other object. This is occasionally useful when the HTML to 
-            render is best generated from pure Java
-  code (or has been provided from some source outside of Tapestry). 
- </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>See Also</b>
-	<br>
- </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Parameters</b>
-	<br>
-  <table border="1" cellpadding="4" cellspacing="4" class="parameters">
-  <tr> 
-    <th>Name</th>
-    <th>Type</th>
-	  <th>Direction</th>
-    <th>Required</th> 
-    <th>Default</th>
-    <th>Description</th>
-  </tr>
-  <tr>
-    <td>delegate</td>
-    <td><A href="../api/org/apache/tapestry/IRender.html"><tt>IRender</tt></a></td>
-    <td>in</td>
-   	<td>no</td>
-		<td>&nbsp;</td>
-		<td>
-    If specified, the object which will provide the rendering for the component.
-    </td>
-	</tr>
-	</table>
-            <P>Body: <STRONG>removed</STRONG><BR>Informal parameters: 
-            <STRONG>forbidden</STRONG>
-     <br>
-  Reserved 
-            parameters: <EM>none</EM> </P>
-    
- </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Examples</b>
-	<p>
-  This example is under construction.</p>
-      
-
- </td></tr></table>
-</td></tr>
-<tr>
- <td colspan="3"><hr></td>  
-</tr>
-<tr>
- <td align="left"><A href="DatePicker.html"><IMG alt="DatePicker" src="common-images/prev.png"></a></td>  
- <td align="middle"><A href="index.html"><IMG alt="Component Index" src="common-images/home.png" ></a></td>  
- <td align="right"><A href="DirectLink.html"><IMG alt="DirectLink" src="common-images/next.png"></a></td>  
-</tr>
-</table>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/3.0.4/doc/src/ComponentReference/DirectLink.html b/3.0.4/doc/src/ComponentReference/DirectLink.html
deleted file mode 100644
index 4a4d76a..0000000
--- a/3.0.4/doc/src/ComponentReference/DirectLink.html
+++ /dev/null
@@ -1,348 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<!-- $Id$ --> 
-<html>
-<head>
-<title>DirectLink</title>
-<link rel="stylesheet" type="text/css" href="Tapestry.css" title="style">
-</head>
-
-<body>
-<table border="0" cellpadding="0" cellspacing="0" width="100%">
- <tr>
-  <td align="left"><A href="Delegator.html"><IMG alt=Delegator src="common-images/prev.png"></A></td>  
-  <td align="middle"><A href="index.html"><IMG alt="Component Index" src="common-images/home.png" ></A></td>  
-  <td align="right"><A href="ExceptionDisplay.html"><IMG alt=ExceptionDisplay src="common-images/next.png"></A></td>  
- <tr>
- <tr>
-  <td colspan="3"><hr></td>  
- </tr>
- <tr>
-  <td colspan="3">
-   <table border="0" cellpadding="4" cellspacing="4" width="100%">
-
-<tr valign="top">
- <td>
-  <table>
-	 <tr>
-	  <td><font size="+2"><b>DirectLink</b></font></td>
-	 </tr>
-	 <tr>
-	  <td>
-		 <A href="../api/org/apache/tapestry/link/DirectLink.html">
-		 org.apache.tapestry.link.DirectLink</A>
-		</td>
-	 </tr>
-  </table>
- </td>
- <td>
-  <table align="right" valign="middle" bgcolor="#c0c0c0" cellpadding="8">
-	 <tr>
-	  <td><A href="DirectLink.html"><font color="blue">Direct Link</font></A></td>
-	 </tr>
-  </table>
- </td>
-</tr>
-
-<tr valign="center">
- <td colspan="2">&nbsp;</td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Description</b>
-	<br>
-  Creates a &lt;a&gt; hyperlink that notifies the component when the link is 
-  triggered. The link includes some context-specific data that is made available
-  to the component's listener. This is used in cases where the 
-  <a href="ActionLink.html">ActionLink</a> component can't be used (or is too inefficient).
-  <p>
-  See the Developers Guide <A href="../DevelopersGuide/cycle.listeners.html">
-  ActionLink and DirectLink listeners</A> for a more complete description.</p>
-            <P>Prior to release 2.2, this component was named 
-            <STRONG>Direct</STRONG>.</P>
-            
- </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>See Also</b>
-	<br>
-	<a href="ActionLink.html">ActionLink</a>, 
-	<A href="ExternalLink.html">ExternalLink</a>, 
-  <A href="GenericLink.html">GenericLink</A>,
-  <a href="PageLink.html">PageLink</a>,
-  <a href="ServiceLink.html">ServiceLink</a>
- </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Parameters</b>
-	<br>
-  <table border="1" cellpadding="4" cellspacing="4" class="parameters">
-  <tr> 
-    <th>Name</th>
-    <th>Type</th>
-	  <th>Direction</th>
-    <th>Required</th> 
-    <th>Default</th>
-    <th>Description</th>
-  </tr>
-  <tr>
-    <td>listener</td>
-    <td>
-     <A href="../api/org/apache/tapestry/IActionListener.html"><tt>IActionListener</tt></A>
-    </td>
-    <td>in</td>
-   	<td>yes</td>
-		<td>&nbsp;</td>
-		<td>Specifies an object that is notified when the link is clicked,
-		which is typically a listener method of its container
-		(for example, <tt>listeners.<i>method</i></tt>).</td>
-	</tr>
-  <tr>
-    <td>parameters</td>
-    <td>Object or<br>
-        Object[] or<br> 
-     <a href="http://java.sun.com/products/jdk/1.2/docs/api/java/util/List.html">
-     <tt>List</tt></a>    
-    </td>
-    <td>in</td>
-   	<td>no</td>
-		<td>&nbsp;</td>
-		<td>
-    An array of objects to be encoded into the URL. These parameters will be 
-    decoded when the link is triggered.
-    <p>
-    In a web application built onto of Enterprise JavaBeans, the context is 
-    often the primary key of some Entity bean; typically such keys are Strings 
-    or Integers.
-    <p>
-    A listener method can retrieve the parameters using 
-    <A href="../api/org/apache/tapestry/IRequestCycle.html#getServiceParameters()">
-    <tt>IRequestCycle.getServiceParameters()</tt></A>. 
-    <p>
-    Prior to release 2.2, the parameters were always type String. They may now 
-    be of any type; type will be maintained when the parameters are later 
-    retrieved by a listener. See 
-    <A href="../api/org/apache/tapestry/util/io/DataSqueezer.html"><tt>DataSqueezer</tt></A> for more details.</p> 
-       
-    </td>
-	</tr>
-  <tr>
-    <td>disabled</td>
-    <td>boolean</td>
-    <td>in</td>
-   	<td>no</td>
-		<td>false</td>
-		<td>Controls whether the link is produced. If disabled, the portion of the 
-    template the link surrounds is still rendered, but not the link itself.
-    </td>
-	</tr>
-  <tr>
-    <td>stateful</td>
-    <td>boolean</td>
-    <td>in</td>
-   	<td>no</td>
-		<td>true</td>
-		<td>
-    If true (the default), then the component requires an active (i.e., non-new) 
-    <tt>HttpSession</tt> when triggered. Failing that, it throws a 
-    <A href="../api/org/apache/tapestry/StaleLinkException"><tt>StaleLinkException</tt></A>. 
-    If false, then no check is necessary. The 
-    latter works well with links that encode all necessary state inside the URL 
-    itself.
-    </td>
-	</tr>
-
-  <tr>
-    <td>anchor</td>
-    <td>String</td>
-    <td>in</td>
-   	<td>no</td>
-		<td>&nbsp;</td>
-		<td>
-    The name of an anchor or element to link to. The final URL will have '#' 
-    and the anchor appended to it.
-    </td>
-	</tr>
-	<tr>
-		<td>renderer</td>
-		<td><a href="../api/org/apache/tapestry/link/ILinkRenderer.html">ILinkRenderer</a></td>
-		<td>in</td>
-		<td>no</td>
-		<td>&nbsp;</td>
-		<td>
-		The object which will actually render the link.
-			</td>
-	</tr>	
-	</table>
-            <P>Body: <STRONG>rendered</STRONG><BR>Informal parameters: 
-            <STRONG>allowed</STRONG>
-    <br>
-  Reserved parameters: 
-            "href" </P>
-    
- </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Examples</b>
-	<p>
-  In this example the DirectLink component enables users to select or delete 
-  Customers from a Customer List table.
-	<p>
-
-<table class="examples" cellspacing="6">
-  <tr align="left">
-   <th>ID</th>
-   <th>&nbsp;</th>
-   <th>Name</th>
-   <th>&nbsp;</th>
-   <th>Level</th>
-   <th>&nbsp;</th>
-  </tr>
-  <tr>
-   <td colspan="6"><hr></td>
-  </tr>
-  <tr>
-   <td>10276</td>
-   <td>&nbsp;</td>
-   <td><a href="DirectLink.html" style="{color:blue;}">Ms Sophie L. Jamies</a></td>
-   <td>&nbsp;</td>
-   <td>Platinum</td>
-   <td><a href="DirectLink.html" style="{color:blue;}"><img src="images/delete.gif" alt="Delete"></a></td>
-  </tr>
-  <tr>
-   <td>10539</td>
-   <td>&nbsp;</td>
-   <td><a href="DirectLink.html" style="{color:blue;}">Mr Albert H. Davies</a></td>
-   <td>&nbsp;</td>
-   <td>Gold</td>
-   <td><a href="DirectLink.html" style="{color:blue;}"><img src="images/delete.gif" alt="Delete"></a></td>
-  </tr>
-  <tr>
-   <td>10552</td>
-   <td>&nbsp;</td>
-   <td><a href="DirectLink.html" style="{color:blue;}">Mrs Jan S. Flawson</a></td>
-   <td>&nbsp;</td>
-   <td>Gold</td>
-   <td><a href="DirectLink.html" style="{color:blue;}"><img src="images/delete.gif" alt="Delete"></a></td>
-  </tr>
-  <tr>
-   <td>10863</td>
-   <td>&nbsp;</td>
-   <td><a href="DirectLink.html" style="{color:blue;}">Mr Robert J. Hassel</a></td>
-   <td>&nbsp;</td>
-   <td>Silver</td>
-   <td><a href="DirectLink.html" style="{color:blue;}"><img src="images/delete.gif" alt="Delete"></a></td>
-  </tr>
-</table>
-
-            <pre>
-&lt;table cellspacing="6"&gt;
-  &lt;tr&gt;
-   &lt;td&gt;ID&lt;/td&gt;
-   &lt;td&gt;&amp;nbsp;&lt;/td&gt;
-   &lt;td&gt;Name&lt;/td&gt;
-   &lt;td&gt;&amp;nbsp;&lt;/td&gt;
-   &lt;td&gt;Level&lt;/td&gt;
-   &lt;td&gt;&amp;nbsp;&lt;/td&gt;
-  &lt;/tr&gt;
-  &lt;tr&gt;
-   &lt;td colspan="6"&gt;&lt;hr&gt;&lt;/td&gt;
-  &lt;/tr&gt;
-  &lt;tr jwcid="@<a href="Foreach.html">Foreach</a>" source="ognl:visit.customerList" value="ognl:customer" element=&quot;tr&quot;&gt;
-   &lt;td&gt;&lt;span jwcid="@<a href="Insert.html">Insert</a>" value="ognl:customer.id"/&gt;&lt;/td&gt;
-   &lt;td&gt;&amp;nbsp;&lt;/td&gt;
-   &lt;td&gt;&lt;a jwcid="<span class="jwcid">@<a href="DirectLink.html">DirectLink</a></span>" listener="ognl:listeners.customerSelectAction" parameters="ognl:customer.id"&gt; &lt;span jwcid="@<a href="Insert.html">Insert</a>" value="ognl:customer.fullName"/&gt; &lt;/a&gt;&lt;/td&gt;
-   &lt;td&gt;&amp;nbsp;&lt;/td&gt;
-   &lt;td&gt;&lt;span jwcid="@<a href="Insert.html">Insert</a>" value="ognl:customer.memberLevel"/&gt;&lt;/td&gt;
-   &lt;td&gt;
-    &lt;a jwcid="<span class="jwcid">@<a href="DirectLink.html">DirectLink</a></span>" listener="ognl:listeners.customerDeleteAction" parameters="ognl:customer.id" onclick="return window.confirm('Are you sure you want remove this customer?');"&gt; 
-     &lt;img jwcid="@<a href="Image.html">Image</a>" image="ognl:assets.deleteImage" alt="Delete"/&gt; 
-    &lt;/a&gt;
-   &lt;/td&gt;
-  &lt;/tr&gt;
-&lt;/table&gt;
-
-
-&lt;property-specification name=&quot;customer&quot; type=&quot;com.mycorp.Customer&quot;/&gt;<br>&lt;private-asset name="deleteImage" resource-path="/com/mycorp/delete.gif"/&gt;
-
-
-package com.mycorp; 
-
-public abstract class SalesPage extends BasePage {
-    public void customerSelectAction(IRequestCycle cycle) {
-        Visit visit = (Visit) getVisit();        
-        Object[] parameters = cycle.getServiceParameters();
-        Customer customer = visit.findCustomerByPrimaryKey((Integer) parameters[0]);
-        // Perform some action with the selected customer.
-        ..
-    }
-
-    public void customerDeleteAction(IRequestCycle cycle) {
-        Visit visit = (Visit) getVisit();        
-        Object[] parameters = cycle.getServiceParameters();
-        Customer customer = visit.findCustomerByPrimaryKey((Integer) parameters[0]);
-        visit.deleteCustomer(customer);
-    }
-}
-
-public class Visit() implements Serializable {
-
-    public List getCustomerList() {
-        List customerList = new ArrayList();         
-        // Perform a database query retrieving the list of customers.
-        ..        
-        return customerList; 
-    }
-    
-    public Customer findCustomerByPrimaryKey(Integer id) {
-        Customer customer = null;         
-        // Retrieve the customer from the database with given the customer ID.
-        ..
-        return customer; 
-    }
-    
-    public void deleteCustomer(Customer customer) {
-        // Delete customer from the database.
-        ..       
-    }        	 
-}
-
-public class Customer implements Serializable {
-    private Integer id;
-    private String fullName;
-    private String memberLevel;
-
-    public Customer(Integer id, String fullName, String memberLevel) { 
-        this.id = id;
-        this.fullName = fullName;
-        this.memberLevel = memberLevel; 
-    }
-
-    public Integer getId() { return id; }
-		
-    public String getFullName() { return fullName; }
-
-    public String getMemberLevel() { return memberLevel; }
-}
-</pre>      
-          </td>
-        </tr></table>
-</td></tr>
-<tr>
- <td colspan="3"><hr></td>
-</tr>
-<tr>
- <td align="left"><A href="Delegator.html"><IMG alt=Delegator src="common-images/prev.png"></A></td>  
- <td align="middle"><A href="index.html"><IMG alt="Component Index" src="common-images/home.png" ></A></td>  
- <td align="right"><A href="ExceptionDisplay.html"><IMG alt=ExceptionDisplay src="common-images/next.png"></A></td>  
-</tr>
-</table>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/3.0.4/doc/src/ComponentReference/ExceptionDisplay.html b/3.0.4/doc/src/ComponentReference/ExceptionDisplay.html
deleted file mode 100644
index f9f7b00..0000000
--- a/3.0.4/doc/src/ComponentReference/ExceptionDisplay.html
+++ /dev/null
@@ -1,118 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<!-- $Id$ --> 
-<html>
-<head>
-<title>ExceptionDisplay</title>
-<link rel="stylesheet" type="text/css" href="Tapestry.css" title="style">
-</head>
-
-<body>
-<table border="0" cellpadding="0" cellspacing="0" width="100%">
- <tr>
-  <td align="left"><A href="DirectLink.html"><IMG alt=DirectLink src="common-images/prev.png"></a></td>  
-  <td align="middle"><A href="index.html"><IMG alt="Component Index" src="common-images/home.png" ></a></td>  
-  <td align="right"><A href="ExternalLink.html"><IMG alt="ExternalLink" src="common-images/next.png"></a></td>  
- <tr>
- <tr>
-  <td colspan="3"><hr></td>  
- </tr>
- <tr>
-  <td colspan="3">
-   <table border="0" cellpadding="4" cellspacing="4" width="100%">
-
-<tr valign="top">
- <td>
-  <table>
-	 <tr>
-	  <td><font size="+2"><b>ExceptionDisplay</b></font></td>
-	 </tr>
-	 <tr>
-	  <td>
-		 <A href="../api/org/apache/tapestry/html/ExceptionDisplay.html">org.apache.tapestry.html.ExceptionDisplay</a>
-		</td>
-	 </tr>
-  </table>
- </td>
- <td>
-  <table align="right" valign="middle" bgcolor="#c0c0c0" cellpadding="8">
-	 <tr>
-	  <td>Visual / Non Visual Component</td>
-	 </tr>
-  </table>
- </td>
-</tr>
-
-<tr valign="center">
- <td colspan="2">&nbsp;</td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Description</b>
-	<br>
-  A 
-            component used on
-  the standard exception page to render a detailed list of exceptions. 
- </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>See Also</b>
-	<br>
-            <A href="contrib.InspectorButton.html">contrib:InspectorButton</a> </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Parameters</b>
-	<br>
-  <table border="1" cellpadding="4" cellspacing="4" class="parameters">
-  <tr> 
-    <th>Name</th>
-    <th>Type</th>
-	  <th>Direction</th>
-    <th>Required</th> 
-    <th>Default</th>
-    <th>Description</th>
-  </tr>
-  <tr>
-    <td>exceptions</td>
-    <td>
-     <A href="../api/org/apache/tapestry/util/exception/ExceptionDescription.html">
-     <tt>ExceptionDescription</tt></a>[]
-    </td>
-    <td>in</td>
-   	<td>yes</td>
-		<td>&nbsp;</td>
-		<td>Provides the exception descriptions to render</td>
-	</tr>
-	</table>
-  <P>Body: <STRONG>removed</STRONG><BR>
-  Informal parameters:<STRONG>forbidden</STRONG><br>
-  Reserved parameters: <EM>none</EM> 
-  </P>    
- </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Examples</b>
-	<p>
-  This example is under construction.</p>
-      
-
- </td></tr></table>
-</td></tr>
-<tr>
- <td colspan="3"><hr></td>  
-</tr>
-<tr>
- <td align="left"><A href="DirectLink.html"><IMG alt=DirectLink src="common-images/prev.png"></a></td>  
- <td align="middle"><A href="index.html"><IMG alt="Component Index" src="common-images/home.png" ></a></td>  
-  <td align="right"><A href="ExternalLink.html"><IMG alt="ExternalLink" src="common-images/next.png"></a></td>  
-</tr>
-</table>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/3.0.4/doc/src/ComponentReference/ExternalLink.html b/3.0.4/doc/src/ComponentReference/ExternalLink.html
deleted file mode 100644
index d15e719..0000000
--- a/3.0.4/doc/src/ComponentReference/ExternalLink.html
+++ /dev/null
@@ -1,167 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<!-- $Id$ --> 
-<html>
-<head>
-<title>ExternalLink</title>
-<link rel="stylesheet" type="text/css" href="Tapestry.css" title="style">
-</head>
-
-<body>
-<table border="0" cellpadding="0" cellspacing="0" width="100%">
- <tr>
-  <td align="left"><A href="ExceptionDisplay.html"><IMG alt="ExceptionDisplay" src="common-images/prev.png"></A></td>  
-  <td align="middle"><A href="index.html"><IMG alt="Component Index" src="common-images/home.png" ></A></td>  
-  <td align="right"><A href="FieldLabel.html"><IMG alt="FieldLabel" src="common-images/next.png"></A></td>  
- <tr>
- <tr>
-  <td colspan="3"><hr></td>  
- </tr>
- <tr>
-  <td colspan="3">
-   <table border="0" cellpadding="4" cellspacing="4" width="100%">
-
-<tr valign="top">
- <td>
-  <table>
-	 <tr>
-	  <td><font size="+2"><b>ExternalLink</b></font></td>
-	 </tr>
-	 <tr>
-	  <td>
-		 <A href="../api/org/apache/tapestry/link/ExternalLink.html">
-		 org.apache.tapestry.link.ExternalLink</A>
-		</td>
-	 </tr>
-  </table>
- </td>
- <td>
-  <table align="right" valign="middle" bgcolor="#c0c0c0" cellpadding="8">
-	 <tr>
-	  <td><A href="ExternalLink.html"><font color="blue">External Link</font></A></td>
-	 </tr>
-  </table>
- </td>
-</tr>
-
-<tr valign="center">
- <td colspan="2">&nbsp;</td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Description</b>
-	<br>
-  Creates a &lt;a&gt; hyperlink to an 
-  <a href="../api/org/apache/tapestry/IExternalPage.html"><tt>IExternalPage</tt></a>
-  which may be book marked using the hyperlink's URL.  
-  <p>
- </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>See Also</b>
-	<br>
-	<a href="ActionLink.html">ActionLink</a>, 
-  <A href="DirectLink.html">DirectLink</A>,
-  <A href="GenericLink.html">GenericLink</A>,
-  <a href="PageLink.html">PageLink</a>,
-  <a href="ServiceLink.html">ServiceLink</a>
- </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Parameters</b>
-	<br>
-  <table border="1" cellpadding="4" cellspacing="4" class="parameters">
-  <tr> 
-    <th>Name</th>
-    <th>Type</th>
-	  <th>Direction</th>
-    <th>Required</th> 
-    <th>Default</th>
-    <th>Description</th>
-  </tr>
-  <tr>
-    <td>page</td>
-    <td>String</td>
-    <td>in</td>
-   	<td>yes</td>
-		<td>&nbsp;</td>
-		<td>The name of a application page to link to.</td>
-	</tr>
-  <tr>
-    <td>parameters</td>
-    <td>Object or<br>
-        Object[] or<br> 
-     <a href="http://java.sun.com/products/jdk/1.2/docs/api/java/util/List.html">
-     <tt>List</tt></a>    
-    </td>
-    <td>in</td>
-   	<td>no</td>
-		<td>&nbsp;</td>
-		        <td> An array of objects to be encoded into the URL. These parameters 
-                  will be passed to <A href="../api/org/apache/tapestry/IExternalPage.html#activateExternalPage(Object%5B%5D,%20IRequestCycle)"> 
-                  <tt>IExternalPage.activateExternalPage()</tt></a> method. </td>
-	</tr>
-  <tr>
-    <td>disabled</td>
-    <td>boolean</td>
-    <td>in</td>
-   	<td>no</td>
-		<td>false</td>
-		<td>Controls whether the link is produced. If disabled, the portion of the 
-    template the link surrounds is still rendered, but not the link itself.
-    </td>
-	</tr>
-	  <tr>
-    <td>anchor</td>
-    <td>String</td>
-    <td>in</td>
-   	<td>no</td>
-		<td>&nbsp;</td>
-		<td>
-    The name of an anchor or element to link to. The final URL will have '#' 
-    and the anchor appended to it.
-    </td>
-	</tr>
-	<tr>
-		<td>renderer</td>
-		<td><a href="../api/org/apache/tapestry/link/ILinkRenderer.html">ILinkRenderer</a></td>
-		<td>in</td>
-		<td>no</td>
-		<td>&nbsp;</td>
-		<td>
-		The object which will actually render the link.
-			</td>
-	</tr>	
-	</table>
-  <P>Body: <STRONG>rendered</STRONG><BR>
-  Informal parameters:<STRONG>allowed</STRONG>
-  <br>Reserved parameters: "href" 
-  </P>    
- </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Examples</b>
-	<p>
-  This example is under construction.</p>
-
-
- </td></tr></table>
-</td></tr>
-<tr>
- <td colspan="3"><hr></td>
-</tr>
-<tr>
- <td align="left"><A href="ExceptionDisplay.html"><IMG alt="ExceptionDisplay" src="common-images/prev.png"></A></td>  
- <td align="middle"><A href="index.html"><IMG alt="Component Index" src="common-images/home.png" ></A></td>  
- <td align="right"><A href="FieldLabel.html"><IMG alt="FieldLabel" src="common-images/next.png"></A></td>  
-</tr>
-</table>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/3.0.4/doc/src/ComponentReference/FieldLabel.html b/3.0.4/doc/src/ComponentReference/FieldLabel.html
deleted file mode 100644
index e87f0d0..0000000
--- a/3.0.4/doc/src/ComponentReference/FieldLabel.html
+++ /dev/null
@@ -1,153 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<!-- $Id$ --> 
-<html>
-<head>
-<title>FieldLabel</title>
-<link rel="stylesheet" type="text/css" href="Tapestry.css" title="style">
-</head>
-
-<body>
-<table border="0" cellpadding="0" cellspacing="0" width="100%">
- <tr>
-  <td align="left"><A href="ExternalLink.html"><IMG alt="ExternalLink" src="common-images/prev.png"></a></td>  
-  <td align="middle"><A href="index.html"><IMG alt="Component Index" src="common-images/home.png" ></a></td>  
-  <td align="right"><A href="Foreach.html"><IMG alt=Foreach src="common-images/next.png"></a></td>  
- <tr>
- <tr>
-  <td colspan="3"><hr></td>  
- </tr>
- <tr>
-  <td colspan="3">
-   <table border="0" cellpadding="4" cellspacing="4" width="100%">
-
-<tr valign="top">
- <td>
-  <table>
-	 <tr>
-	  <td><font size="+2"><b>FieldLabel</b></font></td>
-	 </tr>
-	 <tr>
-	  <td>
-		 <A href="../api/org/apache/tapestry/valid/FieldLabel.html">org.apache.tapestry.valid.FieldLabel</a>
-		</td>
-	 </tr>
-  </table>
- </td>
- <td>
-  <table align="right" valign="middle" bgcolor="#c0c0c0" cellpadding="8">
-	 <tr>
-	  <td><b>Field Label</b>&nbsp;<input size="10" 
-             ></td>
-	 </tr>
-  </table>
- </td>
-</tr>
-
-<tr valign="center">
- <td colspan="2">&nbsp;</td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Description</b>
-	<br>
-  A component, used with a <A href="ValidField.html">ValidField</a> that 
-  provides the label for the field.
-  <p>
-  A <A href="../api/org/apache/tapestry/valid/IValidationDelegate.html">delegate</a> 
-  object may be specified that will change the visual formatting of the label 
-  to reflect the state of the field, for instance, to make the label red when 
-  the field itself is in error.
-  <p>
-  This component may NOT wrap around other 
-            components or static HTML.</p>
-             
- </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>See Also</b>
-	<br>
-	<A href="Form.html">Form</a>, 
-	<A href="ValidField.html">ValidField</a> 
- </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Parameters</b>
-	<br>
-  <table border="1" cellpadding="4" cellspacing="4" class="parameters">
-  <tr> 
-    <th>Name</th>
-    <th>Type</th>
-	  <th>Direction</th>
-    <th>Required</th> 
-    <th>Default</th>
-    <th>Description</th>
-  </tr>
-  <tr>
-    <td>field</td>
-    <td><A href="../api/org/apache/tapestry/form/IFormComponent.html"><tt>IFormComponent</tt></a></td>
-    <td>in</td>
-   	<td>yes</td>
-		<td>&nbsp;</td>
-		<td>The component to be labeled.
-    </td>
-	</tr>
-  <tr>
-    <td>displayName</td>
-    <td>String</td>
-    <td>in</td>
-   	<td>no</td>
-		<td>&nbsp;</td>
-		<td>
-    Allows the display name to be overriden from the value supplied by 
-    the <tt>IFormComponent</tt>. Most implementations of <tt>IFormComponent</tt> 
-    provide a null displayName, and it is necessary to set one using this 
-    parameter. 
-    </td>
-	</tr>
-  <tr>
-    <td>raw</td>
-    <td>boolean</td>
-    <td>in</td>
-   	<td>no</td>
-		<td>false</td>
-    <td>
-        If false (the default), then HTML characters in the value are escaped.  If
-        true, then value is emitted exactly as is.
-    </td>
-	</tr>
-	</table>
-            <P>Body: <STRONG>removed</STRONG><BR>Informal parameters: 
-            <STRONG>forbidden</STRONG>
-     <br>
-  Reserved 
-            parameters: <EM>none</EM> </P>
-    
- </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Examples</b>
-	<p>
-  Please see the documentation for the <A href="ValidField.html">ValidField</a> component.</p>
-      
-
- </td></tr></table>
-</td></tr>
-<tr>
- <td colspan="3"><hr></td>  
-</tr>
-<tr>
-  <td align="left"><A href="ExternalLink.html"><IMG alt="ExternalLink" src="common-images/prev.png"></a></td>  
- <td align="middle"><A href="index.html"><IMG alt="Component Index" src="common-images/home.png" ></a></td>  
- <td align="right"><A href="Foreach.html"><IMG alt=Foreach src="common-images/next.png"></a></td>  
-</tr>
-</table>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/3.0.4/doc/src/ComponentReference/Foreach.html b/3.0.4/doc/src/ComponentReference/Foreach.html
deleted file mode 100644
index a641555..0000000
--- a/3.0.4/doc/src/ComponentReference/Foreach.html
+++ /dev/null
@@ -1,255 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<!-- $Id$ --> 
-<html>
-<head>
-<title>Foreach</title>
-<link rel="stylesheet" type="text/css" href="Tapestry.css" title="style">
-</head>
-
-<body>
-<table border="0" cellpadding="0" cellspacing="0" width="100%">
- <tr>
-  <td align="left"><A href="FieldLabel.html"><IMG alt=FieldLabel src="common-images/prev.png"></a></td>  
-  <td align="middle"><A href="index.html"><IMG alt="Component Index" src="common-images/home.png" ></a></td>  
-  <td align="right"><A href="Form.html"><IMG alt=Form src="common-images/next.png"></a></td>  
- <tr>
- <tr>
-  <td colspan="3"><hr></td>  
- </tr>
- <tr>
-  <td colspan="3">
-   <table border="0" cellpadding="4" cellspacing="4" width="100%">
-
-<tr valign="top">
- <td>
-  <table>
-	 <tr>
-	  <td><font size="+2"><b>Foreach</b></font></td>
-	 </tr>
-	 <tr>
-	  <td>
-		 <A href="../api/org/apache/tapestry/components/Foreach.html">
-		 org.apache.tapestry.components.Foreach</a>
-		</td>
-	 </tr>
-  </table>
- </td>
- <td>
-  <table align="right" valign="middle" bgcolor="#c0c0c0" cellpadding="8">
-	 <tr>
-	  <td>Non Visual Component</td>
-	 </tr>
-  </table>
- </td>
-</tr>
-
-<tr valign="center">
- <td colspan="2">&nbsp;</td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Description</b>
-	<br>
-  A component that loops through a set of values, setting a property for each 
-	value before rendering its wrapped elements. The <A href="ListEdit.html">
-	ListEdit</a> component is often more useful if the items are inside a 
-	<A href="Form.html">Form</a>
-             . 
- </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>See Also</b>
-	<br>
-  <A href="Conditional.html">Conditional</a>,
-	<A href="Insert.html">Insert</a>, 
-  <A href="ListEdit.html">ListEdit</a>
- </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Parameters</b>
-	<br>
-  <table border="1" cellpadding="4" cellspacing="4" class="parameters">
-  <tr> 
-    <th>Name</th>
-    <th>Type</th>
-	  <th>Direction</th>
-    <th>Required</th> 
-    <th>Default</th>
-    <th>Description</th>
-  </tr>
-  <tr>
-    <td>source</td>
-    <td>
-		<a href="http://java.sun.com/products/jdk/1.2/docs/api/java/util/Iterator.html"><tt>Iterator</tt></a>, 
-		<a href="http://java.sun.com/products/jdk/1.2/docs/api/java/util/Collection.html"><tt>Collection</tt></a>, 
-		<tt>Object[]</tt>, or
-		<tt>Object</tt>
-		</td>
-    <td>in</td>
-   	<td>yes</td>
-		<td>&nbsp;</td>
-		<td>The source of objects to be iterated, which may be a Collection, an 
-		Iterator, an array of Objects, or a even a single Object (which is treated as a 
-		singleton collection).  
-		
-		<p>The source parameter may even be null, 
-                  in which case the Foreach's body is never renderred.</p>          
-		    
-		</td>
-	</tr>
-  <tr>
- 		<td>value</td>
-		<td>Object</td>
-		<td>out</td>
-		<td>no</td>
-		<td>&nbsp;</td>
-		<td>Used to update the current value on each iteration. 
-		</td>
-	</tr>
-  <tr>
- 		<td>index</td>
-		<td>int</td>
-		<td>out</td>
-		<td>no</td>
-		<td>&nbsp;</td>
-		<td>Used to store the index of the current value within the stream of 
-		elements provided by the source parameter. The index parameter is 
-		explicitly updated <i>before</i> the value parameter. 		
-    </td>
-	</tr>
-  <tr>
- 		<td>element</td>
-		<td>String</td>
-		<td>in</td>
-		<td>no</td>
-		<td>&nbsp;</td>
-		<td>If specified, then the component acts like an <A href="Any.html">Any</a>, 
-		emitting an open and close tag before and after each iteration. Most often, 
-		the element is "tr" when the Foreach is part of an HTML table. Any informal 
-		parameters are applied to the tag. If no element is specified, informal 
-		parameters are ignored. 		
-    </td>
-	</tr>
-	</table>
-  <P>Body: <STRONG>rendered</STRONG><BR>
-  Informal parameters: <STRONG>allowed</STRONG><br>
-  Reserved parameters: <EM>none</EM> 
-  </P>    
- </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Examples</b>
-	<p>
-	The Foreach component is used to generate a table from a Customer List.
-	<p>
-
-<table class="examples" cellspacing="6">
-  <tr align="left">
-   <th>ID</th>
-   <th>&nbsp;</th>
-   <th>Name</th>
-   <th>&nbsp;</th>
-   <th>Level</th>
-  </tr>
-  <tr>
-   <td colspan="5"><hr></td>
-  </tr>
-  <tr>
-   <td>10276</td>
-   <td>&nbsp;</td>
-   <td>Ms Sophie L. Jamies</td>
-   <td>&nbsp;</td>
-   <td>Platinum</td>
-  </tr>
-  <tr>
-   <td>10539</td>
-   <td>&nbsp;</td>
-   <td>Mr Albert H. Davies</td>
-   <td>&nbsp;</td>
-   <td>Gold</td>
-  </tr>
-  <tr>
-   <td>10552</td>
-   <td>&nbsp;</td>
-   <td>Mrs Jan S. Flawson</td>
-   <td>&nbsp;</td>
-   <td>Gold</td>
-  </tr>
-  <tr>
-   <td>10863</td>
-   <td>&nbsp;</td>
-   <td>Mr Robert J. Hassel</td>
-   <td>&nbsp;</td>
-   <td>Silver</td>
-  </tr>
-</table>
-
-            <pre>
-&lt;table cellspacing="6"&gt;
-  &lt;tr&gt;
-   &lt;td&gt;ID&lt;/td&gt;
-   &lt;td&gt;&amp;nbsp;&lt;/td&gt;
-   &lt;td&gt;Name&lt;/td&gt;
-   &lt;td&gt;&amp;nbsp;&lt;/td&gt;
-   &lt;td&gt;Level&lt;/td&gt;
-  &lt;/tr&gt;
-  &lt;tr&gt;
-   &lt;td colspan="5"&gt;&lt;hr&gt;&lt;/td&gt;
-  &lt;/tr&gt;
-  &lt;tr jwcid="<span class="jwcid">@<a href="Foreach.html">Foreach</a></span>" source="ognl:customerList" value="ognl:customer" element=&quot;tr&quot;&gt;
-   &lt;td&gt;&lt;span jwcid="@<a href="Insert.html">Insert</a>" value="ognl:customer.id"/&gt;&lt;/td&gt;
-   &lt;td&gt;&amp;nbsp;&lt;/td&gt;
-   &lt;td&gt;&lt;span jwcid="@<a href="Insert.html">Insert</a>" value="ognl:customer.fullName"/&gt;&lt;/td&gt;
-   &lt;td&gt;&amp;nbsp;&lt;/td&gt;
-   &lt;td&gt;&lt;span jwcid="@<a href="Insert.html">Insert</a>" value="ognl:customer.memberLevel"/&gt;&lt;/td&gt;
-  &lt;/tr&gt;
-&lt;/table&gt;
-
-
-&lt;property-specification name=&quot;customerList&quot; type=&quot;java.util.List&quot; persistent=&quot;yes&quot;/&gt;<br>&lt;property-specification name=&quot;customer&quot; type=&quot;Customer&quot;/&gt;<br>
-public abstract class SalesPage extends BasePage {
-    public abstract List getCustomerList();
-	 
-    public abstract void setCustomerList(List value);
-}
-
-public class Customer implements Serializable {
-    private Integer id;
-    private String fullName;
-    private String memberLevel;
-
-    public Customer(Integer id, String fullName, String memberLevel) { 
-        this.id = id;
-        this.fullName = fullName;
-        this.memberLevel = memberLevel; 
-    }
-
-    public Integer getId() { return id; }
-		
-    public String getFullName() { return fullName; }
-
-    public String getMemberLevel() { return memberLevel; }
-}
-</pre>
-          </td>
-        </tr></table>
-</td></tr>
-<tr>
- <td colspan="3"><hr></td>  
-</tr>
-<tr>
- <td align="left"><A href="FieldLabel.html"><IMG alt=FieldLabel src="common-images/prev.png"></a></td>  
- <td align="middle"><A href="index.html"><IMG alt="Component Index" src="common-images/home.png" ></a></td>  
- <td align="right"><A href="Form.html"><IMG alt=Form src="common-images/next.png"></a></td>  
-</tr>
-</table>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/3.0.4/doc/src/ComponentReference/Form.html b/3.0.4/doc/src/ComponentReference/Form.html
deleted file mode 100644
index c363b35..0000000
--- a/3.0.4/doc/src/ComponentReference/Form.html
+++ /dev/null
@@ -1,255 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<!-- $Id$ --> 
-<html>
-<head>
-<title>Form</title>
-<link rel="stylesheet" type="text/css" href="Tapestry.css" title="style">
-</head>
-
-<body>
-<table border="0" cellpadding="0" cellspacing="0" width="100%">
- <tr>
-  <td align="left"><A href="Foreach.html"><IMG alt=Foreach src="common-images/prev.png"></a></td>  
-  <td align="middle"><A href="index.html"><IMG alt="Component Index" src="common-images/home.png" ></a></td>  
-  <td align="right"><A href="Frame.html"><IMG alt=Frame src="common-images/next.png"></a></td>  
- <tr>
- <tr>
-  <td colspan="3"><hr></td>  
- </tr>
- <tr>
-  <td colspan="3">
-   <table border="0" cellpadding="4" cellspacing="4" width="100%">
-
-<tr valign="top">
- <td>
-  <table>
-	 <tr>
-	  <td><font size="+2"><b>Form</b></font></td>
-	 </tr>
-	 <tr>
-	  <td>
-		 <A href="../api/org/apache/tapestry/form/Form.html">
-		 org.apache.tapestry.form.Form</a>
-		</td>
-	 </tr>
-  </table>
- </td>
- <td>
-  <table align="right" valign="middle" bgcolor="#c0c0c0" cellpadding="8">
-	 <tr>
-	  <td>Non Visual Component</td>
-	 </tr>
-  </table>
- </td>
-</tr>
-
-<tr valign="center">
- <td colspan="2">&nbsp;</td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Description</b>
-	<br>
-  A component that manages a HTML &lt;form&gt;. The other form-related 
-	components must be wrapped inside the Form.
-	<p>
-  When a form is submitted, it continues 
-            through the rewind cycle until after all of its wrapped elements 
-            have renderred. As the form component render (in the rewind cycle), 
-            they will be updating properties of the containing page and 
-            notifying thier listeners. Again: each form component is responsible 
-            not only for rendering HTML (to present the form), but for handling 
-            it's share of the form submission. Only after all that is done will 
-            the Form notify its listener.</p>
-            
- </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>See Also</b>
-	<br>
-	<A href="Button.html">Button</A>, 
-	<A href="Checkbox.html">Checkbox</a>, 
-	<A href="FieldLabel.html">FieldLabel</a>, 
-	<A href="Hidden.html">Hidden</a>, 
-	<A href="ImageSubmit.html">ImageSubmit</a>, 
-	<A href="ListEdit.html">ListEdit</a>, 
-	<A href="Option.html">Option</a>, 
-	<A href="PropertySelection.html">PropertySelection</a>, 
-	<A href="Radio.html">Radio</a>, 
-	<A href="RadioGroup.html">RadioGroup</a>, 
-	<A href="Submit.html">Submit</a>, 
-	<a href="TextArea.html">TextArea</a>,  
-	<A href="TextField.html">TextField</a>, 
-	<A href="Upload.html">Upload</a>,
-  <A href="ValidField.html">ValidField</a>
- </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Parameters</b>
-	<br>
-  <table border="1" cellpadding="4" cellspacing="4" class="parameters">
-  <tr> 
-    <th>Name</th>
-    <th>Type</th>
-	  <th>Direction</th>
-    <th>Required</th> 
-    <th>Default</th>
-    <th>Description</th>
-  </tr>
-  <tr>
- 		<td>listener</td>
-		<td>
-		 <A href="../api/org/apache/tapestry/IActionListener.html"><tt>IActionListener</tt></a>
-		</td>
-		<td>in</td>
-		<td>no</td>
-		<td>&nbsp;</td>
-		<td>The listener, informed <u>after</u> the wrapped components of the form 
-		have had a chance to process their portion the request.
-		</td>
-	</tr>
-  <tr>
-    <td>delegate</td>
-    <td><A href="../api/org/apache/tapestry/valid/IValidationDelegate.html"><tt>IValidationDelegate</tt></a>
-		</td>
-    <td>in</td>
-   	<td>no</td>
-		<td>&nbsp;</td>
-		<td>Object used to assist in error tracking and reporting. A single 
-		instance is shared by all <a href="ValidField.html">ValidField</a> and 
-		<a href="FieldLabel.html">FieldLabel</a> comopnents within a single form. 
-		</td>
-	</tr>
-  <tr>
-    <td>stateful</td>
-    <td>boolean</td>
-    <td>in</td>
-   	<td>no</td>
-		<td>true</td>
-		<td>If true (the default), then the component requires an active 
-		(i.e., non-new) HttpSession when triggered. Failing that, it throws a 
-		<A href="../api/org/apache/tapestry/StaleLinkException.html"><tt>StaleLinkException</tt></a>. 
-		If false, then no check is necessary. 
-		Generally, forms are stateful, but it is possible to put a stateless form 
-		onto the Home page of an application.
-		</td>
-	</tr>
-  <tr>
-    <td>direct</td>
-    <td>boolean</td>
-    <td>in</td>
-   	<td>no</td>
-		<td>true</td>
-		<td>If true (the default), then the direct service is used for the form. 
-		This decreases the amount of work required to process the form submission, 
-		and is acceptible for most forms, even those that contain Foreaches (but 
-		not those that are inside a Foreach). An abbreviated form of the rewind 
-		cycle takes place, that only references the form and the components it wraps. 
-		</td>
-	</tr>
-  <tr>
-    <td>method</td>
-    <td>String</td>
-    <td>in</td>
-   	<td>no</td>
-		<td>POST</td>
-		<td>The value to use for the method attribute of the &lt;form&gt; tag.
-		</td>
-	</tr>
-	</table>
-            <P>Body: <STRONG>rendered</STRONG><BR>Informal parameters: 
-            <STRONG>allowed</STRONG>		
-    <br>
-  Reserved 
-            parameters: <EM>none</EM> </P>
-    
- </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Examples</b>
-	<p>
-	The Form component is used to provide a simple login page.
-	<p>
-
-<table class="examples" cellpadding="4">
-<form>
- <tr>
-  <td>Username:</td><td><input size="12"></td>
- </tr>
- <tr>
-  <td>Password:</td><td><input type="password" size="12"></td>
- </tr>
- <tr align="right">
-  <td colspan="2"><input type="submit" value="Login"></td>
- </tr>
-</form>
-</table>
-
-<pre>
-&lt;form jwcid="<span class="jwcid">@<a href="Form.html">Form</a></span>" listener="ognl:listeners.formSubmit"&gt;
- &lt;table cellpadding="4"&gt;
-   &lt;tr&gt;&lt;td&gt;Username:&lt;/td&gt;&lt;td&gt;&lt;input jwcid="@<a href="TextField.html">TextField</a>" value="ognl:visit.username" size="12"/&gt;&lt;/td&gt;
-  &lt;/tr&gt;
-   &lt;tr&gt;&lt;td&gt;Password:&lt;/td&gt;&lt;td&gt;&lt;input jwcid="@<a href="TextField.html">TextField</a>" value="ognl:visit.password" hidden="ognl:true" size="12"/&gt;&lt;/td&gt;
-  &lt;/tr&gt;
-  &lt;tr align="right"&gt;
-   &lt;td colspan="2"&gt;&lt;input type="submit" value="Login"/&gt;&lt;/td&gt;
-  &lt;/tr&gt;
- &lt;/table&gt;
-&lt;/form&gt;
-
-
-
-public class LoginPage extends BasePage {
-
-    public void formSubmit(IRequestCycle cycle) {
-        Visit visit = (Visit) getVisit();
-			
-        if (visit.isAuthenticated()) {
-            cycle.activate("Home");		
-        } 
-    }
-}
-
-public class Visit() implements Serializable  {
-    private username;
-    private password;
-
-    public getUsername() { return username; }
-
-    public setUsername(String value) { 
-        username = value;
-    }
-
-    public getPassword() { return password; }
-
-    public setPassword(String value) { 
-        password = value;
-    }
-
-    public boolean isAuthenticated() {
-        // Some authentication code.
-        return true;
-    }		
-}
-</pre>
-</td></tr>
-</table></TD></TR>
-<tr>
- <td colspan="3"><hr></td>  
-</tr>
-<tr>
- <td align="left"><A href="Foreach.html"><IMG alt=Foreach src="common-images/prev.png"></a></td>  
- <td align="middle"><A href="index.html"><IMG alt="Component Index" src="common-images/home.png" ></a></td>  
- <td align="right"><A href="Frame.html"><IMG alt=Frame src="common-images/next.png"></a></td>  
-</tr></TABLE>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/3.0.4/doc/src/ComponentReference/Frame.html b/3.0.4/doc/src/ComponentReference/Frame.html
deleted file mode 100644
index 9610578..0000000
--- a/3.0.4/doc/src/ComponentReference/Frame.html
+++ /dev/null
@@ -1,120 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<!-- $Id$ --> 
-<html>
-<head>
-<title>Frame</title>
-<link rel="stylesheet" type="text/css" href="Tapestry.css" title="style">
-</head>
-
-<body>
-<table border="0" cellpadding="0" cellspacing="0" width="100%">
- <tr>
-  <td align="left"><A href="Form.html"><IMG alt=Form src="common-images/prev.png"></a></td>  
-  <td align="middle"><A href="index.html"><IMG alt="Component Index" src="common-images/home.png" ></a></td>  
-  <td align="right"><A href="GenericLink.html"><IMG alt=GenericLink src="common-images/next.png"></a></td>  
- <tr>
- <tr>
-  <td colspan="3"><hr></td>  
- </tr>
- <tr>
-  <td colspan="3">
-   <table border="0" cellpadding="4" cellspacing="4" width="100%">
-
-<tr valign="top">
- <td>
-  <table>
-	 <tr>
-	  <td><font size="+2"><b>Frame</b></font></td>
-	 </tr>
-	 <tr>
-	  <td>
-		 <A href="../api/org/apache/tapestry/html/Frame.html">
-		 org.apache.tapestry.html.Frame</a>
-		</td>
-	 </tr>
-  </table>
- </td>
- <td>
-  <table align="right" valign="middle" bgcolor="#c0c0c0" cellpadding="8">
-	 <tr>
-	  <td>Visual / Non Visual Component</td>
-	 </tr>
-  </table>
- </td>
-</tr>
-
-<tr valign="center">
- <td colspan="2">&nbsp;</td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Description</b>
-	<br>
-  Provides the HTML &lt;frame&gt; element within 
-            a &lt;frameset&gt;,
-  inserting the specified Tapestry page as the content of the frame. 
- </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>See Also</b>
-	<br>
-  <a href="RenderBlock.html">RenderBlock</a>,
-	<a href="RenderBody.html">RenderBody</a> 
- </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Parameters</b>
-	<br>
-  <table border="1" cellpadding="4" cellspacing="4" class="parameters">
-  <tr> 
-    <th>Name</th>
-    <th>Type</th>
-	  <th>Direction</th>
-    <th>Required</th> 
-    <th>Default</th>
-    <th>Description</th>
-  </tr>
-  <tr>
-    <td>page</td>
-    <td>String</td>
-    <td>in</td>
-   	<td>yes</td>
-		<td>&nbsp;</td>
-		<td>The name of the page to display in the frame.</td>
-	</tr>
-	</table>
-            <P>Body: <STRONG>removed</STRONG><BR>Informal parameters: 
-            <STRONG>allowed</STRONG>
-    <br>
-  Reserved 
-            parameters: "src" </P>
-    
- </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Examples</b>
-	<p>
-  This example is under construction.</p>
-      
-
- </td></tr></table>
-</td></tr>
-<tr>
- <td colspan="3"><hr></td>  
-</tr>
-<tr>
- <td align="left"><A href="Form.html"><IMG alt=Form src="common-images/prev.png"></a></td>  
- <td align="middle"><A href="index.html"><IMG alt="Component Index" src="common-images/home.png" ></a></td>  
- <td align="right"><A href="GenericLink.html"><IMG alt=GenericLink src="common-images/next.png"></a></td>  
-</tr>
-</table>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/3.0.4/doc/src/ComponentReference/GenericLink.html b/3.0.4/doc/src/ComponentReference/GenericLink.html
deleted file mode 100644
index a7c3beb..0000000
--- a/3.0.4/doc/src/ComponentReference/GenericLink.html
+++ /dev/null
@@ -1,165 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<!-- $Id$ --> 
-<html>
-<head>
-<title>GenericLink</title>
-<link rel="stylesheet" type="text/css" href="Tapestry.css" title="style">
-</head>
-
-<body>
-<table border="0" cellpadding="0" cellspacing="0" width="100%">
- <tr>
-  <td align="left"><A href="Frame.html"><IMG alt=Frame src="common-images/prev.png"></a></td>  
-  <td align="middle"><A href="index.html"><IMG alt="Component Index" src="common-images/home.png" ></a></td>  
-  <td align="right"><A href="Hidden.html"><IMG alt=Hidden src="common-images/next.png"></a></td>  
- <tr>
- <tr>
-  <td colspan="3"><hr></td>  
- </tr>
- <tr>
-  <td colspan="3">
-   <table border="0" cellpadding="4" cellspacing="4" width="100%">
-
-<tr valign="top">
- <td>
-  <table>
-	 <tr>
-	  <td><font size="+2"><b>GenericLink</b></font></td>
-	 </tr>
-	 <tr>
-	  <td>
-		 <A href="../api/org/apache/tapestry/link/GenericLink.html">
-		 org.apache.tapestry.link.GenericLink</a>
-		</td>
-	 </tr>
-  </table>
- </td>
- <td>
-  <table align="right" valign="middle" bgcolor="#c0c0c0" cellpadding="8">
-	 <tr>
-	  <td><A href="GenericLink.html"><font color="blue">Generic Link</font></a></td>
-	 </tr>
-  </table>
- </td>
-</tr>
-
-<tr valign="center">
- <td colspan="2">&nbsp;</td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Description</b>
-	<br>
-  Creates a HTML &lt;a&gt; hyperlink for an arbitrary URL. 
-  <p>
-  Although a GenericLink can be 
-  accomplished using an <A href="Any.html">Any</a> component, a GenericLink is 
-  more flexible: it can be disabled, like a <A href="DirectLink.html">DirectLink</a> or 
-  <a href="ActionLink.html">ActionLink</a> and can also wrap around 
-  <A href="Rollover.html">Rollover</a> components. GenericLinks 
-            are often used with javascript: URLs to perform client-side 
-            scripting.</p>
-            
- </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>See Also</b>
-	<br>
-	<a href="ActionLink.html">ActionLink</a>, 
-  <A href="DirectLink.html">DirectLink</a>,
-	<A href="ExternalLink.html">ExternalLink</a>, 
-  <a href="PageLink.html">PageLink</a>,
-  <A href="Rollover.html">Rollover</a>,
-  <a href="ServiceLink.html">ServiceLink</a>
- </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Parameters</b>
-	<br>
-  <table border="1" cellpadding="4" cellspacing="4" class="parameters">
-  <tr> 
-    <th>Name</th>
-    <th>Type</th>
-	  <th>Direction</th>
-    <th>Required</th> 
-    <th>Default</th>
-    <th>Description</th>
-  </tr>
-  <tr>
-    <td>href</td>
-    <td>String</td>
-    <td>in</td>
-   	<td>yes</td>
-		<td>&nbsp;</td>
-		<td>The URL to trigger when the link is clicked. This is often of the form:
-    <br>&lt;a href="javascript:functionName('param')"&gt;
-    </td>
-	</tr>
-  <tr>
-    <td>disabled</td>
-    <td>boolean</td>
-    <td>in</td>
-   	<td>no</td>
-		<td>false</td>
-		<td>Controls whether the link is produced. If disabled, the portion of the 
-    template the link surrounds is still rendered, but not the link itself.</td>
-	</tr>
-	
-  <tr>
-    <td>anchor</td>
-    <td>String</td>
-    <td>in</td>
-   	<td>no</td>
-		<td>&nbsp;</td>
-		<td>
-    The name of an anchor or element to link to. The final URL will have '#' 
-    and the anchor appended to it.
-    </td>
-	</tr>
-	
-	<tr>
-		<td>renderer</td>
-		<td><a href="../api/org/apache/tapestry/link/ILinkRenderer.html">ILinkRenderer</a></td>
-		<td>in</td>
-		<td>no</td>
-		<td>&nbsp;</td>
-		<td>
-		The object which will actually render the link.
-			</td>
-	</tr>	
-	</table>
-            <P>Body: <STRONG>rendered</STRONG><BR>Informal parameters: 
-            <STRONG>allowed</STRONG>
-    <br>
-  Reserved 
-            parameters: <EM>none</EM> </P>
-    
- </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Examples</b>
-	<p>
-  This example is under construction.</p>
-      
-  
- </td></tr></table>
-</td></tr>
-<tr>
- <td colspan="3"><hr></td>  
-</tr>
-<tr>
- <td align="left"><A href="Frame.html"><IMG alt=Frame src="common-images/prev.png"></a></td>  
- <td align="middle"><A href="index.html"><IMG alt="Component Index" src="common-images/home.png" ></a></td>  
- <td align="right"><A href="Hidden.html"><IMG alt=Hidden src="common-images/next.png"></a></td>  
-</tr>
-</table>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/3.0.4/doc/src/ComponentReference/Hidden.html b/3.0.4/doc/src/ComponentReference/Hidden.html
deleted file mode 100644
index 7d33d47..0000000
--- a/3.0.4/doc/src/ComponentReference/Hidden.html
+++ /dev/null
@@ -1,174 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<!-- $Id$ --> 
-<html>
-<head>
-<title>Hidden</title>
-<link rel="stylesheet" type="text/css" href="Tapestry.css" title="style">
-</head>
-
-<body>
-<table border="0" cellpadding="0" cellspacing="0" width="100%">
- <tr>
-  <td align="left"><A href="GenericLink.html"><IMG alt=GenericLink src="common-images/prev.png"></a></td>  
-  <td align="middle"><A href="index.html"><IMG alt="Component Index" src="common-images/home.png" ></a></td>  
-  <td align="right"><A href="Image.html"><IMG alt=Image src="common-images/next.png"></a></td>  
- <tr>
- <tr>
-  <td colspan="3"><hr></td>  
- </tr>
- <tr>
-  <td colspan="3">
-   <table border="0" cellpadding="4" cellspacing="4" width="100%">
-
-<tr valign="top">
- <td>
-  <table>
-	 <tr>
-	  <td><font size="+2"><b>Hidden</b></font></td>
-	 </tr>
-	 <tr>
-	  <td>
-		 <A href="../api/org/apache/tapestry/form/Hidden.html">
-		 org.apache.tapestry.form.Hidden</a>
-		</td>
-	 </tr>
-  </table>
- </td>
- <td>
-  <table align="right" valign="middle" bgcolor="#c0c0c0" cellpadding="8">
-	 <tr>
-	  <td>Non Visual Component</td>
-	 </tr>
-  </table>
- </td>
-</tr>
-
-<tr valign="center">
- <td colspan="2">&nbsp;</td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Description</b>
-	<br>
-  Adds a hidden HTML &lt;input type="hidden"&gt; field to a <A href="Form.html">
-  Form</a>. This is often used to 
-            synchronize data when the
-  form is submitted with values known when the page was rendered. 
- </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>See Also</b>
-	<br>
-	<A href="Form.html">Form</a>, 
-	<A href="ListEdit.html">ListEdit</a> 
- </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Parameters</b>
-	<br>
-  <table border="1" cellpadding="4" cellspacing="4" class="parameters">
-  <tr> 
-    <th>Name</th>
-    <th>Type</th>
-	  <th>Direction</th>
-    <th>Required</th> 
-    <th>Default</th>
-    <th>Description</th>
-  </tr>
-  <tr>
-    <td>value</td>
-    <td>Object</td>
-    <td>in/out</td>
-   	<td>yes</td>
-		<td>&nbsp;</td>
-		<td>The value to be stored in the the hidden field. The parameter is read 
-    when the HTML response is generated, and then written when the form is 
-    submitted. A <A href="../api/org/apache/tapestry/util/io/DataSqueezer.html"><tt>
-    DataSqueezer</tt></a> is used to convert the value between an arbitrary type 
-    and a String. 
-    </td>
-	</tr>
-  <tr>
-    <td>id</td>
-    <td>Object</td>
-    <td>in</td>
-   	<td>no</td>
-	<td>undefined in HTML presentation.</td>
-	<td>ID parameter of HTML hidden object. The parameter is read when 
-	the HTML response is generated and if there is a specific value the component generate parameter id with passed value in its HTML presentation.</td>
-	</tr>
-  <tr>
-    <td>listener</td>
-    <td><A href="../api/org/apache/tapestry/IActionListener.html">
-     <tt>IActionListener</tt></a>
-    </td>
-    <td>in</td>
-   	<td>no</td>
-		<td>&nbsp;</td>
-		<td>
-    A listener that is informed after the value parameter is updated. This 
-    allows the data set operated on by the rest of the 
-    <A href="Form.html">Form</a> components to be synchronized to the value 
-    stored in the hidden field. 
-    <p>
-    A typical use is to encode the primary key of an entity as a Hidden; when 
-    the form is submitted, the Hidden's listener re-reads the corresponding 
-    entity from the database.
-    </td>
-	</tr>
-  <tr>
-    <td>encode</td>
-    <td>boolean</td>
-    <td>in</td>
-   	<td>no</td>
-		<td>true</td>
-		<td>
-    If true (the default) a 
-    <a href="../api/org/apache/tapestry/util/io/DataSqueezer.html"><tt>DataSqueezer</tt></a>
-    is used to transform the value Object into the HTML value string, and (on submit)
-    to convert the string back into an Object.
-    
-    <p>
-    If false, then the value must be a String.  This is most likely used
-    when the hidden field is used to communicate with client-side logic in JavaScript
-    (which is not able to interpret even Strings encoded by DataSqueezer).  If you find
-    yourself getting strange errors during the form rewind it could easily be
-    Tapestry trying to interpret a value you've set via Javascript. 
-    </td>
-	</tr>
-	</table>
-  <P>Body: <STRONG>removed</STRONG><BR>
-  Informal parameters: <STRONG>forbidden</STRONG><br>
-  Reserved parameters: "name"
-  </P>    
- </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Examples</b>
-	<p>
-  This example is under construction.
-  </p>      
-  
- </td></tr>
-
-</table>
-</td></tr>
-<tr>
- <td colspan="3"><hr></td>  
-</tr>
-<tr>
- <td align="left"><A href="GenericLink.html"><IMG alt=GenericLink src="common-images/prev.png"></a></td>  
- <td align="middle"><A href="index.html"><IMG alt="Component Index" src="common-images/home.png" ></a></td>  
- <td align="right"><A href="Image.html"><IMG alt=Image src="common-images/next.png"></a></td>  
-</tr>
-</table>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/3.0.4/doc/src/ComponentReference/Image.html b/3.0.4/doc/src/ComponentReference/Image.html
deleted file mode 100644
index b3c3513..0000000
--- a/3.0.4/doc/src/ComponentReference/Image.html
+++ /dev/null
@@ -1,236 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<!-- $Id$ --> 
-<html>
-<head>
-<title>Image</title>
-<link rel="stylesheet" type="text/css" href="Tapestry.css" title="style">
-</head>
-
-<body>
-<table border="0" cellpadding="0" cellspacing="0" width="100%">
- <tr>
-  <td align="left"><A href="Hidden.html"><IMG alt=Hidden src="common-images/prev.png"></a></td>  
-  <td align="middle"><A href="index.html"><IMG alt="Component Index" src="common-images/home.png" ></a></td>  
-  <td align="right"><A href="ImageSubmit.html"><IMG alt=ImageSubmit src="common-images/next.png"></a></td>  
- <tr>
- <tr>
-  <td colspan="3"><hr></td>  
- </tr>
- <tr>
-  <td colspan="3">
-   <table border="0" cellpadding="4" cellspacing="4" width="100%">
-
-<tr valign="top">
- <td>
-  <table>
-	 <tr>
-	  <td><font size="+2"><b>Image</b></font></td>
-	 </tr>
-	 <tr>
-	  <td>
-		 <A href="../api/org/apache/tapestry/html/Image.html">
-		 org.apache.tapestry.html.Image</a>
-		</td>
-	 </tr>
-  </table>
- </td>
- <td>
-  <table align="right" valign="middle" cellpadding="8">
-	 <tr>
-	  <td><IMG alt="Image Component" src="images/poweredby.png" ></td>
-	 </tr>
-  </table>
- </td>
-</tr>
-
-<tr valign="center">
- <td colspan="2">&nbsp;</td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Description</b>
-	<br>
-  Used to insert an image. <A href="Rollover.html">Rollover</a> is
-  a similar component that can create dynamic mouse-over effects as well. 
- </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>See Also</b>
-	<br>
-	<A href="ImageSubmit.html">ImageSubmit</a>, 
-  <A href="Rollover.html">Rollover</a>
- </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Parameters</b> 
-	<br>
-  <table border="1" cellpadding="4" cellspacing="4" class="parameters">
-   <tr> 
-    <th>Name</th>
-    <th>Type</th>
-	  <th>Direction</th>
-    <th>Required</th> 
-    <th>Default</th>
-    <th>Description</th>
-   </tr>
-   <tr>
-    <td>image</td>
-    <td><A href="../api/org/apache/tapestry/IAsset.html"><tt>IAsset</tt></a></td>
-    <td>in</td>
-   	<td>yes</td>
-		<td>&nbsp;</td>
-		<td>The image to show.</td>
-	 </tr>
-   <tr>
- 		<td>border</td>
-		<td>int</td>
-		<td>in</td>
-		<td>no</td>
-		<td>0</td>
-		<td>Corresponds to the HTML "border" attribute.</td>
-	 </tr>
-	</table><BR>Body: 
-            <STRONG>removed</STRONG><BR>Informal parameters: 
-            <STRONG>allowed</STRONG>		
-    <br>
-  Reserved parameters: "src"
- </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Examples</b>
-
-	<p>
-Inserts the static context path based image. This example uses a 
-&lt;context-asset&gt; to reference the image. 
-	<p>
-
-<table class="examples" cellpadding="8" valign="middle">
-<tr>
- <td>
-  <a href="http://tapestry.sourceforge.net/">
-   <IMG alt="View Tapestry Home" src="images/poweredby.png" >
-  </a>
- </td>  
- <td>
-  <font color="navy" size="+2"><b><i>Powered by Tapestry</i></b></font>
- </td>
-</tr>
-</table>
-
-            <pre>
-&lt;table cellpadding="8" valign="middle"&gt;
-&lt;tr&gt;
- &lt;td&gt;
-  &lt;a href="http://tapestry.sourceforge.net/"&gt;
-   &lt;img jwcid="<span class="jwcid">@<a href="Image.html">Image</a></span>" image="ognl:assets.imageAsset" alt="View Tapestry Home"/&gt;
-  &lt;/a&gt;
- &lt;/td&gt;  
- &lt;td&gt;
-  &lt;font color="navy" size="+2"&gt;&lt;b&gt;&lt;i&gt;Powered by Tapestry&lt;/i&gt;&lt;/b&gt;&lt;/font&gt;
- &lt;/td&gt;
-&lt;/tr&gt;
-&lt;/table&gt;
-
-
-&lt;context-asset name="imageAsset" path="/images/poweredby.png"/&gt;
-</pre>
-  
-  <hr>
-  
-	<p>
-Inserts the dynamic image obtained from the page's <tt>NewsItem</tt> property. 
-This example uses the <A href="../api/org/apache/tapestry/asset/ExternalAsset.html">
-<tt>ExternalAsset</tt></a> to reference the image's URL. 
-	<p>
-
-<table class="examples" cellpadding="8">
-<tr>
- <td>
-  <h4>Elvis helitanker Saves 14 Lives</h4>
-  Elvis (Erickson S-64F ) super helitanker used to fight Sydney Australia 
-  Christmas bushfires. Credited with saving hundreds of homes and 
-  14 firefighters lives in the Black Christmas crisis. Photo of Elvis
-  helicoper on loan from US refueling at Glenbrook RAAF base.
-  <p>
-  Date : 4 January 2002</p>
-       
- </td>
- <td>
-  <IMG alt="Elvis super helitanker save 14 firefighters lives" src="images/elvis.jpg" >
- </td>
-</tr>
-</table>
-
-            <pre>
-&lt;table cellpadding="8"&gt;
-&lt;tr&gt;
- &lt;td&gt;
-  &lt;h4&gt;&lt;span jwcid="@<a href="Insert.html">Insert</a>" value="ognl:newsItem.title"/&gt;&lt;/h4&gt;
-  &lt;span jwcid="@<a href="Insert.html">Insert</a>" value="ognl:newsItem.body"/&gt;
-  &lt;p&gt;
-  Date : &lt;span jwcid="@<a href="Insert.html">Insert</a>" value="ognl:newsItem.date" format="ognl:@NewsItemPage@DATE_FORMAT"/&gt; 
- &lt;/td&gt;
- &lt;td&gt;
-  &lt;img jwcid="<span class="jwcid">@<a href="Image.html">Image</a></span>" image="ognl:newsItem.imageAsset" alt="ognl:newsItem.summary"/&gt;
- &lt;/td&gt;
-&lt;/tr&gt;
-&lt;/table&gt;
-
-
-&lt;property-specification name=&quot;orderItem&quot; type=&quot;com.dsconsulting.cms.model.NewsItem&quot;/&gt;<br>
-
-public abstract class NewsItemPage extends BasePage {
-    public static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("dd MMM yyyy");
-
-    public abstract NewsItem getNewsItem();
-}
-
-public class NewsItem implements Serializable {
-    private String title;
-    private String body;
-    private String summary;
-    private Date date;
-    private String imageURL;
-
-    public NewsItem(String title, String summary, String body, Date date, 
-            String imageURL) {
-        this.title = title;
-        this.body = body;
-        this.summary = summary;
-        this.date = date;
-        this.imageURL = imageURL;
-    }
-
-    public String getTitle() { return title; }
-
-    public String getBody() { return body; }
-
-    public String getSummary() { return summary; }
-
-    public String getDate() { return date; }
-
-    public IAsset getImageAsset() { return new <A href="../api/org/apache/tapestry/asset/ExternalAsset.html"><tt>ExternalAsset</tt></a>(imageURL, null); }    
-}
-</pre>
-          </td>
-        </tr></table>
-</td></tr>
-<tr>
- <td colspan="3"><hr></td>  
-</tr>
-<tr>
- <td align="left"><A href="Hidden.html"><IMG alt=Hidden src="common-images/prev.png"></a></td>  
- <td align="middle"><A href="index.html"><IMG alt="Component Index" src="common-images/home.png" ></a></td>  
- <td align="right"><A href="ImageSubmit.html"><IMG alt=ImageSubmit src="common-images/next.png"></a></td>  
-</tr>
-</table>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/3.0.4/doc/src/ComponentReference/ImageSubmit.html b/3.0.4/doc/src/ComponentReference/ImageSubmit.html
deleted file mode 100644
index 754f832..0000000
--- a/3.0.4/doc/src/ComponentReference/ImageSubmit.html
+++ /dev/null
@@ -1,286 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<!-- $Id$ --> 
-<html>
-<head>
-<title>ImageSubmit</title>
-<link rel="stylesheet" type="text/css" href="Tapestry.css" title="style">
-</head>
-
-<body>
-<table border="0" cellpadding="0" cellspacing="0" width="100%">
- <tr>
-  <td align="left"><A href="Image.html"><IMG alt=Image src="common-images/prev.png"></A></td>  
-  <td align="middle"><A href="index.html"><IMG alt="Component Index" src="common-images/home.png" ></A></td>  
-  <td align="right"><A href="Insert.html"><IMG alt=Insert src="common-images/next.png"></A></td>  
- <tr>
- <tr>
-  <td colspan="3"><hr></td>  
- </tr>
- <tr>
-  <td colspan="3">
-   <table border="0" cellpadding="4" cellspacing="4" width="100%">
-        <TBODY>
-
-<tr valign="top">
- <td>
-  <table>
-	 <tr>
-	  <td><font size="+2"><b>ImageSubmit</b></font></td>
-	 </tr>
-	 <tr>
-	  <td>
-		 <A href="../api/org/apache/tapestry/form/ImageSubmit.html">
-		 org.apache.tapestry.form.ImageSubmit</A>
-		</td>
-	 </tr>
-  </table>
- </td>
- <td>
-  <table align="right" valign="middle" bgcolor="#c0c0c0" cellpadding="8">
-	 <tr>
-	  <td><A href="ImageSubmit.html"><IMG alt=Submit src="images/intray.png"></A></td>
-	 </tr>
-  </table>
- </td>
-</tr>
-
-<tr>
- <td colspan="2"><hr></td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Description</b>
-	<br>
-  Provides an image button inside a <A href="Form.html">Form</A>. Clicking the 
-  button submits the form and may notify a configured 
-  <A href="../api/org/apache/tapestry/IActionListener.html">listener</A> 
-  or select property.
-  <p>
-  The <a href="http://java.sun.com/products/jdk/1.2/docs/api/java/awt/Point.html">
-  <tt>Point</tt></a> parameter can be used to determine where on the image 
-  the user clicked.
-  <p>
-  In typical use, the application needs to know which ImageSubmit
-  was the one clicked by the user.  This can be accomplished in two ways:
-  <ul>
-  <li>Use the <b>selected</b> and <b>tag</b> parameters to identify
-  the button.
-  <li>Use the <b>listener</b> to perform an operation directly</li>     
-  </ul>
-  <p>
-  If a listener is used, it will be invoked as the ImageSubmit
-  component is rewound.  In addition, the <A href="Form.html">Form</A>'s 
-  listener will invoked if it is defined.
-  <p>
-  Use the first method if you need to be sure that the entire form has rewound 
-  before any logic specific to the ImageSubmit is triggered.
-  </p>             
- </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>See Also</b>
-	<br>
-  <A href="Form.html">Form</A>,
-	<A href="Image.html">Image</A>, 
-	<A href="Submit.html">Submit</A> 
- </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Parameters</b>
-	<br>
-  <table border="1" cellpadding="4" cellspacing="4" class="parameters">
-  <tr> 
-    <th>Name</th>
-    <th>Type</th>
-	  <th>Direction</th>
-    <th>Required</th> 
-    <th>Default</th>
-    <th>Description</th>
-  </tr>
-  <tr>
-    <td>image</td>
-    <td><A href="../api/org/apache/tapestry/IAsset.html"><tt>IAsset</tt></A></td>
-    <td>in</td>
-   	<td>yes</td>
-		<td>&nbsp;</td>
-		<td>The image to show.</td>
-	</tr>
-  <tr>
-    <td>name</td>
-    <td>String</td>
-    <td>in</td>
-   	<td>no</td>
-		<td>&nbsp;</td>
-		<td>
-    The name to use for the form element. Under Netscape Navigator 4, this name 
-    becomes the tooltip. The name may be modified (by adding a number to the 
-    end) to ensure that it is unique within the form. 
-    </td>
-	</tr>
-  <tr>
-    <td>disabled</td>
-    <td>boolean</td>
-    <td>in</td>
-   	<td>no</td>
-		<td>false</td>
-		<td>
-    If set to true, the button will be disabled (will not respond to the mouse). 
-    If an alternate image is defined, it will be displayed (typically a 
-    greyed-out version of the normal image).     
-    </td>
-	</tr>
-  <tr>
-    <td>disabledImage</td>
-    <td><A href="../api/org/apache/tapestry/IAsset.html"><tt>IAsset</tt></A></td>
-    <td>in</td>
-   	<td>no</td>
-		<td>&nbsp;</td>
-		<td>
-    An alternate image to display if the component is disabled. If the component 
-    is disabled and this parameter is not specified, the normal image is used.     
-    </td>
-	</tr>
-  <tr>
-    <td>point</td>
-    <td>
-     <a href="http://java.sun.com/products/jdk/1.2/docs/api/java/awt/Point.html">
-     <tt>Point</tt></a>
-    </td>
-    <td>out</td>
-   	<td>no</td>
-		<td>&nbsp;</td>
-		<td>
-    The point at which the image was clicked; used for rare components that 
-    actually need to know (typically, using the image button list a simple image 
-    map).    
-    </td>
-	</tr>
-  <tr>
-    <td>selected</td>
-    <td>Object</td>
-    <td>out</td>
-   	<td>no</td>
-		<td>&nbsp;</td>
-		<td>
-    This parameter is bound to a property that is updated when the image button 
-    is clicked by the user (submitting the form). The property is updated to 
-    match the tag parameter.    
-    </td>
-	</tr>
-  <tr>
-    <td>tag</td>
-    <td>Object</td>
-    <td>in</td>
-   	<td>no</td>
-		<td>&nbsp;</td>
-		<td>
-    Tag used with the selected parameter to indicate which image button on a 
-    form was clicked. This parameter is required if the selected paremeter is 
-    used.
-    </td>
-	</tr>
-  <tr>
-    <td>listener</td>
-    <td>
-		 <A href="../api/org/apache/tapestry/IActionListener.html">
-     <tt>IActionListener</tt></A>    
-    </td>
-    <td>in</td>
-   	<td>no</td>
-		<td>&nbsp;</td>
-		<td>
-    If specified, the listener is notified. This notification occurs as the 
-    component is rewound, i.e., prior to the <A href="Form.html">form</A>'s 
-    listener. In addition, the selected property (if bound) will be updated 
-    before the listener is notified.
-    </td>
-	</tr>
-	</table>
-  <P>
-  Body: <STRONG>removed</STRONG><BR>
-  Informal parameters: <STRONG>allowed</STRONG><br>
-  Reserved parameters: "src", "type", "border" 
-  </P>      
- </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Examples</b>
-	<p>
-  This example uses the ImageSubmit to provide two form processing priority 
-  image buttons.
-  </p>
-
-<table cellspacing="12"  bgcolor="#c0c0c0">
-<form>
- <tr>
-  <td>
-   <img alt="Standard Submit" src="images/intray-green.png"/>
-   <img alt="Urgent Submit" src="images/intray-red.png"/>
-  </td>
- </tr>
-</form>
-</table>
-  
-<pre>
-&lt;form jwcid="@<a href="Form.html">Form</a>"&gt;
-  &lt;img jwcid="<span class="jwcid">@<a href="ImageSubmit.html">ImageSubmit</a></span>" image="ognl:assets.standardImage" listener="ognl:listeners.standardSubmit" alt="Standard Submit"/&gt;
-  &lt;img jwcid="<span class="jwcid">@<a href="ImageSubmit.html">ImageSubmit</a></span>" image="ognl:assets.urgentImage" listener="ognl:listeners.urgentSubmit" alt="Urgent Submit"/&gt;
-&lt;/form&gt;
-
-
-&lt;private-asset name="standardImage" resource-path="/com/mycorp/intray-green.png"/&gt;
-&lt;private-asset name="urgentImage" resource-path="/com/mycorp/intray-red.png"/&gt;
-
-
-package com.mycorp;
-
-public class FormPage extends BasePage {
-
-    public void standardSubmit(IRequesCycle cycle) {
-        // Process standard priority submit.    
-        ..    
-    }
-
-    public void urgentSubmit(IRequesCycle cycle) {
-        // Process urgent priority submit.    
-        ..    
-    }
-}
-</pre>
-      
- </td>
-</tr>
-</TBODY>
-</table></tr>
-
-<tr>
- <td colspan="2"><hr></td>  
-</tr>
-<tr>
- <td colspan="2">
-  <table width="100%">
-   <tr>
-    <td align="left">
-     <A href="Image.html"><IMG alt=Previous src="common-images/prev.png"></A>
-    </td>  
-    <td align="middle">
-     <A href="index.html"><IMG alt=Home src="common-images/home.png"></A>
-    </td>  
-    <td align="right">
-     <A href="Insert.html"><IMG alt=Next src="common-images/next.png"></A>
-    </td>  
-   <tr></tr>
-  </table>
- </td>
-</tr>
-</table>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/3.0.4/doc/src/ComponentReference/Insert.html b/3.0.4/doc/src/ComponentReference/Insert.html
deleted file mode 100644
index a287c28..0000000
--- a/3.0.4/doc/src/ComponentReference/Insert.html
+++ /dev/null
@@ -1,211 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<!-- $Id$ --> 
-<html>
-<head>
-<title>Insert</title>
-<link rel="stylesheet" type="text/css" href="Tapestry.css" title="style">
-</head>
-
-<body>
-<table border="0" cellpadding="0" cellspacing="0" width="100%">
- <tr>
-  <td align="left"><A href="ImageSubmit.html"><IMG alt=ImageSubmit src="common-images/prev.png"></a></td>  
-  <td align="middle"><A href="index.html"><IMG alt="Component Index" src="common-images/home.png" ></a></td>  
-  <td align="right"><A href="InsertText.html"><IMG alt=InsertText src="common-images/next.png"></a></td>  
- <tr>
- <tr>
-  <td colspan="3"><hr></td>  
- </tr>
- <tr>
-  <td colspan="3">
-   <table border="0" cellpadding="4" cellspacing="4" width="100%">
-
-<tr valign="top">
- <td>
-  <table>
-	 <tr>
-	  <td><font size="+2"><b>Insert</b></font></td>
-	 </tr>
-	 <tr>
-	  <td>
-		 <A href="../api/org/apache/tapestry/components/Insert.html">
-		 org.apache.tapestry.components.Insert</a>
-		</td>
-	 </tr>
-  </table>
- </td>
- <td>
-  <table align="right" valign="middle" bgcolor="#c0c0c0" cellpadding="8">
-	 <tr>
-	  <td>Inserted text</td>
-	 </tr>
-  </table>
- </td>
-</tr>
-
-<tr>
- <td colspan="2"><hr></td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Description</b>
-	<br>
-	Allows 
-            for the insertion of text (with a specified format) into the HTML. 
-            The text itself can be 'transformed' or not (where 'transform' in 
-            this case means that various characters like &lt; and &gt; are 
-            transformed into HTML safe representations such as &amp;lt; and 
-            &amp;gt;). The
-  value for the text is bound, just like any other component. 
- </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>See Also</b>
-	<br>
-  <A href="Conditional.html">Conditional</a>,
-  <A href="Foreach.html">Foreach</a>,
-	<a href="RenderBlock.html">RenderBlock</a>, 
-  <A href="InsertText.html">InsertText</a>,
-  <a href="RenderBody.html">RenderBody</a>
- </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Parameters</b> 
-	<br>
-  <table border="1" cellpadding="4" cellspacing="4" class="parameters">
-  <tr> 
-    <th>Name</th>
-    <th>Type</th>
-	  <th>Direction</th>
-    <th>Required</th> 
-    <th>Default</th>
-    <th>Description</th>
-  </tr>
-  <tr>
-    <td>value</td>
-    <td>Object</td>
-    <td>in</td>
-   	<td>no</td>
-		<td>&nbsp;</td>
-		<td>The value to be inserted. If the binding is null, then nothing is 
-    inserted. Any object may be inserted, the <tt>toString()</tt> method is 
-    used to convert it to a printable value.
-		</td>
-	</tr>
-  <tr>
- 		<td>format</td>
-		<td>
-     <a href="http://java.sun.com/products/jdk/1.2/docs/api/java/text/Format.html">
-     <tt>Format</tt>
-     </a>
-    </td>
-		<td>in</td>
-		<td>no</td>
-		<td>&nbsp;</td>
-		<td>An optional format object used to convert the value parameter for 
-    insertion into the HTML response. 
-		</td>
-	</tr>
-  <tr>
- 		<td>class</td>
-		<td>String</td>
-		<td>in</td>
-		<td>no</td>
-		<td>&nbsp;</td>
-		<td>If specified, then the output is wrapped in an HTML &lt;span&gt; tag, 
-    using the value specified as the CSS class. 
-    
-    <p>
-    Informal parameters are only rendered if a class is specified.	
-    </p>
-		</td>
-	</tr>
-  <tr>
- 		<td>raw</td>
-		<td>boolean</td>
-		<td>in</td>
-		<td>no</td>
-		<td>false</td>
-		<td>If true, then the method 
-    <A href="../api/org/apache/tapestry/IMarkupWriter.html#printRaw(java.lang.String)">
-    <tt>IMarkupWriter.printRaw(String)</tt></a> is used, rather than 
-    <A href="../api/org/apache/tapestry/IMarkupWriter.html#print(java.lang.String)">
-    <tt>IMarkupWriter.print(String)</tt></a>.
-    
-    <p>This bypasses the normal safeguards 
-                  and is used when the value to insert contains HTML markup that 
-                  should be emitted as is.</p>          
-              		
-    </td>
-	</tr>
-	</table>
-            <P>Body: <STRONG>removed</STRONG><BR>Informal parameters: 
-            <STRONG>allowed</STRONG>		
-     <br>
-  Reserved 
-            parameters: <EM>none</EM> </P>
-    
- </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Examples</b>
-	<p>
-	Inserts the pages dueDate and applies the specified DateFormat and HTML class.  
-	<p>
-
-<table class="examples" cellpadding="8">
-<tr>
- <td>
- The order was due on the <font color="red"><b>21 January 2002</b></font>. 	
- </td>
-</tr>
-</table>
-
-            <pre>
-The order was due on the &lt;span jwcid="<span class="jwcid">@<a href="Insert.html">Insert</a></span>" value="ognl:dueDate" format="ognl:@EnquiryPage.@DATE_FORMAT" class=&quot;ognl:dueClass&quot;/&gt;.
-
-
-&lt;property-specification name=&quot;dueDate&quot; type=&quot;java.util.Date&quot;/&gt;<br>&lt;property-specification name=&quot;dueClass&quot; type=&quot;java.lang.String&quot;/&gt;<br>
-
-public abstract class EnquiryPage extends BasePage {
-    public static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("dd MMM yyyy");
-
-    public abstract Date getDueDate();
-
-    public abstract String getDueClass();
-}
-</pre>
-          </td>
-</tr>
-
-<tr>
- <td colspan="2"><hr></td>  
-</tr>
-<tr>
- <td colspan="2">
-  <table width="100%">
-   <tr>
-    <td align="left">
-     <A href="ImageSubmit.html"><IMG alt=InsertImage src="common-images/prev.png"></a>
-    </td>  
-    <td align="middle">
-     <A href="index.html"><IMG alt=Home src="common-images/home.png"></a>
-    </td>  
-    <td align="right">
-     <A href="InsertText.html"><IMG alt=InsertText src="common-images/next.png"></a>
-    </td>  
-   <tr></tr>
-  </table>
- </td>
-</tr>
-</table></tr></table>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/3.0.4/doc/src/ComponentReference/InsertText.html b/3.0.4/doc/src/ComponentReference/InsertText.html
deleted file mode 100644
index 332f0a4..0000000
--- a/3.0.4/doc/src/ComponentReference/InsertText.html
+++ /dev/null
@@ -1,143 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<!-- $Id$ --> 
-<html>
-<head>
-<title>InsertText</title>
-<link rel="stylesheet" type="text/css" href="Tapestry.css" title="style">
-</head>
-
-<body>
-<table border="0" cellpadding="0" cellspacing="0" width="100%">
- <tr>
-  <td align="left"><A href="Insert.html"><IMG alt=Insert src="common-images/prev.png"></a></td>  
-  <td align="middle"><A href="index.html"><IMG alt="Component Index" src="common-images/home.png" ></a></td>  
-  <td align="right"><A href="LinkSubmit.html"><IMG alt=LinkSubmit src="common-images/next.png"></a></td>  
- <tr>
- <tr>
-  <td colspan="3"><hr></td>  
- </tr>
- <tr>
-  <td colspan="3">
-   <table border="0" cellpadding="4" cellspacing="4" width="100%">
-
-<tr valign="top">
- <td>
-  <table>
-	 <tr>
-	  <td><font size="+2"><b>InsertText</b></font></td>
-	 </tr>
-	 <tr>
-	  <td>
-		 <A href="../api/org/apache/tapestry/html/InsertText.html">
-		 org.apache.tapestry.html.InsertText</a>
-		</td>
-	 </tr>
-  </table>
- </td>
- <td>
-  <table align="right" valign="middle" bgcolor="#c0c0c0" cellpadding="8">
-	 <tr>
-	  <td>
-     Insert line One<br>
-     Insert line Two
-    </td>
-	 </tr>
-  </table>
- </td>
-</tr>
-
-<tr valign="center">
- <td colspan="2">&nbsp;</td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Description</b>
-	<br>
-  Inserts multiline text, inserting &lt;br&gt; tags between each line, or
-  adding &lt;p&gt; tags around each line.
-  <p>
-  A line is considered to be terminated by any 
-            one of a line feed '\n', a carriage return '\r', or a carriage 
-            return followed immediately by a linefeed "\r\n".</p>
-             
- </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>See Also</b>
-	<br>
-	<A href="Block.html">Block</a>, 
-  <A href="Insert.html">Insert</a>,
-  <a href="RenderBlock.html">RenderBlock</a>,
-  <a href="RenderBody.html">RenderBody</a>
- </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Parameters</b>
-	<br>
-  <table border="1" cellpadding="4" cellspacing="4" class="parameters">
-  <tr> 
-    <th>Name</th>
-    <th>Type</th>
-	  <th>Direction</th>
-    <th>Required</th> 
-    <th>Default</th>
-    <th>Description</th>
-  </tr>
-  <tr>
-    <td>value</td>
-    <td>String</td>
-    <td>in</td>
-   	<td>no</td>
-		<td>&nbsp;</td>
-		<td>The text to be inserted. If not provided, no output is written.</td>
-	</tr>
-  <tr>
-    <td>mode</td>
-    <td>
-     <A href="../api/org/apache/tapestry/html/InsertTextMode.html">
-     <tt>InsertTextMode</tt></a>
-    </td>
-    <td>in</td>
-   	<td>no</td>
-		<td>
-     <A href="../api/org/apache/tapestry/html/InsertTextMode.html#BREAK">
-     <tt>InsertTextMode.BREAK</tt></a>
-    </td>
-		<td>Identifies how to break apart lines for display [BREAK | PARAGRAPH].</td>
-	</tr>
-	</table>
-            <P>Body: <STRONG>removed</STRONG><BR>Informal parameters: 
-            <STRONG>forbidden</STRONG>
-     <br>
-  Reserved 
-            parameters: <EM>none</EM> </P>
-    
- </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Examples</b>
-	<p>
-  This example is under construction.</p>
-      
-
- </td></tr></table>
-</td></tr>
-<tr>
- <td colspan="3"><hr></td>  
-</tr>
-<tr>
- <td align="left"><A href="Insert.html"><IMG alt=Insert src="common-images/prev.png"></a></td>  
- <td align="middle"><A href="index.html"><IMG alt="Component Index" src="common-images/home.png" ></a></td>  
- <td align="right"><A href="LinkSubmit.html"><IMG alt=LinkSubmit src="common-images/next.png"></a></td>  
-</tr>
-</table>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/3.0.4/doc/src/ComponentReference/LinkSubmit.html b/3.0.4/doc/src/ComponentReference/LinkSubmit.html
deleted file mode 100644
index d8d3952..0000000
--- a/3.0.4/doc/src/ComponentReference/LinkSubmit.html
+++ /dev/null
@@ -1,160 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<!-- $Id: LinkSubmit.html,v 1.8 2003/03/06 17:19:18 hlship Exp $ --> 
-<html>
-<head>
-<title>LinkSubmit</title>
-<link rel="stylesheet" type="text/css" href="Tapestry.css" title="style">
-</head>
-
-<body>
-<table border="0" cellpadding="0" cellspacing="0" width="100%">
- <tr>
-    <td align="left"><A href="InsertText.html"><IMG alt=InsertText src="common-images/prev.png"></a></td>  
-  <td align="middle"><A href="index.html"><IMG alt="Component Index" src="common-images/home.png" ></a></td>  
-  <td align="right"><A href="ListEdit.html"><IMG alt=ListEdit src="common-images/next.png"></a></td>  
- <tr>
- <tr>
-  <td colspan="3"><hr></td>  
- </tr>
- <tr>
-  <td colspan="3">
-   <table border="0" cellpadding="4" cellspacing="4" width="100%">
-
-<tr valign="top">
- <td>
-  <table>
-	 <tr>
-	  <td><font size="+2"><b>LinkSubmit</b></font></td>
-	 </tr>
-	 <tr>
-	  <td>
-		 <A href="../api/org/apache/tapestry/form/LinkSubmit.html">
-		 org.apache.tapestry.form.LinkSubmit</a>
-		</td>
-	 </tr>
-  </table>
- </td>
- <td>
-  <table align="right" valign="middle" bgcolor="#c0c0c0" cellpadding="8">
-	 <tr>
-	  <td><A href="LinkSubmit.html"><font color="blue">Link Submit</font></a></td>
-	 </tr>
-  </table>
- </td>
-</tr>
-
-<tr valign="center">
- <td colspan="2">&nbsp;</td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Description</b>
-	<br>
-  Creates a hyperlink that submits its enclosing form using a JavaScript function.
-            <p>
-  Pages incorporating a LinkSubmit component must also include a 
-  <A href="Body.html">Body</A> component.</p>
-            
- </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>See Also</b>
-	<br>
-	<a href="Submit.html">Submit</a>
- </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Parameters</b>
-	<br>
-  <table border="1" cellpadding="4" cellspacing="4" class="parameters">
-  <tr> 
-    <th>Name</th>
-    <th>Type</th>
-	  <th>Direction</th>
-    <th>Required</th> 
-    <th>Default</th>
-    <th>Description</th>
-  </tr>
-  <tr>
-    <td>disabled</td>
-    <td>boolean</td>
-    <td>in</td>
-   	<td>no</td>
-		<td>false</td>
-		<td>Controls whether the link is produced. If disabled, the portion of the 
-    template the link surrounds is still rendered, but not the link itself.</td>
-	</tr>
-   <tr>
-    <td>selected</td>
-    <td>Object</td>
-    <td>out</td>
-    <td>no</td>
-    <td>&nbsp;</td>
-    <td>
-    This parameter is bound to a property that is updated when the submit 
-    button is clicked by the user. The property is updated to match the tag 
-    parameter.
-    </td>
-   </tr>
-   <tr>
-    <td>tag</td>
-    <td>Object</td>
-    <td>in</td>
-    <td>no</td>
-    <td>&nbsp;</td>
-    <td>
-    Tag used with the selected parameter to indicate which Submit button
-    on a form was clicked.
-    </td>
-   </tr>
-   <tr>
- 		<td>listener</td>
- 		<td>
-     <A href="../api/org/apache/tapestry/IActionListener.html"><tt>IActionListener</tt></A>
-    </td>
- 		<td>in</td>
- 		<td>no</td>
- 		<td>&nbsp;</td>
- 		<td>
-    If specified, the listener is notified.  This notification occurs as the 
-    component is rewinded, i.e., prior to the <A href="Form.html">Form</A>'s 
-    listener. In addition, the selected property (if bound) will be updated 
-    <u>before</u> the listener is notified.
- 		</td>
-	
-	</table>
-            <P>Body: <STRONG>rendered</STRONG><BR>Informal parameters: 
-            <STRONG>allowed</STRONG>
-    <br>
-  Reserved 
-            parameters: "name", "href" </P>
-    
- </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Examples</b>
-	<p>
-  This example is under construction.</p>
-      
-  
- </td></tr></table>
-</td></tr>
-<tr>
- <td colspan="3"><hr></td>  
-</tr>
-<tr>
-    <td align="left"><A href="InsertText.html"><IMG alt=InsertText src="common-images/prev.png"></a></td>  
- <td align="middle"><A href="index.html"><IMG alt="Component Index" src="common-images/home.png" ></a></td>  
- <td align="right"><A href="ListEdit.html"><IMG alt=ListEdit src="common-images/next.png"></a></td>  
-</tr>
-</table>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/3.0.4/doc/src/ComponentReference/ListEdit.html b/3.0.4/doc/src/ComponentReference/ListEdit.html
deleted file mode 100644
index 419a995..0000000
--- a/3.0.4/doc/src/ComponentReference/ListEdit.html
+++ /dev/null
@@ -1,256 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<!-- $Id$ -->
-<html>
-<head>
-<title>ListEdit</title>
-<link rel="stylesheet" type="text/css" href="Tapestry.css" title="style">
-</head>
-
-<body>
-<table border="0" cellpadding="0" cellspacing="0" width="100%">
- <tr>
-  <td align="left"><A href="LinkSubmit.html"><IMG alt=LinkSubmit src="common-images/prev.png"></a></td>
-  <td align="middle"><A href="index.html"><IMG alt="Component Index" src="common-images/home.png" ></a></td>
-  <td align="right"><A href="Option.html"><IMG alt=Option src="common-images/next.png"></a></td>
- <tr>
- <tr>
-  <td colspan="3"><hr></td>
- </tr>
- <tr>
-  <td colspan="3">
-   <table border="0" cellpadding="4" cellspacing="4" width="100%">
-
-<tr valign="top">
- <td>
-  <table>
-	 <tr>
-	  <td><font size="+2"><b>ListEdit</b></font></td>
-	 </tr>
-	 <tr>
-	  <td>
-		 <A href="../api/org/apache/tapestry/form/ListEdit.html">
-		 org.apache.tapestry.form.ListEdit</a>
-		</td>
-	 </tr>
-  </table>
- </td>
- <td>
-  <table align="right" valign="middle" bgcolor="#c0c0c0" cellpadding="8">
-	 <tr>
-	  <td>Non Visual Component</td>
-	 </tr>
-  </table>
- </td>
-</tr>
-
-<tr valign="center">
- <td colspan="2">&nbsp;</td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Description</b>
-	<br>
-  A component used to iterate through a list of items within a
-  <A href="Form.html">Form</a>.  The ListEdit is similar to a
-  <A href="Foreach.html">Foreach</a> but uses hidden
-  input fields within the &lt;form&gt; to store the items in the list.
-  <p>
-  An instance of <A href="../api/org/apache/tapestry/util/io/DataSqueezer.html">
-  <tt>DataSqueezer</tt></a> is used to convert arbitrary objects into
-  <tt>String</tt>s and then back into objects. However, for best efficiency,
-  the list should be simple <tt>String</tt>s or numeric types, typically a
-  primary key or other identifier from which the rest of an object may be
-  retrieved or constructed.
-	<a href="http://java.sun.com/products/jdk/1.2/docs/api/java/io/Serializable.html">
-	<tt>Serializable</tt></a>
-            objects will work, but the resultant string can be very, very large.</p>
-
- </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>See Also</b>
-	<br>
-	<A href="Foreach.html">Foreach</a>,
-  <A href="Form.html">Form</a>,
-  <A href="Hidden.html">Hidden</a>
- </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Parameters</b>
-	<br>
-  <table border="1" cellpadding="4" cellspacing="4" class="parameters">
-  <tr>
-    <th>Name</th>
-    <th>Type</th>
-	  <th>Direction</th>
-    <th>Required</th>
-    <th>Default</th>
-    <th>Description</th>
-  </tr>
-  <tr>
-    <td>source</td>
-    <td>
-		<a href="http://java.sun.com/products/jdk/1.2/docs/api/java/util/List.html">
-		<tt>List</tt></a>, <br>
-	<a href="http://java.sun.com/products/jdk/1.2/docs/api/java/util/Iterator.html">
-		<tt>Iterator</tt></a> or <br>
-
-		<tt>Object[]</tt>
-    </td>
-    <td>in</td>
-   	<td>yes</td>
-		<td>&nbsp;</td>
-		<td>
-    The list of values to be editted within the form. This list is only read
-    when the component renders; it records hidden input fields in the form to
-    guide things when the form is submitted.
-    <p>
-    The source can contain objects of any type, though they should be
-    serializable. Ideally, the objects should be <tt>String</tt> or wrapper
-    types such as <tt>Integer</tt>. In other
-                  words, the source should be a list of primary keys of the
-                  objects being editted.</p>
-
-    </td>
-	</tr>
-  <tr>
-    <td>value</td>
-    <td>Object</td>
-    <td>out</td>
-   	<td>yes</td>
-		<td>&nbsp;</td>
-		<td>
-     The value for each iteration through the list (during render or rewind).
-    </td>
-	</tr>
-
-
-
-  <tr>
-    <td>index</td>
-    <td>int</td>
-    <td>out</td>
-   	<td>no</td>
-		<td>&nbsp;</td>
-		<td>The index (starting at zero) for each iteration through the list.</td>
-	</tr>
-
-  <tr>
-    <td>listener</td>
-    <td><A href="../api/org/apache/tapestry/IActionListener.html">
-     <tt>IActionListener</tt></a></td>
-    <td>in</td>
-   	<td>no</td>
-		<td>&nbsp;</td>
-		<td>
-      A listener that is informed after the value parameter is updated. This
-    allows the data set operated on by the rest of the
-    <A href="Form.html">Form</a> components to be synchronized to the value
-    stored in the hidden field.
-    <p>
-    A typical use is to encode the primary
-                  key of an entity as a Hidden; when the form is submitted, the
-                  Hidden's listener re-reads the corresponding entity from the
-                  database.</p>
-
-    </td>
-	</tr>
-
-
-  <tr>
-    <td>element</td>
-    <td>String</td>
-    <td>in</td>
-   	<td>no</td>
-		<td>&nbsp;</td>
-		<td>
-    If specified, then a tag for the specified element is placed around the
-    content on each iteration. This emulates the <A href="Any.html">Any</a>
-    component. Most often the element specified is "tr" when the ListEdit is
-    part of a table. Any informal parameters are applied to the element.
-    </td>
-	</tr>
-	</table>
-            <P>Body: <STRONG>rendered</STRONG><BR>Informal parameters:
-            <STRONG>allowed</STRONG>
-    <br>
-  Reserved
-            parameters: <EM>none</EM> </P>
-
- </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Examples</b>
-	<p>
-  This <tt>ListEdit</tt> control is typically used in conjuction with the <tt>ListEditMap</tt>	class. To understand how the <tt>ListEdit</tt> control works you need to understand
-	the how forms are rewound. But before we get into that lets see an example of the
-	<tt>ListEdit</tt> control in action.
-	This example is from the vlib sample application and allows the user to edit a list of publishers.</p>
-	<p>HTML:</p>
-	<p>The following code sets up list of TextField components for editing the publisher names. A checkbox is used to mark publishers to be deleted from the database. It's pretty similar to a Foreach component at this stage. </p>	<pre>    &lt;tr jwcid=&quot;listEdit&quot;&gt;<br>      &lt;td class=&quot;control&quot;&gt;&lt;input jwcid=&quot;inputName@TextField&quot; value=&quot;ognl:publisher.name&quot; size=&quot;40&quot; maxlength=&quot;40&quot;/&gt;<br>      &lt;/td&gt;<br>      &lt;td class=&quot;checkbox&quot;&gt;&lt;input type=&quot;checkbox&quot; jwcid=&quot;delete@Checkbox&quot; selected=&quot;ognl:listEditMap.deleted&quot;/&gt;<br>      &lt;/td&gt;<br>    &lt;/tr&gt;<br>
-</pre>
-	<p>Page file:</p>
-	<p>The page file sets up some page properties for the <tt>ListEditMap</tt> and current publisher. The <tt>listEdit</tt> component is where it gets interesting. The source binding is the set of all keys in the list edit map. Basically the list of all the publishers identifers. The value is the current key. It would actually be possible to use the publisher object as the value however because each value object is serialized this could get pretty inefficient. Instead what happens is a listener is setup. This listener sets up the actual publisher object from the key when the form is rewound.</p>	<pre>  &lt;property-specification name=&quot;listEditMap&quot; type=&quot;org.apache.tapestry.form.ListEditMap&quot;/&gt;<br>  &lt;property-specification name=&quot;publisher&quot; type=&quot;org.apache.tapestry.vlib.ejb.Publisher&quot;/&gt;<br>  <br>  &lt;component id=&quot;listEdit&quot; type=&quot;ListEdit&quot;&gt;<br>  	&lt;binding name=&quot;source&quot; expression=&quot;listEditMap.keys&quot;/&gt;<br>  	&lt;binding name=&quot;value&quot; expression=&quot;listEditMap.key&quot;/&gt;<br>  	&lt;static-binding name=&quot;element&quot; value=&quot;tr&quot;/&gt;<br>  	&lt;binding name=&quot;listener&quot; expression=&quot;listeners.synchronizePublisher&quot;/&gt;<br>  &lt;/component&gt;<br>
-	</pre>
-	<p>Code:</p>
-	<p>In the code part of this example consists of the abstract properties we set up earlier and three important methods. The <tt>synchronizePublisher()</tt> method is used to set the <tt>Publisher</tt> object from the keys we are storing in the <tt>listEditMap</tt> property. The secret to understanding how it works lies in understanding the rewind cycle. During rewind the listener method is called multiple times - once for each row. The rewind process calls <tt>listEditMap.setKey()</tt>. This effects the current value returned by <tt>listEditMap.getValue()</tt>. Once the current publisher is setup calls from the <tt>TextField</tt> component control the setting of the necessary publisher object properties.</p>
-	<p>The next two methods are easier to understand. The <tt>readPublishers()</tt> call populates the <tt>listEditMap</tt> property with the set of all publishers to be edited. It is called from <tt>pageBeginRender()</tt>. The <tt>processForm()</tt> method handles the form submit. All updated publishers are in <tt>map.getValues()</tt> and deleted publishers are returned by <tt>map.getDeletedKeys()</tt>. </p>	<pre>
-    public abstract ListEditMap getListEditMap();
-    public abstract void setListEditMap(ListEditMap listEditMap);
-    public abstract Publisher getPublisher();
-    public abstract void setPublisher(Publisher publisher);
-
-    public void synchronizePublisher(IRequestCycle cycle)
-    {
-        ListEditMap map = getListEditMap();
-
-        Publisher publisher = (Publisher) map.getValue();
-
-        if (publisher == null)
-        {
-            setError(getMessage("out-of-date"));
-            throw new PageRedirectException(this);
-        }
-
-        setPublisher(publisher);
-    }
-    private void readPublishers()<br>    {<br>        ...
-        ListEditMap map = new ListEditMap();
-        int count = Tapestry.size(publishers);
-        for (i = 0; i < count; i++)
-            map.add(publishers[i].getId(), publishers[i]);
-        setListEditMap(map);
-    }<br>    public void processForm(IRequestCycle cycle)
-    {
-        ...
-        ListEditMap map = getListEditMap();
-        List updateList = map.getValues();
-        List deletedIds = map.getDeletedKeys();
-        // update and delete publishers
-    }
-    </pre>
-</td></tr>
-<tr>
-  <td colspan="2">&nbsp;</td>
-</tr>
-   </table>
-</td></tr>
-<tr>
- <td colspan="3"><hr></td>
-</tr>
-<tr>
- <td align="left"><A href="LinkSubmit.html"><IMG alt=LinkSubmit src="common-images/prev.png"></a></td>
- <td align="middle"><A href="index.html"><IMG alt="Component Index" src="common-images/home.png" ></a></td>
- <td align="right"><A href="Option.html"><IMG alt=Option src="common-images/next.png"></a></td>
-</tr>
-</table>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/3.0.4/doc/src/ComponentReference/Option.html b/3.0.4/doc/src/ComponentReference/Option.html
deleted file mode 100644
index c1097be..0000000
--- a/3.0.4/doc/src/ComponentReference/Option.html
+++ /dev/null
@@ -1,142 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<!-- $Id$ --> 
-<html>
-<head>
-<title>Option</title>
-<link rel="stylesheet" type="text/css" href="Tapestry.css" title="style">
-</head>
-
-<body>
-<table border="0" cellpadding="0" cellspacing="0" width="100%">
- <tr>
-  <td align="left"><A href="ListEdit.html"><IMG alt=ListEdit src="common-images/prev.png"></a></td>  
-  <td align="middle"><A href="index.html"><IMG alt="Component Index" src="common-images/home.png" ></a></td>  
-  <td align="right"><A href="PageLink.html"><IMG alt=PageLink src="common-images/next.png"></a></td>  
- <tr>
- <tr>
-  <td colspan="3"><hr></td>  
- </tr>
- <tr>
-  <td colspan="3">
-   <table border="0" cellpadding="4" cellspacing="4" width="100%">
-   
-<tr valign="top">
- <td>
-  <table>
-	 <tr>
-	  <td><font size="+2"><b>Option</b></font></td>
-	 </tr>
-	 <tr>
-	  <td>
-		 <A href="../api/org/apache/tapestry/form/Option.html">org.apache.tapestry.form.option</a>
-		</td>
-	 </tr>
-  </table>
- </td>
- <td>
-  <table align="right" valign="middle" bgcolor="#c0c0c0" cellpadding="8">
-	 <tr>
-	 	<td>
-	   Option
-		 <select>
-		  <option selected>First</option>
-		  <option>Second</option>
-		  <option>Third</option>
-		 </select>
-		</td>
-	 </tr>
-  </table>
- </td>
-</tr>
-
-<tr valign="center">
- <td colspan="2">&nbsp;</td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Description</b>
-	<br>
-
-  A component that renders an HTML &lt;option&gt; form element. The
-  Option component must be wrapped by a <A href="Select.html">Select</a> 
-  component.   For a fully worked example showing the Option component, please refer to the <A href="Select.html">Select</a>
-            documentation. 
- </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>See Also</b>
-	<br>
-	<A href="Form.html">Form</a>, 
-	<A href="PropertySelection.html">PropertySelection</a>, 
-  <A href="Select.html">Select</a>
- </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Parameters</b>
-	<br>
-  <table border="1" cellpadding="4" cellspacing="4" class="parameters">
-  <tr>
-    <th>Name</th>
-    <th>Type</th>
-    <th>Direction</th>
-    <th>Required</th> 
-    <th>Default</th>
-    <th>Description</th>
- </tr>
-
-
- <tr>
-		<td>selected</td>
-		<td>boolean</td>
-		<td>in-out</td>
-		<td>yes</td>
-		<td>&nbsp;</td>
-		<td>Used to indicate whether the given option is selected.</td>
-	</tr>
-
-  <tr>
-		<td>label</td>
-		<td>String</td>
-		<td>in</td>
-		<td>no</td>
-		<td>&nbsp;</td>
-		<td>A string which represents the option that may be selected.  This is optional;
-		any text that follows the &lt;option&gt; tag is considered the label, but this
-      saves the designer from including one more
-    <A href="Insert.html"><tt>Insert</tt></a> component.
-		</td>
-	</tr>
-	</table><BR>Body: 
-            <STRONG>allowed</STRONG><BR>Informal parameters: 
-            <STRONG>allowed</STRONG>
-    <br>
-  Reserved parameters: "value"
- </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Examples</b>
-	<p>
-  Please see the documentation for the <A href="Select.html">Select</a> component.</p>
- 
- 
- </td></tr></table>
-</td></tr>
-<tr>
- <td colspan="3"><hr></td>  
-</tr>
-<tr>
- <td align="left"><A href="ListEdit.html"><IMG alt=ListEdit src="common-images/prev.png"></a></td>  
- <td align="middle"><A href="index.html"><IMG alt="Component Index" src="common-images/home.png" ></a></td>  
- <td align="right"><A href="PageLink.html"><IMG alt=PageLink src="common-images/next.png"></a></td>  
-</tr>
-</table>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/3.0.4/doc/src/ComponentReference/PageLink.html b/3.0.4/doc/src/ComponentReference/PageLink.html
deleted file mode 100644
index 9c5f2c9..0000000
--- a/3.0.4/doc/src/ComponentReference/PageLink.html
+++ /dev/null
@@ -1,229 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<!-- $Id$ --> 
-<html>
-<head>
-<title>PageLink</title>
-<link rel="stylesheet" type="text/css" href="Tapestry.css" title="style">
-</head>
-
-<body>
-<table border="0" cellpadding="0" cellspacing="0" width="100%">
- <tr>
-  <td align="left"><A href="Option.html"><IMG alt=Option src="common-images/prev.png"></A></td>  
-  <td align="middle"><A href="index.html"><IMG alt="Component Index" src="common-images/home.png" ></A></td>  
-  <td align="right"><A href="PropertySelection.html"><IMG alt=PropertySelection src="common-images/next.png"></A></td>  
- <tr>
- <tr>
-  <td colspan="3"><hr></td>  
- </tr>
- <tr>
-  <td colspan="3">
-   <table border="0" cellpadding="4" cellspacing="4" width="100%">
-
-<tr valign="top">
- <td>
-  <table>
-	 <tr>
-	  <td><font size="+2"><b>PageLink</b></font></td>
-	 </tr>
-	 <tr>
-	  <td>
-		 <A href="../api/org/apache/tapestry/link/PageLink.html">
-		 org.apache.tapestry.link.PageLink</A>
-		</td>
-	 </tr>
-  </table>
- </td>
- <td>
-  <table align="right" valign="middle" bgcolor="#c0c0c0" cellpadding="8">
-	 <tr>
-	  <td><A href="PageLink.html"><font color="blue">Page Link</font></A></td>
-	 </tr>
-  </table>
- </td>
-</tr>
-
-<tr valign="center">
- <td colspan="2">&nbsp;</td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <p>
-  <b>Description</b>
-	<br>
-  Creates a HTML &lt;a&gt; hyperlink to another page within the application. 
-  The Page component uses the <A href="../api/org/apache/tapestry/engine/PageService.html">
-  <tt>PageService</tt></A> to construct the anchor's "href" URL. 
-  </p>
-  <p>Prior to release 2.2, this component was named <STRONG>Page</STRONG>.</P>            
- </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>See Also</b>
-	<br>
-	<A href="ActionLink.html">ActionLink</a>, 
-	<A href="DirectLink.html">DirectLink</A>, 
-	<A href="ExternalLink.html">ExternalLink</a>, 
-  <A href="GenericLink.html">GenericLink</A>,
-  <A href="Rollover.html">Rollover</A>,
-  <A href="ServiceLink.html">ServiceLink</a>
- </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Parameters</b>
-	<br>
-  <table border="1" cellpadding="4" cellspacing="4" class="parameters">
-  <tr> 
-    <th>Name</th>
-    <th>Type</th>
-	  <th>Direction</th>
-    <th>Required</th> 
-    <th>Default</th>
-    <th>Description</th>
-  </tr>
-  <tr>
-    <td>page</td>
-    <td>String</td>
-    <td>in</td>
-   	<td>yes</td>
-		<td>&nbsp;</td>
-		<td>The name of a application page to link to.</td>
-	</tr>
-  <tr>
-    <td>disabled</td>
-    <td>boolean</td>
-    <td>in</td>
-   	<td>no</td>
-		<td>false</td>
-		<td>
-    Controls whether the link is produced. If disabled, the portion of the 
-    template the link surrounds is still rendered, but not the link itself.
-    </td>
-	</tr>
-  <tr>
-    <td>namespace</td>
-    <td><A href="../api/org/apache/tapestry/INamespace.html">
-    <tt>INamespace</tt></A>
-    </td>
-    <td>in</td>
-   	<td>no</td>
-		<td>&nbsp;</td>
-		<td>
-    If specified, the namespace's prefix 
-                  is prefixed (with a colon) to the page name.
-    This is primarily used when pages (or components) in a namespace need to create 
-    links to other pages inside the same namespace (this is only a concern 
-    for developers of component libraries, not developers of applications). 
-    </td>
-	</tr>
-  <tr>
-    <td>anchor</td>
-    <td>String</td>
-    <td>in</td>
-   	<td>no</td>
-		<td>&nbsp;</td>
-		<td>
-    The name of an anchor or element to link to. The final URL will have '#' 
-    and the anchor appended to it.
-    </td>
-	</tr>
-	
-	<tr>
-		<td>renderer</td>
-		<td><a href="../api/org/apache/tapestry/link/ILinkRenderer.html">ILinkRenderer</a></td>
-		<td>in</td>
-		<td>no</td>
-		<td>&nbsp;</td>
-		<td>
-		The object which will actually render the link.
-			</td>
-	</tr>	
-	</table><BR>
-  Body: <STRONG>rendered</STRONG><BR>
-  Informal parameters: <STRONG>allowed</STRONG><br>
-  Reserved parameters: "href"
- </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Examples</b>
-	<p>
-  This example uses the PageLink component to create a navigation menu bar
-  across the top of the page. If the user is not authenticated, in their Visit
-  object, all the navigation bar links are disabled.
-  </p>
-  <p>
-  Typically you would create an navigation menu component, using the 
-  <a href="RenderBody.html">RenderBody</a> component. This navigation menu
-  component would then be included as the first element in all the application's 
-  pages. 
-  </p>
-
-<table bgcolor="navy" cellpadding="8" cellspacing="6" width="100%">
- <tr>
-   <td><font color="white"><b><a href="PageLink.html">Home</a></b></font></td>
-   <td><font color="white"><b><a href="PageLink.html">Inbox</a></b></font></td>
-   <td><font color="white"><b><a href="PageLink.html">Sent</a></b></font></td>
-   <td><font color="white"><b><a href="PageLink.html">Compose</a></b></font></td>
-   <td><font color="white"><b><a href="PageLink.html">Contacts</a></b></font></td>
-   <td><font color="white"><b><a href="PageLink.html">Options</a></b></font></td>
-   <td><font color="white"><b><a href="PageLink.html">Help</a></b></font></td>
-   <td><font color="white"><b><a href="PageLink.html">Logout</a></b></font></td>
- </tr>
-</table>
-<table class="examples" cellpadding="6" width="100%">
- <tr>
-   <td>My mail page content.</td>
- </tr>
-</table>
-
-            <pre>
-&lt;!-- Navigation Bar --&gt;
-&lt;table bgcolor="navy" cellpadding="8" cellspacing="6" width="100%"&gt;
- &lt;tr jwcid="@<a href="Foreach.html">Foreach</a>" source="ognl:engine@NAVIGATION_PAGES" value="ognl:navigationPage" element=&quot;tr&quot;&gt;
-   &lt;td&gt;&lt;font color="white"&gt;&lt;b&gt;&lt;span jwcid="<span class="jwcid">@<a href="PageLink.html">PageLink</a></span>" page="ognl:navigationPage" disabled="ognl:! visit.authenticated"/&gt;&lt;/b&gt;&lt;/font&gt;&lt;/td&gt;
- &lt;/tr&gt;
-&lt;/table&gt;
-
-
-&lt;property-specification name=&quot;navigationPage&quot; type=&quot;java.lang.String&quot;/&gt;<br>
-public abstract class MailPage extends BasePage {
-    public abstract String getNavigationPage();
-}
-
-public class Visit implements Serializable {
-    private boolean authenticated;
-
-    public boolean isAuthenticated() { return authenticated; }
-
-    public void setAuthenticated(boolean value) {
-        authenticated = value;
-    }
-}
-
-public class MailEngine extends <a href="../api/org/apache/tapestry/engine/SimpleEngine">SimpleEngine</a> implements Serializable {
-    public static final String[] NAVIGATION_PAGES = 
-        { "Home", "Inbox", "Sent", "Compose", "Contacts", "Options", "Help", "Logout" };
-}
-</pre>
-
- </td></tr></table>
-</td></tr>
-<tr>
- <td colspan="3"><hr></td>  
-</tr>
-<tr>
- <td align="left"><A href="Option.html"><IMG alt=Option src="common-images/prev.png"></A></td>  
- <td align="middle"><A href="index.html"><IMG alt="Component Index" src="common-images/home.png" ></A></td>  
- <td align="right"><A href="PropertySelection.html"><IMG alt=PropertySelection src="common-images/next.png"></A></td>  
-</tr>
-</table>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/3.0.4/doc/src/ComponentReference/PropertySelection.html b/3.0.4/doc/src/ComponentReference/PropertySelection.html
deleted file mode 100644
index b63ac03..0000000
--- a/3.0.4/doc/src/ComponentReference/PropertySelection.html
+++ /dev/null
@@ -1,335 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<!-- $Id$ --> 
-<html>
-<head>
-<title>PropertySelection</title>
-<link rel="stylesheet" type="text/css" href="Tapestry.css" title="style">
-</head>
-
-<body>
-<table border="0" cellpadding="0" cellspacing="0" width="100%">
- <tr>
-  <td align="left"><A href="PageLink.html"><IMG alt=PageLink src="common-images/prev.png"></a></td>  
-  <td align="middle"><A href="index.html"><IMG alt=Index src="common-images/home.png"></a></td>  
-  <td align="right"><A href="Radio.html"><IMG alt=Radio src="common-images/next.png"></a></td>  
- <tr>
- <tr>
-  <td colspan="3"><hr></td>  
- </tr>
- <tr>
-  <td colspan="3">
-   <table border="0" cellpadding="4" cellspacing="4" width="100%">
-
-<tr valign="top">
- <td>
-  <table>
-	 <tr>
-	  <td><font size="+2"><b>PropertySelection</b></font></td>
-	 </tr>
-	 <tr>
-	  <td>
-		 <A href="../api/org/apache/tapestry/form/PropertySelection.html">
-		 org.apache.tapestry.form.PropertySelection</a>
-		</td>
-	 </tr>
-  </table>
- </td>
- <td>
-  <table align="right" valign="middle" bgcolor="#c0c0c0" cellspacing="8">
-	 <tr>
-	  <td>Color
-		 <select>
-		  <option selected>Red</option>
-		  <option>Blue</option>
-		  <option>Green</option>
-		 </select>
-		</td>
-	 </tr>
-  </table>
- </td>
-</tr>
-
-<tr valign="center">
- <td colspan="2">&nbsp;</td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <P>
-  <b>Description</b>
-	<br>
-  Creates form elements that allow a property of 
-  an object to be set from a drop-down list.</P>
-  <P>  
-  Uses a 
-  <A href="../api/org/apache/tapestry/form/IPropertySelectionModel.html">model</a> 
-  to map between Java values that will be assigned, and textual labels 
-  that will appear in the HTML response. 
-  </P> 
-	<p>
-  There is a range property selection models you can use, including
-  <A href="../api/org/apache/tapestry/form/StringPropertySelectionModel.html">
-  <tt>StringPropertySelectionModel</tt></a>
-  and
-  <A href="../api/org/apache/tapestry/form/EnumPropertySelectionModel.html">
-  <tt>EnumPropertySelectionModel</tt></a>. You can also create your own model, 
-  as illustrated in the Examples below.
-	<p>
-	Note that complex value Objects need to properly implement the
-  <tt>Object.equals()</tt> 
-  method if the correct initial item is to be displayed.
-  <P>
-  Informal parameters are applied to the &lt;select&gt; tag.&nbsp; 
-  To have greater control over the &lt;option&gt; tags, you must use the
-	<A href="Select.html">Select</a>&nbsp;and <A href="Option.html">Option</a>&nbsp;components.</P>
-             
- </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>See Also</b><br>
-	<A href="Select.html">Select</a>, <A href="Option.html">Option</a>, 
-	<A href="Radio.html">Radio</a>, <A href="RadioGroup.html">RadioGroup</a>,
-	<A href="Form.html">Form</a>, 
-  <A href="Script.html">Script</a>
- </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Parameters</b>
-	<br>
-  <table border="1" cellpadding="4" cellspacing="4"  class="parameters">
-  <tr> 
-    <th>Name</th>
-    <th>Type</th>
-	  <th>Direction</th>
-    <th>Required</th> 
-    <th>Default</th>
-    <th >Description</th>
-  </tr>
-  <tr>
-    <td>value</td>
-    <td>Object</td>
-    <td>in-out</td>
-   	<td>yes</td>
-		<td>&nbsp;</td>
-		<td>The property to set. During rendering, this property is read, and sets 
-		the default value of the selection (if it is null, no element is selected). 
-		When the form is submitted, this property is updated based on the new 
-		selection. 
-		</td>
-	</tr>
-  <tr>
- 		<td>model</td>
-		<td>
-		 <A href="../api/org/apache/tapestry/form/IPropertySelectionModel.html"><tt>
-		 IPropertySelectionModel</tt></a>
-		</td>
-		<td>in</td>
-		<td>yes</td>
-		<td>&nbsp;</td>
-		<td>The model provides a list of possible labels, and matches those labels 
-		against possible values that can be assigned back to the property.
-		</td>
-	</tr>
-  <tr>
- 		<td>disabled</td>
-		<td>boolean</td>
-		<td>in</td>
-		<td>no</td>
-		<td>false</td>
-		<td>Controls whether the &lt;select&gt; is active or not. A disabled 
-		PropertySelection does not update its value parameter. Corresponds to the 
-		"disabled" HTML attribute.
-		</td>
-	</tr>
-  <tr>
- 		<td>submitOnChange</td>
-		<td>boolean</td>
-		<td>in</td>
-		<td>no</td>
-		<td>false</td>
-		<td>If true, then additional JavaScript is added to submit the containing 
-		form when select is changed. Equivalent to specifying a JavaScript event 
-		handler of <code>this.form.submit()</code>. 
-		</td>
-	</tr>
-	</table>
-  <P>
-  Body: <STRONG>removed</STRONG><BR>
-  Informal parameters: <STRONG>allowed</STRONG><br>
-  Reserved parameters: "name"
-  </P>    
- </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Examples</b>
-  <p>
-  The PropertySelection component provides Gender selection drop down list using a
-  <a href="../api/org/apache/tapestry/form/StringPropertySelectionModel.html"><tt>StringPropertySelectionModel<tt></tt></tt></a>
-            <tt><tt> 
-            <p> 
-            <table class="examples" valign="middle" cellspacing="8">
-              <tr> 
-                <td>Gender: 
-                  <select>
-                    <option selected>Unspecified</option>
-                    <option>Female</option>
-                    <option>Male</option>
-                  </select>
-                </td>
-              </tr>
-            </table>
-            </tt></tt> 
-            <pre>
-&lt;form jwcid="@<A href="Form.html">Form</a>" listener="ognl:listeners.formSubmit"&gt;
- Gender: &lt;span jwcid="<span class="jwcid">@<a href="PropertySelection.html">PropertySelection</a></span>" model="ognl:@com.mycorp.DetailsPage@GENDER_MODEL" value="ognl:gender"/&gt;
-&lt;/form&gt;
-
-&lt;property-specification name=&quot;gender&quot; type=&quot;java.lang.String&quot;/&gt;<br>
-package com.mycorp;
-
-public abstract class DetailsPage extends BasePage {
-    public static final <A href="../api/org/apache/tapestry/form/IPropertySelectionModel.html">IPropertySelectionModel</a> GENDER_MODEL = 
-        new <A href="../api/org/apache/tapestry/form/StringPropertySelectionModel.html">StringPropertySelectionModel</a>(new String[] { "Unspecified", "Female", "Male" });
-   
-    public abstract String getGender();
-
-    public void formSubmit(IRequestCycle cycle) {   
-        // Process form submission
-        String genderSelection = getGender();
-        ..
-    }
-}
-</pre>
-            <hr>
-            <a name="Example2"></a> 
-            <p> Provides list of clothing items for the user to select. When the 
-              user selects a cloting item from the list the description the label 
-              and price is automatically updated. The list of clothing items would 
-              typically be loaded from a database. 
-            <p> This example uses the component's <b>submitOnChange</b> property 
-              to automatically submit the form when a HTML &lt;select&gt; onchange 
-              event occurs. The page's clothing item property is then updated 
-              and the new cloting item information is displayed by the description, 
-              label and price <a href="Insert.html">Insert</a> components. 
-            <p> 
-            <table class="examples" valign="middle" cellspacing="8">
-              <tr> 
-                <td>Item: 
-                  <select>
-                    <option selected>Dress</option>
-                    <option>Jacket</option>
-                    <option>Pants</option>
-                    <option>Shirt</option>
-                    <option>Skirt</option>
-                  </select>
-                  <p> Description: Cotton full length Summer dress 
-                  <p> Label: CountryClub 
-                  <p> Price: $89.95</p>
-                </td>
-              </tr>
-            </table>
-            <pre>
-&lt;form jwcid="@<a href="Form.html">Form</a>" listener="ognl:listeners.formSubmit"&gt;
- Item: &lt;span jwcid="<span class="jwcid">selectItem</span>"/&gt;
- &lt;p&gt;
- Description: &lt;span jwcid="@<a href="Insert.html">Insert</a>" value="ognl:clothingItem.description"/&gt;
- &lt;p&gt;
- Label: &lt;span jwcid="@<a href="Insert.html">Insert</a>" value="ognl:clothingItem.label"/&gt;
- &lt;p&gt;
- Price: $&lt;span jwcid="@<a href="Insert.html">Insert</a>" value="ognl:clothingItem.price"/&gt;
-&lt;/form&gt;
-
-
-&lt;component id="<span class="jwcid">selectItem</span>" type="<A href="PropertySelection.html">PropertySelection</a>"&gt;
-    &lt;binding name="model" expression="itemSelectionModel"/&gt;
-    &lt;binding name="value" expression="clothingItem"/&gt;
-    &lt;binding name="<b>submitOnChange</b>" expression="true"/&gt;
-&lt;/component&gt;
-
-&lt;property-specification name=&quot;clothingItem&quot; type=&quot;Item&quot; persistent=&quot;yes&quot;/&gt;<br>&lt;property-specification name=&quot;itemSelectionModel&quot; type=&quot;ItemSelectionModel&quot; persistent=&quot;yes&quot;/&gt;<br>
-
-public abstract class PurchagePage extends BasePage {
-
-    public abstract Item getClothingItem();
-    public abstract void setClothingItem(Item value);
-
-    public abstract ItemSelectionModel getItemSelectionModel();
-
-    public void setItemSelectionModel(ItemSelectionModel value);
-
-    public void formSubmit(IRequestCycle cycle) {
-        // Process form submission
-    }
-}
-
-public class Item implements Serializable {
-    private int id;
-    private String name;
-    private String description;
-    private String label;
-    private String price;
-
-    public Item(int id, String name, String desc, String label, String price) {
-        this.id = id;
-        this.name = name;
-        this.description = desc;
-        this.label = label;
-        this.price = price;
-    }
-
-    public int getId() { return id;  }
-
-    public String getName() { return name;  }
-
-    public String getDescription() { return description;  }
-
-    public String getLabel() { return label;  }
-
-    public String getPrice() { return price;  }
-}
-
-public class ItemSelectionModel implements IPropertySelectionModel, Serializable {
-    private List itemList;
-
-    public ItemSelectionModel(List itemList) {
-        this.itemList = itemList;
-    }
-
-    public int getOptionCount() { return itemList.size(); }
-
-    public Object getOption(int index) {
-        return itemList.get(index);
-    }
-
-    public String getLabel(int index) {
-        return ((Item) itemList.get(index)).getName();
-    }
-
-    public String getValue(int index) { return Integer.toString(index); }
-
-    public Object translateValue(String value) {
-        return getOption(Integer.parseInt(value));
-    }
-}
-</pre>
-          </td>
-        </tr></table>
-</td></tr>
-<tr>
- <td colspan="3"><hr></td>  
-</tr>
-<tr>
- <td align="left"><A href="PageLink.html"><IMG alt=PageLink src="common-images/prev.png"></a></td>  
- <td align="middle"><A href="index.html"><IMG alt=Index src="common-images/home.png"></a></td>  
- <td align="right"><A href="Radio.html"><IMG alt=Radio src="common-images/next.png"></a></td>  
-</tr>
-</table>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/3.0.4/doc/src/ComponentReference/Radio.html b/3.0.4/doc/src/ComponentReference/Radio.html
deleted file mode 100644
index 15b8c8f..0000000
--- a/3.0.4/doc/src/ComponentReference/Radio.html
+++ /dev/null
@@ -1,147 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<!-- $Id$ --> 
-<html>
-<head>
-<title>Radio</title>
-<link rel="stylesheet" type="text/css" href="Tapestry.css" title="style">
-</head>
-
-<body>
-<table border="0" cellpadding="0" cellspacing="0" width="100%">
- <tr>
-  <td align="left"><A href="PropertySelection.html"><IMG alt=PropertySelection src="common-images/prev.png"></a></td>  
-  <td align="middle"><A href="index.html"><IMG alt=Home src="common-images/home.png"></a></td>  
-  <td align="right"><A href="RadioGroup.html"><IMG alt=RadioGroup src="common-images/next.png"></a></td>  
- <tr>
- <tr>
-  <td colspan="3"><hr></td>  
- </tr>
- <tr>
-  <td colspan="3">
-   <table border="0" cellpadding="4" cellspacing="4" width="100%">
-
-<tr valign="top">
- <td>
-  <table>
-	 <tr>
-	  <td><font size="+2"><b>Radio</b></font></td>
-	 </tr>
-	 <tr>
-	  <td>
-		 <A href="../api/org/apache/tapestry/form/Radio.html">org.apache.tapestry.form.Radio</a>
-		</td>
-	 </tr>
-  </table>
- </td>
- <td>
-  <table align="right" valign="middle" bgcolor="#c0c0c0" cellpadding="8">
-	 <tr>
-	  <td><input type="radio" name="radio">Radio</td>
-	 </tr>
-  </table>
- </td>
-</tr>
-
-<tr valign="center">
- <td colspan="2">&nbsp;</td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Description</b>
-	<br>
-  Provides a HTML &lt;input type="radio"&gt; form element. The Radio component 
-  must be wrapped (possibly indirectly) inside a 
-  <A href="RadioGroup.html">RadioGroup</a> component. 
-  <p>
-  Generally the <A href="PropertySelection.html">PropertySelection</a> 
-            component is used in preference to the Radio and RadioGroup, except 
-            in special cases.</p>
-             
- </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>See Also</b>
-	<br>
-	<A href="Form.html">Form</a>, 
-	<A href="Option.html">Option</a>, 
-	<A href="PropertySelection.html">PropertySelection</a>, 
-  <A href="RadioGroup.html">RadioGroup</a>,
-	<A href="Select.html">Select</a> 
- </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Parameters</b>
-	<br>
-  <table border="1" cellpadding="4" cellspacing="4" class="parameters">
-  <tr> 
-    <th>Name</th>
-    <th>Type</th>
-	  <th>Direction</th>
-    <th>Required</th> 
-    <th>Default</th>
-    <th>Description</th>
-  </tr>
-  <tr>
-    <td>value</td>
-    <td>Object</td>
-    <td>in</td>
-   	<td>no</td>
-		<td>&nbsp;</td>
-		<td>
-    The value is used to determine if the radio button is initially selected 
-    (when rendering) and is the value assigned to the selected parameter when 
-    the form is submitted, if the HTML radio button is selected. 
-    </td>
-	</tr>
-  <tr>
-    <td>disabled</td>
-    <td>booleant</td>
-    <td>in</td>
-   	<td>no</td>
-		<td>false</td>
-		<td>
-    If true, then the Radio is disabled. It will write a "disabled" attribute 
-    into its tag when rendering, and will not update its selected binding.
-    <p> 
-    A binding may also be disabled if its containing 
-    <A href="RadioGroup.html">RadioGroup</a> is disabled.
-    <p>
-    The "disabled" attribute is ignored by 
-                  Netscape Navigator 4.</p>
-             
-    </td>
-	</tr>
-	</table>
-  <P>
-  Body: <STRONG>removed</STRONG><BR>
-  Informal parameters:<STRONG>allowed</STRONG><br>
-  Reserved parameters: "checked", "name", "type" 
-  </P>       
- </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Examples</b>
-	<p>
-  See <a href="RadioGroup.html">RadioGroup</a> for a Radio component example.</p>      
-
- </td></tr></table>
-</td></tr>
-<tr>
- <td colspan="3"><hr></td>  
-</tr>
-<tr>
- <td align="left"><A href="PropertySelection.html"><IMG alt=PropertySelection src="common-images/prev.png"></a></td>  
- <td align="middle"><A href="index.html"><IMG alt=Index src="common-images/home.png"></a></td>  
- <td align="right"><A href="RadioGroup.html"><IMG alt=RadioGroup src="common-images/next.png"></a></td>  
-</tr>
-</table>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/3.0.4/doc/src/ComponentReference/RadioGroup.html b/3.0.4/doc/src/ComponentReference/RadioGroup.html
deleted file mode 100644
index b51ebd4..0000000
--- a/3.0.4/doc/src/ComponentReference/RadioGroup.html
+++ /dev/null
@@ -1,193 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<!-- $Id$ --> 
-<html>
-<head>
-<title>RadioGroup</title>
-<link rel="stylesheet" type="text/css" href="Tapestry.css" title="style">
-</head>
-
-<body>
-<table border="0" cellpadding="0" cellspacing="0" width="100%">
- <tr>
-  <td align="left"><A href="Radio.html"><IMG alt=Radio src="common-images/prev.png"></a></td>  
-  <td align="middle"><A href="index.html"><IMG alt="Component Index" src="common-images/home.png" ></a></td>  
-  <td align="right"><A href="RenderBlock.html"><IMG alt=RenderBlock src="common-images/next.png"></a></td>  
- <tr>
- <tr>
-  <td colspan="3"><hr></td>  
- </tr>
- <tr>
-  <td colspan="3">
-   <table border="0" cellpadding="4" cellspacing="4" width="100%">
-
-<tr valign="top">
- <td>
-  <table>
-	 <tr>
-	  <td><font size="+2"><b>RadioGroup</b></font></td>
-	 </tr>
-	 <tr>
-	  <td>
-		 <A href="../api/org/apache/tapestry/form/RadioGroup.html">org.apache.tapestry.form.RadioGroup</a>
-		</td>
-	 </tr>
-  </table>
- </td>
- <td>
-  <table align="right" valign="middle" bgcolor="#c0c0c0" cellpadding="8">
-	 <tr>
-	  <td>
-     <fieldset><legend>Size</legend>
-      &nbsp;&nbsp;<input type="radio" checked name="1">Regular&nbsp;&nbsp;<br>
-      &nbsp;&nbsp;<input type="radio" name="1">Large&nbsp;&nbsp;<br>
-      &nbsp;&nbsp;<input type="radio" name="1">Super&nbsp;&nbsp;<br>
-     </fieldset>
-    </td>
-	 </tr>
-  </table>
- </td>
-</tr>
-
-<tr valign="center">
- <td colspan="2">&nbsp;</td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Description</b>
-	<br>
-  Provides a container group for <A href="Radio.html">Radio</a> components. The 
-  RadioGroup itself must be within a <A href="Form.html">Form</a> component. The 
-  Radio and RadioGroup components work together to update a property of an 
-  object, much like a more flexible version of a 
-  <A href="PropertySelection.html">PropertySelection</a>.
-  <p>
-  This component should wrap around other <A href="Radio.html">Radio</a> components.</p> 
-   
- </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>See Also</b>
-	<br>
-  <A href="Option.html">Option</a>,
-  <A href="PropertySelection.html">PropertySelection</a>,
-	<A href="Radio.html">Radio</a>, 
-  <A href="Select.html">Select</a>
- </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Parameters</b>
-	<br>
-  <table border="1" cellpadding="4" cellspacing="4" class="parameters">
-  <tr> 
-    <th>Name</th>
-    <th>Type</th>
-	  <th>Direction</th>
-    <th>Required</th> 
-    <th>Default</th>
-    <th>Description</th>
-  </tr>
-  <tr>
-    <td>selected</td>
-    <td>Object</td>
-    <td>in-out</td>
-   	<td>yes</td>
-		<td>&nbsp;</td>
-		<td>
-    Read during rendering to determine which Radio will be the default. 
-    Updated during rewinding (when the form is submitted) to indicate which 
-    radio button was selected by the user.      
-    </td>
-	</tr>
-  <tr>
-    <td>disabled</td>
-    <td>boolean</td>
-    <td>int</td>
-   	<td>no</td>
-		<td>no</td>
-		<td>
-    If true, then all contained Radio components will be disabled as well. 
-    </td>
-	</tr>
-	</table>
-  <BR>
-  Body: <STRONG>rendered</STRONG><BR>
-  Informal parameters: <STRONG>forbidden</STRONG><br>
-  Reserved parameters: <EM>none</EM>    
- </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Examples</b>
-	<p>
-  This RadioGroup example illustrates an order form where a user can select the 
-  order size. Note how the <tt>OrderPage.detach()</tt> method is used to reset the default 
-  selected Radio button to Medium. 
-  <p/>
-  The title border effect is achieved using the HTML 
-  &lt;fieldset&gt;&lt;legend&gt;..&nbsp;&lt;/legend&gt;..&nbsp;&lt;/fieldset&gt; tags.
-  <p/>
-      
-<table class="examples" cellpadding="4" cellspacing="4">
- <tr>
-  <td>
-   <fieldset><legend>Order Size</legend>
-    &nbsp;&nbsp;<input type="radio" name="2"/>Small<br>
-    &nbsp;&nbsp;<input type="radio" checked name="2"/>Medium&nbsp;&nbsp;&nbsp;<br>
-    &nbsp;&nbsp;<input type="radio" name="2"/>Large<br>
-   </fieldset>
-  </td>
- </tr>
- <tr align="right">
-  <td><input type="submit" value="Order"></td>
- </tr>
-</table> 
-            <pre>  
-&lt;form jwcid="@<a href="Form.html">Form</a>" listener='ognl:listeners.formSubmit'&gt;
-&lt;table cellpadding="4" cellspacing="4"&gt;
- &lt;tr&gt;&lt;td&gt;
-   &lt;fieldset&gt;&lt;legend&gt;Order Size&lt;/legend&gt;
-   &lt;span jwcid="<span class="jwcid">@<a href="RadioGroup.html">RadioGroup</a></span>" selected='ognl:orderSize'&gt;
-    &lt;input type="radio" jwcid="@<a href="Radio.html">Radio</a>" value='ognl:@OrderPage@SMALL'/&gt; Small &lt;br/&gt;
-    &lt;input type="radio" jwcid="@<a href="Radio.html">Radio</a>" value='ognl:@OrderPage@MEDIUM'/&gt; Medium &lt;br/&gt;
-    &lt;input type="radio" jwcid="@<a href="Radio.html">Radio</a>" value='ognl:@OrderPage@LARGE'/&gt; Large &lt;br/&gt;
-   &lt;/span&gt;
-   &lt;/fieldset&gt;
- &lt;/td&gt;&lt;/tr&gt;
- &lt;tr align="right"&gt;&lt;td&gt;&lt;input type="submit" value="Order"&gt;&lt;/td&gt;&lt;/tr&gt;
-&lt;/table&gt;
-&lt;/form&gt;
-
-&lt;property-specification name=&quot;orderSize&quot; type=&quot;java.lang.Integer&quot; initial-value=&quot;@OrderPage@MEDIUM&quot;/&gt;<br>
-public abstract OrderPage extends BasePage {
-   public final static Integer SMALL = new Integer(1);
-   public final static Integer MEDIUM = new Integer(2);
-   public final static Integer LARGE = new Integer(3);
-      
-   public abstract Integer getOrderSize();
-   
-   public formSubmit(IRequestCycle cycle) {
-      // process order
-   }   
-}   
-</pre>
-          </td>
-        </tr></table>
-</td></tr>
-<tr>
- <td colspan="3"><hr></td>  
-</tr>
-<tr>
- <td align="left"><A href="Radio.html"><IMG alt=Radio src="common-images/prev.png"></a></td>  
- <td align="middle"><A href="index.html"><IMG alt="Component Index" src="common-images/home.png" ></a></td>  
- <td align="right"><A href="RenderBlock.html"><IMG alt=RenderBlock src="common-images/next.png"></a></td>  
-</tr>
-</table>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/3.0.4/doc/src/ComponentReference/RenderBlock.html b/3.0.4/doc/src/ComponentReference/RenderBlock.html
deleted file mode 100644
index 2ad72d7..0000000
--- a/3.0.4/doc/src/ComponentReference/RenderBlock.html
+++ /dev/null
@@ -1,211 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<!-- $Id$ --> 
-<html>
-<head>
-<title>RenderBlock</title>
-<link rel="stylesheet" type="text/css" href="Tapestry.css" title="style">
-</head>
-
-<body>
-<table border="0" cellpadding="0" cellspacing="0" width="100%">
- <tr>
-  <td align="left"><A href="RadioGroup.html"><IMG alt=RadioGroup src="common-images/prev.png"></A></td>  
-  <td align="middle"><A href="index.html"><IMG alt="Component Index" src="common-images/home.png" ></A></td>  
-  <td align="right"><A href="RenderBody.html"><IMG alt=RenderBody src="common-images/next.png"></A></td>  
- <tr>
- <tr>
-  <td colspan="3"><hr></td>  
- </tr>
- <tr>
-  <td colspan="3">
-   <table border="0" cellpadding="4" cellspacing="4" width="100%">
-
-<tr valign="top">
- <td>
-  <table>
-	 <tr>
-	  <td><font size="+2"><b>RenderBlock</b></font></td>
-	 </tr>
-	 <tr>
-	  <td>
-		 <A href="../api/org/apache/tapestry/components/RenderBlock.html">
-		 org.apache.tapestry.components.RenderBlock</A>
-		</td>
-	 </tr>
-  </table>
- </td>
- <td>
-  <table align="right" valign="middle" bgcolor="#c0c0c0" cellpadding="8">
-	 <tr>
-	  <td>Non Visual Component</td>
-	 </tr>
-  </table>
- </td>
-</tr>
-
-<tr valign="center">
- <td colspan="2">&nbsp;</td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Description</b>
-	<br>
-  Renders 
- 
-  the text and components wrapped by the specified 
-  <A href="Block.html">Block</A> component. 
-  <p>
-  Please see the <A href="../api/org/apache/tapestry/components/RenderBlock.html">
-	<tt>RenderBlock</tt></A> API for a complete 
-            discription on how the RenderBlock renders.</p>
-            <P>Prior to release 2.2, this component was named 
-            <STRONG>InsertBlock</STRONG>.</P>
-             
- </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>See Also</b>
-	<br>
-	<A href="Block.html">Block</A>, 
-  <A href="Insert.html">Insert</A>,
-  <A href="InsertText.html">InsertText</A>,
-  <a href="RenderBody.html">RenderBody</a>
- </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Parameters</b>
-	<br>
-  <table border="1" cellpadding="4" cellspacing="4" class="parameters">
-  <tr> 
-    <th>Name</th>
-    <th>Type</th>
-	  <th>Direction</th>
-    <th>Required</th> 
-    <th>Default</th>
-    <th>Description</th>
-  </tr>
-  <tr>
-    <td>block</td>
-    <td><A href="Block.html">Block</A></td>
-    <td>in</td>
-   	<td>no</td>
-		<td>&nbsp;</td>
-		<td>The Block whose contents are to be rendered.</td>
-	</tr>
-	</table>
-            <P>Body: <STRONG>removed</STRONG><BR>Informal parameters: 
-            <STRONG>allowed</STRONG>
-    <br>
-  Reserved 
-            parameters: <EM>none</EM> </P>
-    
- </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Examples</b>
-	        <p> This example shows a page with a custom TabPanel component. When 
-              a user selects a tab, TabPanel switches content. Each tab content 
-              is defined by a Block.</p>
-			<table class="examples" border="0" width="350" cellspacing="0" cellpadding="0">
-<tr>
-  <td width="10">&nbsp;</td>
-  <td>
-    <table border="0"  cellspacing="0" cellpadding="5">
-       <tr>
-<td bgcolor="#FFFF00">
-
-Berlin
-
-</td> <td width="1"></td>
-
-<td bgcolor="#CCFFFF">
-Rome
-</td> <td width="1"></td>
-
-<td bgcolor="#CCFFFF">
-Tokyo
-</td> <td width="1"></td>
-</tr>
-    </table>
-  </td>
-  <td width="10" >&nbsp;</td>
-</tr>
-
-
-<tr>
-<td colspan="3" bgcolor="#00CC33" height="5">&nbsp;</td>
-</tr>
-
-<tr>
-<td width="10" bgcolor="#00CC33">&nbsp;</td> <td align="center">
- <H1>Berlin</H1>
- </td>
-<td width="10" bgcolor="#00CC33">&nbsp;</td>
-</tr>
-
-<tr>
-<td colspan="3" bgcolor="#00CC33" height="5">&nbsp;</td>
-</tr>
-
-</table>
-<br>
-            <pre>&lt;html title=&quot;TabPanel Test&quot;&gt;<br>    &lt;body&gt;<br>        &lt;span jwcid=&quot;@TabPanel&quot; blockNames='ognl:{&quot;Berlin&quot;, &quot;Rome&quot;, &quot;Tokyo&quot;}' selectColor=&quot;#FFFF00&quot; unSelectColor=&quot;#CCFFFF&quot; borderColor=&quot;#00CC33&quot;/&gt;<br>        &lt;span jwcid=&quot;Berlin@<a href="Block.html">Block</a>&quot;&gt;<br>            &lt;H1&gt;Berlin&lt;/H1&gt;<br>        &lt;/span&gt;<br>        &lt;span jwcid=&quot;Rome@<a href="Block.html">Block</a>&quot;&gt;<br>            &lt;H1&gt;Rome&lt;/H1&gt;<br>        &lt;/span&gt;<br>        &lt;span jwcid=&quot;Tokyo@<a href="Block.html">Block</a>&quot;&gt;<br>            &lt;H1&gt;Tokyo&lt;/H1&gt;<br>        &lt;/span&gt;<br>    &lt;/body&gt;<br>&lt;/html&gt;
-</pre>
-            <br>
-            TabPanel.html
-            <pre>&lt;table border=&quot;0&quot; width=&quot;50%&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot;&gt;<br>    &lt;tr&gt;<br>        &lt;td width=&quot;10&quot;&gt;&amp;nbsp;&lt;/td&gt;<br>        &lt;td&gt;<br>            &lt;table border=&quot;0&quot; cellspacing=&quot;0&quot; cellpadding=&quot;5&quot;&gt;<br>                &lt;tr&gt;<br>                    &lt;span jwcid=&quot;foreach@Foreach&quot; source=&quot;ognl:blockNames&quot; value=&quot;ognl:currentBlock&quot;&gt;<br>                        &lt;td jwcid=&quot;@Any&quot; element=&quot;td&quot; bgcolor=&quot;ognl:tabCellColor&quot;&gt;<br>                            &lt;a jwcid=&quot;link&quot;&gt;<br>                                &lt;span jwcid=&quot;@Insert&quot; value=&quot;ognl:components.foreach.value&quot;&gt;Tab Title&lt;/span&gt;<br>                            &lt;/a&gt;<br>                        &lt;/td&gt;<br>                        &lt;td width=&quot;1&quot;&gt;&lt;/td&gt;<br>                    &lt;/span&gt;<br>                &lt;/tr&gt;<br>            &lt;/table&gt;<br>        &lt;/td&gt;<br>        &lt;td width=&quot;10&quot;&gt;&amp;nbsp;&lt;/td&gt;<br>    &lt;/tr&gt;<br>    &lt;tr&gt;<br>        &lt;td jwcid=&quot;@Any&quot; element=&quot;td&quot; height=&quot;5&quot; bgcolor=&quot;ognl:borderColor&quot; colspan=&quot;3&quot;&gt;&amp;nbsp;&lt;/td&gt;<br>    &lt;/tr&gt;<br>    &lt;tr&gt;<br>        &lt;td jwcid=&quot;@Any&quot; element=&quot;td&quot; width=&quot;10&quot; bgcolor=&quot;ognl:borderColor&quot;&gt;&amp;nbsp;&lt;/td&gt;<br>        &lt;td align=&quot;center&quot;&gt;<br>            &lt;span jwcid=&quot;@<a href="RenderBlock.html">RenderBlock</a>&quot; block='ognl:block'&gt;Page content goes here&lt;/span&gt;<br>        &lt;/td&gt;<br>        &lt;td jwcid=&quot;@Any&quot; element=&quot;td&quot; width=&quot;10&quot; bgcolor=&quot;ognl:borderColor&quot;&gt;&amp;nbsp;&lt;/td&gt;<br>    &lt;/tr&gt;<br>    &lt;tr&gt;<br>        &lt;td jwcid=&quot;@Any&quot; element=&quot;td&quot; height=&quot;5&quot; bgcolor=&quot;ognl:borderColor&quot; colspan=&quot;3&quot;&gt;&amp;nbsp;&lt;/td&gt;<br>    &lt;/tr&gt;<br>&lt;/table&gt;<br>
-</pre>
-<br>
-            TabPanel.jwc 
-            <pre>&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;<br>&lt;!DOCTYPE component-specification<br>    PUBLIC &quot;-//Apache Software Foundation//Tapestry Specification 3.0//EN&quot;<br>    &quot;http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd&quot;&gt;<br><br>&lt;component-specification class=&quot;spoc.components.TabPanel&quot; allow-body=&quot;no&quot; allow-informal-parameters=&quot;no&quot;&gt;<br>    &lt;property-specification name=&quot;selectedBlock&quot; type=&quot;java.lang.String&quot;/&gt;<br>    &lt;property-specification name=&quot;currentBlock&quot; type=&quot;java.lang.String&quot;/&gt;<br>
-    &lt;parameter name=&quot;blockNames&quot; direction=&quot;in&quot; type=&quot;java.util.List&quot; required=&quot;yes&quot;/&gt;<br>    &lt;parameter name=&quot;borderColor&quot; direction=&quot;in&quot; type=&quot;java.lang.String&quot; required=&quot;yes&quot;/&gt;<br>    &lt;parameter name=&quot;selectColor&quot; direction=&quot;in&quot; type=&quot;java.lang.String&quot; required=&quot;no&quot;/&gt;<br>    &lt;parameter name=&quot;unSelectColor&quot; direction=&quot;in&quot; type=&quot;java.lang.String&quot; required=&quot;no&quot;/&gt;<br><br>    &lt;component id=&quot;link&quot; type=&quot;DirectLink&quot;&gt;<br>        &lt;binding name=&quot;listener&quot; expression=&quot;listeners.selectBlock&quot;/&gt;<br>        &lt;binding name=&quot;parameters&quot; expression=&quot;components.foreach.value&quot;/&gt;<br>        &lt;binding name=&quot;disabled&quot; expression=&quot;currentBlock == selectedBlock&quot;/&gt;<br>        &lt;binding name=&quot;stateful&quot; expression=&quot;false&quot;/&gt;<br>    &lt;/component&gt;<br><br>&lt;/component-specification&gt;<br>
-</pre>
-            <br>
-            TabPanel.java 
-            <pre>package com.dsconsulting.tapestry.components;
-
-import org.apache.tapestry.BaseComponent;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.components.Block;
-
-import java.util.List;
-
-
-public abstract class TabPanel extends BaseComponent {
-
-
-    public static final String DEFAULT_SELECT_COLOR = &quot;#7D000D&quot;;<br>    public static final String DEFAULT_UNSELECT_COLOR = &quot;#C0C0C0&quot;;<br>
-    private List _blockNames;<br>
-    public List getBlockNames() {<br>        return _blockNames;<br>    }<br>
-    public void setBlockNames(List value) {<br>        _blockNames = value;<br>        if (getSelectedBlock() == null) {<br>            String defaultComponent = getDefaultBlock();<br>            setSelectedBlock(defaultComponent);<br>            setCurrentBlock(defaultComponent);<br>        }<br>    }<br>
-    public String getTabCellColor() {<br>        String selectColor = getSelectColor();<br>        String unSelectColor = getUnSelectColor();<br>        return getCurrentBlock().equals(getSelectedBlock()) ?<br>                selectColor != null ? selectColor : DEFAULT_SELECT_COLOR :<br>                unSelectColor != null ? unSelectColor : DEFAULT_UNSELECT_COLOR;<br>    }<br>
-    public void selectBlock(IRequestCycle cycle) {<br>        String block = (String) cycle.getServiceParameters()[0];<br>        setSelectedBlock(block);<br>        fireObservedChange(&quot;selectedBlock&quot;, block);<br>    }<br>
-    public Block getBlock() {<br>        return (Block) getPage().getComponent(getSelectedBlock());<br>    }<br>
-    public String getDefaultBlock() {<br>        List tabComponents = getBlockNames();<br>        return  tabComponents != null ? (String)tabComponents.get(0) : null;<br>    }<br>
-    public abstract String getSelectColor();<br>    public abstract String getUnSelectColor();<br>
-    public abstract String getSelectedBlock();<br>    public abstract void setSelectedBlock(String value);<br>
-    public abstract String getCurrentBlock();<br>    public abstract void setCurrentBlock(String value);<br>
-}
-</pre>
-          </td>
-        </tr></table>
-</td></tr>
-<tr>
- <td colspan="3"><hr></td>  
-</tr>
-<tr>
- <td align="left"><A href="RadioGroup.html"><IMG alt=RadioGroup src="common-images/prev.png"></A></td>  
- <td align="middle"><A href="index.html"><IMG alt="Component Index" src="common-images/home.png" ></A></td>  
- <td align="right"><A href="RenderBody.html"><IMG alt=RenderBody src="common-images/next.png"></A></td>  
-</tr>
-</table>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/3.0.4/doc/src/ComponentReference/RenderBody.html b/3.0.4/doc/src/ComponentReference/RenderBody.html
deleted file mode 100644
index f93f95b..0000000
--- a/3.0.4/doc/src/ComponentReference/RenderBody.html
+++ /dev/null
@@ -1,176 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<!-- $Id$ --> 
-<html>
-<head>
-<title>RenderBody</title>
-<link rel="stylesheet" type="text/css" href="Tapestry.css" title="style">
-</head>
-
-<body>
-<table border="0" cellpadding="0" cellspacing="0" width="100%">
- <tr>
-  <td align="left"><A href="RenderBlock.html"><IMG alt=RenderBlock src="common-images/prev.png"></A></td>  
-  <td align="middle"><A href="index.html"><IMG alt="Component Index" src="common-images/home.png" ></A></td>  
-  <td align="right"><A href="Rollover.html"><IMG alt=Rollover src="common-images/next.png"></A></td>  
- <tr>
- <tr>
-  <td colspan="3"><hr></td>  
- </tr>
- <tr>
-  <td colspan="3">
-   <table border="0" cellpadding="4" cellspacing="4" width="100%">
-
-<tr valign="top">
- <td>
-  <table>
-	 <tr>
-	  <td><font size="+2"><b>RenderBody</b></font></td>
-	 </tr>
-	 <tr>
-	  <td>
-		 <A href="../api/org/apache/tapestry/components/RenderBody.html">
-		 org.apache.tapestry.components.RenderBody</A>
-		</td>
-	 </tr>
-  </table>
- </td>
- <td>
-  <table align="right" valign="middle" bgcolor="#c0c0c0" cellpadding="8">
-	 <tr>
-	  <td>Non Visual Component</td>
-	 </tr>
-  </table>
- </td>
-</tr>
-
-<tr valign="center">
- <td colspan="2">&nbsp;</td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Description</b>
-	<br>
-  Renders the body (static HTML and components)&nbsp;wrapped by the container of the 
-  RenderBody component. Components which have HTML templates and can wrap 
-  other elements should include exactly one InsertBody component in their 
-  template. 
-  <p>
-  This component is very useful for creating a common navigational component 
-  used by multiple pages of an application. Typically you create a common 
-  navigational component which contains navigational links 
-  (<a href="PageLink.html">PageLink</a>) to other 
-            pages and a RenderBody component which will insert the actual 
-            content of the page. The application pages then use the navigational 
-            component as their first element, and then their usual content. When 
-            the pages renders, it renders the surrounding navigational component 
-            and then the page's content.</p>
-            <P>Prior to release 2.2, this component was called 
-            <STRONG>InsertWrapped</STRONG>.</P>
-             
- </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>See Also</b>
-	<br>
-	<A href="Block.html">Block</A>,
-	<A href="Insert.html">Insert</A>, 
-	<a href="RenderBlock.html">RenderBlock</a>, 
-	<A href="InsertText.html">InsertText</A> 
- </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Parameters</b>
-	<br>
-  None
-	<p>
-Body: <STRONG>removed</STRONG>
- <BR>
-   Informal parameters: 
-            <STRONG>forbidden</STRONG>
-     <br>
-  Reserved parameters: <EM>none 
-            </EM></p>
-    
- </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Examples</b>
-	        <p> This example shows an implementation of the classical Border component, 
-              an application specific component. It is a common practice to use 
-              a Border component to provide common layout to almost all of application 
-              pages. </p>
-             
-	        <table width="200" class="examples" cellspacing="0" border="0" align="center">
-              <tr>
-				<td valign="top" style="text-align:justify;">
-<H1 align=center><FONT color=#ff3333>Agnosis</FONT></H1>
-<TABLE align=center border=0>
-	<TR>
-		<TD>
-			<P>
-				<B>A</B>GNOSIS feliz
-				<BR/>
-				<B>G</B>racias al ciego destino
-				<BR/>
-				<B>N</B>ada es constante
-				<BR/>
-				<B>O</B>lvidados por el Hado
-				<BR/>
-				<B>S</B>i Él existe
-				<BR/>
-				<B>I</B>ncomprensible y eterno
-				<BR/>
-				<B>S</B>ilencio 
-			</P>
-		</TD>
-	</TR>
-</TABLE>
-<br/>
-	</td>
-			</tr>
-			<tr>
-				<td valign="bottom">
-					<table width="100%" cellspacing="0" border="0">
-						<tr>
-							<td align="center">
-								<a href="http://jakarta.apache.org/tapestry"><img src="images/poweredbyTapestry.gif" width="79" height="33" border="0" alt="Tapestry"></a>
-								<br/>
-								<br/>
-							</td>
-						</tr>
-					</table>
-				</td>
-			</tr>
-		</table>
-        <br>
-            <pre>&lt;span jwcid=&quot;@Border&quot;&gt;<br>&lt;H1 align=center&gt;&lt;FONT color=#ff3333&gt;Agnosis&lt;/FONT&gt;&lt;/H1&gt;<br>&lt;TABLE align=center border=0&gt;<br>   &lt;TR&gt;<br>      &lt;TD&gt;<br>         &lt;P&gt;<br>            &lt;B&gt;A&lt;/B&gt;GNOSIS feliz<br>            &lt;BR/&gt;<br>            &lt;B&gt;G&lt;/B&gt;racias al ciego destino<br>            &lt;BR/&gt;<br>            &lt;B&gt;N&lt;/B&gt;ada es constante<br>            &lt;BR/&gt;<br>            &lt;B&gt;O&lt;/B&gt;lvidados por el Hado<br>            &lt;BR/&gt;<br>            &lt;B&gt;S&lt;/B&gt;i &Eacute;l existe<br>            &lt;BR/&gt;<br>            &lt;B&gt;I&lt;/B&gt;ncomprensible y eterno<br>            &lt;BR/&gt;<br>            &lt;B&gt;S&lt;/B&gt;ilencio <br>         &lt;/P&gt;<br>      &lt;/TD&gt;<br>   &lt;/TR&gt;<br>&lt;/TABLE&gt;<br>&lt;br/&gt;<br>&lt;/span&gt;</pre>
-            <br>
-            Border.html 
-            <pre>&lt;html jwcid=&quot;@Shell&quot; title=&quot;RenderBody Example&quot;&gt;<br>   &lt;body jwcid=&quot;@Body&quot;&gt;<br>      &lt;table width=&quot;100%&quot; cellspacing=&quot;0&quot; border=&quot;0&quot;&gt;<br>         &lt;tr&gt;<br>           &lt;td valign=&quot;top&quot; style=&quot;text-align:justify;&quot;&gt;<br>              &lt;span jwcid=&quot;@<a href="RenderBody.html">RenderBody</a>&quot;&gt;Page content goes here.&lt;/span&gt;<br>           &lt;/td&gt;<br>        &lt;/tr&gt;<br>        &lt;tr&gt;<br>           &lt;td valign=&quot;bottom&quot;&gt;<br>              &lt;table width=&quot;100%&quot; cellspacing=&quot;0&quot; border=&quot;0&quot;&gt;<br>                 &lt;tr&gt;<br>                    &lt;td align=&quot;center&quot;&gt;<br>                       &lt;a href=&quot;http://jakarta.apache.org/tapestry&quot;&gt;&lt;img src=&quot;images/poweredbyTapestry.gif&quot; width=&quot;79&quot; height=&quot;33&quot; border=&quot;0&quot; alt=&quot;Tapestry&quot;&gt;&lt;/a&gt;<br>                       &lt;br/&gt;<br>                       &lt;br/&gt;<br>                    &lt;/td&gt;<br>                 &lt;/tr&gt;<br>              &lt;/table&gt;<br>           &lt;/td&gt;<br>        &lt;/tr&gt;<br>     &lt;/table&gt;<br>  &lt;/body&gt;<br>&lt;/html&gt;</pre>
-            <br>
-            Border.jwc 
-            <pre>&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;<br>&lt;!DOCTYPE component-specification<br>    PUBLIC &quot;-//Apache Software Foundation//Tapestry Specification 3.0//EN&quot;<br>    &quot;http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd&quot;&gt;<br>
-&lt;component-specification allow-body=&quot;yes&quot; allow-informal-parameters=&quot;no&quot;&gt;<br>&lt;/component-specification&gt;<br>
-</pre>
-          </td>
-        </tr></table>
-</td></tr>
-<tr>
- <td colspan="3"><hr></td>  
-</tr>
-<tr>
- <td align="left"><A href="RenderBlock.html"><IMG alt=RenderBlock src="common-images/prev.png"></A></td>  
- <td align="middle"><A href="index.html"><IMG alt="Component Index" src="common-images/home.png" ></A></td>  
- <td align="right"><A href="Rollover.html"><IMG alt=Rollover src="common-images/next.png"></A></td>  
-</tr>
-</table>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/3.0.4/doc/src/ComponentReference/Rollover.html b/3.0.4/doc/src/ComponentReference/Rollover.html
deleted file mode 100644
index 02d69a4..0000000
--- a/3.0.4/doc/src/ComponentReference/Rollover.html
+++ /dev/null
@@ -1,199 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<!-- $Id$ --> 
-<html>
-<head>
-<title>Rollover</title>
-<link rel="stylesheet" type="text/css" href="Tapestry.css" title="style">
-<script language="JavaScript" type="text/javascript">
-<!--
-var preload = new Array();
-preload[0] = new Image();
-preload[0].src = "images/tapestry-logo.gif";
-preload[1] = new Image();
-preload[1].src = "images/inspector-rollover.gif";
-
-function rollover(image, index)
-{
-  image.src = preload[index].src;
-}
--->
-</script>
-</head>
-
-<body>
-<table border="0" cellpadding="0" cellspacing="0" width="100%">
- <tr>
-  <td align="left"><A href="RenderBody.html"><IMG alt=RenderBody src="common-images/prev.png"></a></td>  
-  <td align="middle"><A href="index.html"><IMG alt="Component Index" src="common-images/home.png" ></a></td>  
-  <td align="right"><A href="Script.html"><IMG alt=Script src="common-images/next.png"></a></td>  
- <tr>
- <tr>
-  <td colspan="3"><hr></td>  
- </tr>
- <tr>
-  <td colspan="3">
-   <table border="0" cellpadding="4" cellspacing="4" width="100%">
-
-<tr valign="top">
- <td>
-  <table>
-	 <tr>
-	  <td><font size="+2"><b>Rollover</b></font></td>
-	 </tr>
-	 <tr>
-	  <td>
-		 <A href="../api/org/apache/tapestry/html/Rollover.html">org.apache.tapestry.html.Rollover</a>
-		</td>
-	 </tr>
-  </table>
- </td>
- <td>
-  <table align="right" valign="middle" bgcolor="#c0c0c0" cellpadding="8">
-	 <tr>
-	  <td>
-     <A onmouseover="javascript:rollover(document.button,
-        1);" onmouseout
-        ="javascript:rollover(document.button, 0);" href="Rollover.html" >
-      <IMG src="images/tapestry-logo.gif" name=button>
-     </a>    
-    </td>
-	 </tr>
-  </table>
- </td>
-</tr>
-
-<tr valign="center">
- <td colspan="2">&nbsp;</td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Description</b>
-	<br>
-  The Rollover component provides a rollover image button for use with any kind
-  of <A href="../api/org/apache/tapestry/components/IServiceLink.html">link</a>
-  component. A rollover button image changes when the mouse move over it or off 
-  of it. A Rollover is disabled if the link that wraps it is disabled (in which 
-  case it doesn't respond to the mouse). If this dynamic behavior isn't required
-  use the simpler <A href="Image.html">Image</a> component. 
-  <p>
-  The component provides all the necessary JavaScript to swap the image when the 
-  mouse enters and exits the button. However, the Rollover must be wrapped 
-  (ultimately) by a <A href="Body.html">Body</a> component.</p>
-             
- </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>See Also</b>
-	<br>
-	<A href="Body.html">Body</a>,
-  <A href="GenericLink.html">GenericLink</a>, 
-  <A href="Image.html">Image</a>,
-  <a href="PageLink.html">PageLink</a>,
-  <A href="Script.html">Script</a>  
- </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Parameters</b>
-	<br>
-  <table border="1" cellpadding="4" cellspacing="4" class="parameters">
-  <tr> 
-    <th>Name</th>
-    <th>Type</th>
-	  <th>Direction</th>
-    <th>Required</th> 
-    <th>Default</th>
-    <th>Description</th>
-  </tr>
-  <tr>
-    <td>image</td>
-    <td><A href="../api/org/apache/tapestry/IAsset.html"><tt>IAsset</tt></a></td>
-    <td>in</td>
-   	<td>yes</td>
-		<td>&nbsp;</td>
-		<td>
-    The initial image to show, if the surrounding link component is not 
-    disabled.
-    </td>
-	</tr>
-  <tr>
-    <td>focus</td>
-    <td><A href="../api/org/apache/tapestry/IAsset.html"><tt>IAsset</tt></a></td>
-    <td>in</td>
-   	<td>no</td>
-		<td>&nbsp;</td>
-		<td>
-    If provided (and the component is not disabled), then a JavaScript 
-    onMouseOver event handler is added to change the image. An onMouseOut event 
-    handler is also provided, to change the button to either it's base image, 
-    or its blur image. 
-    </td>
-	</tr>
-  <tr>
-    <td>blur</td>
-    <td><A href="../api/org/apache/tapestry/IAsset.html"><tt>IAsset</tt></a></td>
-    <td>in</td>
-   	<td>no</td>
-		<td>&nbsp;</td>
-		<td>
-    If provided (and the component is not disabled), then a JavaScript 
-    onMouseOut event handler is added to change the image when the mouse is 
-    moved off of the image.     
-    </td>
-	</tr>
-  <tr>
-    <td>disabled</td>
-    <td><A href="../api/org/apache/tapestry/IAsset.html"><tt>IAsset</tt></a></td>
-    <td>in</td>
-   	<td>no</td>
-		<td>&nbsp;</td>
-		<td>
-    Image used when the Rollover is disabled. A Rollover is disabled when the 
-    <A href="../api/org/apache/tapestry/components/IServiceLink.html">
-    <tt>IServiceLink</tt></a> containing it is disabled. Note the Rollover 
-    component is wrapped by a 
-    <A href="../api/org/apache/tapestry/components/IServiceLink.html">link</a> 
-    component such as the <a href="PageLink.html">PageLink</a> component.
-    <p>
-    If no disabled asset is specified, 
-                  then image asset is used instead. A disabled Rollover does not 
-                  respond to the mouse.</p>
-                 
-           
-    </td>
-	</tr>
-	</table>
-            <P>Body: <STRONG>removed</STRONG><BR>Informal parameters: 
-            <STRONG>allowed</STRONG>
-    <br>
-  Reserved 
-            parameters: "name", "src", "border" </P>
-      
- </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Examples</b>
-	<p>
-  This example is under construction.</p>
-      
-
- </td></tr></table>
-</td></tr>
-<tr>
- <td colspan="3"><hr></td>  
-</tr>
-<tr>
- <td align="left"><A href="RenderBody.html"><IMG alt=RenderBody src="common-images/prev.png"></a></td>  
- <td align="middle"><A href="index.html"><IMG alt="Component Index" src="common-images/home.png" ></a></td>  
- <td align="right"><A href="Script.html"><IMG alt=Script src="common-images/next.png"></a></td>  
-</tr>
-</table>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/3.0.4/doc/src/ComponentReference/Script.html b/3.0.4/doc/src/ComponentReference/Script.html
deleted file mode 100644
index 94aa8e6..0000000
--- a/3.0.4/doc/src/ComponentReference/Script.html
+++ /dev/null
@@ -1,303 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<!-- $Id$ --> 
-<html>
-<head>
-<title>Script</title>
-<link rel="stylesheet" type="text/css" href="Tapestry.css" title="style">
-</head>
-
-<body>
-<table border="0" cellpadding="0" cellspacing="0" width="100%">
- <tr>
-  <td align="left"><A href="Rollover.html"><IMG alt=Rollover src="common-images/prev.png"></a></td>  
-  <td align="middle"><A href="index.html"><IMG alt="Component Index" src="common-images/home.png" ></a></td>  
-  <td align="right"><A href="Select.html"><IMG alt=Select src="common-images/next.png"></a></td>  
- <tr>
- <tr>
-  <td colspan="3"><hr></td>  
- </tr>
- <tr>
-  <td colspan="3">
-   <table border="0" cellpadding="4" cellspacing="4" width="100%">
-
-<tr valign="top">
- <td>
-  <table>
-	 <tr>
-	  <td><font size="+2"><b>Script</b></font></td>
-	 </tr>
-	 <tr>
-	  <td>
-		 <A href="../api/org/apache/tapestry/html/Script.html">
-		 org.apache.tapestry.html.Script</a>
-		</td>
-	 </tr>
-  </table>
- </td>
- <td>
-  <table align="right" valign="middle" bgcolor="#c0c0c0" cellpadding="8">
-	 <tr>
-	  <td>Non Visual Component</td>
-	 </tr>
-  </table>
- </td>
-</tr>
-
-<tr valign="center">
- <td colspan="2">&nbsp;</td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Description</b>
-	<br>
-  A component that accesses a script file and adds JavaScript functions and 
-  statements to the response page. The specified script file is read and 
-  parsed and substitutions are made before the final scripting code is inserted 
-  into the page. This allows the JavaScript to be tailored to the ids and names 
-  that are generated by Tapestry.   
-  <p>
-  Components within a Script's body may access the input and <emphasis>output</emphasis>
-  parameters of the Script via the OGNL expression 
-  <code>components.<i>scriptId</i>.symbols.<i>name</i></code>.
-  <p>
-  Note a <A href="Body.html">Body</a> component is required when using the Script
-  element. The Body component is used to write out the JavaScript after the
-  HTML &lt;body&gt; section and attach any initialization code to the body's 
-  "onload" event handler.
-  <p>
-  See the Developers Guide 
-  <A href="../DevelopersGuide/script.html">Tapestry and JavaScript</a> for a complete description of Tapestry's JavaScript 
-            integration.</p>
-             
- </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>See Also</b>
-	<br>
-	<A href="Body.html">Body</a> 
- </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Parameters</b>
-	<br>
-  <table border="1" cellpadding="4" cellspacing="4" class="parameters">
-  <tr> 
-    <th>Name</th>
-    <th>Type</th>
-	  <th>Direction</th>
-    <th>Required</th> 
-    <th>Default</th>
-    <th>Description</th>
-  </tr>
-  <tr>
-    <td>script</td>
-    <td>String</td>
-    <td>in</td>
-   	<td>yes</td>
-		<td>&nbsp;</td>
-		<td>The path of a resource (on the classpath) containing the script.</td>
-	</tr>
-  <tr>
-    <td>symbols</td>
-    <td>
-     <a href="http://java.sun.com/products/jdk/1.2/docs/api/java/util/Map.html">
-     <tt>Map</tt></a>
-    </td>
-    <td>in</td>
-   	<td>no</td>
-		<td>&nbsp;</td>
-		<td>
-     The base set of symbols to be provided to the 
-     <A href="../api/org/apache/tapestry/IScript.html">IScript</a>. To this is added 
-     (in a copy of the Map) any informal parameters. 
-    </td>
-	</tr>
-	</table>
-            <P>Body: <STRONG>allowed</STRONG><BR>
-            Informal parameters: 
-            <STRONG>allowed</STRONG>
-    <br>
-  Reserved 
-            parameters: <EM>none</EM> </P>
-    
- </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Examples</b>
-	<p>
-  See the <A href="PropertySelection.html#Example2">PropertySelection</a> 
-  example use of SelectSubmit script to submit a <A href="Form.html">form</a> 
-  when a user selects a drop down list item.
-	<p>  
-  In this example a Script is used set the focus to the first text field of the 
-  login form. In the script file <b>&lt;![CDATA[</b> .. <b>]]&gt;</b> tags are 
-  used to wrap the JavaScript code to prevent '<tt>&lt;</tt>' and 
-  '<tt>&amp;&amp;</tt>' character XML parsing errors. 
-	<p>
-  Note Tapestry will not perform property substitutions in CDATA blocks when 
-  using the <tt>&lt;expression&gt;</tt> style syntax, instead use the 
-  <tt>${expression}</tt> syntax.
-	<p>
-
-<table class="examples" cellpadding="4">
-<form>
-
- <tr>
-  <td>Username:</td><td><input size="12" 
-               ></td>
- </tr>
- <tr>
-  <td>Password:</td><td><input type="password" size="12"></td>
- </tr>
- <tr align="right">
-  <td>&nbsp;</td><td><input type="submit" value="Login"></td>
- </tr>
-</form></table>
-
-            <pre>
-&lt;body jwcid="@<a href="Body.html">Body</a>"&gt;
-&lt;span jwcid="<span class="jwcid">@<a href="Script.html">Script</a></span>" script=&quot;/com/mycorp/scripts/FormFocus.script&quot;/&gt;
-&lt;form jwcid="@<a href="Form.html">Form</a>" listener="ognl:listener.formSubmit"&gt;
- &lt;table cellpadding=
-  "4"&gt;
-   &lt;tr&gt;&lt;td&gt;Username:&lt;/td&gt;&lt;td&gt;&lt;input jwcid="@<a href="TextField.html">TextField</a>" value="ognl:visit.username" size="12"/&gt;&lt;/td&gt;
-  &lt;/tr&gt;
-   &lt;tr&gt;&lt;td&gt;Password:&lt;/td&gt;&lt;td&gt;&lt;input jwcid="@<a href="TextField.html">TextField</a>" value="ognl:visit.password" hidden=&quot;ognl:true&quot; size="12"/&gt;&lt;/td&gt;
-  &lt;/tr&gt;
-  &lt;tr align="right"&gt;
-   &lt;td colspan="2"&gt;&lt;input type="submit" value="Login"/&gt;&lt;/td&gt;
-  &lt;/tr&gt;
- &lt;/table&gt;
-&lt;/form&gt;
-&lt;/body&gt;
-
-
-&lt;!-- Sets the focus to the first form element which is not hidden and not disabled. --&gt; 
-&lt;!-- /com/mycorp/scripts/FormFocus.script --&gt; 
-&lt;?xml version="1.0" encoding="UTF-8"?&gt;
-&lt;!DOCTYPE script PUBLIC<br>
-	&quot;-//Apache Software Foundation//Tapestry Script Specification 3.0//EN&quot;<br>
-	&quot;http://jakarta.apache.org/tapestry/dtd/Script_3_0.dtd&quot;&gt;<br>
-&lt;script&gt;
-  &lt;body&gt;
-<b>&lt;![CDATA[</b> 
-function setFocus() {
-    if (document.forms[0]) {
-        for (i = 0; i &lt; document.forms[0].elements.length; i++) {
-            if (document.forms[0].elements[i].type != "hidden" &amp;&amp;
-                document.forms[0].elements[i].disabled != true) {
-
-                document.forms[0].elements[i].focus();
-                return;
-            }
-        }
-    }	
-}
-<b>]]&gt;</b>
-  &lt;/body&gt;
-  &lt;initialization&gt;
-    setFocus();
-  &lt;/initialization&gt;
-&lt;/script&gt;
-</pre>
-          </td>
-        </tr>
-
-<tr>
- <td colspan="2"><hr></td>  
-</tr>
-<tr>
- <td colspan="2">
-	<p>
-   This alternative <tt>InputFocus.script</tt> specifies the actual input field 
-   to give the focus to. The target input field is identified by an informal  
-   parameter named <b>component</b>. The script then uses 
-   <tt>${expression}</tt> element name insertions to complete the JavaScript.
-  <p>
-   Note when using this script, the target input field component must be declared 
-   before the script component in the HTML template, and within the 
-   <A href="Form.html">Form</a> block, so that the target field component can be 
-   resolved by the <A href="Script.html">Script</a> component.  
-  <p>
-
-            <pre>
-&lt;body jwcid="@<a href="Body.html">Body</a>"&gt;
-&lt;form jwcid="@<a href="Form.html">Form</a>" listener="ognl:listener.formSubmit"&gt;
- &lt;table cellpadding=
-  "4"&gt;
-   &lt;tr&gt;&lt;td&gt;Username:&lt;/td&gt;&lt;td&gt;&lt;input jwcid="usernameTextField@<a href="TextField.html">TextField</a>" value="ognl:visit.username" size="12"/&gt;&lt;/td&gt;
-  &lt;/tr&gt;
-   &lt;tr&gt;&lt;td&gt;Password:&lt;/td&gt;&lt;td&gt;&lt;input jwcid="@<a href="TextField.html">TextField</a>" value="ognl:visit.password" hidden=&quot;ognl:true&quot; size="12"/&gt;&lt;/td&gt;
-  &lt;/tr&gt;
-  &lt;tr align="right"&gt;
-   &lt;td colspan="2"&gt;&lt;input type="submit" value="Login"/&gt;&lt;/td&gt;
-  &lt;/tr&gt;
- &lt;/table&gt;
- &lt;span jwcid="<span class="jwcid">@<a href="Script.html">Script</a></span>" script=&quot;/com/mycorp/scripts/FormFocus.script&quot; <b>component</b>="ognl:components.usernameTextField"/&gt;
-&lt;/form&gt;
-&lt;/body&gt;
-
-
-&lt;!-- Sets the focus to the specified input field if not hidden and not disabled. --&gt; 
-&lt;!-- /com/mycorp/scripts/InputFocus.script --&gt; 
-&lt;?xml version="1.0"?&gt;
-&lt;!DOCTYPE script PUBLIC<br>	
-	&quot;-//Apache Software Foundation//Tapestry Script Specification 3.0//EN&quot;<br>
-	&quot;http://jakarta.apache.org/tapestry/dtd/Script_3_0.dtd&quot;&gt;<br>
-&lt;!--
-Selects the specified form input field on body load if the input type is not 
-"hidden" and the input field is not disabled.
-
-Input symbols:
-  component: the component input field to give focus
---&gt;
-
-&lt;input-symbol key=&quot;<b>component</b>&quot; class=&quot;org.apache.tapestry.form.AbstractFormComponent&quot; required=&quot;yes&quot;/&gt;<br>
-&lt;let key=&quot;formObject&quot;&gt;<br>	document.${<b>component</b>.form.name}<br>&lt;/let&gt;</pre>
-            <pre>
-&lt;let key=&quot;componentObject&quot;&gt;<br>	${formObject}.${<b>component</b>.name}<br>&lt;/let&gt;</pre>
-            <pre></pre>
-            <pre>
-&lt;script&gt;
-
-&lt;body&gt;
-function setFocus() {
-    var inputField = ${componentObject.name};
-
-    if (inputField.type != "hidden") {
-        if (inputField.disabled != true) {
-            inputField.focus();
-        }
-    } else {
-         window.alert('InputFocus.script cannot set focus on a hidden field');
-    }
-}
-&lt;/body&gt;
-
-&lt;initialization&gt;
-    setFocus();
-&lt;/initialization&gt;
-
-&lt;/script&gt;
-</pre>
-          </td>
-        </tr>
-</table></TD></TR>
-<tr>
- <td colspan="3"><hr></td>  
-</tr>
-<tr>
- <td align="left"><A href="Rollover.html"><IMG alt=Rollover src="common-images/prev.png"></a></td>  
- <td align="middle"><A href="index.html"><IMG alt="Component Index" src="common-images/home.png" ></a></td>  
- <td align="right"><A href="Select.html"><IMG alt=Select src="common-images/next.png"></a></td>  
-</tr></TABLE>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/3.0.4/doc/src/ComponentReference/Select.html b/3.0.4/doc/src/ComponentReference/Select.html
deleted file mode 100644
index 8c2322c..0000000
--- a/3.0.4/doc/src/ComponentReference/Select.html
+++ /dev/null
@@ -1,269 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<!-- $Id$ --> 
-<html>
-<head>
-<title>Select</title>
-<link rel="stylesheet" type="text/css" href="Tapestry.css" title="style">
-</head>
-
-<body>
-<table border="0" cellpadding="0" cellspacing="0" width="100%">
- <tr>
-  <td align="left"><A href="Script.html"><IMG alt=Script src="common-images/prev.png"></a></td>  
-  <td align="middle"><A href="index.html"><IMG alt="Component Index" src="common-images/home.png" ></a></td>  
-  <td align="right"><A href="ServiceLink.html"><IMG alt=ServiceLink src="common-images/next.png"></a></td>  
- <tr>
- <tr>
-  <td colspan="3"><hr></td>  
- </tr>
- <tr>
-  <td colspan="3">
-   <table border="0" cellpadding="4" cellspacing="4" width="100%">
-
-<tr valign="top">
- <td>
-  <table>
-	 <tr>
-	  <td><font size="+2"><b>Select</b></font></td>
-	 </tr>
-	 <tr>
-	  <td>
-		 <A href="../api/org/apache/tapestry/form/Select.html">org.apache.tapestry.form.Select</a>
-		</td>
-	 </tr>
-  </table>
- </td>
- <td>
-  <table align="right" valign="middle" bgcolor="#c0c0c0" cellpadding="8">
-	 <tr>
-	  <td>Multiple Select:</td>
-	  <td>
-		 <select multiple size="3">
-		  <option>Apple</option>
-		  <option>Orange</option>
-		  <option>Banana</option>
-		  <option>Pear</option>
-		  <option>Lemon</option>
-		  <option>Kiwi Fruit</option>
-		  <option>Grape Fruit</option>
-		 </select>
-	  </td>
-	 </tr>
-  </table>
- </td>
-</tr>
-
-<tr valign="center">
- <td colspan="2">&nbsp;</td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Description</b>
-	<br>
-  Implements a component that manages an HTML &lt;select&gt; form element. The
-  Select component can take the form of a drop down list (default) or a list 
-  selection box if the "multiple" parameter is set to true. The Select component
-  must wrap around <A href="Option.html">Option</a> components within a 
-  <A href="Form.html">Form</a>.
-  <p>
-  Unless multiple selections are required it is generally easier to use the 
-  <A href="PropertySelection.html">PropertySelection</a> 
-            component.</p>
-           
- </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>See Also</b>
-	<br>
-	<A href="Form.html">Form</a>, 
-  <A href="Option.html">Option</a>, 
-  <A href="RadioGroup.html">RadioGroup</a>,
-  <A href="Radio.html">Radio</a>,
-  <A href="PropertySelection.html">PropertySelection</a>
- </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Parameters</b>
-	<br>
-  <table border="1" cellpadding="4" cellspacing="4" class="parameters">
-  <tr> 
-    <th>Name</th>
-    <th>Type</th>
-	  <th>Direction</th>
-    <th>Required</th> 
-    <th>Default</th>
-    <th>Description</th>
-  </tr>
-  <tr>
-		<td>multiple</td>
-		<td>boolean</td>
-		<td>in</td>
-		<td>no</td>
-		<td>false</td>
-		<td>If true, the component allows multiple selection.</td> 
-  </tr>
-  <tr>
- 		<td>disabled</td>
-		<td>boolean</td>
-		<td>in</td>
-		<td>no</td>
-		<td>false</td>
-		<td>Controls whether the select is active or not. Corresponds to the 
-    "disabled" HTML attribute.
-    </td>
-	</tr>
-	</table>
-            <P>Body: <STRONG>rendered</STRONG><BR>Informal parameters: 
-            <STRONG>allowed</STRONG>
-    <br>
-  Reserved 
-            parameters: "name" </P>
-    
- </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Examples</b>
-	<p>
-	This examples shows how to setup a standard Select and <A href="Option.html">Option</a> component.
-	Note that Select and <A href="Option.html">Option</a> are typically only used like this when a 
-	<A href="PropertySelection.html">PropertySelection</a>
-	component is unable to fulfil the required need. Normally, most users will want to use
-	the <A href="PropertySelection.html">PropertySelection</a>, since it requires less work, and can express similar semantics 
-	with only a single component (instead of three, as will be shown below).
-	<p>
-
-<table class="examples" cellpadding="4">
- <tr>
-  <td>Select a color
-	 <select name="selection" multiple>		
-	  <option value="0">Green
-		<option value="1">Blue
-		<option value="2">Red
-		<option value="3">White
-		<option value="4">Purple
-		<option value="5">Dark Black
-		<option value="6">Fiji Blue</option> 
-	 </select>
-	</td>
- </tr>
-</table>
-
-<pre>
-&lt;form jwcid="@<a href="Form.html">Form</a>" listener="ognl:listeners.formSubmit"&gt;
- Select a color
- &lt;select jwcid="<span class="jwcid">@<a href="Select.html">Select</a></span>" multiple=&quot;ognl:true&quot;&gt;
-  &lt;span jwcid="@<a href="Foreach.html">Foreach</a>" source="ognl:visit.colorList" value="ognl:visit.currentColor"&gt;
-   &lt;option jwcid="@<a href="Option.html">Option</a>" selected="ognl:visit.currentColor.selected" label="ognl:visit.currentColor.label"/&gt;
-  &lt;/span&gt;
- &lt;/select&gt;
-&lt;/form&gt;	
-</pre>
- </td>
-</tr>
-
-<tr>
- <td colspan="2">
-	 This example uses a pre-existing collection as the source of the <A href="Option.html">Option</a> list. The
-	 <A href="Foreach.html">Foreach</a> is used to iterate through the list, rendering multiple HTML option
-	 elements on the way.
- </td>  
-</tr>
-
-<tr>
- <td colspan="2">
- 	When the form is submitted, Tapestry will take care of setting the 
- 	<b>selected</b> attribute on any item that has been selected by
- 	the user. For this example, that means that a Color object will
- 	have it's selected property set to true (see below)<p>
- 	
- 	Which produces the following HTML:<p>
-	        <pre>&lt;form method=&quot;post&quot; name=&quot;Form0&quot; action=&quot;/componentref&quot;&gt;<br>   &lt;input type=&quot;hidden&quot; name=&quot;service&quot; value=&quot;direct/0/SelectPage/$Form&quot;/&gt;<br>   &lt;input type=&quot;hidden&quot; name=&quot;sp&quot; value=&quot;S0&quot;/&gt;<br>   &lt;input type=&quot;hidden&quot; name=&quot;Form0&quot; value=&quot;$Select&quot;/&gt;<br>   Select a color<br>   &lt;select name=&quot;$Select&quot; multiple=&quot;multiple&quot;&gt;
-      &lt;option value=&quot;0&quot;&gt;Green&lt;/option&gt;
-      &lt;option value=&quot;1&quot;&gt;Blue&lt;/option&gt;
-      &lt;option value=&quot;2&quot;&gt;Red&lt;/option&gt;
-      &lt;option value=&quot;3&quot;&gt;White&lt;/option&gt;
-      &lt;option value=&quot;4&quot;&gt;Purple&lt;/option&gt;
-      &lt;option value=&quot;5&quot;&gt;Dark Black&lt;/option&gt;
-      &lt;option value=&quot;6&quot;&gt;Fiji Blue&lt;/option&gt;
-   &lt;/select&gt;
-&lt;/form&gt;
-			</pre>
-          </td>
-</tr>
-
-<tr>
- <td colspan="2">
-	In this example, the page object (the .java file) is not important, since it contains nothing. 
-	The example has purposely tied both the option list, and the currently selected value (the
-	<A href="Foreach.html">Foreach</a> component's <b>value</b> field) to a property of
-	the Visit object.<p>>
- 	The Visit object is defined as follows: 	
- 	<pre>
-
-public class Visit implements Serializable {
-    private transient List colorList;
-    private Color currentColor;
-  
-    public Collection getColorList() {
-        if (colorList == null) {
-            colorList = new ArrayList();
-            colorList.add(new Color("Green"));
-            colorList.add(new Color("Blue"));
-            colorList.add(new Color("Red"));
-            colorList.add(new Color("White"));
-            colorList.add(new Color("Purple"));
-            colorList.add(new Color("Dark Black"));
-            colorList.add(new Color("Fiji Blue"));
-        }
-        return colorList;
-    }
-
-    public Color getCurrentColor() { return currentColor; }
-
-    public void setCurrentColor(Color value) { 
-        currentColor = value;
-    }
-}
-
-public class Color implements Serializable {
-    private String label;
-    private boolean selected;
-
-    public Color(String label) {
-        setLabel(label);
-    }
-
-    public String getLabel() { return label; }
-
-    public void setLabel(String value) {
-        label = value;
-    }
-    
-    public boolean getSelected() { return selected; }
-
-    public void setSelected(boolean value) {
-        selected = value;
-    }
-}</pre>
-
- </td></tr></table>
-</td></tr>
-<tr>
- <td colspan="3"><hr></td>  
-</tr>
-<tr>
- <td align="left"><A href="Script.html"><IMG alt=Script src="common-images/prev.png"></a></td>  
- <td align="middle"><A href="index.html"><IMG alt="Component Index" src="common-images/home.png" ></a></td>  
- <td align="right"><A href="ServiceLink.html"><IMG alt=ServiceLink src="common-images/next.png"></a></td>  
-</tr>
-</table>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/3.0.4/doc/src/ComponentReference/ServiceLink.html b/3.0.4/doc/src/ComponentReference/ServiceLink.html
deleted file mode 100644
index 764a951..0000000
--- a/3.0.4/doc/src/ComponentReference/ServiceLink.html
+++ /dev/null
@@ -1,191 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<!-- $Id$ --> 
-<html>
-<head>
-<title>ServiceLink</title>
-<link rel="stylesheet" type="text/css" href="Tapestry.css" title="style">
-</head>
-
-<body>
-<table border="0" cellpadding="0" cellspacing="0" width="100%">
- <tr>
-  <td align="left"><A href="Select.html"><IMG alt=Select src="common-images/prev.png"></A></td>  
-  <td align="middle"><A href="index.html"><IMG alt="Component Index" src="common-images/home.png" ></A></td>  
-  <td align="right"><A href="Shell.html"><IMG alt=Shell src="common-images/next.png"></A></td>  
- <tr>
- <tr>
-  <td colspan="3"><hr></td>  
- </tr>
- <tr>
-  <td colspan="3">
-   <table border="0" cellpadding="4" cellspacing="4" width="100%">
-
-<tr valign="top">
- <td>
-  <table>
-	 <tr>
-	  <td><font size="+2"><b>ServiceLink</b></font></td>
-	 </tr>
-	 <tr>
-	  <td>
-		 <A href="../api/org/apache/tapestry/link/ServiceLink.html">org.apache.tapestry.link.ServiceLink</A>
-		</td>
-	 </tr>
-  </table>
- </td>
- <td>
-  <table align="right" valign="middle" bgcolor="#c0c0c0" cellpadding="8">
-	 <tr>
-	  <td>Non Visual Component</td>
-	 </tr>
-  </table>
- </td>
-</tr>
-
-<tr valign="center">
- <td colspan="2">&nbsp;</td>
-</tr>
-
-<tr>
- <td colspan="2">
-            <P>
-  <b>Description</b>
-	<br>
-  A component for creating a link for an arbitrary engine service that uses no 
-  parameters, such as the reset or home service. A ServiceLink component can emulate 
-  an <A href="ActionLink.html">ActionLink</A>, <a href="PageLink.html">PageLink</a> or 
-  <A href="DirectLink.html">DirectLink</A> 
-            component, but is most often used in conjunction with an 
-            application-specific service. </P>
-            <P>Prior to release 2.2, this component was named 
-            <STRONG>Service</STRONG>.</P>             
- </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>See Also</b>
-	<br>
-	<A href="ActionLink.html">ActionLink</A>, 
-	<A href="DirectLink.html">DirectLink</A>, 
-	<A href="ExternalLink.html">ExternalLink</a>, 
-	<A href="GenericLink.html">GenericLink</A>, 
-  <a href="PageLink.html">PageLink</a>
- </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Parameters</b>
-	<br>
-  <table border="1" cellpadding="4" cellspacing="4" class="parameters">
-  <tr> 
-    <th>Name</th>
-    <th>Type</th>
-	  <th>Direction</th>
-    <th>Required</th> 
-    <th>Default</th>
-    <th>Description</th>
-  </tr>
-  <tr>
-    <td>service</td>
-    <td>String</td>
-    <td>in</td>
-   	<td>yes</td>
-		<td>&nbsp;</td>
-		<td>The name of the 
-    <a href="../api/org/apache/tapestry/engine/IEngineService.html"><tt>EngineService</tt></a> 
-    to invoke.</td>
-	</tr>
-  <tr>
-    <td>parameters</td>
-    <td><tt>Object</tt>,<br>
-    	<tt>Object[]</tt> or<nr>
-    	<tt>List</tt></td>
-    <td>in</td>
-   	<td>no</td>
-		<td>&nbsp;</td>
-		<td>
-    An array of Objects to be encoded into the URL. These parameters will be 
-    decoded when the link is triggered.
-    </td>
-	</tr>
-  <tr>
-    <td>disabled</td>
-    <td>boolean</td>
-    <td>in</td>
-   	<td>no</td>
-		<td>false</td>
-		<td>
-    Controls whether the link is produced. If disabled, the portion of the 
-    template the link surrounds is still rendered, but not the link itself.
-    <p>Using the namespace scheme, to create 
-                  a link to a page in a library, you must provide the libraries 
-                  namespace prefix.</p> 
-                   
-          
-    </td>
-	</tr>
-  <tr>
-    <td>context</td>
-    <td><tt>Object[]</tt></td>
-    <td>in</td>
-   	<td>no</td>
-		<td>&nbsp;</td>
-		<td>
-    Deprecated name for <b>parameters</b>. This will emit warnings in 2.2 and be 
-    removed in a later release entirely. 
-    </td>
-	</tr>
-
-  <tr>
-    <td>anchor</td>
-    <td>String</td>
-    <td>in</td>
-   	<td>no</td>
-		<td>&nbsp;</td>
-		<td>
-    The name of an anchor or element to link to. The final URL will have '#' 
-    and the anchor appended to it.
-    </td>
-	</tr>
-	
-	<tr>
-		<td>renderer</td>
-		<td><a href="../api/org/apache/tapestry/link/ILinkRenderer.html">ILinkRenderer</a></td>
-		<td>in</td>
-		<td>no</td>
-		<td>&nbsp;</td>
-		<td>
-		The object which will actually render the link.
-			</td>
-	</tr>	
-	</table><BR>Body: 
-            <STRONG>rendered</STRONG><BR>Informal parameters: 
-            <STRONG>allowed</STRONG>
-    <br>
-  Reserved parameters: "href"
- </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Examples</b>
-	<p>
-  This example is under construction.</p>
-      
-
- </td></tr></table>
-</td></tr>
-<tr>
- <td colspan="3"><hr></td>  
-</tr>
-<tr>
- <td align="left"><A href="Select.html"><IMG alt=Select src="common-images/prev.png"></A></td>  
- <td align="middle"><A href="index.html"><IMG alt="Component Index" src="common-images/home.png" ></A></td>  
- <td align="right"><A href="Shell.html"><IMG alt=Shell src="common-images/next.png"></A></td>  
-</tr>
-</table>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/3.0.4/doc/src/ComponentReference/Shell.html b/3.0.4/doc/src/ComponentReference/Shell.html
deleted file mode 100644
index 539e95e..0000000
--- a/3.0.4/doc/src/ComponentReference/Shell.html
+++ /dev/null
@@ -1,284 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<!-- $Id$ --> 
-<html>
-<head>
-<title>Shell</title>
-<link rel="stylesheet" type="text/css" href="Tapestry.css" title="style">
-</head>
-
-<body>
-<table border="0" cellpadding="0" cellspacing="0" width="100%">
- <tr>
-  <td align="left"><A href="ServiceLink.html"><IMG alt=ServiceLink src="common-images/prev.png"></A></td>  
-  <td align="middle"><A href="index.html"><IMG alt="Component Index" src="common-images/home.png" ></A></td>  
-  <td align="right"><A href="Submit.html"><IMG alt=Submit src="common-images/next.png"></A></td>  
- <tr>
- <tr>
-  <td colspan="3"><hr></td>  
- </tr>
- <tr>
-  <td colspan="3">
-   <table border="0" cellpadding="4" cellspacing="4" width="100%">
-
-<tr valign="top">
- <td>
-  <table>
-	 <tr>
-	  <td><font size="+2"><b>Shell</b></font></td>
-	 </tr>
-	 <tr>
-	  <td>
-		 <A href="../api/org/apache/tapestry/html/Shell.html">
-		 org.apache.tapestry.html.Shell</A>
-		</td>
-	 </tr>
-  </table>
- </td>
- <td>
-  <table align="right" valign="middle" bgcolor="#c0c0c0" cellpadding="8">
-	 <tr>
-	  <td>Non Visual Component</td>
-	 </tr>
-  </table>
- </td>
-</tr>
-
-<tr valign="center">
- <td colspan="2">&nbsp;</td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Description</b>
-	<br>
-  Provides the outer 'shell' of a page, including the &lt;html&gt;, &lt;head&gt; 
-  and &lt;title&gt; tags, but not the &lt;body&gt; tag which is typically 
-  provided by a <A href="Body.html">Body</A> component.
-  <p>
-  Most Tapestry pages will include a Shell component followed by a Body 
-  component. The Shell is used to resolve the page's HTML stylesheet and the Body 
-  component manages dynamically generated JavaScript. 
-  <p>
-  When designing the look and feel of a 
-            Tapestry page, include the normal HTML elements before the Shell 
-            component, including a &lt;link rel="stylesheet"&gt; element, so 
-            that the page will render normally in a web browser, but use a 
-            &lt;span jwcid="$content$"&gt; around the actual content.</p>
-      
- </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>See Also</b>
-	<br>
-	<A href="Body.html">Body</A>, 
-  <A href="Script.html">Script</A> 
- </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Parameters</b>
-	<br>
-  <table border="1" cellpadding="4" cellspacing="4" class="parameters">
-  <tr> 
-    <th>Name</th>
-    <th>Type</th>
-	  <th>Direction</th>
-    <th>Required</th> 
-    <th>Default</th>
-    <th>Description</th>
-  </tr>
-  <tr>
-    <td>title</td>
-    <td>String</td>
-    <td>in</td>
-   	<td>yes</td>
-		<td>&nbsp;</td>
-		<td>Used to provide the window title for the page.</td>
-	</tr>
-  <tr>
-    <td>stylesheet</td>
-    <td><A href="../api/org/apache/tapestry/IAsset.html"><tt>IAsset</tt></A></td>
-    <td>in</td>
-   	<td>no</td>
-		<td>&nbsp;</td>
-		<td>Creates a &lt;link rel="stylesheet"&gt; element.</td>
-	</tr>
-	
-  <tr>
-    <td>stylesheets</td>
-    <td>Array or collection of <A href="../api/org/apache/tapestry/IAsset.html"><tt>IAsset</tt></A></td>
-    <td>in</td>
-   	<td>no</td>
-		<td>&nbsp;</td>
-		<td>Creates a series of &lt;link rel="stylesheet"&gt; element, one for each asset.</td>
-	</tr>
-  <tr>
-    <td>refresh</td>
-    <td>int</td>
-    <td>in</td>
-   	<td>no</td>
-		<td>&nbsp;</td>
-		<td>
-    If provided (and non-zero), then a &lt;meta http-equiv="Refresh"&gt; element 
-    is included in the header. The refresh interval is the value provided 
-    (which is the time to display the page, in seconds).
-    <p> 
-    The refresh will be the same page (not necessarily the same URL as that 
-    which initially presented the page, since the page will often be initially 
-    displayed because of a link or form submission). 
-    <p> 
-    Note that to the <meta> tag, a refresh of zero means refresh 
-                  immediately. For this component, a refresh of zero is the same 
-                  as unspecified: no automatic refresh.</p>         
-                 
-      
-    </td>
-	</tr>
-  <tr>
-    <td>doctype</td>
-    <td>String</td>
-    <td>in</td>
-   	<td>no</td>
-		<td style="font-size: xx-small;">
-		HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"
-		</td>
-		<td>
-    Used to specify the full definition of the DOCTYPE element in the response page.
-    For example, setting this parameter to 
-    <pre>math SYSTEM "http://www.w3.org/Math/DTD/mathml1/mathml.dtd"</pre>
-    will make the component generate
-    <pre>&lt;!DOCTYPE math SYSTEM "http://www.w3.org/Math/DTD/mathml1/mathml.dtd"&gt;</pre>
-	<p>
-    The list of currently valid DOCTYPE settings can be found here:
-    http://www.w3.org/QA/2002/04/valid-dtd-list.html
-	<p>
-    If the parameter is null or empty, no DOCTYPE tag will be rendered
-    </td>
-	</tr>
-  <tr>
-    <td>DTD</td>
-    <td>String</td>
-    <td>in</td>
-   	<td>no</td>
-		<td>null</td>
-		<td>
-    Used to specify the DOCTYPE DTD of the generated HTML document. 
-    <p>
-    This parameter is deprecated. Please use the doctype parameter instead.
-    </td>
-	</tr>
-  <tr>
-    <td>delegate</td>
-    <td><A href="../api/org/apache/tapestry/IRender.html"><tt>IRender</tt></A></td>
-    <td>in</td>
-   	<td>no</td>
-		<td>&nbsp;</td>
-		<td>
-    If specified, the delegate is invoked just before the &lt;/head&gt; tag. 
-    This allows the delegate to write additional tags, often meta tags of 
-    various types.
-    </td>
-	</tr>
-  <tr>
-    <td>renderContentType</td>
-    <td>boolean</td>
-    <td>in</td>
-   	<td>no</td>
-		<td>true</td>
-		<td>Determines whether the component will render an http-equiv element with 
-		the Content Type of this response. It is necessary to render this element to ensure
-		that the browser will encode the POST parameters using the encoding
-		defined in the Content Type. Otherwise the browsers may use the default encoding 
-		of the client machine, which cannot be known by the server.
-		If you set this parameter to false, please make sure that you can decode 
-		the HTTP request parameters correctly.</td>
-	</tr>
-	
-	</table>
-            <P>Body: <STRONG>rendered<BR></STRONG>Informal parameters: 
-            <STRONG>allowed (applied to &lt;html&gt; tag)</STRONG>		
-     <br>
-  Reserved parameters: <EM>none</EM>
-    
-             </P>
-    
- </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Examples</b>
-	<p>
-  The Shell component is used here to provide the page's stylesheet and title.
-	<p>
-  Note in this example a common stylesheet file <tt>style.css</tt> is located in 
-  the class path directory <tt>/com/mycorp/pages/</tt> while the page's class is
-  in <tt>/com/mycorp/pages/customer/login/</tt>. The HTML header uses a relative 
-  path to resolve the stylesheet.
-	<p>
-
-<table class="examples" cellpadding="24">
-<tr>
- <td>
-  <h2><i><font color="navy">Customer Login</font></i></h2>
-  Welcome to MyCorp's Customer Portal secure login page.
-  <p>
-  <font color="red"><i>Please call 1800 230 187 for TR-2 recall information.</i></font></p>
- <td></td>
-</tr>
-</table>
-		
-            <pre>
-&lt;html&gt;
-&lt;head&gt;
- &lt;link rel="stylesheet" type="text/css" <b>href="../../style.css"</b> title="style"&gt;
- &lt;title&gt;MyCorp Customer Login&lt;/title&gt;
-&lt;/head&gt;
-
-&lt;span jwcid="$content$"&gt;
-&lt;span jwcid="<span class="jwcid">@<a href="Shell.html">Shell</a></span>" stylesheet="ognl:assets.stylesheet" title="MyCorp Customer Login"&gt;
-&lt;body jwcid="@<a href="Body.html">Body</a>"&gt;
-
-&lt;h1&gt;Customer Login&lt;/h1&gt;
-Welcome to MyCorp's Customer Portal secure login page.
-&lt;p&gt;
-&lt;span jwcid="@<a href="Insert.html">Insert</a>" value="ognl:dailyMessage" class="ognl:messageClass"/&gt;
-
-&lt;/body&gt;
-&lt;/span&gt;
-&lt;/span&gt;
-&lt;/html&gt;
-
-
-&lt;property-specification name=&quot;dailyMessage&quot; type=&quot;java.lang.String&quot;/&gt;
-&lt;property-specification name=&quot;messageClass&quot; type=&quot;java.lang.String&quot;/&gt;
-&lt;private-asset name="stylesheet" resource-path="/com/mycorp/pages/style.css"/&gt;
-
-
-package com.mycorp.pages.customer.login;
-
-public abstract class CustomerLoginPage extends BasePage {
-    public abstract String getDailyMessage();
-
-    public abstract String getMessageClass();
-    
-}
-</pre>
-          </td>
-        </tr></table>
-</td></tr>
-<tr>
- <td colspan="3"><hr></td>  
-</tr>
-<tr>
- <td align="left"><A href="ServiceLink.html"><IMG alt=ServiceLink src="common-images/prev.png"></A></td>  
- <td align="middle"><A href="index.html"><IMG alt="Component Index" src="common-images/home.png" ></A></td>  
- <td align="right"><A href="Submit.html"><IMG alt=Submit src="common-images/next.png"></A></td>  
-</tr>
-</table>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/3.0.4/doc/src/ComponentReference/Submit.html b/3.0.4/doc/src/ComponentReference/Submit.html
deleted file mode 100644
index c0f558a..0000000
--- a/3.0.4/doc/src/ComponentReference/Submit.html
+++ /dev/null
@@ -1,408 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<!-- $Id$ --> 
-<html>
-<head>
-<title>Submit</title>
-<link rel="stylesheet" type="text/css" href="Tapestry.css" title="style">
-</head>
-<body>
-
-<table border="0" cellpadding="0" cellspacing="0" width="100%">
- <tr>
-  <td align="left"><A href="Shell.html"><IMG alt=Shell src="common-images/prev.png"></A></td>  
-  <td align="middle"><A href="index.html"><IMG alt="Component Index" src="common-images/home.png" ></A></td>  
-  <td align="right"><A href="TextArea.html"><IMG alt=TextArea src="common-images/next.png"></A></td>  
- <tr>
- <tr>
-  <td colspan="3"><hr></td>  
- </tr>
- <tr>
-  <td colspan="3">
-   <table border="0" cellpadding="4" cellspacing="4" width="100%">
-
-<tr valign="top">
- <td>
-  <table>
-	 <tr>
-	  <td><font size="+2"><b>Submit</b></font></td>
-	 </tr>
-	 <tr>
-	  <td>
-		 <A href="../api/org/apache/tapestry/form/Submit.html">
-		 org.apache.tapestry.form.Submit</A>
-		</td>
-	 </tr>
-  </table>
- </td>
- <td>
-  <table align="right" valign="middle" bgcolor="#c0c0c0" cellspacing="8">
-	 <tr>
-	  <td><input type="submit" value="Submit"></td>
-	 </tr>
-  </table>
- </td>
-
- </table></td>
-</tr>
-
-<tr valign="center">
- <td colspan="2">&nbsp;</td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Description</b>
-	<br>
-  Provides a HTML form submission element &lt;input type="submit"&gt;. 
-	The Submit component must be wrapped by a <A href="Form.html">Form</A>.  
-  <p>
-  This component is generally only used when the form has multiple submit 
-  buttons, and it is important for the application to know which one was 
-  pressed. You may also want to use 
-  <A href="ImageSubmit.html">ImageSubmit</A> 
-  which accomplishes much the same thing, but uses a graphic image instead. 
-  <P>
-  In typical use, the application needs to know which Submit was 
-  the one clicked by the user. This can be accomplished in two ways: 
-  <UL>
-    <LI>Use the <B>listener</B> to perform an operation directly</LI>   
-    <LI>Use the <B>selected</B> and <B>tag</B> parameters to identify the button.</LI> 
-  </UL>
-  <P>
-  If a listener is used, it will be invoked as the Submit component is rewound. 
-  In addition, the <A href="Form.html">Form</A>'s listener be invoked if defined. 
-  <P>
-  Use the first method if you need to be sure that the entire form has rewound 
-  before any logic specific to the ImageSubmit is triggered. 
-  </P>             
- </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>See Also</b>
-	<br>
-	<A href="Button.html">Button</A>, 
-	<A href="Form.html">Form</A>, 
-	<A href="Checkbox.html">Checkbox</A>, 
-	<A href="Hidden.html">Hidden</A>, 
-	<A href="ImageSubmit.html">ImageSubmit</A>, 
-	<A href="ListEdit.html">ListEdit</A>, 
-	<A href="Option.html">Option</A>, 
-	<A href="Radio.html">Radio</A>, 
-	<A href="RadioGroup.html">RadioGroup</A>, 
-	<A href="Select.html">Select</A>, 
-	<a href="TextArea.html">TextArea</a>, 
-	<A href="TextField.html">TextField</A>, 
-	<A href="ValidField.html">ValidField</A>
- </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Parameters</b>
-  <br>
-  <table border="1" cellpadding="4" cellspacing="4" class="parameters">
-   <tr> 
-    <th>Name</th>
-    <th>Type</th>
-    <th>Direction</th>
-    <th>Required</th> 
-    <th>Default</th>
-    <th>Description</th>
-   </tr>
-   <tr>
-		<td>label</td>
-		<td>String</td>
-		<td>in</td>
-		<td>no</td>
-		<td>&nbsp;</td>
-		<td>The label put on the button (this becomes the HTML value attribute).
-		</td>
-	 </tr>
-   <tr>
-	  <td>disabled
-	  <td>boolean</td>
-    <td>in</td>
-    <td>no</td>
-	  <td>false</td>
-    <td>
-    If set to true, the button will be disabled (will not respond to
-    the mouse); the browser should provide a "greyed out" appearance.
-    </td> 
-   </tr>
-   <tr>
-    <td>selected</td>
-    <td>Object</td>
-    <td>out</td>
-    <td>no</td>
-    <td>&nbsp;</td>
-    <td>
-    This parameter is bound to a property that is updated when the submit 
-    button is clicked by the user. The property is updated to match the tag 
-    parameter.
-    </td>
-   </tr>
-   <tr>
-    <td>tag</td>
-    <td>Object</td>
-    <td>in</td>
-    <td>no</td>
-    <td>&nbsp;</td>
-    <td>
-    Tag used with the selected parameter to indicate which Submit button
-    on a form was clicked.
-    </td>
-   </tr>
-   <tr>
- 		<td>listener</td>
- 		<td>
-     <A href="../api/org/apache/tapestry/IActionListener.html"><tt>IActionListener</tt></A>
-    </td>
- 		<td>in</td>
- 		<td>no</td>
- 		<td>&nbsp;</td>
- 		<td>
-    If specified, the listener is notified.  This notification occurs as the 
-    component is rewinded, i.e., prior to the <A href="Form.html">Form</A>'s 
-    listener. In addition, the selected property (if bound) will be updated 
-    <u>before</u> the listener is notified.
- 		</td>
-   </tr>
-	</table>
-  <P>
-  Body: <STRONG>removed</STRONG><BR>
-  Informal parameters: <STRONG>allowed</STRONG><br>
-  Reserved parameters: "name", "type"  
-  </P>
- </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Examples</b>
-	<p>
-	In this login form the <b>loginSubmit</b> and <b>helpSubmit</b> components use
-  <A href="../api/org/apache/tapestry/IActionListener.html">listener</A>s
-  to invoke their actions. Also note how the helpSubmitAction() method
-  redirects to another page using a   
-  <A href="../api/org/apache/tapestry/PageRedirectException.html"><tt>PageRedirectException</tt></A>
-  .
-	<p>
-
-<table class="examples" cellpadding="4">
-<form>
- <tr>
-  <td>Username:</td><td><input size="12"></td>
- </tr>
- <tr>
-  <td>Password:</td><td><input type="password" size="12"></td>
- </tr>
- <tr align="right">
-  <td colspan="2">
-   <input type="submit" value="Login">
-   <input type="submit" value="Help">
-  </td>
- </tr>
-</form>
-</table>
-
-      <pre>
-&lt;form jwcid="@<a href="Form.html">Form</a>"&gt;
- &lt;table cellpadding="4"&gt;
-   &lt;tr&gt;&lt;td&gt;Username:&lt;/td&gt;&lt;td&gt;&lt;input jwcid="@<a href="TextField.html">TextField</a>" value=&quot;ognl:username&quot; size="12"/&gt;&lt;/td&gt;
-  &lt;/tr&gt;
-   &lt;tr&gt;&lt;td&gt;Password:&lt;/td&gt;&lt;td&gt;&lt;input jwcid="@<a href="TextField.html">TextField</a>" value=&quot;ognl:password&quot; hidden=&quot;ognl:true&quot; size="12"/&gt;&lt;/td&gt;
-  &lt;/tr&gt;
-  &lt;tr align="right"&gt;
-   &lt;td colspan="2"&gt;
-    &lt;input type="submit" jwcid="<span class="jwcid">@</span><a href="Submit.html">Submit</a>" listener="ognl:listeners.loginSubmitAction" value="Login"/&gt;
-    &lt;input type="submit" jwcid="<span class="jwcid">@</span><a href="Submit.html">Submit</a>" listener="ognl:listeners.helpSubmitAction" value="Help"/&gt;
-   &lt;/td&gt;
-  &lt;/tr&gt;
- &lt;/table&gt;
-&lt;/form&gt;
-
-&lt;property-specification name=&quot;username&quot; type=&quot;java.lang.String&quot;/&gt;<br>&lt;property-specification name=&quot;password&quot; type=&quot;java.lang.String&quot;/&gt;<br>
-public abstract class LoginPage extends BasePage {
-
-    public abstract String getUsername();
-    
-    public abstract void setUsername(String value);
-    
-    public abstract String getPassword();
-    
-    public abstract void setPassword(String value);
-
-    public void loginSubmitAction(IRequestCycle cycle) {
-        // Authenticate user's login attempt
-        ..
-    }
-
-    public void helpSubmitAction(IRequestCycle cycle) throws RequestCycleException {
-        // Redirect to Help Desk page
-        throw new PageRedirectException("HelpDesk");
-    }
-    
-}
-</pre>
-    
-    <td></td>
-
-<tr>
- <td colspan="2"><hr></td>
-</tr>
-
-<tr>
- <td colspan="2">
- In the following example the Submit component uses the <b>selected</b> and 
- <b>tag</b> parameters to identify the event source in the Form's 
- <A href="../api/org/apache/tapestry/IActionListener.html">listener</A> method.
- For more information about this example please see 
- <A href="PropertySelection.html">PropertySelection</a>. 
- <p>
-
-<table class="examples" valign="middle" cellspacing="8">
- <tr>
-  <td>
-  <form>
-   <br>
-   Item:
-	 <select>
-	  <option selected>Dress</option>
-	  <option>Jacket</option>
-	  <option>Pants</option>
-	  <option>Shirt</option>
-	  <option>Skirt</option>
-	 </select>
-   <p>
-   Description: Cotton full length Summer dress
-   <p>
-   Label: CountryClub 
-   <p>
-   Price: $89.95
-   <p>     
-   <input type="Submit" value="Add to Cart"/>
-   </form>
-	</td>
- </tr>
-</table>
-
-      <pre>
-&lt;form jwcid="@<A href="Form.html">Form</a>" listener="ognl: listeners.formSubmit"&gt;
- Item: &lt;span jwcid="selectItem"/&gt;
- &lt;p&gt;
- Description: &lt;span jwcid="@<A href="Insert.html">Insert</a>" value="ognl: clothingItem.description"&gt;100% Egyptian Cotton&lt;/span&gt;
- &lt;p&gt;
- Label: &lt;span jwcid="@<A href="Insert.html">Insert</a>" value="ognl: clothingItem.label"&gt;Jersey Bed Sheet&lt;/span&gt;
- &lt;p&gt;
- Price: $&lt;span jwcid="@<A href="Insert.html">Insert</a>" value="ognl: clothingItem.price"&gt;$150.00&lt;/span&gt;
- &lt;p&gt;
- &lt;input jwcid="<span class="jwcid">addToCartSubmit</span>" type="Submit" value="Add to Cart"/&gt;
-&lt;/form&gt;
-
-
-&lt;property-specification name=&quot;itemSelectionModel&quot; type=&quot;ItemSelectionModel&quot; persistent=&quot;yes&quot;/&gt;<br>&lt;property-specification name=&quot;clothingItem&quot; type=&quot;Item&quot; persistent=&quot;yes&quot;/&gt;<br>&lt;property-specification name=&quot;selectedComponent&quot; type=&quot;java.lang.String&quot;/&gt;<br>
-&lt;component id="selectItem" type="<A href="PropertySelection.html">PropertySelection</a>"&gt;
-    &lt;binding name="model" expression="itemSelectionModel"/&gt;
-    &lt;binding name="value" expression="clothingItem"/&gt;
-    &lt;binding name="submitOnChange" expression="true"/&gt;
-&lt;/component&gt;
-
-&lt;component id="<span class="jwcid">submitAddToCart</span>" type="<A href="Submit.html">Submit</a>"&gt;
-    &lt;binding name="selected" expression="selectedComponent"/&gt;
-    &lt;binding name="tag" expression='"SUBMIT_ADD_TO_CHART"'/&gt;
-&lt;/component&gt;
-
-public abstract class PurchagePage extends BasePage {
-
-    public abstract String getSelectedComponent();
-    
-    public abstract void setSelectedComponent(String value);
-
-    public abstract Item getClothingItem();
-
-    public abstract void setClothingItem(Item value);
-
-    public abstract ItemSelectionModel getItemSelectionModel();
-
-    public abstract ItemSelectionModel setItemSelectionModel(ItemSelectionModel value);
-
-    public void formSubmit(IRequestCycle cycle) {
-        if (getSelectedComponent().equals("SUBMIT_ADD_TO_CHART")) {
-            // Submit from submitAddToCart component.
-            // Add selected item to shopping cart
-            Item item = getClothingItem();         
-            ..
-        } else {
-            // Submit from selectItem component. 
-            // Item display will automatically update, but we will log user's 
-            // interest in the selected clothing item
-            ..
-        }
-    }   
-}
-
-public class Item implements Serializable {
-    private Integer id;	 
-    private String name;
-    private String description;
-    private String label;
-    private String price;
-
-    public Item(Integer id, String name, String desc, String label, String price) { 
-        this.id = id; 
-        this.name = name;
-        this.description = desc;
-        this.label = label;
-        this.price = price;
-    }
-
-    public int getId() { return id;  }
-
-    public String getName() { return name;  }
-
-    public int getDescription() { return description;  }
-
-    public int getLabel() { return label;  }   
-   
-    public int getPrice() { return price;  }   
-}
-
-public class ItemSelectionModel implements <A href="../api/org/apache/tapestry/form/IPropertySelectionModel.html">IPropertySelectionModel</a>, Serializable {
-    private List itemList;
-
-    public ItemPropertySelectionModel(List itemList) { 
-        this.itemList = itemList; 
-    }  
-
-    public int getOptionCount() { return itemList.size(); }
-
-    public Object getOption(int index) {
-        return itemList.get(index)
-    }
-
-    public String getLabel(int index) {
-        return ((Item) itemList.get(index)).getName();
-    }
-
-    public String getValue(int index) { Integer.toString(index); }
-
-    public Object translateValue(String value) {
-        return getOption(Integer.parseInt(value));
-    }
-}
-</pre>
-    </td>
-  </tr></table>
-<tr>
- <td colspan="3"><hr></td>  
-</tr>
-<tr>
- <td align="left"><A href="Shell.html"><IMG alt=Shell src="common-images/prev.png"></A></td>  
- <td align="middle"><A href="index.html"><IMG alt="Component Index" src="common-images/home.png" ></A></td>  
- <td align="right"><A href="TextArea.html"><IMG alt=TextArea src="common-images/next.png"></A></td>  
-</tr>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/3.0.4/doc/src/ComponentReference/Tapestry.css b/3.0.4/doc/src/ComponentReference/Tapestry.css
deleted file mode 100644
index 5d33136..0000000
--- a/3.0.4/doc/src/ComponentReference/Tapestry.css
+++ /dev/null
@@ -1,25 +0,0 @@
-/* $Id$*/
-IMG  {
-	border : 0;
-}
-
-BODY, TABLE, TD, P  {
-	font-family : verdana, arial, helvetica, sans-serif;
-	font-size : 12px;
-}
-
-/* CR Examples*/
-TABLE.EXAMPLES  {
-	background-color : Silver;
-}
-
-/* CR Examples JWCID*/
-SPAN.JWCID  {
-	font-weight : bold;
-}
-
-/* CR Examples Type*/
-SPAN.TYPE  {
-	font-weight : bold;
-}
-
diff --git a/3.0.4/doc/src/ComponentReference/TextArea.html b/3.0.4/doc/src/ComponentReference/TextArea.html
deleted file mode 100644
index 3839e14..0000000
--- a/3.0.4/doc/src/ComponentReference/TextArea.html
+++ /dev/null
@@ -1,173 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<!-- $Id$ --> 
-<html>
-<head>
-<title>TextArea</title>
-<link rel="stylesheet" type="text/css" href="Tapestry.css" title="style">
-</head>
-<body>
-
-<table border="0" cellpadding="0" cellspacing="0" width="100%">
- <tr>
-  <td align="left"><A href="Submit.html"><IMG alt=Submit src="common-images/prev.png"></A></td>  
-  <td align="middle"><A href="index.html"><IMG alt="Component Index" src="common-images/home.png" ></A></td>  
-  <td align="right"><A href="TextField.html"><IMG alt=TextField src="common-images/next.png"></A></td>  
- <tr>
- <tr>
-  <td colspan="3"><hr></td>  
- </tr>
- <tr>
-  <td colspan="3">
-   <table border="0" cellpadding="4" cellspacing="4" width="100%">
-
-<tr valign="top">
- <td>
-  <table>
-	 <tr>
-	  <td><font size="+2"><b>TextArea</b></font></td>
-	 </tr>
-	 <tr>
-	  <td>
-		 <A href="../api/org/apache/tapestry/form/TextArea.html">
-		 org.apache.tapestry.form.TextArea</A>
-		</td>
-	 </tr>
-  </table>
- </td>
- <td>
-  <table align="right" valign="middle" bgcolor="#c0c0c0" cellspacing="8">
-	 <tr>
-	  <td>Text Input:</td>
-	  <td><TEXTAREA name=textarea rows=3></TEXTAREA></td>
-	 </tr>
-  </table>
- </td>
-</tr>
-
-<tr valign="center">
- <td colspan="2">&nbsp;</td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Description</b>
-	<br>
-  Provides a HTML &lt;textarea&gt; form element. 
-	This component must be wrapped by a <A href="Form.html">Form</A> component.
-  <p>
-  Use the HTML "wrap" attribute as an informal 
-            parameter to control word wrapping. Wrap attribute values include: 
-            "off", "vitual", "physical", "soft" and "hard".</p>
-            <P>Prior to release 2.2, this component was named 
-            <STRONG>Text</STRONG>.</P>
-             
- </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>See Also</b>
-	<br>
-	<A href="Form.html">Form</A>, 
-	<A href="TextField.html">TextField</A>
- </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Parameters</b>
-	<br>
-  <table border="1" cellpadding="4" cellspacing="4" class="parameters">
-   <tr>
-    <th>Name</th>
-    <th>Type</th>
-	  <th>Direction</th>
-    <th>Required</th>
-    <th>Default</th>
-    <th>Description</th>
-   </tr>
-   <tr>
-    <td>value</td>
-    <td>String</td>
-    <td>in-out</td>
-   	<td>no</td>
-		<td>post</td>
-		<td>The text inside the textarea.  The parameter is only updated
-			when the the Text component is not disabled.
-    </td>
-	 </tr>
-   <tr>
- 		<td>disabled</td>
-		<td>boolean</td>
-		<td>in</td>
-		<td>no</td>
-		<td>false</td>
-		<td>Controls whether the textarea is active or not.  If disabled, then
-			any value that comes up when the form is submitted is ignored.
-        Corresponds to the "disabled" HTML attribute.</td>
-	 </tr>
-
-
-	</table><BR>Body: 
-            <STRONG>removed</STRONG><BR>Informal parameters: 
-            <STRONG>allowed</STRONG>
-    <br>
-  Reserved parameters: "name"
- </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Examples</b>
-	<p>
-  The Text component is used in this example eto provide a customer comments 
-  feedback &lt;textarea&gt;.
-	<p>
-
-  <table class="examples" valign="middle" cellspacing="8">
-	 <tr>
-	  <td>Your Comments</td>
-	  <td><TEXTAREA name=textarea rows=5>Please enter your comments here</TEXTAREA>
-    </td>
-	 </tr>
-	 <tr align="right">
-    <td colspan="2"><input type="submit" value="Submit"></td>
-	 </tr>
-  </table>
-<p>		
-
-<pre>
-&lt;table valign="middle"&gt;
-&lt;form jwcid=&quot;@<a href="Form.html">Form</a>&quot; listener="ognl:listeners.formSubmit"&gt;
- &lt;tr&gt;
-  &lt;td&gt;Your Comments&lt;/td&gt;
-  &lt;td&gt;&lt;textarea jwcid="<span class="jwcid">commentsText</span>" rows="5" cols="20"/&gt;&lt;/td&gt;
- &lt;/tr&gt;
- &lt;tr align="right"&gt;
-  &lt;td colspan="2"&gt;&lt;input type="submit" value="Submit"/&gt;&lt;/td&gt;
- &lt;/tr&gt;
-&lt;/form&gt;
-&lt;/table&gt;
-
-&lt;property-specification name=&quot;comments&quot; type=&quot;java.lang.String&quot; persistent=&quot;yes&quot; initial-value=&quot;'Please enter your comments here'&quot;/&gt;<br>
-public class CustomerCommentsPage extends BasePage {
-    public void formSubmit(IRequestCycle requestCycle) {
-        // Proccess customer comments
-    }
-}
-</pre>
-          </td>
-        </tr></table>
-</td></tr>
-<tr>
- <td colspan="3"><hr></td>  
-</tr>
-<tr>
- <td align="left"><A href="Submit.html"><IMG alt=Submit src="common-images/prev.png"></A></td>  
- <td align="middle"><A href="index.html"><IMG alt="Component Index" src="common-images/home.png" ></A></td>  
- <td align="right"><A href="TextField.html"><IMG alt=TextField src="common-images/next.png"></A></td>  
-</tr>
-</table>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/3.0.4/doc/src/ComponentReference/TextField.html b/3.0.4/doc/src/ComponentReference/TextField.html
deleted file mode 100644
index 59699a8..0000000
--- a/3.0.4/doc/src/ComponentReference/TextField.html
+++ /dev/null
@@ -1,198 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<!-- $Id$ --> 
-<html>
-<head>
-<title>TextField</title>
-<link rel="stylesheet" type="text/css" href="Tapestry.css" title="style">
-</head>
-
-<body>
-<table border="0" cellpadding="0" cellspacing="0" width="100%">
- <tr>
-  <td align="left"><A href="TextArea.html"><IMG alt=TextArea src="common-images/prev.png"></a></td>  
-  <td align="middle"><A href="index.html"><IMG alt="Component Index" src="common-images/home.png" ></a></td>  
-  <td align="right"><A href="Upload.html"><IMG alt=Upload src="common-images/next.png"></a></td>  
- <tr>
- <tr>
-  <td colspan="3"><hr></td>  
- </tr>
- <tr>
-  <td colspan="3">
-   <table border="0" cellpadding="4" cellspacing="4" width="100%">
-
-<tr valign="top">
- <td>
-  <table>
-	 <tr>
-	  <td><font size="+2"><b>TextField</b></font></td>
-	 </tr>
-	 <tr>
-	  <td>
-		 <A href="../api/org/apache/tapestry/form/TextField.html">
-		 org.apache.tapestry.form.TextField</a>
-		</td>
-	 </tr>
-  </table>
- </td>
- <td>
-  <table align="right" valign="middle" bgcolor="#c0c0c0" cellspacing="8">
-	 <tr>
-	  <td>
-		Text Field&nbsp;<input value="some text">
-    </td>
-	 </tr>
-  </table>
- </td>
-</tr>
-
-<tr valign="center">
- <td colspan="2">&nbsp;</td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Description</b>
-	<br>
-  Used to implement a HTML text form element, either a &lt;input type="text"&gt; or 
-  &lt;input type="password"&gt;. This component must be wrapped by a 
-  <A href="Form.html">Form</a>
-            . 
- </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>See Also</b>
-	<br>
-	<A href="Form.html">Form</a>, 
-	<a href="TextArea.html">TextArea</a>
-	<A href="ValidField.html">ValidField</a>
- </td>
-</tr><!-- Parameters -->
-<tr>
- <td colspan="2">
-  <b>Parameters</b>
-  <br> 
-  <table border="1" cellpadding="4" cellspacing="4" class="parameters">
-  <tr>
-    <th>Name</th>
-    <th>Type</th>
-	  <th>Direction</th>
-    <th>Required</th>
-    <th>Default</th>
-    <th>Description</th>
-  </tr>
-  <tr>
-    <td>value</td>
-    <td>String</td>
-    <td>in-out</td>
-   	<td>yes</td>
-		<td>&nbsp;</td>
-		<td>The text inside the text field.  The binding is only updated
-			when the the component is not disabled.
-			Corresponds to the "value" HTML attribute.
-    </td>
-	</tr>
-	<tr>
-		<td>hidden</td>
-		<td>boolean</td>
-		<td>in</td>
-		<td>no</td>
-		<td>false</td>
-		<td>If true, then the text field is written as a
-			&lt;input type="password"&gt; form element.  
-    </td>  
-  </tr>
-  <tr>
- 		<td>disabled</td>
-		<td>boolean</td>
-		<td>in</td>
-		<td>no</td>
-		<td>false</td>
-		<td>Controls whether the text field is active or not.  If disabled, then
-			any value that comes up when the form is submitted is ignored.
-        Corresponds to the "disabled" HTML attribute.
-    </td>
-	</tr>
-	</table><BR>Body: 
-            <STRONG>removed</STRONG><BR>Informal parameters: 
-            <STRONG>allowed</STRONG>
-    <br>
-  Reserved parameters: "type", "value"  
- </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Examples</b>
-	<p>
-  The TextField component is used here to provide a plain text and a password 
-  form input field.
-	<p>
-
-<table class="examples" cellspacing="8" valign="middle">
- <tr>
-  <td>Id</td>
-  <td><input size="8" value="1245"></td>
-	<td>Password</td>
-  <td><input  size="8" type="password" value="password"></td>
- </tr>
- <tr>
-  <td colspan="4" align="right"><input type="submit" value="Submit"></td>
- </tr>
-</table>
-
-            <pre>
-&lt;form jwcid="@<a href="Form.html">Form</a>" listener="ognl:listeners.formSubmit"&gt;
- &lt;table valign="middle"&gt;
-  &lt;tr&gt;
-   &lt;td&gt;Id&lt;/td&gt;
-   &lt;td&gt;&lt;span jwcid="inputId<span class="jwcid">@<a href="TextField.html">TextField</a></span>" value="ognl:visit.id" size="8"/&gt;&lt;/td&gt;
-   &lt;td&gt;Password&lt;/td&gt;
-   &lt;td&gt;&lt;span jwcid="inputPassword<span class="jwcid">@<a href="TextField.html">TextField</a></span>" value="ognl:visit.password" hidden=&quot;ognl:true&quot; size="8"/&gt;&lt;/td&gt;
-  &lt;/tr&gt;
-  &lt;tr&gt;
-   &lt;td colspan="4" align="right"&gt;&lt;input type="submit" value="Submit"/&gt;&lt;/td&gt;
-  &lt;/tr&gt;
- &lt;/table&gt; 
-&lt;/form&gt;	
-
-
-public class PasswordPage extends BasePage {
-    public void formSubmit(IRequestCycle requestCycle) {
-        // Process the form submission.
-    }
-}
-
-public class Visit implements Serializable {
-    private String id;
-    private String password;
-
-    public String getId() { return id; }
-
-    public void setId(String value) {
-        id = value;
-    }
-
-    public String getPassword() { return password; }
-
-    public void setPassword(String value) {
-        password = value;
-    }    
-}
-</pre>
-
- </td></tr></table>
-</td></tr>
-<tr>
- <td colspan="3"><hr></td>  
-</tr>
-<tr>
- <td align="left"><A href="TextArea.html"><IMG alt=TextArea src="common-images/prev.png"></a></td>  
- <td align="middle"><A href="index.html"><IMG alt="Component Index" src="common-images/home.png" ></a></td>  
- <td align="right"><A href="Upload.html"><IMG alt=Upload src="common-images/next.png"></a></td>  
-</tr>
-</table>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/3.0.4/doc/src/ComponentReference/Upload.html b/3.0.4/doc/src/ComponentReference/Upload.html
deleted file mode 100644
index 22dd12a..0000000
--- a/3.0.4/doc/src/ComponentReference/Upload.html
+++ /dev/null
@@ -1,298 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<!-- $Id$ --> 
-<html>
-<head>
-<title>Upload</title>
-<link rel="stylesheet" type="text/css" href="Tapestry.css" title="style">
-</head>
-
-<body>
-<table border="0" cellpadding="0" cellspacing="0" width="100%">
- <tr>
-  <td align="left"><A href="TextField.html"><IMG alt=TextField src="common-images/prev.png"></a></td>  
-  <td align="middle"><A href="index.html"><IMG alt="Component Index" src="common-images/home.png" ></a></td>  
-  <td align="right"><A href="ValidField.html"><IMG alt=ValidField src="common-images/next.png"></a></td>  
- <tr>
- <tr>
-  <td colspan="3"><hr></td>  
- </tr>
- <tr>
-  <td colspan="3">
-   <table border="0" cellpadding="4" cellspacing="4" width="100%">
-
-<tr valign="top">
- <td>
-  <table>
-	 <tr>
-	  <td><font size="+2"><b>Upload</b></font></td>
-	 </tr>
-	 <tr>
-	  <td>
-		 <A href="../api/org/apache/tapestry/form/Upload.html">
-		 org.apache.tapestry.form.Upload</a>
-		</td>
-	 </tr>
-  </table>
- </td>
- <td>
-  <table align="right" valign="middle" bgcolor="#c0c0c0" cellpadding="8">
-	 <tr>
-	  <td><input type="file"></td>
-	 </tr>
-  </table>
- </td>
-</tr>
-
-<tr valign="center">
- <td colspan="2">&nbsp;</td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Description</b>
-	<br>
-  A form element used to handle file uploads.  The uploaded file is represented 
-  by an instance of <a href="../api/org/apache/tapestry/request/IUploadFile.html">IUploadFile</a>.
-  By default the upload component limits the size of uploads to 10,000,000 bytes.  To
-  alter this limit you can add the following to your *.application specification:
-
-<pre>
-  &lt;extension name="org.apache.tapestry.multipart-decoder"
-      class="org.apache.tapestry.multipart.DefaultMultipartDecoder"&gt;
-    &lt;configure property-name="maxSize" type="double" value="134217728"/&gt;
-        &lt;!-- where the value is the maximum size you want to allow --&gt;
-  &lt;/extension&gt;
-</pre>
-  <br>
-  Alternatively you can use:
-<pre>
-  DefaultMultipartDecoder.getSharedInstance().setMaxSize(12345678);
-</pre>
-  <br>
-  Setting the size to -1 will remove any limit checking.
-          </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>See Also</b>
-	<br>
-	<A href="Form.html">Form</a> 
- </td>
-</tr>
-
-
-<tr>
- <td colspan="2">
-  <b>Parameters</b>
-	<br>
-  <table border="1" cellpadding="4" cellspacing="4" class="parameters">
-  <tr> 
-    <th>Name</th>
-    <th>Type</th>
-	  <th>Direction</th>
-    <th>Required</th> 
-    <th>Default</th>
-    <th>Description</th>
-  </tr>
-  <tr>
-    <td>file</td>
-    <td><A href="../api/org/apache/tapestry/request/IUploadFile.html"><tt>
-    IUploadFile</tt></a>
-    </td>
-    <td>out</td>
-   	<td>yes</td>
-		<td>&nbsp;</td>
-		<td>Updated, when the form is submitted, with the name and content uploaded. 
-		</td>
-	</tr>
-  <tr>
- 		<td>disabled</td>
-		<td>boolean</td>
-		<td>in</td>
-		<td>no</td>
-		<td>false</td>
-		<td>If true, then (on render) the "disabled" attribute is written into the 
-    tag and on submit, the upload will not update its file parameter.
-    Note Netscape Navigator 4 will ignore this attribute.  
-		</td>
-	</tr>
-	</table><BR>Body: <STRONG>removed</STRONG><BR>
-  Informal parameters: <STRONG>allowed</STRONG><br>
-  Reserved parameters: "name", "type"
- </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Examples</b>
-	<p>
-  Provides a file upload form and displays the results of the upload.
-	<p>
-  To save the uploaded file to the WEB context path, rather than the default 
-  <tt>java</tt> path, use the <tt>ServletContext.getRealPath()</tt> method to 
-  obtain the web application's directory path.
-
-<form>
-<table class="examples" cellpadding="4">
-<tr>
- <td colspan="2">File:&nbsp;<input type="file"></td>
-</tr>
-<tr>
- <td colspan="2"><input type="submit" value="Upload"></td>
-</tr>
-<tr>
- <td colspan="2"><hr></td>
-</tr>
-<tr>
- <td>File Name:</td><td>mybook.txt</td>
-</tr>
-<tr>
- <td>Client Path:</td><td>C:\mybook.txt</td>
-</tr>
-<tr>
- <td>Server Path:</td><td>C:\Program Files\Tomcat 4.0.4\bin\mybook.txt</td>
-</tr>
-<tr>
- <td>File Truncated:</td><td>false</td>
-</tr>
-<tr>
- <td>File Size:</td><td>2,399&nbsp;bytes</td>
-</tr>
-</table>
-</form>
-
-            <pre>
-&lt;form jwcid="@<a href="Form.html">Form</a>" listener="ognl:listener.formSubmit"&gt;
- &lt;table bgcolor="#c0c0c0" cellpadding="4"&gt;
-  &lt;tr&gt;
-   &lt;td colspan="2"&gt;File:&amp;nbsp;&lt;input jwcid="<span class="jwcid">@<a href="Upload.html">Upload</a></span>" file="ognl:file" type= "file"&gt;&lt;/input&gt;&lt;/td&gt;
-  &lt;/tr&gt;
-  &lt;tr&gt;
-   &lt;td colspan="2"&gt;&lt;input type= "submit"value="Upload"&gt;&lt;/input&gt;&lt;/td&gt;
-  &lt;/tr&gt;
-  &lt;tr&gt;
-   &lt;td colspan="2"&gt;&lt;hr&gt;&lt;/td&gt;
-  &lt;/tr&gt;
-  &lt;tr&gt;
-   &lt;td&gt;Filename:&lt;/td&gt;&lt;td&gt;&lt;span jwcid="@<a href="Insert.html">Insert</a>" value="ognl:filename"/&gt;/td&gt;
-  &lt;/tr&gt;
-  &lt;tr&gt;
-   &lt;td&gt;Client path:&lt;/td&gt;&lt;td&gt;&lt;span jwcid="@<a href="Insert.html">Insert</a>" value="ognl:clientPath"/&gt;&lt;/td&gt;
-  &lt;/tr&gt;
-  &lt;tr&gt;
-   &lt;td&gt;Server Path:&lt;/td&gt;&lt;td&gt;&lt;span jwcid="@<a href="Insert.html">Insert</a>" value="ognl:serverPath"/&gt;&lt;/td&gt;
-  &lt;/tr&gt;
-  &lt;tr&gt;
-   &lt;td&gt;File Truncated:&lt;/td&gt;&lt;td&gt;&lt;span jwcid="@<a href="Insert.html">Insert</a>" value="ognl:fileTruncated"/&gt;&lt;/td&gt;
-  &lt;/tr&gt;
-  &lt;tr&gt;
-   &lt;td&gt;File Size:&lt;/td&gt;&lt;td&gt;&lt;span jwcid="@<a href="Insert.html">Insert</a>" value="ognl:fileSize" format="ognl:@UploadPage@SIZE_FORMAT"/&gt;&amp;nbsp;bytes&lt;/td&gt;
-  &lt;/tr&gt;
- &lt;/table&gt;
-&lt;/form&gt;
-
-
-
-public class UploadPage extends BasePage {
-    public static final Format SIZE_FORMAT = NumberFormat.getNumberInstance();    
-    private <a href="../api/org/apache/tapestry/request/IUploadFile.html">IUploadFile</a> file;
-    private File serverFile;
-
-    public IUploadFile getFile() { return file; }
-
-    public void setFile(IUploadFile value) {
-        file = value;
-    }
-
-    public String getFilename() { 
-        if (file != null) {
-            return file.getFileName();
-        } else {
-            return "";   
-        }        
-    }
-
-    public String getClientPath() { 
-        if (file != null) { 
-            return file.getFilePath(); 
-        } else {
-            return ""; 
-        } 
-    } 
-    
-    public String getServerPath() { 
-        if (serverFile != null) { 
-            return serverFile.getAbsolutePath(); 
-        } else { 
-            return "";  
-        }
-    }
-
-    public long getFileSize() { 
-        if (serverFile != null) {
-            return serverFile.length();
-        } else {
-            return 0;   
-        }        
-    }
-
-    public boolean isFileTruncated() { 
-        if (file != null) {
-            return file.isTruncated();
-        } else {
-            return false;   
-        }        
-    }
-
-    public void formSubmit(IRequestCycle cycle) { 
-        InputStream fis = file.getStream(); 
-        FileOutputStream fos = null;
-         
-        try { 
-            fos = new FileOutputStream(new  File(file.getFileName()));
-            byte[] buffer = new byte[1024];  
-            while (true) {            
-                int length = fis.read(buffer);  
-                if (length &lt;  0) {
-                    break;
-                }
-                fos.write(buffer, 0, length);               
-            }
-            fis.close();
-            fos.close();
-            serverFile = new File(file.getFileName());
-
-        } catch (IOException ioe) {
-            ioe.printStackTrace();            
-        } finally {
-            if (fis != null) {
-                try { fis.close(); } catch (IOException ioe) {}
-            }   
-            if (fos != null) {
-                try { fos.close(); } catch (IOException ioe) {}
-            }
-        }
-    }
-
-    protected void initialize() {
-        file = null;
-        serverFile = null;
-    }
-}
-</pre>
-          </td>
-        </tr></table>
-</td></tr>
-<tr>
- <td colspan="3"><hr></td>  
-</tr>
-<tr>
- <td align="left"><A href="TextField.html"><IMG alt=TextField src="common-images/prev.png"></a></td>  
- <td align="middle"><A href="index.html"><IMG alt="Component Index" src="common-images/home.png" ></a></td>  
- <td align="right"><A href="ValidField.html"><IMG alt=ValidField src="common-images/next.png"></a></td>  
-</tr>
-</table>
-
-</body>
-</html>
diff --git a/3.0.4/doc/src/ComponentReference/ValidField.html b/3.0.4/doc/src/ComponentReference/ValidField.html
deleted file mode 100644
index 34553a9..0000000
--- a/3.0.4/doc/src/ComponentReference/ValidField.html
+++ /dev/null
@@ -1,427 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<!-- $Id$ --> 
-<html>
-<head>
-<title>ValidField</title>
-<link rel="stylesheet" type="text/css" href="Tapestry.css" title="style">
-</head>
-
-<body>
-<table border="0" cellpadding="0" cellspacing="0" width="100%">
- <tr>
-  <td align="left"><A href="Upload.html"><IMG alt=Upload src="common-images/prev.png"></a></td>  
-  <td align="right"><A href="index.html"><IMG alt="Component Index" src="common-images/home.png" ></a></td>  
- <tr>
- <tr>
-  <td colspan="2"><hr></td>  
- </tr>
- <tr>
-  <td colspan="2">
-   <table border="0" cellpadding="4" cellspacing="4" width="100%">
-
-<tr valign="top">
- <td>
-  <table>
-	 <tr>
-	  <td><font size="+2"><b>ValidField</b></font></td>
-	 </tr>
-	 <tr>
-	  <td>
-		 <A href="../api/org/apache/tapestry/valid/ValidField.html">
-		 org.apache.tapestry.valid.ValidField</a>
-		</td>
-	 </tr>
-  </table>
- </td>
- <td>
-  <table align="right" valign="middle" bgcolor="#c0c0c0" cellpadding="8">
-	 <tr>
-	  <td><b>Age</b></td><td><input style="BACKGROUND: yellow"></td>
-	 </tr>
-  </table>
- </td>
-</tr>
-
-<tr valign="center">
- <td colspan="2">&nbsp;</td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Description</b>
-	<br>
-  Provides an extended <a href="TextField.html">TextField</a> that performs 
-  automated validation and conversion of user entered text into typed Objects.
-  The ValidField component is rendered as a HTML &lt;input type="text"&gt; field 
-  and must be wrapped by a <a href="Form.html">Form</a> component.   
-  <p>
-  Each ValidField is configured with a 
-  <A href="../api/org/apache/tapestry/valid/IValidator.html">validator</a> which 
-  checks the correctness of the user's input and performs the input text to 
-  java Object translations. The <a href="Form.html">Form</a> tracks the state of 
-  all its ValidFields using a validation  
-  <a href="../api/org/apache/tapestry/valid/ValidationDelegate.html">delegate</a>.
-  Using the validation delegate you can determine whether all the form's fields
-  are valid and inform the user of any validation errors. 
-  <p>
-  There are number of pluggable validators you can assign to a ValidField 
-  including: 
-  <ul>
-   <li>
-    <A href="../api/org/apache/tapestry/valid/DateValidator.html">DateValidator</a>
-    - validates date strings and allows a minimum and maximum date range to be set 
-   </li>
-   <li>
-    <A href="../api/org/apache/tapestry/valid/EmailValidator.html">EmailValidator</a>
-    - validates email strings and allows a minimum and maximum length to be set 
-   </li>
-   <li>
-    <A href="../api/org/apache/tapestry/valid/NumberValidator.html">NumberValidator</a> 
-    - validates number strings and allows a minimum and maximum values to be set
-   </li>
-   <li>
-    <A href="../api/org/apache/tapestry/valid/PatternValidator.html">PatternValidator</a> 
-    - validates text for a specified pattern 
-   </li>
-   <li>
-    <A href="../api/org/apache/tapestry/valid/StringValidator.html">StringValidator</a> 
-    - validates string values and allows a minimum length to be set 
-   </li>
-  </ul>
-  The ValidField's 
-  <A href="../api/org/apache/tapestry/valid/BaseValidator.html">BaseValidator</a> 
-  classes automatically provide powerful client-side JavaScript field validation 
-  when their parent <a href="Form.html">Form</a> is posted.
-  Validator client scripting is disabled by default. To enable the client 
-  scripting explicitly set the "clientScriptingEnabled" property to true in 
-  each validator. For example:
-<pre>
-&lt;bean name="emailValidator" class="org.apache.tapestry.valid.EmailValidator"&gt;
-    &lt;set-property name="<b>clientScriptingEnabled</b>" expression="true"/&gt;
-    &lt;set-property name="minimumLength" expression="8"/&gt;
-    &lt;set-property name="required" expression="true"/&gt;
-&lt;/bean&gt;
-</pre>
-  <p> 
-  Note if a form includes a "Cancel" style submit button, the cancel button will 
-  need to set the form's <tt>onsubmit</tt> event handler to null, so that the 
-  JavaScript field validation is not invoked when the form is submitted. 
-  For example:
-<pre>
-  &lt;input jwcid="@<a href="Submit.html">Submit</a>" listener="ognl:listeners.okSubmit" type="Submit" value="  OK  "/&gt;
-  &lt;input jwcid="@<a href="Submit.html">Submit</a>" listener="ognl:listeners.cancelSubmit" type="Submit" value="Cancel" <b>onclick</b>="form.onsubmit = null;"/&gt;
-</pre>
- </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>See Also</b>
-	<br>
-	<A href="FieldLabel.html">FieldLabel</a>, 
-	<A href="Form.html">Form</a>, 
-  <a href="TextArea.html">TextArea</a>,
-  <A href="TextField.html">TextField</a>
- </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Parameters</b>
-	<br>	
-  <table border=1 cellpadding="4" cellspacing="4" class="parameters">
-  <tr>
-   <th>Name</th>
-   <th>Type</th>
-	 <th>Direction</th>
-   <th>Required</th>
-   <th>Default</th>
-   <th>Description</th>
-  </tr>
-  <tr>
-   <td>value</td>
-   <td>Object</td>
-   <td>in-out</td>
- 	 <td>yes</td>
-	 <td>&nbsp;</td>
-	 <td>
-   The value to be displayed (on render), and updated (when the form is
-   submitted, if the submitted value is valid). The
-   <a href="../api/org/apache/tapestry/valid/IValidator.html"><tt>IValidator</tt></a>
-   converts between object values and Strings.
-   </td>
-	</tr>
-  <tr>
-   <td>validator</td>
-   <td>
-    <A href="../api/org/apache/tapestry/valid/IValidator.html"><tt>IValidator</tt></a>
-   </td>
-   <td>in</td>
-   <td>yes</td>
-   <td>&nbsp;</td>
-   <td>
-   Object used to convert object values to Strings (for renderring)
-   and to validate and convert Strings into object values (when the form
-   is submitted).
-   </td>
-  </tr>
-  <tr>
-   <td>displayName</td>
-   <td>String</td>
-   <td>in</td>
-   <td>yes</td>
-   <td>&nbsp;</td>
-   <td>
-    A textual name for the field that is used when formulating error messages.
- 	  Also used by the <A href="FieldLabel.html">FieldLabel</a> component to 
-    properly label the field.
-   </td>
-  </tr>
-	<tr>
-	 <td>hidden</td>
-	 <td>boolean</td>
-	 <td>in</td>
-	 <td>no</td>
-	 <td>false</td>
-	 <td>
-    If true, then the text field is written as a &lt;input type="password"&gt; 
-    form element.
-   </td>
-  </tr>
-  <tr>
-   <td>disabled</td>
-   <td>boolean</td>
-   <td>in</td>
-   <td>no</td>
-   <td>false</td>
-   <td>
-    Controls whether the text field is active or not.  If disabled, then
-		any value that comes up when the form is submitted is ignored. Corresponds 
-    to the "disabled" HTML attribute.
-   </td>
-	</tr>
-	</table>
-  <p>Body: <strong>removed</strong><br>
-  Informal parameters:<strong>allowed</strong><br>
-  Reserved parameters: "name", "type", "value" 
-  </p>      
- </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Examples</b>
-  <p>
-  The ValidField is used in this example to provide an auction bidding page. A
-  custom
-  <a href="../api/org/apache/tapestry/valid/ValidationDelegate.html"><tt>ValidationDelegate</tt></a>
-  is used to render the invalid fiels as yellow. A custom ShowError component 
-  is also used to display the first error message if any fields have errors. 
-	<p>
-  For a more extensive example see the 
-  <a href="../Tutorial/workbench.html">Tapestry Workbench</a>. The Fields 
-  example in the Workbench also illustrates how to use the 
-  <a href="FieldLabel.html">FieldLabel</a> component to high light invalid 
-  fields.
-	<p>
-
-<form>
-<table class="examples" cellpadding="2">
-<tr>
- <td colspan="2"><font color="navy" size="+2"><i><b>Regal Auctions Bid Page</b></i></font></td>
-</tr>
-<tr>
- <td colspan="2"><hr></td>
-</tr>
-<tr>
- <td colspan="2"><font color="red">Bid Amount must be greater than 10.0</font></td>
-</tr>
-<tr>
- <td>Lot Number</td><td><input type="text" size="4" maxlength="4" value="23"/></td>
-</tr>
-<tr>
- <td>Bid Amount</td><td><input type="text" size="7" maxlength="7" value="9.99" style="background:yellow"/></td>
-</tr>
-<tr>
- <td>Full Name</td><td><input type="text" size="25" maxlength="30" value="Peter McHolder"/></td>
-</tr>
-<tr>
- <td>Email</td><td><input type="text" size="25" maxlength="30" value="pmcholder2@hotmail.com"/></td>
-</tr>
-<tr>
- <td>Telphone</td><td><input type="text" size="25" maxlength="12" style="background:yellow"/></td>
-</tr>
-<tr>
- <td colspan="2" align="right">
-  <input type="Submit" value="   OK   ">
-  <input type="Submit" value="Cancel">
- </td>
-</tr>
-</table>
-</form>
-
-            <pre>
-
-&lt;form jwcid=&quot;@<A href="Form.html">Form</A>&quot; delegate=&quot;ognl:beans.delegate&quot;&gt;<br>&lt;table class=&quot;examples&quot; cellpadding=&quot;2&quot;&gt;<br>&lt;tr&gt;<br> &lt;td colspan=&quot;2&quot;&gt;&lt;span class=&quot;title&quot;&gt;Regal Auctions Bid Page&lt;/span&gt;&lt;/td&gt;<br>&lt;/tr&gt;<br>&lt;tr&gt;<br> &lt;td colspan=&quot;2&quot;&gt;&lt;hr&gt;&lt;/td&gt;<br>&lt;/tr&gt;<br>&lt;tr&gt;<br> &lt;td colspan=&quot;2&quot;&gt;&lt;span jwcid=&quot;@ShowError&quot; delegate=&quot;ognl:beans.delegate&quot;/&gt;&lt;/td&gt;<br>&lt;/tr&gt;<br>&lt;tr&gt;<br> &lt;td&gt;&lt;span jwcid=&quot;@<A href="FieldLabel.html">FieldLabel</A>&quot; field=&quot;ognl:components.lotNoField&quot;&gt;Lot Number&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;input jwcid=&quot;lotNoField&quot; type=&quot;text&quot; size=&quot;4&quot; maxlength=&quot;4&quot;/&gt;&lt;/td&gt;<br>&lt;/tr&gt;<br>&lt;tr&gt;<br> &lt;td&gt;&lt;span jwcid=&quot;@<A href="FieldLabel.html">FieldLabel</A>&quot; field=&quot;ognl:components.bidAmountField&quot;&gt;Bid Amount&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;input jwcid=&quot;bidAmountField&quot; type=&quot;text&quot; size=&quot;7&quot; maxlength=&quot;7&quot;/&gt;&lt;/td&gt;<br>&lt;/tr&gt;<br>&lt;tr&gt;<br> &lt;td&gt;&lt;span jwcid=&quot;@<A href="FieldLabel.html">FieldLabel</A>&quot; field=&quot;ognl:components.fullNameField&quot;&gt;Full Name&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;input jwcid=&quot;fullNameField&quot; type=&quot;text&quot; size=&quot;25&quot; maxlength=&quot;30&quot;/&gt;&lt;/td&gt;<br>&lt;/tr&gt;<br>&lt;tr&gt;<br> &lt;td&gt;&lt;span jwcid=&quot;@<A href="FieldLabel.html">FieldLabel</A>&quot; field=&quot;ognl:components.emailField&quot;&gt;Email&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;input jwcid=&quot;emailField&quot; type=&quot;text&quot; size=&quot;25&quot; maxlength=&quot;30&quot;/&gt;&lt;/td&gt;<br>&lt;/tr&gt;<br>&lt;tr&gt;<br> &lt;td&gt;&lt;span jwcid=&quot;@<A href="FieldLabel.html">FieldLabel</A>&quot; field=&quot;ognl:components.telephoneField&quot;&gt;Telephone&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;input jwcid=&quot;telephoneField&quot; type=&quot;text&quot; size=&quot;25&quot; maxlength=&quot;30&quot;/&gt;&lt;/td&gt;<br>&lt;/tr&gt;<br>&lt;tr&gt;<br> &lt;td colspan=&quot;2&quot; align=&quot;right&quot;&gt;<br>  &lt;input jwcid=&quot;@Submit&quot; listener=&quot;ognl:listeners.okSubmit&quot;  type=&quot;Submit&quot; value=&quot;   OK   &quot;/&gt;<br>  &lt;input jwcid=&quot;@Submit&quot; listener=&quot;ognl:listeners.cancelSubmit&quot;onclick=&quot;form.onsubmit = null;&quot;/&gt;<br> &lt;/td&gt;<br>&lt;/tr&gt;<br>&lt;/table&gt;<br>&lt;/form&gt;<br>
-
-&lt;property-specification name=&quot;lotBid&quot; type=&quot;com.mycorp.LotBid&quot; persistent=&quot;yes&quot; initial-value=&quot;new com.mycorp.LotBid()&quot;/&gt;<br>&lt;property-specification name=&quot;actionDetails&quot; type=&quot;com.mycorp.ActionDetails&quot; persistent=&quot;yes&quot;/&gt;<br>
-&lt;bean name="delegate" class="com.mycorp.FormValidationDelegate"/&gt;
-
-&lt;bean name="lotNoValidator" class="<A href="../api/org/apache/tapestry/valid/NumberValidator.html">org.apache.tapestry.valid.NumberValidator</a>"&gt;
-    &lt;set-property name="required" expression="true"/&gt;
-    &lt;set-property name="minimum" expression="1"/&gt;
-    &lt;set-property name="maximum" expression="auctionDetails.numberLots"/&gt;
-    &lt;set-property name="valueType"&gt;"int"&lt;/set-property&gt;
-&lt;/bean&gt;
-
-&lt;bean name="bidAmountValidator" class="<A href="../api/org/apache/tapestry/valid/NumberValidator.html">org.apache.tapestry.valid.NumberValidator</a>"&gt;
-    &lt;set-property name="required" expression="true"/&gt;
-    &lt;set-property name="minimum" expression="auctionDetails.minBid"/&gt;
-    &lt;set-property name="maximum" expression="auctionDetails.maxBid"/&gt;
-    &lt;set-property name="valueType"&gt;"float"&lt;/set-property&gt;    
-&lt;/bean&gt;
-
-&lt;bean name="fullNameValidator" class="<A href="../api/org/apache/tapestry/valid/StringValidator.html">org.apache.tapestry.valid.StringValidator</a>"&gt;
-    &lt;set-property name="required" expression="true"/&gt;
-    &lt;set-property name="minimumLength" expression="3"/&gt;
-&lt;/bean&gt;
-
-&lt;bean name="emailValidator" class="<A href="../api/org/apache/tapestry/valid/StringValidator.html">org.apache.tapestry.valid.StringValidator</a>"&gt;
-    &lt;set-property name="required" expression="true"/&gt;
-    &lt;set-property name="minimumLength" expression="12"/&gt;
-&lt;/bean&gt;
-
-&lt;bean name="telephoneValidator" class="<A href="../api/org/apache/tapestry/valid/StringValidator.html">org.apache.tapestry.valid.StringValidator</a>"&gt;
-    &lt;set-property name="required" expression="true"/&gt;
-    &lt;set-property name="minimumLength" expression="11"/&gt;
-&lt;/bean&gt;
-
-&lt;component id="<span class="jwcid">lotNoField</span>" type="<A href="ValidField.html">ValidField</a>"&gt;
-    &lt;binding name="value" expression="lotBid.lotNo"/&gt;
-    &lt;binding name="validator" expression="beans.lotNoValidator"/&gt;
-    &lt;static-binding name="displayName" value="Lot Number"/&gt;
-&lt;/component&gt;
-
-&lt;component id="<span class="jwcid">bidAmountField</span>" type="<A href="ValidField.html">ValidField</a>"&gt;
-    &lt;binding name="value" expression="lotBid.bidAmount"/&gt;
-    &lt;binding name="validator" expression="beans.bidAmountNoValidator"/&gt;
-    &lt;static-binding name="displayName" value="Bid Amount"/&gt;
-&lt;/component&gt;
-
-&lt;component id="<span class="jwcid">fullNameField</span>" type="<A href="ValidField.html">ValidField</a>"&gt;
-    &lt;binding name="value" expression="lotBid.bidderName"/&gt;
-    &lt;binding name="validator" expression="beans.fullNameValidator"/&gt;
-    &lt;static-binding name="displayName" value="Full Name"/&gt;
-&lt;/component&gt;
-
-&lt;component id="<span class="jwcid">emailField</span>" type="<A href="ValidField.html">ValidField</a>"&gt;
-    &lt;binding name="value" expression="lotBid.bidderEmail"/&gt;
-    &lt;binding name="validator" expression="beans.emailValidator"/&gt;
-    &lt;static-binding name="displayName" value="Email"/&gt;
-&lt;/component&gt;
-
-&lt;component id="<span class="jwcid">telephoneField</span>" type="<A href="ValidField.html">ValidField</a>"&gt;
-    &lt;binding name="value" expression="lotBid.bidderTelephone"/&gt;
-    &lt;binding name="validator" expression="beans.telephoneValidator"/&gt;
-    &lt;static-binding name="displayName" value="Telephone"/&gt;;
-&lt;/component&gt;
-
-
-public abstract class LotBidPage extends BasePage {
-    public abstract LotBid getLotBid();
-
-    public abstract void setLotBid(LotBid value);
-    public asbtract AuctionDetails getAuctionDetails();
-
-    public abstract void setAuctionDetails(AuctionDetails value);
-
-    public void okSubmit(IRequestCycle cycle) {
-        ValidationDelegate delegate = (ValidationDelegate) 
-            getBeans().getBean("delegate");
-
-        // If no errors process the bid, otherwise stay on this page and 
-        // let the fields show their errors.
-        if (!delegate.getHasErrors())
-            // Save the lot bid to the database.
-            ..
-            
-            // Go to the confirmation page.
-            cycle.activate("BidConfirmPage");
-        }
-    }
-    
-    public void cancelSubmit(IRequestCycle cycle) {
-        cycle.activate("AuctionListPage");
-    }
-}
-
-public class LotBid implements Serializable {
-    private int lotNo;
-    private float bidAmount;
-    private String bidderName;
-    private String bidderEmail;
-    private String bidderTelephone;
-
-    public int getLotNo() { return lotNo; }
-    
-    public void setLotNo(int value) {
-        lotNo = value;
-    }
-
-    public float getBidAmount() { return bidAmount; }
-    
-    public void setBidAmount(float value) {
-        bidAmount = value;
-    }
-                  
-    public float getBidderName() { return bidderName; }
-    
-    public void setBidderName(String value) {
-        bidderName = value;
-    }
-    
-    public float getBidderEmail() { return bidderEmail; }
-    
-    public void setBidderEmail(String value) {
-        bidderEmail = value;
-    }
-    
-    public float getBidderTelephone() { return bidderTelephone; }
-    
-    public void setBidderTelephone(String value) {
-        bidderTelephone = value;
-    }    
-}
-
-public class AuctionDetails implements Serializable {
-    private int numberLots;
-    private float minBid;
-    private float maxBid;
-    
-    public AuctionDetails(int numberLots, float minBid, float maxBid) {
-        this.numberLots = numberLots;
-        this.minBid = minBid;
-        this.maxBid = maxBid;
-    }
-    
-    public int getNumberLots() { return numberLots; }
-    
-    public float getMinBid() { return minBid; }
-
-    public float getMaxBid() { return maxBid; }    
-}
-</pre>
-          </td>
-        </tr></table>
-</td></tr>
-<tr>
- <td colspan="2"><hr></td>  
-</tr>
-<tr>
-  <td align="left"><A href="Upload.html"><IMG alt=Upload src="common-images/prev.png"></a></td>  
-  <td align="right"><A href="index.html"><IMG alt="Component Index" src="common-images/home.png" ></a></td>  
-</tr>
-</table>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/3.0.4/doc/src/ComponentReference/_template.html b/3.0.4/doc/src/ComponentReference/_template.html
deleted file mode 100644
index 4c64901..0000000
--- a/3.0.4/doc/src/ComponentReference/_template.html
+++ /dev/null
@@ -1,145 +0,0 @@
-<!--
-Tbis HTML document provides a base template for Component Reference pages.
-
-* All ??? text should be replaced.
-
-* Examples should illustrate near real world use of the component, see other
-  existing component page examples for formatting and style guidelines.
-  
-* Use Tapestry 2.2 Beta 1+ "expression" binding syntax instead of 
-  "property-path" syntax.
-  
-* Include links to Tapestry Javadoc API where appropriate.
-
-* Include Tapestry Developers Guide multi-page version where appropriate.
--->
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<!-- $Id$ --> 
-<html>
-<head>
-<title>???</title>
-<link rel="stylesheet" type="text/css" href="Tapestry.css" title="style">
-</head>
-
-<body>
-<table border="0" cellpadding="0" cellspacing="0" width="100%">
- <tr>
-  <!-- Previous component in alphabetical order. -->
-  <td align="left"><a href="???.html"><img alt="???" src="common-images/prev.png"></a></td>  
-  <td align="middle"><a href="index.html"><img alt="Component Index" src="common-images/home.png" ></a></td>
-  <!-- Next component in alphabetical order. -->
-  <td align="right"><a href="???.html"><img alt="???" src="common-images/next.png"></a></td>  
- <tr>
- <tr>
-  <td colspan="3"><hr></td>  
- </tr>
- <tr>
-  <td colspan="3">
-   <table border="0" cellpadding="4" cellspacing="4" width="100%">
-
-<tr valign="top">
- <td>
-  <table>
-   <tr>
-    <td><font size="+2"><b>???</b></font></td>
-   </tr>
-   <tr>
-    <td>
-     <A href="../api/org/apache/tapestry/???/???.html">org.apache.tapestry.???.???</a>
-    </td>
-   </tr>
-  </table>
- </td>
- <td>
-  <table align="right" valign="middle" bgcolor="#c0c0c0" cellpadding="8">
-   <tr>
-    <td>Visual / Non Visual Component</td>
-   </tr>
-  </table>
- </td>
-</tr>
-
-<tr valign="center">
- <td colspan="2">&nbsp;</td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Description</b>
-  <br> 
-  Provides a HTML ??? element. ??? 
- </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>See Also</b>
-  <br>
-  <A href="???.html">???</a>, 
-  <A href="???.html">???</a>
- </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Parameters</b>
-  <br>
-  <table border="1" cellpadding="4" cellspacing="4" class="parameters">
-   <tr> 
-    <th>Name</th>
-    <th>Type</th>
-    <th>Direction</th>
-    <th>Required</th> 
-    <th>Default</th>
-    <th>Description</th>
-   </tr>
-   <tr>
-    <td>???</td>
-    <td>String</td>
-    <td>in</td>
-    <td>yes</td>
-    <td>&nbsp;</td>
-    <td>???</td>
-   </tr>
-   <tr>
-    <td>???</td>
-    <td>String</td>
-    <td>in</td>
-    <td>no</td>
-    <td>&nbsp;</td>
-    <td>???</td>
-   </tr>
-  </table>
-  <p>
-  Body: <strong>removed</strong><br>
-  Informal parameters: <strong>allowed</strong><br>
-  <!-- component-specification "reserved-parameter" -->
-  Reserved parameters: none
-  </p>    
- </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Examples</b>
-  <p>
-  This example is under construction.
-  </p>
-      
-
- </td></tr></table>
-</td></tr>
-<tr>
- <td colspan="3"><hr></td>  
-</tr>
-<tr>
- <!-- Previous component in alphabetical order. -->
- <td align="left"><a href="???.html"><img alt="???" src="common-images/prev.png"></a></td>  
- <td align="middle"><a href="index.html"><img alt="Component Index" src="common-images/home.png" ></a></td>
- <!-- Next component in alphabetical order. -->
- <td align="right"><a href="???.html"><img alt="???" src="common-images/next.png"></a></td>  
-</tr>
-</table>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/3.0.4/doc/src/ComponentReference/build.xml b/3.0.4/doc/src/ComponentReference/build.xml
deleted file mode 100644
index 742a706..0000000
--- a/3.0.4/doc/src/ComponentReference/build.xml
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0"?>
-
-<!-- build.xml,v 1.1 2002/08/20 14:57:41 hship Exp -->
-
-<project name="Component Reference" default="install">
-
-<property name="html.install.dir" value="../../../web/doc/ComponentReference"/>
-<property name="images.src.dir" value="images"/>
-<property name="images.dest.dir" value="${html.install.dir}/images"/>
-<property name="common-images.src.dir" value="../common/images"/>
-<property name="common-images.dest.dir" value="${html.install.dir}/common-images"/>
-
-<!--  For the time being, this project is all "static".  That may change
-  	  in the future.  -->
-
-<target name="install">
-  <mkdir dir="${html.install.dir}"/>
-  <mkdir dir="${common-images.dest.dir}"/>
-  <copy todir="${common-images.dest.dir}">
-   	<fileset dir="${common-images.src.dir}">
-   		<include name="*.png"/>
-   	</fileset>
-  </copy>
-  <mkdir dir="${images.dest.dir}"/>
-  <copy todir="${images.dest.dir}">
-   	<fileset dir="${images.src.dir}">
-   		<include name="*.gif"/>
-   		<include name="*.jpg"/>
-   		<include name="*.png"/>
-   	</fileset>
-  </copy>
-  
-  <echo>Installing Component Reference documentation ...</echo>
-  <copy todir="${html.install.dir}">
-  	<fileset dir=".">
-  	    <exclude name="_template.html"/>
-  		<include name="*.html"/>
-  		<include name="*.css"/>
-  	</fileset>
-  </copy>
-</target>
-
-</project>
-
-
diff --git a/3.0.4/doc/src/ComponentReference/contrib.Choose.html b/3.0.4/doc/src/ComponentReference/contrib.Choose.html
deleted file mode 100644
index c4e3eec..0000000
--- a/3.0.4/doc/src/ComponentReference/contrib.Choose.html
+++ /dev/null
@@ -1,187 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<!-- $Id$ --> 
-<html>
-<head>
-<title>contrib:Choose</title>
-<link rel="stylesheet" type="text/css" href="Tapestry.css" title="style">
-</head>
-
-<body>
-<table border="0" cellpadding="0" cellspacing="0" width="100%">
- <tr>
-  <td align="left"><a href="index.html"><img alt="Component Index" src="common-images/home.png" ></a></td>
-  <td align="right"><a href="contrib.FormConditional.html"><img alt="contrib:FormConditional" src="common-images/next.png"></a></td>  
- <tr>
- <tr>
-  <td colspan="3"><hr></td>  
- </tr>
- <tr>
-  <td colspan="3">
-   <table border="0" cellpadding="4" cellspacing="4" width="100%">
-
-<tr valign="top">
- <td>
-  <table>
-   <tr>
-                <td><font size="+2"><b>contrib:Choose</b></font></td>
-   </tr>
-   <tr>
-    <td>
-     <A href="../api/org/apache/tapestry/contrib/components/Choose.html">org.apache.tapestry.contrib.components.Choose</a>
-    </td>
-   </tr>
-  </table>
- </td>
- <td>
-  <table align="right" valign="middle" bgcolor="#c0c0c0" cellpadding="8">
-   <tr>
-                <td> Non Visual Component</td>
-   </tr>
-  </table>
- </td>
-</tr>
-
-<tr valign="center">
- <td colspan="2">&nbsp;</td>
-</tr>
-
-<tr>
-          <td colspan="2"> 
-            <p><b>Description</b> <br>
-              The contrib:Choose component is used in conjunction with contrib:When 
-              and contrib:Otherwise components to express mutually exclusive conditional 
-              tests. <br>
-              <br>
-              The contrib:Choose component must contain one or more contrib:When 
-              components and can contain only one optional contrib:Otherwise component 
-              (which must occur after all of the contrib:When components). If 
-              the contrib:Choose component only contains one contrib:When element, 
-              then for all practical purposes, it behaves just like the Conditional 
-              component. When faced with three or more choices, this component 
-              behaves like a switch/case/default statement. 
-            <p>Each contrib:When component is examined in the order of occurrence. 
-              If and when the condition expression is satisfied the content in 
-              that component is rendered. Then all further contrib:When components 
-              are ignored. The optional contrib:Otherwise component is also automatically 
-              ignored. If none of the conditions in any contrib:When component 
-              is satisfied , then the contrib:Otherwise component is automatically 
-              selected (if it is present) and the content associated with that 
-              element is rendered.</p>
-			  The body of the contrib:Choose component can only contain: 
-            <ul>
-			  <li>White spaces<br>May appear anywhere around the When and Otherwise components.</li>
-			  <li>1 or more When components<br>Must all appear before Otherwise.</li>
-			  <li>0 or 1 Otherwise component<br>Must be the last component nested within Choose</li>
-			  </ul>
-			  
-            <p> For simple conditional testing, use the Conditional component. 
-            </p>
-          </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>See Also</b>
-  <br>
-            <A href="Conditional.html">Conditional</a>, <A href="contrib.When.html">contrib:When</a>, 
-            <A href="contrib.Otherwise.html">contrib:Otherwise</a> </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Parameters</b>
-	<br>
-            <table border="1" cellpadding="4" cellspacing="4" class="parameters">
-              <tr> 
-                <th>Name</th>
-                <th>Type</th>
-                <th>Direction</th>
-                <th>Required</th>
-                <th>Default</th>
-                <th>Description</th>
-              </tr>
-  <tr>
-    <td>condition</td>
-    <td>boolean</td>
-    <td>in</td>
-   	            <td>no</td>
-		<td>false</td>
-		<td>The condition to be met. If this value is true, then the wrapped 
-		elements will be rendered.
-		</td>
-	</tr>
-              <tr> 
-                <td>element</td>
-                <td>String</td>
-                <td>in</td>
-                <td>no</td>
-                <td>&nbsp;</td>
-                <td>If specified, then the component acts like an <a href="Any.html">Any</a>, 
-                  emitting an open and close tag. Informal parameters are applied 
-                  to the tag. If no element is specified, informal parameters 
-                  are ignored.</td>
-              </tr>
-            </table>
-            <p> Body: <STRONG>rendered<BR>
-              </STRONG> Informal parameters: <strong>allowed</strong><br>
-              Reserved parameters: <EM>invert</EM></p>
-    
- </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Examples</b>
-            <p> The following sample code shows how the text rendered depends 
-              on a user&#146;s membership category. 
-            <pre>
-
-              &lt;span jwcid=&quot;@<a href="contrib.Choose.html">contrib:Choose</a>&gt;
-                 &lt;span jwcid=&quot;@<a href="contrib.When.html">contrib:When</a>&quot; condition='ognl:&quot;visitor&quot;.equals(user.category)'&gt;
-                    ...
-                 &lt;/span&gt;
-                 &lt;span jwcid=&quot;@<a href="contrib.When.html">contrib:When</a>&quot; condition='ognl:&quot;member&quot;.equals(user.category)'&gt;
-                    ...
-                 &lt;/span&gt;
-                 &lt;span jwcid=&quot;@<a href="contrib.When.html">contrib:When</a>&quot; condition='ognl:&quot;customer&quot;.equals(user.category)'&gt;
-                    &lt;span jwcid=&quot;@<a href="contrib.Choose.html">contrib:Choose</a>&gt;
-                       &lt;span jwcid=&quot;@<a href="contrib.When.html">contrib:When</a>&quot; condition='ognl:&quot;person&quot;.equals(user.profile)'&gt;
-                          ...
-                       &lt;/span&gt;
-                       &lt;span jwcid=&quot;@<a href="contrib.When.html">contrib:When</a>&quot; condition='ognl:&quot;enterprise&quot;.equals(user.profile)'&gt;
-                          ...
-                       &lt;/span&gt;
-                    &lt;/span&gt;
-                 &lt;/span&gt;
-                 &lt;span jwcid=&quot;@<a href="contrib.Otherwise.html">contrib:Otherwise</a>&quot;&gt;
-                    ...
-                 &lt;/span&gt;
-              &lt;/span&gt;
-            </pre>
-            An if/then/else statement can be easily achieved as follows: 
-            <pre>
-			
-              &lt;span jwcid=&quot;@<a href="contrib.Choose.html">contrib:Choose</a>&quot;&gt;
-                 &lt;span jwcid=&quot;@<a href="contrib.When.html">contrib:When</a>&quot; condition=&quot;ognl: count == 0&quot;&gt;
-                    Your search did not match any documents.
-                 &lt;/span&gt;
-                 &lt;span jwcid=&quot;@<a href="contrib.Otherwise.html">contrib:Otherwise</a>&quot;&gt;
-                    &lt;span jwcid=&quot;@Insert&quot; value=&quot;ognl: count&quot;&gt;51&lt;/span&gt;&amp;nbsp;documents matched your selection.
-                 &lt;/span&gt;
-              &lt;/span&gt;
-			  </pre> 
-      
-
- </td></tr></table>
-</td></tr>
-<tr>
- <td colspan="3"><hr></td>  
-</tr>
-<tr>
- <td align="left"><a href="index.html"><img alt="Component Index" src="common-images/home.png" ></a></td>
- <td align="right"><a href="contrib.FormConditional.html"><img alt="contrib:FormConditional" src="common-images/next.png"></a></td>  
-</tr>
-</table>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/3.0.4/doc/src/ComponentReference/contrib.FormConditional.html b/3.0.4/doc/src/ComponentReference/contrib.FormConditional.html
deleted file mode 100644
index 5975363..0000000
--- a/3.0.4/doc/src/ComponentReference/contrib.FormConditional.html
+++ /dev/null
@@ -1,153 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<!-- $Id$ --> 
-<html>
-<head>
-<title>contrib:FormConditional</title>
-<link rel="stylesheet" type="text/css" href="Tapestry.css" title="style">
-</head>
-
-<body>
-<table border="0" cellpadding="0" cellspacing="0" width="100%">
- <tr>
-  <!-- Previous component in alphabetical order. -->
-  <td align="left"><a href="contrib.Choose.html"><img alt="contrib:Choose" src="common-images/prev.png"></a></td>  
-  <td align="middle"><a href="index.html"><img alt="Component Index" src="common-images/home.png" ></a></td>
-  <!-- Next component in alphabetical order. -->
-  <td align="right"><a href="contrib.FormTable.html"><img alt="contrib:FormTable" src="common-images/next.png"></a></td>  
- <tr>
- <tr>
-  <td colspan="3"><hr></td>  
- </tr>
- <tr>
-  <td colspan="3">
-   <table border="0" cellpadding="4" cellspacing="4" width="100%">
-
-<tr valign="top">
- <td>
-  <table>
-   <tr>
-                <td><font size="+2"><b>contrib:FormConditional</b></font></td>
-   </tr>
-   <tr>
-                <td> <A href="../api/org/apache/tapestry/contrib/form/FormConditional.html">org.apache.tapestry.contrib.form.FormConditional</a> 
-                </td>
-   </tr>
-  </table>
- </td>
- <td>
-  <table align="right" valign="middle" bgcolor="#c0c0c0" cellpadding="8">
-   <tr>
-                <td> Non Visual Component</td>
-   </tr>
-  </table>
- </td>
-</tr>
-
-<tr valign="center">
- <td colspan="2">&nbsp;</td>
-</tr>
-
-<tr>
-          <td colspan="2"> 
-            <p><b>Description</b> <br>
-              FormConditional is a variant of <a href="Conditional.html">Conditional</a> 
-              designed to be used in a <a href="Form.html">Form</a>, similar to 
-              the relationship between <a href="Foreach.html">Foreach</a> and 
-              <a href="ListEdit.html">ListEdit</a>. It is used to guarantee that 
-              the data will be the same during rendering and rewind when a form 
-              is submitted avoiding a stale link.<br>
-              On render, FormConditional reads condition parameter, stores it 
-              into a hidden field, and could render or not according to condition 
-              value. On rewind, the FormConditional ignores condition parameter, 
-              reads the stored value, and could render or not matching previous 
-              render.</p>
-            </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>See Also</b>
-  <br>
-  <A href="Conditional.html">Conditional</a>, 
-  <A href="Form.html">Form</a>
- </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Parameters</b>
-  <br>
-            <table border="1" cellpadding="4" cellspacing="4" class="parameters">
-              <tr> 
-    <th>Name</th>
-    <th>Type</th>
-    <th>Direction</th>
-    <th>Required</th> 
-    <th>Default</th>
-    <th>Description</th>
-   </tr>
-   <tr>
-                <td>condition</td>
-                <td>boolean</td>
-    <td>in</td>
-    <td>yes</td>
-    <td>&nbsp;</td>
-                <td>The condition to evaluate.</td>
-   </tr>
-   <tr>
-                <td>element</td>
-    <td>String</td>
-    <td>in</td>
-    <td>no</td>
-    <td>&nbsp;</td>
-                <td>The element to emulate.</td>
-   </tr>
-   <tr>
-                <td>listener</td>
-    <td>String</td>
-    <td>in</td>
-    <td>no</td>
-    <td>&nbsp;</td>
-                <td>The listener, informed <u></u>at render.</td>
-   </tr>
-   <tr>
-                <td>conditionValue</td>
-                <td>boolean</td>
-                <td>custom</td>
-    <td>no</td>
-    <td>&nbsp;</td>
-                <td>The value of the condition. During render this is obtained 
-                  from the condition parameter. During rewind it is the submitted 
-                  condition.</td>
-   </tr>
-  </table>
-            <p> Body: <strong>rendered</strong><br>
-              Informal parameters: <strong>allowed</strong><br>
-               Reserved parameters: <em>invert</em></p>    
- </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Examples</b>
-  <p>
-  This example is under construction.
-  </p>
-      
-
- </td></tr></table>
-</td></tr>
-<tr>
- <td colspan="3"><hr></td>  
-</tr>
-<tr>
- <!-- Previous component in alphabetical order. -->
- <td align="left"><a href="contrib.Choose.html"><img alt="contrib:Choose" src="common-images/prev.png"></a></td>  
- <td align="middle"><a href="index.html"><img alt="Component Index" src="common-images/home.png" ></a></td>
- <!-- Next component in alphabetical order. -->
- <td align="right"><a href="contrib.FormTable.html"><img alt="contrib:FormTable" src="common-images/next.png"></a></td>  
-</tr>
-</table>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/3.0.4/doc/src/ComponentReference/contrib.FormTable.html b/3.0.4/doc/src/ComponentReference/contrib.FormTable.html
deleted file mode 100644
index 7578afe..0000000
--- a/3.0.4/doc/src/ComponentReference/contrib.FormTable.html
+++ /dev/null
@@ -1,854 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<!-- $Id$ --> 
-<html>
-<head>
-<title>contrib:FormTable</title>
-<link rel="stylesheet" type="text/css" href="Tapestry.css" title="style">
-<STYLE type=text/css>
-.example TD { TEXT-ALIGN: center }
-.code {	FONT-FAMILY: Courier }
-.examples A { color: black }
-</STYLE>
-</head>
-
-<body>
-<table border="0" cellpadding="0" cellspacing="0" width="100%">
- <tr><!-- Previous component in alphabetical order. -->
-  <td align="left"><A href="contrib.FormConditional.html"><IMG alt="contrib:FormConditional" src="common-images/prev.png"></a></td>  
-  <td align="middle"><A href="index.html"><IMG alt="Component Index" src="common-images/home.png" ></a></td><!-- Next component in alphabetical order. -->
-  <td align="right"><A href="contrib.InspectorButton.html"><IMG alt="contrib:InspectorButton" src="common-images/next.png"></a></td>  
- <tr>
- <tr>
-  <td colspan="3"><hr></td>  
- </tr>
- <tr>
-  <td colspan="3">
-   <table border="0" cellpadding="4" cellspacing="4" width="100%">
-
-<tr valign="top">
- <td>
-  <table>
-   <tr>
-    <td><font size="+2"><b>contrib:FormTable</b></font></td>
-   </tr>
-   <tr>
-    <td>
-     <A href="../api/org/apache/tapestry/contrib/table/components/FormTable.html">org.apache.tapestry.contrib.table.components.FormTable</a>
-    </td>
-   </tr>
-  </table>
- </td>
- <td>
-  <table align="right" valign="middle" bgcolor="#c0c0c0" cellpadding="8">
-   <tr>
-    <td>Visual Component</td>
-   </tr>
-  </table>
- </td>
-</tr>
-
-<tr valign="center">
- <td colspan="2">&nbsp;</td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Description</b>
-  <br> 
- A version of the <A HREF="contrib.Table.html"><CODE>Table</CODE></A> component
- designed for use in a form. Like Table, this component allows you to present a sortable and pagable table 
- simply and easily. It also stores the items it dispays in hidden fields in the form,
- so that they are identical during the rewind cycle when the form is submitted,
- and generates links that submit the form, so that any other form information is preserved.
- <p>
- The differences between FormTable and Table are the following:
- <ul>
-     <li> It uses TableFormRows instead of TableRows 
-         which stores the rendered items in hidden form fields 
-     <li> It uses TableFormPages instead of TablePages
-         which generates links that submit the form besides changing the page
-     <li> If the columns are defined using a string in the <code>columns</code> parameter,
-         it ensures that the headers of the generated columns contain links that also submit the form.
- </ul>
- <p>
- The FormTable component allows you to manipulate its appearance by allowing you 
- to define the 'class' attributes of its internal elements. If you want to change 
- the structure of the table, however, you can instead build your own using the 
- lower level components
- <A HREF="contrib.TableView.html"><CODE>TableView</CODE></A>, 
- <A HREF="contrib.TablePages.html"><CODE>TablePages</CODE></A>, 
- <A HREF="contrib.TableFormPages.html"><CODE>TableFormPages</CODE></A>, 
- <A HREF="contrib.TableColumns.html"><CODE>TableColumns</CODE></A>, 
- <A HREF="contrib.TableRows.html"><CODE>TableRows</CODE></A>,
- <A HREF="contrib.TableFormRows.html"><CODE>TableFormRows</CODE></A>,
- and 
- <A HREF="contrib.TableValues.html"><CODE>TableValues</CODE></A>.
- <p>
- The FormTable component delegates the handling of the table model and related
- activities to the <A HREF="contrib.TableView.html"><CODE>TableView</CODE></A>, 
- and more detailed information about the process can be found in the 
- documentation of that class.
- </td>
-</tr>
-
-<tr>
- <td colspan="2">
-   <b>Providing the data</b>
-
-<p>
-There are many ways to provide the component with the data it has to render, 
-but here are the three major ones:
-
-<ol>
-<li> The data is passed to the <code>source</code> parameter in the form of an array, 
-a collection, or an iterator, and the table columns are defined using the 
-<code>columns</code> parameter (see further for details). 
-Both of these parameters will be evaluated at every request by default, 
-so changes in the data or the table columns will be displayed immediately.
-<p>
-This is the easiest and most straightforward approach. It has one performance limitation, 
-however - if the table is sorting the data according to a given column, 
-the sorting will be performed at every request. 
-The next methods provide ways to resolve this possible performance issue.
-<p></p>
-    
-<li> The data is passed to the <code>source</code> parameter via an object that
-implements the <A HREF="../api/org/apache/tapestry/contrib/table/model/IBasicTableModel.html"><CODE>IBasicTableModel</CODE></A>
-interface. Through that interface you are given the sorting column (if any) and 
-the numbers of the items that will be displayed on the current page. 
-You then need to provide the component with the corresponding data.
-<p>
-This method allows you to perform the sorting in the database and load only the data 
-that will be displayed on the current page 
-(e.g. by using the ORDER BY, LIMIT, and OFFSET clauses in SQL)
-and hence it could be far more efficient.
-<p></p>
-    
-<li> All of the information (data, columns, state) is packaged in an
-<A HREF="../api/org/apache/tapestry/contrib/table/model/ITableModel.html"><CODE>ITableModel</CODE></A>
-and is passed to the <code>tableModel</code> parameter.
-<p>
-This approach allows greatest flexibility, but is recommended only for advanced users of the Table components. 
-    
-</ol>
-
- <p></p>
- </td>
-</tr>
-
-
-<tr>
- <td colspan="2">
-   <b>Defining the columns</b>
-
-<p>
-If you define the table columns using the <code>columns</code> parameter, you can either
-provide a list of <A HREF="../api/org/apache/tapestry/contrib/table/model/ITableColumn.html"><code>ITableColumn</code></A>
-objects, each defining a column in the table, or you can define the columns using 
-a string that describes each column. 
-<p>
-The string describing the columns must be formatted in the following way:
-<ul>
-    <li>The column definitions in the string are separated by commas
-        <p>
-    <li>Each column definition must be of one of the following types:<p>
-        <dl>
-            <dd>id</dd>
-            <dd>id:expression</dd>
-            <dd>id:description:expression</dd>
-        </dl>
-        <br>
-        Here the <b>id</b> defines the identification of the column, the <b>expression</b> is an
-        OGNL expression that extracts the column value from the row object, and <b>description</b>
-        is the title of the column if it is not defined otherwise.
-        <p>
-        Each column definition may be prefixed by the <b>!</b> character, 
-        which identifies the column as non-sortable.
-        <p>
-        If defined, a Block with a name that is starts with the column id and 
-        ends with <i>ColumnValue</i> will be used to render the column values.
-        Similarly, a Block with a name that starts with the column id and 
-        ends with <i>ColumnHeader</i> will be used to render the column headers.
-        <p>
-        Finally, the title of the column will be taken from translation strings of the component
-        by using the column id as a key.
-        <p>
-        Please see the <SPAN class=code>LocaleSelection</SPAN> component for examples.
-        <p>
-    <li>A column definition may also be of the type
-        <p>
-        <dl>
-            <dd>=expression</dd>
-        </dl>
-        <br>
-        in which case it identifies an OGNL expression that returns an 
-        <A HREF="../api/org/apache/tapestry/contrib/table/model/ITableColumn.html"><code>ITableColumn</code></A>
-        object defining the column.
-        <p>
-    <li>The full description string may be prefixed by the <b>*</b> character,
-        which means that the table is to be rendered within a form, and the 
-        column headers must submit the form if they are clickable (i.e. if the column is sortable).
-</ul>
-<p>
-Here is an example of the use of a description string to define columns:
-<pre>
-  columns="locale:toString(), =currencyColumn, verbosity:Verbosity:currentRowVerbosity, !delete"
-</pre>
-    
- <p></p>
- </td>
-</tr>
-
-
- 
-<tr>
- <td colspan="2">
-  <b>See Also</b>
-  <br>
-  <A href="contrib.TableColumns.html">TableColumns</a>, 
-  <A href="contrib.TablePages.html">TablePages</a>,
-  <A href="contrib.TableRows.html">TableRows</a>,
-  <A href="contrib.TableValues.html">TableValues</a>,
-  <A href="contrib.TableView.html">TableView</a>
- </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Parameters</b>
-  <br>
-  <table border="1" cellpadding="4" cellspacing="4" class="parameters">
-   <tr> 
-    <th>Name</th>
-    <th>Type</th>
-    <th>Direction</th>
-    <th>Required</th> 
-    <th>Default</th>
-    <th>Description</th>
-   </tr>
-
- <tr>
-  <td>source</td>
-  <td><code><A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Object.html">Object</A>[]</code><br>
-      <code><A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/util/Collection.html">Collection</A></code><br>
-      <code><A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/util/Iterator.html">Iterator</A></code><br>
-      <A HREF="../api/org/apache/tapestry/contrib/table/model/IBasicTableModel.html"><CODE>IBasicTableModel</CODE></A>
-  </td>
-  <td>in</td>
-  <td rowspan="3">You must provide either both <code>source</code> and <code>columns</code> parameters 
-      or the <code>tableModel</code> parameter</td>
-  <td>&nbsp;</td>
-  <td align="left">
-    The data to be displayed by the component. This parameter must be used 
-    in combination with the <code>columns</code> parameter. 
-    The parameter must be an array of values, a collection, an iterator, 
-    or an object implementing the IBasicTableModel interface.
-  </td> 
- </tr>
-
- <tr>
-  <td>columns</td>
-  <td>
-      <code><A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/String.html">String</A></code><br>
-      <A HREF="../api/org/apache/tapestry/contrib/table/model/ITableColumnModel.html"><code>ITableColumnModel</code></A><br>
-      <A HREF="../api/org/apache/tapestry/contrib/table/model/ITableColumn.html"><code>ITableColumn[]</code></A><br>
-      <code><A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/util/List.html">List</A></code><br>
-      <code><A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/util/Iterator.html">Iterator</A></code>
-  </td>
-  <td>in</td>
-  <td>&nbsp;</td>
-  <td align="left">
-    The table columns to be displayed. 
-    The parameter must be an array, a list, or an Iterator of ITableColumn objects,
-    an ITableColumnModel, or a String describing the columns (see documentation).
-  </td> 
- </tr>
-
- <tr>
-  <td>tableModel</td>
-  <td><A HREF="../api/org/apache/tapestry/contrib/table/model/ITableModel.html"><CODE>ITableModel</CODE></A></td>
-  <td>in</td>
-  <td>&nbsp;</td>
-  <td align="left">The <A HREF="../api/org/apache/tapestry/contrib/table/model/ITableModel.html"><CODE>ITableModel</CODE></A> to be used to render the table. 
-      The model contains all of the information needed to render the table and gives greatest flexibility, 
-      but it may be harder to implement than simply using the <code>source</code> and <code>columns</code> parameters. 
-  </td> 
- </tr>
-
- <tr>
-  <td>tableSessionStateManager</td>
-  <td><A HREF="../api/org/apache/tapestry/contrib/table/model/ITableSessionStateManager.html"><CODE>ITableSessionStateManager</CODE></A></td>
-  <td>in</td>
-  <td>no</td>
-  <td>A custom session state manager that reloads the data at each request if it is provided
-      via the <code>source</code> and <code>columns</code> parameters or stores all 
-      of it in the session if it is provided via the <code>tableModel</code> parameter</td>
-  <td align="left">This is the session state manager that will control what part of the 
-      table model will be saved in the session state. 
-      It is then used to recreate the table model by
-      using what was saved in the session. 
-      <p> You can use one of the stock implementations of  
-      <A HREF="../api/org/apache/tapestry/contrib/table/model/ITableSessionStateManager.html"><CODE>ITableSessionStateManager</CODE></A>
-      to determine the session state behaviour, or you can define your own.
-  </td> 
- </tr>
-
- <tr>
-  <td>tableSessionStoreManager</td>
-  <td><A HREF="../api/org/apache/tapestry/contrib/table/model/ITableSessionStoreManager.html"><CODE>ITableSessionStoreManager</CODE></A></td>
-  <td>in</td>
-  <td>no</td>
-  <td>null</td>
-  <td align="left">Determines how the session state (returned by the session state manager)
-      will be saved in the session. If this parameter is null, then the state
-      will be saved as a persistent property. If it is not null, then the methods
-      of the interface will be used to save and load the state.
-  </td> 
- </tr>
-
- <tr>
-  <td>convertor</td>
-  <td><A HREF="../api/org/apache/tapestry/contrib/table/model/IPrimaryKeyConvertor.html"><CODE>IPrimaryKeyConvertor</CODE></A></td>
-  <td>in</td>
-  <td>no</td>
-  <td>&nbsp;</td>
-  <td align="left">An interface defining how the items iterated upon by this component
-      will be stored in the form as Hidden values. 
-      This interface allows only the primary key of the items to be stored, rather than
-      the whole item.</td> 
- </tr>
-
- <tr>
-  <td>row</td>
-  <td>Object</td>
-  <td>out</td>
-  <td>no</td>
-  <td>&nbsp;</td>
-  <td align="left">The value object of the current row being rendered.</td> 
- </tr>
-
- <tr>
-  <td>column</td>
-  <td><A HREF="../api/org/apache/tapestry/contrib/table/model/ITableColumn.html"><CODE>ITableColumn</CODE></A></td>
-  <td>out</td>
-  <td>no</td>
-  <td>&nbsp;</td>
-  <td align="left">The object representing the current column being rendered.</td> 
- </tr>
-
- <tr>
-  <td>pageSize</td>
-  <td>
-      <code>int</code>
-  </td>
-  <td>in</td>
-  <td>no</td>
-  <td>10</td>
-  <td align="left">
-      The number of records displayed per page. 
-      <p>
-      This parameter is only used with the <code>source</code> and <code>columns</code> parameters.
-  </td> 
- </tr>
-
- <tr>
-  <td>initialSortColumn</td>
-  <td>
-      <code><A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/String.html">String</A></code>
-  </td>
-  <td>in</td>
-  <td>no</td>
-  <td>null</td>
-  <td align="left">
-      The id of the column to initially sort the table by. 
-      A value of <code>null</code> indicates no sorting.
-      <p>
-      This parameter is only used with the <code>source</code> and <code>columns</code> parameters.
-  </td> 
- </tr>
-
- <tr>
-  <td>initialSortOrder</td>
-  <td>
-      <code>boolean</code>
-  </td>
-  <td>in</td>
-  <td>no</td>
-  <td>false</td>
-  <td align="left">
-      The order of the initial sorting.
-      Set this parameter to <code>false</code> to sort in an ascending order
-      and to <code>true</code> to sort in a descending one.
-      <p>
-      This parameter is only used with the <code>source</code> and <code>columns</code> parameters.
-  </td> 
- </tr>
-
- <tr>
-  <td>pagesDisplayed</td>
-  <td>int</td>
-  <td>in</td>
-  <td>no</td>
-  <td>7</td>
-  <td align="left">Determines the maximum number of pages to be displayed in the page list
-      when the table has more than one page.
-      <p>For example, if the table has 20 pages, and 10 is the current page,
-      pages from 7 to 13 in the page list will be shown if this parameter has 
-      a value of 7.
-  </td> 
- </tr>
-
- <tr>
-  <td>arrowUpAsset</td>
-  <td><A HREF="../api/org/apache/tapestry/IAsset.html"><CODE>IAsset</CODE></A></td>
-  <td>in</td>
-  <td>no</td>
-  <td>&nbsp;</td>
-  <td align="left">The image to use to describe a column sorted in an ascending order.</td> 
- </tr>
-
- <tr>
-  <td>arrowDownAsset</td>
-  <td><A HREF="../api/org/apache/tapestry/IAsset.html"><CODE>IAsset</CODE></A></td>
-  <td>in</td>
-  <td>no</td>
-  <td>&nbsp;</td>
-  <td align="left">The image to use to describe a column sorted in a descending order.</td> 
- </tr>
-
- <tr>
-  <td>pagesClass</td>
-  <td>String</td>
-  <td>in</td>
-  <td>no</td>
-  <td>&nbsp;</td>
-  <td align="left">The CSS class of the table pages.</td> 
- </tr>
-
- <tr>
-  <td>columnsClass</td>
-  <td>String</td>
-  <td>in</td>
-  <td>no</td>
-  <td>&nbsp;</td>
-  <td align="left">The CSS class of the table columns.</td> 
- </tr>
-
- <tr>
-  <td>rowsClass</td>
-  <td>String</td>
-  <td>in</td>
-  <td>no</td>
-  <td>&nbsp;</td>
-  <td align="left">The CSS class of the table rows.</td> 
- </tr>
-
- <tr>
-  <td>valuesClass</td>
-  <td>String</td>
-  <td>in</td>
-  <td>no</td>
-  <td>&nbsp;</td>
-  <td align="left">The CSS class of the table values.</td> 
- </tr>
-
-  </table>
-  <P>
-  Body: <STRONG>ignored</STRONG><BR>
-  Informal parameters: <STRONG>allowed</STRONG><br>
-  Reserved parameters: none 
-  </P>    
- </td>
-</tr>
-
-
-
-
-<tr>
- <td colspan="2">
-  <b>Examples</b>
-  <p>
-
-You can find examples in the Tutorial 
-as part of the Workbench application under the "Table" tab. 
-<P>That page consists of two components -- the <SPAN 
-class=code>LocaleList</SPAN> component and the <SPAN 
-class=code>LocaleSelection</SPAN> component. </P>
-<P>The <SPAN class=code>LocaleList</SPAN> component allows you to view all 
-Locales in a table (similar to the example above), as well as to choose Locales 
-from the table and add them to your "selection". </P>
-<P>The <SPAN class=code>LocaleSelection</SPAN> component displays the selected 
-Locales and provides additional information about them. It also allows Locales 
-to be removed from the selection. </P>
-<P>Even though the two components utilizing the Table are placed on a single 
-page, they can operate without any interference from each other with no effort 
-at all on part of the developer -- each table can be sorted independently, for 
-example. This is a good illustration of the power of Tapestry's component 
-approach. </P>
- <p></p>
- </td>
-</tr>
-
-
-<tr>
- <td colspan="2">
-<hr>
-<H2>Table Internals Guide</H2>
-This section is for advanced uses of the Table components only.
-<P>
-There are two important elements that comprise the Table 
-functionality -- the table model and the table components. 
-<P>The <STRONG>table model</STRONG> classes and interfaces provide the Table 
-with the ability to display and manipulate data from various different sources. 
-Using them in various combinations and customizing them allows the developer to 
-modify the behaviour of the table according to his needs. </P>
-<P>The <STRONG>table components</STRONG> are responsible for displaying the data 
-provided by the table model, and working with them allows the developer to 
-radically change the appearance of the table if necessary. </P>
-
-<H3>1. The Model </H3>
-<P>This section will discuss the table model and how it can be used and modified 
-to satisfy the needs of the developer. The next section will then concentrate on 
-how the table components can be used to customize the appearance of the table as 
-much as possible. </P>
-
-<H4>1.1. The Table Model Family of Classes </H4>Even though using a table model 
-can be very simple, as shown in the first example, behind the curtains it may 
-consist of many different interfaces and classes that work together to allow you 
-to modify different aspects of the table data representation and manipulation 
-without a lot of effort. 
-<P>Below you can see a UML Class diagram of the interfaces and classes in the 
-Table Model family. The rest of this section will discuss how they can be used 
-and modified as needed. </P>
-<P><IMG alt="Table Model Class Diagram" 
-src="images/tableModel.gif"> </P>
-<H4>1.2. The Table Model </H4>The table model provides the information needed by 
-the view to render the table. For example, the Table component may use its <SPAN 
-class=code>tableModel</SPAN> parameter to determine what to display. 
-<P>The Tapestry components access the table model via the relatively simple 
-<B><SPAN class=code>ITableModel</SPAN></B> interface, which is the facade of the 
-table model hierarchy. A variety of implementations of this interface can be 
-created to target different cases. </P>
-<P>The contrib library currently defines only one rudimentary implementation 
-that can be used in the majority of situations -- the <B><SPAN 
-class=code>SimpleTableModel</SPAN></B>. While versatile, however, this 
-implementation may not be suitable for all cases, and hence you may create your 
-own whenever necessary. </P>
-<P>Using the <SPAN class=code>SimpleTableModel</SPAN> is very easy -- you just 
-need to provide it with the data to be displayed and the columns that the table 
-will have: </P><PRE>    Object[] data = ...;
-    ITableColumn[] columns = ...;
-    ITableModel model = new SimpleTableModel(data, columns);
-</PRE>
-<P>This model can then be passed to the Table component, and it will display the 
-data using the given columns. <BR></P>
-<H4>1.3. The Data Model </H4>The <SPAN class=code>SimpleTableModel</SPAN> can 
-also obtain its data via the <SPAN class=code>ITableDataModel</SPAN> interface. 
-This allows the source of data to be abstracted. 
-<P>The contrib library provides two standard implementations of this interface. 
-The <SPAN class=code>SimpleListTableDataModel</SPAN> and the <SPAN 
-class=code>SimpleSetTableDataModel</SPAN>. As the names indicate, the former 
-provides the table data from Lists and arrays, while the latter provides the 
-data from Sets and other unordered Collections. Using the data models is very 
-simple as well: </P><PRE>    ArrayList data = ...;
-    ITableDataModel dataModel = new SimpleListTableDataModel(data);
-    ITableModel model = new SimpleTableModel(dataModel, ...);
-</PRE>
-<P>An example of using <SPAN class=code>SimpleSetTableDataModel</SPAN> can be 
-found in the <SPAN class=code>LocaleSelection</SPAN> component in the Workbench. 
-The storage of the selected locales there is implemented precisely using that 
-table data model.</P>
-<H4>1.4. The Column Model </H4>
-<P>A column in the table model is defined using the <STRONG><SPAN 
-class=code>ITableColumn</SPAN></STRONG> interface. It provides the information 
-needed to identify the column (the column name), to render the column (the 
-columnRender that renders the heading, and the valueRenderer that renders each 
-cell), and to sort the column (whether the column is sortable and what <SPAN 
-class=code>Comparator</SPAN> should be used for sorting the table). </P>
-<P>The basic implementation of <SPAN class=code>ITableColumn</SPAN> provided is 
-<STRONG><SPAN class=code>SimpleTableColumn</SPAN></STRONG>. It takes care of all 
-mundane tasks, such as supplying a renderer for the column header, and allows 
-you to define a column by only providing its name and a way to extract the 
-column data from the row object by overriding the <SPAN 
-class=code>getColumnValue()</SPAN> method. This is demonstrated by the example 
-below that also configures the column to be sortable: </P><PRE>    // Create a new sortable column with name and title "Full Name"
-    ITableColumn fullNameColumn = new SimpleTableColumn("Full Name", true) { 
-        public Object getColumnValue(Object value) {
-            PersonInfo info = (PersonInfo) value;
-            return info.getLastName() + ", " + info.getFirstName();
-        }
-    };
-</PRE>
-<P>Other methods can be overridden as well to provide additional features, such 
-as custom rendering, as it will be shown in the next section. </P>
-<P>The above can be achieved in a simpler, but not as flexible manner by using 
-<SPAN class=code><STRONG>ExpressionTableColumn</STRONG></SPAN>. It inherits 
-<SPAN class=code>SimpleTableColumn</SPAN>, and allows you to create columns 
-whose data is obtained via OGNL: </P><PRE>    // Create a new sortable column with name and title "Occupation"
-    ITableColumn occupationColumn =  new ExpressionTableColumn("Occupation", "occupation", true);
-
-    // Create a new sortable column with name and title "Full Name"
-    ITableColumn fullNameColumn =  new ExpressionTableColumn("Full Name", "lastName + \", \" + firstName", true);
-</PRE>
-<P>The table columns are supplied to the table model using a <SPAN 
-class=code>List</SPAN> -like container defined by the <SPAN 
-class=code><STRONG>ITableColumnModel</STRONG></SPAN> interface. The generic 
-implementation provided for this interface is<STRONG> <SPAN 
-class=code>SimpleTableColumnModel</SPAN></STRONG>, which contains an array of 
-<SPAN class=code>ITableColumn</SPAN> objects of any type. </P>
-<P>One more specific implementation available is the<STRONG> <SPAN 
-class=code>ExpressionTableColumnModel</SPAN> </STRONG>, which contains<SPAN 
-class=code>ExpressionTableColumn</SPAN> objects. It allows you to define the 
-columns of your table quickly and easily, by providing a name and an OGNL 
-expression for each one in a <SPAN class=code>String</SPAN> array: </P><PRE>    // Generate a simple sorting column model that uses OGNL to get the column data
-    ITableColumnModel objColumnModel = 
-        new ExpressionTableColumnModel(new String[] {
-            "Locale", "toString()",
-            "Language", "language",
-            "Country", "country",
-            "Variant", "variant",
-            "ISO Language", "ISO3Language",
-            "ISO Country", "ISO3Country"
-        }, true);
-</PRE>
-<H4>1.5. The Table State </H4>
-<P>The state of the table model consists of any data that is not related to the 
-contents of the table, but instead carries information about its presentation. 
-The standard table model supports two states -- the paging state (how many rows 
-per page; which page we are on) and the sorting state (which column we are 
-sorting on; in an ascending or a descending order). </P>
-<P>The paging state is defined by the <STRONG><SPAN 
-class=code>ITablePagingState</SPAN></STRONG> interface and is implemented in its 
-simplest form by <STRONG><SPAN 
-class=code>SimpleTablePagingState</SPAN></STRONG>. Similarly, the sorting state 
-is defined by<STRONG> <SPAN class=code>ITableSortingState</SPAN> </STRONG>and is 
-implemented by<STRONG> <SPAN class=code>SimpleTableSortingState</SPAN></STRONG>. 
-</P>
-<P>The states are typically accessed and modified by the components presenting 
-the table (e.g. the TablePages component can change the current page based on 
-the user selection). The user can also modify them, which is often necessary at 
-initialization: </P><PRE>    ITableModel model = new SimpleTableModel(data, columns);
-
-    // Set page size to 15 elements and go to page 8
-    model.getPagingState().setPageSize(15);
-    model.getPagingState().setCurrentPage(8);
-
-    // Sort by column 'price' in an ascending order
-    model.getSortingState().setSortColumn("price", ITableSortingState.SORT_ASCENDING);
-</PRE>
-<P>The <SPAN class=code>SimpleTableModel</SPAN> &nbsp;class keeps the two states 
-together in the<STRONG> <SPAN class=code>SimpleTableState</SPAN> 
-</STRONG>object, which can be passed via the constructor and obtained at any 
-time using the <SPAN class=code>getState()</SPAN> method. This is often useful 
-when storing the state by itself is necessary (see below). </P>
-<H4>1.6. The Session State Manager </H4>
-<P>In Web interfaces, unlike client-side GUIs, the information about the state 
-of the presentation must be kept in the session object between requests. What 
-has to be kept and what can be thrown away and recreated during the next request 
-differs in each case, however. The policy of what to do typically involves a 
-tradeoff between memory and CPU power, and hence it depends very much on the 
-specific situation. </P>
-<P>The<STRONG> <SPAN class=code>ITableSessionStateManager</SPAN> 
-</STRONG>interface is used to define precisely this policy. It defines what part 
-of the table model has to be saved in the session and can recreate the table 
-model using the saved information when the next request comes. </P>
-<P>The <SPAN class=code>Table</SPAN> and the <SPAN class=code>TableView</SPAN> 
-components have a <SPAN class=code>tableSessionStateManager</SPAN> binding that 
-allows such a manager to be supplied. When the table model is needed at the 
-beginning of a new request, the component use the following procedure to obtain 
-it: </P>
-<OL>
-  <LI>Load the session state (it will be null initially) 
-  <LI>Invoke <SPAN class=code>recreateTableModel(sessionState)</SPAN> on the 
-  Session State Manager to try to recrate the table model 
-  <LI>If <SPAN class=code>recreateTableMode()</SPAN> returns null, use the <SPAN 
-  class=code>tableModel</SPAN> binding to obtain the table model </LI></OL>
-<P>Immediately before rendering, the opposite procedure takes place: </P>
-<OL>
-  <LI>Invoke <SPAN class=code>getSessionState(tableModel)</SPAN> on the Session 
-  State Manager to extract the part of the model to be saved 
-  <LI>Save the session state </LI></OL>
-<P>Three standard implementations of the <SPAN 
-class=code>ITableSessionStateManager</SPAN> interface are provided that address 
-the common cases that can be implemented without custom code. Each of them 
-implements a different policy for extracting session state from the model and 
-hence is suitable for some specific situations: </P>
-<TABLE border=1 cellPadding=5 cellSpacing=0 width="100%">
-  <TBODY>
-  <TR>
-    <TH>Session State Manager </TH>
-    <TH>Description </TH></TR>
-  <TR>
-    <TD vAlign=center>
-      <P align=center><STRONG><SPAN 
-      class=code>FullTableSessionStateManager</SPAN> </STRONG></P></TD>
-    <TD>
-      <P><STRONG>Saves the entire table model in the session. This is the 
-      default manager.</STRONG> </P>
-      <P>This manager is the simplest to use as it brings to a minimum the need 
-      for additional coding. It has a number of disadvantages, however. First, 
-      everything in the table model must be <SPAN class=code>Serializable</SPAN> 
-      since it is stored in the session and may be serialized at one point or 
-      another. Second, depending on the table data, its memory consumption per 
-      session could be quite significant. </P>
-      <P>For those reasons, it is probably not a good idea to use this manager 
-      if you are displaying large amounts of data, if you have a lot of users, 
-      or if the application needs to be clustered. On the other hand, it is 
-      perfect for quick and dirty work. </P></TD></TR>
-  <TR>
-    <TD vAlign=center>
-      <P align=center><STRONG><SPAN 
-      class=code>SimpleTableSessionStateManager</SPAN> </STRONG></P></TD>
-    <TD>
-      <P><STRONG>Saves only the table model state and assumes that the data and 
-      column models are constant.</STRONG> </P>
-      <P>This manager is designed to work with the <SPAN 
-      class=code>SimpleTableModel</SPAN> . It stores only the model state 
-      (paging and sorting), and recreates the model using the data and column 
-      models that must be supplied via its constructor. As a result, the session 
-      memory consumption is low, but the CPU utilization may be high, since the 
-      data must be resorted at each request. This manager is best used when the 
-      data that needs to be displayed is constant. </P>
-      <P>An example of the use of the manager can be seen in the <SPAN 
-      class=code>LocaleList</SPAN> component in the Workbench. That component 
-      displays all locales available to the JVM -- information that does not 
-      change and is too much to be stored in the session. </P></TD></TR>
-  <TR>
-    <TD vAlign=center>
-      <P align=center><STRONG><SPAN 
-      class=code>NullTableSessionStateManager</SPAN> </STRONG></P></TD>
-    <TD>
-      <P><STRONG>Saves nothing at all and forces the component to always load 
-      the table model from the <SPAN class=code>tableModel</SPAN> 
-      binding.</STRONG> </P>
-      <P>This manager is typically used when the storing and creation of the 
-      table model needs to be delegated to the parent component. 
-  </P></TD></TR></TBODY></TABLE>
-<P>One approach that is a good compromise between memory consumption and CPU 
-load is to store in the session only the state and the IDs of the objects in the 
-table. In this way CPU is not loaded, since re-sorting is no longer necessary, 
-and the memory consumption is not excessive, since the IDs tend not to take a 
-lot of space. Implementing this approach, however, requires a custom manager, 
-and possibly a custom <SPAN class=code>TableModel</SPAN> to limit the data 
-loaded from the database only to the elements that will be displayed on the 
-current page.</P>
-<H4>1.7. The Session Store Manager </H4>
-<P>While the Session State Manager determines <EM>what</EM> to store in the 
-session, the Session Store Manager determines <EM>how</EM> to store data in the 
-session. Normally the information that needs to be saved is stored using the 
-Tapestry persistent property mechanism. If a Session Store Manager is provided, 
-however, it is asked to take care of storing and loading of that information. 
-</P>
-<P>This is typically necessary in two specific cases: </P>
-<OL>
-  <LI>When the same table needs to be displayed on multiple pages. In that case 
-  the persistent property method will not work as desired, and the table state 
-  must be saved in the <SPAN class=code>Visit</SPAN> instead. 
-  <LI>When the table is a part of a <SPAN class=code>Block</SPAN>, and the <SPAN 
-  class=code>Block</SPAN> is used on more than one page. In that case the tables 
-  displayed may be different, but a persistent page property will save their 
-  states at the same location.&nbsp;Hence a custom Session Store Manager is 
-  necessary. </LI></OL>
-<P></P>
-<P>The Session Store Managers implement the <STRONG><SPAN 
-class=code>ITableSessionStoreManager</SPAN></STRONG> interface. There are no 
-default implementations of this interface -- the developer must supply his own. 
-</P>
-<P> </P>
-<P></P>
-<H3>2. Changing appearance </H3>
-<P>While the table model defines what data should be displayed in the table, it 
-does not define how that data would look. The appearance is an important element 
-of the web applications, however, and so the table components provide a number 
-of ways to the developer to customize their looks. </P>
-<H4>2.1. Setting styles </H4>
-<P>The simplest way to modify how the table looks is by using CSS. The <SPAN 
-class=code>Table</SPAN> component provides a number of bindings allowing you to 
-set the CSS class of all major elements of the table. Please have a look at 
-<SPAN class=code>Table</SPAN>'s JavaDoc for details. </P>
-<P>One interesting use of this approach is to define an <SPAN 
-class=code>evenOdd</SPAN> bean of type <SPAN 
-class=code>org.apache.tapestry.bean.EvenOdd</SPAN> and bind the rowsClass parameter 
-of table to <SPAN class=code>"beans.evenOdd.next"</SPAN>. In this way odd rows 
-in the table will receive the class "odd", and even rows will receive the class 
-"even", which allows for different formatting of neighbouring rows. </P>
-<H4>2.2. Changing layout </H4>
-<P>The <SPAN class=code>Table</SPAN> component is very easy to use, but it may 
-become a "straight jacket" if a different layout of the table is required. In 
-such a case, instead of <SPAN class=code>Table</SPAN>, the developer could use 
-the lower level table components described below: </P>
-<TABLE border=1 cellPadding=5 cellSpacing=0>
-  <TBODY>
-  <TR>
-    <TH>Component</TH>
-    <TH>Wrapped by</TH>
-    <TH>Description</TH></TR>
-  <TR>
-    <TD align=middle><STRONG><SPAN class=code>TableView</SPAN></STRONG></TD>
-    <TD>&nbsp;</TD>
-    <TD>Wraps the whole table structure and manages the table model</TD></TR>
-  <TR>
-    <TD align=middle><STRONG><SPAN class=code>TablePages</SPAN></STRONG></TD>
-    <TD align=middle><SPAN class=code>TableView</SPAN></TD>
-    <TD>Displays the page navigation interface</TD></TR>
-  <TR>
-    <TD align=middle><STRONG><SPAN class=code>TableColumns</SPAN></STRONG></TD>
-    <TD align=middle><SPAN class=code>TableView</SPAN></TD>
-    <TD>Generates the column headers</TD></TR>
-  <TR>
-    <TD align=middle><STRONG><SPAN class=code>TableRows</SPAN></STRONG></TD>
-    <TD align=middle><SPAN class=code>TableView</SPAN></TD>
-    <TD>Enumerates all rows on the current page</TD></TR>
-  <TR>
-    <TD align=middle><STRONG><SPAN class=code>TableValues</SPAN></STRONG></TD>
-    <TD align=middle><SPAN class=code>TableRows</SPAN></TD>
-    <TD>Renders the values for each column of the current 
-row</TD></TR></TBODY></TABLE>
-<P>&nbsp;The <SPAN class=code>Table</SPAN> component itself is based on those 
-components. Here is its template: </P><PRE>    &lt;span jwcid="tableView"&gt;
-        &lt;span jwcid="condPages"&gt;&lt;span jwcid="tablePages"/&gt;&lt;/span&gt;
-        &lt;tr&gt;&lt;span jwcid="tableColumns"/&gt;&lt;/tr&gt;
-        &lt;tr jwcid="tableRows"&gt;&lt;td jwcid="tableValues"/&gt;&lt;/tr&gt;
-    &lt;/span&gt;
-</PRE>
-<P>You can use those components in a similar way to create a layout that you 
-want. You can change the location of the page navigation section, add other 
-columns in the table manually, or insert custom formatting. You can even build 
-your own components to replace some of the standard ones.</P>
-<P>A good example of this approach is the <SPAN class=code>LocaleList</SPAN> 
-component in the Workbench. It modifies the layout slightly and adds a separate 
-column in the table that is not defined the table model.</P>
-<H4>2.3. Changing renderers </H4>
-<P>Another way to change the appearance of the table is by using the <SPAN 
-class=code>ITableColumn</SPAN> ability to provide custom renderers for both 
-column headers and values. By default, <SPAN class=code>SimpleTableColumn</SPAN> 
-uses <SPAN class=code>RenderString</SPAN> to display values and the <SPAN 
-class=code>SimpleTableColumnComponent</SPAN> to render the headers. That 
-component makes the header a link if the column is sortable, handles clicks on 
-it, and displays an indicator if the column is currently used for sorting. </P>
-<P>If is quite possible to use custom components to render the values or the 
-headers in a different way. This is the approach taken by the <SPAN 
-class=code>LocaleSelection</SPAN> component in the Workbench. It uses Block 
-sections in its template to render some columns differently (see the demo). </P>
-<P>While using this mechanism is not hard at all, there are a number of common 
-pitfalls that the developer must avoid. If you would like to go that route, 
-please see how the <SPAN class=code>SimpleTableColumnComponent</SPAN> and the 
-<SPAN class=code>LocaleSelection</SPAN> component are implemented and read the 
-JavaDocs of <SPAN class=code>org.apache.tapestry.components.BlockRenderer</SPAN> and 
-<SPAN class=code>org.apache.tapestry.ComponentAddress</SPAN> beforehand.</P>
-<P>&nbsp;</P>
-
- </td></tr></table>
-</td></tr>
-<tr>
- <td colspan="3"><hr></td>  
-</tr>
-<tr><!-- Previous component in alphabetical order. -->
-  <td align="left"><A href="contrib.FormConditional.html"><IMG alt="contrib:FormConditional" src="common-images/prev.png"></a></td>  
-  <td align="middle"><A href="index.html"><IMG alt="Component Index" src="common-images/home.png" ></a></td><!-- Next component in alphabetical order. -->
-  <td align="right"><A href="contrib.InspectorButton.html"><IMG alt="contrib:InspectorButton" src="common-images/next.png"></a></td>  
-</tr>
-</table>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/3.0.4/doc/src/ComponentReference/contrib.InspectorButton.html b/3.0.4/doc/src/ComponentReference/contrib.InspectorButton.html
deleted file mode 100644
index 8b44773..0000000
--- a/3.0.4/doc/src/ComponentReference/contrib.InspectorButton.html
+++ /dev/null
@@ -1,147 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<!-- $Id$ --> 
-<html>
-<head>
-<title>contrib:InspectorButton</title>
-<link rel="stylesheet" type="text/css" href="Tapestry.css" title="style">
-</head>
-
-<body>
-<table border="0" cellpadding="0" cellspacing="0" width="100%">
- <tr>
-  <td align="left"><A href="contrib.FormTable.html"><IMG alt=contrib:FormTable src="common-images/prev.png"></A></td>  
-  <td align="middle"><A href="index.html"><IMG alt="Component Index" src="common-images/home.png" ></A></td>  
-  <td align="right"><A href="contrib.Otherwise.html"><IMG alt=contrib:Otherwise src="common-images/next.png"></A></td>  
- <tr>
- <tr>
-  <td colspan="3"><hr></td>  
- </tr>
- <tr>
-  <td colspan="3">
-   <table border="0" cellpadding="4" cellspacing="4" width="100%">
-
-<tr valign="top">
- <td>
-  <table>
-	 <tr>
-	  <td><font size="+2"><b>contrib:InspectorButton</b></font></td>
-	 </tr>
-	 <tr>
-	  <td>
-		 <A href="../api/org/apache/tapestry/contrib/inspector/InspectorButton.html">
-		 org.apache.tapestry.inspector.InspectorButton</A>
-		</td>
-	 </tr>
-  </table>
- </td>
- <td>
-  <table align="right" valign="middle" bgcolor="#c0c0c0" cellpadding="8">
-	 <tr>
-	  <td><IMG alt="Show Inspector" src="images/inspector-rollover.gif" ></td>
-	 </tr>
-  </table>
- </td>
-</tr>
-
-<tr valign="center">
- <td colspan="2">&nbsp;</td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Description</b>
-	<br>
-  Adds a link to a page that is used to raise the 
-  <A href="../DevelopersGuide\inspector.html">Tapestry Inspector</A> in a new 
-  window. 
-            <p> The Tapestry Inspector enables you at runtime to examine composition 
-              of a Tapestry application, inspect persistent page properties, clear 
-              <tt>HttpSession</tt>s and Tapestry caches. 
-            <p>
-  Pages incorporating a InspectorButton component must also include a 
-  <A href="Body.html">Body</A> component.</p>
-            <P>Prior to release 2.2, this component was named 
-            <STRONG>ShowInspector</STRONG>.</P>
-</td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>See Also</b>
-	<br>
-	<A href="Body.html">Body</A>, 
-	<A href="ExceptionDisplay.html">ExceptionDisplay</A> 
- </td>
-</tr>
-			
-<tr>
- <td colspan="2">
-  <b>Parameters</b> 
-	<br>
-  <table border="1" cellpadding="4" cellspacing="4" class="parameters">
-  <tr> 
-    <th>Name</th>
-    <th>Type</th>
-	  <th>Direction</th>
-    <th>Required</th> 
-    <th>Default</th>
-    <th>Description</th>
-  </tr>
-  <tr>
-    <td>disabled</td>
-    <td>boolean</td>
-    <td>in</td>
-   	<td>no</td>
-		<td>false</td>
-		<td>If true, the button does not appear.  This is the correct
-		configuration for a deployed application.
-		</td>
-	</tr>
-	</table>
-	
-
-             
-
-  
-  <p>
-  Body: <STRONG>removed</STRONG><BR>Informal 
-            parameters: <STRONG>forbidden</STRONG><BR>Reserved parameters: 
-            <EM>none</EM></p>
-    
- </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Examples</b>
-	<p>
-  This example is a simple page with the InspectorButton.</p>
-      
-<table class="examples" cellpadding="8">
-<tr>
- <td>
-<h1>Hello world</h1>
-                  <a href="#"><img src="images/inspector-rollover.gif" border="0" name="rollover" align="right"/></a> 
-                </td>
-</tr>
-</table>
-
-<p>
-Template</p>
-            <pre>&lt;html jwcid=&quot;@Shell&quot; title=&quot;InspectorButton Example&quot;&gt;<br>&lt;head jwcid=&quot;$remove$&quot;&gt;<br> &lt;title&gt;InspectorButton Example&lt;/title&gt;<br>&lt;/head&gt;<br>&lt;body jwcid=&quot;@Body&quot;&gt;<br>&lt;h1&gt;Hello world&lt;/h1&gt;<br>&lt;span jwcid=&quot;@contrib:InspectorButton&quot;/&gt;<br>&lt;/body&gt;<br>&lt;/html&gt;
-</pre>
-          </td>
-        </tr></table>
-</td></tr>
-<tr>
- <td colspan="3"><hr></td>  
-</tr>
-<tr>
- <td align="left"><A href="contrib.Choose.html"><IMG alt=contrib:Choose src="common-images/prev.png"></A></td>  
- <td align="middle"><A href="index.html"><IMG alt="Component Index" src="common-images/home.png" ></A></td>  
- <td align="right"><A href="contrib.Otherwise.html"><IMG alt=contrib:Otherwise src="common-images/next.png"></A></td>  
-</tr>
-</table>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/3.0.4/doc/src/ComponentReference/contrib.Otherwise.html b/3.0.4/doc/src/ComponentReference/contrib.Otherwise.html
deleted file mode 100644
index 90afcd9..0000000
--- a/3.0.4/doc/src/ComponentReference/contrib.Otherwise.html
+++ /dev/null
@@ -1,118 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<!-- $Id$ --> 
-<html>
-<head>
-<title>contrib:Otherwise</title>
-<link rel="stylesheet" type="text/css" href="Tapestry.css" title="style">
-</head>
-
-<body>
-<table border="0" cellpadding="0" cellspacing="0" width="100%">
- <tr>
-  <td align="left"><a href="contrib.InspectorButton.html"><img alt="contrib:InspectorButton" src="common-images/prev.png"></a></td>  
-  <td align="middle"><a href="index.html"><img alt="Component Index" src="common-images/home.png" ></a></td>
-  <td align="right"><a href="contrib.PopupLink.html"><img alt="contrib:PopupLink" src="common-images/next.png"></a></td>  
- <tr>
- <tr>
-  <td colspan="3"><hr></td>  
- </tr>
- <tr>
-  <td colspan="3">
-   <table border="0" cellpadding="4" cellspacing="4" width="100%">
-
-<tr valign="top">
- <td>
-  <table>
-   <tr>
-                <td><font size="+2"><b>contrib:Otherwise</b></font></td>
-   </tr>
-   <tr>
-    <td>
-     <A href="../api/org/apache/tapestry/contrib/components/When.html">org.apache.tapestry.contrib.components.Otherwise</a>
-    </td>
-   </tr>
-  </table>
- </td>
- <td>
-  <table align="right" valign="middle" bgcolor="#c0c0c0" cellpadding="8">
-   <tr>
-                <td> Non Visual Component</td>
-   </tr>
-  </table>
- </td>
-</tr>
-
-<tr valign="center">
- <td colspan="2">&nbsp;</td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Description</b>
-  <br>
-            Provides a default condition for contrib:Choose component. Other alternatives 
-            are indicated by contrib:When components. 
-            <p>Must have contrib:Choose as an immediate parent and must be the 
-              last nested component within contrib:Choose.</p>
-          </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>See Also</b>
-  <br>
-            <A href="Conditional.html">Conditional</a>, <A href="contrib.Choose.html">contrib:Choose</a>, 
-            <A href="contrib.When.html">contrib:When</a> </td>
-</tr>			
-<tr>
- <td colspan="2">
-  <b>Parameters</b>
-  <br>
-            <table border="1" cellpadding="4" cellspacing="4" class="parameters">
-              <tr> 
-                <th>Name</th>
-                <th>Type</th>
-                <th>Direction</th>
-                <th>Required</th>
-                <th>Default</th>
-                <th>Description</th>
-              </tr>
-              <tr> 
-                <td>element</td>
-                <td>String</td>
-                <td>in</td>
-                <td>no</td>
-                <td>&nbsp;</td>
-                <td>If specified and none of the conditions in any When component 
-                  is satisfied, then the component acts like an <a href="Any.html">Any</a>, 
-                  emitting an open and close tag. Informal parameters are applied 
-                  to the tag. If no element is specified, informal parameters 
-                  are ignored.</td>
-              </tr>
-            </table>          
-            <p> Body: <strong>rendered</strong><br>
-              Informal parameters: <strong>allowed</strong><br>
-              Reserved parameters: <em>condition</em>, <em>invert</em></p>    
- </td>
-</tr>
-
-<tr>
-          <td colspan="2"> <b>Examples</b> 
-            <p> Please see the documentation for the <a href="contrib.Choose.html">contrib:Choose</a> 
-              component.</p>
-      
-
- </td></tr></table>
-</td></tr>
-<tr>
- <td colspan="3"><hr></td>  
-</tr>
-<tr>
-  <td align="left"><a href="contrib.InspectorButton.html"><img alt="contrib:InspectorButton" src="common-images/prev.png"></a></td>  
-  <td align="middle"><a href="index.html"><img alt="Component Index" src="common-images/home.png" ></a></td>
-  <td align="right"><a href="contrib.PopupLink.html"><img alt="contrib:PopupLink" src="common-images/next.png"></a></td>  
-</tr>
-</table>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/3.0.4/doc/src/ComponentReference/contrib.PopupLink.html b/3.0.4/doc/src/ComponentReference/contrib.PopupLink.html
deleted file mode 100644
index 7ccb396..0000000
--- a/3.0.4/doc/src/ComponentReference/contrib.PopupLink.html
+++ /dev/null
@@ -1,158 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<!-- $Id$ --> 
-<html>
-<head>
-<title>contrib:PopupLink</title>
-<link rel="stylesheet" type="text/css" href="Tapestry.css" title="style">
-</head>
-
-<body>
-<table border="0" cellpadding="0" cellspacing="0" width="100%">
- <tr><!-- Previous component in alphabetical order. -->
-  <td align="left"><A href="contrib.Otherwise.html"><IMG alt="contrib:Otherwise" src="common-images/prev.png"></a></td>  
-  <td align="middle"><A href="index.html"><IMG alt="Component Index" src="common-images/home.png" ></a></td><!-- Next component in alphabetical order. -->
-  <td align="right"><A href="contrib.Table.html"><IMG alt="contrib:Table" src="common-images/next.png"></a></td>  
- <tr>
- <tr>
-  <td colspan="3"><hr></td>  
- </tr>
- <tr>
-  <td colspan="3">
-   <table border="0" cellpadding="4" cellspacing="4" width="100%">
-
-<tr valign="top">
- <td>
-  <table>
-   <tr>
-    <td><font size="+2"><b>contrib:PopupLink</b></font></td>
-   </tr>
-   <tr>
-    <td>
-     <A href="../api/org/apache/tapestry/contrib/popup/PopupLink.html">org.apache.tapestry.contrib.popup.PopupLink</a>
-    </td>
-   </tr>
-  </table>
- </td>
- <td>
-  <table align="right" valign="middle" bgcolor="#c0c0c0" cellpadding="8">
-   <tr>
-    <td><a href="contrib.PopupLink.html"><font color="blue">Popup Link</font></a></td>
-   </tr>
-  </table>
- </td>
-</tr>
-
-<tr valign="center">
- <td colspan="2">&nbsp;</td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Description</b>
-  <br>
-  Creates a &lt;a&gt; popup link to launch a target window using the 
-  javascript <tt>window.open(URL, windowName, windowFeatures)</tt> function. 
- </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>See Also</b>
-  <br>
-  <A href="ExternalLink.html">ExternalLink</a>,
-  <A href="PageLink.html">PageLink</a>
- </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Parameters</b>
-  <br>
-  <table border="1" cellpadding="4" cellspacing="4" class="parameters">
-   <tr> 
-    <th>Name</th>
-    <th>Type</th>
-    <th>Direction</th>
-    <th>Required</th> 
-    <th>Default</th>
-    <th>Description</th>
-   </tr>
-   <tr>
-    <td>href</td>
-    <td>String</td>
-    <td>in</td>
-    <td>yes</td>
-    <td>&nbsp;</td>
-    <td>The URL of the window to open.</td>
-   </tr>
-   <tr>
-    <td>features</td>
-    <td>String</td>
-    <td>in</td>
-    <td>no</td>
-    <td>&nbsp;</td>
-    <td>
-    The JavaScript features of the target window. Boolean features to include be 
-    should be specified in comma delimited string. Integer features 
-    (left, height, top, width) should be specified by assigning the feature 
-    value as <tt>[feature name]=100</tt>. JavaScript 1.1 features include:<p>
-    <tt>height, left, location, menubar, resizable, scrollbars, status, toolbar, top, width</tt>
-    </td>
-   </tr>
-   <tr>
-    <td>windowName</td>
-    <td>String</td>
-    <td>in</td>
-    <td>no</td>
-    <td>popuplink_window</td>
-    <td>The name of the target window.</td>
-   </tr>
-  </table>
-  <P>Body: <STRONG>rendered<BR>
-  </STRONG>Informal parameters:<STRONG>allowed</STRONG><br>
-  <!-- component-specification "reserved-parameter" -->
-  Reserved parameters: none 
-  </P>    
- </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Examples</b>
-  <p>
-  This example provides a context help popup link for an account number field. 
-  <p>
-
-<table class="examples" cellspacing="8">
-<tr>
- <td>Account Number:</td>
- <td><input type="text"/></td>
- <td><a href="contrib.PopupLink.html"><font color="blue">Help</font></a></td>
-</tr>
-</table>
-		
-<pre>
-&lt;tr&gt;
- &lt;td&gt; Account Number: &lt;/td&gt;
- &lt;td&gt; &lt;input jwcid="@<a href="TextField.html">TextField</a>" value='ognl:visit.accountNumber'/&gt; &lt;/td&gt;
- &lt;td&gt; &lt;a href="help/account-number-help.html" jwcid="@<a href="contrib.PopupLink.html">contrib:PopupLink</a>" features='ognl:"resizable,scrollbars,top=100,left=100,height=400,width=300"'&gt;Help&lt;/a&gt; &lt;/td&gt;
-&lt;/tr&gt;
-
-
-</pre>
-      
-
- </td></tr></table>
-</td></tr>
-<tr>
- <td colspan="3"><hr></td>  
-</tr>
-<tr><!-- Previous component in alphabetical order. -->
- <td align="left"><A href="contrib.Otherwise.html"><IMG alt="contrib:Otherwise" src="common-images/prev.png"></a></td>  
- <td align="middle"><A href="index.html"><IMG alt="Component Index" src="common-images/home.png" ></a></td><!-- Next component in alphabetical order. -->
-  <td align="right"><A href="contrib.Table.html"><IMG alt="contrib:Table" src="common-images/next.png"></a></td>  
-</tr>
-</table>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/3.0.4/doc/src/ComponentReference/contrib.Table.html b/3.0.4/doc/src/ComponentReference/contrib.Table.html
deleted file mode 100644
index 51a1c08..0000000
--- a/3.0.4/doc/src/ComponentReference/contrib.Table.html
+++ /dev/null
@@ -1,1041 +0,0 @@
-<!--
-Tbis HTML document provides a base template for Component Reference pages.
-
-* All ??? text should be replaced.
-
-* Examples should illustrate near real world use of the component, see other
-  existing component page examples for formatting and style guidelines.
-  
-* Use Tapestry 2.2 Beta 1+ "expression" binding syntax instead of 
-  "property-path" syntax.
-  
-* Include links to Tapestry Javadoc API where appropriate.
-
-* Include Tapestry Developers Guide multi-page version where appropriate.
--->
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<!-- $Id$ --> 
-<html>
-<head>
-<title>contrib:Table</title>
-<link rel="stylesheet" type="text/css" href="Tapestry.css" title="style">
-<STYLE type=text/css>
-.example TD { TEXT-ALIGN: center }
-.code {	FONT-FAMILY: Courier }
-.examples A { color: black }
-</STYLE>
-</head>
-
-<body>
-<table border="0" cellpadding="0" cellspacing="0" width="100%">
- <tr><!-- Previous component in alphabetical order. -->
-  <td align="left"><A href="contrib.PopupLink.html"><IMG alt="contrib:PopupLink" src="common-images/prev.png"></a></td>  
-  <td align="middle"><A href="index.html"><IMG alt="Component Index" src="common-images/home.png" ></a></td><!-- Next component in alphabetical order. -->
-  <td align="right"><A href="contrib.TableColumns.html"><IMG alt="contrib:TableColumns" src="common-images/next.png"></a></td>  
- <tr>
- <tr>
-  <td colspan="3"><hr></td>  
- </tr>
- <tr>
-  <td colspan="3">
-   <table border="0" cellpadding="4" cellspacing="4" width="100%">
-
-<tr valign="top">
- <td>
-  <table>
-   <tr>
-    <td><font size="+2"><b>contrib:Table</b></font></td>
-   </tr>
-   <tr>
-    <td>
-     <A href="../api/org/apache/tapestry/contrib/table/components/Table.html">org.apache.tapestry.contrib.table.components.Table</a>
-    </td>
-   </tr>
-  </table>
- </td>
- <td>
-  <table align="right" valign="middle" bgcolor="#c0c0c0" cellpadding="8">
-   <tr>
-    <td>Visual Component</td>
-   </tr>
-  </table>
- </td>
-</tr>
-
-<tr valign="center">
- <td colspan="2">&nbsp;</td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Description</b>
-  <br> 
-  Provides a HTML &lt;table&gt; element. The Table component is a facade component 
-  in the Table family. Table allows you to present a sortable and pagable table 
-  simply and easily by using only this one component.
- <p>
- The Table component allows you to manipulate its appearance by allowing you 
- to define the 'class' attributes of its internal elements. If you want to change 
- the structure of the table, however, you can instead build your own using the 
- lower level components
- <A HREF="../api/org/apache/tapestry/contrib/table/components/TableView.html"><CODE>TableView</CODE></A>, 
- <A HREF="../api/org/apache/tapestry/contrib/table/components/TablePages.html"><CODE>TablePages</CODE></A>, 
- <A HREF="../api/org/apache/tapestry/contrib/table/components/TableColumns.html"><CODE>TableColumns</CODE></A>, 
- <A HREF="../api/org/apache/tapestry/contrib/table/components/TableRows.html"><CODE>TableRows</CODE></A>,
- and 
- <A HREF="../api/org/apache/tapestry/contrib/table/components/TableValues.html"><CODE>TableValues</CODE></A>.
- <p>
- The Table component delegates the handling of the table model and related
- activities to the <A HREF="../api/org/apache/tapestry/contrib/table/components/TableView.html"><CODE>TableView</CODE></A>, 
- and more detailed information about the process can be found in the 
- documentation of that class.
- </td>
-</tr>
-
-<tr>
- <td colspan="2">
-   <b>Providing the data</b>
-
-<p>
-There are many ways to provide the component with the data it has to render, 
-but here are the three major ones:
-
-<ol>
-<li> The data is passed to the <code>source</code> parameter in the form of an array, 
-a collection, or an iterator, and the table columns are defined using the 
-<code>columns</code> parameter (see further for details). 
-Both of these parameters will be evaluated at every request by default, 
-so changes in the data or the table columns will be displayed immediately.
-<p>
-The example below uses this method.
-<p>
-This is the easiest and most straightforward approach. It has one performance limitation, 
-however - if the table is sorting the data according to a given column, 
-the sorting will be performed at every request. 
-The next methods provide ways to resolve this possible performance issue.
-<p></p>
-    
-<li> The data is passed to the <code>source</code> parameter via an object that
-implements the <A HREF="../api/org/apache/tapestry/contrib/table/model/IBasicTableModel.html"><CODE>IBasicTableModel</CODE></A>
-interface. Through that interface you are given the sorting column (if any) and 
-the numbers of the items that will be displayed on the current page. 
-You then need to provide the component with the corresponding data.
-<p>
-This method allows you to perform the sorting in the database and load only the data 
-that will be displayed on the current page 
-(e.g. by using the ORDER BY, LIMIT, and OFFSET clauses in SQL)
-and hence it could be far more efficient.
-<p></p>
-    
-<li> All of the information (data, columns, state) is packaged in an
-<A HREF="../api/org/apache/tapestry/contrib/table/model/ITableModel.html"><CODE>ITableModel</CODE></A>
-and is passed to the <code>tableModel</code> parameter.
-<p>
-This approach allows greatest flexibility, but is recommended only for advanced users of the Table components. 
-    
-</ol>
-
- <p></p>
- </td>
-</tr>
-
-
-<tr>
- <td colspan="2">
-   <b>Defining the columns</b>
-
-<p>
-If you define the table columns using the <code>columns</code> parameter, you can either
-provide a list of <A HREF="../api/org/apache/tapestry/contrib/table/model/ITableColumn.html"><code>ITableColumn</code></A>
-objects, each defining a column in the table, or you can define the columns using 
-a string that describes each column. 
-<p>
-Please see the example below as a demonstration of the use of the latter approach.
-<p>
-The string describing the columns must be formatted in the following way:
-<ul>
-    <li>The column definitions in the string are separated by commas
-        <p>
-    <li>Each column definition must be of one of the following types:<p>
-        <dl>
-            <dd>id</dd>
-            <dd>id:expression</dd>
-            <dd>id:description:expression</dd>
-        </dl>
-        <br>
-        Here the <b>id</b> defines the identification of the column, the <b>expression</b> is an
-        OGNL expression that extracts the column value from the row object, and <b>description</b>
-        is the title of the column if it is not defined otherwise.
-        <p>
-        Each column definition may be prefixed by the <b>!</b> character, 
-        which identifies the column as non-sortable.
-        <p>
-        If defined, a Block with a name that is starts with the column id and 
-        ends with <i>ColumnValue</i> will be used to render the column values.
-        Similarly, a Block with a name that starts with the column id and 
-        ends with <i>ColumnHeader</i> will be used to render the column headers.
-        <p>
-        Finally, the title of the column will be taken from translation strings of the component
-        by using the column id as a key.
-        <p>
-        Please see the <SPAN class=code>LocaleSelection</SPAN> component for examples.
-        <p>
-    <li>A column definition may also be of the type
-        <p>
-        <dl>
-            <dd>=expression</dd>
-        </dl>
-        <br>
-        in which case it identifies an OGNL expression that returns an 
-        <A HREF="../api/org/apache/tapestry/contrib/table/model/ITableColumn.html"><code>ITableColumn</code></A>
-        object defining the column.
-        <p>
-    <li>The full description string may be prefixed by the <b>*</b> character,
-        which means that the table is to be rendered within a form, and the 
-        column headers must submit the form if they are clickable (i.e. if the column is sortable).
-</ul>
-<p>
-Here is an example of the use of a description string to define columns:
-<pre>
-  columns="locale:toString(), =currencyColumn, verbosity:Verbosity:currentRowVerbosity, !delete"
-</pre>
-    
- <p></p>
- </td>
-</tr>
-
-
- 
-<tr>
- <td colspan="2">
-  <b>See Also</b>
-  <br>
-  <A href="contrib.TableColumns.html">TableColumns</a>, 
-  <A href="contrib.TablePages.html">TablePages</a>,
-  <A href="contrib.TableRows.html">TableRows</a>,
-  <A href="contrib.TableValues.html">TableValues</a>,
-  <A href="contrib.TableView.html">TableView</a>
- </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Parameters</b>
-  <br>
-  <table border="1" cellpadding="4" cellspacing="4" class="parameters">
-   <tr> 
-    <th>Name</th>
-    <th>Type</th>
-    <th>Direction</th>
-    <th>Required</th> 
-    <th>Default</th>
-    <th>Description</th>
-   </tr>
-
- <tr>
-  <td>source</td>
-  <td><code><A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Object.html">Object</A>[]</code><br>
-      <code><A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/util/Collection.html">Collection</A></code><br>
-      <code><A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/util/Iterator.html">Iterator</A></code><br>
-      <A HREF="../api/org/apache/tapestry/contrib/table/model/IBasicTableModel.html"><CODE>IBasicTableModel</CODE></A>
-  </td>
-  <td>in</td>
-  <td rowspan="3">You must provide either both <code>source</code> and <code>columns</code> parameters 
-      or the <code>tableModel</code> parameter</td>
-  <td>&nbsp;</td>
-  <td align="left">
-    The data to be displayed by the component. This parameter must be used 
-    in combination with the <code>columns</code> parameter. 
-    The parameter must be an array of values, a collection, an iterator, 
-    or an object implementing the IBasicTableModel interface.
-  </td> 
- </tr>
-
- <tr>
-  <td>columns</td>
-  <td>
-      <code><A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/String.html">String</A></code><br>
-      <A HREF="../api/org/apache/tapestry/contrib/table/model/ITableColumnModel.html"><code>ITableColumnModel</code></A><br>
-      <A HREF="../api/org/apache/tapestry/contrib/table/model/ITableColumn.html"><code>ITableColumn[]</code></A><br>
-      <code><A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/util/List.html">List</A></code><br>
-      <code><A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/util/Iterator.html">Iterator</A></code>
-  </td>
-  <td>in</td>
-  <td>&nbsp;</td>
-  <td align="left">
-    The table columns to be displayed. 
-    The parameter must be an array, a list, or an Iterator of ITableColumn objects,
-    an ITableColumnModel, or a String describing the columns (see documentation).
-  </td> 
- </tr>
-
- <tr>
-  <td>tableModel</td>
-  <td><A HREF="../api/org/apache/tapestry/contrib/table/model/ITableModel.html"><CODE>ITableModel</CODE></A></td>
-  <td>in</td>
-  <td>&nbsp;</td>
-  <td align="left">The <A HREF="../api/org/apache/tapestry/contrib/table/model/ITableModel.html"><CODE>ITableModel</CODE></A> to be used to render the table. 
-      The model contains all of the information needed to render the table and gives greatest flexibility, 
-      but it may be harder to implement than simply using the <code>source</code> and <code>columns</code> parameters. 
-  </td> 
- </tr>
-
- <tr>
-  <td>tableSessionStateManager</td>
-  <td><A HREF="../api/org/apache/tapestry/contrib/table/model/ITableSessionStateManager.html"><CODE>ITableSessionStateManager</CODE></A></td>
-  <td>in</td>
-  <td>no</td>
-  <td>A custom session state manager that reloads the data at each request if it is provided
-      via the <code>source</code> and <code>columns</code> parameters or stores all 
-      of it in the session if it is provided via the <code>tableModel</code> parameter</td>
-  <td align="left">This is the session state manager that will control what part of the 
-      table model will be saved in the session state. 
-      It is then used to recreate the table model by
-      using what was saved in the session. 
-      <p> You can use one of the stock implementations of  
-      <A HREF="../api/org/apache/tapestry/contrib/table/model/ITableSessionStateManager.html"><CODE>ITableSessionStateManager</CODE></A>
-      to determine the session state behaviour, or you can define your own.
-  </td> 
- </tr>
-
- <tr>
-  <td>tableSessionStoreManager</td>
-  <td><A HREF="../api/org/apache/tapestry/contrib/table/model/ITableSessionStoreManager.html"><CODE>ITableSessionStoreManager</CODE></A></td>
-  <td>in</td>
-  <td>no</td>
-  <td>null</td>
-  <td align="left">Determines how the session state (returned by the session state manager)
-      will be saved in the session. If this parameter is null, then the state
-      will be saved as a persistent property. If it is not null, then the methods
-      of the interface will be used to save and load the state.
-  </td> 
- </tr>
-
- <tr>
-  <td>columnSettingsContainer</td>
-  <td><A HREF="../api/org/apache/tapestry/IComponent.html"><CODE>IComponent</CODE></A></td>
-  <td>in</td>
-  <td>no</td>
-  <td>container</td>
-  <td align="left">The container used to look up Blocks and messages when the source/columns mode
-      is being used.
-  </td> 
- </tr>
-
- <tr>
-  <td>row</td>
-  <td>Object</td>
-  <td>out</td>
-  <td>no</td>
-  <td>&nbsp;</td>
-  <td align="left">The value object of the current row being rendered.</td> 
- </tr>
-
- <tr>
-  <td>column</td>
-  <td><A HREF="../api/org/apache/tapestry/contrib/table/model/ITableColumn.html"><CODE>ITableColumn</CODE></A></td>
-  <td>out</td>
-  <td>no</td>
-  <td>&nbsp;</td>
-  <td align="left">The object representing the current column being rendered.</td> 
- </tr>
-
- <tr>
-  <td>pageSize</td>
-  <td>
-      <code>int</code>
-  </td>
-  <td>in</td>
-  <td>no</td>
-  <td>10</td>
-  <td align="left">
-      The number of records displayed per page. 
-      <p>
-      This parameter is only used with the <code>source</code> and <code>columns</code> parameters.
-  </td> 
- </tr>
-
- <tr>
-  <td>initialSortColumn</td>
-  <td>
-      <code><A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/String.html">String</A></code>
-  </td>
-  <td>in</td>
-  <td>no</td>
-  <td>null</td>
-  <td align="left">
-      The id of the column to initially sort the table by. 
-      A value of <code>null</code> indicates no sorting.
-      <p>
-      This parameter is only used with the <code>source</code> and <code>columns</code> parameters.
-  </td> 
- </tr>
-
- <tr>
-  <td>initialSortOrder</td>
-  <td>
-      <code>boolean</code>
-  </td>
-  <td>in</td>
-  <td>no</td>
-  <td>false</td>
-  <td align="left">
-      The order of the initial sorting.
-      Set this parameter to <code>false</code> to sort in an ascending order
-      and to <code>true</code> to sort in a descending one.
-      <p>
-      This parameter is only used with the <code>source</code> and <code>columns</code> parameters.
-  </td> 
- </tr>
-
- <tr>
-  <td>pagesDisplayed</td>
-  <td>int</td>
-  <td>in</td>
-  <td>no</td>
-  <td>7</td>
-  <td align="left">Determines the maximum number of pages to be displayed in the page list
-      when the table has more than one page.
-      <p>For example, if the table has 20 pages, and 10 is the current page,
-      pages from 7 to 13 in the page list will be shown if this parameter has 
-      a value of 7.
-  </td> 
- </tr>
-
- <tr>
-  <td>arrowUpAsset</td>
-  <td><A HREF="../api/org/apache/tapestry/IAsset.html"><CODE>IAsset</CODE></A></td>
-  <td>in</td>
-  <td>no</td>
-  <td>&nbsp;</td>
-  <td align="left">The image to use to describe a column sorted in an ascending order.</td> 
- </tr>
-
- <tr>
-  <td>arrowDownAsset</td>
-  <td><A HREF="../api/org/apache/tapestry/IAsset.html"><CODE>IAsset</CODE></A></td>
-  <td>in</td>
-  <td>no</td>
-  <td>&nbsp;</td>
-  <td align="left">The image to use to describe a column sorted in a descending order.</td> 
- </tr>
-
- <tr>
-  <td>pagesClass</td>
-  <td>String</td>
-  <td>in</td>
-  <td>no</td>
-  <td>&nbsp;</td>
-  <td align="left">The CSS class of the table pages.</td> 
- </tr>
-
- <tr>
-  <td>columnsClass</td>
-  <td>String</td>
-  <td>in</td>
-  <td>no</td>
-  <td>&nbsp;</td>
-  <td align="left">The CSS class of the table columns.</td> 
- </tr>
-
- <tr>
-  <td>rowsClass</td>
-  <td>String</td>
-  <td>in</td>
-  <td>no</td>
-  <td>&nbsp;</td>
-  <td align="left">The CSS class of the table rows.</td> 
- </tr>
-
- <tr>
-  <td>valuesClass</td>
-  <td>String</td>
-  <td>in</td>
-  <td>no</td>
-  <td>&nbsp;</td>
-  <td align="left">The CSS class of the table values.</td> 
- </tr>
-
-  </table>
-  <P>
-  Body: <STRONG>ignored</STRONG><BR>
-  Informal parameters: <STRONG>allowed</STRONG><br>
-  <!-- component-specification "reserved-parameter" -->
-  Reserved parameters: none 
-  </P>    
- </td>
-</tr>
-
-
-
-
-<tr>
- <td colspan="2">
-  <b>Examples</b>
-  <p>
-
-<table class="examples" cellpadding="4" width="700">
-<tr><td>
-
-<SPAN><A 
-href="#">&lt;&lt;</A>&nbsp;<A 
-href="#">&lt;</A>&nbsp;<A 
-href="#">7</A>&nbsp;<A 
-href="#">8</A>&nbsp;<A 
-href="#">9</A><B>&nbsp;10</B>&nbsp;<A 
-href="#">11</A>&nbsp;<A 
-href="#">12</A>&nbsp;<A 
-href="#">13</A>&nbsp;<A 
-href="#">&gt;</A>&nbsp;<A 
-href="#">&gt;&gt;</A></SPAN> 
-
-<TABLE class=example width="90%">
-  <TBODY>
-  <TR>
-    <TD></TD></TR>
-  <TR>
-    <TH>
-      <TABLE align=center border=0 cellPadding=0 cellSpacing=0>
-        <TBODY>
-        <TR>
-          <TD><A 
-            href="#">Locale</A> 
-          </TD></TR></TBODY></TABLE></TH>
-    <TH>
-      <TABLE align=center border=0 cellPadding=0 cellSpacing=0>
-        <TBODY>
-        <TR>
-          <TD><A 
-            href="#">Language</A> 
-          </TD>
-          <TD>&nbsp;<IMG align=middle border=0 
-            src="images/arrow-up.gif"> </TD></TR></TBODY></TABLE></TH>
-    <TH>
-      <TABLE align=center border=0 cellPadding=0 cellSpacing=0>
-        <TBODY>
-        <TR>
-          <TD><A 
-            href="#">Country</A> 
-          </TD></TR></TBODY></TABLE></TH>
-    <TH>
-      <TABLE align=center border=0 cellPadding=0 cellSpacing=0>
-        <TBODY>
-        <TR>
-          <TD><A 
-            href="#">Variant</A> 
-          </TD></TR></TBODY></TABLE></TH>
-    <TH>
-      <TABLE align=center border=0 cellPadding=0 cellSpacing=0>
-        <TBODY>
-        <TR>
-          <TD><A 
-            href="#">ISO3Language</A> </TD></TR></TBODY></TABLE></TH>
-    <TH>
-      <TABLE align=center border=0 cellPadding=0 cellSpacing=0>
-        <TBODY>
-        <TR>
-          <TD><A 
-            href="#">ISO3Country</A> </TD></TR></TBODY></TABLE></TH></TR>
-  <TR>
-    <TD class=tableValues>is </TD>
-    <TD class=tableValues>is </TD>
-    <TD class=tableValues><BR></TD>
-    <TD class=tableValues><BR></TD>
-    <TD class=tableValues>isl </TD>
-    <TD class=tableValues><BR></TD>
-    <TD class=tableValues><A href="#">select</A></TD>
-  </TR>
-  <TR>
-    <TD class=tableValues>is_IS </TD>
-    <TD class=tableValues>is </TD>
-    <TD class=tableValues>IS </TD>
-    <TD class=tableValues><BR></TD>
-    <TD class=tableValues>isl </TD>
-    <TD class=tableValues>ISL </TD>
-    <TD class=tableValues><A href="#">select</A></TD>
-  </TR>
-  <TR>
-    <TD class=tableValues>it </TD>
-    <TD class=tableValues>it </TD>
-    <TD class=tableValues><BR></TD>
-    <TD class=tableValues><BR></TD>
-    <TD class=tableValues>ita </TD>
-    <TD class=tableValues><BR></TD>
-    <TD class=tableValues><A href="#">select</A></TD>
-  </TR>
-  <TR>
-    <TD class=tableValues>it_CH </TD>
-    <TD class=tableValues>it </TD>
-    <TD class=tableValues>CH </TD>
-    <TD class=tableValues><BR></TD>
-    <TD class=tableValues>ita </TD>
-    <TD class=tableValues>CHE </TD>
-    <TD class=tableValues><A href="#">select</A></TD>
-  </TR>
-  <TR>
-    <TD class=tableValues>it_IT </TD>
-    <TD class=tableValues>it </TD>
-    <TD class=tableValues>IT </TD>
-    <TD class=tableValues><BR></TD>
-    <TD class=tableValues>ita </TD>
-    <TD class=tableValues>ITA </TD>
-    <TD class=tableValues><A href="#">select</A></TD>
-  </TR>
-  <TR>
-    <TD class=tableValues>it_IT_EURO </TD>
-    <TD class=tableValues>it </TD>
-    <TD class=tableValues>IT </TD>
-    <TD class=tableValues>EURO </TD>
-    <TD class=tableValues>ita </TD>
-    <TD class=tableValues>ITA </TD>
-    <TD class=tableValues><A href="#">select</A></TD>
-  </TR>
-  <TR>
-    <TD class=tableValues>iw </TD>
-    <TD class=tableValues>iw </TD>
-    <TD class=tableValues><BR></TD>
-    <TD class=tableValues><BR></TD>
-    <TD class=tableValues>heb </TD>
-    <TD class=tableValues><BR></TD>
-    <TD class=tableValues><A href="#">select</A></TD>
-  </TR>
-  <TR>
-    <TD class=tableValues>iw_IL </TD>
-    <TD class=tableValues>iw </TD>
-    <TD class=tableValues>IL </TD>
-    <TD class=tableValues><BR></TD>
-    <TD class=tableValues>heb </TD>
-    <TD class=tableValues>ISR </TD>
-    <TD class=tableValues><A href="#">select</A></TD>
-  </TR>
-  <TR>
-    <TD class=tableValues>ja </TD>
-    <TD class=tableValues>ja </TD>
-    <TD class=tableValues><BR></TD>
-    <TD class=tableValues><BR></TD>
-    <TD class=tableValues>jpn </TD>
-    <TD class=tableValues><BR></TD>
-    <TD class=tableValues><A href="#">select</A></TD>
-  </TR>
-  <TR>
-    <TD class=tableValues>ja_JP </TD>
-    <TD class=tableValues>ja </TD>
-    <TD class=tableValues>JP </TD>
-    <TD class=tableValues><BR></TD>
-    <TD class=tableValues>jpn </TD>
-    <TD class=tableValues>JPN </TD>
-    <TD class=tableValues><A href="#">select</A></TD>
-  </TR>
-  </TBODY>
-</TABLE>
-
-</td></tr>
-</table>
-        
-  <p>
-  <br>
-
-<PRE>
-&lt;style&gt; td { text-align: center } &lt;/style&gt;
-&lt;table jwcid="table@contrib:Table" width="90%"
-    source="ognl:@java.util.Locale@getAvailableLocales()"
-    columns="Locale:toString(), Language, Country, Variant, ISO3Language, ISO3Country, !select"/&gt;
-&lt;span jwcid="selectColumnHeader@Block"&gt;&amp;nbsp;&lt/span&gt;
-&lt;span jwcid="selectColumnValue@Block"&gt;
-    &lt;a jwcid="@DirectLink" listener="ognl:listeners.selectLocale" parameters="ognl:components.table.tableRow"&gt;select&lt;/a&gt;
-&lt;/span&gt;
-</PRE>
-
- </td>
-</tr>
-
- 
-
-<tr>
- <td colspan="2">
-   <b>Further examples</b>
-
-<p>
-You can find additional examples in the Tutorial 
-as part of the Workbench application under the "Table" tab. 
-<P>That page consists of two components -- the <SPAN 
-class=code>LocaleList</SPAN> component and the <SPAN 
-class=code>LocaleSelection</SPAN> component. </P>
-<P>The <SPAN class=code>LocaleList</SPAN> component allows you to view all 
-Locales in a table (similar to the example above), as well as to choose Locales 
-from the table and add them to your "selection". </P>
-<P>The <SPAN class=code>LocaleSelection</SPAN> component displays the selected 
-Locales and provides additional information about them. It also allows Locales 
-to be removed from the selection. </P>
-<P>Even though the two components utilizing the Table are placed on a single 
-page, they can operate without any interference from each other with no effort 
-at all on part of the developer -- each table can be sorted independently, for 
-example. This is a good illustration of the power of Tapestry's component 
-approach. </P>
- <p></p>
- </td>
-</tr>
-
-
-<tr>
- <td colspan="2">
-<hr>
-<H2>Table Internals Guide</H2>
-This section is for advanced uses of the Table components only.
-<P>
-There are two important elements that comprise the Table 
-functionality -- the table model and the table components. 
-<P>The <STRONG>table model</STRONG> classes and interfaces provide the Table 
-with the ability to display and manipulate data from various different sources. 
-Using them in various combinations and customizing them allows the developer to 
-modify the behaviour of the table according to his needs. </P>
-<P>The <STRONG>table components</STRONG> are responsible for displaying the data 
-provided by the table model, and working with them allows the developer to 
-radically change the appearance of the table if necessary. </P>
-
-<H3>1. The Model </H3>
-<P>This section will discuss the table model and how it can be used and modified 
-to satisfy the needs of the developer. The next section will then concentrate on 
-how the table components can be used to customize the appearance of the table as 
-much as possible. </P>
-
-<H4>1.1. The Table Model Family of Classes </H4>Even though using a table model 
-can be very simple, as shown in the first example, behind the curtains it may 
-consist of many different interfaces and classes that work together to allow you 
-to modify different aspects of the table data representation and manipulation 
-without a lot of effort. 
-<P>Below you can see a UML Class diagram of the interfaces and classes in the 
-Table Model family. The rest of this section will discuss how they can be used 
-and modified as needed. </P>
-<P><IMG alt="Table Model Class Diagram" 
-src="images/tableModel.gif"> </P>
-<H4>1.2. The Table Model </H4>The table model provides the information needed by 
-the view to render the table. For example, the Table component may use its <SPAN 
-class=code>tableModel</SPAN> parameter to determine what to display. 
-<P>The Tapestry components access the table model via the relatively simple 
-<B><SPAN class=code>ITableModel</SPAN></B> interface, which is the facade of the 
-table model hierarchy. A variety of implementations of this interface can be 
-created to target different cases. </P>
-<P>The contrib library currently defines only one rudimentary implementation 
-that can be used in the majority of situations -- the <B><SPAN 
-class=code>SimpleTableModel</SPAN></B>. While versatile, however, this 
-implementation may not be suitable for all cases, and hence you may create your 
-own whenever necessary. </P>
-<P>Using the <SPAN class=code>SimpleTableModel</SPAN> is very easy -- you just 
-need to provide it with the data to be displayed and the columns that the table 
-will have: </P><PRE>    Object[] data = ...;
-    ITableColumn[] columns = ...;
-    ITableModel model = new SimpleTableModel(data, columns);
-</PRE>
-<P>This model can then be passed to the Table component, and it will display the 
-data using the given columns. <BR></P>
-<H4>1.3. The Data Model </H4>The <SPAN class=code>SimpleTableModel</SPAN> can 
-also obtain its data via the <SPAN class=code>ITableDataModel</SPAN> interface. 
-This allows the source of data to be abstracted. 
-<P>The contrib library provides two standard implementations of this interface. 
-The <SPAN class=code>SimpleListTableDataModel</SPAN> and the <SPAN 
-class=code>SimpleSetTableDataModel</SPAN>. As the names indicate, the former 
-provides the table data from Lists and arrays, while the latter provides the 
-data from Sets and other unordered Collections. Using the data models is very 
-simple as well: </P><PRE>    ArrayList data = ...;
-    ITableDataModel dataModel = new SimpleListTableDataModel(data);
-    ITableModel model = new SimpleTableModel(dataModel, ...);
-</PRE>
-<P>An example of using <SPAN class=code>SimpleSetTableDataModel</SPAN> can be 
-found in the <SPAN class=code>LocaleSelection</SPAN> component in the Workbench. 
-The storage of the selected locales there is implemented precisely using that 
-table data model.</P>
-<H4>1.4. The Column Model </H4>
-<P>A column in the table model is defined using the <STRONG><SPAN 
-class=code>ITableColumn</SPAN></STRONG> interface. It provides the information 
-needed to identify the column (the column name), to render the column (the 
-columnRender that renders the heading, and the valueRenderer that renders each 
-cell), and to sort the column (whether the column is sortable and what <SPAN 
-class=code>Comparator</SPAN> should be used for sorting the table). </P>
-<P>The basic implementation of <SPAN class=code>ITableColumn</SPAN> provided is 
-<STRONG><SPAN class=code>SimpleTableColumn</SPAN></STRONG>. It takes care of all 
-mundane tasks, such as supplying a renderer for the column header, and allows 
-you to define a column by only providing its name and a way to extract the 
-column data from the row object by overriding the <SPAN 
-class=code>getColumnValue()</SPAN> method. This is demonstrated by the example 
-below that also configures the column to be sortable: </P><PRE>    // Create a new sortable column with name and title "Full Name"
-    ITableColumn fullNameColumn = new SimpleTableColumn("Full Name", true) { 
-        public Object getColumnValue(Object value) {
-            PersonInfo info = (PersonInfo) value;
-            return info.getLastName() + ", " + info.getFirstName();
-        }
-    };
-</PRE>
-<P>Other methods can be overridden as well to provide additional features, such 
-as custom rendering, as it will be shown in the next section. </P>
-<P>The above can be achieved in a simpler, but not as flexible manner by using 
-<SPAN class=code><STRONG>ExpressionTableColumn</STRONG></SPAN>. It inherits 
-<SPAN class=code>SimpleTableColumn</SPAN>, and allows you to create columns 
-whose data is obtained via OGNL: </P><PRE>    // Create a new sortable column with name and title "Occupation"
-    ITableColumn occupationColumn =  new ExpressionTableColumn("Occupation", "occupation", true);
-
-    // Create a new sortable column with name and title "Full Name"
-    ITableColumn fullNameColumn =  new ExpressionTableColumn("Full Name", "lastName + \", \" + firstName", true);
-</PRE>
-<P>The table columns are supplied to the table model using a <SPAN 
-class=code>List</SPAN> -like container defined by the <SPAN 
-class=code><STRONG>ITableColumnModel</STRONG></SPAN> interface. The generic 
-implementation provided for this interface is<STRONG> <SPAN 
-class=code>SimpleTableColumnModel</SPAN></STRONG>, which contains an array of 
-<SPAN class=code>ITableColumn</SPAN> objects of any type. </P>
-<P>One more specific implementation available is the<STRONG> <SPAN 
-class=code>ExpressionTableColumnModel</SPAN> </STRONG>, which contains<SPAN 
-class=code>ExpressionTableColumn</SPAN> objects. It allows you to define the 
-columns of your table quickly and easily, by providing a name and an OGNL 
-expression for each one in a <SPAN class=code>String</SPAN> array: </P><PRE>    // Generate a simple sorting column model that uses OGNL to get the column data
-    ITableColumnModel objColumnModel = 
-        new ExpressionTableColumnModel(new String[] {
-            "Locale", "toString()",
-            "Language", "language",
-            "Country", "country",
-            "Variant", "variant",
-            "ISO Language", "ISO3Language",
-            "ISO Country", "ISO3Country"
-        }, true);
-</PRE>
-<H4>1.5. The Table State </H4>
-<P>The state of the table model consists of any data that is not related to the 
-contents of the table, but instead carries information about its presentation. 
-The standard table model supports two states -- the paging state (how many rows 
-per page; which page we are on) and the sorting state (which column we are 
-sorting on; in an ascending or a descending order). </P>
-<P>The paging state is defined by the <STRONG><SPAN 
-class=code>ITablePagingState</SPAN></STRONG> interface and is implemented in its 
-simplest form by <STRONG><SPAN 
-class=code>SimpleTablePagingState</SPAN></STRONG>. Similarly, the sorting state 
-is defined by<STRONG> <SPAN class=code>ITableSortingState</SPAN> </STRONG>and is 
-implemented by<STRONG> <SPAN class=code>SimpleTableSortingState</SPAN></STRONG>. 
-</P>
-<P>The states are typically accessed and modified by the components presenting 
-the table (e.g. the TablePages component can change the current page based on 
-the user selection). The user can also modify them, which is often necessary at 
-initialization: </P><PRE>    ITableModel model = new SimpleTableModel(data, columns);
-
-    // Set page size to 15 elements and go to page 8
-    model.getPagingState().setPageSize(15);
-    model.getPagingState().setCurrentPage(8);
-
-    // Sort by column 'price' in an ascending order
-    model.getSortingState().setSortColumn("price", ITableSortingState.SORT_ASCENDING);
-</PRE>
-<P>The <SPAN class=code>SimpleTableModel</SPAN> &nbsp;class keeps the two states 
-together in the<STRONG> <SPAN class=code>SimpleTableState</SPAN> 
-</STRONG>object, which can be passed via the constructor and obtained at any 
-time using the <SPAN class=code>getState()</SPAN> method. This is often useful 
-when storing the state by itself is necessary (see below). </P>
-<H4>1.6. The Session State Manager </H4>
-<P>In Web interfaces, unlike client-side GUIs, the information about the state 
-of the presentation must be kept in the session object between requests. What 
-has to be kept and what can be thrown away and recreated during the next request 
-differs in each case, however. The policy of what to do typically involves a 
-tradeoff between memory and CPU power, and hence it depends very much on the 
-specific situation. </P>
-<P>The<STRONG> <SPAN class=code>ITableSessionStateManager</SPAN> 
-</STRONG>interface is used to define precisely this policy. It defines what part 
-of the table model has to be saved in the session and can recreate the table 
-model using the saved information when the next request comes. </P>
-<P>The <SPAN class=code>Table</SPAN> and the <SPAN class=code>TableView</SPAN> 
-components have a <SPAN class=code>tableSessionStateManager</SPAN> binding that 
-allows such a manager to be supplied. When the table model is needed at the 
-beginning of a new request, the component use the following procedure to obtain 
-it: </P>
-<OL>
-  <LI>Load the session state (it will be null initially) 
-  <LI>Invoke <SPAN class=code>recreateTableModel(sessionState)</SPAN> on the 
-  Session State Manager to try to recrate the table model 
-  <LI>If <SPAN class=code>recreateTableMode()</SPAN> returns null, use the <SPAN 
-  class=code>tableModel</SPAN> binding to obtain the table model </LI></OL>
-<P>Immediately before rendering, the opposite procedure takes place: </P>
-<OL>
-  <LI>Invoke <SPAN class=code>getSessionState(tableModel)</SPAN> on the Session 
-  State Manager to extract the part of the model to be saved 
-  <LI>Save the session state </LI></OL>
-<P>Three standard implementations of the <SPAN 
-class=code>ITableSessionStateManager</SPAN> interface are provided that address 
-the common cases that can be implemented without custom code. Each of them 
-implements a different policy for extracting session state from the model and 
-hence is suitable for some specific situations: </P>
-<TABLE border=1 cellPadding=5 cellSpacing=0 width="100%">
-  <TBODY>
-  <TR>
-    <TH>Session State Manager </TH>
-    <TH>Description </TH></TR>
-  <TR>
-    <TD vAlign=center>
-      <P align=center><STRONG><SPAN 
-      class=code>FullTableSessionStateManager</SPAN> </STRONG></P></TD>
-    <TD>
-      <P><STRONG>Saves the entire table model in the session. This is the 
-      default manager.</STRONG> </P>
-      <P>This manager is the simplest to use as it brings to a minimum the need 
-      for additional coding. It has a number of disadvantages, however. First, 
-      everything in the table model must be <SPAN class=code>Serializable</SPAN> 
-      since it is stored in the session and may be serialized at one point or 
-      another. Second, depending on the table data, its memory consumption per 
-      session could be quite significant. </P>
-      <P>For those reasons, it is probably not a good idea to use this manager 
-      if you are displaying large amounts of data, if you have a lot of users, 
-      or if the application needs to be clustered. On the other hand, it is 
-      perfect for quick and dirty work. </P></TD></TR>
-  <TR>
-    <TD vAlign=center>
-      <P align=center><STRONG><SPAN 
-      class=code>SimpleTableSessionStateManager</SPAN> </STRONG></P></TD>
-    <TD>
-      <P><STRONG>Saves only the table model state and assumes that the data and 
-      column models are constant.</STRONG> </P>
-      <P>This manager is designed to work with the <SPAN 
-      class=code>SimpleTableModel</SPAN> . It stores only the model state 
-      (paging and sorting), and recreates the model using the data and column 
-      models that must be supplied via its constructor. As a result, the session 
-      memory consumption is low, but the CPU utilization may be high, since the 
-      data must be resorted at each request. This manager is best used when the 
-      data that needs to be displayed is constant. </P>
-      <P>An example of the use of the manager can be seen in the <SPAN 
-      class=code>LocaleList</SPAN> component in the Workbench. That component 
-      displays all locales available to the JVM -- information that does not 
-      change and is too much to be stored in the session. </P></TD></TR>
-  <TR>
-    <TD vAlign=center>
-      <P align=center><STRONG><SPAN 
-      class=code>NullTableSessionStateManager</SPAN> </STRONG></P></TD>
-    <TD>
-      <P><STRONG>Saves nothing at all and forces the component to always load 
-      the table model from the <SPAN class=code>tableModel</SPAN> 
-      binding.</STRONG> </P>
-      <P>This manager is typically used when the storing and creation of the 
-      table model needs to be delegated to the parent component. 
-  </P></TD></TR></TBODY></TABLE>
-<P>One approach that is a good compromise between memory consumption and CPU 
-load is to store in the session only the state and the IDs of the objects in the 
-table. In this way CPU is not loaded, since re-sorting is no longer necessary, 
-and the memory consumption is not excessive, since the IDs tend not to take a 
-lot of space. Implementing this approach, however, requires a custom manager, 
-and possibly a custom <SPAN class=code>TableModel</SPAN> to limit the data 
-loaded from the database only to the elements that will be displayed on the 
-current page.</P>
-<H4>1.7. The Session Store Manager </H4>
-<P>While the Session State Manager determines <EM>what</EM> to store in the 
-session, the Session Store Manager determines <EM>how</EM> to store data in the 
-session. Normally the information that needs to be saved is stored using the 
-Tapestry persistent property mechanism. If a Session Store Manager is provided, 
-however, it is asked to take care of storing and loading of that information. 
-</P>
-<P>This is typically necessary in two specific cases: </P>
-<OL>
-  <LI>When the same table needs to be displayed on multiple pages. In that case 
-  the persistent property method will not work as desired, and the table state 
-  must be saved in the <SPAN class=code>Visit</SPAN> instead. 
-  <LI>When the table is a part of a <SPAN class=code>Block</SPAN>, and the <SPAN 
-  class=code>Block</SPAN> is used on more than one page. In that case the tables 
-  displayed may be different, but a persistent page property will save their 
-  states at the same location.&nbsp;Hence a custom Session Store Manager is 
-  necessary. </LI></OL>
-<P></P>
-<P>The Session Store Managers implement the <STRONG><SPAN 
-class=code>ITableSessionStoreManager</SPAN></STRONG> interface. There are no 
-default implementations of this interface -- the developer must supply his own. 
-</P>
-<P> </P>
-<P></P>
-<H3>2. Changing appearance </H3>
-<P>While the table model defines what data should be displayed in the table, it 
-does not define how that data would look. The appearance is an important element 
-of the web applications, however, and so the table components provide a number 
-of ways to the developer to customize their looks. </P>
-<H4>2.1. Setting styles </H4>
-<P>The simplest way to modify how the table looks is by using CSS. The <SPAN 
-class=code>Table</SPAN> component provides a number of bindings allowing you to 
-set the CSS class of all major elements of the table. Please have a look at 
-<SPAN class=code>Table</SPAN>'s JavaDoc for details. </P>
-<P>One interesting use of this approach is to define an <SPAN 
-class=code>evenOdd</SPAN> bean of type <SPAN 
-class=code>org.apache.tapestry.bean.EvenOdd</SPAN> and bind the rowsClass parameter 
-of table to <SPAN class=code>"beans.evenOdd.next"</SPAN>. In this way odd rows 
-in the table will receive the class "odd", and even rows will receive the class 
-"even", which allows for different formatting of neighbouring rows. </P>
-<H4>2.2. Changing layout </H4>
-<P>The <SPAN class=code>Table</SPAN> component is very easy to use, but it may 
-become a "straight jacket" if a different layout of the table is required. In 
-such a case, instead of <SPAN class=code>Table</SPAN>, the developer could use 
-the lower level table components described below: </P>
-<TABLE border=1 cellPadding=5 cellSpacing=0>
-  <TBODY>
-  <TR>
-    <TH>Component</TH>
-    <TH>Wrapped by</TH>
-    <TH>Description</TH></TR>
-  <TR>
-    <TD align=middle><STRONG><SPAN class=code>TableView</SPAN></STRONG></TD>
-    <TD>&nbsp;</TD>
-    <TD>Wraps the whole table structure and manages the table model</TD></TR>
-  <TR>
-    <TD align=middle><STRONG><SPAN class=code>TablePages</SPAN></STRONG></TD>
-    <TD align=middle><SPAN class=code>TableView</SPAN></TD>
-    <TD>Displays the page navigation interface</TD></TR>
-  <TR>
-    <TD align=middle><STRONG><SPAN class=code>TableColumns</SPAN></STRONG></TD>
-    <TD align=middle><SPAN class=code>TableView</SPAN></TD>
-    <TD>Generates the column headers</TD></TR>
-  <TR>
-    <TD align=middle><STRONG><SPAN class=code>TableRows</SPAN></STRONG></TD>
-    <TD align=middle><SPAN class=code>TableView</SPAN></TD>
-    <TD>Enumerates all rows on the current page</TD></TR>
-  <TR>
-    <TD align=middle><STRONG><SPAN class=code>TableValues</SPAN></STRONG></TD>
-    <TD align=middle><SPAN class=code>TableRows</SPAN></TD>
-    <TD>Renders the values for each column of the current 
-row</TD></TR></TBODY></TABLE>
-<P>&nbsp;The <SPAN class=code>Table</SPAN> component itself is based on those 
-components. Here is its template: </P><PRE>    &lt;span jwcid="tableView"&gt;
-        &lt;span jwcid="condPages"&gt;&lt;span jwcid="tablePages"/&gt;&lt;/span&gt;
-        &lt;tr&gt;&lt;span jwcid="tableColumns"/&gt;&lt;/tr&gt;
-        &lt;tr jwcid="tableRows"&gt;&lt;td jwcid="tableValues"/&gt;&lt;/tr&gt;
-    &lt;/span&gt;
-</PRE>
-<P>You can use those components in a similar way to create a layout that you 
-want. You can change the location of the page navigation section, add other 
-columns in the table manually, or insert custom formatting. You can even build 
-your own components to replace some of the standard ones.</P>
-<P>A good example of this approach is the <SPAN class=code>LocaleList</SPAN> 
-component in the Workbench. It modifies the layout slightly and adds a separate 
-column in the table that is not defined the table model.</P>
-<H4>2.3. Changing renderers </H4>
-<P>Another way to change the appearance of the table is by using the <SPAN 
-class=code>ITableColumn</SPAN> ability to provide custom renderers for both 
-column headers and values. By default, <SPAN class=code>SimpleTableColumn</SPAN> 
-uses <SPAN class=code>RenderString</SPAN> to display values and the <SPAN 
-class=code>SimpleTableColumnComponent</SPAN> to render the headers. That 
-component makes the header a link if the column is sortable, handles clicks on 
-it, and displays an indicator if the column is currently used for sorting. </P>
-<P>If is quite possible to use custom components to render the values or the 
-headers in a different way. This is the approach taken by the <SPAN 
-class=code>LocaleSelection</SPAN> component in the Workbench. It uses Block 
-sections in its template to render some columns differently (see the demo). </P>
-<P>While using this mechanism is not hard at all, there are a number of common 
-pitfalls that the developer must avoid. If you would like to go that route, 
-please see how the <SPAN class=code>SimpleTableColumnComponent</SPAN> and the 
-<SPAN class=code>LocaleSelection</SPAN> component are implemented and read the 
-JavaDocs of <SPAN class=code>org.apache.tapestry.components.BlockRenderer</SPAN> and 
-<SPAN class=code>org.apache.tapestry.ComponentAddress</SPAN> beforehand.</P>
-<P>&nbsp;</P>
-
- </td></tr></table>
-</td></tr>
-<tr>
- <td colspan="3"><hr></td>  
-</tr>
-<tr><!-- Previous component in alphabetical order. -->
-  <td align="left"><A href="contrib.PopupLink.html"><IMG alt="contrib:PopupLink" src="common-images/prev.png"></a></td>  
-  <td align="middle"><A href="index.html"><IMG alt="Component Index" src="common-images/home.png" ></a></td><!-- Next component in alphabetical order. -->
-  <td align="right"><A href="contrib.TableColumns.html"><IMG alt="contrib:TableColumns" src="common-images/next.png"></a></td>  
-</tr>
-</table>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/3.0.4/doc/src/ComponentReference/contrib.TableColumns.html b/3.0.4/doc/src/ComponentReference/contrib.TableColumns.html
deleted file mode 100644
index 9c1fd0a..0000000
--- a/3.0.4/doc/src/ComponentReference/contrib.TableColumns.html
+++ /dev/null
@@ -1,207 +0,0 @@
-<!--
-Tbis HTML document provides a base template for Component Reference pages.
-
-* All ??? text should be replaced.
-
-* Examples should illustrate near real world use of the component, see other
-  existing component page examples for formatting and style guidelines.
-  
-* Use Tapestry 2.2 Beta 1+ "expression" binding syntax instead of 
-  "property-path" syntax.
-  
-* Include links to Tapestry Javadoc API where appropriate.
-
-* Include Tapestry Developers Guide multi-page version where appropriate.
--->
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<!-- $Id$ --> 
-<html>
-<head>
-<title>contrib:TableColumns</title>
-<link rel="stylesheet" type="text/css" href="Tapestry.css" title="style">
-</head>
-
-<body>
-<table border="0" cellpadding="0" cellspacing="0" width="100%">
- <tr>
-  <!-- Previous component in alphabetical order. -->
-  <td align="left"><a href="contrib.Table.html"><img alt="contrib:Table" src="common-images/prev.png"></a></td>  
-  <td align="middle"><a href="index.html"><img alt="Component Index" src="common-images/home.png" ></a></td>
-  <!-- Next component in alphabetical order. -->
-  <td align="right"><a href="contrib.TableFormPages.html"><img alt="contrib:TableFormPages" src="common-images/next.png"></a></td>  
- <tr>
- <tr>
-  <td colspan="3"><hr></td>  
- </tr>
- <tr>
-  <td colspan="3">
-   <table border="0" cellpadding="4" cellspacing="4" width="100%">
-
-<tr valign="top">
- <td>
-  <table>
-   <tr>
-    <td><font size="+2"><b>contrib:TableColumns</b></font></td>
-   </tr>
-   <tr>
-    <td>
-     <A href="../api/org/apache/tapestry/contrib/table/components/TableColumns.html">org.apache.tapestry.contrib.table.components.TableColumns</a>
-    </td>
-   </tr>
-  </table>
- </td>
- <td>
-  <table align="right" valign="middle" bgcolor="#c0c0c0" cellpadding="8">
-   <tr>
-    <td>
-	<TABLE border=1 cellspacing=0 cellpadding=5>
-	  <TBODY>
-	  <TR>
-	    <TD></TD></TR>
-	  <TR>
-	    <TH>
-	      <TABLE align=center border=0 cellPadding=0 cellSpacing=0>
-	        <TBODY>
-	        <TR>
-	          <TD><A 
-	            href="#">Locale</A> 
-	          </TD></TR></TBODY></TABLE></TH>
-	    <TH>
-	      <TABLE align=center border=0 cellPadding=0 cellSpacing=0>
-	        <TBODY>
-	        <TR>
-	          <TD><A 
-	            href="#">Language</A> 
-	          </TD>
-	          <TD>&nbsp;<IMG align=middle border=0 
-	            src="images/arrow-up.gif"> </TD></TR></TBODY></TABLE></TH>
-	    <TH>
-	      <TABLE align=center border=0 cellPadding=0 cellSpacing=0>
-	        <TBODY>
-	        <TR>
-	          <TD><A 
-	            href="#">Country</A> 
-	          </TD></TR></TBODY></TABLE></TH>
-		</TR></TBODY></TABLE>
-    </td>
-   </tr>
-  </table>
- </td>
-</tr>
-
-<tr valign="center">
- <td colspan="2">&nbsp;</td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Description</b>
-  <br> 
- A low level Table component that renders the column headers in the table.
- This component must be wrapped by <A HREF="../api/org/apache/tapestry/contrib/table/components/TableView.html"><CODE>TableView</CODE></A>.
- <p>
- The component iterates over all column objects in the
- <A HREF="../api/org/apache/tapestry/contrib/table/model/ITableColumnModel.html"><CODE>ITableColumnModel</CODE></A> and renders
- a header for each one of them using the renderer provided by the
- getColumnRender() method in <A HREF="../api/org/apache/tapestry/contrib/table/model/ITableColumn.html"><CODE>ITableColumn</CODE></A>.
- The headers are wrapped in 'th' tags by default.
-  
- </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>See Also</b>
-  <br>
-  <A href="contrib.Table.html">Table</a>, 
-  <A href="contrib.TablePages.html">TablePages</a>,
-  <A href="contrib.TableRows.html">TableRows</a>,
-  <A href="contrib.TableValues.html">TableValues</a>,
-  <A href="contrib.TableView.html">TableView</a>
- </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Parameters</b>
-  <br>
-  <table border="1" cellpadding="4" cellspacing="4" class="parameters">
-   <tr> 
-    <th>Name</th>
-    <th>Type</th>
-    <th>Direction</th>
-    <th>Required</th> 
-    <th>Default</th>
-    <th>Description</th>
-   </tr>
-
- <tr>
-  <td>element</td>
-  <td>String</td>
-  <td>in</td>
-  <td>no</td>
-  <td>th</td>
-  <td align="left">The tag to use to wrap the column headers.</td> 
- </tr>
-
- <tr>
-  <td>column</td>
-  <td><A HREF="../api/org/apache/tapestry/contrib/table/model/ITableColumn.html"><CODE>ITableColumn</CODE></A></td>
-  <td>out</td>
-  <td>no</td>
-  <td>&nbsp;</td>
-  <td align="left">The object representing the current column.</td> 
- </tr>
-
- <tr>
-  <td>arrowUpAsset</td>
-  <td><A HREF="../api/org/apache/tapestry/IAsset.html"><CODE>IAsset</CODE></A></td>
-  <td>in</td>
-  <td>no</td>
-  <td>&nbsp;</td>
-  <td align="left">The image to use to describe a column sorted in an ascending order.</td> 
- </tr>
-
- <tr>
-  <td>arrowDownAsset</td>
-  <td><A HREF="../api/org/apache/tapestry/IAsset.html"><CODE>IAsset</CODE></A></td>
-  <td>in</td>
-  <td>no</td>
-  <td>&nbsp;</td>
-  <td align="left">The image to use to describe a column sorted in a descending order.</td> 
- </tr>
-
-  </table>
-  <p>
-  Body: <strong>removed</strong><br>
-  Informal parameters: <strong>allowed</strong><br>
-  <!-- component-specification "reserved-parameter" -->
-  Reserved parameters: none
-  </p>    
- </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Examples</b>
-  <p>
-  This example is under construction.
-  </p>
-      
-
- </td></tr></table>
-</td></tr>
-<tr>
- <td colspan="3"><hr></td>  
-</tr>
-<tr>
-  <!-- Previous component in alphabetical order. -->
-  <td align="left"><a href="contrib.Table.html"><img alt="contrib:Table" src="common-images/prev.png"></a></td>  
-  <td align="middle"><a href="index.html"><img alt="Component Index" src="common-images/home.png" ></a></td>
-  <!-- Next component in alphabetical order. -->
-  <td align="right"><a href="contrib.TablePages.html"><img alt="contrib:TablePages" src="common-images/next.png"></a></td>  
-</tr>
-</table>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/3.0.4/doc/src/ComponentReference/contrib.TableFormPages.html b/3.0.4/doc/src/ComponentReference/contrib.TableFormPages.html
deleted file mode 100644
index 1eb9921..0000000
--- a/3.0.4/doc/src/ComponentReference/contrib.TableFormPages.html
+++ /dev/null
@@ -1,170 +0,0 @@
-<!--
-Tbis HTML document provides a base template for Component Reference pages.
-
-* All ??? text should be replaced.
-
-* Examples should illustrate near real world use of the component, see other
-  existing component page examples for formatting and style guidelines.
-  
-* Use Tapestry 2.2 Beta 1+ "expression" binding syntax instead of 
-  "property-path" syntax.
-  
-* Include links to Tapestry Javadoc API where appropriate.
-
-* Include Tapestry Developers Guide multi-page version where appropriate.
--->
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<!-- $Id$ --> 
-<html>
-<head>
-<title>contrib:TableFormPages</title>
-<link rel="stylesheet" type="text/css" href="Tapestry.css" title="style">
-</head>
-
-<body>
-<table border="0" cellpadding="0" cellspacing="0" width="100%">
- <tr>
-  <!-- Previous component in alphabetical order. -->
-  <td align="left"><A href="contrib.TableColumns.html"><IMG alt="contrib:TableColumns" src="common-images/prev.png"></a></td>  
-  <td align="middle"><a href="index.html"><img alt="Component Index" src="common-images/home.png" ></a></td>
-  <!-- Next component in alphabetical order. -->
-  <td align="right"><a href="contrib.TableFormRows.html"><img alt="contrib:TableFormRows" src="common-images/next.png"></a></td>  
- <tr>
- <tr>
-  <td colspan="3"><hr></td>  
- </tr>
- <tr>
-  <td colspan="3">
-   <table border="0" cellpadding="4" cellspacing="4" width="100%">
-
-<tr valign="top">
- <td>
-  <table>
-   <tr>
-    <td><font size="+2"><b>contrib:TableFormPages</b></font></td>
-   </tr>
-   <tr>
-    <td>
-     <A href="../api/org/apache/tapestry/contrib/table/components/TableFormPages.html">org.apache.tapestry.contrib.table.components.TableFormPages</a>
-    </td>
-   </tr>
-  </table>
- </td>
- <td>
-  <table align="right" valign="middle" bgcolor="#c0c0c0" cellpadding="8">
-   <tr>
-    <td>
-		<SPAN><A 
-		href="#">&lt;&lt;</A>&nbsp;<A 
-		href="#">&lt;</A>&nbsp;<A 
-		href="#">7</A>&nbsp;<A 
-		href="#">8</A>&nbsp;<A 
-		href="#">9</A><B>&nbsp;10</B>&nbsp;<A 
-		href="#">11</A>&nbsp;<A 
-		href="#">12</A>&nbsp;<A 
-		href="#">13</A>&nbsp;<A 
-		href="#">&gt;</A>&nbsp;<A 
-		href="#">&gt;&gt;</A></SPAN> 
-	</td>
-   </tr>
-  </table>
- </td>
-</tr>
-
-<tr valign="center">
- <td colspan="2">&nbsp;</td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Description</b>
-  <br> 
- A version of <A href="contrib.TablePages.html">TablePages</a> that is designed for 
- operation in a form.
- It is a low level Table component that renders the pages in the table.
- This component must be wrapped by <A HREF="../api/org/apache/tapestry/contrib/table/components/TableView.html"><CODE>TableView</CODE></A>.
- <p>
- The component generates a list of pages in the Table centered around the 
- current one and allows you to navigate to other pages. The links it generates
- submit the form and thus allow its data to be preserved.
-
- </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>See Also</b>
-  <br>
-  <A href="contrib.Table.html">Table</a>,
-  <A href="contrib.TableColumns.html">TableColumns</a>, 
-  <A href="contrib.TablePages.html">TablePages</a>,
-  <A href="contrib.TableRows.html">TableRows</a>,
-  <A href="contrib.TableValues.html">TableValues</a>,
-  <A href="contrib.TableView.html">TableView</a>
-  <A href="contrib.FormTable.html">FormTable</a>,
-  <A href="contrib.TableFormRows.html">TableFormRows</a>
- </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Parameters</b>
-  <br>
-  <table border="1" cellpadding="4" cellspacing="4" class="parameters">
-   <tr> 
-    <th>Name</th>
-    <th>Type</th>
-    <th>Direction</th>
-    <th>Required</th> 
-    <th>Default</th>
-    <th>Description</th>
-   </tr>
-
-	<tr>
-	  <td>pagesDisplayed</td>
-	  <td>int</td>
-	  <td>in</td>
-	  <td>no</td>
-	  <td>7</td>
-	  <td align="left">Determines the maximum number of pages to be displayed in the page list
-	      when the table has more than one page.
-	      <p>For example, if the table has 20 pages, and 10 is the current page,
-	      pages from 7 to 13 in the page list will be shown if this parameter has 
-	      a value of 7.
-	  </td> 
-	</tr>
-
-  </table>
-  <p>
-  Body: <strong>removed</strong><br>
-  Informal parameters: <strong>allowed</strong><br>
-  <!-- component-specification "reserved-parameter" -->
-  Reserved parameters: none
-  </p>    
- </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Examples</b>
-  <p>
-  This example is under construction.
-  </p>
-      
-
- </td></tr></table>
-</td></tr>
-<tr>
- <td colspan="3"><hr></td>  
-</tr>
-<tr>
-  <!-- Previous component in alphabetical order. -->
-  <td align="left"><A href="contrib.TableColumns.html"><IMG alt="contrib:TableColumns" src="common-images/prev.png"></a></td>  
-  <td align="middle"><a href="index.html"><img alt="Component Index" src="common-images/home.png" ></a></td>
-  <!-- Next component in alphabetical order. -->
-  <td align="right"><a href="contrib.TableRows.html"><img alt="contrib:TableRows" src="common-images/next.png"></a></td>  
-</tr>
-</table>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/3.0.4/doc/src/ComponentReference/contrib.TableFormRows.html b/3.0.4/doc/src/ComponentReference/contrib.TableFormRows.html
deleted file mode 100644
index 7b99d1c..0000000
--- a/3.0.4/doc/src/ComponentReference/contrib.TableFormRows.html
+++ /dev/null
@@ -1,177 +0,0 @@
-<!--
-Tbis HTML document provides a base template for Component Reference pages.
-
-* All ??? text should be replaced.
-
-* Examples should illustrate near real world use of the component, see other
-  existing component page examples for formatting and style guidelines.
-  
-* Use Tapestry 2.2 Beta 1+ "expression" binding syntax instead of 
-  "property-path" syntax.
-  
-* Include links to Tapestry Javadoc API where appropriate.
-
-* Include Tapestry Developers Guide multi-page version where appropriate.
--->
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<!-- $Id$ --> 
-<html>
-<head>
-<title>contrib:TableFormRows</title>
-<link rel="stylesheet" type="text/css" href="Tapestry.css" title="style">
-</head>
-
-<body>
-<table border="0" cellpadding="0" cellspacing="0" width="100%">
- <tr>
-  <!-- Previous component in alphabetical order. -->
-  <td align="left"><a href="contrib.TableFormPages.html"><img alt="contrib:TableFormPages" src="common-images/prev.png"></a></td>  
-  <td align="middle"><a href="index.html"><img alt="Component Index" src="common-images/home.png" ></a></td>
-  <!-- Next component in alphabetical order. -->
-  <td align="right"><a href="contrib.TablePages.html"><img alt="contrib.TablePages" src="common-images/next.png"></a></td>  
- <tr>
- <tr>
-  <td colspan="3"><hr></td>  
- </tr>
- <tr>
-  <td colspan="3">
-   <table border="0" cellpadding="4" cellspacing="4" width="100%">
-
-<tr valign="top">
- <td>
-  <table>
-   <tr>
-    <td><font size="+2"><b>contrib:TableFormRows</b></font></td>
-   </tr>
-   <tr>
-    <td>
-     <A href="../api/org/apache/tapestry/contrib/table/components/TableFormRows.html">org.apache.tapestry.contrib.table.components.TableFormRows</a>
-    </td>
-   </tr>
-  </table>
- </td>
- <td>
-  <table align="right" valign="middle" bgcolor="#c0c0c0" cellpadding="8">
-   <tr>
-    <td>Non Visual Component</td>
-   </tr>
-  </table>
- </td>
-</tr>
-
-<tr valign="center">
- <td colspan="2">&nbsp;</td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Description</b>
-  <br> 
- A version of the <A HREF="contrib.TableRows.html">TableRows</A> designed for operation in a form.
- This is a low level Table component that generates the rows of the current page in the table.
- Each row is stored as a hidden value in the form, which eliminates the chance of a stale link during rewinding.
- This component must be wrapped by <A HREF="../api/org/apache/tapestry/contrib/table/components/TableView.html"><CODE>TableView</CODE></A>.
- 
- <p>
- The component iterates over the rows of the current page in the table. 
- The rows are wrapped in 'tr' tags by default. 
- You can define columns manually within, or
- you can use <A HREF="../api/org/apache/tapestry/contrib/table/components/TableValues.html"><CODE>TableValues</CODE></A> 
- to generate the columns automatically.
- 
- </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>See Also</b>
-  <br>
-  <A href="contrib.Table.html">Table</a>,
-  <A href="contrib.TableColumns.html">TableColumns</a>, 
-  <A href="contrib.TablePages.html">TablePages</a>,
-  <A href="contrib.TableRows.html">TableRows</a>
-  <A href="contrib.TableValues.html">TableValues</a>,
-  <A href="contrib.TableView.html">TableView</a>,
-  <A href="contrib.FormTable.html">FormTable</a>,
-  <A href="contrib.TableFormPages.html">TableFormPages</a>
- </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Parameters</b>
-  <br>
-  <table border="1" cellpadding="4" cellspacing="4" class="parameters">
-   <tr> 
-    <th>Name</th>
-    <th>Type</th>
-    <th>Direction</th>
-    <th>Required</th> 
-    <th>Default</th>
-    <th>Description</th>
-   </tr>
-
- <tr>
-  <td>row</td>
-  <td>Object</td>
-  <td>out</td>
-  <td>no</td>
-  <td>&nbsp;</td>
-  <td align="left">The value object of the current row.</td> 
- </tr>
-
- <tr>
-  <td>convertor</td>
-  <td><A HREF="../api/org/apache/tapestry/contrib/table/model/IPrimaryKeyConvertor.html"><CODE>IPrimaryKeyConvertor</CODE></A></td>
-  <td>in</td>
-  <td>no</td>
-  <td>&nbsp;</td>
-  <td align="left">An interface defining how the items iterated upon by this component
-      will be stored in the form as Hidden values. 
-      This interface allows only the primary key of the items to be stored, rather than
-      the whole item.</td> 
- </tr>
-
- <tr>
-  <td>element</td>
-  <td>String</td>
-  <td>in</td>
-  <td>no</td>
-  <td>tr</td>
-  <td align="left">The tag to use to wrap the rows in.</td> 
- </tr>
-
-  </table>
-  <p>
-  Body: <strong>removed</strong><br>
-  Informal parameters: <strong>allowed</strong><br>
-  <!-- component-specification "reserved-parameter" -->
-  Reserved parameters: none
-  </p>    
- </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Examples</b>
-  <p>
-  This example is under construction.
-  </p>
-      
-
- </td></tr></table>
-</td></tr>
-<tr>
- <td colspan="3"><hr></td>  
-</tr>
-<tr>
-  <!-- Previous component in alphabetical order. -->
-  <td align="left"><a href="contrib.TablePages.html"><img alt="contrib:TablePages" src="common-images/prev.png"></a></td>  
-  <td align="middle"><a href="index.html"><img alt="Component Index" src="common-images/home.png" ></a></td>
-  <!-- Next component in alphabetical order. -->
-  <td align="right"><a href="contrib.TableValues.html"><img alt="contrib.TableValues" src="common-images/next.png"></a></td>  
-</tr>
-</table>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/3.0.4/doc/src/ComponentReference/contrib.TablePages.html b/3.0.4/doc/src/ComponentReference/contrib.TablePages.html
deleted file mode 100644
index 996b0aa..0000000
--- a/3.0.4/doc/src/ComponentReference/contrib.TablePages.html
+++ /dev/null
@@ -1,164 +0,0 @@
-<!--
-Tbis HTML document provides a base template for Component Reference pages.
-
-* All ??? text should be replaced.
-
-* Examples should illustrate near real world use of the component, see other
-  existing component page examples for formatting and style guidelines.
-  
-* Use Tapestry 2.2 Beta 1+ "expression" binding syntax instead of 
-  "property-path" syntax.
-  
-* Include links to Tapestry Javadoc API where appropriate.
-
-* Include Tapestry Developers Guide multi-page version where appropriate.
--->
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<!-- $Id$ --> 
-<html>
-<head>
-<title>contrib:TablePages</title>
-<link rel="stylesheet" type="text/css" href="Tapestry.css" title="style">
-</head>
-
-<body>
-<table border="0" cellpadding="0" cellspacing="0" width="100%">
- <tr>
-  <!-- Previous component in alphabetical order. -->
-  <td align="left"><A href="contrib.TableFormRows.html"><IMG alt="contrib:TableFormRows" src="common-images/prev.png"></a></td>  
-  <td align="middle"><a href="index.html"><img alt="Component Index" src="common-images/home.png" ></a></td>
-  <!-- Next component in alphabetical order. -->
-  <td align="right"><a href="contrib.TableRows.html"><img alt="contrib:TableRows" src="common-images/next.png"></a></td>  
- <tr>
- <tr>
-  <td colspan="3"><hr></td>  
- </tr>
- <tr>
-  <td colspan="3">
-   <table border="0" cellpadding="4" cellspacing="4" width="100%">
-
-<tr valign="top">
- <td>
-  <table>
-   <tr>
-    <td><font size="+2"><b>contrib:TablePages</b></font></td>
-   </tr>
-   <tr>
-    <td>
-     <A href="../api/org/apache/tapestry/contrib/table/components/TablePages.html">org.apache.tapestry.contrib.table.components.TablePages</a>
-    </td>
-   </tr>
-  </table>
- </td>
- <td>
-  <table align="right" valign="middle" bgcolor="#c0c0c0" cellpadding="8">
-   <tr>
-    <td>
-		<SPAN><A 
-		href="#">&lt;&lt;</A>&nbsp;<A 
-		href="#">&lt;</A>&nbsp;<A 
-		href="#">7</A>&nbsp;<A 
-		href="#">8</A>&nbsp;<A 
-		href="#">9</A><B>&nbsp;10</B>&nbsp;<A 
-		href="#">11</A>&nbsp;<A 
-		href="#">12</A>&nbsp;<A 
-		href="#">13</A>&nbsp;<A 
-		href="#">&gt;</A>&nbsp;<A 
-		href="#">&gt;&gt;</A></SPAN> 
-	</td>
-   </tr>
-  </table>
- </td>
-</tr>
-
-<tr valign="center">
- <td colspan="2">&nbsp;</td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Description</b>
-  <br> 
- A low level Table component that renders the pages in the table.
- This component must be wrapped by <A HREF="../api/org/apache/tapestry/contrib/table/components/TableView.html"><CODE>TableView</CODE></A>.
- <p>
- The component generates a list of pages in the Table centered around the 
- current one and allows you to navigate to other pages.
-
- </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>See Also</b>
-  <br>
-  <A href="contrib.Table.html">Table</a>,
-  <A href="contrib.TableColumns.html">TableColumns</a>, 
-  <A href="contrib.TableRows.html">TableRows</a>,
-  <A href="contrib.TableValues.html">TableValues</a>,
-  <A href="contrib.TableView.html">TableView</a>
- </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Parameters</b>
-  <br>
-  <table border="1" cellpadding="4" cellspacing="4" class="parameters">
-   <tr> 
-    <th>Name</th>
-    <th>Type</th>
-    <th>Direction</th>
-    <th>Required</th> 
-    <th>Default</th>
-    <th>Description</th>
-   </tr>
-
-	<tr>
-	  <td>pagesDisplayed</td>
-	  <td>int</td>
-	  <td>in</td>
-	  <td>no</td>
-	  <td>7</td>
-	  <td align="left">Determines the maximum number of pages to be displayed in the page list
-	      when the table has more than one page.
-	      <p>For example, if the table has 20 pages, and 10 is the current page,
-	      pages from 7 to 13 in the page list will be shown if this parameter has 
-	      a value of 7.
-	  </td> 
-	</tr>
-
-  </table>
-  <p>
-  Body: <strong>removed</strong><br>
-  Informal parameters: <strong>allowed</strong><br>
-  <!-- component-specification "reserved-parameter" -->
-  Reserved parameters: none
-  </p>    
- </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Examples</b>
-  <p>
-  This example is under construction.
-  </p>
-      
-
- </td></tr></table>
-</td></tr>
-<tr>
- <td colspan="3"><hr></td>  
-</tr>
-<tr>
-  <!-- Previous component in alphabetical order. -->
-  <td align="left"><A href="contrib.TableColumns.html"><IMG alt="contrib:TableColumns" src="common-images/prev.png"></a></td>  
-  <td align="middle"><a href="index.html"><img alt="Component Index" src="common-images/home.png" ></a></td>
-  <!-- Next component in alphabetical order. -->
-  <td align="right"><a href="contrib.TableRows.html"><img alt="contrib:TableRows" src="common-images/next.png"></a></td>  
-</tr>
-</table>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/3.0.4/doc/src/ComponentReference/contrib.TableRows.html b/3.0.4/doc/src/ComponentReference/contrib.TableRows.html
deleted file mode 100644
index 81807f4..0000000
--- a/3.0.4/doc/src/ComponentReference/contrib.TableRows.html
+++ /dev/null
@@ -1,160 +0,0 @@
-<!--
-Tbis HTML document provides a base template for Component Reference pages.
-
-* All ??? text should be replaced.
-
-* Examples should illustrate near real world use of the component, see other
-  existing component page examples for formatting and style guidelines.
-  
-* Use Tapestry 2.2 Beta 1+ "expression" binding syntax instead of 
-  "property-path" syntax.
-  
-* Include links to Tapestry Javadoc API where appropriate.
-
-* Include Tapestry Developers Guide multi-page version where appropriate.
--->
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<!-- $Id$ --> 
-<html>
-<head>
-<title>contrib:TableRows</title>
-<link rel="stylesheet" type="text/css" href="Tapestry.css" title="style">
-</head>
-
-<body>
-<table border="0" cellpadding="0" cellspacing="0" width="100%">
- <tr>
-  <!-- Previous component in alphabetical order. -->
-  <td align="left"><a href="contrib.TablePages.html"><img alt="contrib:TablePages" src="common-images/prev.png"></a></td>  
-  <td align="middle"><a href="index.html"><img alt="Component Index" src="common-images/home.png" ></a></td>
-  <!-- Next component in alphabetical order. -->
-  <td align="right"><a href="contrib.TableValues.html"><img alt="contrib.TableValues" src="common-images/next.png"></a></td>  
- <tr>
- <tr>
-  <td colspan="3"><hr></td>  
- </tr>
- <tr>
-  <td colspan="3">
-   <table border="0" cellpadding="4" cellspacing="4" width="100%">
-
-<tr valign="top">
- <td>
-  <table>
-   <tr>
-    <td><font size="+2"><b>contrib:TableRows</b></font></td>
-   </tr>
-   <tr>
-    <td>
-     <A href="../api/org/apache/tapestry/contrib/table/components/TableRows.html">org.apache.tapestry.contrib.table.components.TableRows</a>
-    </td>
-   </tr>
-  </table>
- </td>
- <td>
-  <table align="right" valign="middle" bgcolor="#c0c0c0" cellpadding="8">
-   <tr>
-    <td>Non Visual Component</td>
-   </tr>
-  </table>
- </td>
-</tr>
-
-<tr valign="center">
- <td colspan="2">&nbsp;</td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Description</b>
-  <br> 
- A low level Table component that generates the rows of the current page in the table.
- This component must be wrapped by <A HREF="../api/org/apache/tapestry/contrib/table/components/TableView.html"><CODE>TableView</CODE></A>.
- 
- <p>
- The component iterates over the rows of the current page in the table. 
- The rows are wrapped in 'tr' tags by default. 
- You can define columns manually within, or
- you can use <A HREF="../api/org/apache/tapestry/contrib/table/components/TableValues.html"><CODE>TableValues</CODE></A> 
- to generate the columns automatically.
- 
- </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>See Also</b>
-  <br>
-  <A href="contrib.Table.html">Table</a>,
-  <A href="contrib.TableColumns.html">TableColumns</a>, 
-  <A href="contrib.TablePages.html">TablePages</a>,
-  <A href="contrib.TableValues.html">TableValues</a>,
-  <A href="contrib.TableView.html">TableView</a>
- </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Parameters</b>
-  <br>
-  <table border="1" cellpadding="4" cellspacing="4" class="parameters">
-   <tr> 
-    <th>Name</th>
-    <th>Type</th>
-    <th>Direction</th>
-    <th>Required</th> 
-    <th>Default</th>
-    <th>Description</th>
-   </tr>
-
- <tr>
-  <td>row</td>
-  <td>Object</td>
-  <td>out</td>
-  <td>no</td>
-  <td>&nbsp;</td>
-  <td align="left">The value object of the current row.</td> 
- </tr>
-
- <tr>
-  <td>element</td>
-  <td>String</td>
-  <td>in</td>
-  <td>no</td>
-  <td>tr</td>
-  <td align="left">The tag to use to wrap the rows in.</td> 
- </tr>
-
-  </table>
-  <p>
-  Body: <strong>removed</strong><br>
-  Informal parameters: <strong>allowed</strong><br>
-  <!-- component-specification "reserved-parameter" -->
-  Reserved parameters: none
-  </p>    
- </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Examples</b>
-  <p>
-  This example is under construction.
-  </p>
-      
-
- </td></tr></table>
-</td></tr>
-<tr>
- <td colspan="3"><hr></td>  
-</tr>
-<tr>
-  <!-- Previous component in alphabetical order. -->
-  <td align="left"><a href="contrib.TablePages.html"><img alt="contrib:TablePages" src="common-images/prev.png"></a></td>  
-  <td align="middle"><a href="index.html"><img alt="Component Index" src="common-images/home.png" ></a></td>
-  <!-- Next component in alphabetical order. -->
-  <td align="right"><a href="contrib.TableValues.html"><img alt="contrib.TableValues" src="common-images/next.png"></a></td>  
-</tr>
-</table>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/3.0.4/doc/src/ComponentReference/contrib.TableValues.html b/3.0.4/doc/src/ComponentReference/contrib.TableValues.html
deleted file mode 100644
index fab9289..0000000
--- a/3.0.4/doc/src/ComponentReference/contrib.TableValues.html
+++ /dev/null
@@ -1,160 +0,0 @@
-<!--
-Tbis HTML document provides a base template for Component Reference pages.
-
-* All ??? text should be replaced.
-
-* Examples should illustrate near real world use of the component, see other
-  existing component page examples for formatting and style guidelines.
-  
-* Use Tapestry 2.2 Beta 1+ "expression" binding syntax instead of 
-  "property-path" syntax.
-  
-* Include links to Tapestry Javadoc API where appropriate.
-
-* Include Tapestry Developers Guide multi-page version where appropriate.
--->
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<!-- $Id$ --> 
-<html>
-<head>
-<title>contrib:TableValues</title>
-<link rel="stylesheet" type="text/css" href="Tapestry.css" title="style">
-</head>
-
-<body>
-<table border="0" cellpadding="0" cellspacing="0" width="100%">
- <tr>
-  <!-- Previous component in alphabetical order. -->
-  <td align="left"><a href="contrib.TableRows.html"><img alt="contrib:TableRows" src="common-images/prev.png"></a></td>  
-  <td align="middle"><a href="index.html"><img alt="Component Index" src="common-images/home.png" ></a></td>
-  <!-- Next component in alphabetical order. -->
-  <td align="right"><a href="contrib.TableView.html"><img alt="contrib:TableView" src="common-images/next.png"></a></td>  
- <tr>
- <tr>
-  <td colspan="3"><hr></td>  
- </tr>
- <tr>
-  <td colspan="3">
-   <table border="0" cellpadding="4" cellspacing="4" width="100%">
-
-<tr valign="top">
- <td>
-  <table>
-   <tr>
-    <td><font size="+2"><b>contrib:TableValues</b></font></td>
-   </tr>
-   <tr>
-    <td>
-     <A href="../api/org/apache/tapestry/contrib/table/components/TableValues.html">org.apache.tapestry.contrib.table.components.TableValues</a>
-    </td>
-   </tr>
-  </table>
- </td>
- <td>
-  <table align="right" valign="middle" bgcolor="#c0c0c0" cellpadding="8">
-   <tr>
-    <td>Visual Component</td>
-   </tr>
-  </table>
- </td>
-</tr>
-
-<tr valign="center">
- <td colspan="2">&nbsp;</td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Description</b>
-  <br> 
- A low level Table component that generates the columns in the current row in the table.
- This component must be wrapped by <A HREF="../api/org/apache/tapestry/contrib/table/components/TableRows.html"><CODE>TableRows</CODE></A>.
- 
- <p>
- The component iterates over the columns in the table and 
- automatically renders the column values for the current table row. 
- The columns are wrapped in 'td' tags by default. <br>
- The column values are rendered using the renderer returned by the 
- getValueRenderer() method in <A HREF="../api/org/apache/tapestry/contrib/table/model/ITableColumn.html"><CODE>ITableColumn</CODE></A>.
- 
- </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>See Also</b>
-  <br>
-  <A href="contrib.Table.html">Table</a>,
-  <A href="contrib.TableColumns.html">TableColumns</a>, 
-  <A href="contrib.TablePages.html">TablePages</a>,
-  <A href="contrib.TableRows.html">TableRows</a>,
-  <A href="contrib.TableView.html">TableView</a>
- </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Parameters</b>
-  <br>
-  <table border="1" cellpadding="4" cellspacing="4" class="parameters">
-   <tr> 
-    <th>Name</th>
-    <th>Type</th>
-    <th>Direction</th>
-    <th>Required</th> 
-    <th>Default</th>
-    <th>Description</th>
-   </tr>
-
- <tr>
-  <td>element</td>
-  <td>String</td>
-  <td>in</td>
-  <td>no</td>
-  <td>td</td>
-  <td align="left">The tag to use to wrap the column values in.</td> 
- </tr>
-
- <tr>
-  <td>column</td>
-  <td><A HREF="../api/org/apache/tapestry/contrib/table/model/ITableColumn.html"><CODE>ITableColumn</CODE></A></td>
-  <td>out</td>
-  <td>no</td>
-  <td>&nbsp;</td>
-  <td align="left">The object representing the current column.</td> 
- </tr>
-
-  </table>
-  <p>
-  Body: <strong>removed</strong><br>
-  Informal parameters: <strong>allowed</strong><br>
-  <!-- component-specification "reserved-parameter" -->
-  Reserved parameters: none
-  </p>    
- </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Examples</b>
-  <p>
-  This example is under construction.
-  </p>
-      
-
- </td></tr></table>
-</td></tr>
-<tr>
- <td colspan="3"><hr></td>  
-</tr>
-<tr>
-  <!-- Previous component in alphabetical order. -->
-  <td align="left"><a href="contrib.TableRows.html"><img alt="contrib:TableRows" src="common-images/prev.png"></a></td>  
-  <td align="middle"><a href="index.html"><img alt="Component Index" src="common-images/home.png" ></a></td>
-  <!-- Next component in alphabetical order. -->
-  <td align="right"><a href="contrib.TableView.html"><img alt="contrib:TableView" src="common-images/next.png"></a></td>  
-</tr>
-</table>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/3.0.4/doc/src/ComponentReference/contrib.TableView.html b/3.0.4/doc/src/ComponentReference/contrib.TableView.html
deleted file mode 100644
index 8acbad2..0000000
--- a/3.0.4/doc/src/ComponentReference/contrib.TableView.html
+++ /dev/null
@@ -1,455 +0,0 @@
-<!--
-Tbis HTML document provides a base template for Component Reference pages.
-
-* All ??? text should be replaced.
-
-* Examples should illustrate near real world use of the component, see other
-  existing component page examples for formatting and style guidelines.
-  
-* Use Tapestry 2.2 Beta 1+ "expression" binding syntax instead of 
-  "property-path" syntax.
-  
-* Include links to Tapestry Javadoc API where appropriate.
-
-* Include Tapestry Developers Guide multi-page version where appropriate.
--->
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<!-- $Id$ --> 
-<html>
-<head>
-<title>contrib:TableView</title>
-<link rel="stylesheet" type="text/css" href="Tapestry.css" title="style">
-</head>
-
-<body>
-<table border="0" cellpadding="0" cellspacing="0" width="100%">
- <tr>
-  <!-- Previous component in alphabetical order. -->
-  <td align="left"><a href="contrib.TableValues.html"><img alt="contrib:TableValues" src="common-images/prev.png"></a></td>  
-  <td align="middle"><a href="index.html"><img alt="Component Index" src="common-images/home.png" ></a></td>
-  <!-- Next component in alphabetical order. -->
-  <td align="right"><a href="contrib.When.html"><img alt="contrib:When" src="common-images/next.png"></a></td>  
- <tr>
- <tr>
-  <td colspan="3"><hr></td>  
- </tr>
- <tr>
-  <td colspan="3">
-   <table border="0" cellpadding="4" cellspacing="4" width="100%">
-
-<tr valign="top">
- <td>
-  <table>
-   <tr>
-    <td><font size="+2"><b>contrib:TableView</b></font></td>
-   </tr>
-   <tr>
-    <td>
-     <A href="../api/org/apache/tapestry/contrib/table/components/TableView.html">org.apache.tapestry.contrib.table.components.TableView</a>
-    </td>
-   </tr>
-  </table>
- </td>
- <td>
-  <table align="right" valign="middle" bgcolor="#c0c0c0" cellpadding="8">
-   <tr>
-    <td>Non Visual Component</td>
-   </tr>
-  </table>
- </td>
-</tr>
-
-<tr valign="center">
- <td colspan="2">&nbsp;</td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Description</b>
-  <br> 
- A low level Table component that wraps all other low level Table components.
- This component carries the <A HREF="../api/org/apache/tapestry/contrib/table/model/ITableModel.html"><CODE>ITableModel</CODE></A>
- that is used by the other Table components. 
- The information that will be displayed can be provided either via 
- the <code>source</code> and <code>columns</code> parameters,
- or via the <code>tableModel</code> parameters.
- <p></p>
- </td>
-</tr>
-
-<tr>
- <td colspan="2">
-   <b>Providing the data</b>
-
-<p>
-There are many ways to provide the component with the data it has to render, 
-but here are the three major ones:
-
-<ol>
-<li> The data is passed to the <code>source</code> parameter in the form of an array, 
-a collection, or an iterator, and the table columns are defined using the 
-<code>columns</code> parameter (see further for details). 
-Both of these parameters will be evaluated at every request by default, 
-so changes in the data or the table columns will be displayed immediately.
-<p>
-The example below uses this method.
-<p>
-This is the easiest and most straightforward approach. It has one performance limitation, 
-however - if the table is sorting the data according to a given column, 
-the sorting will be performed at every request. 
-The next methods provide ways to resolve this possible performance issue.
-<p></p>
-    
-<li> The data is passed to the <code>source</code> parameter via an object that
-implements the <A HREF="../api/org/apache/tapestry/contrib/table/model/IBasicTableModel.html"><CODE>IBasicTableModel</CODE></A>
-interface. Through that interface you are given the sorting column (if any) and 
-the numbers of the items that will be displayed on the current page. 
-You then need to provide the component with the corresponding data.
-<p>
-This method allows you to perform the sorting in the database and load only the data 
-that will be displayed on the current page 
-(e.g. by using the ORDER BY, LIMIT, and OFFSET clauses in SQL)
-and hence it could be far more efficient.
-<p></p>
-    
-<li> All of the information (data, columns, state) is packaged in an
-<A HREF="../api/org/apache/tapestry/contrib/table/model/ITableModel.html"><CODE>ITableModel</CODE></A>
-and is passed to the <code>tableModel</code> parameter.
-<p>
-This approach allows greatest flexibility, but is recommended only for advanced users of the Table components. 
-    
-</ol>
-
- <p></p>
- </td>
-</tr>
-
-
-<tr>
- <td colspan="2">
-   <b>Defining the columns</b>
-
-<p>
-If you define the table columns using the <code>columns</code> parameter, you can either
-provide a list of <A HREF="../api/org/apache/tapestry/contrib/table/model/ITableColumn.html"><code>ITableColumn</code></A>
-objects, each defining a column in the table, or you can define the columns using 
-a string that describes each column. 
-<p>
-Please see the example below as a demonstration of the use of the latter approach.
-<p>
-The string describing the columns must be formatted in the following way:
-<ul>
-    <li>The column definitions in the string are separated by commas
-        <p>
-    <li>Each column definition must be of one of the following types:<p>
-        <dl>
-            <dd>id</dd>
-            <dd>id:expression</dd>
-            <dd>id:description:expression</dd>
-        </dl>
-        <br>
-        Here the <b>id</b> defines the identification of the column, the <b>expression</b> is an
-        OGNL expression that extracts the column value from the row object, and <b>description</b>
-        is the title of the column if it is not defined otherwise.
-        <p>
-        Each column definition may be prefixed by the <b>!</b> character, 
-        which identifies the column as non-sortable.
-        <p>
-        If defined, a Block with a name that is starts with the column id and 
-        ends with <i>ColumnValue</i> will be used to render the column values.
-        Similarly, a Block with a name that starts with the column id and 
-        ends with <i>ColumnHeader</i> will be used to render the column headers.
-        <p>
-        Finally, the title of the column will be taken from translation strings of the component
-        by using the column id as a key.
-        <p>
-        Please see the <SPAN class=code>LocaleSelection</SPAN> component for examples.
-        <p>
-    <li>A column definition may also be of the type
-        <p>
-        <dl>
-            <dd>=expression</dd>
-        </dl>
-        <br>
-        in which case it identifies an OGNL expression that returns an 
-        <A HREF="../api/org/apache/tapestry/contrib/table/model/ITableColumn.html"><code>ITableColumn</code></A>
-        object defining the column.
-        <p>
-    <li>The full description string may be prefixed by the <b>*</b> character,
-        which means that the table is to be rendered within a form, and the 
-        column headers must submit the form if they are clickable (i.e. if the column is sortable).
-</ul>
-<p>
-Here is an example of the use of a description string to define columns:
-<pre>
-  columns="locale:toString(), =currencyColumn, verbosity:Verbosity:currentRowVerbosity, !delete"
-</pre>
-    
- <p></p>
- </td>
-</tr>
-
- 
-<tr>
- <td colspan="2"> 
-   <b>Saving the state in the session</b>
- <p>
- This component also handles the saving of the state of the model using an 
- <A HREF="../api/org/apache/tapestry/contrib/table/model/ITableSessionStateManager.html"><CODE>ITableSessionStateManager</CODE></A>
- to determine what part of the model is to be saved and an 
- <A HREF="../api/org/apache/tapestry/contrib/table/model/ITableSessionStoreManager.html"><CODE>ITableSessionStoreManager</CODE></A>
- to determine how to save it.
- <p>
- Upon the beginning of a new request cycle when the table model is first needed,
- the model is obtained using the following process:
- <ul>
- <li>The persistent state of the table is loaded.
- If the tableSessionStoreManager binding has not been bound, the state is loaded 
- from a persistent property within the component (it is null at the beginning). 
- Otherwise the supplied
- <A HREF="../api/org/apache/tapestry/contrib/table/model/ITableSessionStoreManager.html"><CODE>ITableSessionStoreManager</CODE></A> is used
- to load the persistent state.
- <li>The table model is recreated using the 
- <A HREF="../api/org/apache/tapestry/contrib/table/model/ITableSessionStateManager.html"><CODE>ITableSessionStateManager</CODE></A> that
- could be supplied using the tableSessionStateManager binding. 
- This parameter has a default value and is therefore not required. The default implementation
- stores only the Table state (sorting column and direction, as well as current page) if the
- data is provided using the source and columns parameters, and stores the whole table model
- if it is provided using the tableModel parameter.
- <li>If the <A HREF="../api/org/apache/tapestry/contrib/table/model/ITableSessionStateManager.html"><CODE>ITableSessionStateManager</CODE></A>
- returns null, then a table model is taken from the tableModel binding. Thus, if
- the <A HREF="../api/org/apache/tapestry/contrib/table/model/common/NullTableSessionStateManager.html"><CODE>NullTableSessionStateManager</CODE></A>
- is used, the table model would be taken from the tableModel binding every time.
- <li>If the tableModel parameter is not bound or returns null, the table model is generated
- from the contents of the source and columns parameters.
- </ul>
- At the end of the rewind phase the persistent state of the model is saved in
- the session. This process occurs in reverse:
- <ul>
- <li>The persistent state of the model is taken via the 
- <A HREF="../api/org/apache/tapestry/contrib/table/model/ITableSessionStateManager.html"><CODE>ITableSessionStateManager</CODE></A>.
- <li>If the tableSessionStoreManager binding has not been bound, the persistent
- state is saved as a persistent page property. Otherwise the supplied
- <A HREF="../api/org/apache/tapestry/contrib/table/model/ITableSessionStoreManager.html"><CODE>ITableSessionStoreManager</CODE></A> is used
- to save the persistent state. Use of the 
- <A HREF="../api/org/apache/tapestry/contrib/table/model/ITableSessionStoreManager.html"><CODE>ITableSessionStoreManager</CODE></A> 
- is usually necessary when tables with the same model have to be used across 
- multiple pages, and hence the state has to be saved in the Visit, rather than
- in a persistent component property.
- </ul>
- </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>See Also</b>
-  <br>
-  <A href="contrib.Table.html">Table</a>,
-  <A href="contrib.TableColumns.html">TableColumns</a>, 
-  <A href="contrib.TablePages.html">TablePages</a>,
-  <A href="contrib.TableRows.html">TableRows</a>,
-  <A href="contrib.TableValues.html">TableValues</a>
- </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Parameters</b>
-  <br>
-  <table border="1" cellpadding="4" cellspacing="4" class="parameters">
-   <tr> 
-    <th>Name</th>
-    <th>Type</th>
-    <th>Direction</th>
-    <th>Required</th> 
-    <th>Default</th>
-    <th>Description</th>
-   </tr>
-
- <tr>
-  <td>source</td>
-  <td><code><A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Object.html">Object</A>[]</code><br>
-      <code><A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/util/Collection.html">Collection</A></code><br>
-      <code><A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/util/Iterator.html">Iterator</A></code><br>
-      <A HREF="../api/org/apache/tapestry/contrib/table/model/IBasicTableModel.html"><CODE>IBasicTableModel</CODE></A>
-  </td>
-  <td>in</td>
-  <td rowspan="3">You must provide either both <code>source</code> and <code>columns</code> parameters 
-      or the <code>tableModel</code> parameter</td>
-  <td>&nbsp;</td>
-  <td align="left">
-    The data to be displayed by the component. This parameter must be used 
-    in combination with the <code>columns</code> parameter. 
-    The parameter must be an array of values, a collection, an iterator, 
-    or an object implementing the IBasicTableModel interface.
-  </td> 
- </tr>
-
- <tr>
-  <td>columns</td>
-  <td>
-      <code><A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/String.html">String</A></code><br>
-      <A HREF="../api/org/apache/tapestry/contrib/table/model/ITableColumnModel.html"><code>ITableColumnModel</code></A><br>
-      <A HREF="../api/org/apache/tapestry/contrib/table/model/ITableColumn.html"><code>ITableColumn[]</code></A><br>
-      <code><A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/util/List.html">List</A></code><br>
-      <code><A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/util/Iterator.html">Iterator</A></code>
-  </td>
-  <td>in</td>
-  <td>&nbsp;</td>
-  <td align="left">
-    The table columns to be displayed. 
-    The parameter must be an array, a list, or an Iterator of ITableColumn objects,
-    an ITableColumnModel, or a String describing the columns (see documentation).
-  </td> 
- </tr>
-
- <tr>
-  <td>tableModel</td>
-  <td><A HREF="../api/org/apache/tapestry/contrib/table/model/ITableModel.html"><CODE>ITableModel</CODE></A></td>
-  <td>in</td>
-  <td>&nbsp;</td>
-  <td align="left">The <A HREF="../api/org/apache/tapestry/contrib/table/model/ITableModel.html"><CODE>ITableModel</CODE></A> to be used to render the table. 
-      The model contains all of the information needed to render the table and gives greatest flexibility, 
-      but it may be harder to implement than simply using the <code>source</code> and <code>columns</code> parameters. 
-  </td> 
- </tr>
-
- <tr>
-  <td>tableSessionStateManager</td>
-  <td><A HREF="../api/org/apache/tapestry/contrib/table/model/ITableSessionStateManager.html"><CODE>ITableSessionStateManager</CODE></A></td>
-  <td>in</td>
-  <td>no</td>
-  <td>A custom session state manager that reloads the data at each request if it is provided
-      via the <code>source</code> and <code>columns</code> parameters or stores all 
-      of it in the session if it is provided via the <code>tableModel</code> parameter</td>
-  <td align="left">This is the session state manager that will control what part of the 
-      table model will be saved in the session state. 
-      It is then used to recreate the table model by
-      using what was saved in the session. 
-      <p> You can use one of the stock implementations of  
-      <A HREF="../api/org/apache/tapestry/contrib/table/model/ITableSessionStateManager.html"><CODE>ITableSessionStateManager</CODE></A>
-      to determine the session state behaviour, or you can define your own.
-  </td> 
- </tr>
-
- <tr>
-  <td>tableSessionStoreManager</td>
-  <td><A HREF="../api/org/apache/tapestry/contrib/table/model/ITableSessionStoreManager.html"><CODE>ITableSessionStoreManager</CODE></A></td>
-  <td>in</td>
-  <td>no</td>
-  <td>null</td>
-  <td align="left">Determines how the session state (returned by the session state manager)
-      will be saved in the session. If this parameter is null, then the state
-      will be saved as a persistent property. If it is not null, then the methods
-      of the interface will be used to save and load the state.
-  </td> 
- </tr>
-
- <tr>
-  <td>columnSettingsContainer</td>
-  <td><A HREF="../api/org/apache/tapestry/IComponent.html"><CODE>IComponent</CODE></A></td>
-  <td>in</td>
-  <td>no</td>
-  <td>container</td>
-  <td align="left">
-      This parameter is used only if the table columns are defined as a string in the <code>columns</code> parameter,
-      The provided component may define Blocks with particular names that will be used
-      as the header and value renderers of the corresponding columns (see documentation above),
-      and define the display names of the columns in its translation file(s).
-  </td> 
- </tr>
-
- <tr>
-  <td>pageSize</td>
-  <td>
-      <code>int</code>
-  </td>
-  <td>in</td>
-  <td>no</td>
-  <td>10</td>
-  <td align="left">
-      The number of records displayed per page. 
-      <p>
-      This parameter is only used with the <code>source</code> and <code>columns</code> parameters.
-  </td> 
- </tr>
-
- <tr>
-  <td>initialSortColumn</td>
-  <td>
-      <code><A HREF="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/String.html">String</A></code>
-  </td>
-  <td>in</td>
-  <td>no</td>
-  <td>null</td>
-  <td align="left">
-      The id of the column to initially sort the table by. 
-      A value of <code>null</code> indicates no sorting.
-      <p>
-      This parameter is only used with the <code>source</code> and <code>columns</code> parameters.
-  </td> 
- </tr>
-
- <tr>
-  <td>initialSortOrder</td>
-  <td>
-      <code>boolean</code>
-  </td>
-  <td>in</td>
-  <td>no</td>
-  <td>false</td>
-  <td align="left">
-      The order of the initial sorting.
-      Set this parameter to <code>false</code> to sort in an ascending order
-      and to <code>true</code> to sort in a descending one.
-      <p>
-      This parameter is only used with the <code>source</code> and <code>columns</code> parameters.
-  </td> 
- </tr>
-
- <tr>
-  <td>element</td>
-  <td>String</td>
-  <td>in</td>
-  <td>no</td>
-  <td>"table"</td>
-  <td align="left">The tag that will be used to wrap the inner components.
-      If no binding is given, the tag that will be generated is 'table'. If you 
-      would like to place the bounds of the table elsewhere, you can make the
-      element 'span' or another neutral tag and manually define the table.
-  </td> 
- </tr>
-  </table>
-  <p>
-  Body: <strong>removed</strong><br>
-  Informal parameters: <strong>allowed</strong><br>
-  <!-- component-specification "reserved-parameter" -->
-  Reserved parameters: none
-  </p>    
- </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Examples</b>
-  <p>
-  This example is under construction.
-  </p>
-      
-
- </td></tr></table>
-</td></tr>
-<tr>
- <td colspan="3"><hr></td>  
-</tr>
-<tr>
-  <!-- Previous component in alphabetical order. -->
-  <td align="left"><a href="contrib.TableValues.html"><img alt="contrib:TableValues" src="common-images/prev.png"></a></td>  
-  <td align="middle"><a href="index.html"><img alt="Component Index" src="common-images/home.png" ></a></td>
-  <!-- Next component in alphabetical order. -->
-  <td align="right"><a href="contrib.When.html"><img alt="contrib:When" src="common-images/next.png"></a></td>  
-</tr>
-</table>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/3.0.4/doc/src/ComponentReference/contrib.When.html b/3.0.4/doc/src/ComponentReference/contrib.When.html
deleted file mode 100644
index 7e17638..0000000
--- a/3.0.4/doc/src/ComponentReference/contrib.When.html
+++ /dev/null
@@ -1,127 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<!-- $Id$ --> 
-<html>
-<head>
-<title>contrib:When</title>
-<link rel="stylesheet" type="text/css" href="Tapestry.css" title="style">
-</head>
-
-<body>
-<table border="0" cellpadding="0" cellspacing="0" width="100%">
- <tr>
-  <td align="left"><a href="contrib.TableView.html"><img alt="TableView" src="common-images/prev.png"></a></td>  
-  <td align="right"><a href="index.html"><img alt="Component Index" src="common-images/home.png" ></a></td>
- </tr>
- <tr>
- <tr>
-  <td colspan="3"><hr></td>  
- </tr>
- <tr>
-  <td colspan="3">
-   <table border="0" cellpadding="4" cellspacing="4" width="100%">
-
-<tr valign="top">
- <td>
-  <table>
-   <tr>
-                <td><font size="+2"><b>contrib:When</b></font></td>
-   </tr>
-   <tr>
-    <td>
-      <A href="../api/org/apache/tapestry/contrib/components/When.html">org.apache.tapestry.contrib.components.When</a>
-    </td>
-   </tr>
-  </table>
- </td>
- <td>
-  <table align="right" valign="middle" bgcolor="#c0c0c0" cellpadding="8">
-   <tr>
-                <td> Non Visual Component</td>
-   </tr>
-  </table>
- </td>
-</tr>
-
-<tr valign="center">
- <td colspan="2">&nbsp;</td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Description</b>
-  <br>
-            Describes one of the alternatives to be chosen by the contrib:Choose 
-            component. The default alternative is described by the contrib:Otherwise 
-            component. 
-            <p>Must have contrib:Choose as an immediate parent and must appear 
-              before an contrib:Otherwise that has the same parent.</p>
-          </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>See Also</b>
-  <br>
-            <A href="Conditional.html">Conditional</a>, <A href="contrib.Choose.html">contrib:Choose</a>, 
-            <A href="contrib.Otherwise.html">contrib:Otherwise</a> </td>
-</tr>
-
-<tr>
- <td colspan="2">
-  <b>Parameters</b>
-  <br>
-  <table border="1" cellpadding="4" cellspacing="4" class="parameters">
-   <tr> 
-    <th>Name</th>
-    <th>Type</th>
-    <th>Direction</th>
-    <th>Required</th> 
-    <th>Default</th>
-    <th>Description</th>
-   </tr>
-   <tr>
-                <td>condition</td>
-    <td>String</td>
-    <td>in</td>
-                <td>no</td>
-                <td>false</td>
-                <td>The condition to test. If the expression evaluates to true, 
-                  then its content is rendered.</td>
-   </tr>
-   <tr>
-                <td>element</td>
-    <td>String</td>
-    <td>in</td>
-    <td>no</td>
-    <td>&nbsp;</td>
-                <td>If specified and condition is satisfied, then the component acts like 
-                  an <a href="Any.html">Any</a>, emitting an open and close tag. 
-                  Informal parameters are applied to the tag. If no element is 
-                  specified, informal parameters are ignored.</td>
-   </tr>
-  </table>
-            <p> Body: <strong>rendered</strong><br>
-              Informal parameters: <strong>allowed</strong><br>
-              Reserved parameters: <EM>invert</EM></p>    
- </td>
-</tr>
-
-<tr>
-          <td colspan="2"> <b>Examples</b> 
-            <p> Please see the documentation for the <a href="contrib.Choose.html">contrib:Choose</a> 
-              component.</p>
-      
-
- </td></tr></table>
-</td></tr>
-<tr>
- <td colspan="3"><hr></td>  
-</tr>
-<tr>
-  <td align="left"><a href="contrib.TableView.html"><img alt="TableView" src="common-images/prev.png"></a></td>  
-  <td align="right"><a href="index.html"><img alt="Component Index" src="common-images/home.png" ></a></td>
-</tr>
-</table>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/3.0.4/doc/src/ComponentReference/images/DatePickerIcon.png b/3.0.4/doc/src/ComponentReference/images/DatePickerIcon.png
deleted file mode 100644
index 0b9a96e..0000000
--- a/3.0.4/doc/src/ComponentReference/images/DatePickerIcon.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/src/ComponentReference/images/arrow-up.gif b/3.0.4/doc/src/ComponentReference/images/arrow-up.gif
deleted file mode 100644
index b70a479..0000000
--- a/3.0.4/doc/src/ComponentReference/images/arrow-up.gif
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/src/ComponentReference/images/delete.gif b/3.0.4/doc/src/ComponentReference/images/delete.gif
deleted file mode 100644
index 0733d8b..0000000
--- a/3.0.4/doc/src/ComponentReference/images/delete.gif
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/src/ComponentReference/images/elvis.jpg b/3.0.4/doc/src/ComponentReference/images/elvis.jpg
deleted file mode 100644
index 323bb43..0000000
--- a/3.0.4/doc/src/ComponentReference/images/elvis.jpg
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/src/ComponentReference/images/inspector-rollover.gif b/3.0.4/doc/src/ComponentReference/images/inspector-rollover.gif
deleted file mode 100644
index df0d3ef..0000000
--- a/3.0.4/doc/src/ComponentReference/images/inspector-rollover.gif
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/src/ComponentReference/images/intray-green.png b/3.0.4/doc/src/ComponentReference/images/intray-green.png
deleted file mode 100644
index 13b95b9..0000000
--- a/3.0.4/doc/src/ComponentReference/images/intray-green.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/src/ComponentReference/images/intray-red.png b/3.0.4/doc/src/ComponentReference/images/intray-red.png
deleted file mode 100644
index 1dc3479..0000000
--- a/3.0.4/doc/src/ComponentReference/images/intray-red.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/src/ComponentReference/images/intray.png b/3.0.4/doc/src/ComponentReference/images/intray.png
deleted file mode 100644
index 4746796..0000000
--- a/3.0.4/doc/src/ComponentReference/images/intray.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/src/ComponentReference/images/poweredby.png b/3.0.4/doc/src/ComponentReference/images/poweredby.png
deleted file mode 100644
index 4aa65d0..0000000
--- a/3.0.4/doc/src/ComponentReference/images/poweredby.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/src/ComponentReference/images/poweredbyTapestry.gif b/3.0.4/doc/src/ComponentReference/images/poweredbyTapestry.gif
deleted file mode 100644
index 78b627e..0000000
--- a/3.0.4/doc/src/ComponentReference/images/poweredbyTapestry.gif
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/src/ComponentReference/images/tableModel.gif b/3.0.4/doc/src/ComponentReference/images/tableModel.gif
deleted file mode 100644
index 309c098..0000000
--- a/3.0.4/doc/src/ComponentReference/images/tableModel.gif
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/src/ComponentReference/images/tapestry-logo.gif b/3.0.4/doc/src/ComponentReference/images/tapestry-logo.gif
deleted file mode 100644
index 82ad636..0000000
--- a/3.0.4/doc/src/ComponentReference/images/tapestry-logo.gif
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/src/ComponentReference/images/wml.image-example.gif b/3.0.4/doc/src/ComponentReference/images/wml.image-example.gif
deleted file mode 100644
index fc07093..0000000
--- a/3.0.4/doc/src/ComponentReference/images/wml.image-example.gif
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/src/ComponentReference/images/wml.image.png b/3.0.4/doc/src/ComponentReference/images/wml.image.png
deleted file mode 100644
index 7865de3..0000000
--- a/3.0.4/doc/src/ComponentReference/images/wml.image.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/src/ComponentReference/images/wml.input.png b/3.0.4/doc/src/ComponentReference/images/wml.input.png
deleted file mode 100644
index 622511d..0000000
--- a/3.0.4/doc/src/ComponentReference/images/wml.input.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/src/ComponentReference/images/wml.propertyselection.png b/3.0.4/doc/src/ComponentReference/images/wml.propertyselection.png
deleted file mode 100644
index c330212..0000000
--- a/3.0.4/doc/src/ComponentReference/images/wml.propertyselection.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/src/ComponentReference/images/wml.select-example.png b/3.0.4/doc/src/ComponentReference/images/wml.select-example.png
deleted file mode 100644
index 63b5d3d..0000000
--- a/3.0.4/doc/src/ComponentReference/images/wml.select-example.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/src/ComponentReference/images/wml.select.png b/3.0.4/doc/src/ComponentReference/images/wml.select.png
deleted file mode 100644
index 3fe4280..0000000
--- a/3.0.4/doc/src/ComponentReference/images/wml.select.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/src/ComponentReference/index.html b/3.0.4/doc/src/ComponentReference/index.html
deleted file mode 100644
index a497002..0000000
--- a/3.0.4/doc/src/ComponentReference/index.html
+++ /dev/null
@@ -1,245 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<!-- $Id$ --> 
-<html>
-<head>
-<title>Tapestry Component Reference</title>
-<link rel="stylesheet" type="text/css" href="Tapestry.css" title="style">
-</head>
-<body style="FONT-FAMILY: Verdana">
-<h1>Tapestry Component Reference</h1>
-
-<hr>
-
-<table border="0" cellpadding="0" cellspacing="0">
-<tr>
- <td colspan="9"><h3>Framework Library</h3></td>
-</tr>
-<tr>
- <td width="18%"><a href="ActionLink.html">ActionLink</a></td>
- <td width="2%">&nbsp;</td>
- <td width="18%"><a href="DirectLink.html">DirectLink</a></td>
- <td width="2%">&nbsp;</td>
- <td width="18%"><a href="Image.html">Image</a></td>
- <td width="2%">&nbsp;</td>
-    <td width="18%"><a href="Radio.html">Radio</a></td>
- <td width="2%">&nbsp;</td>
-    <td width="18%"><a href="Submit.html">Submit</a></td>
-</tr>
-<tr>
- <td width="18%"><a href="Any.html">Any</a></td>
- <td width="2%">&nbsp;</td>
- <td width="18%"><a href="ExceptionDisplay.html">ExceptionDisplay</a></td>
- <td width="2%">&nbsp;</td>
- <td width="18%"><a href="ImageSubmit.html">ImageSubmit</a></td>
- <td width="2%">&nbsp;</td>
-    <td width="18%"><a href="RadioGroup.html">RadioGroup</a></td>
- <td width="2%">&nbsp;</td>
-    <td width="18%"><a href="TextArea.html">TextArea</a></td>
-</tr>
-<tr>
- <td width="18%"><a href="Block.html">Block</a></td>
- <td width="2%">&nbsp;</td>
- <td width="18%"><a href="ExternalLink.html">ExternalLink</a></td>
- <td width="2%">&nbsp;</td>
- <td width="18%"><a href="Insert.html">Insert</a></td>
- <td width="2%">&nbsp;</td>
-    <td width="18%"><a href="RenderBlock.html">RenderBlock</a></td>
- <td width="2%">&nbsp;</td>
-    <td width="18%"><a href="TextField.html">TextField</a></td>
-</tr>
-<tr>
- <td width="18%"><a href="Body.html">Body</a></td>
- <td width="2%">&nbsp;</td>
- <td width="18%"><a href="FieldLabel.html">FieldLabel</a></td>
- <td width="2%">&nbsp;</td>
- <td width="18%"><a href="InsertText.html">InsertText</a></td>
- <td width="2%">&nbsp;</td>
-    <td width="18%"><a href="RenderBody.html">RenderBody</a></td>
- <td width="2%">&nbsp;</td>
-    <td width="18%"><a href="Upload.html">Upload</a></td>
-</tr>
-<tr>
-    <td width="18%" height="13"><a href="Button.html">Button</a></td>
-    <td width="2%" height="13">&nbsp;</td>
-    <td width="18%" height="13"><a href="Foreach.html">Foreach</a></td>
-    <td width="2%" height="13">&nbsp;</td>
-    <td width="18%" height="13"><a href="LinkSubmit.html">LinkSubmit</a></td>
-    <td width="2%" height="13">&nbsp;</td>
-    <td width="18%" height="13"><a href="Rollover.html">Rollover</a></td>
-    <td width="2%" height="13">&nbsp;</td>
-    <td width="18%" height="13"><a href="ValidField.html">ValidField</a></td>
-</tr>
-<tr>
- <td width="18%"><a href="Checkbox.html">Checkbox</a></td>
- <td width="2%">&nbsp;</td>
- <td width="18%"><a href="Form.html">Form</a></td>
- <td width="2%">&nbsp;</td>
- <td width="18%"><a href="ListEdit.html">ListEdit</a></td>
- <td width="2%">&nbsp;</td>
-    <td width="18%"><a href="Script.html">Script</a></td>
-</tr>
-<tr>
- <td width="18%"><a href="Conditional.html">Conditional</a></td>
- <td width="2%">&nbsp;</td>
- <td width="18%"><a href="Frame.html">Frame</a></td>
- <td width="2%">&nbsp;</td>
- <td width="18%"><a href="Option.html">Option</a></td>
- <td width="2%">&nbsp;</td>
-    <td width="18%"><a href="Select.html">Select</a></td>
-</tr>
-<tr>
- <td width="18%"><a href="DatePicker.html">DatePicker</a></td>
- <td width="2%">&nbsp;</td>
- <td width="18%"><a href="GenericLink.html">GenericLink</a></td>
- <td width="2%">&nbsp;</td>
- <td width="18%"><a href="PageLink.html">PageLink</a></td>
- <td width="2%">&nbsp;</td>
-    <td width="18%"><a href="ServiceLink.html">ServiceLink</a></td>
-</tr>
-<tr>
- <td width="18%"><a href="Delegator.html">Delegator</a></td>
- <td width="2%">&nbsp;</td>
- <td width="18%"><a href="Hidden.html">Hidden</a></td>
- <td width="2%">&nbsp;</td>
- <td width="18%"><a href="PropertySelection.html">PropertySelection</a></td>
- <td width="2%">&nbsp;</td>
-    <td width="18%"><a href="Shell.html">Shell</a></td>
-</tr>
-</table>
-
-<br>
-<hr>
-
-<table border="0" cellpadding="0" cellspacing="0">
-<tr>
- <td colspan="9"><h3>Contrib Library</h3></td>
-</tr>
-<tr>
-    <td width="18%"><a href="contrib.Choose.html">Choose</a></td>
- <td width="2%">&nbsp;</td>
-    <td width="18%"><a href="contrib.InspectorButton.html">InspectorButton</a></td>
- <td width="2%">&nbsp;</td>
- <td width="18%"><a href="../api/org/apache/tapestry/contrib/palette/Palette.html">Palette</a></td>
- <td width="2%">&nbsp;</td>
- <td width="18%"><a href="contrib.TableFormPages.html">TableFromPages</a></td>
- <td width="2%">&nbsp;</td>
- <td width="18%"><a href="contrib.TableValues.html">TableValues</a></td>
-</tr>
-<tr>
- <td width="18%"><a href="../api/org/apache/tapestry/contrib/valid/DateField.html">DateField</a></td>
- <td width="2%">&nbsp;</td>
-    <td width="18%"><a href="../api/org/apache/tapestry/contrib/form/MultiplePropertySelection.html">MultiplePropertySelection</a></td>
- <td width="2%">&nbsp;</td>
- <td width="18%"><a href="contrib.PopupLink.html">PopupLink</a></td>
- <td width="2%">&nbsp;</td>
- <td width="18%"><a href="contrib.TableFormRows.html">TableFormRows</a></td>
- <td width="2%">&nbsp;</td>
- <td width="18%"><a href="contrib.TableView.html">TableView</a></td>
-</tr>
-<tr>
- <td width="18%"><a href="contrib.FormConditional.html">FormConditional</a></td>
- <td width="2%">&nbsp;</td>
- <td width="18%"><a href="../api/org/apache/tapestry/contrib/valid/NumericField.html">NumericField</a></td>
- <td width="2%">&nbsp;</td>
- <td width="18%"><a href="contrib.Table.html">Table</a></td>
- <td width="2%">&nbsp;</td>
- <td width="18%"><a href="contrib.TablePages.html">TablePages</a></td>
- <td width="2%">&nbsp;</td>
- <td width="18%"><a href="../api/org/apache/tapestry/contrib/valid/ValidatingTextField.html">ValidatingTextField</a></td>
-</tr>
-<tr>
- <td width="18%"><a href="contrib.FormTable.html">FormTable</a></td>
- <td width="2%">&nbsp;</td>
- <td width="18%"><a href="contrib.Otherwise.html">Otherwise</a></td>
- <td width="2%">&nbsp;</td>
- <td width="18%"><a href="contrib.TableColumns.html">TableColumns</a></td>
- <td width="2%">&nbsp;</td>
- <td width="18%"><a href="contrib.TableRows.html">TableRows</a></td>
- <td width="2%">&nbsp;</td>
- <td width="18%"><a href="contrib.When.html">When</a></td>
-</tr>
-</table>
-
-<br>
-<hr>
-
-<table border="0" cellpadding="0" cellspacing="0">
-<tr>
- <td colspan="7">
-      <h3>WML Library</h3>
-    </td>
-</tr>
-<tr>
-    <td width="18%"><a href="wml.Card.html">Card</a></td>
- <td width="2%">&nbsp;</td>
-    <td width="18%"><a href="wml.Image.html">Image</a></td>
- <td width="2%">&nbsp;</td>
-    <td width="18%"><a href="wml.Option.html">Option</a></td>
- <td width="2%">&nbsp;</td>
-    <td width="18%"><a href="wml.Select.html">Select</a></td>
- <td width="2%">&nbsp;</td>
-    <td width="18%"><a href="wml.Timer.html">Timer</a></td>
-</tr>
-<tr>
-    <td width="18%"><a href="wml.Do.html">Do</a></td>
- <td width="2%">&nbsp;</td>
-    <td width="18%"><a href="wml.Input.html">Input</a></td>
- <td width="2%">&nbsp;</td>
-    <td width="18%"><a href="wml.Postfield.html">Postfield</a></td>
- <td width="2%">&nbsp;</td>
-    <td width="18%"><a href="wml.SelectionField.html">SelectionField</a></td>
- <td width="2%">&nbsp;</td>
-    <td width="18%">&nbsp;</td>
-</tr>
-<tr>
-    <td width="18%"><a href="wml.Go.html">Go</a></td>
- <td width="2%">&nbsp;</td>
-    <td width="18%"><a href="wml.OnEvent.html">OnEvent</a></td>
- <td width="2%">&nbsp;</td>
-    <td width="18%"><a href="wml.PropertySelection.html">PropertySelection</a></td>
- <td width="2%">&nbsp;</td>
-    <td width="18%"><a href="wml.Setvar.html">Setvar</a></td>
- <td width="2%">&nbsp;</td>
-</tr>
-</table>
-
-<br>
-<hr>
-Components either <b>allow</b> or <b>forbid</b> informal parameters.  If allowed, informal parameters
-are added as HTML attributes, along with any attributes directly generated by the component.  Informal
-parameters whose names conflict with either formal parameters or <b>reserved parameters</b> are quietly
-dropped (and the comparison is caseless).
-
-<p>
-Informal parameters allow exact control over the HTML generated by a component.  They may be provided
-in the page or component specification, or in the HTML template itself.
-
-<p>
-
-Components either <b>render</b> a body or <b>remove</b> it.  If a component renders its body, the body
-(the HTML elements and components its HTML tag wraps around) will be rendered, along with any HTML generated
-by the component itself.  If a component removes its body, then the HTML it wraps around will be ignored
-(and an error is generated if the component wraps around another component).
-
-<p>
-Most components remove their body; placing HTML within the component's tags is a convienience
-for WYSIWYG editting of the HTML template.
-
-<hr>
-<br>
-<b>See Also</b>
-<ul>
- <li>
-  <A href="../DevelopersGuide/DevelopersGuide.html">Tapestry Developer's Guide</A> -- The main reference for designing and developing Tapestry 
-  applications 
- 
- <li>
-  <A href="../Tutorial/Tutorial.html">Tapestry Tutorial</A> -- A good introduction to what Tapestry is and how to use it. 
- 
- <li>
-  <A href="../api/index.html">Tapestry API</A> 
-  -- Javadoc API
- </li>
-</ul>
-</body>
-</html>
diff --git a/3.0.4/doc/src/ComponentReference/wml.Card.html b/3.0.4/doc/src/ComponentReference/wml.Card.html
deleted file mode 100644
index 457897a..0000000
--- a/3.0.4/doc/src/ComponentReference/wml.Card.html
+++ /dev/null
@@ -1,104 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-<head>
-<title>wml:Card</title>
-<link rel="stylesheet" type="text/css" href="Tapestry.css" title="style">
-</head>
-<body>
-<table border="0" cellpadding="0" cellspacing="0" width="100%">
-  <tr> 
-    <td align="left"><a href="index.html"><img alt="Component Index" src="common-images/home.png" ></a></td>
-    <td align="right"><a href="wml.Do.html"><img alt="Do" src="common-images/next.png"></a></td>
-  </tr>
-  <tr/> 
-  <tr> 
-    <td colspan="2">
-      <hr>
-    </td>
-  </tr>
-  <tr> 
-    <td colspan="3"> 
-      <table border="0" cellpadding="4" cellspacing="4" width="100%">
-        <tr valign="top"> 
-          <td> 
-            <table>
-              <tr> 
-                <td><font size="+2"><b>wml:Card</b></font></td>
-              </tr>
-              <tr> 
-                <td> <A href="../api/org/apache/tapestry/wml/Card.html">org.apache.tapestry.wml.Card</a> 
-                </td>
-              </tr>
-            </table>
-          </td>
-          <td> 
-            <table align="right" valign="middle" bgcolor="#c0c0c0" cellpadding="8">
-              <tr> 
-                <td>Non Visual Component</td>
-              </tr>
-            </table>
-          </td>
-        </tr>
-        <tr valign="center"> 
-          <td colspan="2">&nbsp;</td>
-        </tr>
-        <tr> 
-          <td colspan="2"> <b>Description</b> <br>
-            A WML deck contains one or more cards. The wml:Card component defines 
-            a card. A card can contain text, markup, links, input-fields, tasks, 
-            images and more. 
-            <p></p>
-          </td>
-        </tr>
-        <tr> 
-          <td colspan="2"> <b>See Also</b> <br></td>
-        </tr>
-        <tr> 
-          <td colspan="2"> <b>Parameters</b> <br>
-            <table border="1" cellpadding="4" cellspacing="4" class="parameters">
-              <tr> 
-                <th>Name</th>
-                <th>Type</th>
-                <th>Direction</th>
-                <th>Required</th>
-                <th>Default</th>
-                <th>Description</th>
-              </tr>
-              <tr> 
-                <td>title</td>
-                <td>String</td>
-                <td>in</td>
-                <td>yes</td>
-                <td>&nbsp;</td>
-                <td> The title attribute specifies advisory information about 
-                  the element. The title may be rendered in a variety of ways 
-                  by the user agent (eg, suggested bookmark name, pop-up tooltip, 
-                  etc.). </td>
-              </tr>
-            </table>
-            <p> Body: <strong>removed</strong><br>
-              Informal parameters: <strong>allowed</strong><br>
-              Reserved parameters: none </p>
-          </td>
-        </tr>
-        <tr> 
-          <td colspan="2"> <b>Examples</b> 
-            <p> Please see the documentation for the <a href="wml.Go.html">wml:Go</a> 
-              component.</p>
-          </td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-  <tr> 
-    <td colspan="2">
-      <hr>
-    </td>
-  </tr>
-  <tr> 
-    <td align="left"><a href="index.html"><img alt="Component Index" src="common-images/home.png" ></a></td>
-    <td align="right"><a href="wml.Do.html"><img alt="Do" src="common-images/next.png"></a></td>
-  </tr>
-</table>
-</body>
-</html>
\ No newline at end of file
diff --git a/3.0.4/doc/src/ComponentReference/wml.Do.html b/3.0.4/doc/src/ComponentReference/wml.Do.html
deleted file mode 100644
index f92b3d8..0000000
--- a/3.0.4/doc/src/ComponentReference/wml.Do.html
+++ /dev/null
@@ -1,115 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-<head>
-<title>wml:Do</title>
-<link rel="stylesheet" type="text/css" href="Tapestry.css" title="style">
-</head>
-<body>
-<table border="0" cellpadding="0" cellspacing="0" width="100%">
-  <tr> 
-    <td align="left"><a href="wml.Card.html"><img alt="Card" src="common-images/prev.png"></a></td>
-    <td align="middle"><a href="index.html"><img alt="Component Index" src="common-images/home.png" ></a></td>
-    <td align="right"><a href="wml.Go.html"><img alt="Go" src="common-images/next.png"></a></td>
-  </tr>
-  <tr/> 
-  <tr> 
-    <td colspan="3"> 
-      <hr>
-    </td>
-  </tr>
-  <tr> 
-    <td colspan="3"> 
-      <table border="0" cellpadding="4" cellspacing="4" width="100%">
-        <tr valign="top"> 
-          <td> 
-            <table>
-              <tr> 
-                <td><font size="+2"><b>wml:Do</b></font></td>
-              </tr>
-              <tr> 
-                <td> <A href="../api/org/apache/tapestry/wml/Do.html">org.apache.tapestry.wml.Do</a> 
-                </td>
-              </tr>
-            </table>
-          </td>
-          <td> 
-            <table align="right" valign="middle" bgcolor="#c0c0c0" cellpadding="8">
-              <tr> 
-                <td>Non Visual Component</td>
-              </tr>
-            </table>
-          </td>
-        </tr>
-        <tr valign="center"> 
-          <td colspan="2">&nbsp;</td>
-        </tr>
-        <tr> 
-          <td colspan="2"> <b>Description</b> <br>
-            The wml:Do component activates a task when the user clicks on a word/phrase 
-            on the screen.</td>
-        </tr>
-        <tr> 
-          <td colspan="2"> <b>See Also</b> <br>
-          </td>
-        </tr>
-        <tr> 
-          <td colspan="2"> <b>Parameters</b> <br>
-            <table border="1" cellpadding="4" cellspacing="4" class="parameters">
-              <tr> 
-                <th>Name</th>
-                <th>Type</th>
-                <th>Direction</th>
-                <th>Required</th>
-                <th>Default</th>
-                <th>Description</th>
-              </tr>
-              <tr> 
-                <td>type</td>
-                <td>String</td>
-                <td>in</td>
-                <td>yes</td>
-                <td>&nbsp;</td>
-                <td> The do element type. This attribute provides a hint to the 
-                  user agent about the author's intended use of the element and 
-                  how the element should be mapped to a physical user interface 
-                  construct. Predefined DO types are accept, prev, help, reset, 
-                  options, delete and unkown. </td>
-              </tr>
-              <tr> 
-                <td>label</td>
-                <td>String</td>
-                <td>in</td>
-                <td>no</td>
-                <td>&nbsp;</td>
-                <td> If the user agent is able to dynamically label the user interface 
-                  widget, this attribute specifies a textual string suitable for 
-                  such labelling. </td>
-              </tr>
-            </table>
-            <p> Body: <strong>removed</strong><br>
-              Informal parameters: <strong>allowed</strong><br>
-              Reserved parameters: none </p>
-          </td>
-        </tr>
-        <tr> 
-          <td colspan="2"> <b>Examples</b> 
-            <p> Please see the documentation for the <a href="wml.Go.html">wml:Go</a> 
-              component.</p>
-          </td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-  <tr> 
-    <td colspan="3"> 
-      <hr>
-    </td>
-  </tr>
-  <tr> 
-    <td align="left"><a href="wml.Card.html"><img alt="Card" src="common-images/prev.png"></a></td>
-    <td align="middle"><a href="index.html"><img alt="Component Index" src="common-images/home.png" ></a></td>
-    <td align="right"><a href="wml.Go.html"><img alt="Go" src="common-images/next.png"></a></td>
-  </tr>
-</table>
-</body>
-</html>
\ No newline at end of file
diff --git a/3.0.4/doc/src/ComponentReference/wml.Go.html b/3.0.4/doc/src/ComponentReference/wml.Go.html
deleted file mode 100644
index 3207e91..0000000
--- a/3.0.4/doc/src/ComponentReference/wml.Go.html
+++ /dev/null
@@ -1,161 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-<head>
-<title>wml:Go</title>
-<link rel="stylesheet" type="text/css" href="Tapestry.css" title="style">
-</head>
-<body>
-<table border="0" cellpadding="0" cellspacing="0" width="100%">
-  <tr> 
-    <td align="left"><a href="wml.Do.html"><img alt="Do" src="common-images/prev.png"></a></td>
-    <td align="middle"><a href="index.html"><img alt="Component Index" src="common-images/home.png" ></a></td>
-    <td align="right"><a href="wml.Image.html"><img alt="Image" src="common-images/next.png"></a></td>
-  <tr> 
-  <tr> 
-    <td colspan="3"> 
-      <hr>
-    </td>
-  </tr>
-  <tr> 
-    <td colspan="3"> 
-      <table border="0" cellpadding="4" cellspacing="4" width="100%">
-        <tr valign="top"> 
-          <td> 
-            <table>
-              <tr> 
-                <td><font size="+2"><b>wml:Go</b></font></td>
-              </tr>
-              <tr> 
-                <td> <A href="../api/org/apache/tapestry/wml/Go.html">org.apache.tapestry.wml.Go</a> 
-                </td>
-              </tr>
-            </table>
-          </td>
-          <td> 
-            <table align="right" valign="middle" bgcolor="#c0c0c0" cellpadding="8">
-              <tr> 
-                <td>Non Visual Component</td>
-              </tr>
-            </table>
-          </td>
-        </tr>
-        <tr valign="center"> 
-          <td colspan="2">&nbsp;</td>
-        </tr>
-        <tr> 
-          <td colspan="2"> <b>Description</b> <br>
-            The <go> wml:Go component represents the action of switching to a 
-            new card.</td>
-        </tr>
-        <tr> 
-          <td colspan="2"> <b>See Also</b> <br>
-            <A href="wml.Input.html">wml:Input</a>, <A href="wml.PropertySelection.html">wml:PropertySelection</a>, 
-            <A href="wml.Select.html">wml:Select</a> </td>
-        </tr>
-        <tr> 
-          <td colspan="2"> <b>Parameters</b> <br>
-            <table border="1" cellpadding="4" cellspacing="4" class="parameters">
-              <tr> 
-                <th>Name</th>
-                <th>Type</th>
-                <th>Direction</th>
-                <th>Required</th>
-                <th>Default</th>
-                <th>Description</th>
-              </tr>
-              <tr> 
-                <td>method</td>
-                <td>String</td>
-                <td>in</td>
-                <td>yes</td>
-                <td>&nbsp;</td>
-                <td>The method used by the form when it is submitted, defaults 
-                  to POST.</td>
-              </tr>
-              <tr> 
-                <td>listener</td>
-                <td> <A href="../api/org/apache/tapestry/IActionListener.html"><tt>IActionListener</tt></a> 
-                </td>
-                <td>in</td>
-                <td>no</td>
-                <td>&nbsp;</td>
-                <td> Object invoked when the form is submitted, after all form 
-                  components have responded to the submission. </td>
-              </tr>
-              <tr> 
-                <td>stateful</td>
-                <td>boolean</td>
-                <td>custom</td>
-                <td>no</td>
-                <td>&nbsp;</td>
-                <td>If true (the default), then an active HttpSession is required.</td>
-              </tr>
-              <tr> 
-                <td>direct</td>
-                <td>boolean</td>
-                <td>in</td>
-                <td>no</td>
-                <td>&nbsp;</td>
-                <td> If true (the default), then the more efficient direct service 
-                  is used. If false, then the action service is used. </td>
-              </tr>
-            </table>
-            <p> Body: <strong>removed</strong><br>
-              Informal parameters: <strong>allowed</strong><br>
-              Reserved parameters: href </p>
-          </td>
-        </tr>
-        <tr> 
-          <td colspan="2"> <p><b>Example</b></p>
-		  
-            <p>This example is the first part of the Hello world example.<br>
-            </p>
-              Template 
-            <p> <code>&lt;?xml version=&quot;1.0&quot; encoding=&quot;iso-8859-1&quot; 
-              ?&gt;<br>
-              &lt;!DOCTYPE wml PUBLIC &quot;-//WAPFORUM//DTD WML 1.1//EN&quot; 
-              <br>
-              &quot;http://www.wapforum.org/DTD/wml_1.1.xml&quot;&gt;<br>
-              </code></p>
-            <p><code>&lt;wml&gt;</code></p>
-            <p><code>&lt;card jwcid=&quot;<a href="wml.Card.html">wml:Card</a>&quot; 
-              id=&quot;Hello&quot; title=&quot;ognl:@org.apache.tapestry.wap.hello.Home@TITLE&quot;&gt;<br>
-              &nbsp;&lt;p&gt;<br>
-              &nbsp;&nbsp;What is your name?<br>
-              &nbsp;&nbsp;&lt;input jwcid=&quot;userInput@<a href="wml.Input.html">wml:Input</a>&quot; 
-              name=&quot;username&quot; value=&quot;ognl:username&quot;/&gt;<br>
-              &nbsp;&lt;/p&gt;<br>
-              &nbsp;&lt;do type=&quot;accept&quot; label=&quot;Accept&quot;&gt;<br>
-              &nbsp;&nbsp;&lt;go jwcid=&quot;go@<a href="wml.Go.html">wml:Go</a>&quot; 
-              stateful=&quot;ognl:false&quot; listener=&quot;ognl:listeners.submit&quot;&gt;<br>
-              &nbsp;&nbsp;&nbsp;&lt;postfield jwcid=&quot;username@<a href="wml.Postfield.html">wml:Postfield</a>&quot; 
-              name=&quot;ognl:components.userInput.name&quot; value=&quot;ognl:username&quot;/&gt;<br>
-              &nbsp;&nbsp;&lt;/go&gt;<br>
-              &nbsp;&lt;/do&gt;<br>
-              &lt;/card&gt;<br>
-              <br>
-              &lt;/wml&gt; </code></p>
-            Specification<br><br>
-            <code>&lt;page-specification class=&quot;org.apache.tapestry.wap.hello.Home&quot;&gt;<br>
-            &nbsp;&lt;property-specification name=&quot;username&quot; type=&quot;java.lang.String&quot; 
-            persistent=&quot;yes&quot;/&gt;<br>
-              &lt;/page-specification&gt;</code><br>
-            
-          </td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-  <tr> 
-    <td colspan="3"> 
-      <hr>
-    </td>
-  </tr>
-  <tr> 
-    <td align="left"><a href="wml.Do.html"><img alt="Do" src="common-images/prev.png"></a></td>
-    <td align="middle"><a href="index.html"><img alt="Component Index" src="common-images/home.png" ></a></td>
-    <td align="right"><a href="wml.Image.html"><img alt="Image" src="common-images/next.png"></a></td>
-  </tr>
-</table>
-</body>
-</html>
\ No newline at end of file
diff --git a/3.0.4/doc/src/ComponentReference/wml.Image.html b/3.0.4/doc/src/ComponentReference/wml.Image.html
deleted file mode 100644
index 537351a..0000000
--- a/3.0.4/doc/src/ComponentReference/wml.Image.html
+++ /dev/null
@@ -1,151 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-<head>
-<title>wml:Image</title>
-<link rel="stylesheet" type="text/css" href="Tapestry.css" title="style">
-</head>
-<body>
-<table border="0" cellpadding="0" cellspacing="0" width="100%">
-  <tr> 
-    <td align="left"><a href="wml.Go.html"><img alt="Go" src="common-images/prev.png"></a></td>
-    <td align="middle"><a href="index.html"><img alt="Component Index" src="common-images/home.png" ></a></td>
-    <td align="right"><a href="wml.Input.html"><img alt="Input" src="common-images/next.png"></a></td>
-  <tr> 
-  <tr> 
-    <td colspan="3"> 
-      <hr>
-    </td>
-  </tr>
-  <tr> 
-    <td colspan="3"> 
-      <table border="0" cellpadding="4" cellspacing="4" width="100%">
-        <tr valign="top"> 
-          <td> 
-            <table>
-              <tr> 
-                <td><font size="+2"><b>wml:Image</b></font></td>
-              </tr>
-              <tr> 
-                <td> <A href="../api/org/apache/tapestry/wml/Image.html">org.apache.tapestry.wml.Image</a> 
-                </td>
-              </tr>
-            </table>
-          </td>
-          <td> 
-            <table align="right" valign="middle" cellpadding="8">
-              <tr> 
-                <td><IMG alt="Image Component" src="images/wml.image.png" ></td>
-              </tr>
-            </table>
-          </td>
-        </tr>
-        <tr valign="center"> 
-          <td colspan="2">&nbsp;</td>
-        </tr>
-        <tr> 
-          <td colspan="2"> <b>Description</b> <br>
-            Displays a WML image, deriving the source URL for the image from an 
-            asset. Note that not all devices can display images. </td>
-        </tr>
-        <tr> 
-          <td colspan="2"> <b>See Also</b> <br>
-          </td>
-        </tr>
-        <tr> 
-          <td colspan="2"> <b>Parameters</b> <br>
-            <table border="1" cellpadding="4" cellspacing="4" class="parameters">
-              <tr> 
-                <th>Name</th>
-                <th>Type</th>
-                <th>Direction</th>
-                <th>Required</th>
-                <th>Default</th>
-                <th>Description</th>
-              </tr>
-              <tr> 
-                <td>image</td>
-                <td> <A href="../api/org/apache/tapestry/IAsset.html"><tt>IAsset</tt></a> 
-                </td>
-                <td>in</td>
-                <td>yes</td>
-                <td>&nbsp;</td>
-                <td>The asset to display.</td>
-              </tr>
-              <tr> 
-                <td>alt</td>
-                <td>String</td>
-                <td>in</td>
-                <td>no</td>
-                <td>&nbsp;</td>
-                <td> This attribute specifies an alternative textual representation 
-                  for the image. This representation is used when the image can 
-                  not be displayed using any other method </td>
-              </tr>
-            </table>
-            <p> Body: <strong>removed</strong><br>
-              Informal parameters: <strong>allowed</strong><br>
-              Reserved parameters: src </p>
-          </td>
-        </tr>
-        <tr> 
-          <td colspan="2"> 
-            <p><b>Example</b></p>
-            <p>This example uses a &lt;context-asset&gt; to reference the image. 
-              It implements a splash screen.</p>
-            <table valign="middle">
-              <tr> 
-                <td> <IMG alt="WML Image Example" src="images/wml.image-example.gif" > 
-                </td>
-              </tr>
-            </table>
-            <br>
-            Template 
-            <p> <code>&lt;?xml version=&quot;1.0&quot;?&gt;<br>
-              &lt;!DOCTYPE wml PUBLIC &quot;-//WAPFORUM//DTD WML 1.2//EN&quot;<br>
-              &quot;http://www.wapforum.org/DTD/wml12.dtd&quot;&gt;</code></p>
-            <p><code>&lt;wml&gt;</code></p>
-            <p><code>&lt;card id=&quot;card0&quot; title=&quot;Animal QUIZ&quot; 
-              ontimer=&quot;#card1&quot; newcontext=&quot;true&quot;&gt;<br>
-              &nbsp;&lt;timer name=&quot;t&quot; value=&quot;20&quot;/&gt;<br>
-              &nbsp;&lt;p align=&quot;center&quot;&gt;<br>
-              &nbsp;&nbsp;&lt;br/&gt;<br>
-              &nbsp;&nbsp;&lt;img jwcid=&quot;@<a href="wml.Image.html">wml:Image</a>&quot; 
-              image=&quot;ognl:assets.logo&quot; alt=&quot;WMLZoo&quot;/&gt;<br>
-              &nbsp;&nbsp;&lt;br/&gt;<br>
-              &nbsp;&nbsp;&lt;strong&gt;Animal QUIZ&lt;/strong&gt;<br>
-              &nbsp;&nbsp;&lt;br/&gt;<br>
-              &nbsp;&lt;/p&gt;<br>
-              &lt;/card&gt;<br>
-              </code></p>
-            <p> <code>&lt;card id=&quot;card1&quot; title=&quot;Animal QUIZ&quot; 
-              newcontext=&quot;true&quot;&gt;<br>
-              &lt;p&gt;Welcome!<br>
-              &lt;br/&gt;<br>
-              &lt;/p&gt;</code></p>
-            <p><code>&lt;/card&gt; <br>
-              <br>
-              &lt;/wml&gt; </code></p>
-            <p>Specification </p>
-            <p> <code>&lt;page-specification class=&quot;org.apache.tapestry.wap.quiz.Home&quot;&gt;<br>
-              &nbsp;&lt;context-asset name=&quot;logo&quot; path=&quot;images/logo.wbmp&quot;/&gt;<br>
-              &lt;/page-specification&gt;<br>
-              </code> </p>
-            <p>&nbsp; </p>
-          </td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-  <tr> 
-    <td colspan="3"> 
-      <hr>
-    </td>
-  </tr>
-  <tr> 
-    <td align="left"><a href="wml.Go.html"><img alt="Go" src="common-images/prev.png"></a></td>
-    <td align="middle"><a href="index.html"><img alt="Component Index" src="common-images/home.png" ></a></td>
-    <td align="right"><a href="wml.Input.html"><img alt="Input" src="common-images/next.png"></a></td>
-  </tr>
-</table>
-</body>
-</html>
\ No newline at end of file
diff --git a/3.0.4/doc/src/ComponentReference/wml.Input.html b/3.0.4/doc/src/ComponentReference/wml.Input.html
deleted file mode 100644
index d40951b..0000000
--- a/3.0.4/doc/src/ComponentReference/wml.Input.html
+++ /dev/null
@@ -1,157 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-<head>
-<title>wml:Input</title>
-<link rel="stylesheet" type="text/css" href="Tapestry.css" title="style">
-</head>
-<body>
-<table border="0" cellpadding="0" cellspacing="0" width="100%">
-  <tr> 
-    <td align="left"><a href="wml.Image.html"><img alt="Image" src="common-images/prev.png"></a></td>
-    <td align="middle"><a href="index.html"><img alt="Component Index" src="common-images/home.png" ></a></td>
-    <td align="right"><a href="wml.OnEvent.html"><img alt="OnEvent" src="common-images/next.png"></a></td>
-  <tr> 
-  <tr> 
-    <td colspan="3">
-      <hr>
-    </td>
-  </tr>
-  <tr> 
-    <td colspan="3"> 
-      <table border="0" cellpadding="4" cellspacing="4" width="100%">
-        <tr valign="top"> 
-          <td> 
-            <table>
-              <tr> 
-                <td><font size="+2"><b>wml:Input</b></font></td>
-              </tr>
-              <tr> 
-                <td> <A href="../api/org/apache/tapestry/wml/Input.html">org.apache.tapestry.wml.Input</a> 
-                </td>
-              </tr>
-            </table>
-          </td>
-          <td> 
-            <table align="right" valign="middle" cellpadding="8">
-              <tr> 
-                <td><IMG alt="Image Component" src="images/wml.input.png" ></td>
-              </tr>
-            </table>
-          </td>
-        </tr>
-        <tr valign="center"> 
-          <td colspan="2">&nbsp;</td>
-        </tr>
-        <tr> 
-          <td colspan="2"> <b>Description</b> <br>
-            The wml:Input component defines an input field (a text field where 
-            the user can enter some text).</td>
-        </tr>
-        <tr> 
-          <td colspan="2"> <b>See Also</b> <br>
-            <A href="wml.Go.html">wml:Go</a>, <A href="wml.Postfield.html">wml:Postfield</a> 
-          </td>
-        </tr>
-        <tr> 
-          <td colspan="2"> <b>Parameters</b> <br>
-            <table border="1" cellpadding="4" cellspacing="4" class="parameters">
-              <tr> 
-                <th>Name</th>
-                <th>Type</th>
-                <th>Direction</th>
-                <th>Required</th>
-                <th>Default</th>
-                <th>Description</th>
-              </tr>
-              <tr> 
-                <td>title</td>
-                <td>String</td>
-                <td>in</td>
-                <td>no</td>
-                <td>&nbsp;</td>
-                <td> The title attribute specifies advisory information about 
-                  the element. The title may be rendered in a variety of ways 
-                  by the user agent (eg, suggested bookmark name, pop-up tooltip, 
-                  etc.). </td>
-              </tr>
-              <tr> 
-                <td>hidden</td>
-                <td>boolean</td>
-                <td>in</td>
-                <td>no</td>
-                <td>&nbsp;</td>
-                <td> If true, then the text field is written as a &#60;input type="password"&#62; 
-                  form element. </td>
-              </tr>
-              <tr> 
-                <td>name</td>
-                <td>String</td>
-                <td>in</td>
-                <td>yes</td>
-                <td>&nbsp;</td>
-                <td>The name attribute specifies a variable name.</td>
-              </tr>
-              <tr> 
-                <td>format</td>
-                <td>String</td>
-                <td>in</td>
-                <td>no</td>
-                <td>&nbsp;</td>
-                <td> The format attribute specifies an input mask for user input 
-                  entries. The string consists of mask control characters and 
-                  static text that is displayed in the input area. The user agent 
-                  may use the format mask to facilitate accelerated data input. 
-                  An input mask is only valid when it contains only legal format 
-                  codes. User agents must ignore invalid masks. The format control 
-                  characters specify the data format expected to be entered by 
-                  the user. See the WML specification for valid format control 
-                  characters. </td>
-              </tr>
-              <tr> 
-                <td>emptyok</td>
-                <td>boolean</td>
-                <td>in</td>
-                <td>no</td>
-                <td>&nbsp;</td>
-                <td> The emptyok attribute indicates that this input element accepts 
-                  empty input although a non-empty format string has been specified. 
-                </td>
-              </tr>
-              <tr> 
-                <td>value</td>
-                <td>String</td>
-                <td>in</td>
-                <td>yes</td>
-                <td>&nbsp;</td>
-                <td>Bind value to the variable that should recieve the user input 
-                  string.</td>
-              </tr>
-            </table>
-            <p> Body: <strong>removed</strong><br>
-              Informal parameters: <strong>allowed</strong><br>
-              <!-- component-specification "reserved-parameter" -->
-              Reserved parameters: type </p>
-          </td>
-        </tr>
-          <td colspan="2"> <b>Examples</b> 
-            <p> Please see the documentation for the <a href="wml.Go.html">wml:Go</a> 
-              component.</p>
-          </td>
-        <tr>          
-        </tr>
-      </table>
-    </td>
-  </tr>
-  <tr> 
-    <td colspan="3">
-      <hr>
-    </td>
-  </tr>
-  <tr> 
-    <td align="left"><a href="wml.Image.html"><img alt="Image" src="common-images/prev.png"></a></td>
-    <td align="middle"><a href="index.html"><img alt="Component Index" src="common-images/home.png" ></a></td>
-    <td align="right"><a href="wml.OnEvent.html"><img alt="OnEvent" src="common-images/next.png"></a></td>
-  </tr>
-</table>
-</body>
-</html>
\ No newline at end of file
diff --git a/3.0.4/doc/src/ComponentReference/wml.OnEvent.html b/3.0.4/doc/src/ComponentReference/wml.OnEvent.html
deleted file mode 100644
index 04830b6..0000000
--- a/3.0.4/doc/src/ComponentReference/wml.OnEvent.html
+++ /dev/null
@@ -1,101 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-<head>
-<title>wml:OnEvent</title>
-<link rel="stylesheet" type="text/css" href="Tapestry.css" title="style">
-</head>
-<body>
-<table border="0" cellpadding="0" cellspacing="0" width="100%">
-  <tr> 
-    <td align="left"><a href="wml.Input.html"><img alt="Input" src="common-images/prev.png"></a></td>
-    <td align="middle"><a href="index.html"><img alt="Component Index" src="common-images/home.png" ></a></td>
-    <td align="right"><a href="wml.Option.html"><img alt="Option" src="common-images/next.png"></a></td>
-  <tr> 
-  <tr> 
-    <td colspan="3"> 
-      <hr>
-    </td>
-  </tr>
-  <tr> 
-    <td colspan="3"> 
-      <table border="0" cellpadding="4" cellspacing="4" width="100%">
-        <tr valign="top"> 
-          <td> 
-            <table>
-              <tr> 
-                <td><font size="+2"><b>wml:OnEvent</b></font></td>
-              </tr>
-              <tr> 
-                <td> <A href="../api/org/apache/tapestry/wml/OnEvent.html">org.apache.tapestry.wml.OnEvent</a> 
-                </td>
-              </tr>
-            </table>
-          </td>
-          <td> 
-            <table align="right" valign="middle" bgcolor="#c0c0c0" cellpadding="8">
-              <tr> 
-                <td>Non Visual Component</td>
-              </tr>
-            </table>
-          </td>
-        </tr>
-        <tr valign="center"> 
-          <td colspan="2">&nbsp;</td>
-        </tr>
-        <tr> 
-          <td colspan="2"> <b>Description</b> <br>
-            The wml:OnEvent component contains code to be executed when one of 
-            the following events occurs: onenterbackward, onenterforward, onpick, 
-            ontimer.</td>
-        </tr>
-        <tr> 
-          <td colspan="2"> <b>See Also</b> <br>
-          </td>
-        </tr>
-        <tr> 
-          <td colspan="2"> <b>Parameters</b> <br>
-            <table border="1" cellpadding="4" cellspacing="4" class="parameters">
-              <tr> 
-                <th>Name</th>
-                <th>Type</th>
-                <th>Direction</th>
-                <th>Required</th>
-                <th>Default</th>
-                <th>Description</th>
-              </tr>
-              <tr> 
-                <td>type</td>
-                <td>String</td>
-                <td>in</td>
-                <td>yes</td>
-                <td>&nbsp;</td>
-                <td> The type attribute indicates the name of the intrinsic event 
-                  (ontimer, onenterforward, onenterbackward, onpick). </td>
-              </tr>
-            </table>
-            <p> Body: <strong>removed</strong><br>
-              Informal parameters: <strong>allowed</strong><br>
-              Reserved parameters: none </p>
-          </td>
-        </tr>
-        <tr> 
-          <td colspan="2"> <b>Examples</b> 
-            <p> This example is under construction.</p>
-          </td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-  <tr> 
-    <td colspan="3"> 
-      <hr>
-    </td>
-  </tr>
-  <tr> 
-    <td align="left"><a href="wml.Input.html"><img alt="Input" src="common-images/prev.png"></a></td>
-    <td align="middle"><a href="index.html"><img alt="Component Index" src="common-images/home.png" ></a></td>
-    <td align="right"><a href="wml.Option.html"><img alt="Option" src="common-images/next.png"></a></td>
-  </tr>
-</table>
-</body>
-</html>
\ No newline at end of file
diff --git a/3.0.4/doc/src/ComponentReference/wml.Option.html b/3.0.4/doc/src/ComponentReference/wml.Option.html
deleted file mode 100644
index 3c71520..0000000
--- a/3.0.4/doc/src/ComponentReference/wml.Option.html
+++ /dev/null
@@ -1,107 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-<head>
-<title>wml:Option</title>
-<link rel="stylesheet" type="text/css" href="Tapestry.css" title="style">
-</head>
-<body>
-<table border="0" cellpadding="0" cellspacing="0" width="100%">
-  <tr> 
-    <td align="left"><a href="wml.OnEvent.html"><img alt="OnEvent" src="common-images/prev.png"></a></td>
-    <td align="middle"><a href="index.html"><img alt="Component Index" src="common-images/home.png" ></a></td>
-    <td align="right"><a href="wml.Postfield.html"><img alt="Postfield" src="common-images/next.png"></a></td>
-  <tr> 
-  <tr> 
-    <td colspan="3">
-      <hr>
-    </td>
-  </tr>
-  <tr> 
-    <td colspan="3"> 
-      <table border="0" cellpadding="4" cellspacing="4" width="100%">
-        <tr valign="top"> 
-          <td> 
-            <table>
-              <tr> 
-                <td><font size="+2"><b>wml:Option</b></font></td>
-              </tr>
-              <tr> 
-                <td> <A href="../api/org/apache/tapestry/wml/Option.html">org.apache.tapestry.wml.Option</a></td>
-              </tr>
-            </table>
-          </td>
-          <td> 
-            <table align="right" valign="middle" cellpadding="8">
-              <tr> 
-                <td><IMG alt="Image Component" src="images/wml.select.png" ></td>
-              </tr>
-            </table>
-          </td>
-        </tr>
-        <tr valign="center"> 
-          <td colspan="2">&nbsp;</td>
-        </tr>
-        <tr> 
-          <td colspan="2"> <b>Description</b> <br>
-            This component serves as a container for one item that is listed as 
-            a choice in a wml:Select. A wml:Select offers a selection of choices 
-            from which usersu may choose one or more items. The select list is 
-            created using a select element which contains a collection of option 
-            elements. A string or text describing the item appears between the 
-            opening and closing option tags. </td>
-        </tr>
-        <tr> 
-          <td colspan="2"> <b>See Also</b> <br>
-            <A href="wml.Go.html">wml:Go</a>, <A href="wml.Select.html">wml:Select</a> 
-          </td>
-        </tr>
-        <tr> 
-          <td colspan="2"> <b>Parameters</b> <br>
-            <table border="1" cellpadding="4" cellspacing="4" class="parameters">
-              <tr> 
-                <th>Name</th>
-                <th>Type</th>
-                <th>Direction</th>
-                <th>Required</th>
-                <th>Default</th>
-                <th>Description</th>
-              </tr>
-              <tr> 
-                <td>value</td>
-                <td>String</td>
-                <td>in</td>
-                <td>yes</td>
-                <td>&nbsp;</td>
-                <td> The value attribute specifies the value to be used when setting 
-                  the name variable. When the user selects this option, the resulting 
-                  value specified in the value attribute is used to set the Select 
-                  element's name wml variable. </td>
-              </tr>
-            </table>
-            <p> Body: <strong>removed</strong><br>
-              Informal parameters: <strong>allowed</strong><br>
-              Reserved parameters: none </p>
-          </td>
-        </tr>
-        <tr> 
-          <td colspan="2"> <b>Examples</b> 
-            <p> Please see the documentation for the <a href="wml.Select.html">wml:Select</a> 
-              component.</p>
-          </td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-  <tr> 
-    <td colspan="3">
-      <hr>
-    </td>
-  </tr>
-  <tr> 
-    <td align="left"><a href="wml.OnEvent.html"><img alt="OnEvent" src="common-images/prev.png"></a></td>
-    <td align="middle"><a href="index.html"><img alt="Component Index" src="common-images/home.png" ></a></td>
-    <td align="right"><a href="wml.Postfield.html"><img alt="Postfield" src="common-images/next.png"></a></td>
-  </tr>
-</table>
-</body>
-</html>
\ No newline at end of file
diff --git a/3.0.4/doc/src/ComponentReference/wml.Postfield.html b/3.0.4/doc/src/ComponentReference/wml.Postfield.html
deleted file mode 100644
index bd4e2b5..0000000
--- a/3.0.4/doc/src/ComponentReference/wml.Postfield.html
+++ /dev/null
@@ -1,110 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-<head>
-<title>wml:Postfield</title>
-<link rel="stylesheet" type="text/css" href="Tapestry.css" title="style">
-</head>
-<body>
-<table border="0" cellpadding="0" cellspacing="0" width="100%">
-  <tr> 
-    <td align="left"><a href="wml.Option.html"><img alt="Option" src="common-images/prev.png"></a></td>
-    <td align="middle"><a href="index.html"><img alt="Component Index" src="common-images/home.png" ></a></td>
-    <td align="right"><a href="wml.PropertySelection.html"><img alt="PropertySelection" src="common-images/next.png"></a></td>
-  <tr> 
-  <tr> 
-    <td colspan="3"> 
-      <hr>
-    </td>
-  </tr>
-  <tr> 
-    <td colspan="3"> 
-      <table border="0" cellpadding="4" cellspacing="4" width="100%">
-        <tr valign="top"> 
-          <td> 
-            <table>
-              <tr> 
-                <td><font size="+2"><b>wml:Postfield</b></font></td>
-              </tr>
-              <tr> 
-                <td> <A href="../api/org/apache/tapestry/wml/Postfield.html">org.apache.tapestry.wml.Postfield</a> 
-                </td>
-              </tr>
-            </table>
-          </td>
-          <td> 
-            <table align="right" valign="middle" bgcolor="#c0c0c0" cellpadding="8">
-              <tr> 
-                <td>Non Visual Component</td>
-              </tr>
-            </table>
-          </td>
-        </tr>
-        <tr valign="center"> 
-          <td colspan="2">&nbsp;</td>
-        </tr>
-        <tr> 
-          <td colspan="2"> <b>Description</b> <br>
-            The wml:Postfield component specifies a field name and value that 
-            are passed to the HTTP server along with a wml:Go tag.</td>
-        </tr>
-        <tr> 
-          <td colspan="2"> <b>See Also</b> <br>
-            <A href="wml.Go.html">wml:Go</a>, <A href="wml.Input.html">wml:Input</a> 
-          </td>
-        </tr>
-        <tr> 
-          <td colspan="2"> <b>Parameters</b> <br>
-            <table border="1" cellpadding="4" cellspacing="4" class="parameters">
-              <tr> 
-                <th>Name</th>
-                <th>Type</th>
-                <th>Direction</th>
-                <th>Required</th>
-                <th>Default</th>
-                <th>Description</th>
-              </tr>
-              <tr> 
-                <td>value</td>
-                <td>String</td>
-                <td>custom</td>
-                <td>yes</td>
-                <td>&nbsp;</td>
-                <td>Bind value to the variable that should recieve the user input 
-                  string</td>
-              </tr>
-              <tr> 
-                <td>name</td>
-                <td>String</td>
-                <td>in</td>
-                <td>yes</td>
-                <td>&nbsp;</td>
-                <td>The name attribute specifies an WML variable name.</td>
-              </tr>
-            </table>
-            <p> Body: <strong>removed</strong><br>
-              Informal parameters: <strong>allowed</strong><br>
-              Reserved parameters: value </p>
-          </td>
-        </tr>
-        <tr> 
-          <td colspan="2"> <b>Examples</b> 
-            <p> Please see the documentation for the <a href="wml.Go.html">wml:Go</a> 
-              component.</p>
-          </td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-  <tr> 
-    <td colspan="3"> 
-      <hr>
-    </td>
-  </tr>
-  <tr> 
-    <td align="left"><a href="wml.Option.html"><img alt="Option" src="common-images/prev.png"></a></td>
-    <td align="middle"><a href="index.html"><img alt="Component Index" src="common-images/home.png" ></a></td>
-    <td align="right"><a href="wml.PropertySelection.html"><img alt="PropertySelection" src="common-images/next.png"></a></td>
-  </tr>
-</table>
-</body>
-</html>
\ No newline at end of file
diff --git a/3.0.4/doc/src/ComponentReference/wml.PropertySelection.html b/3.0.4/doc/src/ComponentReference/wml.PropertySelection.html
deleted file mode 100644
index a57e41e..0000000
--- a/3.0.4/doc/src/ComponentReference/wml.PropertySelection.html
+++ /dev/null
@@ -1,161 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-<head>
-<title>wml:PropertySelection</title>
-<link rel="stylesheet" type="text/css" href="Tapestry.css" title="style">
-</head>
-<body>
-<table border="0" cellpadding="0" cellspacing="0" width="100%">
-  <tr> 
-    <td align="left"><a href="wml.Postfield.html"><img alt="Postfield" src="common-images/prev.png"></a></td>
-    <td align="middle"><a href="index.html"><img alt="Component Index" src="common-images/home.png" ></a></td>
-    <td align="right"><a href="wml.Select.html"><img alt="Select" src="common-images/next.png"></a></td>
-  <tr> 
-  <tr> 
-    <td colspan="3">
-      <hr>
-    </td>
-  </tr>
-  <tr> 
-    <td colspan="3"> 
-      <table border="0" cellpadding="4" cellspacing="4" width="100%">
-        <tr valign="top"> 
-          <td> 
-            <table>
-              <tr> 
-                <td><font size="+2"><b>wml:PropertySelection</b></font></td>
-              </tr>
-              <tr> 
-                <td> <A href="../api/org/apache/tapestry/wml/PropertySelection.html">org.apache.tapestry.wml.PropertySelection</a> 
-                </td>
-              </tr>
-            </table>
-          </td>
-          <td> 
-            <table align="right" valign="middle" cellpadding="8">
-              <tr> 
-                <td><IMG alt="Image Component" src="images/wml.propertyselection.png" ></td>
-              </tr>
-            </table>
-          </td>
-        </tr>
-        <tr valign="center"> 
-          <td colspan="2" height="23">&nbsp;</td>
-        </tr>
-        <tr> 
-          <td colspan="2"> <b>Description</b> <br>
-            Creates an WML select to choose a single property from a list of options. 
-          </td>
-        </tr>
-        <tr> 
-          <td colspan="2"> <b>See Also</b> <br>
-            <A href="wml.Go.html">wml:Go</a>, <A href="wml.SelectionField.html">wml:SelectionField</a> 
-          </td>
-        </tr>
-        <tr> 
-          <td colspan="2"> <b>Parameters</b> <br>
-            <table border="1" cellpadding="4" cellspacing="4" class="parameters">
-              <tr> 
-                <th>Name</th>
-                <th>Type</th>
-                <th>Direction</th>
-                <th>Required</th>
-                <th>Default</th>
-                <th>Description</th>
-              </tr>
-              <tr> 
-                <td>name</td>
-                <td>String</td>
-                <td>in</td>
-                <td>yes</td>
-                <td>&nbsp;</td>
-                <td> The property to set. During rendering, this property is read, 
-                  and sets the default value of the selection (if it is null, 
-                  no element is selected). When the &lt;go&gt; is submitted, this 
-                  property is updated, with the help of SelectionField component, 
-                  based on the new selection. </td>
-              </tr>
-              <tr> 
-                <td>model</td>
-                <td> <A href="../api/org/apache/tapestry/form/IPropertySelectionModel.html"><tt>IPropertySelectionModel</tt></a> 
-                </td>
-                <td>auto</td>
-                <td>no</td>
-                <td>&nbsp;</td>
-                <td> The model provides a list of possible labels, and matches 
-                  those labels against possible values that can be assigned back 
-                  to the property. </td>
-              </tr>
-            </table>
-            <p> Body: <strong>removed</strong><br>
-              Informal parameters: <strong>allowed</strong><br>
-              Reserved parameters: none </p>
-          </td>
-        </tr>
-        <tr> 
-          <td colspan="2"> <p><b>Example</b> </p>
-            <p>Template</p>
-            <pre>    &lt;card id=&quot;card1&quot; title=&quot;Animal QUIZ&quot; newcontext=&quot;true&quot;&gt;<br>        &lt;p&gt;Welcome!<br>            &lt;br/&gt;<br>            Your name:<br>            &lt;input jwcid=&quot;userInput&quot; name=&quot;username&quot; title=&quot;Your name&quot; value=&quot;&quot;/&gt;<br>        &lt;/p&gt;<br>        &lt;p&gt;<br>            Difficulty:<br>            &lt;b jwcid=&quot;selectLevel&quot;/&gt;<br>        &lt;/p&gt;<br>        &lt;p&gt;<br>            &lt;do type=&quot;help&quot; label=&quot;Instructions&quot;&gt;<br>                &lt;go href=&quot;#help&quot;/&gt;<br>            &lt;/do&gt;<br>            &lt;do type=&quot;options&quot; label=&quot;Zoo home&quot;&gt;<br>                &lt;go jwcid=&quot;@ServiceLink&quot; service=&quot;ognl:@org.apache.tapestry.Tapestry@HOME_SERVICE&quot; renderer=&quot;ognl:@org.apache.tapestry.wml.GoLinkRenderer@SHARED_INSTANCE&quot; href=&quot;&quot;/&gt;<br>            &lt;/do&gt;<br>        &lt;/p&gt;<br>        &lt;p&gt;<br>           &lt;anchor title=&quot;Start&quot;&gt;Start<br>                &lt;go jwcid=&quot;go&quot;&gt;<br>                    &lt;postfield jwcid=&quot;username&quot; name=&quot;username&quot; value=&quot;username&quot;/&gt;<br>                    &lt;postfield jwcid=&quot;level&quot; name=&quot;level&quot; value=&quot;level&quot;/&gt;<br>                &lt;/go&gt;<br>            &lt;/anchor&gt;<br>            &lt;br/&gt;<br>            &lt;anchor title=&quot;Instructions&quot;&gt;Instructions<br>                &lt;go href=&quot;#help&quot;/&gt;<br>            &lt;/anchor&gt;<br>        &lt;/p&gt;<br>    &lt;/card&gt;<br>
-             </pre>
-            <p>Specification</p>
-			<pre>       &lt;page-specification class=&quot;org.apache.tapestry.wap.quiz.Home&quot;&gt;
-            &lt;component id=&quot;username&quot; type=&quot;<a href="wml.Postfield.html">wml:Postfield</a>&quot;&gt;
-              &lt;binding name=&quot;value&quot; expression=&quot;username&quot;/&gt;
-              &lt;binding name=&quot;name&quot; expression=&quot;components.userInput.name&quot;/&gt;
-            &lt;/component&gt;
-            &lt;component id=&quot;level&quot; type=&quot;<a href="wml.SelectionField.html">wml:SelectionField</a>&quot;&gt;
-              &lt;binding name=&quot;value&quot; expression=&quot;level&quot;/&gt;
-              &lt;binding name=&quot;model&quot; expression=&quot;components.selectLevel.model&quot;/&gt;
-              &lt;binding name=&quot;name&quot; expression=&quot;components.selectLevel.name&quot;/&gt;
-            &lt;/component&gt;
-            &lt;component id=&quot;userInput&quot; type=&quot;<a href="wml.Input.html">wml:Input</a>&quot;&gt;
-              &lt;static-binding name=&quot;name&quot;&gt;username&lt;/static-binding&gt;
-              &lt;binding name=&quot;value&quot; expression=&quot;username&quot;/&gt;
-              &lt;/component&gt;
-            &lt;component id=&quot;selectLevel&quot; type=&quot;<a href="wml.PropertySelection.html">wml:PropertySelection</a>&quot;&gt;
-              &lt;static-binding name=&quot;name&quot;&gt;level&lt;/static-binding&gt;
-              &lt;binding name=&quot;model&quot; expression=&quot;@org.apache.tapestry.wap.quiz.Home@LEVEL_MODEL&quot;/&gt;
-              &lt;/component&gt;
-            &lt;component id=&quot;go&quot; type=&quot;<a href="wml.Go.html">wml:Go</a>&quot;&gt;
-              &lt;binding name=&quot;stateful&quot; expression=&quot;false&quot;/&gt;
-              &lt;binding name=&quot;listener&quot; expression=&quot;listeners.start&quot;/&gt;
-              &lt;/component&gt;
-            &lt;property-specification name=&quot;username&quot; type=&quot;java.lang.String&quot; persistent=&quot;yes&quot;/&gt;
-            &lt;property-specification name=&quot;level&quot; type=&quot;java.lang.String&quot; persistent=&quot;yes&quot; initial-value='&quot;easy&quot;'/&gt;
-       &lt;/page-specification&gt;</pre>
-            <p>Java </p>
-            <pre>
-public abstract class Home extends Deck
-{
-
-	public static final IPropertySelectionModel LEVEL_MODEL = new StringPropertySelectionModel
-            (new String[] { Global.EASY_LEVEL, Global.MEDIUM_LEVEL, Global.HARD_LEVEL });
-	
-	public void start(IRequestCycle cycle)
-	{
-        .....
-        .....
-	}
-	
-	public abstract String getUsername();
-	
-	public abstract String getLevel();
-}</pre>
-          </td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-  <tr> 
-    <td colspan="3">
-      <hr>
-    </td>
-  </tr>
-  <tr> 
-    <td align="left"><a href="wml.Postfield.html"><img alt="Postfield" src="common-images/prev.png"></a></td>
-    <td align="middle"><a href="index.html"><img alt="Component Index" src="common-images/home.png" ></a></td>
-    <td align="right"><a href="wml.Select.html"><img alt="Select" src="common-images/next.png"></a></td>
-  </tr>
-</table>
-</body>
-</html>
\ No newline at end of file
diff --git a/3.0.4/doc/src/ComponentReference/wml.Select.html b/3.0.4/doc/src/ComponentReference/wml.Select.html
deleted file mode 100644
index 73a1367..0000000
--- a/3.0.4/doc/src/ComponentReference/wml.Select.html
+++ /dev/null
@@ -1,172 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-<head>
-<title>wml:Select</title>
-<link rel="stylesheet" type="text/css" href="Tapestry.css" title="style">
-</head>
-<body>
-<table border="0" cellpadding="0" cellspacing="0" width="100%">
-  <tr> 
-    <td align="left"><a href="wml.PropertySelection.html"><img alt="PropertySelection" src="common-images/prev.png"></a></td>
-    <td align="middle"><a href="index.html"><img alt="Component Index" src="common-images/home.png" ></a></td>
-    <td align="right"><a href="wml.SelectionField.html"><img alt="SelectionField" src="common-images/next.png"></a></td>
-  <tr> 
-  <tr> 
-    <td colspan="3">
-      <hr>
-    </td>
-  </tr>
-  <tr> 
-    <td colspan="3"> 
-      <table border="0" cellpadding="4" cellspacing="4" width="100%">
-        <tr valign="top"> 
-          <td> 
-            <table>
-              <tr> 
-                <td><font size="+2"><b>wml:Select</b></font></td>
-              </tr>
-              <tr> 
-                <td> <A href="../api/org/apache/tapestry/wml/Select.html">org.apache.tapestry.wml.Select</a> 
-                </td>
-              </tr>
-            </table>
-          </td>
-          <td> 
-            <table align="right" valign="middle" cellpadding="8">
-              <tr> 
-                <td><IMG alt="Image Component" src="images/wml.select.png" ></td>
-              </tr>
-            </table>
-          </td>
-        </tr>
-        <tr valign="center"> 
-          <td colspan="2">&nbsp;</td>
-        </tr>
-        <tr> 
-          <td colspan="2"> <b>Description</b> <br>
-            The wml:Select component lets users pick from a list of options. Each 
-            option is specified by an wml:Option component. Each Option element 
-            may have one line of formatted text (which may be wrapped or truncated 
-            by the user agent if too long). </td>
-        </tr>
-        <tr> 
-          <td colspan="2"> <b>See Also</b> <br>
-            <A href="wml.Go.html">wml:Go</a>, <A href="wml.Option.html">wml:Option</a> 
-          </td>
-        </tr>
-        <tr> 
-          <td colspan="2"> <b>Parameters</b> <br>
-            <table border="1" cellpadding="4" cellspacing="4" class="parameters">
-              <tr> 
-                <th>Name</th>
-                <th>Type</th>
-                <th>Direction</th>
-                <th>Required</th>
-                <th>Default</th>
-                <th>Description</th>
-              </tr>
-              <tr> 
-                <td>multiple</td>
-                <td>boolean</td>
-                <td>in</td>
-                <td>no</td>
-                <td>&nbsp;</td>
-                <td> This attribute specifies a title for this element, which 
-                  may be used in the presentation of this object. This attribute 
-                  specifies a title for this element, which may be used in the 
-                  presentation of this object. </td>
-              </tr>
-              <tr> 
-                <td>name</td>
-                <td>String</td>
-                <td>in</td>
-                <td>no</td>
-                <td>&nbsp;</td>
-                <td> The name attribute indicates the name of the variable to 
-                  set with the result of the selection. The variable is set to 
-                  the string value of the chosen option element, which is specified 
-                  with the value attribute. The name variable's value is used 
-                  to pre-select options in the select list. </td>
-              </tr>
-              <tr> 
-                <td>value</td>
-                <td>String</td>
-                <td>in</td>
-                <td>no</td>
-                <td>&nbsp;</td>
-                <td> The value attribute indicates the default value of the variable 
-                  named in the name attribute. When the element is displayed, 
-                  and the variable named in the name attribute is not set, the 
-                  name variable may be assigned the value specified in the value 
-                  attribute, depending on the values defined in iname and ivalue. 
-                  If the name variable already contains a value, the value attribute 
-                  is ignored. Any application of the default value is done before 
-                  the list is pre-selected with the value of the name variable. 
-                  If this element allows the selection of multiple options, the 
-                  result of the user's choice is a list of all selected values, 
-                  separated by the semicolon character. The name variable is set 
-                  with this result. In addition, the value attribute is interpreted 
-                  as a semicolon-separated list of pre-selected options. </td>
-              </tr>
-            </table>
-            <p> Body: <strong>removed</strong><br>
-              Informal parameters: <strong>allowed</strong><br>
-              Reserved parameters: none </p>
-          </td>
-        </tr>
-        <tr> 
-          <td colspan="2"> <p><b>Example</b></p>
-            <p>This example show how to use a WML Select and Option components. 
-              Because of simplicity we recommend to use the <a href="wml.PropertySelection.html">wml:PropertySelection</a> 
-              component. </p>
-            <table valign="middle">
-              <tr> 
-                <td> <IMG alt="WML Image Example" src="images/wml.select-example.png" > 
-                </td>
-              </tr>
-            </table>
-            <br>
-<p>Template</p>
-            <p> &lt;card jwcid=&quot;@<a href="wml.Card.html">wml:Card</a>&quot; 
-              id=&quot;incomecard&quot;&gt;<br>
-              &nbsp;&lt;p&gt;<br>
-              &nbsp;&nbsp;How much do you make?<br>
-              &nbsp;&nbsp;&lt;select jwcid=&quot;incomeSelect@<a href="wml.Select.html">wml:Select</a>&quot; 
-              name=&quot;ognl:components.income.varName&quot; title=&quot;income&quot;&gt;<br>
-              &nbsp;&nbsp;&nbsp;&lt;option jwcid=&quot;@<a href="wml.Option.html">wml:Option</a>&quot; 
-              value=&quot;$10-50K&quot;&gt; $$10-25K &lt;/option&gt;<br>
-              &nbsp;&nbsp;&nbsp;&lt;option jwcid=&quot;@<a href="wml.Option.html">wml:Option</a>&quot; value=&quot;$25-50K&quot;&gt; 
-              $$25-50K &lt;/option&gt;<br>
-              &nbsp;&nbsp;&nbsp;&lt;option jwcid=&quot;@<a href="wml.Option.html">wml:Option</a>&quot; value=&quot;$50-100K&quot;&gt; 
-              $$50-100K &lt;/option&gt;<br>
-              &nbsp;&nbsp;&nbsp;&lt;option jwcid=&quot;@<a href="wml.Option.html">wml:Option</a>&quot; value=&quot;Over $100K&quot;&gt; 
-              Over $$100K &lt;/option&gt;<br>
-              &nbsp;&nbsp;&lt;/select&gt;<br>
-              &nbsp;&lt;/p&gt;<br>
-              &lt;/card&gt;<br>
-            </p>
-		    <p>Specification</p>
-            <p> &lt;page-specification class=&quot;org.apache.tapestry.junit.mock.wml.Select&quot;&gt; 
-              <br>
-              &nbsp;&lt;property-specification name=&quot;income&quot; type=&quot;java.lang.String&quot; 
-              persistent=&quot;yes&quot;/&gt;<br>
-			  &lt;/page-specification&gt;<br>
-            </p>
-            </td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-  <tr> 
-    <td colspan="3">
-      <hr>
-    </td>
-  </tr>
-  <tr> 
-    <td align="left"><a href="wml.PropertySelection.html"><img alt="PropertySelection" src="common-images/prev.png"></a></td>
-    <td align="middle"><a href="index.html"><img alt="Component Index" src="common-images/home.png" ></a></td>
-    <td align="right"><a href="wml.SelectionField.html"><img alt="SelectionField" src="common-images/next.png"></a></td>
-  </tr>
-</table>
-</body>
-</html>
\ No newline at end of file
diff --git a/3.0.4/doc/src/ComponentReference/wml.SelectionField.html b/3.0.4/doc/src/ComponentReference/wml.SelectionField.html
deleted file mode 100644
index 11e7104..0000000
--- a/3.0.4/doc/src/ComponentReference/wml.SelectionField.html
+++ /dev/null
@@ -1,110 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-<head>
-<title>wml:SelectionField</title>
-<link rel="stylesheet" type="text/css" href="Tapestry.css" title="style">
-</head>
-<body>
-<table border="0" cellpadding="0" cellspacing="0" width="100%">
-  <tr> 
-    <td align="left"><a href="wml.Select.html"><img alt="Select" src="common-images/prev.png"></a></td>
-    <td align="middle"><a href="index.html"><img alt="Component Index" src="common-images/home.png" ></a></td>
-    <td align="right"><a href="wml.Setvar.html"><img alt="Setvar" src="common-images/next.png"></a></td>
-  <tr> 
-  <tr> 
-    <td colspan="3">
-      <hr>
-    </td>
-  </tr>
-  <tr> 
-    <td colspan="3"> 
-      <table border="0" cellpadding="4" cellspacing="4" width="100%">
-        <tr valign="top"> 
-          <td> 
-            <table>
-              <tr> 
-                <td><font size="+2"><b>wml:SelectionField</b></font></td>
-              </tr>
-              <tr> 
-                <td> <A href="../api/org/apache/tapestry/wml/SelectionField.html">org.apache.tapestry.wml.SelectionField</a> 
-                </td>
-              </tr>
-            </table>
-          </td>
-          <td> 
-            <table align="right" valign="middle" bgcolor="#c0c0c0" cellpadding="8">
-              <tr> 
-                <td>Non Visual Component</td>
-              </tr>
-            </table>
-          </td>
-        </tr>
-        <tr valign="center"> 
-          <td colspan="2">&nbsp;</td>
-        </tr>
-        <tr> 
-          <td colspan="2"> <b>Description</b> <br>
-            wml:SelectionField specifies a special Postfield element and it is 
-            used to complement the PropertySelection component. </td>
-        </tr>
-        <tr> 
-          <td colspan="2"> <b>See Also</b> <br>
-            <A href="wml.Go.html">wml:Go</a>, <A href="wml.PropertySelection.html">wml:PropertySelection</a> 
-          </td>
-        </tr>
-        <tr> 
-          <td colspan="2"> <b>Parameters</b> <br>
-            <table border="1" cellpadding="4" cellspacing="4" class="parameters">
-              <tr> 
-                <th>Name</th>
-                <th>Type</th>
-                <th>Direction</th>
-                <th>Required</th>
-                <th>Default</th>
-                <th>Description</th>
-              </tr>
-              <tr> 
-                <td>model</td>
-                <td> <A href="../api/org/apache/tapestry/form/IPropertySelectionModel.html"><tt>IPropertySelectionModel</tt></a> 
-                </td>
-                <td>auto</td>
-                <td>no</td>
-                <td>&nbsp;</td>
-                <td>The model used by PropertySelection component.</td>
-              </tr>
-              <tr> 
-                <td>name</td>
-                <td>String</td>
-                <td>in</td>
-                <td>yes</td>
-                <td>&nbsp;</td>
-                <td>The name attribute specifies an WML variable name.</td>
-              </tr>
-            </table>
-            <p> Body: <strong>removed</strong><br>
-              Informal parameters: <strong>allowed</strong><br>
-              Reserved parameters: value </p>
-          </td>
-        </tr>
-        <tr> 
-          <td colspan="2"> <b>Examples</b> 
-            <p> Please see the documentation for the <a href="wml.PropertySelection.html">wml:PropertySelection</a> 
-              component.</p>
-          </td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-  <tr> 
-    <td colspan="3">
-      <hr>
-    </td>
-  </tr>
-  <tr> 
-    <td align="left"><a href="wml.Select.html"><img alt="Select" src="common-images/prev.png"></a></td>
-    <td align="middle"><a href="index.html"><img alt="Component Index" src="common-images/home.png" ></a></td>
-    <td align="right"><a href="wml.Setvar.html"><img alt="Setvar" src="common-images/next.png"></a></td>
-  </tr>
-</table>
-</body>
-</html>
\ No newline at end of file
diff --git a/3.0.4/doc/src/ComponentReference/wml.Setvar.html b/3.0.4/doc/src/ComponentReference/wml.Setvar.html
deleted file mode 100644
index e5b84dd..0000000
--- a/3.0.4/doc/src/ComponentReference/wml.Setvar.html
+++ /dev/null
@@ -1,138 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-<head>
-<title>wml:Setvar</title>
-<link rel="stylesheet" type="text/css" href="Tapestry.css" title="style">
-</head>
-<body>
-<table border="0" cellpadding="0" cellspacing="0" width="100%">
-  <tr> 
-    <td align="left"><a href="wml.SelectionField.html"><img alt="SelectionField" src="common-images/prev.png"></a></td>
-    <td align="middle"><a href="index.html"><img alt="Component Index" src="common-images/home.png" ></a></td>
-    <td align="right"><a href="wml.Timer.html"><img alt="Timer" src="common-images/next.png"></a></td>
-  <tr> 
-  <tr> 
-    <td colspan="3">
-      <hr>
-    </td>
-  </tr>
-  <tr> 
-    <td colspan="3"> 
-      <table border="0" cellpadding="4" cellspacing="4" width="100%">
-        <tr valign="top"> 
-          <td> 
-            <table>
-              <tr> 
-                <td><font size="+2"><b>Setvar</b></font></td>
-              </tr>
-              <tr> 
-                <td> <A href="../api/org/apache/tapestry/wml/Setvar.html">org.apache.tapestry.wml.Setvar</a> 
-                </td>
-              </tr>
-            </table>
-          </td>
-          <td> 
-            <table align="right" valign="middle" bgcolor="#c0c0c0" cellpadding="8">
-              <tr> 
-                <td>Non Visual Component</td>
-              </tr>
-            </table>
-          </td>
-        </tr>
-        <tr valign="center"> 
-          <td colspan="2">&nbsp;</td>
-        </tr>
-        <tr> 
-          <td colspan="2"> <b>Description</b> <br>
-            The wml:Setvar component specifies the variable to set in the current 
-            browser context as a side effect of executing a task such as &#60;go&gt;, 
-            &#60;prev&#62;, or &#60;refresh&#62;. </td>
-        </tr>
-        <tr> 
-          <td colspan="2"> <b>See Also</b> <br>
-            <A href="wml.Go.html">wml:Go</a> </td>
-        </tr>
-        <tr> 
-          <td colspan="2"> <b>Parameters</b> <br>
-            <table border="1" cellpadding="4" cellspacing="4" class="parameters">
-              <tr> 
-                <th>Name</th>
-                <th>Type</th>
-                <th>Direction</th>
-                <th>Required</th>
-                <th>Default</th>
-                <th>Description</th>
-              </tr>
-              <tr> 
-                <td>name</td>
-                <td>String</td>
-                <td>in</td>
-                <td>yes</td>
-                <td>&nbsp;</td>
-                <td>The name attribute specifies a WML variable name.</td>
-              </tr>
-              <tr> 
-                <td>value</td>
-                <td>String</td>
-                <td>custom</td>
-                <td>yes</td>
-                <td>&nbsp;</td>
-                <td>Bind value to the variable that should recieve the user input 
-                  string.</td>
-              </tr>
-            </table>
-            <p> Body: <strong>removed</strong><br>
-              Informal parameters: <strong>allowed</strong><br>
-              Reserved parameters: none </p>
-          </td>
-        </tr>
-        <tr> 
-          <td colspan="2"> 
-            <p><b>Example</b></p>
-            <p>Template</p>
-            <p> &lt;?xml version=&quot;1.0&quot;?&gt;<br>
-              &lt;!DOCTYPE wml PUBLIC &quot;-//WAPFORUM//DTD WML 1.2//EN&quot;<br>
-              &quot;http://www.wapforum.org/DTD/wml12.dtd&quot;&gt;</p>
-            <p>&lt;wml&gt;</p>
-            <p>&lt;card id=&quot;Hello&quot; title=&quot;Hello&quot;&gt;<br>
-              &nbsp;&lt;onevent type=&quot;onenterforward&quot;&gt;<br>
-              &nbsp;&nbsp;&lt;refresh&gt;<br>
-              &nbsp;&nbsp;&nbsp;&lt;setvar jwcid=&quot;@<a href="wml.Setvar.html">wml:Setvar</a>&quot; 
-              name=&quot;username&quot; value=&quot;ognl:username&quot;/&gt;<br>
-              &nbsp;&nbsp;&lt;/refresh&gt;<br>
-              &nbsp;&lt;/onevent&gt;<br>
-              &nbsp;&lt;p&gt;<br>
-              &nbsp;&nbsp;What is your name?<br>
-              &nbsp;&nbsp;&lt;input jwcid=&quot;userInput@<a href="wml.Input.html">wml:Input</a>&quot; 
-              name=&quot;username&quot; value=&quot;ognl:username&quot;/&gt;<br>
-              &nbsp;&lt;/p&gt;<br>
-              &nbsp;&lt;do type=&quot;accept&quot; label=&quot;Accept&quot;&gt;<br>
-              &nbsp;&nbsp;&lt;go jwcid=&quot;go@<a href="wml.Go.html">wml:Go</a>&quot; 
-              stateful=&quot;ognl:false&quot; listener=&quot;ognl:listeners.submit&quot;&gt;<br>
-              &nbsp;&nbsp;&nbsp;&lt;postfield jwcid=&quot;username@<a href="wml.Postfield.html">wml:Postfield</a>&quot; 
-              name=&quot;ognl:components.userInput.name&quot; value=&quot;ognl:username&quot;/&gt;<br>
-              &nbsp;&nbsp;&lt;/go&gt;<br>
-              &nbsp;&lt;/do&gt;<br>
-              &lt;/card&gt;<br><br>
-              &lt;/wml&gt; </p>
-            </td>
-        </tr>
-        <tr>
-          <td colspan="2">&nbsp;</td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-  <tr> 
-    <td colspan="3">
-      <hr>
-    </td>
-  </tr>
-  <tr> 
-    <td align="left"><a href="wml.SelectionField.html"><img alt="SelectionField" src="common-images/prev.png"></a></td>
-    <td align="middle"><a href="index.html"><img alt="Component Index" src="common-images/home.png" ></a></td>
-    <td align="right"><a href="wml.Timer.html"><img alt="Timer" src="common-images/next.png"></a></td>
-  </tr>
-</table>
-</body>
-</html>
\ No newline at end of file
diff --git a/3.0.4/doc/src/ComponentReference/wml.Timer.html b/3.0.4/doc/src/ComponentReference/wml.Timer.html
deleted file mode 100644
index b49939d..0000000
--- a/3.0.4/doc/src/ComponentReference/wml.Timer.html
+++ /dev/null
@@ -1,123 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-<head>
-<title>wml:Timer</title>
-<link rel="stylesheet" type="text/css" href="Tapestry.css" title="style">
-</head>
-<body>
-<table border="0" cellpadding="0" cellspacing="0" width="100%">
-  <tr> 
-    <td align="left"><a href="wml.Setvar.html"><img alt="Setvar" src="common-images/prev.png"></a></td>
-    <td align="right"><a href="index.html"><img alt="Component Index" src="common-images/home.png" ></a></td>
-  </tr>
-  <tr/> 
-  <tr> 
-    <td colspan="2">
-      <hr>
-    </td>
-  </tr>
-  <tr> 
-    <td colspan="3"> 
-      <table border="0" cellpadding="4" cellspacing="4" width="100%">
-        <tr valign="top"> 
-          <td> 
-            <table>
-              <tr> 
-                <td><font size="+2"><b>wml:Timer</b></font></td>
-              </tr>
-              <tr> 
-                <td> <A href="../api/org/apache/tapestry/wml/Timer.html">org.apache.tapestry.wml.Timer</a> 
-                </td>
-              </tr>
-            </table>
-          </td>
-          <td> 
-            <table align="right" valign="middle" bgcolor="#c0c0c0" cellpadding="8">
-              <tr> 
-                <td>Non Visual Component</td>
-              </tr>
-            </table>
-          </td>
-        </tr>
-        <tr valign="center"> 
-          <td colspan="2">&nbsp;</td>
-        </tr>
-        <tr> 
-          <td colspan="2"> <b>Description</b> <br>
-            The wml:Timer element declares a card timer, which provides a method 
-            for invoking a task automatically after some period of user inactivity. 
-            Any task or user action that activates the card starts the timer, 
-            and executing any task element stops it. You can only associate one 
-            task for each timer, and you can only define one timer for each card. 
-          </td>
-        </tr>
-        <tr> 
-          <td colspan="2"> <b>See Also</b> <br></td>
-        </tr>
-        <tr> 
-          <td colspan="2"> <b>Parameters</b> <br>
-            <table border="1" cellpadding="4" cellspacing="4" class="parameters">
-              <tr> 
-                <th>Name</th>
-                <th>Type</th>
-                <th>Direction</th>
-                <th>Required</th>
-                <th>Default</th>
-                <th>Description</th>
-              </tr>
-              <tr> 
-                <td>name</td>
-                <td>String</td>
-                <td>in</td>
-                <td>no</td>
-                <td>&nbsp;</td>
-                <td> The name attribute specifies the name of the variable to 
-                  be set with the value of the timer. The name variable's value 
-                  is used to set the timeout period upon timer initialisation. 
-                  The variable named by the name attribute will be set with the 
-                  current timer value when the card is exited or when the timer 
-                  expires. For example, if the timer expires, the name variable 
-                  is set to a value of "0". </td>
-              </tr>
-              <tr> 
-                <td>value</td>
-                <td>String</td>
-                <td>custom</td>
-                <td>no</td>
-                <td>0</td>
-                <td> The value attribute indicates the default value of the variable 
-                  named in the name attribute. When the timer is initialised and 
-                  the variable named in the name attribute is not set, the name 
-                  variable is assigned the value specified in the value attribute. 
-                  If the name variable already contains a value, the value attribute 
-                  is ignored. If the name attribute is not specified, the timeout 
-                  is always initialised to the value specified in the value attribute. 
-                </td>
-              </tr>
-            </table>
-            <p> Body: <strong>removed</strong><br>
-              Informal parameters: <strong>allowed</strong><br>
-              Reserved parameters: none </p>
-          </td>
-        </tr>
-        <tr> 
-          <td colspan="2"> <b>Examples</b> 
-            <p> Please see the documentation for the <a href="wml.Image.html">wml:Image</a> 
-              component.</p>
-          </td>
-        </tr>
-      </table>
-    </td>
-  </tr>
-  <tr> 
-    <td colspan="2">
-      <hr>
-    </td>
-  </tr>
-  <tr> 
-    <td align="left"><a href="wml.Setvar.html"><img alt="Setvar" src="common-images/prev.png"></a></td>
-    <td align="right"><a href="index.html"><img alt="Component Index" src="common-images/home.png" ></a></td>
-  </tr>
-</table>
-</body>
-</html>
\ No newline at end of file
diff --git a/3.0.4/doc/src/ContributorsGuide/.cvsignore b/3.0.4/doc/src/ContributorsGuide/.cvsignore
deleted file mode 100644
index 1936cc1..0000000
--- a/3.0.4/doc/src/ContributorsGuide/.cvsignore
+++ /dev/null
@@ -1 +0,0 @@
-html
diff --git a/3.0.4/doc/src/ContributorsGuide/ContributorsGuide.xml b/3.0.4/doc/src/ContributorsGuide/ContributorsGuide.xml
deleted file mode 100644
index 493d722..0000000
--- a/3.0.4/doc/src/ContributorsGuide/ContributorsGuide.xml
+++ /dev/null
@@ -1,1458 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- $Id$ -->
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!DOCTYPE book PUBLIC
-  "-//OASIS//DTD DocBook XML V4.1.2//EN"
-  "http://www.oasis-open.org/docbook/xml/4.0/docbookx.dtd" [
-  <!ENTITY % TapestryLinks SYSTEM "../common/TapestryLinks.xml">
-  %TapestryLinks;
-  
-]>
-<!-- Conventions:
-
-	Component ids are <varname>
-	Java packages and class names are <classname>
-	Tapestry component aliases are <classname>
-
-	In-line code snippets use <function>
-	Property paths and JavaBeans property names used <varname>
--->
-<book>
-  <title>Tapestry Contributor's Guide</title>
-  <bookinfo>
-    <author>
-      <firstname>Howard</firstname>
-      <surname>Lewis Ship</surname>
-    </author>
-    <copyright>
-      <year>2002</year>
-      <year>2003</year>
-      <holder>The Apache Software Foundation</holder>
-    </copyright>
-  </bookinfo>
-  
-<chapter id="intro">
-	<title>Introduction</title>
-	
-<para>
-This document is a guide to developers who want to go
-beyond merely developing applications <emphasis>using</emphasis> Tapestry,
-and want to extend and improve Tapestry itself.
-</para>
-
-<para>
-Tapestry has benefitted over the first two years of its 
-development from having a focused vision and, predominantly,
-a single developer. At the time of this writing, May 2002,
-the Tapestry community is truly coming alive, with
-new developers contributing fixes, components and documentation.
-</para>
-
-<para>
-The goal is to maintain the stability of Tapestry even as it
-shifts from a one-man-show to a true community effort.  Meanwhile
-it is vitally important to not to sacrifice quality in either
-code or <emphasis>documentation</emphasis> if Tapestry is to
-stay on track.
-</para>
-
-<para>
-Contributing to Tapestry requires a commitment to produce excellent code, 
-examples and documentation.  In fact, proper documentation in JavaDoc and
-as updates to the tutorials and manuals represents the
-<emphasis>dominant</emphasis> amount of effort when contributing to Tapestry.
-</para>
-
-
-</chapter>  
-
-<chapter id="cvs">
-	<title>CVS Access</title>
-
-<para>
-Using Eclipse, obtaining the source code takes only a few steps.   Tapestry
-compiles using some libraries from &JBoss; 3.0.6 and &Jetty; 4.x which must be downloaded first.
-</para>
-
-<para>
-Eclipse must be configured with the location of JBoss, this is done from the preferences
-panel.  A new entry for <literal>JBOSS_DIR</literal> should be added.
-</para>
-
-<figure>
-	<title>Eclipse: Java Classpath Preferences</title>
-        <mediaobject>
-          <imageobject>
-            <imagedata fileref="images/eclipse-classpath.png" format="PNG"/>
-          </imageobject>
-        </mediaobject>	
-</figure>
-
-<para>
-Activate the CVS Repositories view and use the context menu to create a new CVS Repository location.
-This raises a panel for defining connection information.  Fill in your own
-Jakarta name and password:
-</para>
-
-<figure>
-	<title>Eclipse: New CVS Repository Location</title>
-        <mediaobject>
-          <imageobject>
-            <imagedata fileref="images/eclipse-add-repository.png" format="PNG"/>
-          </imageobject>
-        </mediaobject>	
-</figure>
-
-<para>
-Next, open the new CVS Repository location.  Expand the "HEAD" node, then scroll down to the "jakarta-tapestry" module.
-Right click and select "Check Out As Project".
-</para>
-
-
-<figure>
-	<title>Eclipse: Check Out Project</title>
-        <mediaobject>
-          <imageobject>
-            <imagedata fileref="images/eclipse-check-out-project.png" format="PNG"/>
-          </imageobject>
-        </mediaobject>	
-</figure>
-
-<para>
-Eclipse will checkout the latest versions of all the Tapestry code and compile it.
-</para>
-
-<para>
-You can access the Tapestry repository using command line CVS or other tools, as well.  Details
-for using command line CVS are available at the &Jakarta;.
-</para>
-
-
-</chapter>
-
-<chapter id="building">
-	<title>Building Tapestry</title>
-	
-<para>
-Tapestry is built using &Ant; 1.5.  In addition,
-Tapestry includes the necessary control files to allow
-development using the excellent open-source IDE, &Eclipse;.
-</para>
-
-<para>
-To perform a full build from the command line, you must have
-JDK 1.3 or better installed, as well
-as &JBoss; 3.0.6.
-</para>
-
-<para>
-You must create the file <filename>config/build.properties</filename>
-(under the Tapestry root directory).  This file defines a property,
-<literal>jboss.dir</literal> that identifies the full pathname
-to the JBoss installation and the &Jetty; installation.  A sample file is provided.
-<tip>
-	<para>
-	Be sure to use forward slashes for the path name, even
-	under Windows.  Using backslashes, the escape character
-	in property files, will cause the build to fail, since
-	Ant will be using incorrect paths to the libraries obtained
-	from the JBoss distribution.
-	</para>
-</tip>
-</para>
-
-<section id="building.subprojects">
-	<title>Tapestry Subprojects</title>
-	
-<para>
-The Tapestry source tree contains multiple sub-projects, each in its own subdirectory,
-with its own Ant build file and own source code tree.
-A root level build file (described in the <link linkend="building.targets">next section</link>)
-performs builds over all sub-projects.
-</para>
-
-<variablelist>
-	<title>Tapestry Sub-Projects</title>
-	<varlistentry>
-		<term><filename>framework</filename></term>
-		<listitem>
-		<para>
-		Contains the core framework, builds &TapestryFrameworkJar;.
-		</para>
-		</listitem>
-	</varlistentry>
-	
-
-	<varlistentry>
-		<term><filename>contrib</filename></term>
-		<listitem>
-		<para>
-		Builds &TapestryContribJar;.
-		</para>
-		</listitem>
-	</varlistentry>
-
-
-	<varlistentry>
-		<term><filename>junit</filename></term>
-		<listitem>
-		<para>
-		Builds and runs JUnit tests.
-		</para>
-		</listitem>
-	</varlistentry>
-
-
-	<varlistentry>
-		<term><filename>examples/Workbench</filename></term>
-		<listitem>
-		<para>
-		Builds <filename>workbench.war</filename>.
-		</para>
-		</listitem>
-	</varlistentry>
-
-
-	
-	
-	<varlistentry>
-		<term><filename>examples/VlibBeans</filename></term>
-		<listitem>
-		<para>
-		Builds <filename>vlibbeans.jar</filename>, the EJBs used
-		by the Virtual Library demonstration.
-		</para>
-		</listitem>
-	</varlistentry>
-	
-
-	<varlistentry>
-		<term><filename>examples/Vlib</filename></term>
-		<listitem>
-		<para>
-		Builds <filename>vlib.war</filename>, the presentation
-		layer of the Virtual Library demonstration.
-		</para>
-		</listitem>
-	</varlistentry>
-
-	<varlistentry>
-		<term><filename>examples/VlibEAR</filename></term>
-		<listitem>
-		<para>
-		Builds <filename>vlib.ear</filename> from
-		<filename>vlibbeans.jar</filename> and
-		<filename>vlib.war</filename>.
-		</para>
-		</listitem>
-	</varlistentry>
-
-	<varlistentry>
-		<term><filename>doc/src/DevelopersGuide</filename></term>
-		<listitem>
-		<para>
-		Builds the Tapestry Developer's Guide documentation.
-		This guide is out of date, as is being replaced.
-		</para>
-		</listitem>
-	</varlistentry>
-
-	<varlistentry>
-		<term><filename>doc/src/UsersGuide</filename></term>
-		<listitem>
-		<para>
-Builds the Tapestry Users' Guide (the replacement for the Developer's
-Guide).  This document is still incomplete.  See, you just can't win.
-		</para>
-		</listitem>
-	</varlistentry>
-
-	<varlistentry>
-		<term><filename>doc/src/ContributorsGuide</filename></term>
-		<listitem>
-		<para>
-		Builds this very documentation.
-		</para>
-		</listitem>
-	</varlistentry>		
-	
-	<varlistentry>
-		<term><filename>doc/src/ComponentReference</filename></term>
-		<listitem>
-		<para>
-		Builds the component reference documentation.
-		</para>
-		</listitem>
-	</varlistentry>		
-</variablelist>
-
-</section>
-
-<section id="building.targets">
-	<title>Build Targets</title>
-	
-<para>
-The following Ant build targets are available from the Tapestry root directory:
-
-<variablelist>
-    <title>Root Targets</title>
-    <varlistentry>
-      <term>clean</term>
-      <listitem>
-        <para>Cleans each sub-project and deletes derived files (such as
-        the Tapestry framework JAR and examples).</para>
-      </listitem>
-    </varlistentry>
-    
-    <varlistentry>
-    	<term>clean-all</term>
-    	<listitem>
-    	<para>
-    	As with <literal>clean</literal>, but also deletes
-    	all documentation.
-    	</para>
-    	</listitem>
-    </varlistentry>
-    
-    <varlistentry>
-    	<term>documentation</term>
-    	<listitem>
-    	<para>
-    	Builds all documentation (see notes below).
-    	</para>
-    	</listitem>
-    </varlistentry>
-
-    <varlistentry>
-    	<term>install</term>
-    	<listitem>
-    	<para>
-    	Performs a full build, by re-invoking <literal>install</literal>
-    	in each sub-project.
-    	</para>
-    	</listitem>
-    </varlistentry>
-
-
-
-    <varlistentry>
-    	<term>javadoc</term>
-    	<listitem>
-    	<para>
-   		Creates Tapestry API documentation.
-    	</para>
-    	</listitem>
-    </varlistentry>
-    
-    
-    <varlistentry>
-    	<term>junit</term>
-    	<listitem>
-    	<para>
-    	Runs all &JUnit; tests.
-    	</para>
-    	</listitem>
-    </varlistentry>
-
-    <varlistentry>
-    	<term>clover</term>
-    	<listitem>
-    	<para>
-    	Runs all &JUnit; tests and builds a code coverage report
-    	(using the Clover tool).
-    	</para>
-    	</listitem>
-    </varlistentry>
- 
-       
-</variablelist>
-		
-
-</para>
-
-</section>
-
-<section id="building.doc-setup">
-	<title>Documentation Setup</title>
-	
-<para>
-Tapestry documentation, including this manual, is also generated using Ant.  Documentation
-source is in &DocBook; XML format, and uses XSL transformation to generate readable HTML.
-Tapestry uses &Saxon; to generate HTML documentation, and
-&Fop; to generate PDF documentation.
-
-<itemizedlist>
-
-<listitem>
-<para>
-Download and unpack the &Saxon; distribution, release 6.5.2 exactly (later versions do not work).
-</para>
-</listitem>
-
-<listitem>
-<para>
-	Obtain the latest copies of the two DocBook distributions and place the files
-	in the <filename>ext-dist</filename> directory.
-	Details are in the file
-	<filename>doc/src/common/Readme.html</filename>.
-	</para>	
-</listitem>
-
-<listitem>
-<para>
-Copy <filename>saxon.jar</filename> into the
-Ant <filename>lib</filename> directory.  
-</para>
-</listitem>
-
-<listitem>
-<para>
-
-Update your
-<envar>ANT_OPTS</envar> environment variable
-to add the following two system properties:
-
-	<itemizedlist>
-          <listitem>
-            <para>
-              -Djavax.xml.parsers.DocumentBuilderFactory=org.apache.crimson.jaxp.DocumentBuilderFactoryImpl
-            </para>
-          </listitem>
-          <listitem>
-            <para>
-           -Djavax.xml.parsers.SAXParserFactory=org.apache.crimson.jaxp.SAXParserFactoryImpl
-            </para>
-          </listitem>
-	</itemizedlist>
-
-
-</para>
-</listitem>
-
-<listitem>
-<para>
-Download &Fop; 0.20.4 and unpack into a permanent directory.
-</para>
-</listitem>
-
-<listitem>
-<para>
-Update <filename>config/build.properties</filename> and add
-a <literal>fop.dir</literal> entry, identifying the directory
-into which you unpacked FOP.  Be sure to use an absolute
-path name, and only forward slashes.
-</para>
-</listitem>
-
-<listitem>
-<para>
-Get a copy of <ulink url="http://java.sun.com/products/jimi/">JIMI</ulink>
-(an imaging package from Sun, needed by FOP to process PNG image files), and
-unpack it to temporary directory.
-</para>
-</listitem>
-
-<listitem>
-<para>
-Copy <filename>JimiProClasses.zip</filename> into the <filename><replaceable>FOP</replaceable>/lib</filename>
-directory.
-</para>
-</listitem>
-
-</itemizedlist>
-
-</para>
-
-</section>
-
-<section id="building.clover-setup">
-	<title>Clover Setup</title>
-	
-<para>
-<ulink url="http://www.thecortex.net/clover">Clover</ulink> is a properietary tool
-that gathers code coverage information and generates reports from it.  They
-have kindly donated a license for Clover to the Tapestry project.
-</para>
-
-<para>
-To configure for clover:
-<itemizedlist>
-
-<listitem>
-<para>
-Get a copy of the Clover distribution.  
-<ulink url="http://www.thecortex.net/clover/">Cortex eBusiness</ulink> has donated a copy of Clover to
-support Tapestry.  The distribution is
-available from
-&HowardLewisShipEmail;.
-</para>	
-</listitem>
-
-<listitem>
-<para>Extract the Clover distribution to a non-temporary directory.
-</para>
-</listitem>
-
-<listitem>
-<para>
-Modify <filename>config/build.properties</filename> and add an entry
-for <literal>clover.dir</literal>.  As usual, provide the absolute
-pathname to the Clover directory, using only forward slashes.
-</para>
-</listitem>
-
-<listitem>
-<para>
-Copy <filename>clover.jar</filename> to the 
-<filename><replaceable>Ant</replaceable>/lib</filename> directory.
-</para>
-</listitem>
-
-</itemizedlist>
-</para>
-
-
-<para>
-The Clover report executes from the <filename>junit</filename> directory, using the Ant
-target <literal>clover</literal>.  It  builds the clover-enhanced version of the framework
-classes, and executes the JUnit test suite twice (with all logging enabled and 
-then with all logging disabled),
-then generates the HTML report into the
-<filename>web/doc/clover</filename> directory.
-</para>
-
-</section>
-
-</chapter>
-
-<chapter id="standards">
-	<title>Development Standards</title>
-	
-<para>
-This chapter covers a number of standards, both in code and in procedure, expected by Tapestry contributors.
-</para>
-
-<section id="standards.id-symbol">
-	<title>Use of &dollar;Id$ Symbol</title>
-	
-<para>
-Every file checked into the CVS repository should have the &dollar;Id$ symbol inside a comment, near the top
-of the file.  The <literal>&dollar;Id$</literal> token is expanded by CVS into a useful header, identifying the revision
-of the file, date last changed, and name of last user to change the file.
-</para>
-
-<para>
-For example, the &dollar;Id$ for this document is <literal>$Id$</literal>.
-</para>
-
-</section>
-
-<section id="standards.typecomment">
-	<title>Type Comment</title>
-	
-<para>
-Each Java file <emphasis>must</emphasis> have a complete and useful type comment.  Type comments
-must come after all <literal>import</literal> statements, and before the start of the class.
-</para>
-
-<figure>
-	<title>Type Comment</title>
-<programlisting>
-/**
- * <replaceable>A useful description of the class or interface, especially covering</replaceable>
- * <replaceable>how it is used, and what other classes or interfaces it interacts with.</replaceable>
- *
- * @author <replaceable>Your Name</replaceable>
- * @version &dollar;Id$
- * @since <replaceable>Version</replaceable>
- */
-</programlisting>	
-</figure>
-
-<para>
-The <replaceable>Version</replaceable> should be replaced with the numeric version number of
-the Tapestry release the type will first appear in.  This is the 
-<link linkend="releases">minor release number</link>; for example,
-a change introduced in release <literal>2.3-beta-3</literal>
-would be identified as <literal>2.3</literal>.
-</para>
-
-</section>
-
-<section id="standards.javadoc">
-	<title>JavaDoc</title>
-	
-<para>
-All methods should be commented, with the following exceptions:
-
-<itemizedlist>
-	<listitem>
-	<para>
-	Simple accessor methods with no side-effects.
-	</para>
-	</listitem>	
-	
-	<listitem>
-	<para>
-	Methods that are fully described by an interface and
-	don't add any additional behaviors.
-	</para>
-	</listitem>
-</itemizedlist>
-</para>
-
-<para>
-Parameters and return values should be identified.  <literal>@throws</literal>
-should identify when any checked exceptions are thrown; additional
-<literal>@throws</literal>
-entries should describe any runtime exceptions that may also be thrown.
-</para>
-
-<para>
-Methods should always include a <literal>@since</literal> entry, unless the method
-was added as part of a new Java class or interface, in which case
-the <literal>@since</literal> for the containing type is sufficient.
-Use the same version number as <link linkend="standards.typecomment">type comments</link>
-when adding individual methods.
-</para>
-
-<para>
-Try not to skimp on the comment (it is often best to write the comment before writing any code).
-Tapestry has some of the best documentation of any open source project and that should
-be maintained.  Remember to try and answer the question <emphasis>why?</emphasis>, which is
-always much more interesting and useful than <emphasis>how?</emphasis> or <emphasis>what?</emphasis>.
-</para>
-
-<para>
-It is appropriate to create JavaDoc comments for variables, even private variables (to at least
-provide an <literal>@since</literal> value).
-</para>
-
-<para>
-Collections (from package <literal>java.util</literal>) should be documented to identify
-the type of object stored, and for <classname>Map</classname>
-the type of key.  Example: <literal>List of {@link IRender}</literal>, or
-<literal>Map of {@link IBinding} keyed on String name</literal>.
-</para>
-
-<para>
-When a method returns a collection type, the documentation should indicate if it is safe
-for the caller to modify the collection or not.  In general, it is best to always return an immutable
-copy of a collection, but for efficiency this is not always reasonable.
-</para>
-
-<para>
-Also document any cases where a parameter is allowed to be null, or a return value may be null.	
-</para>
-
-<para>
-And don't forget to make liberal use of JavaDoc links (<literal>@link</literal>) which makes the
-documentation far easier to use.
-</para>
-
-</section>
-
-<section id="standards.java-formatting">
-	<title>Java Code Formatting</title>
-	
-<para>
-Ah, a <emphasis>religous issue</emphasis>. The most important things are to be consistent
-(an editor that indents code for you is helpful) and to
-<emphasis>conform to the existing style</emphasis> when editting someone else's code.
-</para>
-
-<para>
-Tapestry is formatted using <emphasis>spaces</emphasis> (not tabs), 
-and an indent of four.
-</para>
-
-<para>
-All the code currently in the repository has been formatted using the
-Eclipse IDE.  My personal preference is to include a newline before opening braces.
-In addition, a maximum line-length of 100 characters has been used.  These
-preferences are easy to setup in Eclipse:
-</para>
-
-<figure>
-	<title>Eclipse: Java Code Formatting Preferences</title>
-        <mediaobject>
-          <imageobject>
-            <imagedata fileref="images/eclipse-java-formatting.png" format="PNG"/>
-          </imageobject>
-        </mediaobject>	
-</figure>
-
-</section>
-
-<section id="standards.naming">
-	<title>Naming Conventions</title>
-
-<para>
-Standard Java guidelines are expected to be followed.  
-Class names are capitalized (example: <classname>MyClass</classname>).
-Methods start with a lower-case character (example: <literal>myMethod</literal>).
-</para>
-
-<para>
-Static final variables used as constants
-are in upper-case (example: <literal>MY_CONSTANT</literal>).
-</para>
-
-<para>
-Private member variables (both instance and static) are named with a leading underscore
-(example: <literal>_myVariable</literal>).  Public member variables are to be avoided.
-</para>
-
-<note>
-<title>Naming in transition</title>
-<para>
-I've resisted the leading underscore syntax for a long time; the rationale behind it
-is to make it possible, at a glance, to visually seperate instance variables
-from local variables and parameters.  Previously, I've always maintained that
-the problem was methods that were too large; lately I've changed
-my mind ... the underscore naming helps when debugging and helps avoid
-a number of naming collisions.
-</para>
-
-<para>
-At the time of this writing, 2.1-beta-1, very little of the code used
-the new naming.  Over time, mixed in with other bug fixes, renaming will
-occur (&Eclipse; helps with this greatly).  New code will be written to conform.
-</para>
-</note>
-
-
-<para>
-Interfaces in Tapestry are prefixed with the letter 'I' (example: <literal>IRequestCycle</literal>).
-Implementations (often in a different package)
-strip off the 'I' (example: <literal>RequestCycle</literal>).  Interfaces related to JavaBean events 
-do not start with an 'I' (example: <literal>PageDetachListener</literal>).
-</para>
-
-<para>
-Base classes, classes which are concrete and functional, but often extended, are prefixed with 'Base' (example:
-<literal>BaseComponent</literal>).  Abstract classes are prefixed with 'Abstract' (example:
-<literal>AbstractEngine</literal>).  Classes which are functional and only rarely subclassed are often
-prefixed with 'Default' (example: <literal>DefaultScriptSource</literal>).
-</para>
-
-<para>
-The base package for the framework JAR (&TapestryFrameworkJar;) is <literal>org.apache.tapestry</literal>.
-The base package for the contrib JAR (&TapestryContribJar;) is <literal>org.apache.tapestry.contrib</literal>.
-</para>
-
-</section>
-
-</chapter>
-
-<chapter id="releases">
-	<title>Tapestry Release Numbering</title>
-	
-<para>
-Tapestry release numbering is relatively simple, as long as you don't look back in time
-(the less managable numbering system used through release 2.0.5 is described shortly).
-</para>
-
-<para>
-Tapestry releases consist of a major version, a minor version and a incremental version.
-The pattern 
-<literal>
-<replaceable>major</replaceable>.<replaceable>minor</replaceable>-<replaceable>incremental</replaceable>-<replaceable>index</replaceable>
-</literal>
-is used, for example: <literal>2.1</literal>, <literal>2.2-alpha-3</literal>
-or <literal>2.3-beta-1</literal>.
-</para>
-
-<para>
-The major version represents large-scale changes in the framework ... short of translating Tapestry
-to another language (say, Python or Ruby), this is not likely to happen again.  Tapestry
-is currently in major release 2.
-</para>
-
-
-<para>
-The minor version represents a milestone release, encompassing
-the introduction of new functionality and bug fixes
-in a stable manner.  <literal>2.1</literal> or <literal>2.2</literal> would be examples
-of milestone releases.
-</para>
-
-<para>
-An incremental release represents a transition from one milestone release to the next.
-Incremental releases are <literal>alpha</literal>, <literal>beta</literal> or
-<literal>rc</literal> (release candidate).
-Typically, after a milestone release there will
-be a series of alpha, then beta, then rc releases, leading up to 
-the next milestone release.
-A possible sequence is <literal>2.1</literal>, <literal>2.2-alpha-1</literal>,
-<literal>2.2-beta-1</literal>, <literal>2.2-rc-1</literal>, <literal>2.2</literal>.
-</para>
-
-<para>
-Typically, there will be several incremental releases of the same type, numbered from 1 up.
-Alpha releases contain significant functionality changes, beta releases represent
-bug fixes to those changes (stabilizing the changes), 
-and rc (release chandidate) releases are expected
-to be stable versions of the next minor release (though any problems can spur further
-release candidates).
-</para>
-
-<para>
-Through Tapestry release 2.0.5, numbering was a bit different.  Under the modern scheme, 
-2.0.1 would be named <literal>2.1-alpha-1</literal>, 2.0.2 would be <literal>2.1-alpha-2</literal>,
-and 2.0.5 would be <literal>2.1-beta-1</literal>.  Modern release numbering
-begins with <literal>2.1-beta-2</literal> (the release immediately following 2.0.5).  
-</para>
-
-</chapter>
-
-<chapter id="procedures">
-	<title>Development Procedures</title>
-	
-<para>
-This chapter defines procedures for development of Tapestry.  This includes many things not directly
-related to coding, such as documentation and interacting with the CVS repository.
-</para>
-
-<section id="procedures.deprecation">
-	<title>Deprecating methods and classes</title>
-	
-<para>
-Tapestry is being used by a increasingly large community of developers and it is necessary
-that they have some stability in their development.
-</para>
-
-<para>
-To that end, classes and methods must follow a developer-friendly lifecycle.
-If a method or class must be deleted, it should be marked as deprecated in one minor release,
-and can be removed in the following minor release.
-</para>
-
-<para>
-For example, a method may be marked as
-deprecated in release 2.2-alpha-1.  This change isn't considered 
-"real" until release 2.2.  The method can be removed any time after that, say in release 2.3-alpha-3,
-and the removal becomes "real" in release 2.3.
-</para>
-
-<para>
-Don't simply mark a method as deprecated, give the end-developer
-the information needed adapt their code.  Use the following template
-as part of the Javadoc comment:
-
-<informalexample>
-<programlisting>
-  @deprecated To be removed in <replaceable>Version</replaceable>.
-    Use {@link <replaceable>SomeClass#someMethod(...)</replaceable>} instead.
-</programlisting>
-</informalexample>
-</para>
-
-
-<para>
-It is also important for the changer to make the transition as simple as possible for
-the end-developer.  Base classes and default implementations should be changed
-to make use of the new API in such as way that, at most, a recompile
-of the end-developer's classes is required.
-</para>
-
-<para>
-Sometimes, changes require a lack of backwards compatibility.  If
-a method has to change and the old signature can't be maintained, then
-simply change it ... but be sure to document the change in the
-Tapestry release notes (<filename>web/new.html</filename>).
-</para>
-
-
-</section>
-
-<section id="procedures.junit">
-	<title>JUnit Tests</title>
-	
-
-<para>
-Tapestry has an excellent JUnit test suite, with code coverage
-figures over 80% at the time of this writing (2.4-alpha-4).  It is
-<emphasis>required</emphasis> that changes to the framework
-be accompanied by additional JUnit tests (typically, mock tests; see 
-below) to validate the changes.  In addition, there is an ongoing
-effort to fill in the gaps in the existing suite; the suite should reach
-over 90% code coverage.
-</para>
-
-<para>
-In order to compile and run the JUnit test suite you need to download 
-<literal>junit.jar</literal> and <literal>jdom-b8.jar</literal>, 
-and place them in the <literal>ext-dist</literal> directory. 
-The official sites to download the libraries are listed in the README file
-in that directory.
-</para>
-
-<para>
-Some of the JUnit tests now require &Jython;.  You must
-download and install Jython 2.1,
-then configure <literal>jython.dir</literal> in <filename>config/build.properties</filename>
-to point to the install directory.  As usual, use an absolute path and forward slashes only.  To run
-the JUnit test suite within Eclipse, you must
-set the <literal>JYTHON_DIR</literal> classpath variable.
-</para>
-
-<para>
-JUnit test source code is placed into the <filename class="directory">junit/src</filename> source tree.
-The package name for JUnit tests is <literal>org.apache.tapestry.junit</literal>.
-</para>
-
-<para>
-Less than half of Tapestry is tested using traditional JUnit tests.  The majority of JUnit testing occurs using
-a system of mock unit tests.  Mock testing involves replacing the key classes of the
-Servlet API (<classname>HttpServletRequest</classname>, <classname>HttpSession</classname>, etc.) with
-out own implementations, with extensions that allow for checks and validations.  Instead of processing a series of
-requests over HTTP, the requests are driven by an XML script file, which includes output checks.
-</para>
-
-<para>
-Generally, each bit of functionality can be tested using its own mini-application.  
-Create the application as
-<filename>junit/context<replaceable>X</replaceable></filename>.  This is much easier now, 
-using Tapestry 3.0 features
-such as dynamic lookup of specifications and implicit components.
-</para>
-
-<para>
-The Mock Unit Test Suite is driven by scripts (whose structure is described below).  The suite
-searches the directory <filename>junit/mock-scripts</filename> for files with the ".xml" extension.
-Each of these is expected to be a test script.  The order in which scripts are executed is
-arbitrary; scripts (and JUnit tests in general) should never rely on any order of execution.
-</para>
-
-<para>
-Test scripts are named <filename>Test<replaceable>Name</replaceable>.xml</filename>.
-</para>
-
-
-<note>
-<para>
-The XML script is not validated, and invalid elements are
-generally ignored.  The class <classname>MockTester</classname>
-performs the test, and its capabilities are in fluxx, with
-new capabilities being added as needed.
-</para>
-</note>
-
-<para>
-A test script consists of an <sgmltag class="starttag">mock-test</sgmltag>
-element.  Within it, the virtual context and servlet are defined.
-</para>
-
-<programlisting>
-<![CDATA[
-<mock-test>
-  <context name="c6" root="context6"/>
-
-  <servlet name="app" class="org.apache.tapestry.ApplicationServlet">
-    <init-parameter name="org.apache.tapestry.engine-class"
-       value="org.apache.tapestry.junit.mock.c6.C6Engine"/>
-  </servlet>
-]]>
-</programlisting>
-
-<para>
-The name for the context becomes the leading term in any
-generated URLs.  Likewise, the servlet name becomes the second
-term.  The above example will generate URLs that reference
-<literal>/c6/app</literal>.  Specifying a <literal>root</literal>
-for a context identifies the root context directory (beneath the top level
-<filename>junit</filename> directory).  In this example, HTML templates
-go in <filename>context6</filename> and specifications
-go in <filename>context6/WEB-INF</filename>.
-</para>
-
-<para>
-Following the <sgmltag class="starttag">servlet</sgmltag>
-and <sgmltag class="starttag">context</sgmltag> elements, a series
-of <sgmltag class="starttag">request</sgmltag> elements.  Each such element
-simulates a request.  A request specifies any query parameters passed as part
-of the request, and contains a number of assertions that test
-either the results, generally in terms of searching for strings
-or regular expressions within the HTML response.
-</para>
-
-<programlisting>
-<![CDATA[
-<request>
-  <parameter name="service" value="direct"/>
-  <parameter name="context" value="0/Home/$DirectLink"/>
-  
-  <assert-output name="Page Title">
-<![CDATA[
-<title>Persistant Page Property</title>
-]]>]]&gt;<![CDATA[
-  </assert-output>
-]]>
-</programlisting>
-
-<warning>
-<para>
-As in the above example, it is very important
-that HTML tags be properly escaped with the XML CDATA construct.
-</para>
-</warning>
-
-<para>
-Adding <literal>failover="true"</literal> to the
-<sgmltag class="starttag">request</sgmltag> simulates a failover.  The contents
-of the &HttpSession; are serialized,
-then deserialized.  This ensures that all the data stored into the 
-&HttpSession; will survive a failover to a new server within
-a cluster.
-</para>
-
-<para>
-All of the assertion elements expect a <literal>name</literal>
-attribute, which is incorporated into any error message
-if the assertion fails (that is, if the expected output
-is not present).
-</para>
-
-
-<para>
-The <sgmltag class="starttag">assert-output</sgmltag> element checks for the
-presence of the contained literal output, contained within the
-element.  Leading and trailing whitespace is trimmed before
-the check is made.
-</para>
-
-<programlisting>
-<![CDATA[
-  <assert name="Session Attribute">
-  request.session.getAttribute("app/Home/message").equals("Changed")
-  </assert>				
-]]>
-</programlisting>
-
-<para>
-The <sgmltag class="starttag">assert</sgmltag> element checks
-that the provided OGNL expression evaluates to true.
-</para>
-
-<programlisting>
-<![CDATA[
-  <assert-regexp name="Error Message">
-<![CDATA[
-<span class="error">\s*You must enter a value for Last Name\.\s*</span>
-]]>]]&gt;<![CDATA[		
-  </assert-regexp> 
-]]>
-</programlisting>
-
-<para>
-The <sgmltag class="starttag">assert-regexp</sgmltag> looks
-for a regular expression in the result, instead of a simple literal
-string.
-</para>
-
-<programlisting>
-<![CDATA[
-  <assert-output-matches name="Selected Radio" subgroup="1">
-<![CDATA[
-<input type="radio" name="inputSex" checked="checked" value="(.*?)"/>
-]]>]]&gt;<![CDATA[
-    <match>1</match>
-  </assert-output-matches>
-]]>
-</programlisting>
-
-<para>
-The <sgmltag class="starttag">assert-output-matches</sgmltag>
-is the most complicated assertion.  It contains a regular expression
-which is evaluated.  For each match, the subgroup value is extracted,
-and compared to the next <sgmltag class="starttag">match</sgmltag>
-value.  Also, the count of matches (vs. the number of
-<sgmltag class="stattag">match</sgmltag> elements) is checked.
-</para>
-
-<programlisting>
-<![CDATA[
-  <assert-output-stream name="Asset Content"
-    content-type="image/gif"
-    path="foo/bar/baz.gif"/>
-]]>
-</programlisting>
-
-<para>
-The <sgmltag class="starttag">assert-output-stream</sgmltag>
-element is used to compare the entire response to a static file
-(this is normally associated with private assets).  A content type
-must be specified, as well as a relative path to a file to compare
-against.  The path is relative to the junit directory.  The
-response must match the specified content type and actual content.
-</para>
-
-<programlisting>
-<![CDATA[
-  <assert-exception name="Exception">
-  File foo not found.
-  </assert-exception>
-]]>
-</programlisting>
-
-<para>
-The <sgmltag class="starttag">assert-exception</sgmltag> element
-is used to check when an request fails entirely (is unable to send back a
-response).  This only occurs when the application specification contains invalid
-data (such as an incorrect class for the engine), or when the Exception page
-is unable to execute.  The body of the element is matched against the exception's 
-message property.
-</para>
-
-<note>
-<title>Force a failure, then check for correctness</title>
-<para>
-Sometimes the tests themselves have bugs.  A useful technique is
-to purposely break the test to ensure that it is checking for what
-it should check, then fix the test.  For example, adding <literal>XXX</literal>
-into a <sgmltag class="starttag">assert-output</sgmltag>.  Run the test suite
-and expect a failure, then remove the <literal>XXX</literal> and
-re-run the test, which should succeed.
-</para>
-</note>
-
-</section>
-
-<section id="procedures.documentation">
-	<title>Documentation</title>
-	
-<para>
-Documentation is much harder than coding, but the ongoing success of Tapestry depends on maintaining
-the quality of documentation.  Tapestry documentation is written using &DocBook; XML format, using
-XSL stylesheets to convert to final documentation.
-</para>
-
-<para>
-Changes to the framework usually require a change in documentation to the Tapestry Developer's Guide.
-</para>
-	
-</section>
-
-<section id="procedures.component-doc">
-	<title>Component Documentation</title>
-	
-<warning>
-<para>
-This section is out of date.  In general, each component should
-include a link to the Component Reference page for the component.
-The Component Reference page has a format and content
-similar to what's listed here.
-</para>
-</warning>
-	
-<para>
-Although there is limited documentation about components in their component specification file, that documentation
-is designed to be a short reminder, not the complete documentation.  Full documentation goes into
-the component's Java file, as part of its type comment JavaDoc.
-</para>
-
-<para>
-Component documentation consists of a table, identifying all the formal parameters of the component.
-In addition, a note indicating whether informal parameters are allowed, and if the component may
-have a body (that is, wrap other components) is supplied at the end.
-</para>
-
-<figure>
-	<title>Component Documentation Template</title>
-<programlisting>
-/**
- * <replaceable>Type comment documentation ...</replaceable>
- *
- * &lt;p&gt;&lt;table border=1&gt;
- * &lt;tr&gt;
- *   &lt;th&gt;Parameter&lt;/th&gt;
- *   &lt;th&gt;Type&lt;/th&gt;
- *   &lt;th&gt;Direction&lt;/th&gt;
- *   &lt;th&gt;Required&lt;/th&gt;
- *   &lt;th&gt;Default&lt;/th&gt;
- *   &lt;th&gt;Description&lt;/th&gt;
- *  &lt;/tr&gt;
- *
- * &lt;tr&gt;
- *   &lt;td&gt;<replaceable>name</replaceable>&lt;/td&gt;
- *   &lt;td&gt;<replaceable>{@link Type}</replaceable>&lt;/td&gt;
- *   &lt;td&gt;<replaceable>in|out|in-out</replaceable>&lt;/td&gt; <co id="procedures.component-doc.direction"/>
- *   &lt;td&gt;<replaceable>yes|no</replaceable>&lt;/td&gt;
- *   &lt;td&gt;<replaceable>Default value</replaceable>&lt;/td&gt; <co id="procedures.component-doc.default"/>
- *   &lt;td&gt;<replaceable>Full description</replaceable>&lt;/td&gt;
- * &lt;/tr&gt;
- *
- * ...
- *
- * &lt;p&gt;Informal parameters are <replaceable>[not]</replaceable> allowed.  The component
- * may <replaceable>[not]</replaceable> contain a body.
- *
- * ...
- *
- */
-</programlisting>
-<calloutlist>
-	<callout arearefs="procedures.component-doc.direction">
-	<para>
-	This describes how the component uses its binding.
-	<literal>in</literal> indicates the binding is read, but never updated, which is
-	the most common case.
-	<literal>out</literal> indicates the binding is updated, but not read; this is rare, but
-	does apply to some parameters of &Foreach;, for example.
-	<literal>in-out</literal> is common used with certain form parameters.
-	</para>
-	</callout>
-	
-	<callout arearefs="procedures.component-doc.default">
-	<para>
-	If the parameter is required, then this is usually specified as &amp;nbsp; (non-breaking space).
-	</para>
-	</callout>
-</calloutlist>
-	
-</figure>
-
-
-<para>
-Recently, <ulink url="../ComponentReference/index.html">seperate HTML component documentation</ulink>
-has been created.  This will be the standard location
-for Framework component documentation.  Javadoc for the
-component should simply have a link
-to the correct Component Reference page.
-</para>
-
-<para>
-The component reference is simply HTML (at least, for the time being).
-There are many examples and a template available, for creating
-new reference pages.
-</para>
-
-</section>
-
-<section id="procedures.checkin">
-	<title>Checkin Procedures</title>
-	
-<para>
-You should always follow these procedures when checking in code:
-
-<variablelist>
-	<varlistentry>
-		<listitem>
-		<para>
-		Run JUnit tests (ant junit) before doing a checkin.
-		</para>
-		</listitem>
-	</varlistentry>
-
-	<varlistentry>
-		<listitem>
-		<para>
-		Build the Javadoc (ant javadoc) to ensure there are no errors introduced.
-		</para>
-		</listitem>
-	</varlistentry>
-
-	<varlistentry>
-		<listitem>
-		<para>
-		Add a Bugzilla bug or a feature request describing the change. 
-		</para>
-		</listitem>
-	</varlistentry>
-
-	<varlistentry>
-		<listitem>
-		<para>
-		When checking code in, use the Bugzilla bug id as the checkin comment.
-		</para>
-		</listitem>
-	</varlistentry>
-
-</variablelist>
-
-</para>
-
-<example>
-	<title>Example checkin comment</title>
-<programlisting>
-[ 553310 ] Set properties from parameter bindings
-</programlisting>
-</example>
-	
-	
-<para>
-In addition, update the Tapestry release notes, the file <filename>web/new.html</filename>,
-to identify the feature request.
-</para>
-
-
-<para>
-If you are adding new code, please make sure that the code contains:
-
-<variablelist>
-	<varlistentry>
-		<listitem>
-		<para>
-		The Apache license in a comment block at the beginning.
-		</para>
-		</listitem>
-	</varlistentry>
-
-	<varlistentry>
-		<listitem>
-		<para>
-		The &dollar;Id$ symbol as described above.
-		</para>
-		</listitem>
-	</varlistentry>
-</variablelist>
-
-</para>
-
-<para>
-Be very careful when checking files in that they are checked in with the correct 
-keyword substitution type.
-Files should be either binary or text; text should be checked in with keyword
-expansion turned on (this is the <literal>-kkv</literal> option).
-</para>
-
-<para>
-When new files are added using Eclipse, it must decide whether they are
-binary or text. Eclipse always assumes <emphasis>binary</emphasis>
-unless specifically informed that a file is text.  Use the Team preferences
-panel to set this.
-</para>
-
-<figure>
-	<title>Eclipse: Team Preferences</title>
-        <mediaobject>
-          <imageobject>
-            <imagedata fileref="images/eclipse-team-preferences.png" format="PNG"/>
-          </imageobject>
-        </mediaobject>	
-</figure>
-
-<para>
-Finally, if major changes are enacted, 
-it is good to ensure that the framework continues to be compatible
-with the API versions declared in the User Guide. This can be verified 
-by performing the following actions:
-
-<variablelist>
-	<varlistentry>
-		<listitem>
-		<para>
-		Compile the framework using Java 1.2.2. 
-		(e.g. by setting <literal>JAVA_HOME</literal> and running <literal>ant</literal>)
-		</para>
-		</listitem>
-	</varlistentry>
-
-	<varlistentry>
-		<listitem>
-		<para>
-		Run the unit tests using both Java 1.3.x and 1.4.x
-		(e.g. by setting <literal>JAVA_HOME</literal> and running 'ant junit').
-		Running the unit tests under 1.3.x would require adding 
-		the <literal>Xerces</literal> libraries to the classpath 
-		(e.g. to <filename>lib/ext</filename>).
-		</para>
-		</listitem>
-	</varlistentry>
-
-	<varlistentry>
-		<listitem>
-		<para>
-		Compile with Java Servlet API 2.3 and run the unit tests 
-		using Java Servlet API 2.2
-		(e.g. by compiling, then pointing the <literal>servlet.jar</literal> setting in 
-		the <filename>config/build.properties</filename> file to the 
-		Java Servlet API 2.2 library and running 'ant junit')
-		</para>
-		</listitem>
-	</varlistentry>
-</variablelist>
-
-</para>
-
-
-
-</section>
-
-
-<section id="procedures.examples">
-	<title>Creating Examples</title>
-	
-<para>
-Extending the Workbench application to demonstrate new features or components
-is expected for any significant changes or additions to the framework, or
-to the contrib library.
-</para>
-	
-</section>
-
-<section id="procedures.copyrights">
-	<title>Updating Copyrights</title>
-	
-<para>
-All source code stored in the repository must contain the standard Apache copyright and license.  A copy of the
-license, as a comment block, is stored as <filename>support/license.txt</filename>
-</para>
-
-<para>
-Realize that you are assigning copyright to the Apache Software Foundation.	
-</para>
-
-<para>
-The contents of this file can be pasted in directly before the <literal>package</literal> statement of a Java source file.
-</para>
-
-<para>
-Alternately, a <ulink url="http://www.python.org">Python</ulink> script is provided which
-can locate all Java source files within a directory tree and ensure that the leading comment block
-is correct.  It modifies any source files where the leading comment doesn't match, but does not modify
-any files where the leading comment matches.
-</para>
-
-<para>
-To use the script, execute the command
-<command>python support/update-copyrights.py LICENSE.txt <replaceable>directory ...</replaceable></command>.
-</para>
-
-<para>
-You may specify any number of directories, though the script is fast enough that just using "." (for current directory)
-is easiest.
-</para>
-
-
-
-<warning>
-<title>Cygwin Python</title>
-<para>
-On my computer (running Windows XP and/or 2000), when using the 
-<ulink url="http://sources.redhat.com/cygwin">Cygwin</ulink>
-version of Python, it is necessary to execute the script
-from the Bash shell, not the standard Windows command line.
-</para>
-</warning>
-
-</section> <!-- procedures.copyrights -->
-
-</chapter>
-
-</book>
\ No newline at end of file
diff --git a/3.0.4/doc/src/ContributorsGuide/build.xml b/3.0.4/doc/src/ContributorsGuide/build.xml
deleted file mode 100644
index 7cf31be..0000000
--- a/3.0.4/doc/src/ContributorsGuide/build.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!DOCTYPE project [
-    <!ENTITY docbook-setup SYSTEM "file:../common/docbook-setup.xml">
-]>
-
-<project name="Tapestry Contributor's Guide" default="install">
-
-<property name="root.filename" value="ContributorsGuide"/>
-
-&docbook-setup;
-    
-</project>
-
-
diff --git a/3.0.4/doc/src/ContributorsGuide/images/eclipse-add-repository.png b/3.0.4/doc/src/ContributorsGuide/images/eclipse-add-repository.png
deleted file mode 100644
index 39e0a80..0000000
--- a/3.0.4/doc/src/ContributorsGuide/images/eclipse-add-repository.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/src/ContributorsGuide/images/eclipse-check-out-project.png b/3.0.4/doc/src/ContributorsGuide/images/eclipse-check-out-project.png
deleted file mode 100644
index 2cb7e13..0000000
--- a/3.0.4/doc/src/ContributorsGuide/images/eclipse-check-out-project.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/src/ContributorsGuide/images/eclipse-classpath.png b/3.0.4/doc/src/ContributorsGuide/images/eclipse-classpath.png
deleted file mode 100644
index 1ec0441..0000000
--- a/3.0.4/doc/src/ContributorsGuide/images/eclipse-classpath.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/src/ContributorsGuide/images/eclipse-java-formatting.png b/3.0.4/doc/src/ContributorsGuide/images/eclipse-java-formatting.png
deleted file mode 100644
index 18e8179..0000000
--- a/3.0.4/doc/src/ContributorsGuide/images/eclipse-java-formatting.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/src/ContributorsGuide/images/eclipse-team-preferences.png b/3.0.4/doc/src/ContributorsGuide/images/eclipse-team-preferences.png
deleted file mode 100644
index 12940e7..0000000
--- a/3.0.4/doc/src/ContributorsGuide/images/eclipse-team-preferences.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/src/DevelopersGuide/.cvsignore b/3.0.4/doc/src/DevelopersGuide/.cvsignore
deleted file mode 100644
index 724f4d4..0000000
--- a/3.0.4/doc/src/DevelopersGuide/.cvsignore
+++ /dev/null
@@ -1 +0,0 @@
-html
\ No newline at end of file
diff --git a/3.0.4/doc/src/DevelopersGuide/DevelopersGuide.xml b/3.0.4/doc/src/DevelopersGuide/DevelopersGuide.xml
deleted file mode 100644
index 622890c..0000000
--- a/3.0.4/doc/src/DevelopersGuide/DevelopersGuide.xml
+++ /dev/null
@@ -1,145 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- $Id$ -->
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!DOCTYPE book PUBLIC
-  "-//OASIS//DTD DocBook XML V4.1.2//EN"
-  "http://www.oasis-open.org/docbook/xml/4.0/docbookx.dtd" [
-  <!ENTITY % TapestryLinks SYSTEM "../common/TapestryLinks.xml">
-  %TapestryLinks;
-  
-<!-- Each chapter is in its own file -->
-  
-<!ENTITY chap-intro SYSTEM "intro.xml">
-<!ENTITY chap-beans SYSTEM "beans.xml">
-<!ENTITY chap-components SYSTEM "components.xml">
-<!ENTITY chap-pages SYSTEM "pages.xml">
-<!ENTITY chap-engine SYSTEM "engine.xml">
-<!ENTITY chap-cycle SYSTEM "cycle.xml">
-<!ENTITY chap-apps SYSTEM "apps.xml">
-<!ENTITY chap-coding SYSTEM "coding.xml">
-<!ENTITY chap-coding-components SYSTEM "coding-components.xml">
-<!ENTITY chap-script SYSTEM "script.xml">
-<!ENTITY chap-inspector SYSTEM "inspector.xml">
-<!ENTITY appendix-jars SYSTEM "jars.xml">
-<!ENTITY appendix-faq SYSTEM "faq.xml">
-<!ENTITY appendix-spec SYSTEM "spec.xml"> 
-<!ENTITY appendix-script-spec SYSTEM "script-spec.xml">
-
-<!-- Application, page, library, component specification entities  -->
-
-<!ENTITY spec.application '<link linkend="spec.application"><sgmltag class="starttag">application</sgmltag></link>'>
-<!ENTITY spec.bean '<link linkend="spec.bean"><sgmltag class="starttag">bean</sgmltag></link>'>
-<!ENTITY spec.binding '<link linkend="spec.binding"><sgmltag class="starttag">binding</sgmltag></link>'>
-<!ENTITY spec.configure '<link linkend="spec.configure"><sgmltag class="starttag">configure</sgmltag></link>'>
-<!ENTITY spec.component '<link linkend="spec.component"><sgmltag class="starttag">component</sgmltag></link>'>
-<!ENTITY spec.component-alias '<link linkend="spec.component-alias"><sgmltag class="starttag">component-alias</sgmltag></link>'>
-<!ENTITY spec.component-specification '<link linkend="spec.component-specification"><sgmltag class="starttag">component-specification</sgmltag></link>'>
-<!ENTITY spec.context-asset '<link linkend="spec.context-asset"><sgmltag class="starttag">context-asset</sgmltag></link>'>
-<!ENTITY spec.description '<link linkend="spec.description"><sgmltag class="starttag">description</sgmltag></link>'>
-<!ENTITY spec.extension '<link linkend="spec.extension"><sgmltag class="starttag">extension</sgmltag></link>'>
-<!ENTITY spec.external-asset '<link linkend="spec.external-asset"><sgmltag class="starttag">external-asset</sgmltag></link>'>
-<!ENTITY spec.field-binding '<link linkend="spec.field-binding"><sgmltag class="starttag">field-binding</sgmltag></link>'>
-<!ENTITY spec.inherited-binding '<link linkend="spec.inherited-binding"><sgmltag class="starttag">inherited-binding</sgmltag></link>'>
-<!ENTITY spec.library '<link linkend="spec.library"><sgmltag class="starttag">library</sgmltag></link>'>
-<!ENTITY spec.library-specification '<link linkend="spec.library-specification"><sgmltag class="starttag">library-specification</sgmltag></link>'>
-<!ENTITY spec.page '<link linkend="spec.page"><sgmltag class="starttag">page</sgmltag></link>'>
-<!ENTITY spec.page-specification '<link linkend="spec.page-specification"><sgmltag class="starttag">page-specification</sgmltag></link>'>
-<!ENTITY spec.parameter '<link linkend="spec.parameter"><sgmltag class="starttag">parameter</sgmltag></link>'>
-<!ENTITY spec.private-asset '<link linkend="spec.private-asset"><sgmltag class="starttag">private-asset</sgmltag></link>'>
-<!ENTITY spec.property '<link linkend="spec.property"><sgmltag class="starttag">property</sgmltag></link>'>
-<!ENTITY spec.reserved-parameter '<link linkend="spec.reserved-parameter"><sgmltag class="starttag">reserved-parameter</sgmltag></link>'>
-<!ENTITY spec.service '<link linkend="spec.service"><sgmltag class="starttag">service</sgmltag></link>'>
-<!ENTITY spec.set-property '<link linkend="spec.set-property"><sgmltag class="starttag">set-property</sgmltag></link>'>
-<!ENTITY spec.set-string-property '<link linkend="spec.set-string-property"><sgmltag class="starttag">set-string-property</sgmltag></link>'>
-<!ENTITY spec.static-binding '<link linkend="spec.static-binding"><sgmltag class="starttag">static-binding</sgmltag></link>'>
-<!ENTITY spec.string-binding '<link linkend="spec.string-binding"><sgmltag class="starttag">string-binding</sgmltag></link>'>
-
-
-<!-- Script specification entities -->
-
-<!ENTITY script-spec.body '<link linkend="script-spec.body"><sgmltag class="starttag">body</sgmltag></link>'>
-<!ENTITY script-spec.foreach '<link linkend="script-spec.foreach"><sgmltag class="starttag">foreach</sgmltag></link>'>
-<!ENTITY script-spec.if '<link linkend="script-spec.if"><sgmltag class="starttag">if</sgmltag></link>'>
-<!ENTITY script-spec.if-not '<link linkend="script-spec.if-not"><sgmltag class="starttag">if-not</sgmltag></link>'>
-<!ENTITY script-spec.include-script '<link linkend="script-spec.include-script"><sgmltag class="starttag">include-script</sgmltag></link>'>
-<!ENTITY script-spec.initialization '<link linkend="script-spec.initialization"><sgmltag class="starttag">initialization</sgmltag></link>'>
-<!ENTITY script-spec.input-symbol '<link linkend="script-spec.input-symbol"><sgmltag class="starttag">input-symbol</sgmltag></link>'>
-<!ENTITY script-spec.let '<link linkend="script-spec.let"><sgmltag class="starttag">let</sgmltag></link>'>
-<!ENTITY script-spec.script '<link linkend="script-spec.script"><sgmltag class="starttag">script</sgmltag></link>'>
-<!ENTITY script-spec.set '<link linkend="script-spec.set"><sgmltag class="starttag">set</sgmltag></link>'>
-
-<!ENTITY script-spec.full-content '<replaceable>text</replaceable> | &script-spec.foreach; | &script-spec.if; | &script-spec.if-not;'>
-
-<!ENTITY Gesture '<classname>Gesture</classname>'>
-
-]>
-<!-- Conventions:
-
-	Component ids are <varname>
-	Java packages and class names are <classname>
-	Tapestry component aliases are <classname>
-
-	In-line code snippets use <function>
-	Property paths and JavaBeans property names used <varname>
--->
-<book>
-  <title>Tapestry Developer's Guide</title>
-  <bookinfo>
-    <author>
-      <firstname>Howard</firstname>
-      <surname>Lewis Ship</surname>
-    </author>
-    <copyright>
-      <year>2000</year>
-      <year>2001</year>
-      <year>2002</year>
-      <year>2003</year>
-      <holder>The Apache Software Foundation</holder>
-    </copyright>
-  </bookinfo>
-  
-  &chap-intro;
-  
-  &chap-beans;
-  
-  &chap-components;
-  
-  &chap-pages;
-  
-  &chap-engine;
-  
-  &chap-cycle;
-   
-  &chap-apps;
-  
-  &chap-coding;
-  
-  &chap-coding-components;
-  
-  &chap-script;
-
-  &chap-inspector; 
-    
-  &appendix-jars;
-    
-  &appendix-spec;
-   
-  &appendix-script-spec;    
-    
-  <!-- FOP is gagging on something in the FAQ. -->
-  
-</book>
diff --git a/3.0.4/doc/src/DevelopersGuide/apps.xml b/3.0.4/doc/src/DevelopersGuide/apps.xml
deleted file mode 100644
index 36f13ac..0000000
--- a/3.0.4/doc/src/DevelopersGuide/apps.xml
+++ /dev/null
@@ -1,240 +0,0 @@
-<!-- $Id$ -->
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-  <chapter id="apps">
-    <title>Designing Tapestry Applications</title>
-    <para>
-When first starting to design a Tapestry application, the 
-designer consider some basic elements as a guide 
-to the overall design of the application.
-</para>
-    <section id="apps.storage">
-      <title>Persistent Storage Strategy</title>
-      <para>
-Tapestry pages store a certain amount of 
-client state between request cycles. Each implemention of the 
-&IEngine; interface provides a different strategy.
-</para>
-      <para>
-Currently, only the &SimpleEngine; class is 
-provided with the framework; it uses in-memory page recorders.  
-When the engine is serialized, the page recorders are serialized along with it.
-</para>
-      <para>
-The &IPageRecorder; interface doesn't specify anything about how 
-a page recorder works.  This opens up many possibilities for storage of state, 
-including flat files, databases, stateful EJB session beans, or HTTP Cookies.
-</para>
-      <para>
-In fact, a very sophisticated application engine could mix and match, 
-using cookies for some pages, in-memory for others.
-</para>
-      <para>
-By default, page recorders stay active for the duration of the user session.  
-If a page will not be referenced again, or its persistent 
-state is no longer relevant or needed, the application may explicitly "forget" its state.
-</para>
-      <para>
-Remember that for load balancing and fail over reasons, 
-the engine will be serialized and de-serialized.  Ideally, its serialized state should 
-be less than two kilobytes; because Java serialization is inefficient, 
-this does not leave much room.
-</para>
-      <para>
-The <link linkend="inspector">Tapestry Inspector</link>
-can be used to monitor the size of the serialized engine in a running
-application.
-</para>
-    </section>
-    <section id="apps.pages">
-      <title>Identify Pages and Page Flow</title>
-      <para>
-Early in the design process, the page flow of the application should 
-be identified.  Each page should be identified and 
-given a specific name.
-</para>
-      <para>
-Page names are less structured than other identifiers in Tapestry.  
-They may contain letters, numbers, underscores, dashes and periods.  Tapestry makes 
-absolutely no interpretation on the page names.
-</para>
-      <para>
-In many applications, certain parts of the functionality are 
-implemented as "wizards", several related pages that are used in 
-sequence as part of a business process.  A common example of this is 
-initial user registration, or when submitting an order to an 
-e-commerce system.
-</para>
-      <para>
-A good page naming convention for this case is
-"<replaceable>wizard name</replaceable>.<replaceable>page name</replaceable>" 
-(a period separates the two names).  This visually identifies that several pages are related.  
-In addition, a Java package for the wizard 
-should be created to contain the Java classes, component specifications, 
-HTML templates and other assets related to the wizard.  Having the wizard name match the package name
-is also helpful.
-</para>
-      <para>
-The designer must also account for additional entry points to the application 
-beyond the standard home page.  These may require 
-additional application services (see below).
-</para>
-    </section>
-    <section id="apps.commmon-logic">
-      <title>Identify Common Logic</title>
-      <para>
-Many applications will have common logic that appears on many pages.  
-For example, an e-commerce system may have a shopping cart, and have many 
-different places where an item can be added to the cart.
-</para>
-      <para>
-In many cases, the logic for this can be centralized in the visit object.  
-The visit object may implement methods for adding products to the shopping cart.  
-This could take the form of Java methods, component listeners. 
-</para>
-      <para>
-In addition, most web applications have a concept of a 'user'.  
-The object representing the user should be a property of the visit object, 
-making it accessible to all pages and components.
-</para>
-      <para>
-Most Tapestry applications will involve some interaction with Enterprise JavaBeans.  
-The code to lookup home interfaces, or to gain access to ession beans, is typically 
-located in the visit object.
-</para>
-      <para>
-Listener code, on various pages, will cast the visit object to the appropriate 
-actual class and invoke methods.
-</para>
-      <para>
-The following example demonstrates this idea.  Visit is a 
-hypothetical visit object that uses EJBs.
-</para>
-      <informalexample>
-        <programlisting>
-public void exampleListener(&IRequestCycle; cycle)
-{
-  Visit visit; <co id="apps.common-logic.ex.visit"/>
-  <replaceable>ISomeHomeInterface</replaceable> home;
-
-  visit = (Visit)getVisit();
-
-  home = visit.<replaceable>getSomeHomeInterface</replaceable>();
-
-  try
-  {
-  	// etc.
-  }
-  catch (RemoteException ex)
-  {
-    throw new ApplicationRuntimeException(ex);
-  }
-}
-</programlisting>
-      </informalexample>
-      <para>
-        <calloutlist>
-          <callout arearefs="apps.common-logic.ex.visit">
-            <para>
-  Each application can freely define the type of the visit object,
-  and its is common to call the class "Visit".  Another option is
-  to create a subclass for the engine and store home interfaces
-  there.
-  </para>
-          </callout>
-        </calloutlist>
-      </para>
-    </section>
-    <section id="apps.services">
-      <title>Identify Engine Services</title>
-      <para>
-Tapestry applications will need to define new engine services when a page 
-must be referenced from outside the Tapestry application
-</para>
-      <para>
-This is best explained by example.  It is 
-reasonable in an e-commerce system that there is a particular page that shows 
-product information for a particular product.  This information includes 
-description, price, availability, user 
-reviews, etc.  A user may want to bookmark that 
-page and return to it on a later session.
-</para>
-      <para>
-Tapestry doesn't normally allow this; the page may be bookmarked, but 
-when the bookmark is triggered, the page may not render correctly, because it 
-will not know which product to display.  The URLs normally generated in a 
-Tapestry application are very context sensitive; they are only meaningful in 
-terms of the user's navigation throughout the application, starting with the Home page.  
-When bookmarked, that context is lost.
-</para>
-      <para>
-By defining a new engine service, the necessary context can be encoded directly 
-into the URL, in a way similar to how the direct action works.  This is
-partially a step backwards towards typical servlet or JSP development, but 
-even here Tapestry offers superior services.  In the e-commerce example, 
-the service URL could encode some form of product identifier.
-</para>
-      <para>
-An example of this is in the Virtual Library application.  In 
-order to make certain pages bookmarkable, a new service named 
-"external" was created.
-</para>
-      <para>
-The external service includes the name of a page and the primary key 
-of an object that page displays (this was simplified by the 
-design of the Vlib entity beans, which always use  an &Integer; 
-as the primary key).
-</para>
-      <para>
-The external service works much the same was as the page service, except 
-that it invokes an additional method on the page, <function>setup()</function>, 
-which is passed the primary key extracted from the URL.
-</para>
-      <para>
-The end result is that when a user arrives at such a page, 
-the URL used identifies the page and the primary key.  Bookmarking the page stores the URL so 
-that when the bookmark is later opened, the correct data 
-is read and displayed.
-</para>
-    </section>
-    <section id="apps.common-components">
-      <title>Identify Common Components</title>
-      <para>
-Even before detailed design of an application, certain portions of pages will be 
-common to most, if not all, pages.  The canonical example is 
-a "navigation bar", a collection of links and buttons used to navigate to 
-specific pages within the application.  An e-commerce site may 
-have a shopping cart related component that can appear in many places.
-</para>
-      <para>
-In many cases, common components may need to be parameterized:  the navigation bar may 
-need a parameter to specify what pages are to appear; the shopping cart component 
-will require a shopping cart object (the component is the view 
-and controller, the shopping cart object is the model).
-</para>
-      <para>
-Other examples of common components are viewers and editors of 
-common data types.
-</para>
-      <para>
-In the Virtual Library, components that make use of the external service were 
-created.  The components, <classname>BookLink</classname> and <classname>PersonLink</classname>, took as 
-parameters the corresponding objects (<classname>Book</classname>  or <classname>Person</classname>) 
-and created links to the pages 
-that displayed the details of that <classname>Book</classname>  or <classname>Person</classname>.
-</para>
-    </section>
-  </chapter>
\ No newline at end of file
diff --git a/3.0.4/doc/src/DevelopersGuide/beans.xml b/3.0.4/doc/src/DevelopersGuide/beans.xml
deleted file mode 100644
index efa02c6..0000000
--- a/3.0.4/doc/src/DevelopersGuide/beans.xml
+++ /dev/null
@@ -1,215 +0,0 @@
-<!-- $Id$ -->
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-  <chapter id="beans">
-    <title>JavaBeans and Properties</title>
-    <para>
-The Tapestry framework is based upon the use of 
-<ulink url="http://java.sun.com/j2se/1.3/docs/api/java/beans/package-summary.html">JavaBeans</ulink>
-and JavaBeans properties.  This chapter is a short review
-of these concepts.  A more 
-involved discussion is available as part of the
-<ulink url="http://java.sun.com/docs/books/tutorial/javabeans/index.html">Java Tutorial</ulink>.
-</para>
-    <section id="beans.beans">
-      <title>JavaBeans</title>
-      <para>
-The JavaBeans framework is a way of manipulating Java objects when their exact type is not known.  The
-ability to make objects work together, when their exact type is not known, is very powerful.  It's an example
-of the kind of flexibility availble in a highly dynamic language like Java that is not possible in
-lower-level languages such as C++.
-</para>
-      <para>
-The JavaBeans framework is the basis for a number of component-based frameworks, including Java's AWT and Swing GUI
-libraries, as well as Tapestry.  The idea is that, by following a few naming rules and coding
-conventions, it is possible to "plug into" a framework with new classes, classes not even written yet
-when the framework is created.  In Tapestry terms, this is used to allow the creation of new Tapestry components.
-</para>
-      <para>
-Any Java object can act as a JavaBean; it just has to follow certain naming conventions (discussed in
-<link linkend="beans.properties">the next section</link>).  In cases where a framework needs to create new
-instances of a class, such as when Tapestry creates a new instance of a component,
-the Java class must implement a public, no arguments constructor (it may implement additional constructors as
-well).
-</para>
-      <para>
-The <ulink url="http://java.sun.com/j2se/1.3/docs/api/java/lang/reflect/package-summary.html">Java Reflection API</ulink> allows Tapestry to access the methods, attributes and constructors of a class.
-</para>
-    </section>
-    <section id="beans.properties">
-      <title>JavaBeans Properties</title>
-      <para>
-For Tapestry, the central concept for JavaBeans are properties.  The JavaBeans framework allows Tapestry to
-treat any object as a collection of named properties.  Tapestry frequently reads, and occasionally writes, values
-from or to these named properties.
-</para>
-      <para>
-A property is <emphasis>not</emphasis> the same as an <emphasis>attribute</emphasis> ... though, most often, each property is backed up by an attribute. 
- To Tapestry, and the Reflection API, a property is a set of public methods on the object.  
- Accessing a property involves invoking one of these methods.
-</para>
-      <example>
-        <title>JavaBeans getter method</title>
-        <programlisting>
-public <replaceable>type</replaceable> get<replaceable>Name</replaceable>()
-{
-  ...
-}
-</programlisting>
-      </example>
-      <example>
-        <title>JavaBeans setter method</title>
-        <programlisting>
-public void set<replaceable>Name</replaceable>(<replaceable>type</replaceable> value)
-{
-  ...
-}
-</programlisting>
-      </example>
-      <para>
-A property may be read-only or write-only (that is, it may implement just one of the
-two methods).  The <replaceable>type</replaceable> may be a scalar type (boolean, int, etc.)
-or any Java class.
-</para>
-      <para>
-Note the naming; the first letter of the property name is capitalized after <literal>get</literal>
-or <literal>set</literal>.  JavaBeans properties are case sensitive with respect to the method names
-and the property names.  A special case exists when the name is an acronyn; this is recognized
-by two or more upper-case letters in a row (after get or set); in this case, the property name
-does <emphasis>not</emphasis> have the first letter convert to lower-case.
-</para>
-      <para>
-As a special case, a boolean property may use an alternate name for the getter method:
-</para>
-      <example>
-        <title>JavaBeans getter method (boolean)</title>
-        <programlisting>
-public boolean is<replaceable>Name</replaceable>()
-{
-  ...
-}
-</programlisting>
-      </example>
-      <para>
-Although the normal implementation is to get or set an instance variable, more complicated options are
-possible.  One pattern is <emphasis>lazy evaluation</emphasis>, where an expensive calculation is
-put off until the actual value is needed, for example:
-</para>
-      <example>
-        <title>Lazy evaulation of JavaBeans property</title>
-        <programlisting>
-
-public List userNames = null;
-
-/**
- *  Returns a List of user names obtained from the database.
- *
- **/
-
-public List getUserNames()
-{
-  if (userNames == null)
-    userNames = fetchUserNamesFromDatabase();
-
-  return userNames;
-}
-</programlisting>
-      </example>
-      <para>
-Here, the first time the method is invoked, the expensive database fetch occurs.  The value
-returned from the database is then cached for later invocations.
-</para>
-      <para id="beans.properties.synthesized">
-Another common pattern is a <emphasis>synthesized property</emphasis>.  Here, there is no
-real attribute at all, the value is always computed on the fly.  A frequent use of this is to
-avoid tripping over null pointers.
-</para>
-      <example>
-        <title>Synthesized JavaBeans Property</title>
-        <programlisting>
-/**
- *  Returns the name of the company's account representative, if
- *  if the company has one, or null otherwise.
- *
- **/
-
-public String getAccountRepName()
-{
-  AccountRep rep = company.getAccountRep();
-
-  if (rep == null)
-    return null;
-  
-  return rep.getName();
-}
-</programlisting>
-      </example>
-      <para>
-This example creates a synthetic property, <varname>accountRepName</varname>.
-</para>
-    </section>
-    <section id="beans.property-path">
-      <title>Property Paths</title>
-      <para>
-The JavaBeans framework provides basic named properties for JavaBean objects.  Tapestry
-extends this from simple properties to <emphasis>property paths</emphasis>.
-</para>
-      <para>
-A property path is a series of property names, separated by periods.  When reading a property path, each
-property is read in series.
-</para>
-      <para>
-In the <link linkend="intro.ex">example from the introduction</link>, the property path <varname>visit.userName</varname>
-was referenced.  This path means that the <varname>visit</varname> property of the start object (a Tapestry page) should be accessed, then the <varname>userName</varname> property of the visit object should
-be accessed.  This is approximately the same as Java code
-<literal>getVisit().getUserName()</literal> (except that property access is not typesafe).
-</para>
-      <para>
-In some cases, property paths are used to change a value, instead of reading it.  When this occurs, all properties
-but the last a read; only the last property is written.  In other words, updating <varname>visit.userName</varname>
-would be similar to the JavaCode <literal>getVisit().setUserName(<replaceable>value</replaceable>)</literal>.
-</para>
-      <para>
-Property paths can be of any length; however, they are just as susceptable to <classname>NullPointerException</classname>s
-as any other JavaCode.  Care must be taken that none of the properties in a property path, 
-except the final one, return null.  This can often be accomplished 
-using <link linkend="beans.properties.synthesized">synthesized properties</link>.
-      </para>
-
-    </section>  <!-- beans.property-path -->
-    
-    <section id="beans.ognl">
-    	<title>Object Graph Navigation Library</title>
-    	
-<para>
-Beyond even simple property paths are the powerful Object Graph
-Navigation Library (OGNL) <emphasis>expressions</emphasis>.
-OGNL expressions are modeled after Java expressions; they can
-invoke methods, perform comparisons, do arithmetic ... even build collections on the fly.
-</para>
-
-
-
-<para>
-OGNL is a separate framework from Tapestry; further details about it
-are available at
-<ulink url="http://www.ognl.org">http://www.ognl.org</ulink>.
-</para>
-
-    	
-   	</section> <!-- beans.ognl -->
-  </chapter>
\ No newline at end of file
diff --git a/3.0.4/doc/src/DevelopersGuide/build.xml b/3.0.4/doc/src/DevelopersGuide/build.xml
deleted file mode 100644
index a08c825..0000000
--- a/3.0.4/doc/src/DevelopersGuide/build.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0"?>
-<!-- $Id$ -->
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!DOCTYPE project [
-    <!ENTITY docbook-setup SYSTEM "file:../common/docbook-setup.xml">
-]>
-
-<project name="Tapestry Developer's Guide" default="install">
-
-<property name="root.filename" value="DevelopersGuide"/>
-
-&docbook-setup;
-    
-
-</project>
-
-
diff --git a/3.0.4/doc/src/DevelopersGuide/coding-components.xml b/3.0.4/doc/src/DevelopersGuide/coding-components.xml
deleted file mode 100644
index 5708769..0000000
--- a/3.0.4/doc/src/DevelopersGuide/coding-components.xml
+++ /dev/null
@@ -1,305 +0,0 @@
-<!-- $Id$ -->
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-  <chapter id="coding-components">
-    <title>Designing new components</title>
-    <para>
-Creating new components using Tapestry is designed to be quite simple.
-</para>
-    <para>
-Components are typically created through aggregation, that is, by combining existing 
-components using an HTML template and specification.
-</para>
-    <para>
-You will almost always want to define a short alias 
-for your new component in the application specification.  This insulates developers from minor 
-name changes to the component specification, such as moving the component 
-to a different Java package.
-</para>
-    <para>
-Like pages, components should reset their state back to 
-default values when the page they are contained within is returned to the pool.
-</para>
-    <para>
-Most components do not have any state.  A component which does should 
-implement the &PageDetachListener; interface, 
-and implement the <function>pageDetached()</function> method.
-</para>
-    <para>
-The <function>pageDetached()</function> method is invoked from the page's 
-<function>detatch()</function> method, which is invoked at the very end 
-of the request cycle, just before the page is returned to the page pool.
-</para>
-    <section id="coding-components.base-class">
-      <title>Choosing a base class</title>
-      <para>
-There are two basic types of components:  those that use an HTML template, and those that don't.
-</para>
-      <para>
-Nearly all of the base components provided with the Tapestry framework don't 
-use templates.  They inherit from the class 
-&AbstractComponent;.  Such 
-components must implement the protected <function>renderComponent()</function> method.
-</para>
-      <para>
-Components that use templates inherit from a subclass of 
-&AbstractComponent;: 
-&BaseComponent;.  They should leave the <function>renderComponent()</function>
-method alone.
-</para>
-      <para>
-In some cases, a new component can be written just by combining existing components 
-(this often involves using inherited bindings).  Such a codeless 
-component will consist of just a specification and an HTML 
-template and will use the &BaseComponent; class without subclassing.  This
-is even more possible when using <link linkend="components.helper-beans">helper beans</link>.
-</para>
-    </section>
-    <section id="coding-components.parameters">
-      <title>Parameters and Bindings</title>
-      <para>
-You may create a component that has parameters.  Under Tapestry, component parameters are a 
-kind of "named slot" that can be wired up as 
-a source (or sink) of data in a number of ways.  This "wiring up" is 
-actually accomplished using binding objects.
-</para>
-
-<tip>
-	<title>Connected Parameters</title>
-	<para>
-Most components use "in" parameters and can have Tapestry
-<link linkend="components.connected-params">connect the parameters to properties
-of the component</link> automatically.  This discussion
-reveals some inner workings of Tapestry
-that developers most often
-no longer need to be aware of.
-</para>
-</tip>
-
-      <para>
-The page loader, the object that converts a component specification into an actual 
-component, is responsible for creating and assigning the bindings.  It uses the method 
-<function>setBinding()</function> to assign a binding with a name.  Your 
-component can retrieve the binding by name using <function>getBinding()</function>.
-</para>
-      <para>
-For example, lets create a component that allows the color of 
-a span of text to be specified using a <classname>java.awt.Color</classname> object.  The 
-component has a required parameter named <varname>color</varname>.  The class's 
-<function>renderComponent()</function> method is below:
-</para>
-      <informalexample>
-        <programlisting>
-protected void renderComponent(&IMarkupWriter; writer, &IRequestCycle; cycle)
-  throws RequestCycleException
-{
-  &IBinding; colorBinding = getBinding("color");
-  Color color = (Color)colorBinding.getObject("color", Color.class);
-  String encodedColor = &RequestContext;.encodeColor(color);
-
-  writer.begin("font");
-  writer.attribute("color", encodedColor);
-
-  renderWrapped(writer, cycle);
-
-  writer.end();
-}</programlisting>
-      </informalexample>
-      <para>
-The call to <function>getBinding()</function> is relatively expensive, since 
-it involves rummaging around in a &Map; and then 
-casting the result from <classname>java.lang.Object</classname> to <classname>org.apache.tapestry.IBinding</classname>.  
-</para>
-      <para>
-Because bindings are typically set once and then read frequently by the component, 
-implementing them as private instance variables is much more efficient.  Tapestry 
-allows for this as an optimization on frequently used components.
-</para>
-      <para>
-The <function>setBinding()</function> method in 
-&AbstractComponent; checks to see if there is a read/write 
-JavaBeans property named "<replaceable>name</replaceable>Binding" of
-type &IBinding;.  In this example, it 
-would look for the methods <function>getColorBinding()</function> and <function>setColorBinding()</function>.
-</para>
-      <para>
-If the methods are found, they are invoked from 
-<function>getBinding()</function> and <function>setBinding()</function> instead of updating the 
-&Map;.
-</para>
-      <para> This changes the example to:</para>
-      <informalexample>
-        <programlisting>
-<emphasis>private &IBinding; colorBinding;
-
-public void setColorBinding(&IBinding; value)
-{
-  colorBinding = value;
-}
-
-public &IBinding; getColorBinding()
-{
-  return colorBinding;
-}
-</emphasis>
-
-protected void renderComponent(&IMarkupWriter; writer, &IRequestCycle; cycle)
-  throws RequestCycleException
-{
-  Color color = (Color)<emphasis>colorBinding</emphasis>.getObject("color", Color.class);
-  String encodedColor = &RequestContext;.encodeColor(color);
-
-  writer.begin("font");
-  writer.attribute("color", encodedColor);
-
-  renderWrapped(writer, cycle);
-
-  writer.end();
-}</programlisting>
-      </informalexample>
-      <para>
-This is a trade off; slightly more code for slightly better performance.  
-There is also a memory bonus; the 
-&Map; used by &AbstractComponent; to store the binding will never be created.
-</para>
-    </section>
-    <section id="coding-components.persistent-state">
-      <title>Persistent Component State</title>
-      <para>
-As with pages, individual components may have state that persists between request cycles.  
-This is rare for non-page components, but still possible and useful in special circumstances.
-</para>
-      <para>
-A client that must persist some client state uses its page's <varname>changeObserver</varname>.  
-It simply posts <classname>ObservedChangeEvents</classname> with itself (not its page) as the 
-source.  In practice, it still simply invokes the <function>fireObservedChange()</function> method.
-</para>
-      <para>
-In addition, the component should implement the interface 
-&PageDetachListener;, and implement 
-the method <function>pageDetached()</function>, and, within that method, reset all 
-instance variables to default values, just as a page does (in its <function>detach()</function> method).
-</para>
-    </section>
-    <section id="coding-components.assets">
-      <title>Component Assets</title>
-      <para>
-Tapestry components are designed for easy re-use.  Most 
-components consist of a specification, a Java class and an HTML template.
-</para>
-      <para>
-Some components may need more; they may have additional image 
-files, sounds, Flash animations, QuickTime movies or whatever.  These are 
-collectively called "assets".  
-</para>
-      <para>
-Assets come in three flavors:  external, context and private.
-</para>
-      <itemizedlist>
-        <listitem>
-          <para>An external asset is just a fancy way of packaging a URL at an arbitrary web site.
-		</para>
-        </listitem>
-        <listitem>
-          <para>A context asset represents a file with a URL 
-		relative to the web server containing the Tapestry application.</para>
-        </listitem>
-        <listitem>
-          <para>A private asset is a file within the classpath, 
-		that is, packaged with the component in a Java Archive (JAR) file.  
-		Obviously, such assets are not normally visible to the web server.
-		</para>
-        </listitem>
-      </itemizedlist>
-      <para>
-Components which use assets don't care what flavor they are; they 
-simply rely on the method <function>buildURL()</function> to provide a 
-URL they can incorporate into the HTML they generate.  For example, the 
-&Image; component has an image parameter that is used to 
-build the <varname>src</varname> attribute of an HTML <sgmltag class="starttag">img</sgmltag> element.
-</para>
-      <para>
-Assets figure prominently into three areas:  reuse, deployment and localization.
-</para>
-      <para>
-Internal and private assets may be localized:  when 
-needed, a search occurs for a localized version, relative to a base name 
-provided in the component specification.
-</para>
-      <para>
-Private assets simplify both re-use and deployment.  They allow a re-usable Tapestry 
-component, even one with associated images, style sheets (or other assets) to be incorporated 
-into a Tapestry application without any special consideration.  For example, the standard exception 
-page makes use of a private asset to access its stylesheet.
-</para>
-      <para>
-In a traditional web application, private assets would need to be packaged 
-separately from the 'component' code and placed into some pre-defined 
-directory visible to the web server.
-</para>
-      <para>
-Under Tapestry, the private assets are distributed with the component 
-specification, HTML templates and Java code, within a Java Archive (JAR) 
-file, or within the <filename class="directory">WEB-INF/classes</filename> directory of a 
-Web Application Archive (WAR) file.  The resources are located within the 
-running application's classpath.
-</para>
-      <para>
-The Tapestry framework takes care of making the private 
-assets visible to the client web browser.  This occurs in 
-one of two ways:
-</para>
-      <itemizedlist>
-        <listitem>
-          <para>The private assets are copied out of the 
-				classpath and to a directory visible to the web server.  
-				This requires some additional configuration.
-			</para>
-        </listitem>
-        <listitem>
-          <para>
-			The assets are dynamically accessed from the class 
-			path using the asset service.
-		</para>
-        </listitem>
-      </itemizedlist>
-      <para>
-Copying assets out of the classpath and onto the web 
-site is the best solution for final deployment, since it allows the assets 
-to be retrieved as static files, an operation 
-most web servers are optimized for.
-</para>
-      <para>
-Dynamically accessing assets requires additional operations in Java code.  
-These operations are not nearly as efficient as static 
-access.  However, dynamic access is much more convenient during development 
-since much less configuration (in this case, copying of assets) is 
-necessary before testing the application.
-</para>
-      <para>
-As with many things in Tapestry, the components using assets 
-are blind as to how the assets are made visible to the client.
-</para>
-      <para>
-Finally, every component has an <varname>assets</varname> property that is an 
-unmodifiable &Map;.  The assets in the 
-&Map;
-are accessible as if they were properties of the &Map;.  In 
-other words, the property path <varname>assets.welcome</varname> is valid, if the 
-component defines an asset named 'welcome'.
-</para>
-    </section>
-  </chapter>
\ No newline at end of file
diff --git a/3.0.4/doc/src/DevelopersGuide/coding.xml b/3.0.4/doc/src/DevelopersGuide/coding.xml
deleted file mode 100644
index 7cd0987..0000000
--- a/3.0.4/doc/src/DevelopersGuide/coding.xml
+++ /dev/null
@@ -1,142 +0,0 @@
-<!-- $Id$ -->
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-  
-  <chapter id="coding">
-    <title>Coding Tapestry Applications</title>
-    <para>
-After performing the design steps from the previous chapter, it 
-is time to start coding.  The designs will imply 
-certain requirements for the implementations.
-</para>
-    <section id="coding.engine">
-      <title>Application Engine</title>
-      <para>
-Application engines will be serialized and de-serialized as part of 
-load balancing and fail over.  As much as possible, attributes of the application 
-object should be transient.  For example, the instance variable that 
-holds the <classname>ApplicationSpecification</classname> is transient; if 
-needed (after de-serialization), the engine can locate the specification from 
-its servlet (the servlet reads the application specification once, when it is first initialized).
-</para>
-      <para>
-This is largely not an issue, since most applications use a provided class, 
-such as &SimpleEngine;.  Subclassing 
-is only necessary when the application  needs a different method of instantiating the visit object, or
-needs to store additional data (see <link linkend="coding.stateless" endterm="coding.stateless.title"/>).
-In some cases, it is convienient to create a subclass to provide common component listener methods.
-</para>
-    </section>
-    <section id="coding.visit">
-      <title>Visit Object</title>
-      <para>
-The visit object will contain all the data about a client's 
-visit to the web application.  If possible, it should have a no-arguments 
-constructor (this allows &SimpleEngine; to instantiate it as needed).
-</para>
-      <para>
-Keeping the size of the serialized engine small is a 
-good goal for overall performance and scalability, and the visit object is serialized 
-with the engine.  During initial development, the visit 
-object should implement the <classname>java.io.Serializable</classname> interface.
-</para>
-      <para>
-Once the application, and the structure of the visit object, is 
-stable, the more efficient <classname>java.io.Externalizable</classname> interface should be implemented instead. 
-</para>
-      <para>
-In addition, deferring the creation of the visit object as late as 
-possible is also of benefit, since this is the best way to keep the serialized engine small.
-</para>
-    </section>
-    <section id="coding.stateless">
-      <title id="coding.stateless.title">Operating Stateless</title>
-      <para>
-Tapestry applications can operate in a stateless mode, that is, without a &HttpSession;.  The
-framework automatically creates a session when needed; when the Visit object is first created,
-or when any persistent page properties are changed.
-</para>
-      <para>
-Ideally, the <classname>Home</classname> page of the application should not trigger the creation of a session: 
-it should be careful not to create the Visit object.  Remember that hits on your application will form
-a curve:  The <classname>Home</classname> page is at the top of the curve, and it drops of rapidly as
-users penetrate deeper into the application ... how many times have you visited the front page of a web site
-and gone no further?
-</para>
-      <para>
-Stateless operations will affect &ActionLink;, &DirectLink; and &Form; components on your pages.  By default, they
-will reject requests while the application is running stateless; the user will be redirected
-to the <classname>StaleSession</classname> page.  This is appropriate, since normally, the lack of a session
-means that the previous session timed out and was discarded.
-</para>
-      <para>
-Each of these components has a <varname>stateful</varname> parameter which may be bound to 
-<literal>false</literal>.  When <varname>stateful</varname> is false, the components will accept stateless
-requests.
-</para>
-      <para>
-As the developer, you must keep a careful eye on what's stateful vs. stateless, and look to move
-stateless data into the engine, so as to avoid creating a visit object as long as possible.  For example,
-the engine can resolve and store 
-EJB home interfaces and references to <emphasis>stateless</emphasis> session EJBs.  
-Even read-only database data can be stored in the engine.  However, anything that is related to a particular 
-user must be stored in the visit object (or a persistent page property).
-</para>
-      <para>
-It is also important to not accidentally create the visit object.  Every page includes
-a <varname>visit</varname> property which will create the visit if it doesn't already exist.  This will,
-in turn, force the creation of an &HttpSession;.  On the other hand, the property path
-<varname>engine.visit</varname> will <emphasis>not</emphasis> create the visit object.
-To avoid creating the visit, you may need to wrap some of your HTML template inside
-a &Conditional; component whose condition parameter is bound to the property <varname>engine.visit</varname>.
-</para>
-    </section>
-    <section id="coding.ejb">
-      <title>Enterprise JavaBeans Support</title>
-      <para>
-The visit object should provide access to the most commonly 
-used Enterprise JavaBeans used in the application.  It can provide a central location 
-for the common code (related to JNDI and to narrowing EJB references), rather 
-than have that scattered throughout the application.
-</para>
-      <para>
-It is important to remember that EJB references are not serializable.  
-However, it is possible to convert between an EJB reference and an EJB handle, 
-and handles are serializable.  The visit should make any 
-instance variables that store EJB references transient, and should perform 
-extra serialization work to serialize and restore the necessary EJB handles.
-</para>
-      <para>
-Also remember that persistent page properties that are EJB references are 
-<emphasis>automatically</emphasis>
-converted to handles when stored, and back into references when restored.
-</para>
-    </section>
-    <section id="coding.page-classes">
-      <title>Page classes</title>
-      <para>
-It is often useful to create one or two subclasses of 
-&BasePage; specific to your application.  
-Often your application will have a consistent navigational border on some 
-or all pages that can be supported by the base class.
-Many applications have one set of pages that are visible 
-to unidentified guests, and a second section that is visible once the user logs 
-in.  A base class for the second set of pages could override  the 
-<function>validate()</function> method to redirect to a login page 
-if the user is not already logged in.
-</para>
-    </section>
-  </chapter>
\ No newline at end of file
diff --git a/3.0.4/doc/src/DevelopersGuide/components.xml b/3.0.4/doc/src/DevelopersGuide/components.xml
deleted file mode 100644
index 611f2bf..0000000
--- a/3.0.4/doc/src/DevelopersGuide/components.xml
+++ /dev/null
@@ -1,1001 +0,0 @@
-<!-- $Id$ -->
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-  
-  <chapter id="components">
-    <title>Tapestry Components</title>
-    <para>
-Tapestry components are "black boxes" that are involved with both rendering 
-HTML responses and responding to HTTP requests.
-</para>
-    <para>
-A Tapestry component is defined by its specification.  
-The specification is an XML file that defines the type of the component, it parameters, 
-the template used by the component, any components embedded within it and 
-how they are 'wired up', and (less often) any assets used by the component.
-</para>
-    <para>
-At runtime, the specification is used to identify and instantiate a class 
-for the component.  When the page containing the component is rendered, the 
-component will access its HTML template to find the static HTML and embedded 
-components it will render.
-</para>
-    <section id="components.params">
-      <title>Parameters and Bindings</title>
-      <para>
-Tapestry components are designed to work with each other, 
-within the context of a page and application.  The process of rendering a page 
-is largely about pulling information from a source into a component  
-and doing something with it.
-</para>
-      <para>
-For example, on a welcome page, a component might get the <varname>userName</varname> property from 
-the <varname>visit</varname> object and insert it into the HTML response.
-</para>
-      <para>
-Each component has a specific set of parameters.  
-Parameters have a name, a type and may be required or optional.
-</para>
-      <para>
-To developers experienced with Java GUIs, it may appear that Tapestry 
-component parameters are the same as JavaBeans properties.  This is not completely true.  
-JavaBeans properties are set-and-forget; the designer sets a value 
-for the property using a visual editor and the value 
-is saved with the bean until it is used at runtime.
-</para>
-      <para>
-Parameters define the type of value needed, but not the actual value.  
-This value is provided by a special object called a binding.  
-The binding is a bridge between the component and the parameter value,
-exposing that value to the component as it is needed.  The reason for all this
-is to allow pages, and the components within them, to be shared by many
-concurrent sessions ... a major facet in Tapestry's strategy
-for maintaining application scalability.
-</para>
-
-<para>
-When a component needs the value of one of its parameters, it must
-obtain the correct binding, an instance of interface &IBinding;,
-and invoke methods on the binding to get the value from the binding.
-Additional methods are used with output parameters to update the binding property.
-</para>
-
-<para>
-In most cases, discussed in the <link linkend="components.connected-params">next section</link>,
-Tapestry can hide the bindings from the developer.  In effect, it automates the process
-of obtaining the binding, obtaining the value from it, and assigning it to a JavaBean
-property of the component.
-</para>
-
-      <para>
-There are two types of bindings:  static and dynamic.  
-Static bindings are read-only; the value for the binding is 
-specified in the component specification. 
-</para>
-
-      <para>
-Dynamic bindings are more prevalent and useful.  A dynamic 
-binding uses a JavaBeans property name to retrieve the value when needed 
-by the component.  The source of this data is a property of some component.
-</para>
-
-      <para>
-In fact, dynamic bindings use
-<link linkend="beans.property-path">property paths</link>, allowing
-a  binding to 
-'crawl' deeply through an object graph to access the value it needs.  
-This frees the components from relying totally on the properties of their container, 
-instead they are free to access properties of more distant objects.
-</para>
-
-    </section>
-    
-<section id="components.connected-params">    
-	<title>Connected Parameters</title>
-    
-<para>
-In most cases, a developer is not interested in bindings; an easier model for developers is one
-in which Tapestry uses the parameters and bindings to set properties of the component automatically.
-Starting in release 2.1, Tapestry includes this behavior, with some constraints and limitations.
-</para>
-
-<para>
-Part of the &spec.parameter; specification for a parameter
-is the <emphasis>direction</emphasis>, which can be one of the following values:
-</para>
-
-<variablelist>
-
-	<varlistentry>
-		<term>in</term>
-		<listitem>
-		<para>
-		Input parameter; the value is drawn from the binding (if bound)
-		and applied to the corresponding component property just before rendering the component.
-		</para>
-		</listitem>
-	</varlistentry>
-
-
-	<varlistentry>
-		<term>form</term>
-		<listitem>
-		<para>
-		A parameter which matches the semantics of a form component.
-		The parameter is treated like an <literal>in</literal>
-		parameter when the page is rendering.
-		</para>
-		
-		<para>
-		When the form containing the component is submitted,
-		the connected property is read (after the component renders),
-		and the value applied to the parameter.
-		</para>
-		</listitem>
-	</varlistentry>		
-
-	<varlistentry>
-		<term>custom</term>
-		<listitem>
-		<para>
-		Tapestry does not try to connect the parameter with any property; the component
-		is responsible for accessing the binding and retrieving or setting values.
-		</para>
-		
-		<para>
-		This type must be used for any kind of output parameter, or for an input parameter
-		where the property may be accessed other than during the rendering of the component.
-		</para>
-		</listitem>
-	</varlistentry>			
-</variablelist>
- 
-<note>
-	<title>Why aren't output parameters connectable?</title>
-	<para>
-	The problem is the timing of output parameters.  Sometimes a parameter is only an output
-	parameter when the containing form is submitted (for example, any of the form related components).
-	Sometimes a parameter is output many times (for example, &Foreach;) while the component
-	renders.
-	</para>
-	
-	<para>
-	The latter case may always be handled as custom; the former case may be handled
-	in the future.
-	</para>
-</note>
- 
-<para>
-Defining a parameter as direction <literal>in</literal> causes Tapestry to connect the parameter to the corresponding
-property of the component.  The parameter specification must identify the Java type of the property.
-Properties must be read/write (they must have both
-getter and setter methods).
-</para>
-
-<para>
-Tapestry will set properties from parameters just before rendering the component.  After the component renders, 
-the parameters are
-cleared; they are returned to inital values.  Tapestry reads these initial values just before it sets the
-properties the first time.  This makes it very easy to set defaults for optional parameters: just provide a default value
-for the correspoinding instance variable.
-</para>
-
-<para>
-If the property is connected to an invariant binding (a static or field
-binding), then the property is set just once, and never cleared.
-</para>
-
-
-<para>
-There are times when the parameter name can't be used as the property name.  For example,
-the &PageLink; component has a <literal>page</literal> parameter, the name of the page to link to.  
-However, all components already have a <literal>page</literal>
-property, the &IPage; that ultimately contains them.  The specification for the &PageLink; component
-connects the <literal>page</literal> parameter to a property named <literal>targetPage</literal> instead.
-</para>
-
-<para>
-Defining a connected parameter as required means that the parameter must be bound
-<emphasis>and</emphasis> the binding must provide a non-null value.  A runtime exception
-is thrown when a required parameter's binding yields a null value.
-</para>
-
-<para>
-The following examples show how to declare and use a parameter:
-</para>
-
-<example>
-	<title>Connected Parameter - Specification</title>
-<programlisting><![CDATA[
-
-
-<specification ...>
-
-  <parameter name="color" direction="in" java-type="java.awt.Color"/>
-  
-  ...
-]]>
-</programlisting>
-</example>
-
-<example>
-	<title>Connected Parameter - Java Code</title>
-<programlisting>
-
-public class ColorComponent extends &AbstractComponent;
-{
-  private Color color = Color.RED;
-  
-  public Color getColor()
-  {
-    return color;
-  }
-    
-  public void setColor(Color color)
-  {
-    this.color = color;
-  }
-  
-  protected void renderComponent(&IMarkupWriter; writer, &IRequestCycle; cycle)
-  throws RequestCycleException
-  {
-    writer.begin("font");
-    writer.attribute("color", ^RequestContext;.encodeColor(color);
-    
-    renderWrapped(writer, cycle);
-    
-    writer.end();
-  }
-  
-}
-</programlisting>
-</example>
-
-<para>
-In this example, the component writes its content inside a <sgmltag class="starttag">font</sgmltag>
-element, with the HTML color attribute set from the <literal>color</literal> parameter.  &RequestContext;
-includes a static convienience method for converting from a 
-<classname>Color</classname> object to an encoded color
-that will be meaningful to a web browser.
-</para>
-
-<para>
-The parameter is optional and defaults to red if not specified (that is, if the parameter
-is not bound).
-</para>
-
-
-<para>
-At runtime, Tapestry will invoke <function>setColor()</function> first (if the <literal>color</literal>
-parameter is bound).  It will then invoke <function>renderComponent()</function>.  Finally (even if
-<function>renderComponent()</function> throws an exception) it will invoke <function>setColor()</function>
-again, to restore it back to the default value, <literal>Color.RED</literal>.
-</para>
-
-<para>
-This code includes a defect: because the parameter is optional, there is nothing to prevent
-it from being bound to null.
-</para>
-    
-</section>    
-    
-    <section id="components.informal-parameters">
-      <title>Formal vs. Informal Parameters</title>
-      <para>
-Tapestry components have two types of parameters: formal and informal.
-</para>
-      <para>
-Formal parameters are parameters defined in the 
-<link linkend="spec.parameter">component specification</link>.  
-Each formal parameter has a specific
-(case sensitive) name and may be required or optional.
-</para>
-      <para>
-In many cases, there is a one-to-one mapping between a Tapestry component and a specific
-HTML tag.  For example, &Body; and <sgmltag class="starttag">body</sgmltag>,
-&Form; and <sgmltag class="starttag">form</sgmltag>, etc.  In other cases, a Tapestry component
-produces a known single HTML tag.  For example, &ActionLink;, &DirectLink;, &PageLink; and &ServiceLink;
-all produce an <sgmltag class="starttag">a</sgmltag> tag.
-</para>
-      <para>
-To support truly rich interfaces, it is often necessary to specify additional attributes
-of the HTML tags; usually this means setting the <varname>class</varname> of a tag so as to
-get visual properties from a stylesheet.  In other cases, display attributes may be specified inline
-(this is often the case with attributes related to display width and height, since
-CSS support for these properties are inconsistent between the major HTML 4.0 browsers).
-</para>
-      <para>
-In theory, these components <emphasis>could</emphasis> define additional formal parameters for
-each possible HTML attribute ... but there are a huge number of possible attributes, many of
-which are specific to a particular browser.
-</para>
-      <para>
-Instead, Tapestry has the concept of an <emphasis>informal parameter</emphasis>.  
-This is an "additional" parameter, not specified
-in the component's specification.  In most cases, where informal parameters are allowed, they
-are added as additional HTML attributes (there are a few special exceptions, such as the &Script; component).
-</para>
-      <para>
-Informal parameters do have some limitations.  Informal parameters that conflict with the names of
-any formal parameters, or with any of the HTML attributes generated directly by the component, are silently
-ommitted.  The comparison is case-insensitve.  Thus, for a &DirectLink; component, you can not change
-the <varname>href</varname> attribute, even if you supply a <varname>Href</varname> (or other variation) informal parameter.
-</para>
-      <para>
-Not all Tapestry components even allow informal parameters; this is explicitly 
-stated in the <link linkend="spec.component-specification">component specification</link>.
-</para>
-      <note>
-        <title>Informal Parameters that are Assets</title>
-        <para>
-Tapestry includes a special case when an informal parameter is actually an 
-<link linkend="components.assets">asset</link>.  The URL for the asset is determined and that is the value
-supplied for the attribute.
-</para>
-      </note>
-    </section>
-    <section id="components.embedded">
-      <title>Embedded Components</title>
-      <para>
-Under Tapestry, it is common to define new components 
-by combining existing components.  The existing components are 
-embedded in the containing component.  This is always true at the top level; Pages, 
-which are still Tapestry components, always embed other Tapestry components.
-</para>
-      <para>
-Each embedded component has an <varname>id</varname> (an identifying string) 
-that must be unique within the containing component.  
-Every non-page component is embedded inside some other 
-component forming a hierarchy that can get quite deep 
-(in real Tapestry applications, some pages have components nested three to five levels deep).
-</para>
-      <para>
-In some cases, a component will be referenced by its id path.  
-This is a series of component ids separated by periods, representing a path from 
-the page to a specific component.  The same notation as a property path 
-is used, but the information being represented is quite different.
-</para>
-      <para>
-For example, the id path <literal>border.navbar.homeLink</literal>
-represents the component named <varname>homeLink</varname>, 
-embedded inside a component named <varname>navbar</varname>, 
-embedded inside a component named <varname>border</varname>, embedded inside some page.
-</para>
-      <para>
-Tapestry components are "black boxes".  They have a set of parameters that may 
-be bound, but their internals, how they are implemented, are not revealed.
-</para>
-      <para>
-Primitive components may not embed other components, or even 
-have a template.  Nearly all the built-in components are primitive; they are 
-building blocks for constructing more complex components.
-</para>
-      <para>
-Alternately, a component may be implemented using a template and embedded components.  
-In either case, the names, types or very existence of embedded components is private, 
-hidden inside the containing component's "black box".
-</para>
-    </section>
-    
-    
-    <section id="components.html-template">
-      <title>HTML Templates</title>
-      
-      <para>Nearly all Tapestry components combine static HTML
-	<footnote>
-          <para>
-			The current releases of Tapestry is specifically oriented around HTML.  Some support for
-			non-HTML languages, such as XML, XHTML or WML is already present
-			and will be expanded in the future.
-		</para>
-        </footnote>
-from a template with additional dynamic content 
-(some few components are just dynamic content).  
-Often, a Tapestry component embeds other Tapestry components.  
-These inner components are referenced in the containing component's template.
-</para>
-
-<para>
-One of the features of Tapestry is <emphasis>invisible instrumentation</emphasis>.  In most
-web application frameworks, converting a static HTML page into a usable template is a destructive process:
-the addition of new tags, directives or even Java code to the template means that it will no
-longer preview properly in a <acronym>WYSIWYG</acronym> editor.
-</para>
-
-<para>
-Tapestry templates are instrumented using a new HTML attribute, <varname>jwcid</varname>, to any existing
-element.  Elements with such attributes are recognized by Tapestry as being dynamic, and driven by
-a Tapestry component, but a <acronym>WYSIWYG</acronym> editor will simply ignore them.  Once a template
-is instrumented, it may be worked on by 
-<link linkend="components.html-production">both the  HTML producer and the Java developer</link>.
-</para>
-
-      <para>
-Identifying a Tapestry component within
-an HTML template 
-is accomplished by adding a <varname>jwcid</varname> attribute to a tag.
-</para>
-      <informalexample>
-        <programlisting>
-&lt;<replaceable>any</replaceable> jwcid="<replaceable>component id</replaceable>" ... &gt;  <replaceable>body</replaceable>  &lt;/<replaceable>any</replaceable>&gt;
-</programlisting>
-
-      <para>or
-</para>
-
-        <programlisting>
-&lt;<replaceable>any</replaceable> jwcid="<replaceable>component id</replaceable>" ... /&gt;
-</programlisting>
-      </informalexample>
-      <para>
-Most often, the HTML element chosen is <sgmltag class="starttag">span</sgmltag>, though (in fact) Tapestry
-completely ignores the element chosen by the developer, except to make sure the open and close tags balance.
-</para>
-      <para>
-The parser used by Tapestry is relatively forgiving about case 
-and white space.  Also, the component id (and any other attributes) can be enclosed in 
-double quotes (as above), single quotes, or be left unquoted.
-</para>
-      <para>
-You are free to specify additional
-attributes.  These attributes will become
-<link linkend="components.informal-parameters">informal parameters</link> for the Tapestry component.
-</para>
-
-      <para>
-The start and end tags for Tapestry components must balance properly. This includes cases where the
-end tag is normally ommitted, such as <sgmltag class="starttag">input</sgmltag> elements.  Either a closing
-tag must be supplied, or the XML-style syntax for an empty element must be used (that is, 
-a slash just before the end of the tag).
-</para>
-
-
-<section id="component.html-template.localization">
-	<title>Localizing sections of a template</title>
-	
-<para>
-Tapestry includes an additional template feature to assist with localization of a web application.
-By specifying a <sgmltag class="starttag">span</sgmltag> element with a special attribute,
-<varname>key</varname>, Tapestry will replace the entire 	
-<sgmltag class="starttag">span</sgmltag> tag with a
-<link linkend="components.localization.strings">localized string</link> for the component.
-</para>
-
-
-<para>
-This construct takes one of two forms:
-</para>
-
-<informalexample>
-<programlisting>
-&lt;span key="<replaceable>key</replaceable>" ... &gt; ... &lt;/span&gt;
-</programlisting>
-<para>or</para>
-<programlisting>
-&lt;span key="<replaceable>key</replaceable>" ... /&gt;
-</programlisting>
-</informalexample>
-
-<para>
-If only the <varname>key</varname>
-attribute is specified, then the <sgmltag class="starttag">span</sgmltag>
-is simply replaced with the localized string.  However, if any additional attributes
-are specified for the <sgmltag class="starttag">span</sgmltag> tag beyond
-<varname>key</varname>, then
-the <sgmltag class="starttag">span</sgmltag> tag will be part of the rendered HTML, with
-the specified attributes.
-</para>
-
-<para>
-The upshot of this is that sections of the HTML template can be invisibly localized
-simply by wrapping the text to be replaced inside a <sgmltag class="starttag">span</sgmltag>
-tag.  The wrapped text exists, once more, as sample text to be displayed
-in a <acronym>WYSIWYG</acronym> editor.
-</para>
-
-</section> <!-- component.html-template.localization -->
-
-<section id="component.html-template.body">
-	<title>Components with Bodies</title>
-
-<para>
-In Tapestry, individual components may have their own HTML templates.   This is a very powerful
-concept ... it allows powerful and useful components to be created with very little code.   By contrast,
-accomplishing the same using JSP tags requires either that all the HTML be output
-from the JSP tag directly, or that the JSP tag use some additional framework, such as Velocity,
-to enable the use of a template.  In either case the JSP tag author will need to divide the code or template
-into two pieces (before the body and after the body).  Tapestry allows components to simply have 
-a single template, with a marker for where the body is placed.
-</para>
-
-
-<para>
-During the rendering
-of a page, Tapestry knits together the templates of the page and all the nested components to create
-the HTML response sent back to the client web browser.
-</para>
-
-
-<informalexample>
-<programlisting>
-Container content <co id="component.html-template.body.container1"/>
-
-&lt;span jwcid="component"&gt; <co id="component.html-template.body.component"/>
-
-  Body content <co id="component.html-template.body.content"/>
-  
-&lt;/span&gt;
-
-More container content <co id="component.html-template.body.container2"/>
-</programlisting>
-</informalexample>
-
-<calloutlist>
-	<callout arearefs="component.html-template.body.container1">
-	<para>
-	This portion of the container content is rendered first.
-	</para>
-	</callout>
-	
-	<callout arearefs="component.html-template.body.component">
-	<para>
-	The component is then rendered.  It will render, possibly using its
-	own template.
-	</para>
-	</callout>
-	
-	<callout arearefs="component.html-template.body.content">
-	<para>
-	The component controls <emphasis>if</emphasis>, <emphasis>when</emphasis> and
-	<emphasis>how often</emphasis> the body content from its container
-	is rendered.
-	</para>
-	
-	<para>
-	Body content can be a mix of static HTML and additional components.  These
-	components are <emphasis>wrapped</emphasis> by the component, but are
-	<emphasis>embedded</emphasis> in the component's container.
-	</para>
-	</callout>
-	
-	<callout arearefs="component.html-template.body.container2">
-	<para>
-	After the component finishes rendering, the remaining content
-	from the container is rendered.
-	</para>
-	</callout>
-</calloutlist>
-
-
-
-      <para>
-The body listed above can be either static HTML or other Tapestry 
-components or both.  Elements in the body of a component are 
-wrapped by the containing component.  The containing component controls the 
-rendering of the elements it wraps in its body.  For example, 
-the &Conditional; component may decide not to 
-render its body and the &Foreach; component may render 
-its body multiple times.
-</para>
-      <para>
-Not all Tapestry components should have a body.  
-For example, the &TextField; component creates an
-<sgmltag class="starttag">input type=text</sgmltag>
-form element and it makes no sense for it to contain anything else.  
-Whether a component allows a body (and wrap other elements), or whether
-it discards it, is defined in the 
-<link linkend="spec.component-specification">component's specification</link>.
-</para>
-      <para>
-Tapestry includes a special component, &RenderBody;, 
-which is used to render the body content from a component's container.  
-It makes it easy to create components that wrap other components.
-</para>
-
-</section> <!-- component.html-template.body -->
-
- 
-    </section> <!-- components.html-template -->
-    
-    <section id="components.html-production">
-      <title>Tapestry and HTML Production</title>
-      <para>
-Tapestry is design to work in a large-scale environment, that typically features
-two seperate teams: a "creative" team that produces HTML and a 
-"technical" team that produces Tapestry pages, components and Java code.
-</para>
-      <para>
-The division of skills is such that the creative team has virtually no knowledge of Java and
-a minimal understanding of Tapestry, and the technical team has a limited understanding of HTML 
-(and tend to be color blind).
-</para>
-      <para>
-The typical workflow is that the technical team implements the application, using very minimal HTML 
-... that is, minimal attention to layout, font size, colors, etc.  Just enough to be sure that
-the functionality of the application is there.
-</para>
-      <para>
-Meanwhile, the creative team is producing HTML pages of what the finished application will look like.  
-These pages are like snapshots of the HTML produced by the running application.
-</para>
-      <para>
-        <emphasis>Integration</emphasis> is the process of merging these two views of the application together.
-Primarily, this involves marking up tags within the HTML page with 
-<varname>jwcid</varname> attributes, 
-to indicate
-to Tapestry which portions of the page are dynamic.  In this way, the 
-page can be used as a Tapestry HTML template.  These changes are designed to be invisible to a
-<acronym>WYSIWYG</acronym> HTML editor.
-</para>
-
-      <para>
-Tapestry includes a number of additional features to allow the HTML producers to continue
-working on HTML templates, <emphasis>even after</emphasis> their initial efforts have been
-integrated with the Java developer's code.
-</para>
-      <section>
-        <title>Implicitly removed bodies</title>
-        <para>
-In many cases, a component doesn't allow a body, but one may be present in the HTML template.
-As usual, this is declared in
-the <link linkend="spec.component-specification">component's specification</link>.
-Tapestry considers that body to be a sample value, one which exists to allow the HTML producer
-to verify the layout of the page using a WYSIWYG editor (rather than having to run the entire application).  
-Tapestry simply edits out the body at runtime.
-</para>
-        <para>For example, an HTML producer may create an HTML template that includes a table
-cell to display the user's name.  The producer includes a sample value so that the
-cell isn't empty (when previewing the HTML layout).
-</para>
-        <informalexample>
-          <programlisting>
-&lt;td&gt;&lt;span jwcid="insertName"&gt;John Doe&lt;/span&gt;&lt;/td&gt;
-</programlisting>
-        </informalexample>
-        <para>
-The &Insert; component doesn't allow a body, so Tapestry edits out the 
-content of the <sgmltag class="starttag">span</sgmltag> tag from the HTML template.  The fact that
-a <sgmltag class="starttag">span</sgmltag> was used to represent the &Insert; component in the
-HTML template is irrelevant to Tapestry; any tag could have been used, Tapestry just
-cares that the start and end tags balance.
-</para>
-        <para>
-At runtime, Tapestry will combine the HTML template and the &Insert; component to produce the
-final HTML:
-</para>
-        <informalexample>
-          <programlisting>
-&lt;td&gt;Frank N. Furter&lt;/td&gt;
-</programlisting>
-        </informalexample>
-        <para>
-This editting out isn't limited to simple text; any HTML inside the body is removed.  However,
-none of that content may be dynamic ... the presence of a
-<varname>jwcid</varname> attribute will cause a parsing exception.
-</para>
-      </section>
-      <section>
-        <title>Explicitly removed bodies</title>
-        <para>
-Another feature related to production and integration is the ability to remove sections of the HTML template.
-Producers often include some optional portions on the page.  The canonical example of this is a page that 
-shows a table of results; the HTML producer will usually include extra rows to demonstrate the look and layout of
-a fully populated page.
-</para>
-        <para>
-The first row will be wrapped by a &Foreach; and otherwise changed to include dynamic links and output, but what about
-the other rows?
-</para>
-        <para>
-To handle this case,
-Tapestry recognizes a special <varname>jwcid</varname> attribute value: <literal>$remove$</literal>.  
-Using this special id causes
-Tapestry to edit out the tag and all of its contents.  Thus, each additional <sgmltag class="starttag">tr</sgmltag> in the
-table should specify the value <literal>$remove$</literal> for attribute <varname>jwcid</varname>.
-</para>
-        <informalexample>
-          <programlisting><![CDATA[
-<table>
-  <tr jwcid="foreach">
-    <td><span jwcid="insertUserName">John Doe</span></td>
-    <td><span jwcid="insertAge">42</span></td>
-  </tr>
-  <tr jwcid="$remove$">
-  	<td>Frank N. Furter</td>
-  	<td>47</td>
-  </tr>
-  <tr jwcid="$remove$">
-    <td>Bob Doyle</td>
-    <td>24</td>
-  </tr>
-</table>]]></programlisting>
-        </informalexample>
-      </section>
-      <section>
-        <title>Limiting template content
-	</title>
-        <para>
-In a typical Tapestry application, some form of Border component provides a significant portion of every page.
-This typically includes the outermost <sgmltag class="starttag">html</sgmltag>, <sgmltag class="starttag">head</sgmltag> and <sgmltag class="starttag">body</sgmltag>
-tags, as well as <sgmltag class="starttag">table</sgmltag>s used to control layout.
-</para>
-        <para>
-In the static HTML pages from the creative team, this is not directly visible ... they <emphasis>must</emphasis>
-include all the content
-normally generated by the Border component in order to see what the HTML page actually looks like.
-</para>
-        <para>
-By default, the <emphasis>entire</emphasis> HTML template is the content for the page.  
-This causes a problem, even after a <sgmltag class="starttag">span</sgmltag>
-is added, to represent the Border component ... much of the HTML is duplicated, 
-once from the static HTML, then dynamically from the Border component.
-</para>
-        <para>
-To eliminate this problem, Tapestry has a second special <varname>jwcid</varname> attribute: <literal>$content$</literal>.
-Using this special id causes Tapestry to limit its view of the HTML template to just the content inside the tag.  Anything outside
-the defined content is completely ignored.
-</para>
-      </section>
-      <section>
-        <title>Limits</title>
-        <para>
-Ideally, the HTML pages created by the HTML producers would be used as is
-as the HTML templates.  Changes made for integration, the adding of <varname>jwcid</varname> attributes and such,
-would be copied back into the HTML pages.
-</para>
-        <para>
-Given the use of the <literal>$remove$</literal> and <literal>$content$</literal>
-          <varname>jwcid</varname>'s, 
-this is practical
-to a point.  Once the application starts using a number of re-usable components, there
-isn't a good way to perform the integration short of cutting and replacing
-some of the HTML page content to form the HTML template.
-</para>
-      </section>
-    </section>
-    <section id="components.localization">
-      <title>Localization</title>
-      <para>
-Tapestry has built in support for localization, designed to be easy to use. This localization support
-is defined in terms of transforming the user interface into a format appropriate the the locale
-of the user.  This primarily takes the form of localized text (translated into the
-end-user's language), but can also affect other aspects of look and feel including colors, images and layout.
-</para>
-
-<para>
-Tapestry has two different methods for supporting localization; developers are free to
-mix and match solutions according to their own preferences.
-</para>
-
-      <para>Each client connecting to the application will select a particular <classname>Locale</classname>. 
-When a page for the application is created, the locale is used to select the correct localized
-resources.  
-Locales are defined by the ISO (International Standards Organization).  
-A locale consists of a language code (such as 'en' for English, 'de' for German or 'fr' for French) 
-and a country code (such as 'AU' for Australia, 'BE' for Belguim, or  'GB' for United Kingdom).
-</para>
-
-
-<para>
-A client's initial locale is determined by analyzing HTTP headers provided with the initial request.
-An application may override this default, which records a client-side cookie identifyng the desired locale.
-An example of this is included in the Tapestry Workbench demonstration.
-</para>
-
-<section id="components.localization.strings">
-	<title>Localization with Strings</title>
-	
-<para>
-Each individual component may have a set of <emphasis>localized strings</emphasis>.
-Remember that pages are just a specific kind of component.
-This set is built, much like the properties of a &ResourceBundle;, from one
-or more <literal>.properties</literal> files.  These files are located on the classpath, in the same
-directory as the component specification (the <literal>.jwc</literal> file).
-</para>
-
-<para>
-The search for strings is much the same as with &ResourceBundle;, except
-that only <literal>.properties</literal> files are considered (&ResourceBundle; also looks for classes).
-</para>
-
-<para>
-Example: for a component <filename>/com/skunkworx/skunkapp/Border.jwc</filename> and a locale of
-<literal>fr_BE</literal> would be:
-</para>
-
-  <itemizedlist>
-    <listitem>
-      <para>
-        <filename>/com/skunkworx/skunkapp/Border_fr_BE.properties</filename>
-      </para>
-    </listitem>
-    <listitem>
-      <para>
-        <filename>/com/skunkworx/skunkapp/Border_fr.properties</filename>
-      </para>
-    </listitem>
-    <listitem>
-      <para>
-        <filename>/com/skunkworx/skunkapp/Border.properties</filename>
-      </para>
-    </listitem>
-  </itemizedlist>
-
-
-<para>
-Searching for individual keys works just as with &ResourceBundle;, the search starts in the most
-specific file (<literal>Border_fr_BE.properties</literal>) and continues downward if not found.
-</para>
-	
-	
-<para>
-Components can gain access to their container's localized strings
-via the &spec.string-binding;
-element in the component specification.
-</para>
-
-</section>
-
-<section id="components.localization.templates">
-	<title>Localization with Templates</title>
- 
-<para>
-Tapestry allows multiple versions of HTML templates and assets (described in a 
-<link linkend="components.assets">later section</link>) 
-to be deployed with the application.
-</para>
-
-      <para>
-The base template name is derived from the specification name, 
-by changing the <literal>jwc</literal> extension to <literal>html</literal>.  
-For example, component <filename>/com/skunkworx/skunkapp/Border.jwc</filename>
-will have a base template name of  <filename>/com/skunkworx/skunkapp/Border.html</filename>.
-This resource name is used as the basis of a search that includes the locale.  
-Various suffixes are inserted just before the '.html' extension.
-</para>
-
-      <para>
-A French speaking Belgian visitor would provoke the following search:
-</para>
-
-      <itemizedlist>
-        <listitem>
-          <para>
-            <filename>/com/skunkworx/skunkapp/Border_fr_BE.html</filename>
-          </para>
-        </listitem>
-        <listitem>
-          <para>
-            <filename>/com/skunkworx/skunkapp/Border_fr.html</filename>
-          </para>
-        </listitem>
-        <listitem>
-          <para>
-            <filename>/com/skunkworx/skunkapp/Border.html</filename>
-          </para>
-        </listitem>
-      </itemizedlist>
-   
-
-<note>
-	<para>
-	This form of localization actually predates the alternate form,
-	using <link linkend="components.localization.strings">localized strings</link>.
-	Localizing the strings seperately from the rest of the HTML template
-	is generally a better and easier way.  Localization of templates
-	will, in the future, be used primarily when changing the layout of the template ...
-	for example, to provide a right-to-left orientation in a Hebrew
-	localization.
-	</para>
-</note>
-
-</section>
-
-</section> <!-- components.localization -->
-
-    <section id="components.assets">
-      <title>Assets</title>
-      <para>
-Assets are images (GIF, JPEG, etc.), movies, sounds or other collateral associated 
-with a web application.  Assets come in three flavors:  external, context and private.
-</para>
-      <para>
-External assets live at an arbitrary URL.  Context assets use a URL within the 
-servlet context hosting the Tapestry application; 
-these assets are deployed 
-within the same Web Application Archive (WAR) as the application.
-</para>
-      <para>
-Private assets come from the Java classpath and are 
-resources not normally visible to the web server.
-</para>
-      <para>
-Tapestry uses the assets concept to address two areas:  localization and deployment.
-</para>
-      <para>
-For localization:  internal and private assets are localized, 
-just like HTML templates.  That is, the path name provided is 
-used as the basis for a search that takes into account the desired locale.  
-External assets can't be localized in this way.
-</para>
-      <para>
-Private assets allow for easy deployment because the assets are 
-packaged with the HTML templates and Java code of the application, 
-inside a Java Archive (JAR) file.
-</para>
-      <para>
-Private assets support re-usability; a re-usable component may be 
-packaged with supporting assets (typically, image files) and used in any 
-Tapestry application without change, and without having to locate, extract or 
-otherwise fiddle with those assets.
-</para>
-      <para>
-The Tapestry framework provides two ways of exposing the assets to the client web browser.
-</para>
-      <para>
-First, it provides a service that will access the asset dynamically.  
-The URL encodes the application servlet and the resource to download, 
-and Tapestry framework code will pump the bytes down to the client web browser.  
-This is the default behavior (and is most useful during development).
-</para>
-      <para>
-The second method involves copying the asset out to a directory visible 
-to the web server, and creating a URL for it in its final location.  
-This requires some extra configuration of the application.  
-This method also has some implications when deploying new versions of the web application.  
-These are addressed later in this document.
-</para>
-    </section>
-    <section id="components.helper-beans">
-      <title>Helper Beans</title>
-      <para>
-There is a second form of aggregation allowed with Tapestry components.  The first way, covered previously, is to use embedded
-components to extend the functionality of the outer component.  In some cases, useful behavior can be isolated, 
-not into an additional component, but into a simple JavaBean.
-</para>
-      <para>
-These additional beans, called helper beans, are defined in the component specification, in the
-&spec.bean; element.
-Each bean has a unique name, a class to instantiate,
-and a lifecycle (which controls how long the component keeps a reference to the bean).  The specification 
-allows properties of the bean to be set as well, using
-the &spec.set-property; and &spec.set-string-property; elements.  
-Helper beans are accessed through the <varname>beans</varname> property of the component.
-</para>
-      <para>
-Beans are created as needed, they may then be cached for future use according to their declared lifecycle.
-The default lifecycle is <varname>request</varname>, meaning that the same bean will be returned until the end of the current request cycle.
-</para>
-      <para>
-An alternate lifecycle, <varname>page</varname>, means that once the bean is instantiated, it will continue to be available
-for the lifetime of the page containing it.  Remember that helper beans should never contain any client-specific
-state, since a page will be used by multiple sessions and clients.
-</para>
-      <para>
-The last available lifecycle, <varname>none</varname>, indicates that the bean is not cached at all, and will be created fresh on
-each property access.
-</para>
-
-      <para>
-Tapestry includes a handful of useful helper beans.  &Default; is used to provide default values for optional parameters.
-&ValidationDelegate; 
-and several implementions of &IValidator;
-used with &ValidField;, it allows simple handling of validation and presentating validation errors.
-&EvenOdd; is used by the <link linkend="inspector">Tapestry Inspector</link>; it generates a stream of values alternating between "even" and "odd"; this is combined with cascading stylesheets to make the rows alternate between white and grey backgrounds.
-</para>
-    </section>
-
-  </chapter>
\ No newline at end of file
diff --git a/3.0.4/doc/src/DevelopersGuide/cycle.xml b/3.0.4/doc/src/DevelopersGuide/cycle.xml
deleted file mode 100644
index dc17b5a..0000000
--- a/3.0.4/doc/src/DevelopersGuide/cycle.xml
+++ /dev/null
@@ -1,399 +0,0 @@
-<!-- $Id$ -->
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
- 
-  <chapter id="cycle">
-    <title>Understanding the Request Cycle</title>
-    <para>
-Web applications are significantly different in structure from other types of interactive applications.  
-Because of the stateless nature of HTTP (the underlying communication protocol between web browsers 
-and web servers), the server is constantly "picking up the pieces" of a conversation with the client.
-</para>
-    <para>
-This is complicated further in a high-volumes systems that utilizes load balancing and fail over.  
-In these cases, the server is expected to pick up a conversation started by some other server.
-</para>
-    <para>
-The Java Servlet API provides a base for managing the client - server interactions, 
-by providing the &HttpSession; object, which is used to store 
-server-side state information for a particular client.
-</para>
-    <para>
-Tapestry picks up from there, allowing the application engine, pages and components 
-to believe (with just a little bit of work) that they are in continuous contact 
-with the client web browser.
-</para>
-    <para>
-At the center of this is the request cycle.  This request cycle is so fundamental under Tapestry 
-that a particular object represents it, and it is used throughout 
-the process of responding to a client request and creating an HTML response.
-</para>
-    <para>
-Each application service makes use of the request cycle in its own way.  
-We'll describe the three common application services (page, action and direct), 
-in detail.
-</para>
-    <para>
-In most cases, it is necessary to think in terms of two consecutive request cycles.  
-In the first request cycle, a particular page is rendered and, along the way, any number 
-of URLs are generated and included in the HTML.  The second request cycle 
-is triggered by one of those service URLs.
-</para>
-    <section id="cycle.URLs">
-      <title>Service URLs and query parameters</title>
-      <para>
-All URLs generated by the framework consist of the the path to the servlet, and up to three
-query parameters.
-
-<itemizedlist>
-          <listitem>
-            <para>
-              <varname>service</varname>: the name of the service that will be used
-to processes the request.
-</para>
-          </listitem>
-          <listitem>
-            <para>
-              <varname>context</varname>: contextual information needed by the service; typically
-the name of the page or component involved.  Often there are several pieces of
-information, separated by slashes.
-</para>
-          </listitem>
-          <listitem>
-            <para>
-              <varname>sp</varname>: additional parameters that can be made available to
-the component.  This is used by a &DirectLink; component.  If there is more than one
-service parameter, then there will be multiple <varname>sp</varname>
-parameters in the URL.</para>
-          </listitem>
-        </itemizedlist>
-      </para>
-    </section>
-    <section id="cycle.page">
-      <title>Page service</title>
-      <para>
-The page service is used for basic navigation between pages in the application.  
-The page service is tightly tied to the &PageLink; component.
-</para>
-      <para>
-A page service stores the name of the page as the single value in the service context.
-</para>
-      <para>
-The request cycle for the page service is relatively simple.
-</para>
-      <figure>
-        <title>Page Service Sequence</title>
-        <mediaobject>
-          <imageobject>
-            <imagedata fileref="images/Page-Service-sequence.gif" format="GIF"/>
-          </imageobject>
-        </mediaobject>
-      </figure>
-      <para>
-The URL contains the name of the page, and the corresponding page is aquired from
-the request cycle.  The page is given a chance to validate that the user can
-access it, it can throw &PageRedirectException; to force a render of a different page.
-Otherwise, <function>setPage()</function> tells the request cycle which page will
-be used to render a response, and <function>renderPage()</function> peforms
-the actual render.
-</para>
-    </section>
-    <section id="cycle.listeners">
-      <title>Action and Direct listeners</title>
-      <para>
-The &ActionLink;, &DirectLink; and &Form; components (which make use of
-the <link linkend="cycle.action">action</link> and <link linkend="cycle.direct">direct</link>
-services) inform the application when they have been triggered using listeners.
-</para>
-      <para>
-A listener is an object that implements the &IActionListener; interface.
-</para>
-      <para>
-<informalexample>
-          <programlisting>
-public void actionTriggered(IComponent component, IRequestCycle cycle)
-  throws RequestCycleException;
-</programlisting>
-        </informalexample>
-      </para>
-      <para>
-Prior to release 1.0.2, it was necessary to create an object to be notified
-by the component; this was almost always an annonymous inner class:
-
-<informalexample>
-          <programlisting>
-public IActionListener getFormListener()
-{
-  return new IActionListener()
-  {
-    public void actionTriggered(IComponent component, IRequestCycle cycle)
-      throws RequestCycleException
-    {
-      // perform some operation ...
-    }
-  };
-}
-</programlisting>
-        </informalexample>
-      </para>
-      <para>
-Although elegant in theory, that's simply too much Java code for too little effect.
-Starting with Tapestry 1.0.2, it is possible to create a
-<emphasis>listener method</emphasis> instead.
-</para>
-      <para>
-A listener method takes the form:
-
-<informalexample>
-          <programlisting>
-public void <replaceable>method-name</replaceable>(IRequestCycle cycle)
-throws RequestCycleException;
-</programlisting>
-        </informalexample>
-      </para>
-<note>
-	<para>The throws clause is optional and may be omitted.  However, no other
-	exception may be thrown.
-	</para>
-</note>      
-
-      <para>
-In reality, listener <emphasis>objects</emphasis> have not gone away.  Instead, there's a mechanism
-whereby a listener object is created automatically when needed.
-Each component includes a property, <varname>listeners</varname>, that is a collection of
-listener objects for the component, synthesized from the available public methods.  The
-listener objects are properties, with the names corresponding to the method names.
-</para>
-      <tip>
-        <para>
-The class <classname>AbstractEngine</classname> (the base class for &SimpleEngine;)
-also implements a listeners property.  This allows you to easily add listener methods
-to your application engine.
-</para>
-      </tip>
-      <para>
-The earlier example is much simpler:
-</para>
-      <informalexample>
-        <programlisting>
-public void formSubmit(IRequestCycle cycle)
-{
-  // perform some operation ...
-}
-</programlisting>
-      </informalexample>
-      <para>
-However, the property path for the listener binding must be changed, from <varname>formListener</varname> to
-<varname>listeners.formSubmit</varname>.
-</para>
-    </section>
-    <section id="cycle.direct">
-      <title>Direct service</title>
-      <para>
-The direct service is used to trigger a particular action.  This service is tied to the 
-&DirectLink; component.  The service context identifies the page and component within the page.  Any parameters
-specified by the &DirectLink; component's <varname>context</varname> parameter are encoded as well.
-</para>
-      <para>
-The request cycle for the direct service is more complicated that the page service.
-</para>
-      <figure>
-        <title>Direct Service Sequence</title>
-        <mediaobject>
-          <imageobject>
-            <imagedata fileref="images/Direct-Service-sequence.gif" format="GIF"/>
-          </imageobject>
-        </mediaobject>
-      </figure>
-      <para>
-As with the page service, the page involved has a chance validate the request.
-The component is located within the page, and the page is set as the default
-response page.  The listener is free to override this, and can load other pages,
-change their properties, or otherwise affect the state of the application.
-</para>
-      <para>
-After the listener has its chance to respond to the request, a response page
-is renderred.
-</para>
-      <note>
-        <title>&IDirect; vs. &DirectLink;</title>
-        <para>
-The sequence shown above is for the &DirectLink; component, which implements the &IDirect;
-interface.  In some rare cases, it is desirable to have a different component
-implement the &IDirect; interface instead.  It will still implement the
-<function>trigger()</function> method, but will respond in its own way, likely without
-a listener.
-</para>
-      </note>
-      <para>
-This is the primary way (besides forms) in which applications respond to the user.  
-What's key is the component's listener, of type 
-&IActionListener;.  This is the hook that allows 
-pre-defined cotheirponents from the Tapestry framework to access application specific behavior.   
-The page or container of the 
-&DirectLink; component provides the necessary listener objects using dynamic bindings.
-</para>
-      <para>
-The direct service is useful in many cases, but does have its limitations.  
-The state of the page when the listener is invoked is its state just prior to rendering 
-(in the previous request cycle).  This can cause a problem when the action to be performed is reliant 
-on state that changes during the rendering of the page.  In those cases, the 
-<link linkend="cycle.action">action service</link>
-(and &ActionLink; or &Form; components) should be used.
-</para>
-
-      <para>
-The &DirectLink; component has an optional parameter named <varname>parameters</varname>. 
-The value for this may be a single object, an array of objects,
-or a &List;.  Each object is converted into a string encoding, that is
-included in the URL.
-When the action is triggered, the array is reconstructed (from the URL) and stored
-in the &IRequestCycle;, where it is available to the listener.  The type is maintained, thus if
-the third parameter is of type &Integer; when the URL is generated, then the third parameter
-will still be an &Integer; when the listener method is invoked.
-</para>
-
-<para>
-This is a very powerful feature of Tapestry, as it allows the developer to encode dynamic page state directly 
-into the URL when doing so is not compatible with the action service (described in the next section).
-</para>
-      <para>
-The most common use for these service parameters is to record 
-an identifier for some object that is affected by the link.  For 
-example, if the link is designed to remove an item from 
-the shopping cart (in an e-commerce example), the service parameters
-could identify which item 
-to remove in terms of a primary key, or line number within the order.
-</para>
-    </section>
-    <section id="cycle.action">
-      <title>Action service</title>
-      <para>
-The action service is also used to trigger a particular application-specific 
-action using an &ActionLink; component, and its listener.  
-The action service may also be used by the &Form; component to process HTML form submissions.
-</para>
-      <para>
-An action service encodes the page name and component for the request.  It also includes
-an action id.
-</para>
-      <para>
-The request cycle for the action service is more complicated that the direct service.  
-This sequence assumes that the component is an 
-&ActionLink;, the details of handling form submissions are described in a later section.
-</para>
-      <figure>
-        <title>Action Service Sequence</title>
-        <mediaobject>
-          <imageobject>
-            <imagedata fileref="images/Action-Service-Sequence.gif" format="GIF"/>
-          </imageobject>
-        </mediaobject>
-      </figure>
-      <para>
-The point of the action service is to restore the <emphasis>dynamic state</emphasis>
-of the page to how it was when the &ActionLink; component rendered the link.  Only then is
-the listener notified.</para>
-      <para>
-The process of restoring the page's dynamic state is called rewinding.  Rewinding is used to 
-go beyond restoring a page's persistent state and actually restore the page's dynamic state.  
-Whatever state the page was in when the action URL was rendered in the previous request cycle 
-is restored before the &ActionLink; component's listener is invoked.
-</para>
-      <para>
-Use of the action service is convenient, but not always appropriate.   
-Deeply nested &Foreach; components will result in a geometric increase in 
-processing time to respond to actions (as well as render the HTML).
-</para>
-      <para>
-If the data on the page is not easily accessible then the action service should be avoided.  
-For example, if the page is generated from a long running database query.  
-Alternate measures, such as storing the results of the query as persistent page state should be used. 
-Another alternative is to use the direct service (and &DirectLink; component) instead, as 
-it allows the necessary context to be encoded into the URL, using service
-parameters.  This can be very useful when the dynamic state of the page is dependant on 
-expensive or unpredictably changing data (such as a database query).  
-</para>
-      <para>
-For example, a product catalog could encode the primary key of the products listed as the 
-service parameters,
-to create links to a product details page.
-</para>
-    </section>
-    <section id="cycle.forms">
-      <title>Services and forms</title>
-      <para>
-Processing of requests for &Form; components is a little more complicated than 
-for ordinary &ActionLink; components.  
-This is because a &Form; will wrap a number of form-related components, such as 
-&TextField;, &Checkbox;, &PropertySelection; and others.
-</para>
-      <para>
-In order to accept the results posted in the HTML form, each of 
-these components must be given a chance to respond to the request.  A component responds to the 
-request by extracting a request parameter from the &HttpServletRequest;, 
-interpreting it, and assigning a value through a parameter.  
-</para>
-      <para>
-As with an &ActionLink; component, a full rewind must be done, 
-to account for conditional portions of the page and any &Foreach; components.
-</para>
-      <note>
-        <para>
-Starting with Tapestry release 1.0.2, &Form;s may now use the 
-<link linkend="cycle.direct">direct service</link> instead
-of the 
-<link linkend="cycle.action">action service</link>; this is configurable.  Using the direct service is the
-default behavior unless specified.  A rewind still occurs, it simply starts directly
-with the &Form; component, rather than having to "work down" to it.  This can be
-a performance gain if a page contains many forms.
-</para>
-      </note>
-      <para>
-The &Form; component doesn't terminate the rewind cycle until <emphasis>after</emphasis> all of 
-its wrapped components have had a chance to render.  It then notifies its own listener.
-</para>
-      <para>
-The basic components, &TextArea;  and &TextField;, 
-are quite simple.  They simply move text between the 
-application, the HTML and the submitted request. 
-</para>
-      <para>
-Individual &Checkbox; components are also simple: they 
-set a boolean property.  
-A &RadioGroup; and some &Radio; components 
-allow a property to be set to a value 
-(dependent on which radio button is selected by the user).
-
-The &PropertySelection; component is designed to more 
-efficiently handle this and can produce HTML for either 
-a popup list or a collection of radio buttons.
-</para>
-      <para>
-Tapestry also includes the more involved component, 
- &ValidField;,
- which is similar to the simple &TextField; component, 
-but provide greater validation and checking of input, and 
-provides the ability to visually mark fields that are required or in error.
-</para>
-      <para>
-Regardless of which service the &Form; uses, it encodes the query parameters
-(which identify the service and context)
-as hidden field elements, rather than encoding them into the URL.  This is necessary because some
-servlet containers ignore URL query parameters when using the HTTP POST request; therefore, it is necessary that all query parameters (including the ones related to the engine service), be part of the form posting ... and that means the use of hidden fields in the form.
-</para>
-    </section>
-  </chapter>
\ No newline at end of file
diff --git a/3.0.4/doc/src/DevelopersGuide/engine.xml b/3.0.4/doc/src/DevelopersGuide/engine.xml
deleted file mode 100644
index b7f390b..0000000
--- a/3.0.4/doc/src/DevelopersGuide/engine.xml
+++ /dev/null
@@ -1,495 +0,0 @@
-<!-- $Id$ -->
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
- <chapter id="engine">
-    <title>Application Engines and Services</title>
-    <para>
-The application engine is a central object whose responsibility is to run the request cycle for each 
-request.  To do this, it manages resources such as page loaders and page recorders and provides 
-services to the pages and components utilized during the request cycle.
-</para>
-    <para>
-Application engines are instantiated by the application's servlet (described in the next section).   
-They are stored into the &HttpSession; and are persistent between request cycles.
-</para>
-    <para>
-An important behavior of the engine is to provide named engine services, which are used to create and 
-respond to URLs.  The application engine creates and manages the request cycle and provides 
-robust default behavior for catching and reporting exceptions.
-</para>
-    <para>
-The application engine provides the page recorder objects used by the request cycle.  By doing so, 
-it sets the persistence strategy for the application as a whole.  For example, applications which use 
-or subclass &SimpleEngine; will use the simple method of 
-storing persistent state:  in memory.  Such applications may still be distributed, since the page 
-recorders will be serialized with the application engine (which is stored within the 
-&HttpSession;).
-</para>
-    <section id="engine.servlet">
-      <title>Application Servlet</title>
-      <para>
-Every Tapestry application has a single servlet, which acts 
-as a bridge between the servlet container and the 
-application engine.  The application servlet is an instance of 
-&ApplicationServlet;.
-</para>
-      <para>
-The first thing a servlet does, upon initialization, is read the application specification.
-To do this, it must know <emphasis>where</emphasis> the application specification is stored.
-</para>
-
-<para>
-Specifications are stored on the classpath, which means in a JAR file, or in the 
-<filename>WEB-INF/classes</filename> directory of the WAR.
-</para>
-
-<para>
-The servlet determines the location of the application specification from the
-web deployment descriptor.  A servlet initialization property, <varname>org.apache.tapestry.application-specification</varname>
-provides the locations of the specificiation as a path.
-</para>
-
-<example>
- <title>Web Deployment Descriptor</title>
-<programlisting>
-<![CDATA[
-<?xml version="1.0"?>
-<!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>
-  <display-name>Tapestry Virtual Library Demo</display-name>
-  <servlet>
-    <servlet-name>vlib</servlet-name>
-    <servlet-class>org.apache.tapestry.ApplicationServlet</servlet-class>
-    <init-param>
-    	<param-name>org.apache.tapestry.application-specification</param-name>
-    	<param-value>/net/sf/tapestry/vlib/Vlib.application</param-value>
-    </init-param>
-  	<load-on-startup>0</load-on-startup>
-  </servlet>
-  
-  <!-- The single mapping used for the Virtual Library application -->
-
-  <servlet-mapping>
-    <servlet-name>vlib</servlet-name>
-    <url-pattern>/app</url-pattern>
-  </servlet-mapping>
-  
-  <session-config>
-  	<session-timeout>15</session-timeout>
-  </session-config>
-    
-  <welcome-file-list>
-    <welcome-file>index.html</welcome-file>
-  </welcome-file-list>
-</web-app>
-]]>
-</programlisting>  
-</example>
-
-      <para>
-The servlet's main job is to find or create the &IEngine; instance.  It then delegates all the behavior
-for processing the request to the application engine.  Encoded in the URL will be a particular
-application service; the engine delegates to the service to perform the real work of handling
-the request.
-</para>
-      <figure>
-        <title>ApplicationServlet Sequence</title>
-        <mediaobject>
-          <imageobject>
-            <imagedata fileref="images/ApplicationServlet-sequence.gif" format="GIF"/>
-          </imageobject>
-        </mediaobject>
-</figure>
-
-    </section>
-    <section id="engine.req-pages">
-      <title>Required Pages</title>
-      <para>
-Each application is required to have a minimum of five pages with specific names.  Tapestry 
-provides default implementations for four of the five, but a full-featured Tapestry application may 
-override any of the others to provide a consistent look-and-feel.
-</para>
-      <table>
-        <title>Tapestry Pages</title>
-        <tgroup cols="3">
-          <thead>
-            <row>
-              <entry>Page Name</entry>
-              <entry>Required</entry>
-              <entry>Description</entry>
-            </row>
-          </thead>
-          <tbody>
-            <row>
-              <entry>Exception</entry>
-              <entry>Default provided, may be overridden.</entry>
-              <entry>
-				Page used to present uncaught 
-			 	exceptions to the user.</entry>
-            </row>
-            <row>
-              <entry>Home</entry>
-              <entry>Must be provided by developer.</entry>
-              <entry>The initial page displayed when the 
-			 application is started.</entry>
-            </row>
-            <row>
-              <entry>Inspector</entry>
-              <entry>Provided, never overriden.</entry>
-              <entry>Inspector that allows the Tapestry 
-			 application to be interrogated on its 
-			 structure.</entry>
-            </row>
-            <row>
-              <entry>StaleLink</entry>
-              <entry>Provided</entry>
-              <entry>Page displayed when a StaleLinkException is thrown during
-			the processing of a request.</entry>
-            </row>
-            <row>
-              <entry>StaleSession</entry>
-              <entry>Provided</entry>
-              <entry>Page displayed when a StaleSessionException is thrown
-			during the processing of a request.</entry>
-            </row>
-          </tbody>
-        </tgroup>
-      </table>
-      <para>
-Tapestry only mandates the logical name of these four pages; the actual page component used is 
-defined in the application specification.
-</para>
-      <para>
-The <classname>Home</classname> page is the first page viewed by a client connecting to the application.  
-Other than that, 
-there is nothing special about the page.
-</para>
-      <para>
-The initial connection to the application, where nothing is specified in the URL but the path to 
-the servlet, causes the home service to be invoked, which makes use of the home page.
-The restart service will also redirect the user to the home page.
-</para>
-      <para>
-No default is provided for the <classname>Home</classname> page; every Tapestry application must define its
-own <classname>Home</classname> page.
-</para>
-      <para>
-The Exception page is invoked whenever an uncaught exception is thrown when processing a service.
-</para>
-      <para>
-The Tapestry framework catches the exception and discards any HTML output (this is why 
-output is buffered in memory).
-</para>
-      <para>
-The <classname>Exception</classname> page must implement a writable JavaBeans property of type 
-<classname>java.lang.Throwable</classname> named <varname>exception</varname>. 
-The framework will invoke the accessor method 
-before the page is rendered.
-</para>
-      <para>
-The class &ExceptionAnalyzer; and the 
-&ExceptionDisplay; component are typically used to present this information.
-</para>
-      <para>
-The <classname>StaleLink</classname> page is displayed when a &StaleLinkException;
-is  thrown, which may occur during the processing of the request.  The exception is thrown when 
-Tapestry determines that the state of the page (on the server) is out of synch with the client's view 
-of the page ... this most often happens when the user makes use of the browser's back button.
-<footnote>
-          <para>
-If desired, the application engine can override the method
-<function>handleStaleLinkException()</function>.  The default implementation of
-this method redirects to the <classname>StaleLink</classname> page, but a custom implementation
-could set up an error message on the application's <classname>Home</classname> page and
-redirect there instead.
-</para>
-        </footnote>
-      </para>
-      <para>
-The default implementation informs the user of the problem ("you really shouldn't use the back 
-button on your browser") and uses the home service to create a link back to the 
-<classname>Home</classname> page.
-</para>
-      <para>
-The <classname>StaleSession</classname> page is displayed when a
-<classname>org.apache.tapestry.StaleSessionException</classname>
-is thrown.  This exception is thrown when the component
-is configured to be stateful (which is the default)
-and the <classname>HttpSession</classname> doesn't exist, or is 
-newly created - this indicates a fresh connection to the servlet container after the old session 
-timed out and was discarded.
-<footnote>
-          <para>
-Likewise, the default behavior can be changed by overriding the method
-<function>handleStaleSessionException()</function>.
-</para>
-        </footnote>
-      </para>
-      <para>
-The <classname>Inspector</classname> page is provided by the framework; 
-it allows a developer to interrogate a running 
-Tapestry application to determine its structure.
-</para>
-    </section>
-    <section id="engine.state">
-      <title>Server-Side State</title>
-      <para>
-There are two types of server side state that are supported by Tapestry: persistent page properties 
-and the visit object.  The first (page properties) have already been discussed.
-</para>
-      <para>
-The visit object is a central repository for application state and presentation logic.  The visit object 
-is accessible through the application engine (the engine implements a <varname>visit</varname> property).
-The application engine doesn't care about the class of the visit object, or what properties it 
-implements.
-</para>
-      <para>
-The visit object holds central information that is needed by many pages.  For example, an e-
-commerce application may store the shopping cart as a property of the visit object.
-</para>
-      <para>
-When using Enterprise JavaBeans, the visit object is a good place to store remote object 
-references (centralizing the logic to look up home interfaces, instantiate references, etc.).
-</para>
-      <para>
-Every page implements a <varname>visit</varname> property that allows access to the visit object.
-</para>
-      <para>
-When using the &SimpleEngine; engine, 
-the visit object is 
-created the first time it is referenced.  The class of the visit object is stored in the application 
-specification.
-</para>
-    </section>
-    <section id="engine.stateless">
-      <title>Stateful vs. Stateless</title>
-      <para>
-Through Tapestry release 1.0.0, an &HttpSession; 
-was created on the very first request cycle, and an engine was created and 
-stored into it.
-</para>
-      <para>
-This comes at some cost, however.  Creating the session is somewhat expensive if it is
-not truly needed, and causes some overhead in a clustering or failover scenario.
-In fact, until some real server-side state is created; that is, until a 
-persistent page property is recorded or the visit object created, it isn't really
-necessary to store any server-side state for a particular client.
-</para>
-      <para>
-Starting with Tapestry release 1.0.1, the framework will operate statelessly 
-as long as possible.  When triggered (by the creation of a visit, or by a
-persistent page property) an &HttpSession; will be created and the engine
-stored within it and the application will continue to operate pretty much
-as it does in Tapestry release 1.0.0.
-</para>
-      <para>
-While the application continues statelessly, the framework makes use of a 
-pool of engine instances.  This is more efficient, as it reduces the number of objects
-that must be created during the request cycle.   However, the major reason
-for running statelessly is to bypass the overhead statefulness imposes
-on the application server.
-</para>
-      <para>
-Of course, if rendering the <classname>Home</classname> page of your application triggers
-the creation of the &HttpSession;
-<footnote>
-          <para>
-That is, changes a persistent page property, or forces the creation
-of the visit object.
-</para>
-        </footnote>, then nothing is gained.  A well
-designed application will attempt to defer creation of the session so that, at least,
-the <classname>Home</classname> page can be displayed without creating a session.
-</para>
-    </section>
-    <section id="engine.services">
-      <title>Engine Services</title>
-      <para>
-Engine services provide the structure for building a web application from individual pages and 
-components.
-</para>
-      <para>
-Each engine service has a unique name.  Well known names exist for the basic services (page, 
-action, direct, etc., described in a later section).
-</para>
-      <para>
-Engine services are responsible for creating URLs (which are inserted into the response HTML) 
-and for later responding to those same URLs.  This keeps the meaning of URLs localized.  In a 
-typical servlet or JSP application, code in one place creates the URL for some servlet to interpret.  
-The servlet is in a completely different section of code.   In situations where the servlet's behavior 
-is extended, it may be necessary to change the structure of the URL the servlet processes ... and 
-this requires finding every location such a URL is constructed and fixing it.  This is the kind of 
-inflexible, ad-hoc, buggy solution Tapestry is designed to eliminate.
-</para>
-      <para>
-Most services have a relationship to a particular component.  The basic services (action, direct, 
-page) each have a corresponding component (&ActionLink;, &DirectLink;, &PageLink;).
-The following example 
-shows how the &PageLink; component is used to create a link between application pages.
-</para>
-      <para>
-First, an extract from the page's HTML template:
-</para>
-      <informalexample>
-        <programlisting>
-Click &lt;a jwcid="login"&gt;here&lt;/a&gt; to login.
-</programlisting>
-      </informalexample>
-      <para>
-This is combined with the a <sgmltag class="starttag">component</sgmltag> declaration in the the page's specification:
-</para>
-      <informalexample>
-        <programlisting>
-&lt;component id="<emphasis>login</emphasis>" type="&PageLink;"&gt;
-  &lt;static-binding name="page"&gt;Login&lt;/static-binding&gt;
-&lt;/component&gt;
-</programlisting>
-      </informalexample>
-      <para>
-The <varname>login</varname> component will locate the page service, and provide 'Login'
-(the name of the target 
-page) as a parameter.  The page service will build and return an appropriate URL, 
-which the <varname>login</varname> component will incorporate into the <sgmltag class="starttag">a</sgmltag> hyperlink it 
-generates.
-</para>
-      <para>
-The resulting HTML:
-</para>
-      <informalexample>
-        <programlisting>
-Click &lt;a href="/<replaceable>servlet-path</replaceable>?service=page&amp;context=Login"&gt;here&lt;/a&gt; to login.</programlisting>
-      </informalexample>
-      <para>
-If the user later clicks that link, the application will invoke the page service to handle the URL; 
-it 
-will extract the page name (<literal>Login</literal>) and render that page.
-</para>
-      <para>
-The other services are more or less complicated, but share the same basic trait:  the service 
-provides the URL and later responds if the URL is triggered.
-</para>
-      <para>
-Links (&ActionLink;, &DirectLink;, etc.) and &Form;s use services in slightly different ways.  Links encode
-all the information directly into the URL whereas &Form;s encode most of the information as
-hidden form fields.
-</para>
-      <figure>
-        <title>Services and Gestures
-</title>
-        <mediaobject>
-          <imageobject>
-            <imagedata fileref="images/Gestures.gif" format="GIF"/>
-          </imageobject>
-        </mediaobject>
-      </figure>
-      <para>
-In the first part, a service generates a &Gesture; and then extracts the full URL from it, for use
-as the <varname>href</varname> attribute of the <sgmltag class="starttag">a</sgmltag> tag.
-</para>
-      <para>
-In the second part, a service is used to access the servlet path (which becomes the
-<varname>action</varname> attribute of the <sgmltag class="starttag">form</sgmltag> element).
-The query parameters are individually extracted and encoded as hidden fields in the form.
-</para>
-    </section>
-    <section id="engine.logging">
-      <title>Logging</title>
-      <para>
-Tapestry makes use of the Apache group's 
-&Log4J; package to perform logging.  This is an easy, fast, 
-powerful framework for adding logging to any Java application.  Using &Log4J;, any number of 
-<emphasis>loggers</emphasis> can be created, and a logging level for each logger assigned.  
-Tapestry uses the complete class name as the logger for each class.
-</para>
-      <para>
-The &ApplicationServlet; class includes a method, <function>setupLogging()</function>, 
-to help initialize &Log4J;, allowing the default configuration to be overridden using command line
-parameters.
-</para>
-      <para>
-The <link linkend="inspector">Tapestry Inspector</link> includes a Logging tab that allows the logging configuration to be 
-dynamically changed.  The logging level for any logger can be assigned, and new loggers 
-can be created.
-</para>
-      <para>
-What this means is that, using the Inspector, it is possible to control exactly what logging output is 
-produced, dynamically, while the application is still running.  The Tapestry Inspector is easily 
-added to any Tapestry application.  
-</para>
-    </section>
-    <section id="engine.private-assets">
-      <title>Private Assets</title>
-      <para>
-The application engine is responsible for making private assets, assets that are stored 
-on the Java classpath,
-visible when necessary to client web browser.
-</para>
-      <para>
-This takes two forms:
-</para>
-      <itemizedlist>
-        <listitem>
-          <para>Dynamic download of asset data via the application servlet.</para>
-        </listitem>
-        <listitem>
-          <para>Dynamic copying of asset data into the web server's virtual file system.
-		</para>
-        </listitem>
-      </itemizedlist>
-      <para>
-The first form is the default behavior; each private asset requires an additional round trip through the
-application server and application engine to retrieve the stream of bytes which make up the asset.  This is
-fine during development, but less than ideal at deployment, since it places an extra burden on the
-servlet container, stealing valuable cycles away from the main aspects of servicing end users.
-</para>
-      <para>
-The second form is better during deployment.  The bytestreams are copied out of the classpath to a specific directory,
-one that is mapped into the web server's virtual file system.  Once it is so copied, the
-access to the asset is completely static, as with any other image file or HTML page.
-</para>
-      <para>
-To enable dynamic copying, it is necessary to inform the framework about what file system directory
-to copy the assets to, and what virtual file system directory that maps to.  This is accomplished
-using a pair of JVM system properties:
-</para>
-      <variablelist>
-        <title>JVM System Properties</title>
-        <varlistentry>
-          <term>
-            <varname>org.apache.tapestry.asset.dir</varname>
-          </term>
-          <listitem>
-            <para>
-				The complete pathname of a directory to which private 
-				assets may be copied by the asset externalizer.
-			</para>
-          </listitem>
-        </varlistentry>
-        <varlistentry>
-          <term>
-            <varname>org.apache.tapestry.asset.URL</varname>
-          </term>
-          <listitem>
-            <para>
-				The URL corresponding to the external asset directory.
-			</para>
-          </listitem>
-        </varlistentry>
-      </variablelist>
-    </section>
-
- </chapter>
\ No newline at end of file
diff --git a/3.0.4/doc/src/DevelopersGuide/faq.xml b/3.0.4/doc/src/DevelopersGuide/faq.xml
deleted file mode 100644
index c13ef86..0000000
--- a/3.0.4/doc/src/DevelopersGuide/faq.xml
+++ /dev/null
@@ -1,432 +0,0 @@
-<!-- $Id$ -->
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-  
-  <appendix id="faq">
-    <title>Frequently Asked Questions</title>
-    <para>
-This section contains a few Q's and A's gleemed from the Tapestry developer mailing list. 
-</para>
-    <qandaset defaultlabel="qanda">
-      <qandaentry>
-        <question>
-          <para>
-            <classname>java.lang.NoSuchMethodError</classname> gets thrown
-		when I attempt to use Tapestry with Tomcat.  How do I fix this?
-		</para>
-        </question>
-        <answer>
-          <para>
-            <ulink url="http://jakarta.apache.org/tomcat/index.html">Tomcat</ulink> ships with version 1.0 of the 
-	<ulink url="http://java.sun.com/xml/xml_jaxp.html">JAXP (Java API for XML Processing)</ulink> 
-	framework.  Tapestry is coded against version 1.1.  You must replace the
-	<filename>jaxp.jar</filename> in Tomcat with the
-	<filename>javax.xml.jaxp.jar</filename> from Tapestry.  Simply delete the old file
-	and copy the new one into the Tomcat distribution.
-		</para>
-          <para>
-		In addition you must replace <filename>parser.jar</filename> (which contains
-		an XML parser) with
-		<filename>org.apache.crimson.jar</filename>, Sun's default XML parser.
-		</para>
-        </answer>
-      </qandaentry>
-      <qandaentry>
-        <question>
-          <para>Can Tapestry be used to create a Portal application?</para>
-        </question>
-        <answer>
-          <para>
-		Of course it can!
-		</para>
-          <para>
-		This question came up pretty frequently on the SourceForge forum, so
-		I put together a mini-portal application as one of the tutorials.  This sounded
-		out some limitations in the framework: the <classname>Porlet</classname> component
-		dynamically combines components from multiple pages (using the &Block; and
-		&RenderBlock; components).
-		</para>
-        </answer>
-      </qandaentry>
-      
-      <qandaentry>
-      	<question>
-      		<para>
-      		Is Jetty required to use Tapestry?
-      		</para>
-      	</question>
-      	<answer>
-      	<para>
-      	For a brief period of time, Tapestry used some Jetty specific code
-      	to process file uploads.  This showed up in release 2.0.0 and was fixed (removing all Jetty
-      	dependencies) in release 2.0.1.
-      	</para>
-      	<para>
-      	Tapestry still includes Jetty since it so easy to embed Jetty
-      	and use it for testing and development, but it is not required.  Many users
-      	have had great success using Tomcat or Resin with Tapestry.
-      	</para>
-      	</answer>
-      </qandaentry>
-      
-      <qandaentry>
-      	<question>
-      		<para>
-      		Why do I get NoClassDefFoundError exceptions in my Tapestry application
-      		deployed under WebLogic 6.1?
-      		</para>
-   		</question>
-   		<answer>
-   		<para>
-WebLogic appears to have a bug when deploying WAR files that contain libraries.  If the library name,
-in this case &TapestryFrameworkJar;
-contains any periods, then WebLogic fails to expand the JAR file into its temporary deployment
-directory.  The end result is that
- the Tapestry classes aren't on the classpath.
- </para>
- 
-   		<para>
-   		The solution is to rename the Tapestry JAR file to not have periods in the name.  Simply renaming it to <filename>tapestry.jar</filename>
-   		or <filename>tapestry<replaceable>123</replaceable>.jar</filename>
-   		will do.
-   		</para>
-   		</answer>
-   	</qandaentry>
-      
-      <qandaentry>
-        <question>
-          <para>
-		One more time.  What's this business about rewinding things for forms?
-		</para>
-        </question>
-        <answer>
-          <para>
-		This is one of the big stumbling blocks for some users of Tapestry.
-		The way Tapestry deals with forms is very complex, with a reason: it allows
-		for incredibly dynamic pages.
-		</para>
-          <para>
-		In tradional web appllications, the developer is responsible for
-		naming each form element, as well as writing a servlet to
-		handle the request cycle when the form is submitted.  That turns into
-		a lot of code to extract name parameters from the &HttpServletRequest;, 
-		convert them from Strings to other datatypes, and push the values
-		into appropriate business objects.
-		</para>
-          <para>
-		This works fine as far as it goes ... but the developer has an advantage 
-		that the Tapestry framework doesn't have:  the exact name, type and number
-		of form elements is known during development.
-		</para>
-          <para>
-		By contrast, Tapestry has to figure this all out on the fly.  In addition,
-		Tapestry forms can wrap around &Foreach; components ... that means the same
-		&TextField; component may be responsible for updating a property of
-		a whole slew of objects.  On top of that, the use
-		of &Conditional;, &Block; and &RenderBlock; components
-		mean that the exact set of components involved may be determined dynamically.
-		</para>
-          <note>
-            <para>
-			An example of this is the 
-			<link linkend="inspector.logging">Tapestry Inspector Logging View</link>.  A single
-			&PropertySelection; is wrapped by a &ListEdit; which iterates throught
-			a list of the possible categories.
-			</para>
-            <para>
-			Categories may be added at any time (in fact, that's another function
-			of the page).
-			</para>
-          </note>
-          <para>
-		Now, it's natural to envision Tapestry dynamically walking through its components
-		and HTML templates to render the form seen in the user's web browser.  The
-		mental leap required is that
-		the initial renderring process has to be <emphasis>run again</emphasis> in order to figure out
-		which components are involved in processing the submission, and how.  That's
-		the <emphasis>rewind phase</emphasis>.
-		</para>
-          <para>
-		Just as with the initial render, Tapestry must work through 
-		just the right set of components, in just the right order, taking into account
-		&Conditional; and &Foreach; components.  You must also factor in that Tapestry is
-		assigning the names used for the HTML form elements, which must also be "rediscovered"
-		so that the right HTTP parameter can be combined with the correct component and
-		assigned to the appropriate business object property.
-		</para>
-          <para>
-		Sure, this is overkill when you have a simple form to enter the user's name.
-		But doesn't it give you a warm feeling to know that when you do create
-		your killer dynamic form, the <emphasis>very same code</emphasis> you've come to know
-		and trust will be waiting to handle it, just as easily?
-		</para>
-        </answer>
-      </qandaentry>
-      <qandaentry>
-        <question>
-          <para>
-	How do I specify the CSS class used for a Tapestry component?
-	</para>
-        </question>
-        <answer>
-          <para>
-	Most Tapestry components support
-	<link linkend="components.informal-parameters">informal parameters</link>.  
-	These are used to specify
-	additional HTML attributes for the tag generated by the component.
-	</para>
-          <para>
-	You can set the value for such informal parameters
-	is bindings in the &spec.component; element, or
-	in the <link linkend="components.html-template">HTML template</link>.
-	</para>
-        </answer>
-      </qandaentry>
-      <qandaentry>
-        <question>
-          <para>
-	I get the StaleSession page when I submit a form on my home page.  Why?
-	</para>
-        </question>
-        <answer>
-          <para>
-	Tapestry applications run in a <link linkend="engine.stateless">stateless</link> mode initially.  That is, they
-	don't create a &HttpSession;.  This continues until the application has
-	some specific server-side state, at which point the &HttpSession; is created.
-	</para>
-          <para>
-	By default, &Form;s (as well as &ActionLink;s) are stateful; they require that
-	an active &HttpSession; exists.  If there isn't an active session, they
-	throw a <classname>StaleSessionException</classname>.  However, you can bind
-	the <varname>stateful</varname> parameter of these components to
-	<classname>Boolean.FALSE</classname> to remove this check.
-	</para>
-          <para>
-	This check makes sense once there's server side state; it detects when
-	an &HttpSession; has expired from lack of use.  It's better than seeing
-	an anomolous <classname>NullPointerException</classname>, which is quite likely
-	when all state is lost.
-	</para>
-        </answer>
-      </qandaentry>
-      <qandaentry>
-        <question>
-          <para>What happened to the &ILifecycle; interface?</para>
-        </question>
-        <answer>
-          <para>
-Prior to release 1.0.5, there was an interface, &ILifecycle;, that could
-optionally be implemented by components so that they could be informed about the lifecycle
-of the page which contains them, especially knowing when the page was detached from the engine (so that
-the components could reset their state accordingly).  
-</para>
-          <para>
-By release 1.0.5, this has become somewhat awkward.  Firstly, several non-component objects needed
-similar notification and there wasn't a way to cleanly accomplish this.  Secondly, a finer grained
-approach was desired, as different objects had different notification requirements.
-</para>
-          <para>
-For release 1.0.5, the interface was replaced by a more standard approach; well defined JavaBeans events.
-These are described in the <link linkend="pages.events">Page Events</link> section of this document.
-</para>
-          <para>
-The &ILifecycle; interface was removed in release 2.0.0.
-</para>
-        </answer>
-      </qandaentry>
-      <qandaentry>
-        <question>
-          <para>Why do I need to subclass &ApplicationServlet;?
-		</para>
-        </question>
-        <answer>
-          <para>
-Several folks have suggested that subclassing &ApplicationServlet; is unneccessary,
-and it's primary job, identifying the application specification path, could be accomplished 
-using servlet initial parameters.
-There are several reasons why a subclass is necessary, outlined in this
-<link linkend="engine.servlet.subclass-note">note</link>.  Primarily, it's
-a class loader issue.
-</para>
-        </answer>
-      </qandaentry>
-      <qandaentry>
-        <question>
-          <para>What happened to <classname>ValidatingTextField</classname>,
-		<classname>NumericField</classname>,
-		<classname>DateField</classname>
-		and <classname>IntegerField</classname>?
-		</para>
-        </question>
-        <answer>
-          <para>
-		In release 1.0.8, the entire suite of components related to validating
-		form input was rewritten.  A single component, &ValidField;, now does the work
-		of all the others.  In the earlier version, component subclasses were needed
-		to change the behavior:  converting objects to strings, strings to objects and
-		validating.  This is now encapsulated in the &IValidator; interface.  In short, it is now
-		much easier to create new kinds of validations and just plug them into the
-		&ValidField;.
-		</para>
-        
-          <para>This was, regrettably, a completely non-backwards compatible change.  However,
-          compatible versions of three of the 1.0.7 components
-          (<classname>ValidatingTextField</classname>,
-		<classname>NumericField</classname> and
-		<classname>DateField</classname>) are now part of the 
-		&TapestryContribJar; library.
-		</para>
-		
-          <para>
-		In addition, the old components had big disclaimers:  "Don't use these inside
-		any kind of loop (such as a &Foreach;)".  By expanding the role of the
-		&IValidationDelegate;, this is no longer so, the delegate now does much more,
-		including the ability to track errors for fields even inside loops.
-		</para>
-        </answer>
-      </qandaentry>
-      <qandaentry>
-        <question>
-          <para>Why don't my &Upload; components work?  I keep getting NullPointerExceptions.
-		</para>
-        </question>
-        <answer>
-          <para>
-		The &Upload; component creates an <sgmltag class="starttag">input type="file"</sgmltag>
-		HTML element.  This requires that the containing <sgmltag class="starttag">form</sgmltag> element
-		use the encoding MIME type <literal>multipart/form-data</literal>.  This is accomplished by
-		setting the informal parameter <property>enctype</property> of the containing &Form; component to
-		 <literal>multipart/form-data</literal>.
-		</para>
-        </answer>
-      </qandaentry>
-      
-      
-      <qandaentry>
-      	<question>
-      		<para>Why isn't Tapestry a JSP taglib?</para>
-      	</question>
-      	<answer>
-      		<para>
-      		Simply put, Tapestry needs to run the whole show, from the point the request is receieved by
-      		the servlet all the way through to the end of sending a response page back to the client. 
-      		All the benefits of Tapestry come from
-      		features that JSPs just don't provide ... knowing the full component heirarchy for the page,
-      		and tracking which components are wrapped inside which others, no matter how dynamic the
-      		rendering process is.  The way components can work together to generate different
-      		portions of the page is both powerful and necessary -- 
-      		that's how Tapestry builds the URLs for links and forms.
-      		</para>
-      		
-      		<para>
-      		By comparison, something like 
-      		<ulink url="http://jakarta.apache.org/">Struts</ulink>
-      		still relies on the developer to do most of the work, by defining Actions ... which are
-      		little more than a dressed up version of a servlet.  Although it has some rudimentary
-      		forms support (that can also be leveraged to process query parameters from ordinary links),
-      		it's still an awful lot of coding.
-      		</para>
-      		
-      	</answer>
-      </qandaentry>
-      
- 
-      
-
-	
-<qandaentry>
-<question>
-<para>
-I've fixed all my imports to use <filename>org.apache.tapestry</filename>, but
-my &DirectLink; listener methods no longer work.  How do I fix things?
-</para>
-</question>
-<answer>
-<para>
-With the removal of the <classname>IDirectListener</classname>
-interface, the corresponding listener method variation was removed.  The following
-method signature <emphasis>used to</emphasis>
-be recognized as a listener method:
-</para>
-
-<informalexample>
-<programlisting>
-public void <replaceable>my-method</replaceable>(String[] parameters, &IRequestCycle; cycle)
-throws RequestCycleException
-{
-  ...
-}
-</programlisting>
-</informalexample>
-
-<para>
-In the new, simpler, scheme, listener methods take exactly one parameter,
-the &IRequestCycle;.
-The service parameters are now available from the &IRequestCycle;:
-</para>
-
-<informalexample>
-<programlisting>
-public void <replaceable>my-method</replaceable>(IRequestCycle cycle)
-throws RequestCycleException
-{
-  Object[] parameters = cycle.getServiceParameters();
-  ...
-}
-</programlisting>
-</informalexample>
-
-<para>
-Starting in release 2.2, the type of each parameter is encoded with its
-value in the URL (in release 2.1 and earlier, the parameters were always Strings,
-and it was your responsibility to convert them).  
-You can cast from &Object;
-to a particular type (say, &Integer; or &String;).
-</para>
-
-</answer>
-</qandaentry>
-
-
-<qandaentry>
-<question>
-<para>
-How do I duplicate a component several times in the same HTML template?
-</para>
-</question>
-
-<answer>
-<para>
-Simply put: you can't.  Component ids must be unique in the template and
-must match aganst component specification.  Even when two components
-are the same type and have identical bindings, they are still unique
-instances and have instance-specific state ... such as the portion of
-the HTML template they wrap (for components with bodies).
-</para>
-
-<para>
-A useful shortcut is to use
-the <literal>copy-of</literal>
-attribute of the
-&spec.component; element.
-</para>
-</answer>
-
-</qandaentry>
-      
-    </qandaset>
-  </appendix>
\ No newline at end of file
diff --git a/3.0.4/doc/src/DevelopersGuide/images/.cvsignore b/3.0.4/doc/src/DevelopersGuide/images/.cvsignore
deleted file mode 100644
index cdf09e9..0000000
--- a/3.0.4/doc/src/DevelopersGuide/images/.cvsignore
+++ /dev/null
@@ -1 +0,0 @@
-*.jbf
diff --git a/3.0.4/doc/src/DevelopersGuide/images/Action-Service-Sequence.gif b/3.0.4/doc/src/DevelopersGuide/images/Action-Service-Sequence.gif
deleted file mode 100644
index f5b2c3c..0000000
--- a/3.0.4/doc/src/DevelopersGuide/images/Action-Service-Sequence.gif
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/src/DevelopersGuide/images/ApplicationServlet-sequence.gif b/3.0.4/doc/src/DevelopersGuide/images/ApplicationServlet-sequence.gif
deleted file mode 100644
index a0d6af9..0000000
--- a/3.0.4/doc/src/DevelopersGuide/images/ApplicationServlet-sequence.gif
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/src/DevelopersGuide/images/Body-sequence.gif b/3.0.4/doc/src/DevelopersGuide/images/Body-sequence.gif
deleted file mode 100644
index 0a93390..0000000
--- a/3.0.4/doc/src/DevelopersGuide/images/Body-sequence.gif
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/src/DevelopersGuide/images/Direct-Service-sequence.gif b/3.0.4/doc/src/DevelopersGuide/images/Direct-Service-sequence.gif
deleted file mode 100644
index e4ace0d..0000000
--- a/3.0.4/doc/src/DevelopersGuide/images/Direct-Service-sequence.gif
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/src/DevelopersGuide/images/Gestures.gif b/3.0.4/doc/src/DevelopersGuide/images/Gestures.gif
deleted file mode 100644
index 4f4ee98..0000000
--- a/3.0.4/doc/src/DevelopersGuide/images/Gestures.gif
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/src/DevelopersGuide/images/Inspector-Engine.jpg b/3.0.4/doc/src/DevelopersGuide/images/Inspector-Engine.jpg
deleted file mode 100644
index 029228b..0000000
--- a/3.0.4/doc/src/DevelopersGuide/images/Inspector-Engine.jpg
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/src/DevelopersGuide/images/Inspector-Logging.jpg b/3.0.4/doc/src/DevelopersGuide/images/Inspector-Logging.jpg
deleted file mode 100644
index 9f84303a..0000000
--- a/3.0.4/doc/src/DevelopersGuide/images/Inspector-Logging.jpg
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/src/DevelopersGuide/images/Inspector-Properties.jpg b/3.0.4/doc/src/DevelopersGuide/images/Inspector-Properties.jpg
deleted file mode 100644
index 65ca661..0000000
--- a/3.0.4/doc/src/DevelopersGuide/images/Inspector-Properties.jpg
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/src/DevelopersGuide/images/Inspector-Spec.jpg b/3.0.4/doc/src/DevelopersGuide/images/Inspector-Spec.jpg
deleted file mode 100644
index 445f586..0000000
--- a/3.0.4/doc/src/DevelopersGuide/images/Inspector-Spec.jpg
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/src/DevelopersGuide/images/Inspector-Template.jpg b/3.0.4/doc/src/DevelopersGuide/images/Inspector-Template.jpg
deleted file mode 100644
index 34730a6..0000000
--- a/3.0.4/doc/src/DevelopersGuide/images/Inspector-Template.jpg
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/src/DevelopersGuide/images/Page-Detach-Sequence.gif b/3.0.4/doc/src/DevelopersGuide/images/Page-Detach-Sequence.gif
deleted file mode 100644
index bff3486..0000000
--- a/3.0.4/doc/src/DevelopersGuide/images/Page-Detach-Sequence.gif
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/src/DevelopersGuide/images/Page-Lifecycle.gif b/3.0.4/doc/src/DevelopersGuide/images/Page-Lifecycle.gif
deleted file mode 100644
index ac21200..0000000
--- a/3.0.4/doc/src/DevelopersGuide/images/Page-Lifecycle.gif
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/src/DevelopersGuide/images/Page-Load-sequence.gif b/3.0.4/doc/src/DevelopersGuide/images/Page-Load-sequence.gif
deleted file mode 100644
index 8349919..0000000
--- a/3.0.4/doc/src/DevelopersGuide/images/Page-Load-sequence.gif
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/src/DevelopersGuide/images/Page-Render-sequence.gif b/3.0.4/doc/src/DevelopersGuide/images/Page-Render-sequence.gif
deleted file mode 100644
index bc31963..0000000
--- a/3.0.4/doc/src/DevelopersGuide/images/Page-Render-sequence.gif
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/src/DevelopersGuide/images/Page-Rewind-sequence.gif b/3.0.4/doc/src/DevelopersGuide/images/Page-Rewind-sequence.gif
deleted file mode 100644
index d8c3ebd..0000000
--- a/3.0.4/doc/src/DevelopersGuide/images/Page-Rewind-sequence.gif
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/src/DevelopersGuide/images/Page-Service-sequence.gif b/3.0.4/doc/src/DevelopersGuide/images/Page-Service-sequence.gif
deleted file mode 100644
index 946ef2f..0000000
--- a/3.0.4/doc/src/DevelopersGuide/images/Page-Service-sequence.gif
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/src/DevelopersGuide/inspector.xml b/3.0.4/doc/src/DevelopersGuide/inspector.xml
deleted file mode 100644
index f78e0fa..0000000
--- a/3.0.4/doc/src/DevelopersGuide/inspector.xml
+++ /dev/null
@@ -1,114 +0,0 @@
-<!-- $Id$ -->
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-  <chapter id="inspector">
-    <title>The Tapestry Inspector</title>
-    <para>
-Tapestry includes a powerful tool: the Inspector, which reveals the construction 
-of a running Tapestry application. 
-</para>
-    <para>
-The &InspectorButton; component is used to include a link that 
-launches the Inspector.  This is typically included in the navigational border of an 
-application, so that it is available to the developer from any page.  The 
-Inspector itself is a page that is provided by the framework and available to 
-any Tapestry application.
-</para>
-    <section id="inspector.spec">
-      <title>Specification View</title>
-      <figure>
-        <title>Inspector - Specification View</title>
-        <mediaobject>
-          <imageobject>
-            <imagedata fileref="images/Inspector-Spec.jpg" format="JPG"/>
-          </imageobject>
-        </mediaobject>
-      </figure>
-      <para>
-The Inspector allows the developer to see how the page is constructed.  
-It reveals the page's specification, a list of embedded components within the page, 
-the page's HTML template and more.
-</para>
-      <para>
-It is possible to dig down and see the same information for 
-any component within the page.
-</para>
-    </section>
-    <section id="inspector.template">
-      <title>Template View</title>
-      <figure>
-        <title>Inspector - Template View</title>
-        <mediaobject>
-          <imageobject>
-            <imagedata fileref="images/Inspector-Template.jpg" format="JPG"/>
-          </imageobject>
-        </mediaobject>
-      </figure>
-      <para>
-The template view shows the HTML template for the component.  Within the template,
-component references are links that "dig down" into their template (if they have one).
-</para>
-    </section>
-    <section id="inspector.properties">
-      <title>Properties View</title>
-      <figure>
-        <title>Inspector - Properties View</title>
-        <mediaobject>
-          <imageobject>
-            <imagedata fileref="images/Inspector-Properties.jpg" format="JPG"/>
-          </imageobject>
-        </mediaobject>
-      </figure>
-      <para>
-The properties view shows the persistent properties for the page and any components on the page.
-</para>
-    </section>
-    <section id="inspector.engine">
-      <title>Engine View</title>
-      <figure>
-        <title>Inspector - Engine View</title>
-        <mediaobject>
-          <imageobject>
-            <imagedata fileref="images/Inspector-Engine.jpg" format="JPG"/>
-          </imageobject>
-        </mediaobject>
-      </figure>
-      <para>
-The engine view shows information about the running engine instance, including its name and class.
-</para>
-      <para>
-Not shown in the figure is the serialized state of the application engine (in a hex dump format) and a
-long display of all the request cycle information (the same information produced when an 
-uncaught exception is thrown).
-</para>
-    </section>
-    <section id="inspector.logging">
-      <title>Logging View</title>
-      <figure>
-        <title>Inspector - Logging View</title>
-        <mediaobject>
-          <imageobject>
-            <imagedata fileref="images/Inspector-Logging.jpg" format="JPG"/>
-          </imageobject>
-        </mediaobject>
-      </figure>
-      <para>
-The final tab allows control of the logging behavior of the application.  It allows the logging level
-for any category to be set, and allows new categories to be created.
-</para>
-    </section>
-  </chapter>
\ No newline at end of file
diff --git a/3.0.4/doc/src/DevelopersGuide/intro.xml b/3.0.4/doc/src/DevelopersGuide/intro.xml
deleted file mode 100644
index e99f9c4..0000000
--- a/3.0.4/doc/src/DevelopersGuide/intro.xml
+++ /dev/null
@@ -1,526 +0,0 @@
-<!-- $Id$ -->
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
- <chapter id="intro">
-    <title>Introduction</title>
-    <para>Tapestry is a comprehensive web application framework, written in Java.</para>
-    <para>Tapestry is not an application server.  
-Tapestry is a framework designed to be used inside an application server.</para>
-    <para>Tapestry is not an application.  Tapestry is a framework for creating web applications.</para>
-    <para>Tapestry is not a way of using JavaServer Pages.  
-Tapestry is an alternative to using JavaServer Pages.</para>
-    <para>Tapestry is not a scripting environment.  Tapestry uses a component object model, 
-not simple scripting, to create highly dynamic, interactive web pages.</para>
-    <para>Tapestry is based on the Java Servlet API version 2.2  It is compatible with JDK 1.2 and above.   
-Tapestry uses a sophisticated component model to divide a web application into a hierarchy of components.  
-Each component 
-has specific responsibilities for rendering web pages (that is, generating a portion of an HTML page) 
-and responding to HTML queries (such as clicking on a link, or submitting a form).</para>
-    <para>The Tapestry framework takes on virtually all of the responsibilities 
-for managing application flow and server-side client state.  
-This allows developers to concentrate on the business and presentation aspects of the application.</para>
-
-
-<para>
-Tapestry reconceptualizes web application development
-in terms of objects, methods and properties
-instead of URLs and query parameters.
-</para>
-
-    <section id="intro.scripting">
-      <title>Scripting vs. Components</title>
-      <para>Most leading web application frameworks are based on some form of 
-scripting.  These frameworks (often bundled into a web or application server) include:
-
-	<itemizedlist mark="opencircle">
-          <listitem>
-            <para>
-              <ulink url="http://java.sun.com/products/jsp/">Sun JavaServer Pages</ulink>
-            </para>
-          </listitem>
-          <listitem>
-            <para>Microsoft Active Server Pages</para>
-          </listitem>
-          <listitem>
-            <para>
-              <ulink url="http://www.macromedia.com/software/coldfusion/">Allaire ColdFusion</ulink>
-            </para>
-          </listitem>
-          <listitem>
-            <para>
-              <ulink url="http://www.php.net/">PHP</ulink>
-            </para>
-          </listitem>
-          <listitem>
-            <para>
-              <ulink url="http://www.webmacro.org/">WebMacro</ulink>
-            </para>
-          </listitem>
-          <listitem>
-            <para>
-              <ulink url="http://freemarker.sourceforge.net/">FreeMarker</ulink>
-            </para>
-          </listitem>
-          <listitem>
-            <para>
-              <ulink url="http://jakarta.apache.org/velocity/index.html">Velocity</ulink>
-            </para>
-          </listitem>
-        </itemizedlist>
-      </para>
-      <para>All of these systems are based on reading an HTML template file
-and performing some kind of processing on it.  The processing is identified by directives ... 
-special tags in the HTML template that indicate dynamic behavior.</para>
-      <para>Each framework has a scripting language.  For JavaServer Pages it is Java itself.  
-For ASP it is Visual Basic.  Most often, the directives are snippets of 
-the scripting language inserted into the HTML.</para>
-      <para>For example, here's a snippet from a hypothetical 
-JavaServer Page that displays part of a shopping cart.
-</para>
-      <informalexample>
-        <programlisting>
-<emphasis>&lt;%
-	String userName = (String)session.getAttribute("userName");
-%&gt;</emphasis>
-&lt;h1&gt;Contents of shopping cart for 
-<emphasis>&lt;%= userName %&gt;</emphasis>:&lt;/h1&gt;
-</programlisting>
-      </informalexample>
-      <para>Most of the text is static HTML that is sent directly back to the client web browser.  
-The <emphasis>emphasised</emphasis> text identifies scripting code.</para>
-      <para>The first large block is used to extract the user name from the &HttpSession;, 
-a sort of per-client scratch pad (it is part of the Java Servlet API; 
-other systems have some similar construct).  
-The second block is used to insert the value of an expression into the HTML.  
-Here, the expression is simply the value of the userName variable.  
-It could be more complex, including the result of invoking a method on a Java object.</para>
-      <para>This kind of example is often touted as showing how useful and powerful scripting solutions are.  
-In fact, it shows the very weaknesses of scripting.</para>
-      <para>First off, we have a good bit of Java code in an HTML file.  
-This is a problem ... no HTML editor is going to understand the JavaServer Pages syntax, 
-or be able to validate that the Java code in the scripting sections is correct, or that it even compiles.  
-Validation will be deferred until the page is viewed within the application.  
-Any errors in the page will be shown as runtime errors.  
-Having Java code here is unnatural ... Java code should be developed exclusively inside an IDE.</para>
-      <para>In a real JavaServer Pages application I've worked on, each JSP file was 30% - 50% Java.  
-Very little of the Java was simple presentation logic like 
-<sgmltag class="starttag">%= userName %</sgmltag>, 
-most of it was larger blocks needed to 'set up' the presentation logic.  
-Another good chunk was concerned with looping through lists of results.</para>
-      <para>In an environment with separate creative and technical teams, 
-nobody is very happy.  The creative team is unlikely to know JSP or Java syntax.  
-The technical team will have difficulty "instrumenting" the HTML files provided by creative team.  
-Likewise, the two teams don't have a good common language 
-to describe their requirements for each page.</para>
-      <para>One design goal for Tapestry is minimal impact on the HTML.  
-Many template-oriented systems add several different directives 
-for inserting values into the HTML, marking blocks as conditional, 
-performing repetitions and other operations.  
-Tapestry works quite differently; it allows existing tags to be marked
-as dynamic in a completely unobtrusive way.</para>
-      <para>A Tapestry component is any HTML tag with a <varname>jwcid</varname>
-attribute ("jwc" stands for "Java Web Component").
-For comparison, an equivalent Tapestry template to the previous JSP example:
-</para>
-      <informalexample>
-        <programlisting><![CDATA[
-<h1>Contents of shopping cart for
-<span jwcid="insertUserName">John Doe</span>:</h1>
-]]></programlisting>
-      </informalexample>
-      <para>This defines a component named <varname>insertUserName</varname> on the page.
-To assist HTML development, a sample value, "<literal>John Doe</literal>" is included, but
-this is automatically editted out when the HTML template is used by the framework.
-</para>
-      <para>
-The <sgmltag class="starttag">span</sgmltag> tag simply indicated where the Tapestry component
-will go ... it doesn't identify any of its behavior.  That is provided elsewhere, in
-a <link linkend="spec.component-specification">component specification</link>.
-</para>
-      <para>A portion of the page's specification file defines what
-the <varname>insertUserName</varname> component is and what it does:
-</para>
-      <informalexample id="intro.ex">
-        <programlisting>
-&lt;component id="insertUserName" type="&Insert;"&gt; <co id="intro.ex.co.id-and-type"/>
-  &lt;binding name="value" expression="visit.userName"/&gt;  <co id="intro.ex.co.value-binding"/>
-&lt;/component&gt;
-</programlisting>
-        <calloutlist>
-          <callout arearefs="intro.ex.co.id-and-type">
-            <para>
-		The <varname>id</varname> attribute gives the component a unique identifier, that matches against the
-		HTML template.  The <varname>type</varname> attribute is used to specify which kind of component
-		is to be used.
-		</para>
-          </callout>
-          <callout arearefs="intro.ex.co.value-binding">
-            <para>
-		Bindings identify how the component gets the data it needs.  In this example, 
-		the &Insert; component requires a binding for its <varname>value</varname>
-		parameter, which is what will be inserted into the response HTML page.  This
-		type of binding (there are others), extracts the userName property from the
-		visit object (a central, application-defined object used to store most
-		server-side state in a Tapestry application).
-		</para>
-          </callout>
-        </calloutlist>
-      </informalexample>
-      <para>Tapestry really excels when it is doing something 
-more complicated than simply producing output.  
-For example, let's assume that there's a checkout button that should only 
-be enabled when the user has items in their shopping cart.</para>
-      <para>In the JSP world, this would look something like:
-</para>
-      <informalexample>
-        <programlisting><emphasis>&lt;%
-   boolean showLink;
-   String imageURL;
-   showLink = applicationObject.getHasCheckoutItems();
-   if (showLink)
-     imageURL = "/images/Checkout.gif";
-   else
-     imageURL = "/images/Checkout-disabled.gif";
-
-  if (showLink)
-  {
-     String linkURL;
-     linkURL = response.encodeURL("/servlet/checkout"); %&gt;</emphasis>
-&lt;a href="<emphasis>&lt;%= linkURL %&gt;</emphasis>"&gt;
-<emphasis>&lt;% } %&gt;</emphasis>
-&lt;img border=0 src="<emphasis>&lt;%= imageURL %&gt;</emphasis>" alt="Checkout"&gt;<emphasis>&lt;%
-  if (showLink)
-    out.println("&lt;/a&gt;");
-%&gt;</emphasis>
-</programlisting>
-      </informalexample>
-      <para>This assumes that <varname>applicationObject</varname> exists to 
-determine whether the user has entered any checkout items.  
-Presumably, this object was provided by a controlling servlet, or placed into the 
-&HttpSession;.
-</para>
-      <para>
-The corresponding Tapestry HTML template is much simpler:
-</para>
-      <informalexample>
-        <programlisting><emphasis><![CDATA[
-<a jwcid="checkoutLink"><img jwcid="checkoutButton" alt="Checkout"/></a>]]></emphasis>
-        </programlisting>
-      </informalexample>
-      <para>
-A bit more goes into the page's specification :
-</para>
-      <informalexample id="intro.ex2">
-        <programlisting>&lt;component id="checkoutLink" type="&PageLink;"&gt; <co id="intro.ex2.co.checkoutLink"/>
-  &lt;static-binding name="page"&gt;Checkout&lt;/static-binding&gt;
-  &lt;binding name="disabled" expression="visit.cartEmpty"/&gt; <co id="intro.ex2.co.link-disabled"/>
-&lt;/component&gt;
-
-&lt;component id="checkoutButton" type="&Rollover;"&gt; <co id="intro.ex2.co.Rollover"/>
-  &lt;binding name="image" expression="assets.checkout"/&gt;
-  &lt;binding name="disabled" expression="assets.checkoutDisabled"/&gt; 
-&lt;/component&gt;
-
-&lt;external-asset name="checkout" URL="/images/Checkout.gif"/&gt; <co id="intro.ex2.co.checkout-asset"/>
-&lt;external-asset name="checkoutDisabled" URL="/images/Checkout-disabled.gif"/&gt;
-
-</programlisting>
-        <calloutlist>
-          <callout arearefs="intro.ex2.co.checkoutLink">
-            <para>
-    Component <varname>checkoutLink</varname> is a &PageLink;, a component that creates
-    a link to another page in the application.  Tapestry takes care of generating the
-    appropriate URL.
-    </para>
-          </callout>
-          <callout arearefs="intro.ex2.co.link-disabled">
-            <para>
-  	The <varname>disabled</varname> parameter allows the link to be "turned off"; here it is turned
-  	off when the shopping cart is empty.
-  	</para>
-          </callout>
-          <callout arearefs="intro.ex2.co.Rollover">
-            <para>
-    A &Rollover; component inserts an image; it must be inside some kind of
-    link component (such as the &PageLink;) and is sensitive to whether the link
-    is enabled or disabled; inserting a different image when disabled.  Not shown here
-    is the ability of the &Rollover; component to 
-    generate dynamic mouse-over effects as well.
-    </para>
-          </callout>
-          <callout arearefs="intro.ex2.co.checkout-asset">
-            <para>
-  	Tapestry uses an abstraction, <link linkend="components.assets">assets</link>,
-  	to identify images, stylesheets
-  	and other resources.  The &Rollover; component wants a reference to
-  	an asset, not a URL.
-  	</para>
-          </callout>
-        </calloutlist>
-      </informalexample>
-      <para>
-The point of this example is that the JSP developer had to worry about character-by-character 
-production of HTML.  Further,  the ratio of Java code to HTML is quickly getting out of hand.
-</para>
-      <para>
-By contrast, the Tapestry developer is concerned with the behavior of 
-components and has an elegant way of specifying that behavior dynamically.
-</para>
-    </section>
-    <section id="intro.interaction">
-      <title>Interaction</title>
-      <para>
-Let's continue with a portion of the JSP that would allow an 
-item to be deleted from the shopping cart.  
-For simplicity, we'll assume that there's an object of class <classname>LineItem</classname> 
-named <varname>item</varname> and that there's a servlet used for making changes to the shopping cart. 
-</para>
-      <informalexample>
-        <programlisting><![CDATA[
-<tr>
-  <td> ]]><emphasis>&lt;%= item.getProductName() %&gt;</emphasis><![CDATA[ </td>
-  <td> ]]><emphasis>&lt;%= item.getQuantity() %&gt;</emphasis><![CDATA[ </td>
-  <td> ]]><emphasis>&lt;%  String URL = response.encodeURL("/servlet/update-cart?action=remove" +
- 			"&amp;item=" + item.getId());
-%&gt;</emphasis><![CDATA[
-<a href="]]><emphasis>&lt;%= URL %&gt;</emphasis><![CDATA[">Remove</a> </td> 
-</tr>]]></programlisting>
-      </informalexample>
-      <para>
-This clearly shows that in a JSP application, the designer is responsible for 
-"knitting together" the pages, servlets and other elements at a very low level.  
-By contrast, Tapestry takes care of nearly all these issues automatically:
-</para>
-      <informalexample>
-        <programlisting><![CDATA[
-<tr> 
-     <td> <span jwcid="insertName">Sample Product</span> </td>
-     <td> <span jwcid="insertQuantity">10</span> </td>
-     <td> <a jwcid="remove">Remove</a> </td>
-</tr>]]></programlisting>        
-</informalexample>
-      <para>
-Because of the component object model used by Tapestry, the framework knows exactly 
-"where on the page" the <varname>remove</varname> component is.  
-It uses this information to build an appropriate URL that references the <varname>remove</varname> component.  
-If the user clicks the link, the framework will inform the component to perform the desired action.  
-The <varname>remove</varname> component can then remove the item from the shopping cart.
-</para>
-      <para>
-In fact, under Tapestry, no user code ever has to either encode or decode a URL.  
-This removes an entire class of errors from a web application 
-(those URLs can be harder to assemble and parse than you might think!)
-</para>
-      <para>
-Tapestry isn't merely building the URL to a servlet for you; 
-the whole concept of 'servlets' drops out of the web application.  
-Tapestry is building a URL that will invoke a method on a component.
-</para>
-      <para>
-Tapestry applications act like a 'super-servlet'.  
-There's only one servlet to configure and deploy.  
-By contrast, even a simple JavaServer Pages application developed using 
-Sun's Model 2 (where servlets provide control logic and JSPs are used for presenting results) 
-can easily have dozens of servlets.  
-</para>
-    </section>
-    <section id="intro.security">
-      <title>Security</title>
-      <para>
-Developing applications using Tapestry provides some modest security benefits.
-</para>
-      <para>
-Tapestry applications are built on top of the Java Servlet API, 
-and so inherits all the sercurity benefits of servlets.  
-Most security intrusions against CGI programs 
-(such as those written in Perl or other scripting languages) 
-rely on sloppy code that evaluates portions of the URL in a system shell; 
-this never happens when using the Java Servlet API.
-</para>
-      <para>
-Because the URLs created by Tapestry for processing client interaction 
-are more strongly structured than the URLs 
-in traditional solutions, there are fewer weaknesses 
-to exploit.  Improperly formatted URLs result in an exception response 
-being presented to the user.
-</para>
-      <para>
-Where the Java Servlet API suffers is in client identification, 
-since a session identifier is stored on the client either as an 
-HTTP Cookie or encoded into each URL.  Malicious software could acquire 
-such an identifier and "assume" the identity of a user who has recently logged 
-into the application.  Again, this is a common limitation of servlet applications
-in general.
-</para>
-      <para>
-Finally, Tapestry applications have a single flow of control:  
-all incoming requests flow through a few specific methods of particular classes.  
-This makes it easier to add additional security measures that are specific to the application.
-</para>
-    </section>
- 
-<section id="intro.web-app">
-    <title>Web Applications</title>
-    <para>
-Tapestry has a very strong sense of what an application is, derived from an 
-XML specification file.  This file identifies and gives names to 
-all the pages in the application, and identifies certain other key classes as well.  
-It also gives a human-readable name to the entire application.
-</para>
-    <para>
-In other systems, there is no application per-se.  There is some kind of  
-'home page' (or servlet), which is the first page seen when a client 
-connects to the web application.  There are many pages, servlets (or equivalent, 
-in other frameworks) and interrelations between them.  There is also some amount 
-of state stored on the server, such as the user name and a shopping 
-cart (in a typical e-commerce application).  The sum total of these 
-elements is the web application.
-</para>
-    <para>
-Tapestry imposes a small set of constraints on the developer, chiefly, that the application 
-be organized in terms of pages and components.  These constraints are 
-intended to be of minimal impact to the developer, imposing an acceptible amount of 
-structure.  They create a common language that can be used between members 
-of a team, and even between the technical and creative groups within a team.
-</para>
-    <para>
-Under Tapestry, a page is also very well defined:  It consists of a component 
-specification, a corresponding Java class, an HTML template, and a 
-set of contained components.
-</para>
-    <para>
-By contrast, when using JavaServer Pages there are one or more servlets, embedded JavaBeans, 
-a JSP file and the Java class created from the JSP file.  There isn't 
-a standard naming scheme or other way of cleanly identifying the 
-various elements.
-</para>
-    <para>
-Interactivity in Tapestry is component based.  If a component is interactive, such as 
-an image button with a hyperlink (<sgmltag class="starttag">a</sgmltag>), clicking on the link 
-invokes a method on the component.  All interactivity on a 
-page is implemented by components on the page.
-</para>
-    <para>
-JavaServer Pages bases its interactivity on servlets.  Interactive portions of a page must 
-build URLs that reference these servlets.  The servlets use a variety of ad-hoc 
-methods to identify what operation is to take place when a link is clicked.  Since there 
-is no standard for any of this, different developers, even on the same project, 
-may take widely varying approaches to implementing similar constructs.
-</para>
-    <para>
-Because pages are components, they have a well-defined interface, which describes to 
-both the framework and the developer how the page fits into the overall application.
-</para>
-    <para>
-At the core of any Tapestry application are two objects:  the engine and the visit.  
-The engine is created when the first request from a client arrives at the server.  
-The engine is responsible for all the mundane tasks in Tapestry, such as managing the request cycle.  
-It is sort of a dispatcher, that handles the incoming request and runs the 
-process of responding to the request with a new HTML page.
-</para>
-    <para>
-The visit is a second object that contains application-specific data and logic.  
-Its type is completely defined by the application.  
-In an e-commerce application, the visit might store a shopping cart 
-and information about the user (once logged in).
-</para>
-    <para>
-Both the engine and the visit are stored persistently between request cycles, inside the 
-&HttpSession; object.
-</para>
-    <para>
-The engine also provides services.  Services are the bridge between URLs and components.  
-Services are used to generate the URLs used by hyperlinks and form submissions.  
-They are also responsible for interpreting the same URLs when they are later 
-triggered from the client web browser.
-</para>
-</section>  <!-- intro.web-app -->
-
-
-   <section id="intro.features">
-      <title>Features</title>
-      <para>
-The framework, based on the component object model, provides a significant number of other features, 
-including:
-
-	<itemizedlist>
-          <listitem>
-            <para>Easy localization of applications</para>
-          </listitem>
-          <listitem>
-            <para>Extremely robust error handling and reporting</para>
-          </listitem>
-          <listitem>
-            <para>Highly re-usable components</para>
-          </listitem>
-          <listitem>
-            <para>Automatic persistence of server-side client state between request cycles</para>
-          </listitem>
-          <listitem>
-            <para>Powerful processing of HTML forms</para>
-          </listitem>
-          <listitem>
-            <para>Strong support for load balancing and fail over </para>
-          </listitem>
-          <listitem>
-            <para>Zero code generation
-				<footnote>
-                <para>That is, Tapestry templates and specifications are interpreted as is.
-					Unlike JSPs, they are not translated into Java source code
-					and compiled into Java classes.  This greatly simplifies debugging
-					since no code is generated at runtime.
-					</para>
-              </footnote>
-            </para>
-          </listitem>
-          <listitem>
-            <para>Easy deployment</para>
-          </listitem>
-          <listitem>
-            <para>The <link linkend="inspector">Inspector</link>, 
-            which allows developers to debug a running Tapestry application</para>
-          </listitem>
-        </itemizedlist>
-      </para>
-      <para>
-The point of Tapestry is to free the web application developer from the most tedious tasks.  
-In many cases, the "raw plumbing" of a web application can be completely mechanized by 
-the framework, leaving the developer to deal with more interesting challenges, such 
-as business and presentation logic.
-</para>
-      <para>
-As Tapestry continues to develop, new features will be added.  On the drawing board are:
-
-	<itemizedlist>
-          <listitem>
-            <para>Support for easy cross-browser DHTML</para>
-          </listitem>
-          <listitem>
-            <para>XML / XHTML support</para>
-          </listitem>
-          <listitem>
-            <para>Improved WAP / WML support</para>
-          </listitem>
-          <listitem>
-            <para>A real-time performance "Dashboard"</para>
-          </listitem>
-        </itemizedlist>
-      </para>
-    </section>  <!-- intro.features -->
-
-
-
-  </chapter>
\ No newline at end of file
diff --git a/3.0.4/doc/src/DevelopersGuide/jars.xml b/3.0.4/doc/src/DevelopersGuide/jars.xml
deleted file mode 100644
index 4042ddc..0000000
--- a/3.0.4/doc/src/DevelopersGuide/jars.xml
+++ /dev/null
@@ -1,83 +0,0 @@
-<!-- $Id$ -->
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<appendix id="jars">
-	<title>Tapestry JAR files</title>
-	
-<variablelist>
-		
-	<varlistentry>
-		<term><filename>lib/runtime/<replaceable>*</replaceable>.jar</filename></term>
-		<listitem>
-		<para>
-		Frameworks that are usually needed at runtime (but not at framework build time) and
-		are not always supplied by the servlet container.  This currently
-		is just the &Log4J; framework.
-		</para>
-		</listitem>
-	</varlistentry>
-	
-
-	<varlistentry>
-		<term><filename>lib/ext/<replaceable>*</replaceable>.jar</filename></term>
-		<listitem>
-		<para>
-		Frameworks needed when compiling the framework and at runtime.  This is
-		several other &Jakarta; frameworks (including &BSF; and &BCEL;), plus
-		the &OGNL; framework.
-		</para>
-		</listitem>
-	</varlistentry>
-
-
-			<varlistentry>
-		<term>&TapestryFrameworkJar;</term>
-		<listitem>
-			<para>
-			The main Tapestry framework.  This is needed at compile time and runtime.  At runtime, it is most
-			often added to the servlet container's classpath.  The framework release number is
-			integrated into the file name.
-			</para>
-		</listitem>
-	</varlistentry>
-	
-	
-	<varlistentry>
-		<term>&TapestryContribJar;</term>
-		<listitem>
-		<para>
-		Contains additional components and tools that are not integral to the framework itself, such
-		as the &Palette;.  Needed at runtime if any such components are used in an application.
-		The framework release number is integrated into the file name.
-		</para>
-		</listitem>
-	</varlistentry>
-
-	
-
-	
-</variablelist>
-
-<para>
-In addition, Tapestry applications may need the packages
-<class>javax.servlet</class> and
-<class>javax.xml.</class> at compile time and an XML parser at runtime.  These
-are usually provided by the servlet container or application server.
-</para>
-
-
-</appendix>
-  
diff --git a/3.0.4/doc/src/DevelopersGuide/pages.xml b/3.0.4/doc/src/DevelopersGuide/pages.xml
deleted file mode 100644
index ebacc8c..0000000
--- a/3.0.4/doc/src/DevelopersGuide/pages.xml
+++ /dev/null
@@ -1,754 +0,0 @@
-<!-- $Id$ -->
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-  <chapter id="pages">
-    <title>Tapestry Pages</title>
-    <para>
-Pages are specialized versions of components.  As components, they have a specification, 
-embedded components, assets and an HTML template.
-</para>
-    <para>
-Pages do not have parameters, because they are the outermost component in the component 
-hierarchy.
-</para>
-    <para>
-All components, however deep their nesting, have a page property that points back to the page 
-they are ultimately embedded within.   Pages have an engine property that points to the engine 
-they are currently attached to.
-</para>
-    <para>
-Pages participate in a pooling mechanism, so that a single instance of a page component can be 
-used by multiple sessions of the same web application.  Even when a large number of client 
-sessions are active, it is rare for more than a handful to be actively processing requests in the 
-application server.  This pooling mechanism minimizes the number of instances of a page that 
-must exist concurrently on the server.  There are some implications to this design that are 
-discussed in the following sections.
-</para>
-    <para>
-Pages may have persistent state, properties specific to a particular user
-that persist between request cycles.  These properties live only as long as the
-&HttpSession;.  There is some complexity here, because the page state is
-entirely <emphasis>seperate</emphasis> from any instance of the page.  Remember that
-on subsequent requests, a different page from the page pool may be used
-to service the request ... in fact, in a clustering environment, the request
-may be serviced by an entirely different server.  Tapestry
-efficiently and transparently hides these details; when any portion of an application
-requests a page, it receives an instance of the page with all persistent page properties
-set the the values previously stored for the user.
-</para>
-    <para>
-In fact, any 
-component may have persistent state, and use the page as means for recording that state.
-</para>
-    <para>
-The engine is a session persistent object.  The implementation of this varies from application 
-server to application server, but the basic idea is that the
-&HttpSession; is serialized after each 
-request and stored in a file or database.  It may then be removed from memory.  When a 
-subsequent request for the same session arrives, it is restored from the persistent storage.
-</para>
-    <para>
-In a clustering server application, consequtive requests for the same session may be serviced by 
-different servers within the cluster.  Serializing and deserializing the
-&HttpSession; is the mechanism 
-by which the servers are kept synchronized.  Persistent page properties are stored as part
-of the engine, and so they continue to be available, even after the engine has moved
-from one server to another.
-</para>
-    <para>
-The visit object is a property of the engine object, so it is serialized and de-serialized with the 
-engine.
-</para>
-    <para>
-Pages are <emphasis>not</emphasis> session persistent.  They exist only within the memory of the Java VM in which they 
-are first created.  Pages and components don't need to implement the 
-<classname>java.io.Serializable</classname>
-interface; they will never be serialized.
-</para>
-    <para>
-The application engine can always instantiate a new page instance and restore its previously 
-recorded state (the recorded state information is serialized with the engine).
-</para>
-    <section id="pages.state">
-      <title>Page State</title>
-      <para>
-Pages, and the components on them, have state.  State is considered the set of values for the 
-properties of the page.
-</para>
-      <para>
-In Tapestry, the lifespan of each property is very important.  There are three lifespans:
-</para>
-      <itemizedlist>
-        <listitem>
-          <para>
-			Persistent.  Changes the property are recorded and persist between request cycles.  
-			Persistent properties are restored when the page is next loaded.  Persistent
-			properties are specific to an individual user.
-		</para>
-        </listitem>
-        <listitem>
-          <para>
-			Transient.  The property is set before the page is rendered and will be reset 
-			(to its default value) at the end of the current request cycle.
-		</para>
-        </listitem>
-        <listitem>
-          <para>
-			Dynamic.  The property changes even while the page is rendered, but 
-			(like transient) the property is 
-			reset at the end of the current request cycle.
-		</para>
-        </listitem>
-      </itemizedlist>
-      <para>
-Persistent properties are things like the user's name, the product being displayed in an 
-e-commerce application, etc.  Transient properties are more commonly things needed just once, 
-such as an error message.  Dynamic properties are intimately tied to the rendering process ... for 
-example, to display a list of items in an order, it may be necessary to have a dynamic property take 
-the value of each line item in sequence, as part of a loop.
-</para>
-    </section>
-    <section id="pages.persistent-state">
-      <title>Persistent Page State</title>
-      <para>
-The Tapestry framework is responsible for tracking changes to page state during the request cycle, 
-and storing that state between request cycles.   Ultimately, this is the responsiblility of the 
-application engine.  This is accomplished through page recorder objects.  As a page's persistent 
-state changes, it notifies its page recorder, providing the name of the property and the new value.  
-</para>
-      <para>
-This information is stored persistently between request cycles.  In a later request cycle, the page 
-recorder combines this information with a page instance to rollback the state of the page.
-</para>
-      <para>
-Pages are blind as to how their state is stored.  The basic implementation of Tapestry simply 
-stores the page state information in memory (and serializes it with the engine, in the 
-&HttpSession;), 
-but future options may include storing the data in flat files, relational databases or even as cookies 
-in the client browser.
-</para>
-      <para>
-Some minor burden is placed on the developer to support persistent state.
-The mutator method of every persistent property must include a line of code that notifies the 
-observer of the change.
-</para>
-      <para>
-For example, consider a page that has a persistent property for storing an email address.  It would 
-implement the normal accessor and mutator methods:
-</para>
-      <informalexample>
-        <programlisting>
-private String emailAddress;
-
-public String getEmailAddress()
-{
-  return emailAddress;
-}
-
-public void setEmailAddress(String value)
-{
-  emailAddress = value;
-
-  <emphasis>fireObservedChange("emailAddress", value);</emphasis>
-}</programlisting>
-      </informalexample>
-      <para>
-The mutator method does slightly more than change the private instance variable; it must also 
-notify the observer of the change, by   invoking the method 
-<function>fireObservedChange()</function>, 
-which is 
-implemented by the class 
-&AbstractComponent;.  This method is 
-overloaded; implementations are provided for every type of scalar value, and for 
-<classname>java.lang.Object</classname>.
-</para>
-      <para>
-The value itself must be serializable (scalar values are converted to wrapper classes, which are 
-serializable).
-</para>
-      <para>
-The page designer must provide some additional code to manage the lifecycle of the page and its 
-persistent properties.  This is necessary to support the "shell game" that allows a page instance to 
-be separate from its persistent state, and is best explained by example.  Let's pretend that the user 
-can select a personal preference for the color scheme of a page.  The default color is blue.
-</para>
-      <para>
-The first user, Suzanne, reaches the page first.  Disliking the blue color scheme, she uses a form 
-on the page to select a green color scheme.  The instance variable of the page is changed to green, 
-and the page recorder inside Suzanne's session records that the persistent value for the color 
-property is green.
-</para>
-      <para>
-When Suzanne revisits the page, an arbitrary instance of the page is taken from the pool. The page 
-recorder changes the color of the page to green and Suzanne sees a green page.
-</para>
-      <para>
-However, if Nancy visits the same page for the first time, what is the color?  Her page recorder 
-will not note any particular selection for the page color property.  She'll get whatever was left in 
-the page's instance variable ... green if she gets the instance last used to display the page for 
-Suzanne, or some other color if some other user recently hit the same page.
-</para>
-      <para>
-This may seem relatively minor when the persistent page state is just the background color.  
-However, in a real application the persistent page state information may include user login 
-information, credit card data, the contents of a shopping cart  or whatever.
-The way to deal with this properly is for each page with persistent state to override the method 
-<function>detach()</function>.  The implementation should reset any instance variables on the page to their initial 
-(freshly allocated) values.
-</para>
-      <para>
-In our example, when Suzanne is done with the page, its <function>detach()</function> method will reset the page 
-color property back to blue before releasing it into the pool.  When Nancy hits the page for the 
-first time, the page retrieved from the pool with have the expected blue property.
-</para>
-
-<para>
-In other words, it is the responsibility of the developer to ensure that,
-as a page is returned to the pool, its state is exactly the same
-as a freshly created page.
-</para>
-
-      <para>
-In our earlier email address example, the following additional code must be implemented by the 
-page:
-</para>
-      <informalexample>
-        <programlisting>
-public void detach()
-{
-  emailAddress = null;
-
-  super.detach();
-}</programlisting>
-      </informalexample>
-      <para> 
-All properties, dynamic, transient and persistent, should be reset inside the 
-<function>detach()</function> method.
-</para>
-      <para>
-Individual components on a page may also have dynamic, transient or persistent properties.  If so, 
-they should implement the &PageDetachListener; interface and implement the 
-<function>pageDetached()</function> method and clear 
-out such properties, just as a page does in 
-<function>detach()</function>.
-</para>
-    </section>
-    <section id="pages.ejb-props">
-      <title>EJB Page Properties</title>
-      <para>
-Tapestry make a single, special case for one particular type of persistent page property:  references 
-to Enterprise JavaBeans.
-</para>
-      <para>
-The page recorders check to see if a page property is type 
-<classname>javax.ejb.EJBObject</classname>.  If so, they don't 
-store the object itself (<classname>EJBObjects</classname> are not directly serializable), 
-instead they get the <classname>Handle</classname> for the object 
-and store that instead (<classname>Handle</classname>s are serializable).
-</para>
-      <para>
-When the page is next accessed, the <classname>Handle</classname> is converted back into an 
-<classname>EJBObject</classname> before assigning 
-it to the page property.
-</para>
-      <para>
-A side effect of this is that you may not have a <classname>Handle</classname> as a 
-persistant page property; the page 
-recorders don't have a way to differentiate a <classname>Handle</classname> from an 
-<classname>EJBObject</classname> converted to a <classname>Handle</classname>
-and always assume the latter.
-</para>
-    </section>
-    <section id="pages.dynamic-state">
-      <title>Dynamic Page State</title>
-      <para>
-The properties of a page and components on the page can change during the rendering process.   
-These are changes to the page's dynamic state.
-</para>
-      <para>
-The majority of components in an application use their bindings to pull data from the page (or 
-from business objects reachable from the page).
-</para>
-      <para>
-A small number of components, notably the &Foreach; component, work the other way; pushing 
-data back to the page (or some other component).
-</para>
-      <para>
-The &Foreach; component is used to loop over 
-a set of items.  It has one parameter from which it 
-reads the list of items.  A second parameter is used to write each item back to a property of its 
-container.
-</para>
-      <para>
-For example, in our shopping cart example, we may use a &Foreach; to run 
-through the list of line 
-items in the shopping cart.  Each line item identifies the product, cost and quantity.
-</para>
-      <example>
-        <title>HTML template for Shopping Cart</title>
-        <programlisting><![CDATA[
-<h1>Context of shopping cart for
-<span jwcid="insertUserName">John Doe</span></h1>
-<table>
-  <tr>
-    <th>Product</th> <th>Qty</th> <th>Price</th>
-  </tr>
-  <span jwcid="eachItem">
-  <tr>
-    <td><span jwcid="insertProductName">Product Name</span></td>
-    <td><span jwcid="insertQuantity">5</span></td>
-    <td><span jwcid="insertPrice">$1.50</span></td>
-    <td><a jwcid="remove">remove</a></td>
-  </tr>
-  </span>
-</table>]]></programlisting>
-      </example>
-      <para>
-This example shows a reasonable template, including sample static values used
-when previewing the HTML layout (they are removed by Tapestry at runtime).  Some
-areas have been glossed over, such as allowing quantities to be changed.
-</para>
-      <para>
-Component <varname>eachItem</varname> is our &Foreach;.   
-It will render its body (all the text and components it wraps) several times, 
-depending on the number of line items in the cart.  On each pass it:
-</para>
-      <itemizedlist>
-        <listitem>
-          <para>Gets the next value from the source</para>
-        </listitem>
-        <listitem>
-          <para>Updates the value into some property of its container</para>
-        </listitem>
-        <listitem>
-          <para>Renders its body</para>
-        </listitem>
-      </itemizedlist>
-      <para>
-This continues until there are no more values in its source.  Lets say this is a page that has a 
-<varname>lineItem</varname> property that is being updated by the 
-<varname>eachItem</varname> component.  The <varname>insertProductName</varname>, 
-<varname>insertQuantity</varname> and <varname>insertPrice</varname> components use dynamic 
-bindings such as <literal>lineItem.productName</literal>, 
-<literal>lineItem.quantity</literal> and <literal>lineItem.price</literal>.
-</para>
-      <para>
-Part of the page's specification would configure these embedded components.
-</para>
-      <example>
-        <title>Shopping Cart Specification (excerpt)</title>
-        <programlisting>
-&lt;component id="eachItem" type="&Foreach;"&gt;
-  &lt;binding name="source" expression="items"/&gt;
-  &lt;binding name="value" expression="lineItem"/&gt;
-&lt;/component&gt;
-
-&lt;component id="insertProductName type="&Insert;"&gt;
-  &lt;binding name="value" expression="lineItem.productName"/&gt;
-&lt;/component&gt;
-
-&lt;component id="insertQuantity" type="&Insert;"&gt;
-  &lt;binding name="value" expression="lineItem.quantity"/&gt;
-&lt;/component&gt;
-
-&lt;component id="insertPrice" type="&Insert;"&gt;
-  &lt;binding name="value" expression="lineItem.price"/&gt;
-&lt;/component&gt;
-
-&lt;component id="remove" type="&ActionLink;"&gt;
-  &lt;binding name="listener" expression="listeners.removeItem"/&gt;
-&lt;/component&gt;
-</programlisting>
-      </example>
-      <para>
-This is very important to the <varname>remove</varname> component.  On some future request cycle, it will be 
-expected to remove a specific line item from the shopping cart, but how will it know which one?
-</para>
-      <para>
-This is at the heart of the <link linkend="cycle.action">action service</link>.  One aspect of the 
-&IRequestCycle;'s functionality is to 
-dole out a sequence of action ids that are used for this purpose (they are also involved in forms 
-and form elements).  As the &ActionLink; component renders itself, 
-it allocates the next action id from 
-the request cycle.  Regardless of what path through the page's component hierarchy the rendering 
-takes, the numbers are doled out in sequence.  This includes conditional blocks and loops such as 
-the &Foreach;.
-</para>
-      <para>
-The steps taken to render an HTML response are very deterministic.  If it were possible to 
-'rewind the clock' and restore all the involved objects back to the same state (the same values for 
-their instance variables) that they were just before the rendering took place, the end result would 
-be the same.  The exact same HTML response would be created.
-</para>
-      <para>
-This is similar to the way in which compiling a program from source code results in the same object 
-code.  Because the inputs are the same, the results will be identical.
-</para>
-      <para>
-This fact is exploited by the action service to respond to the URL.  In fact, the state of the page 
-and components <emphasis>is</emphasis> rolled back and the rendering processes fired again (with output discarded).  
-The &ActionLink; component can compare the action id against the target action id encoded 
-within the URL.  When a match is found, the &ActionLink; component can count on the state of the 
-page and all components on the page to be in the exact same state they were in when the page 
-was previously rendered.
-</para>
-      <para>
-A small effort is required of the developer to always ensure that this rewind operation works.  In 
-cases where this can't be guaranteed (for instance, if the source of this dynamic data is a stock 
-ticker or unpredictable database query) then other options must be used, including the use of
-the &ListEdit; component.
-</para>
-      <para>
-In our example, the <varname>remove</varname> component would trigger some application specific code 
-implemented in its containing page that removes the current <varname>lineItem</varname> from the shopping cart.
-</para>
-      <para>
-The application is responsible for providing a
-<link linkend="cycle.listeners">listener method</link>, a method which is invoked
-when the link is triggered.
-</para>
-      <example>
-        <title>Listener method for remove component</title>
-        <programlisting>
-public void removeItem(IRequestCycle cycle)
-{
-  getCart().remove(lineItem);
-}
-</programlisting>
-      </example>
-      <para>
-This method is only invoked after all the page state is rewound; 
-especially relevant is the <varname>lineItem</varname> property.  
-The listener gets the shopping cart and removes the current line item from it.
-This whole rewinding process has ensured that <varname>lineItem</varname> is the correct value, even though the remove 
-component was rendered several times on the page (because it was wrapped by the &Foreach;
-component).
-</para>
-      <note>
-        <title>Listener Methods vs. Listener Objects</title>
-        <para>
-	<link linkend="cycle.listeners">Listener methods</link> were introduced in Tapestry 1.0.2.  Prior to that, it was necessary
-	to create a listener object, typically as an inner class, to be notified when
-	the link or form was triggered.  This worked against the basic goal of Tapestry: to 
-	eliminate or simplify coding.  In reality, the listener objects are still there,
-	they are created automatically and use Java reflection to invoke the
-	correct listener method.
-	</para>
-      </note>
-      <para>
-An equivalent JavaServer Pages application would have needed to define a servlet for removing 
-items from the cart, and would have had to encode in the URL some identifier for the item to be 
-removed.  The servlet would have to pick apart the URL to find the cart item identifier, locate the 
-shopping cart object (probably stored in the &HttpSession;)
-and the particular item and invoke 
-the <function>remove()</function> method directly.  Finally, it would forward to the JSP that would produce the 
-updated page.
-</para>
-      <para>
-The page containing the shopping cart would need to have special knowledge of the cart 
-modifying servlet; its servlet prefix and the structure of the URL (that is, how the item to remove 
-is identified).  This creates a tight coupling between any page that wants to display the shopping 
-cart and the servlet used to modify the shopping cart.  If the shopping cart servlet is modified 
-such that the URL it expects changes structure, all pages referencing the servlet will be broken. 
-</para>
-      <para>
-Tapestry eliminates all of these issues, reducing the issue of manipulating the shopping cart down 
-to the single, small listener method.  
-</para>
-    </section>
-    <section id="pages.stale-links">
-      <title>Stale Links and the Browser Back Button</title>
-      <para>
-The fact that web browsers have a "back" button is infuriating to application developers.  What 
-right does the user have to dictate the order of navigation through the application?  Whose 
-application is this anyway?
-</para>
-      <para>
-In a truly stateless application, the browser back button is not a great hardship, because each page 
-carrys within itself (as cookies, hidden form fields and encoded URLs) all the state necessary to 
-process the page.
-</para>
-      <para>
-Tapestry applications can be more stateful, which is a blessing and a curse.  The blessing is that 
-the Tapestry application, running on the server, can maintain state in terms of business objects, 
-data from databases, Enterprise JavaBeans and more.  The curse is that a user hitting the back 
-button on the browser loses synchronization with that state.
-</para>
-      <para>
-Let's use an e-commerce example.  A user is browsing a list of available cameras from a product 
-catalog.  The user clicks on a Minolta camera and is presented with pictures, prices and details 
-about the Minolta camera.</para>
-      <para>
-Part of the page lists similar or related items.  The user clicks on the name of a similar Nikon 
-camera and is shown the pictures, prices and details of the Nikon camera.
-The user then hits the 
-browser back button, returning to the page showing the Minolta camera, and clicks 
-the "add to shopping cart" button.  Web browsers have no way of informing the server that the user
-has employed the back button.
-</para>
-      <para>
-Once the user clicks the link, the server replies with a response showing
-the contents of the shopping cart ... but what has been added to the cart, the Minolta or the 
-Nikon?  It depends on how the Tapestry application has been structured.
-</para>
-      <para>
-Presumably, the application has a single page, named <classname>ProductDetails</classname>, that shows the pictures, 
-prices and details of any product.  The <classname>ProductDetails</classname> page will 
-have a persistent property named 
-product, of type <classname>Product</classname>.  <classname>Product</classname> is a business 
-class that contains all that pricing and detail 
-information.
-</para>
-      <para>
-The question is, how is the add to shopping cart link implemented?  If its logic is to add whatever the 
-current value of the product property is (i.e., by using an &ActionLink;
-component or part of a form) then it will 
-add the Nikon camera, since that's the current product (the most recent one displayed 
-to the user, as far as the server is concerned &horbar; it has no way to know the user hit
-the back button and was staring at the Minolta when the link was clicked).  This is the natural approach, since it 
-doesn't take into account the possiblility that the user worked backwards to a prior page.
-</para>
-      <para>
-On the other hand, if a &DirectLink; component is used, it can encode into the 
-URL the primary key of 
-the Minolta product, and that will be the product added to the shopping cart, regardless of the 
-current value of the product property.
-</para>
-      <para>
-HTML Forms, controlled by the &Form; component, are also
-susceptible to these issues related to the browser back button.  Still, there are techniques to make 
-even forms safe.  Borrowing an idea from more traditional JavaServer Pages development, a 
-hidden field can be included in the form to sychronize the form and the application ... for 
-example, including the primary key of the Minolta or Nikon product.  Tapestry includes a 
-&Hidden; component used for just this purpose.
-</para>
-      <para>
-Finally, the &ListEdit; component exists to help.  It works like a &Foreach;, but encodes the
-number and value of the items it iterates as hidden form fields.
-</para>
-    </section>
-    <section id="pages.pooling">
-      <title>Page Loading and Pooling</title>
-      <para>
-The process of loading a page (instantiating the page and its components) can be somewhat 
-expensive.  It involves reading the page's specification as well as the specification of all embedded 
-components within the page.  It also involves locating, reading and parsing the HTML templates 
-of all components.  Component bindings must be created and assigned.
-</para>
-      <para>
-All of this takes time ... not much time on an unloaded server but potentially longer than is 
-acceptable on a busy site.</para>
-      <para>
-It would certainly be wasteful to create these pages just to discard them at the end of the request 
-cycle.
-</para>
-      <para>
-Instead, pages are used during a request cycle, and then stored in a pool for later re-use.  In 
-practice, this means that a relatively small number of page objects can be shared, even when there 
-are a large number of clients (a single pool is shared by all clients).  The maximum number of 
-instances of any one page is determined by the maximum number of clients that simultaneously 
-process a request that involves that page.
-</para>
-      <figure>
-        <title>Page Lifecycle</title>
-        <mediaobject>
-          <imageobject>
-            <imagedata fileref="images/Page-Lifecycle.gif" format="GIF"/>
-          </imageobject>
-        </mediaobject>
-      </figure>
-      <para>
-As the page is retrieved from the pool, all of its persistent page properties are set.  Thus
-the page is <emphasis>equivalent</emphasis> to the page last used by the application, even
-if it is not the same instance.  This includes any state (that is, the settings of any instance variables)
-that are particular to the client.
-</para>
-      <para>
-This process is managed by the &IRequestCycle;.  When asked for a page, it checks whether the page has
-been accessed yet for this request.  If not, the page must be obtained from the page loader and properly
-attached and configured.
-</para>
-      <figure>
-        <title>Page Loading Sequence</title>
-        <mediaobject>
-          <imageobject>
-            <imagedata fileref="images/Page-Load-sequence.gif" format="GIF"/>
-          </imageobject>
-        </mediaobject>
-      </figure>
-      <para>
-The page loader maintains a pool of pages, or can construct a new page instance as needed.  The
-&IPageRecorder; for the page tracks the persistant page properties and can reset the properties
-of the page instance to values appropriate to the current session.
-</para>
-      <para>
-A page is taken out of the pool only long enough to process a request for a client that involves it.  
-A page is involved in a request if it contains the component identified in the service URL, or if 
-application code involves the page explicitly (for instance, uses the page to render the HTML 
-response).  In either case, as soon as the response HTML stream is sent back to the client, any 
-pages used during the request cycle are released back to the pool.
-</para>
-      <para>
-This means that pages are out of the pool only for short periods of time.  The duration of any 
-single request should be very short, a matter of a second or two.  If, during that window, a second 
-request arrives (from a different client) that involves the same page, a new instance will be created.  
-Unless and until that happens, a single instance will be used and re-used by all clients, regardless of 
-the number of clients.
-</para>
-      <para>Pages stay in the pool until culled, at which point the garbage collector will release the memory used by the page (and all the components embedded in it).  The default behavior is to cull unused pages after approximately ten minutes.</para>
-    </section>
-    <section id="pages.localization">
-      <title>Page Localization</title>
-      <para>
-When a page is first instantiated, its locale is set to match the locale of the 
-engine it is loaded into.
-</para>
-      <para>
-This page locale is read-only; it is set when the page is first created and never changes.
-</para>
-      <para>
-Any component or asset on the page that needs to be locale-specific (for instance, to load the 
-correct HTML template) will reference the page's locale.
-</para>
-      <para>
-As noted previously, pages are not discarded; they are pooled for later reuse.  When an engine
-gets an existing page from the pool, it always matches its locale against the pooled page's locale.  
-Thus a page and its engine will always agree on locale, with one exception:  if the engine 
-locale is changed during the request cycle.
-</para>
-      <para>
-When the engine locale changes, any pages loaded in the current request cycle will reflect the 
-prior locale.  On subsequent request cycles, new pages will be loaded (or retrieved from the pool) 
-with locales matching the engine's new locale.
-</para>
-      <para>
-Tapestry does not currently have a mechanism for unloading a page in the same request cycle it 
-was loaded (except at the end of the request cycle, when all pages are returned to the pool).  If an 
-application includes the ability to change locale, it should change to a new page after the locale 
-change occurs.
-</para>
-      <para>
-Changing locale may have other, odd effects.  If part of a page's persistent state is localized and 
-the application locale is changed, then on a subsequent request cycle, the old localized state will be 
-loaded into the new page (with the new locale).  This may also affect any components on the page 
-that have persistent state (though components with persistent state are quite rare).
-</para>
-      <para>
-In general, however, page localization is as easy as component localization and is usually not much 
-of a consideration when designing web applications with Tapestry.
-</para>
-    </section>
-    <section id="pages.buffering">
-      <title>Page Buffering</title>
-      <para>
-The HTML response generated by a page during rendering is buffered.  Eight kilobytes of 8-bit 
-ASCII HTML is allowed to accumulate before any HTML output is actually sent back to the 
-client web browser.
-</para>
-      <para>
-If a Java exception is thrown during the page rendering process, any buffered output is discarded, 
-and the application-defined exception page is used to report the exception to the user.
-</para>
-      <para>
-If a page generates a large amount of HTML (larger than the 8KB buffer)
-and then throws an exception, the exception page is 
-still used to report the exception, however the page finally viewed in the client browser will be 
-"ugly", because part of the failed page's HTML will appear, then the complete HTML of the 
-exception page.
-</para>
-      <para>
-In practice, virtually all Tapestry pages will use a 
-&Body; component wrapping the majority of the page (it takes
-the place of the normal <sgmltag class="starttag">body</sgmltag> element), and a &Body; component 
-buffers the output of all components in its body.  This buffering is necessary so that the 
-&Body; component can write out various JavaScript handlers before the main body of HTML is written 
-(this is often related to the use of the &Rollover; and &Script; components).
-</para>
-      <para>
-In any case, whenever a &Body;
-component is used, an exception thrown during the rendering of the page will cause all the 
-HTML buffered by the &Body; component to be cleanly discarded, allowing for a clean 
-presentation of the exception page.
-</para>
-    </section>
-    <section id="pages.events">
-      <title>Page Events</title>
-      <para>
-Each page has a lifecycle; it is created and attached to an engine.  It will render itself.  It is placed in a pool for later reuse.  Later, it comes out of the pool and is attached to a new engine to
-start the process again.
-There are cases where objects, especially the components embedded somewhere within the page,
-need to know about this lifecycle.
-</para>
-      <para>
-&IPage; can produce a number of events related to its lifecycle.  &PageRenderListener; is a listener interface for determining when the page starts and finishes rendering (this includes rewind renders related to the
-&ActionLink; component).
-</para>
-      <figure>
-        <title>Page Render Sequence</title>
-        <mediaobject>
-          <imageobject>
-            <imagedata fileref="images/Page-Render-sequence.gif" format="GIF"/>
-          </imageobject>
-        </mediaobject>
-      </figure>
-      <para>
-The call to <function>commitPageChanges()</function> is very important.  It is not possible to make any
-changes to persistant page properties after this method is invoked; doing so will throw an exception.
-</para>
-      <figure>
-        <title>Page Rewind Sequence</title>
-        <mediaobject>
-          <imageobject>
-            <imagedata fileref="images/Page-Rewind-sequence.gif" format="GIF"/>
-          </imageobject>
-        </mediaobject>
-      </figure>
-      <para>
-Page rewinds, which are related to the &Form; and &ActionLink; components, also perform a render operation
-in order to restore dynamic state on the page.  The &PageRenderListener; events are still fired.  The
-event listeners can invoke <function>isRewinding()</function> on &IRequestCycle; to determine
-whether this is a normal render, or for rewind purposes.
-</para>
-      <para>
-The &PageDetachListener; interface is used by objects that wish to know when the page is detached from the
-application, prior to be stored into the page pool (for later reuse).  This is used by any components
-that maintain any independent state.
-</para>
-      <figure>
-        <title>Page Detach Sequence</title>
-        <mediaobject>
-          <imageobject>
-            <imagedata fileref="images/Page-Detach-Sequence.gif" format="GIF"/>
-          </imageobject>
-        </mediaobject>
-      </figure>
-      <para>
-This cleanup occurs at the end of the request, after a response has been sent to the client web browser.
-</para>
-
-      <para>
-The engine knows when the &HttpSession; has been invalidated because the container will
-invoke <function>valueUnbound()</function>.  It loads and rolls back each page, then invokes
-<function>cleanupPage()</function> to allow the page to gracefully cleanup any held resources.
-</para>
-      <para>
-Components that implement one of these interfaces usually override the method
-<function>finishLoad()</function> (from &AbstractComponent;) to register themselves with the page.
-</para>
-    </section>
-  </chapter>
-  
\ No newline at end of file
diff --git a/3.0.4/doc/src/DevelopersGuide/script-spec.xml b/3.0.4/doc/src/DevelopersGuide/script-spec.xml
deleted file mode 100644
index cdef133..0000000
--- a/3.0.4/doc/src/DevelopersGuide/script-spec.xml
+++ /dev/null
@@ -1,480 +0,0 @@
-<!-- $Id$ -->
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<appendix id="script-spec">
-	<title>Tapestry Script Specification DTD</title>
-	
-<para>
-Tapestry Script Specifications are frequently used with the &Script;
-component, to create dynamic JavaScript functions, typically for use
-as event handlers for client-side logic.
-</para>
-
-<para>
-The root element is &script-spec.script;.
-</para>
-
-<para>
-A script specifcation is a kind of specialized template that
-takes some number of input symbols and combines and manipulates
-them to form output symbols, as well as
-body and initialization.  Symbols may
-be simple strings, but are also frequently objects or components.
-</para>
-
-<para>
-Script specifications use an Ant-like syntax to insert dynamic values
-into text blocks.  <literal>${<replaceable>OGNL expression</replaceable>}</literal>.
-The expression is evaluated relative to a &Map; of symbols.
-</para>
-
-<section id="script-spec.body">
-	<title><sgmltag class="starttag">body</sgmltag> element</title>
-	
-<para>
-Appears in: &script-spec.script;
-</para>
-
-<para>
-Specifies the main body of the JavaScript; this is where
-JavaScript variables and methods are typically declared.
-This body will be passed to the &Body; component for inclusion
-in the page.
-</para>
-	
-<figure>
-	<title><sgmltag class="starttag">body</sgmltag> Elements</title>
-<literallayout>
-  (&script-spec.full-content;) *
-</literallayout>
-</figure>	
-</section> <!-- script-spec.body -->
-
-
-<section id="script-spec.foreach">
-	<title><sgmltag class="starttag">foreach</sgmltag> element</title>
-	
-<para>
-Appears in: <emphasis>many</emphasis>
-</para>
-
-<para>
-An element that renders its body repeatedly, much like a &Foreach; component.
-An expression supplies a collection or array of objects, and its body is
-rendered for each element in the collection.
-</para>
-
-<figure>
-	<title><sgmltag class="starttag">foreach</sgmltag> Attributes</title>
-<informaltable>
-<tgroup cols="5">
-<thead>
-<row>
-  <entry>Name</entry>
-  <entry>Type</entry>
-  <entry>Required ?</entry>
-  <entry>Default Value</entry>
-  <entry>Description</entry>
-</row>
-</thead>
-<tbody>
-<row>
-	<entry>key</entry>
-	<entry>string</entry>
-	<entry>yes</entry>
-	<entry/>
-	<entry>The symbol to be updated with each successive value.</entry>
-</row>
-<row>
-  <entry>expression</entry>
-  <entry>string</entry>
-  <entry>yes</entry>
-  <entry/>
-  <entry>The OGNL expression which provides the source of elements.</entry>
-</row>
-</tbody>
-</tgroup>
-</informaltable>
-</figure>	
-
-<figure>
-	<title><sgmltag class="starttag">foreach</sgmltag> Elements</title>
-<literallayout>
-  (&script-spec.full-content;) *
-</literallayout>
-</figure>
-
-
-</section> <!-- script-spec.foreach -->
-
-
-<section id="script-spec.if">
-	<title><sgmltag class="starttag">if</sgmltag> element</title>
-	
-
-<para>
-Appears in: <emphasis>many</emphasis>
-</para>
-
-<para>
-Conditionally renders its body, if a supplied OGNL 	
-expression is true.
-</para>
-
-<figure>
-	<title><sgmltag class="starttag">if</sgmltag> Attributes</title>
-<informaltable>
-<tgroup cols="5">
-<thead>
-<row>
-  <entry>Name</entry>
-  <entry>Type</entry>
-  <entry>Required ?</entry>
-  <entry>Default Value</entry>
-  <entry>Description</entry>
-</row>
-</thead>
-<tbody>
-<row>
-  <entry>expression</entry>
-  <entry>string</entry>
-  <entry>yes</entry>
-  <entry/>
-  <entry>The OGNL expression to be evaluated.</entry>
-</row>
-</tbody>
-</tgroup>
-</informaltable>
-</figure>	
-
-<figure>
-	<title><sgmltag class="starttag">if</sgmltag> Elements</title>
-<literallayout>
-  (&script-spec.full-content;) *
-</literallayout>
-</figure>
-
-</section> <!-- script-spec.if -->
-
-
-<section id="script-spec.if-not">
-	<title><sgmltag class="starttag">if-not</sgmltag> element</title>
-	
-
-<para>
-Appears in: <emphasis>many</emphasis>
-</para>
-
-<para>
-Conditionally renders its body, if a supplied OGNL 	
-expression is false.
-</para>
-
-<figure>
-	<title><sgmltag class="starttag">if-not</sgmltag> Attributes</title>
-<informaltable>
-<tgroup cols="5">
-<thead>
-<row>
-  <entry>Name</entry>
-  <entry>Type</entry>
-  <entry>Required ?</entry>
-  <entry>Default Value</entry>
-  <entry>Description</entry>
-</row>
-</thead>
-<tbody>
-<row>
-  <entry>expression</entry>
-  <entry>string</entry>
-  <entry>yes</entry>
-  <entry/>
-  <entry>The OGNL expression to be evaluated.</entry>
-</row>
-</tbody>
-</tgroup>
-</informaltable>
-</figure>	
-
-<figure>
-	<title><sgmltag class="starttag">if-not</sgmltag> Elements</title>
-<literallayout>
-  (&script-spec.full-content;) *
-</literallayout>
-</figure>
-	
-</section> <!-- script-spec.if-not -->
-
-
-<section id="script-spec.include-script">
-	<title><sgmltag class="starttag">include-script</sgmltag> element</title>
-	
-<para>
-Appears in: &script-spec.script;
-</para>
-
-<para>
-Used to include a static JavaScript library.  A library will only be included once, regardless of
-how many different scripts reference it.  Such libraries are located on the classpath.
-</para>
-
-	
-<figure>
-	<title><sgmltag class="starttag">include-script</sgmltag> Attributes</title>
-<informaltable>
-<tgroup cols="5">
-<thead>
-<row>
-  <entry>Name</entry>
-  <entry>Type</entry>
-  <entry>Required ?</entry>
-  <entry>Default Value</entry>
-  <entry>Description</entry>
-</row>
-</thead>
-<tbody>
-<row>
-  <entry>resource-path</entry>
-  <entry>string</entry>
-  <entry>yes</entry>
-  <entry/>
-  <entry>The location of the JavaScript library.</entry>
-</row>
-</tbody>
-</tgroup>
-</informaltable>
-</figure>	
-</section> <!-- script-spec.include-script -->
-
-
-<section id="script-spec.initialization">
-	<title><sgmltag class="starttag">initialization</sgmltag> element</title>
-	
-<para>
-Appears in: &script-spec.script;
-</para>
-
-<para>
-Defines initialization needed by the remainder of the script.  Such initialization
-is placed inside a method invoked from the HTML <sgmltag class="starttag">body</sgmltag>
-element's <literal>onload</literal> event handler ... that is, whatever is placed inside
-this element will not be executed until the entire page is loaded.
-</para>
-
-	
-
-<figure>
-	<title><sgmltag class="starttag">initialization</sgmltag> Elements</title>
-<literallayout>
-  (&script-spec.full-content;) *
-</literallayout>
-</figure>
-
-	
-</section> <!-- script-spec.initialization -->
-
-
-
-<section id="script-spec.input-symbol">
-	<title><sgmltag class="starttag">input-symbol</sgmltag> element</title>
-	
-<para>
-Appears in: &script-spec.script;
-</para>
-
-<para>
-Defines an input symbol for the script.  Input symbols can be thought of as parameters to the script.
-As the script executes, it uses the input symbols to create new output symbols, redefine input symbols
-(not a recommended practice) and define the body and initialization.
-</para>
-
-<para>
-This element allows the script to make input symbols required and to restrict their type.  Invalid input symbols
-(missing when required, or not of the correct type) will result in runtime exceptions.
-</para>
-
-<figure>
-	<title><sgmltag class="starttag">input-symbol</sgmltag> Attributes</title>
-<informaltable>
-<tgroup cols="5">
-<thead>
-<row>
-  <entry>Name</entry>
-  <entry>Type</entry>
-  <entry>Required ?</entry>
-  <entry>Default Value</entry>
-  <entry>Description</entry>
-</row>
-</thead>
-<tbody>
-<row>
-  <entry>key</entry>
-  <entry>string</entry>
-  <entry>yes</entry>
-  <entry/>
-  <entry>The input symbol to be checked.</entry>
-</row>
-<row>
-	<entry>class</entry>
-	<entry>string</entry>
-	<entry>no</entry>
-	<entry/>
-	<entry>If specified, this is the complete, qualified class name for the symbol.
-	The provided symbol must be assignable to this class (be a subclass, or implement
-	the specified class if the specified class is actually an interface).
-	</entry>
-</row>
-<row>
-	<entry>required</entry>
-	<entry><literal>yes | no</literal></entry>
-	<entry>no</entry>
-	<entry><literal>no</literal></entry>
-	<entry>If <literal>yes</literal>, then a non-null value must be specified for
-	the symbol.
-	</entry>
-</row>
-</tbody>
-</tgroup>
-</informaltable>
-</figure>	
-	
-</section> <!-- script-spec.input-symbol -->
-
-
-<section id="script-spec.let">
-	<title><sgmltag class="starttag">let</sgmltag> element</title>
-	
-
-
-<para>
-Appears in: &script-spec.script;
-</para>
-
-<para>
-Used to define (or redefine) a symbol.  The symbol's value is taken from
-the body of element (with leading and trailing whitespace removed).
-</para>
-
-<figure>
-	<title><sgmltag class="starttag">let</sgmltag> Attributes</title>
-<informaltable>
-<tgroup cols="5">
-<thead>
-<row>
-  <entry>Name</entry>
-  <entry>Type</entry>
-  <entry>Required ?</entry>
-  <entry>Default Value</entry>
-  <entry>Description</entry>
-</row>
-</thead>
-<tbody>
-<row>
-  <entry>key</entry>
-  <entry>string</entry>
-  <entry>yes</entry>
-  <entry/>
-  <entry>The key of the symbol to define.</entry>
-</row>
-</tbody>
-</tgroup>
-</informaltable>
-</figure>	
-	
-
-
-<figure>
-	<title><sgmltag class="starttag">let</sgmltag> Elements</title>
-<literallayout>
-  (&script-spec.full-content;) *
-</literallayout>
-</figure>
-	
-</section> <!-- script-spec.let -->
-
-
-<section id="script-spec.script">
-	<title><sgmltag class="starttag">script</sgmltag> element</title>
-	
-<para>
-<emphasis>Root element</emphasis>
-</para>
-
-<para>
-The root element of a Tapestry script specification.
-</para>
-
-<figure>
-	<title><sgmltag class="starttag">script</sgmltag> Elements</title>
-<literallayout>
-  &script-spec.include-script; *, &script-spec.input-symbol; *,
-  (&script-spec.let; | &script-spec.set;) *,
-  &script-spec.body; ?, &script-spec.initialization; ?
-</literallayout>
-</figure>
-	
-</section> <!-- script-spec.script -->
-
-
-<section id="script-spec.set">
-	<title><sgmltag class="starttag">set</sgmltag> element</title>
-	
-<para>
-Appears in: &script-spec.script;
-</para>
-
-<para>
-A different way to define a new symbol, or redefine an existing one.  The new symbol
-is defined using an OGNL expression.
-</para>
-
-	
-<figure>
-	<title><sgmltag class="starttag">set</sgmltag> Attributes</title>
-<informaltable>
-<tgroup cols="5">
-<thead>
-<row>
-  <entry>Name</entry>
-  <entry>Type</entry>
-  <entry>Required ?</entry>
-  <entry>Default Value</entry>
-  <entry>Description</entry>
-</row>
-</thead>
-<tbody>
-<row>
-  <entry>key</entry>
-  <entry>string</entry>
-  <entry>yes</entry>
-  <entry/>
-  <entry>The key of the symbol to define.</entry>
-</row>
-<row>
-	<entry>expression</entry>
-	<entry>string</entry>
-	<entry>yes</entry>
-	<entry/>
-	<entry>The OGNL expression to evaluate.</entry>
-</row>
-</tbody>
-</tgroup>
-</informaltable>
-</figure>		
-</section> <!-- script-spec.set -->
-
-	
-</appendix>
diff --git a/3.0.4/doc/src/DevelopersGuide/script.xml b/3.0.4/doc/src/DevelopersGuide/script.xml
deleted file mode 100644
index 9fbe3ae..0000000
--- a/3.0.4/doc/src/DevelopersGuide/script.xml
+++ /dev/null
@@ -1,214 +0,0 @@
-<!-- $Id$ -->
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-  
-  <chapter id="script">
-    <title>Tapestry and JavaScript</title>
-    <para>
-Building cutting edge Web applications is not entirely about the server side.
-A significant amount of work must be done on the client side to support truly dynamic
-user experiences.  Typically, this scripting is done using the JavaScript language embedded
-into major web browsers such as Internet Explorer and Netscape Navigator.
-</para>
-    <para>
-These effects range from simple effects such as image rollovers (changing 
-the icon used for a link when the cursor is over it) to more involved
-patterns such as client side validation of forms or even complex animations.
-</para>
-    <para>
-In traditional, static web page development, the HTML producer (the person creating
-the static HTML page)
-is completely responsible
-for this aspect of development, usually aided by a web page authoring tool, such as
-Dreamweaver.  Ultimately, though, the HTML producer assigns unique names or ids to
-various elements on the page, and attaches JavaScript event handlers to 
-the elements.</para>
-    <example>
-      <title>Traditional JavaScript usage</title>
-      <programlisting><![CDATA[
-
-var preload = new Array();
-preload[0] = new Image();
-preload[0].src = "/images/button.gif";
-preload[1] = new Image();
-preload[1].src = "/images/button-highlight.gif";
-
-function rollover(image, index)
-{
-  image.src = preload[index].src;
-}
-
-.
-.
-.
-  <a href="..."
-    onMouseOver="javascript:rollover(document.button, 1);"
-    onMouseOut="javascript:rollover(document.button, 0);">
-    <img name="button" src="/images/button.gif">
-  </a>
-
-]]></programlisting>
-    </example>
-    <para>
-The preloading business is all about forcing the browser to load the image <emphasis>before</emphasis>
-it is needed, so that it is already in memory when the mouseover event handler
-needs it.
-</para>
-    <para>
-From here, adding additional rollovers means extending the <varname>preload</varname> array, providing
-names for the additional <sgmltag class="starttag">img</sgmltag> elements and writing the additional
-event handlers for the <sgmltag class="starttag">a</sgmltag> elements.
-</para>
-    <para>
-Now, envision a running Tapestry application.  With everything so dynamic (especially when you account for things like the
-&Foreach; component), it's all but impossible to even know how many links and buttons will be on the page, never 
-mind what they'll
-all be named.  At first glance, it may appear that Tapestry prevents the use of this kind of scripting.
-</para>
-    <para>
-In fact, Tapestry is structured to enhance this kind of scripting.  This is faciliated by the &Body; component, which replaces
-the <sgmltag class="starttag">body</sgmltag> element of the page.
-The <link linkend="script.body">next section</link> described the services
-the &Body; component povides to facilitate complex client-side scripting.
-</para>
-    <section id="script.body">
-      <title>The Body component</title>
-      <para>
-The &Body; component provides a number of services to the components it wraps.  It handles preloading of
-images.  It provides the ability to add arbitrary JavaScript to the page, to include an external static
-JavaScript document, or to add JavaScript
-to the
-<sgmltag class="starttag">body</sgmltag> element's onload event handler.  Finally, it provides an easy way 
-to generate unique identifiers needed for things like image and function names.
-</para>
-      <para>
-When the &Body; component renders, it registers itself as an attribute of the &IRequestCycle;.  This
-allows components wrapped by the &Body; component, directly or indirectly, to locate it and invoke methods
-on it.  These methods are used to define preloaded images, and add JavaScript code to the response HTML.
-</para>
-      <figure>
-        <title>Body Component Rendering Sequence</title>
-        <mediaobject>
-          <imageobject>
-            <imagedata fileref="images/Body-sequence.gif" format="GIF"/>
-          </imageobject>
-        </mediaobject>
-      </figure>
-      <para>
-When rendering is complete, the &Body; component will have produced four distinct portions of the
-HTML response:
-</para>
-      <informalexample>
-        <programlisting>
-&lt;script language="JavaScript" src="..."&gt;&lt;/script&gt; <co id="script.body.include"/>
-&lt;script language="JavaScript"&gt;&lt;!-- <co id="script.body.script"/>
-
-...
-
-function tapestry_onLoad()  <co id="script.body.onload"/>
-{
-}
-
-// --&gt; &lt;/script&gt;
-&lt;body onload="javascript:tapestry_onLoad();"&gt; <co id="script.body.tag"/>
-
-... <co id="script.body.wrapped"/>
-
-&lt;/body&gt;
-
-</programlisting>
-      </informalexample>
-      <para>
-        <calloutlist>
-          <callout arearefs="script.body.include">
-            <para>Any number of included static scripts may be added to the page.</para>
-          </callout>
-          <callout arearefs="script.body.script">
-            <para>
-  This script block is only emitted when necessary; that is, because some component
-  needed to generate scripting or initialization (or preloaded images).  The block
-  is properly "commented" so that older browsers, those that fail to support scripting,
-  will not be confused by the JavaScript code.
-  </para>
-          </callout>
-          <callout arearefs="script.body.onload">
-            <para>
-  The onload event handler function is only generated if some component requests some
-  onload initialization.
-  </para>
-          </callout>
-          <callout arearefs="script.body.tag">
-            <para>
-  The <sgmltag class="starttag">body</sgmltag> tag only specfies a <varname>onload</varname>
-  event handler function if one is needed.
-  </para>
-          </callout>
-          <callout arearefs="script.body.wrapped">
-            <para>
-  The content of the <sgmltag class="starttag">body</sgmltag> element is defined by the
-  Tapestry components it wraps.  Importantly, the rollovers, JavaScript, event handlers and
-  the content are all generated in parallel (the &Body; component uses buffering so that
-  the JavaScript portion is written out first).
-  </para>
-          </callout>
-        </calloutlist>
-      </para>
-    </section>
- 
- <section id="script.spec">
- 	<title>Script Specifications and Script Components</title>
- 	
-<para>
-The &Body; component only lays the foundation for client-side JavaScript support in Tapestry.
-Tapestry includes its own, XML-based language for
-create dynamic JavaScript.
-</para>
-
-<para>
-A Tapestry Script Specification takes as input a number of 
-<emphasis>symbols</emphasis>, each of which is a named object.  These
-input symbols are combined to form additional symbols. Additional XML tags
-allow a script to place JavaScript into the main script body, or into the
-initialization.
-</para> 	
-
-<para>
-The most common use for script specifications is to add client-side behavior to
-form elements.  The input symbol is a form component,
-from this, the name of the element and containing form are determined.  Next,
-the name of one or more event handler functions are defined.
-</para>
-
-<para>
-In the body, the functions are actually created.  In the initialization,
-the event handlers are wired to the form and form elements.
-</para>
-
-<para>
-In some cases, a script specification may produce usable output symbols (commonly, the
-names of a JavaScript function that should be tied to some component's event
-handler).
-</para>
-
-<note>
-<para>A detailed example is coming.
-</para>
-</note>
- 
- 
- </section> <!-- script.spec -->
- 
-  </chapter>
\ No newline at end of file
diff --git a/3.0.4/doc/src/DevelopersGuide/spec.xml b/3.0.4/doc/src/DevelopersGuide/spec.xml
deleted file mode 100644
index 829521b..0000000
--- a/3.0.4/doc/src/DevelopersGuide/spec.xml
+++ /dev/null
@@ -1,1667 +0,0 @@
-<!-- $Id$ -->
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<appendix id="spec">
-	<title>Tapestry Specification DTDs</title>
-	
-
-<para>
-This appendix describes the four types of specifications
-used in Tapestry.
-</para>
- 
-<table>
-	<title>Tapestry Specifications</title>
-	<tgroup cols="5">
-<thead>
-<row>
-	<entry>Type</entry>
-	<entry>File Extension</entry>
-	<entry>Root Element</entry>
-	<entry>Public ID</entry>
-	<entry>System ID</entry>
-</row>
-</thead>
-<tbody>
-<row>
-	<entry>Application</entry>
-	<entry>application</entry>
-	<entry>&spec.application;</entry>
-	<entry><literal>-//Howard Lewis Ship//Tapestry Specification 1.3//EN</literal></entry>
-	<entry><literal>http://tapestry.sf.net/dtd/Tapestry_1_3.dtd</literal></entry>
-</row>
-
-<row>
-	<entry>Page</entry>
-	<entry>page</entry>
-	<entry>&spec.page-specification;</entry>
-	<entry><literal>-//Howard Lewis Ship//Tapestry Specification 1.3//EN</literal></entry>
-	<entry><literal>http://tapestry.sf.net/dtd/Tapestry_1_3.dtd</literal></entry>
-</row>
-
-<row>
-	<entry>Component</entry>
-	<entry>jwc</entry>
-	<entry>&spec.component-specification;</entry>
-	<entry><literal>-//Howard Lewis Ship//Tapestry Specification 1.3//EN</literal></entry>
-	<entry><literal>http://tapestry.sf.net/dtd/Tapestry_1_3.dtd</literal></entry>
-</row>
-
-<row>
-	<entry>Library</entry>
-	<entry>library</entry>
-	<entry>&spec.library-specification;</entry>
-	<entry><literal>-//Howard Lewis Ship//Tapestry Specification 1.3//EN</literal></entry>
-	<entry><literal>http://tapestry.sf.net/dtd/Tapestry_1_3.dtd</literal></entry>
-</row>
-
-<row>
-	<entry>Script</entry>
-	<entry>script</entry>
-	<entry>&script-spec.script;</entry>
-	<entry><literal>-//Howard Lewis Ship//Tapestry Script 1.2//EN</literal></entry>
-	<entry><literal>http://tapestry.sf.net/dtd/Tapestry_1_2.dtd</literal></entry>
-</row>
-
-</tbody>
-</tgroup>
-</table>
-
-<para>
-The four general Tapestry specifications (&spec.application;, &spec.component-specification;
-&spec.page-specification; and &spec.library-specification;) all share the same DTD, but use different
-root elements.
-</para>
-
-<section id="spec.application">
-	<title><sgmltag class="starttag">application</sgmltag> element</title>
-	
-
-<para>
-<emphasis>root element</emphasis>
-</para>
-
-<para>
-The application specification defines the pages and components specific to a single Tapestry application.
-It also defines any libraries that are used within the application.
-</para>
-
-<figure>
-	<title><sgmltag class="starttag">application</sgmltag> Attributes</title>
-<informaltable>
-<tgroup cols="5">
-<thead>
-<row>
-  <entry>Name</entry>
-  <entry>Type</entry>
-  <entry>Required ?</entry>
-  <entry>Default Value</entry>
-  <entry>Description</entry>
-</row>
-</thead>
-<tbody>
-<row>
-	<entry>name</entry>
-	<entry>string</entry>
-	<entry>yes</entry>
-	<entry/>
-	<entry>User presentable name of application.</entry>
-</row>
-<row>
-	<entry>engine-class</entry>
-	<entry>string</entry>
-	<entry>yes</entry>
-	<entry/>
-	<entry>Name of an implementation of IEngine to instantiate.</entry>
-</row>
-</tbody>
-</tgroup>
-
-</informaltable>
-</figure>
-
-<figure>
-	<title><sgmltag class="starttag">application</sgmltag> Elements</title>
-<literallayout>
-  &spec.description; *, &spec.property; *,
-  (&spec.page; | &spec.component-alias; | &spec.service; | &spec.library; | &spec.extension;) *
-</literallayout>
-</figure>
-
-</section>  <!-- spec.application -->
-
-<section id="spec.bean">
-	<title><sgmltag class="starttag">bean</sgmltag> element</title>
-	
-	
-<para>
-Appears in:
-&spec.component-specification; and &spec.page-specification;
-</para>	
-	
-<para>
-A <sgmltag class="starttag">bean</sgmltag> is used to add behaviors to a page or component via aggregation.
-Each <sgmltag class="starttag">bean</sgmltag> defines a named JavaBean that is instantiated on demand.
-Beans are accessed through the OGNL expression <literal>beans.<replaceable>name</replaceable></literal>.
-</para>
-
-<para>
-Once a bean is instantiated and initialized, it will be retained by the page or component
-for some period of time, specified by the bean's lifecycle.
-</para>
-
-<variablelist>
-	<title>bean lifecycle</title>
-	<varlistentry>
-		<term>none</term>
-		<listitem>
-			<para>
-			The bean is not retained, a new bean will be created on each access.
-			</para>
-		</listitem>
-	</varlistentry>
-
-	<varlistentry>
-		<term>page</term>
-		<listitem>
-			<para>
-			The bean is retained for the lifecycle of the page itself.
-			</para>
-		</listitem>
-	</varlistentry>
-	
-	<varlistentry>
-		<term>render</term>
-		<listitem> 
-			<para>
-			The bean is retained until the current render operation completes.
-			This will discard the bean when a page or form finishes rewinding.
-			</para>
-		</listitem>
-	</varlistentry>
-		
-	<varlistentry>
-		<term>request</term>
-		<listitem>
-			<para>
-			The bean is retained until the end of the current request.
-			</para>
-		</listitem>
-	</varlistentry>
-	
-
-</variablelist>
-
-<para>
-Caution should be taken when using lifeycle <literal>page</literal>.  A bean is associated
-with a particular instance of a page within a particular JVM.  Consecutive requests
-may be processed using different instances of the page, possibly in different JVMs (if the application
-is operating in a clustered environment).  No state particular to a single client session should
-be stored in a page.
-</para>
-
-<para>
-Beans must be public classes with a default (no arguments) constructor. Properties of the bean
-may be configured using the &spec.set-property; and &spec.set-string-property; elements.
-</para>
-
-<figure>
-	<title><sgmltag class="starttag">bean</sgmltag> Attributes</title>
-<informaltable>
-<tgroup cols="5">
-<thead>
-<row>
-  <entry>Name</entry>
-  <entry>Type</entry>
-  <entry>Required ?</entry>
-  <entry>Default Value</entry>
-  <entry>Description</entry>
-</row>
-</thead>
-<tbody>
-<row>
-	<entry>name</entry>
-	<entry>string</entry>
-	<entry>yes</entry>
-	<entry/>
-	<entry>The name of the bean, which must be a valid Java identifier.</entry>
-</row>
-<row>
-	<entry>class</entry>
-	<entry>string</entry>
-	<entry>yes</entry>
-	<entry/>
-	<entry>The name of the class to instantiate.</entry>
-</row>
-<row>
-	<entry>lifecycle</entry>
-	<entry><literal>none|page|render|request</literal></entry>
-	<entry>no</entry>
-	<entry><literal>request</literal></entry>
-	<entry>As described above; duration that bean is retained.</entry>
-</row>
-</tbody>
-</tgroup>
-
-</informaltable>
-</figure>
-
-
-<figure>
-	<title><sgmltag class="starttag">bean</sgmltag> Elements</title>
-<literallayout>
-  &spec.description; *, &spec.property; *,
-  (&spec.set-property; | &spec.set-string-property;) *
-</literallayout>
-</figure>
-
-
-</section> <!-- spec.bean -->	
- 
-<section id="spec.binding">
-	<title><sgmltag class="starttag">binding</sgmltag> element</title>
-
-<para>
-Appears in: &spec.component;
-</para>
-
-<para>
-Binds a parameter of an embedded component to an OGNL expression rooted
-in its container.
-</para>
-
-<para>
-In an instantiated component, bindings can be accessed with
-the OGNL expression <literal>bindings.<replaceable>name</replaceable></literal>.
-</para>
-
-
-<figure>
-	<title><sgmltag class="starttag">binding</sgmltag> Attributes</title>
-<informaltable>
-<tgroup cols="5">
-<thead>
-<row>
-  <entry>Name</entry>
-  <entry>Type</entry>
-  <entry>Required ?</entry>
-  <entry>Default Value</entry>
-  <entry>Description</entry>
-</row>
-</thead>
-<tbody>
-<row>
-	<entry>name</entry>
-	<entry>string</entry>
-	<entry>yes</entry>
-	<entry/>
-	<entry>The name of the parameter to bind.</entry>
-</row>
-<row>
-	<entry>expression</entry>
-	<entry>string</entry>
-	<entry>yes</entry>
-	<entry/>
-	<entry>The OGNL expression, relative to the container, to be bound to the parameter.</entry>
-</row>
-</tbody>
-</tgroup>
-</informaltable>
-</figure>
-
-</section> <!-- spec.binding -->
-
-<section id="spec.configure">
-	<title><sgmltag class="starttag">configure</sgmltag> element</title>
-
-<para>
-Appears in: &spec.extension;
-</para>
-
-<para>
-Allows a JavaBeans property of the extension to be set from a statically defined value.  The
-<sgmltag class="starttag">configure</sgmltag> element
-wraps around the static value.  The value is trimmed of leading and trailing
-whitespace and optionally converted to a specified type before being assigned
-to the property.
-</para>
-
-<figure>
-	<title><sgmltag class="starttag">configure</sgmltag> Attributes</title>
-<informaltable>
-<tgroup cols="5">
-<thead>
-<row>
-  <entry>Name</entry>
-  <entry>Type</entry>
-  <entry>Required ?</entry>
-  <entry>Default Value</entry>
-  <entry>Description</entry>
-</row>
-</thead>
-<tbody>
-<row>
-	<entry>property-name</entry>
-	<entry>string</entry>
-	<entry>yes</entry>
-	<entry/>
-	<entry>The name of the extension property to configure.</entry>
-</row>
-<row>
-	<entry>type</entry>
-	<entry><literal>boolean|int|long|double|String</literal></entry>
-	<entry>no</entry>
-	<entry><literal>String</literal></entry>
-	<entry>The conversion to apply to the value.</entry>
-</row>
-</tbody>
-</tgroup>
-</informaltable>
-</figure>
-
-
-
-</section> <!-- spec.configure -->
-
-<section id="spec.component">
-	<title><sgmltag class="starttag">component</sgmltag> element</title>
-	
-<para>
-Appears in: &spec.component-specification; and &spec.page-specification;
-</para>
-
-<para>
-Defines an embedded component within a container (a page or another component).
-</para>
-
-<para>
-In an instantiated component, embedded components can be accessed with
-the OGNL expression <literal>components.<replaceable>id</replaceable></literal>.
-</para>
-
-
-<figure>
-	<title><sgmltag class="starttag">component</sgmltag> Attributes</title>
-<informaltable>
-<tgroup cols="5">
-<thead>
-<row>
-  <entry>Name</entry>
-  <entry>Type</entry>
-  <entry>Required ?</entry>
-  <entry>Default Value</entry>
-  <entry>Description</entry>
-</row>
-</thead>
-<tbody>
-<row>
-	<entry>id</entry>
-	<entry>string</entry>
-	<entry>yes</entry>
-	<entry/>
-	<entry>Identifier for the component here and in the component's template.  Must be
-	a valid Java identifier.</entry>
-</row>
-<row>
-	<entry>type</entry>
-	<entry>string</entry>
-	<entry>no</entry>
-	<entry/>
-	<entry>A component type to instantiate.</entry>
-</row>
-<row>
-	<entry>copy-of</entry>
-	<entry>string</entry>
-	<entry>no</entry>
-	<entry/>
-	<entry>The name of a previously defined component.  The type and bindings of that
-	component will be copied to this component.
-	</entry>
-</row>
-</tbody>
-</tgroup>
-</informaltable>
-</figure>
-
-<para>
-Either <literal>type</literal> or <literal>copy-of</literal> must be specified.
-</para>
-
-<para>
-A component type is either a simple name or a qualified name.  A simple name is the name of
-an component either provided by the framework, or
-provided by the application (if the page or component is defined in an application),
-or provided by the library (if the page or component is defined in a library).
-</para>
-
-<para>
-A qualified name is a library id, a colon, and a simple name of a component provided
-by the named library (for example, <literal>contrib:Palette</literal>).  
-Library ids are defined by a &spec.library; element in the
-containing library or application.
-</para>
-	
-<figure>
-	<title><sgmltag class="starttag">component</sgmltag> Elements</title>
-<literallayout>
-  &spec.property; *,
-  (&spec.binding; | &spec.field-binding; | &spec.inherited-binding; | &spec.static-binding; | &spec.string-binding;) *
-</literallayout>
-</figure>
-
-	
-</section> <!-- spec.component -->
-
-<section id="spec.component-alias">
-	<title><sgmltag class="starttag">component-alias</sgmltag> element</title>
-	
-<para>
-Appears in: &spec.application; and 	&spec.library-specification;
-</para>
-
-<para>
-Defines a component type that may latter be used in a &spec.component; element
-(for pages and components also defined by this application or library).
-</para>
-
-<figure>
-	<title><sgmltag class="starttag">component-alias</sgmltag> Attributes</title>
-<informaltable>
-<tgroup cols="5">
-<thead>
-<row>
-  <entry>Name</entry>
-  <entry>Type</entry>
-  <entry>Required ?</entry>
-  <entry>Default Value</entry>
-  <entry>Description</entry>
-</row>
-</thead>
-<tbody>
-<row>
-	<entry>type</entry>
-	<entry>string</entry>
-	<entry>yes</entry>
-	<entry/>
-	<entry>A name to be used as a component type.</entry>
-</row>
-<row>
-	<entry>specification-path</entry>
-	<entry>string</entry>
-	<entry>yes</entry>
-	<entry/>
-	<entry>The complete resource path to the component's specification (including leading
-	slash and file extension).</entry>
-</row>
-</tbody>
-</tgroup>
-</informaltable>
-</figure>
-
-</section> <!-- spec.component-alias -->
-
-
-<section id="spec.component-specification">
-	<title><sgmltag class="starttag">component-specification</sgmltag> element</title>
-
-<para>
-<emphasis>root element</emphasis>
-</para>
-
-<para>
-Defines a new component, in terms of its API (&spec.parameter;s), embedded components, beans and
-assets.
-</para>
-
-<para>
-The structure of a <sgmltag class="starttag">component-specification</sgmltag>
-is very similar to a &spec.page-specification; except components have additional attributes
-and elements related to parameters.
-</para>
-
-
-<figure>
-	<title><sgmltag class="starttag">component-specification</sgmltag> Attributes</title>
-<informaltable>
-<tgroup cols="5">
-<thead>
-<row>
-  <entry>Name</entry>
-  <entry>Type</entry>
-  <entry>Required ?</entry>
-  <entry>Default Value</entry>
-  <entry>Description</entry>
-</row>
-</thead>
-<tbody>
-<row>
-	<entry>class</entry>
-	<entry>string</entry>
-	<entry>yes</entry>
-	<entry/>
-	<entry>The Java class to instantiate, which must implement the
-	interface &IComponent;.  Typically, this is
-	&BaseComponent; or a subclass of it.</entry>
-</row>
-<row>
-	<entry>allow-body</entry>
-	<entry><literal>yes|no</literal></entry>
-	<entry>no</entry>
-	<entry><literal>yes</literal></entry>
-	<entry>
-	<para>If <literal>yes</literal>, then any body for this component, from its
-	containing page or component's template, is retained and may be 
-	produced using a &RenderBody; component.
-	</para>
-	<para>If <literal>no</literal>, then any body for this component is
-	discarded.
-	</para>	
-	</entry>
-</row>
-<row>
-	<entry>allow-informal-parameters</entry>
-	<entry><literal>yes|no </literal></entry>
-	<entry>no</entry>
-	<entry><literal>yes</literal></entry>
-	<entry>
-	<para>If <literal>yes</literal>, then any informal parameters
-	(bindings that don't match a formal parameter) specified here, or in
-	the component's tag within its container's template, are retained.
-	Typically, they are converted into additional HTML attributes.
-	</para>
-	<para>If <literal>no</literal>, then informal parameters
-	are not allowed in the specification, and discarded if in the template.
-	</para>
-	</entry>
-</row>
-</tbody>
-</tgroup>
-</informaltable>
-</figure>
-
-<figure>
-	<title><sgmltag class="starttag">component-specification</sgmltag> Elements</title>
-<literallayout>
-  &spec.description; *, &spec.parameter; *, &spec.reserved-parameter; *, &spec.property; *,
-  (&spec.bean; | &spec.component; | &spec.external-asset; | &spec.context-asset; | &spec.private-asset;)*
-</literallayout>
-</figure>
-
-
-</section> <!-- spec.component-specification -->
-
-<section id="spec.context-asset">
-	<title><sgmltag class="starttag">context-asset</sgmltag> element</title>
-
-<para>
-Specifies an asset located relative to the web application context root folder.
-Context assets may be localized.
-</para>
-
-<para>
-Assets for an instantiated component (or page) 
-may be accessed using the OGNL expression <literal>assets.<replaceable>name</replaceable></literal>.
-</para>
-
-<figure>
-	<title><sgmltag class="starttag">context-asset</sgmltag> Attributes</title>
-<informaltable>
-<tgroup cols="5">
-<thead>
-<row>
-  <entry>Name</entry>
-  <entry>Type</entry>
-  <entry>Required ?</entry>
-  <entry>Default Value</entry>
-  <entry>Description</entry>
-</row>
-</thead>
-<tbody>
-<row>
-	<entry>name</entry>
-	<entry>string</entry>
-	<entry>yes</entry>
-	<entry/>
-	<entry>The name of the asset, which must be a valid Java identifier.</entry>
-</row>
-<row>
-	<entry>path</entry>
-	<entry>string</entry>
-	<entry>yes</entry>
-	<entry/>
-	<entry>The path to the asset, assuming a root directory matching the servlet context
-	root directory.  The path should begin with leading forward slash.
-	</entry>
-</row>
-</tbody>
-</tgroup>
-</informaltable>
-</figure>
-
-</section> <!-- spec.context-asset -->
-
-<section id="spec.description">
-	<title><sgmltag class="starttag">description</sgmltag> element</title>
-	
-<para>
-Appears in: <emphasis>many</emphasis>
-</para>
-
-<para>
-A description may be attached to a many different elements.  Descriptions are used
-by an intelligent IDE to provide help.  The Tapestry Inspector may also display a description.
-</para>
-
-<note>
-<para>
-The DTD supports multiple <sgmltag class="starttag">description</sgmltag> elements, each
-localized to a different language.  In practice, a single description, in English, is typically
-used.  This approach to providing a localized description is likely to change in the future, and
-it is probably safest to expect just a single <sgmltag class="starttag">description</sgmltag> tag
-to be allowed in the next revision of the DTD.
-</para>
-</note>
-	
-<para>
-The descriptive text appears inside the <sgmltag class="starttag">description</sgmltag> tags.  Leading
-and trailing whitespace is removed and interior whitespace may be altered or removed.  Descriptions
-should be short; external documentation can provide greater details.
-</para>
-
-<figure>
-	<title><sgmltag class="starttag">description</sgmltag> element</title>
-<informaltable>
-<tgroup cols="5">
-<thead>
-<row>
-  <entry>Name</entry>
-  <entry>Type</entry>
-  <entry>Required ?</entry>
-  <entry>Default Value</entry>
-  <entry>Description</entry>
-</row>
-
-</thead>
-<tbody>
-<row>
-	<entry>xml:lang</entry>
-	<entry>string</entry>
-	<entry>no</entry>
-	<entry/>
-	<entry>The language the message is localized to as an ISO language string.
-	</entry>
-</row>
-</tbody>
-</tgroup>
-</informaltable>
-</figure>
-	
-</section> <!-- spec.description -->
-
-<section id="spec.extension">
-	<title><sgmltag class="starttag">extension</sgmltag> element</title>
-
-<para>
-Appears in: &spec.application; and &spec.library-specification;
-</para>
-
-<para>
-Defines an extension, a JavaBean that is instantiated as needed to provide
-a global service to the application.
-</para>
-
-<figure>
-	<title><sgmltag class="starttag">extension</sgmltag> Attributes</title>
-<informaltable>
-<tgroup cols="5">
-<thead>
-<row>
-  <entry>Name</entry>
-  <entry>Type</entry>
-  <entry>Required ?</entry>
-  <entry>Default Value</entry>
-  <entry>Description</entry>
-</row>
-
-</thead>
-<tbody>
-<row>
-	<entry>name</entry>
-	<entry>string</entry>
-	<entry>yes</entry>
-	<entry/>
-	<entry>A name for the extension, which can (and should) look like
-	a qualified class name, but may also include the dash character.
-	</entry>
-</row>
-<row>
-	<entry>class</entry>
-	<entry>string</entry>
-	<entry>yes</entry>
-	<entry/>
-	<entry>The Java class to instantiate.  The class must have a zero-arguments
-	constructor.</entry>
-</row>
-<row>
-	<entry>immediate</entry>
-	<entry><literal>yes|no</literal></entry>
-	<entry>no</entry>
-	<entry><literal>no</literal></entry>
-	<entry>If <literal>yes</literal>, the extension is instantiated when the specification is read.  If 
-	<literal>no</literal>, then the extension is not created until first needed.
-	</entry>
-</row>
-</tbody>
-</tgroup>
-</informaltable>
-</figure>
-
-
-<figure>
-	<title><sgmltag class="starttag">component-specification</sgmltag> Elements</title>
-<literallayout>
-  &spec.property; *, &spec.configure; *
-</literallayout>
-</figure>
-
-</section> <!-- spec.extension -->
-
-<section id="spec.external-asset">
-	<title><sgmltag class="starttag">external-asset</sgmltag> element</title>
-
-<para>
-Appears in: &spec.component-specification; and &spec.page-specification;
-</para>
-
-<para>
-Defines an asset at an arbitrary URL.  The URL may begin with a slash to indicate an asset on the same
-web server as the application, or may be a complete URL to an arbitrary location on the Internet.
-</para>
-
-<para>
-External assets may be accessed at runtime with the OGNL expression
-<literal>assets.<replaceable>name</replaceable></literal>.
-</para>
-
-<figure>
-	<title><sgmltag class="starttag">external-asset</sgmltag> Attributes</title>
-<informaltable>
-<tgroup cols="5">
-<thead>
-<row>
-  <entry>Name</entry>
-  <entry>Type</entry>
-  <entry>Required ?</entry>
-  <entry>Default Value</entry>
-  <entry>Description</entry>
-</row>
-
-</thead>
-<tbody>
-<row>
-	<entry>name</entry>
-	<entry>string</entry>
-	<entry>yes</entry>
-	<entry/>
-	<entry>A name for the asset. Asset names must be valid Java identifiers.
-	</entry>
-</row>
-<row>
-	<entry>URL</entry>
-	<entry>string</entry>
-	<entry>yes</entry>
-	<entry/>
-	<entry>The URL used to access the asset.</entry>
-</row>
-per</tbody>
-</tgroup>
-</informaltable>
-</figure>
-
-
-</section> <!-- spec.external-asset -->
-
-<section id="spec.field-binding">
-	<title><sgmltag class="starttag">field-binding</sgmltag> element</title>
-
-<para>
-Appears in: &spec.component;
-</para>
-
-<para>
-Binds a parameter of an embedded component to a public static final field.
-</para>
-
-<note>
-<para>
-Although the same result can be accomplished using a &spec.binding;
-element and the OGNL expression
-<literal>@<replaceable>class-name</replaceable>@<replaceable>field-name</replaceable></literal>,
-using a <sgmltag class="starttag">field-binding</sgmltag>
-is more efficient, because Tapestry knows that the value is
-invariant.
-</para>
-</note>
-
-<para>
-The class name must be the qualified class name.  If the package
-is ommitted, <literal>java.lang</literal> is assumed (this makes
-it easier to reference common fields
-such as <literal>Boolean.TRUE</literal>).
-</para>
-
-<para>
-In an instantiated component, bindings can be accessed with
-the OGNL expression <literal>bindings.<replaceable>name</replaceable></literal>.
-</para>
-
-
-<figure>
-	<title><sgmltag class="starttag">field-binding</sgmltag> Attributes</title>
-<informaltable>
-<tgroup cols="5">
-<thead>
-<row>
-  <entry>Name</entry>
-  <entry>Type</entry>
-  <entry>Required ?</entry>
-  <entry>Default Value</entry>
-  <entry>Description</entry>
-</row>
-</thead>
-<tbody>
-<row>
-	<entry>name</entry>
-	<entry>string</entry>
-	<entry>yes</entry>
-	<entry/>
-	<entry>The name of the parameter to bind.</entry>
-</row>
-<row>
-	<entry>field-name</entry>
-	<entry>string</entry>
-	<entry>yes</entry>
-	<entry/>
-	<entry>The name of a public static final field, in the form
-	<literal><replaceable>class-name.field-name</replaceable></literal>.
-	</entry>
-</row>
-</tbody>
-</tgroup>
-</informaltable>
-</figure>
-
-
-</section> <!-- spec.field-binding -->
-
-<section id="spec.inherited-binding">
-	<title><sgmltag class="starttag">inherited-binding</sgmltag> element</title>
-
-<para>
-Appears in: &spec.component;
-</para>
-
-<para>
-Binds a parameter of an embedded component to a parameter
-of its container.
-</para>
-
-
-<para>
-In an instantiated component, bindings can be accessed with
-the OGNL expression <literal>bindings.<replaceable>name</replaceable></literal>.
-</para>
-
-
-<figure>
-	<title><sgmltag class="starttag">inherited-binding</sgmltag> Attributes</title>
-<informaltable>
-<tgroup cols="5">
-<thead>
-<row>
-  <entry>Name</entry>
-  <entry>Type</entry>
-  <entry>Required ?</entry>
-  <entry>Default Value</entry>
-  <entry>Description</entry>
-</row>
-</thead>
-<tbody>
-<row>
-	<entry>name</entry>
-	<entry>string</entry>
-	<entry>yes</entry>
-	<entry/>
-	<entry>The name of the parameter to bind.</entry>
-</row>
-<row>
-	<entry>parameter-name</entry>
-	<entry>string</entry>
-	<entry>yes</entry>
-	<entry/>
-	<entry>The name of a parameter of the containing component.
-	</entry>
-</row>
-</tbody>
-</tgroup>
-</informaltable>
-</figure>
-
-
-
-
-</section> <!-- spec.inherited-binding -->
-
-<section id="spec.library">
-	<title><sgmltag class="starttag">library</sgmltag> element</title>
-	
-<para>
-Appears in: &spec.application; and &spec.library-specification;
-</para>
-
-<para>
-Establishes that the containing application or library uses components defined in
-another library, and sets the prefix used to reference those components.
-</para>
-
-<figure>
-	<title><sgmltag class="starttag">library</sgmltag> Attributes</title>
-<informaltable>
-<tgroup cols="5">
-<thead>
-<row>
-  <entry>Name</entry>
-  <entry>Type</entry>
-  <entry>Required ?</entry>
-  <entry>Default Value</entry>
-  <entry>Description</entry>
-</row>
-</thead>
-<tbody>
-<row>
-	<entry>id</entry>
-	<entry>string</entry>
-	<entry>yes</entry>
-	<entry/>
-	<entry>The id associated with the library.  Components within the library
-	can be referenced with the component type
-	<literal><replaceable>id</replaceable>:<replaceable>name</replaceable></literal>.
-	</entry>
-</row>
-<row>
-	<entry>specification-path</entry>
-	<entry>string</entry>
-	<entry>yes</entry>
-	<entry/>
-	<entry>The complete resource path for the library specification.
-	</entry>
-</row>
-</tbody>
-</tgroup>
-</informaltable>
-</figure>
-
-
-
-
-
-</section> <!-- spec.library -->
-
-<section id="spec.library-specification">
-	<title><sgmltag class="starttag">library-specification</sgmltag> element</title>
-	
-<para>
-<emphasis>root element</emphasis>
-</para>
-
-<para>
-Defines the pages, components, services and libraries used by a library.  Very similar
-to &spec.application;, but without attributes related application name or engine class.
-</para>
-
-<para>
-The 	<sgmltag class="starttag">library-specification</sgmltag>
-element has no attributes.
-</para>
-	
-
-<figure>
-	<title><sgmltag class="starttag">library-specification</sgmltag> Elements</title>
-<literallayout>
-  &spec.description; *, &spec.property; *,
-  (&spec.page; | &spec.component-alias; | &spec.service; | &spec.library; | &spec.extension;) *
-</literallayout>
-</figure>
-
-
-</section> <!-- spec.library-specification -->
-
-<section id="spec.page">
-	<title><sgmltag class="starttag">page</sgmltag> element</title>
-
-<para>
-Appears in: &spec.application; and &spec.library-specification;
-</para>
-
-<para>
-Defines a page within an application (or contributed by a library).
-Relates a logical name for the page to the path to the page's specification file.
-</para>
-
-<figure>
-	<title><sgmltag class="starttag">page</sgmltag> Attributes</title>
-<informaltable>
-<tgroup cols="5">
-<thead>
-<row>
-  <entry>Name</entry>
-  <entry>Type</entry>
-  <entry>Required ?</entry>
-  <entry>Default Value</entry>
-  <entry>Description</entry>
-</row>
-</thead>
-<tbody>
-<row>
-	<entry>name</entry>
-	<entry>string</entry>
-	<entry>yes</entry>
-	<entry/>
-	<entry>The name for the page, which must start with a letter,
-	and may contain letters, numbers, underscores and the dash
-	character.
-	</entry>
-</row>
-<row>
-	<entry>specification-path</entry>
-	<entry>string</entry>
-	<entry>yes</entry>
-	<entry/>
-	<entry>
-	The complete resource path to the page's specification.
-	</entry>
-</row>
-</tbody>
-</tgroup>
-</informaltable>
-</figure>
-
-</section> <!-- spec.page -->
-
-<section id="spec.page-specification">
-	<title><sgmltag class="starttag">page-specification</sgmltag> element</title>
-
-<para>
-<emphasis>root element</emphasis>
-</para>
-
-<para>
-Defines a page within an application (or a library).  The 
-<sgmltag class="starttag">page-specification</sgmltag>
-is a subset of &spec.component-specification;
-with attributes and entities related to parameters removed.
-</para>
-
-
-<figure>
-	<title><sgmltag class="starttag">page-specification</sgmltag> Attributes</title>
-<informaltable>
-<tgroup cols="5">
-<thead>
-<row>
-  <entry>Name</entry>
-  <entry>Type</entry>
-  <entry>Required ?</entry>
-  <entry>Default Value</entry>
-  <entry>Description</entry>
-</row>
-</thead>
-<tbody>
-<row>
-	<entry>class</entry>
-	<entry>string</entry>
-	<entry>yes</entry>
-	<entry/>
-	<entry>The Java class to instantiate, which must implement the
-	interface &IPage;.  Typically, this is
-	&BasePage; or a subclass of it.</entry>
-</row>
-</tbody>
-</tgroup>
-</informaltable>
-</figure>
-
-<figure>
-	<title><sgmltag class="starttag">page-specification</sgmltag> Elements</title>
-<literallayout>
-  &spec.description; *, &spec.property; *,
-  (&spec.bean; | &spec.component; | &spec.external-asset; | &spec.context-asset; | &spec.private-asset;)*
-</literallayout>
-</figure>
-
-
-</section> <!-- spec.page-specification -->
-
-<section id="spec.parameter">
-	<title><sgmltag class="starttag">parameter</sgmltag> element</title>
-
-<para>
-Appears in: &spec.component-specification;
-</para>
-
-<para>
-Defines a formal parameter of a component.
-</para>
-
-<figure>
-	<title><sgmltag class="starttag">parameter</sgmltag> Attributes</title>
-<informaltable>
-<tgroup cols="5">
-<thead>
-<row>
-  <entry>Name</entry>
-  <entry>Type</entry>
-  <entry>Required ?</entry>
-  <entry>Default Value</entry>
-  <entry>Description</entry>
-</row>
-</thead>
-<tbody>
-<row>
-	<entry>name</entry>
-	<entry>string</entry>
-	<entry>yes</entry>
-	<entry/>
-	<entry>The name of the parameter, which must be 
-	a valid Java identifier.</entry>
-</row>
-<row>
-  <entry>java-type</entry>
-  <entry>scalar name, or class name</entry>
-  <entry>no</entry>
-  <entry/>
-  <entry>Required for connected parameters.  Specifies
-   the type of the JavaBean property that a connected
-   parameter writes and reads.  The property must
-    match this exact value, which can be a fully specified class name,
-    or the name of a scalar Java type.
-   </entry>
-  </row>
-  
-<row>
-  <entry>required</entry>
-  <entry><literal>yes|no</literal></entry>
-  <entry>no</entry>
-  <entry><literal>no</literal></entry>
-  <entry>If <literal>yes</literal>, then the parameter must be
-  bound (though it is possible that the binding's value
-  will still be null).
- </entry>
-</row>
-
-<row>
-  <entry>property-name</entry>
-  <entry>string</entry>
-  <entry>no</entry>
-  <entry/>
-  <entry>For connected parameters only; allows the name of the property
-  to differ from the name of the parameter.  If not specified,
-  the property name will be the same as the parameter name.
-  </entry>
-</row>
-
-<row>
-  <entry>direction</entry>
-  <entry><literal>in|form|custom</literal></entry>
-  <entry>no</entry>
-  <entry><literal>custom</literal></entry>
-  <entry>
-  <para>
-  Identifies the semantics of how the parameter is used by the
-  component.  <literal>custom</literal>, the default, means the
-  component explicitly controls reading and writing values through
-  the binding.
-  </para>
-  
-  <para>
-  <literal>in</literal> means the property is set from the parameter
-  before the component renders, and is reset back to default value
-  after the component renders.
-  </para>
-  
-  <para>
-  <literal>form</literal> means that the property is set from the
-  parameter when the component renders (as with <literal>in</literal>).
-  When the form is submitted, the value is read from the property
-  and used to set the binding value after the component rewinds.
-  </para>
-  </entry>
-</row>
-
-</tbody>
-</tgroup>
-</informaltable>
-</figure>
-
-
-
-</section> <!-- spec.parameter -->
-
-<section id="spec.private-asset">
-	<title><sgmltag class="starttag">private-asset</sgmltag> element</title>
-
-<para>
-Specifies located from the classpath.  These exist to support
-reusable components packages (as part of a &spec.library-specification;)
-packaged in a JAR.  Private assets will be localized.
-</para>
-
-<para>
-Assets for an instantiated component (or page) 
-may be accessed using the OGNL expression <literal>assets.<replaceable>name</replaceable></literal>.
-</para>
-
-<figure>
-	<title><sgmltag class="starttag">private-asset</sgmltag> Attributes</title>
-<informaltable>
-<tgroup cols="5">
-<thead>
-<row>
-  <entry>Name</entry>
-  <entry>Type</entry>
-  <entry>Required ?</entry>
-  <entry>Default Value</entry>
-  <entry>Description</entry>
-</row>
-</thead>
-<tbody>
-<row>
-	<entry>name</entry>
-	<entry>string</entry>
-	<entry>yes</entry>
-	<entry/>
-	<entry>The name of the asset, which must be a valid Java identifier.</entry>
-</row>
-<row>
-	<entry>resource-path</entry>
-	<entry>string</entry>
-	<entry>yes</entry>
-	<entry/>
-	<entry>The path to the asset on the classpath.  The path should begin with leading forward slash.
-	</entry>
-</row>
-</tbody>
-</tgroup>
-</informaltable>
-</figure>
-
-</section> <!-- spec.private-asset -->
-
-<section id="spec.property">
-	<title><sgmltag class="starttag">property</sgmltag> element</title>
-	
-<para>
-Appears in: <emphasis>many</emphasis>
-</para>
-
-<para>
-The <sgmltag class="starttag">property</sgmltag> element is used to store meta-data
-about some other element (it is contained within).  Tapestr ignores this meta-data
-Any number of name/value pairs may be stored.  The value is the static text the <sgmltag class="starttag">property</sgmltag>
-tag wraps around.
-</para>
-
-<figure>
-	<title><sgmltag class="starttag">property</sgmltag> Attributes</title>
-<informaltable>
-<tgroup cols="5">
-<thead>
-<row>
-  <entry>Name</entry>
-  <entry>Type</entry>
-  <entry>Required ?</entry>
-  <entry>Default Value</entry>
-  <entry>Description</entry>
-</row>
-</thead>
-<tbody>
-<row>
-	<entry>name</entry>
-	<entry>string</entry>
-	<entry>yes</entry>
-	<entry/>
-	<entry>The name of the property.</entry>
-</row>
-</tbody>
-</tgroup>
-</informaltable>
-</figure>
-</section> <!-- spec.property -->
-
-<section id="spec.reserved-parameter">
-	<title><sgmltag class="starttag">reserved-parameter</sgmltag> element</title>
-	
-<para>
-Appears in: &spec.component-specification;
-</para>
-
-<para>
-Used in components that allow informal parameters to limit the possible
-informal parameters (so that there aren't conflicts with HTML attributes
-generated by the component).
-</para>
-
-<para>
-All formal parameters are automatically reserved.
-</para>
-
-<para>
-Comparisons are caseless, so an informal parameter of "SRC", "sRc", etc., will match
-a reserved parameter named "src" (or any variation), and be excluded.
-</para>
-
-
-<figure>
-	<title><sgmltag class="starttag">reserved-parameter</sgmltag> Attributes</title>
-<informaltable>
-<tgroup cols="5">
-<thead>
-<row>
-  <entry>Name</entry>
-  <entry>Type</entry>
-  <entry>Required ?</entry>
-  <entry>Default Value</entry>
-  <entry>Description</entry>
-</row>
-</thead>
-<tbody>
-<row>
-	<entry>name</entry>
-	<entry>string</entry>
-	<entry>yes</entry>
-	<entry/>
-	<entry>The name of the reserved parameter.</entry>
-</row>
-</tbody>
-</tgroup>
-</informaltable>
-</figure>
-
-
-</section> <!-- spec.reserved-parameter -->
-
-<section id="spec.service">
-	<title><sgmltag class="starttag">service</sgmltag> element</title>
-
-<para>
-Appears in: &spec.application; and &spec.library-specification;
-</para>
-
-<para>
-Defines an &IEngineService; provided by the application or by a library.
-</para>
-
-<para>
-The framework provides several services (home, direct, action, external, etc.).
-Applications may override these services by defining different
-services with the same names.
-</para>
-
-<para>
-Libraries that provide services should use a qualified name (that is, put
-a package prefix in front of the name) to avoid name collisions.
-</para>
-
-
-<figure>
-	<title><sgmltag class="starttag">service</sgmltag> Attributes</title>
-<informaltable>
-<tgroup cols="5">
-<thead>
-<row>
-  <entry>Name</entry>
-  <entry>Type</entry>
-  <entry>Required ?</entry>
-  <entry>Default Value</entry>
-  <entry>Description</entry>
-</row>
-</thead>
-<tbody>
-<row>
-	<entry>name</entry>
-	<entry>string</entry>
-	<entry>yes</entry>
-	<entry/>
-	<entry>The name of the service.</entry>
-</row>
-<row>
-	<entry>class</entry>
-	<entry>string</entry>
-	<entry>yes</entry>
-	<entry/>
-	<entry>The complete class name to instantiate.  The class must have
-	a zero-arguments constructor and implement the interface
-	&IEngineService;
-	</entry>
-</row>
-</tbody>
-</tgroup>
-</informaltable>
-</figure>
-
-</section> <!-- spec.service -->
-
-<section id="spec.set-property">
-	<title><sgmltag class="starttag">set-property</sgmltag> element</title>
-	
-<para>
-Appears in: &spec.bean;
-</para>
-
-<para>
-Allows a property of a helper bean to be set to an OGNL expression (evaluated
-on the containing component or page).
-</para>
-
-
-<figure>
-	<title><sgmltag class="starttag">set-property</sgmltag> Attributes</title>
-<informaltable>
-<tgroup cols="5">
-<thead>
-<row>
-  <entry>Name</entry>
-  <entry>Type</entry>
-  <entry>Required ?</entry>
-  <entry>Default Value</entry>
-  <entry>Description</entry>
-</row>
-</thead>
-<tbody>
-<row>
-	<entry>name</entry>
-	<entry>string</entry>
-	<entry>yes</entry>
-	<entry/>
-	<entry>The name of the helper bean property to set.</entry>
-</row>
-<row>
-	<entry>expression</entry>
-	<entry>string</entry>
-	<entry>yes</entry>
-	<entry/>
-	<entry>The OGNL expression used to set the property.
-	</entry>
-</row>
-</tbody>
-</tgroup>
-</informaltable>
-</figure>
-
-</section> <!-- spec.set-property -->
-
-<section id="spec.set-string-property">
-	<title><sgmltag class="starttag">set-string-property</sgmltag> element</title>
-
-<para>
-Appears in: &spec.bean;
-</para>
-
-<para>
-Allows a property of a helper bean to be set to a localized string
-value of its containing page or component.
-</para>
-
-
-<figure>
-	<title><sgmltag class="starttag">set-string-property</sgmltag> Attributes</title>
-<informaltable>
-<tgroup cols="5">
-<thead>
-<row>
-  <entry>Name</entry>
-  <entry>Type</entry>
-  <entry>Required ?</entry>
-  <entry>Default Value</entry>
-  <entry>Description</entry>
-</row>
-</thead>
-<tbody>
-<row>
-	<entry>name</entry>
-	<entry>string</entry>
-	<entry>yes</entry>
-	<entry/>
-	<entry>The name of the helper bean property to set.</entry>
-</row>
-<row>
-	<entry>key</entry>
-	<entry>string</entry>
-	<entry>yes</entry>
-	<entry/>
-	<entry>A string property key of the containing page or component.
-	</entry>
-</row>
-</tbody>
-</tgroup>
-</informaltable>
-</figure>
-
-</section> <!-- spec.set-string-property -->
-
-<section id="spec.static-binding">
-	<title><sgmltag class="starttag">static-binding</sgmltag> element</title>
-
-<para>
-Appears in: &spec.component;
-</para>
-
-<para>
-Binds a parameter of an embedded component to a static value.  The value,
-which is stored as a string, is the wrapped contents
-of the <sgmltag class="starttag">static-binding</sgmltag> tag.  Leading
-and trailing whitespace is removed.
-</para>
-
-<para>
-In an instantiated component, bindings can be accessed with
-the OGNL expression <literal>bindings.<replaceable>name</replaceable></literal>.
-</para>
-
-
-<figure>
-	<title><sgmltag class="starttag">static-binding</sgmltag> Attributes</title>
-<informaltable>
-<tgroup cols="5">
-<thead>
-<row>
-  <entry>Name</entry>
-  <entry>Type</entry>
-  <entry>Required ?</entry>
-  <entry>Default Value</entry>
-  <entry>Description</entry>
-</row>
-</thead>
-<tbody>
-<row>
-	<entry>name</entry>
-	<entry>string</entry>
-	<entry>yes</entry>
-	<entry/>
-	<entry>The name of the parameter to bind.</entry>
-</row>
-</tbody>
-</tgroup>
-</informaltable>
-</figure>
-
-
-</section> <!-- spec.static-binding -->
-
-<section id="spec.string-binding">
-	<title><sgmltag class="starttag">string-binding</sgmltag> element</title>
-
-<para>
-Appears in: &spec.component;
-</para>
-
-<para>
-Binds a parameter of an embedded component to a localized
-string of its containing page or component.
-</para>
-
-<para>
-In an instantiated component, bindings can be accessed with
-the OGNL expression <literal>bindings.<replaceable>name</replaceable></literal>.
-</para>
-
-
-<figure>
-	<title><sgmltag class="starttag">string-binding</sgmltag> Attributes</title>
-<informaltable>
-<tgroup cols="5">
-<thead>
-<row>
-  <entry>Name</entry>
-  <entry>Type</entry>
-  <entry>Required ?</entry>
-  <entry>Default Value</entry>
-  <entry>Description</entry>
-</row>
-</thead>
-<tbody>
-<row>
-	<entry>name</entry>
-	<entry>string</entry>
-	<entry>yes</entry>
-	<entry/>
-	<entry>The name of the parameter to bind.</entry>
-</row>
-<row>
-	<entry>key</entry>
-	<entry>string</entry>
-	<entry>yes</entry>
-	<entry/>
-	<entry>The localized property key to retrieve.
-	</entry>
-</row>
-</tbody>
-</tgroup>
-</informaltable>
-</figure>
-</section> <!-- spec.string-binding -->
-
-</appendix>
diff --git a/3.0.4/doc/src/Tutorial/.cvsignore b/3.0.4/doc/src/Tutorial/.cvsignore
deleted file mode 100644
index 1936cc1..0000000
--- a/3.0.4/doc/src/Tutorial/.cvsignore
+++ /dev/null
@@ -1 +0,0 @@
-html
diff --git a/3.0.4/doc/src/Tutorial/Tutorial.xml b/3.0.4/doc/src/Tutorial/Tutorial.xml
deleted file mode 100644
index d66b906..0000000
--- a/3.0.4/doc/src/Tutorial/Tutorial.xml
+++ /dev/null
@@ -1,1851 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- $Id$ -->
-<!DOCTYPE book PUBLIC
-  "-//OASIS//DTD DocBook XML V4.1.2//EN"
-  "http://www.oasis-open.org/docbook/xml/4.0/docbookx.dtd" [
-  <!ENTITY % TapestryLinks SYSTEM "../common/TapestryLinks.xml">
-  %TapestryLinks;
-]>
-<!-- Conventions:
-
-	Component ids are <varname>
-	Java packages and class names are <classname>
-	Tapestry component aliases are <classname>
-
-	In-line code snippets use <function>
-	Property paths and JavaBeans property names used <varname>
--->
-<book>
-  <title>Tapestry Tutorial</title>
-  <bookinfo>
-    <author>
-      <firstname>Howard</firstname>
-      <surname>Lewis Ship</surname>
-    </author>
-    <copyright>
-      <year>2000</year>
-      <year>2001</year>
-      <year>2002</year>
-      <year>2003</year>
-      <holder>The Apache Software Foundation</holder>
-    </copyright>
-  </bookinfo>
-  <chapter id="intro">
-    <title>Introduction</title>
-    
-   <warning>
-   <para>
-   This Tutorial is extremely out of date.  A new tutorial should be ready
-   before 3.0 reaches GA.	
-   </para>	
-   </warning>
-   
-    <para>
-Tapestry is a new application framework for developing web applications.  It uses
-a component object model to represent the pages of a web application.  This is 
-similar to spirit to using the Java Swing component object model to build GUIs.
-</para>
-    <para>
-Just like using a GUI toolkit, there's some preparation and some basic ideas that must be cleared 
-before going to more ambitious things.  Nobody writes a word processor off the top of their head 
-as their first GUI project; nobody should attempt a full-featured e-commerce site as their first 
-attempt using Tapestry.
-</para>
-    <para>
-The goal of Tapestry is to eliminate most of the coding in a web application.  Under Tapestry, 
-nearly all code is directly related to application functionality, with very little "plumbing".  If you 
-have previously developed a web application using Microsoft Active Server Pages, JavaServer 
-Pages or Java Servlets, you may take for granted all the plumbing:  writing servlets, assembling 
-URLs, parsing URLs, managing objects inside the &HttpSession;, etc.
-</para>
-    <para>
-Tapestry takes care of nearly all of that, for free.  It allows for the development of rich, highly 
-interactive applications.
-</para>
-    <para>
-This tutorial will start with basic concepts, such as the "Hello World" application, and will 
-gradually build up to more sophisticated examples.
-</para>
-    <para>
-The tutorial uses &Jetty;, 
-a freely available servlet engine, which is packaged with 
-the Tapestry 
-distribution.
-</para>
-    <para>
-The format of this tutorial is to describe (visually and with text) an application within the tutorial, 
-then describe how it is constructed, using code excerpts.  The reader is best served by having an 
-IDE open so that they can look at the code in detail, as well as run the applications.
-</para>
-  </chapter>
-  <chapter id="setup">
-    <title>Setting up the Tutorial</title>
-    <para>
-This document expects that you will have extracted the full Tapestry distribution to your 
-<filename class="directory">C:</filename> drive
-	<footnote>
-        <para>
-		If you are using Solaris or another non-Windows operating system, you're expected
-		to be savvy enough to translate to a sensibly constructed file system.
-		</para>
-      </footnote>
-    </para>
-    <para>
-This will have created a directory <filename class="directory">C:\Tapestry-<replaceable>x.x</replaceable>
-      </filename>
-and, beneath it, several more directories.
-	<footnote>
-        <para>
-		The three numbers are the release number.  At the time of this writing, the release
-		was 2.2, but this is constantly changing.  Simply adjust the actual pathname to
-		reflect the release of Tapestry you downloaded.
-		</para>
-      </footnote>
-    </para>
-    <para>
-The source code for the Tutorial is distributed as a JAR file,
-<filename>src/examples-src.jar</filename>.  A precompiled WAR file,
-<filename>lib/tutorial.war</filename> is included in the distribution.
-</para>
-
-
-<para>
-The Tapestry distribution includes an &Ant; build file that allows the
-Tutorial to be directly executed.  Ant release 1.5 is required.
-</para>
-
-<para>
-From the Tapestry root directory,
-execute the command <command>ant -emacs run-tutorial</command>, which will launch the
-Jetty server for the Tutorial.
-</para>
-      <para>
-Once Jetty is running, you can access the Tutorials using the URL 
-<ulink url="http://localhost:8080/tutorial">
-          <filename>http://localhost:8080/tutorial</filename>
-        </ulink>.
-</para>
-      <figure>
-        <title>Tutorial Index Page</title>
-        <mediaobject>
-          <imageobject>
-            <imagedata fileref="images/tutorial-index.png" format="PNG"/>
-          </imageobject>
-        </mediaobject>
-      </figure>
-
-  </chapter>
-  
-  <chapter id="hello">
-    <title>Hello World</title>
-    <para>
-In this first example, we'll create a very simple "Hello World" kind of application.  It won't have 
-any real functionality but it'll demonstrate the simplest possible variation of a number of key 
-aspects of the framework.
-</para>
-    <para>
-We'll define our application, define the lone page of our application, configure everything and 
-launch it.
-</para>
-    <para>
-The code for this section of the tutorial is in the Java package <classname>tutorial.hello</classname>, i.e., 
-<filename class="directory">C:\Tapestry-<replaceable>x.x.x</replaceable>\examples\Tutorial\src\tutorial\hello</filename>.
-</para>
-    <section id="hello.engine">
-      <title>Application Engine</title>
-      <para>
-As each new client connects to the application, an instance of the application engine is created for 
-them.  The application engine is used to track that client's activity within the application.
-</para>
-      <para>
-The application engine is an instance, or subclass of, the Tapestry class 
-&SimpleEngine;.
-</para>
-      <para>
-In these first few examples, we have no additional behavior to add to the provided base class, so 
-we simply use &SimpleEngine; directly.
-</para>
-    </section>
-    <section id="hello.descriptor">
-      <title>Web Deployment Descriptor</title>
-      <para>
-The application servlet is a "bridge" between the servlet container and the application engine.  Its 
-job is simply to create (on the first request) or locate (on subsequent requests) the application 
-engine.
-</para>
-
-
-<para>
-All Tapestry applications use the same servlet class, however its configuration is different.  Part
-of the configuration is to identify the location of the <emphasis>application specification</emphasis>
-which is like a master index of all the pages in the application.
-</para>
-
-<para>
-The tutorial is a rare case; it is a single WAR that contains multiple Tapestry applications.  This
-isn't a problem ... each Tapestry application has its own servlet and has its own configuration.
-The following figure shows the deployment descriptor for the Tapestry Tutorial (but excludes
-the additional sections for the other applications within the WAR).
-</para>
-
-      <figure>
-        <title>Tutorial Deployment Descriptor (partial)</title>
-        <programlisting>
-<![CDATA[
-<?xml version="1.0"?>
-<!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>
-  <display-name>Tapestry Tutorial</display-name>
-        
-  <servlet>
-    <servlet-name>hello</servlet-name>
-    <servlet-class>org.apache.tapestry.ApplicationServlet</servlet-class>
-    <init-param>
-    	<param-name>org.apache.tapestry.application-specification</param-name>
-    	<param-value>/tutorial/hello/HelloWorld.application</param-value>
-    </init-param>
-  	<load-on-startup>0</load-on-startup>
-  </servlet>
-  
-  <servlet-mapping>
-    <servlet-name>hello</servlet-name>
-    <url-pattern>/hello</url-pattern>
-  </servlet-mapping>
-  
-  <session-config>
-  	<session-timeout>15</session-timeout>
-  </session-config>
-  
-  <welcome-file-list>
-    <welcome-file>index.html</welcome-file>
-  </welcome-file-list>
-</web-app>
-
-]]>
-</programlisting>
-      </figure>
-    </section>
-    <section id="hello.appspec">
-      <title>Application Specification</title>
-      <para>
-The application specification is used to describe the application to the Tapestry framework.  It 
-provides the application with a name, an engine class, and a list of pages.
-</para>
-      <para>
-This specification is a file that is located on the Java class path.  In a deployed Tapestry 
-application, the specification lives with the application's class files, in the 
-<filename class="directory">WEB-INF/classes</filename> directory of a War file.
-</para>
-      <figure>
-        <title>HelloWorld.application</title>
-        <programlisting>
-&lt;?xml version="1.0" encoding="UTF-8"?&gt;
-&lt;!DOCTYPE application PUBLIC 
-  "-//Howard Lewis Ship//Tapestry Specification 1.3//EN" 
-  "http://tapestry.sf.net/dtd/Tapestry_1_3.dtd"&gt;
-&lt;application
-  name="Hello World Tutorial"
-  engine-class="org.apache.tapestry.engine.&SimpleEngine;"&gt;
-  
-  &lt;page name="Home" 
-    specification-path="/tutorial/hello/Home.page"/&gt;
-
-&lt;/application&gt;
-</programlisting>
-      </figure>
-      <para> 
-Our application is very simple; we give the application a name, use the standard engine, and define 
-a single page, named "Home".  In Tapestry, pages and components are specified with the path to their 
-specification file (a file that end with '.page' for page specifications or '.jwc' 
-for component specifications).
-</para>
-      <para>
-Page "Home" has a special meaning to Tapestry: when you first launch a Tapestry application, it 
-loads and displays the "Home" page.  All Tapestry applications are required to have such a home 
-page.
-</para>
-    </section>
-    <section id="hello.home-page-spec">
-      <title>Home Page Specification</title>
-      <para>
-The page specification defines the Tapestry component responsible for the page.  In this first 
-example, our component is very simple.
-</para>
-      <figure>
-        <title>Home.page</title>
-        <programlisting>
-&lt;?xml version="1.0" encoding="UTF-8"?&gt;
-&lt;!DOCTYPE page-specification PUBLIC
-  "-//Howard Lewis Ship//Tapestry Specification 1.3//EN"
-  "http://tapestry.sf.net/dtd/Tapestry_1_3.dtd"&gt;
-
-&lt;page-specification class="org.apache.tapestry.html.&BasePage;"/&gt;
-</programlisting>
-      </figure>
-      <para>
-This simply says that <classname>Home</classname> is a kind of page.  We use the supplied Tapestry class 
-&BasePage; since we aren't adding any behavior to the page.
-</para>
-    </section>
-    <section id="hello.home-page-template">
-      <title>Home Page Template</title>
-      <para>
-Finally, we get to the content of our application.  This file is also a Java resource; 
-it isn't directly 
-visible to the web server.  It has the same location and name as the component specification, 
-except that it ends in "html".
-</para>
-      <figure>
-        <title>Home.html</title>
-        <programlisting><![CDATA[<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-
-<html>
-<head>
-	<title>Hello World</title>
-</head>
-
-<body>
-
-Welcome to your first <b>Tapestry Application</b>.
-
-</body>
-</html>]]></programlisting>
-      </figure>
-    </section>
-    <section id="hello.run">
-      <title>Run the Application</title>
-      <para>
-You should already be running the Jetty server in a window, and have a browser running the 
-tutorials page.  Select the first option, Hello World, from the list.  You will be presented with the 
-first (and only) page generated by Tapestry for this application:
-</para>
-      <figure>
-        <title>Hello World Application</title>
-        <mediaobject>
-          <imageobject>
-            <imagedata fileref="images/hello-world.jpg" format="JPEG"/>
-          </imageobject>
-        </mediaobject>
-      </figure>
-      <para>
-Not much of an application ... there's no interactivity.  It might as well be a static web page, but it's 
-a start.  Remember, there was no JavaServer page here, and no HTML directly visible to the web 
-server.  We used the Tapestry framework to assembly an application consisting of a single component.
-</para>
-      <para>
-In the following chapters, we'll see how to add dynamic content and then true interactivity.
-</para>
-    </section>
-  </chapter>
-  <chapter id="dynamic">
-    <title>Dynamic Content</title>
-    <para>
-In this chapter, we'll create a new web application that will show some dynamic content.  We'll also 
-begin to show some interactivity by adding a link to the page.
-Our dynamic content will simply be to show the current date and time. The interactivity will be a 
-link to refresh the page.  It all looks like this:
-</para>
-    <figure>
-      <title>Dynamic Application</title>
-      <mediaobject>
-        <imageobject>
-          <imagedata fileref="images/dynamic.jpg" format="JPEG"/>
-        </imageobject>
-      </mediaobject>
-    </figure>
-    <para>
-Clicking the word "here" will update the page showing the new data and time.  Not incredibly 
-interactive, but it's a start.
-</para>
-    <para>
-The code for this section of the tutorial is in the package 
-<classname>tutorial.simple</classname>.
-</para>
-    <para>
-The application specification is almost identical to the Hello World example:
-</para>
-    <figure>
-      <title>Simple.application</title>
-      <programlisting>
-&lt;?xml version="1.0" encoding="UTF-8"?&gt;
-&lt;!DOCTYPE application PUBLIC 
-  "-//Howard Lewis Ship//Tapestry Specification 1.3//EN" 
-  "http://tapestry.sf.net/dtd/Tapestry_1_3.dtd"&gt;
-
-&lt;application name="Simple Tutorial" engine-class="org.apache.tapestry.engine.&SimpleEngine;"&gt;
-  &lt;page name="Home" specification-path="/tutorial/simple/Home.page"/&gt;
-&lt;/application&gt;
-</programlisting>
-    </figure>
-    <para>
-Things only begin to get more interesting when we look at the HTML template for the home 
-page:
-</para>
-    <figure>
-      <title>Home.html</title>
-      <programlisting><![CDATA[<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-<head>
-	<title>Simple</title>
-</head>
-<body>
-
-This application demonstrates some dynamic behavior using Tapestry components.
-
-<p>The current date and time is: <b><span jwcid="insertDate">Current Date</span></b>
-
-<p>Click <a jwcid="refresh">here</a> to refresh.
-
-</body>
-</html>]]></programlisting>
-    </figure>
-    <para> 
-This looks like ordinary HTML, except for the special <varname>jwcid</varname>
-attribute.  "jwc" is short for "Java Web Component"; these attributes
-identify the tag as a placeholder for a dynamic Tapestry component.
-</para>
-    <para>
-We have two components.  The first inserts the current date and time into the HTML response. 
-The second component 
-creates a hyperlink that refreshes the page when clicked.</para>
-    <para>
-One of the goals of Tapestry is that the HTML should have the minimum amount of special 
-markup.  This is demonstrated here ... the dynamic component  tags blend into the standard HTML of the 
-template.  We also don't confuse the HTML by explaining exactly what an <varname>insertDate</varname>
-or <varname>refresh</varname>
-is; that comes out of the specification (described shortly).  The ids used here are meaningful only 
-to the developer
-	<footnote>
-        <para>Of course, good and consistent naming is important.
-		</para>
-      </footnote>, the particular type and configuration of each component is defined in the 
-component specification.
-</para>
-    <para>Tapestry doesn't really care what HTML tag you use, as long as you balance the tag correctly.  In fact, it ignores the tag entirely:  the
-<varname>refresh</varname> component above could just has easily been identified with a &lt;span&gt; tag, or any other tag for that matter.  Tapestry is only interested in the <emphasis>structure</emphasis> of the HTML template.  The fact that you can use meaningful tags is a convienience; it allows a Tapestry HTML template to be previewed in a <acronym>WYSIWYG</acronym> HTML editor, such as HomeSite.   Additionally, Tapestry edits out the content of tags for components that don't wrap around other content:  the <varname>insertDate</varname> component in this example.  This allows a preview
-values to be kept in the template.
-</para>
-    <para>
-Very significant is the fact that a Tapestry component can 
-<emphasis>wrap</emphasis> around other elements of the 
-template.  The <varname>refresh</varname> component wraps around the word "here".  
-What this means is that the 
-<varname>refresh</varname> component will get a chance to emit some HTML (an 
-<sgmltag class="starttag">a</sgmltag> hyperlink tag), then emit the 
-HTML it wraps (the word "here"), then get a chance to emit more HTML (the 
-<sgmltag class="endtag">a</sgmltag> closing tag).
-</para>
-    <para>
-What's more important is that the component can not only wrap static HTML from the template 
-(as shown in this example), but may wrap around other Tapestry components  and those 
-components may themselves wrap text and components, to whatever depth is required.
-</para>
-    <para>
-And, as we'll see in later chapters, a Tapestry component itself may have a template and more 
-components inside of it.  In a real application, the single page of HTML produced by the 
-framework may be the product of dozens of components, effectively "woven" from dozens of 
-HTML templates.
-</para>
-    <para>
-Again, the HTML template doesn't define what the components are, it is simply a mix of static 
-HTML that will be passed directly back to the client web browser, with a few placeholders (the 
-tags with the <varname>jwcid</varname> attribute) for where dynamic content will be plugged in.
-</para>
-    <para>
-The page's component specification defines what types of components are used and how data 
-moves between the application, page and any components.
-</para>
-    <figure>
-      <title>Home.page</title>
-      <programlisting>
-&lt;?xml version="1.0" encoding="UTF-8"?&gt;
-&lt;!DOCTYPE page-specification PUBLIC 
-  "-//Howard Lewis Ship//Tapestry Specification 1.3//EN" 
-  "http://tapestry.sf.net/dtd/Tapestry_1_3.dtd"&gt;
-
-&lt;page-specification class="tutorial.simple.Home"&gt;
-
-  &lt;component id="insertDate" type="&Insert;"&gt;
-    &lt;binding name="value" expression="currentDate"/&gt;
-  &lt;/component&gt;
-
-  &lt;component id="refresh" type="&PageLink;"&gt;
-    &lt;static-binding name="page"&gt;Home&lt;/static-binding&gt;
-  &lt;/component&gt;
-
-&lt;/page-specification&gt;
-</programlisting>
-    </figure>
-    <para>
-Here's what all that means:  The <varname>Home</varname> page is implemented with a custom class, 
-<classname>tutorial.simple.Home</classname>.  It contains two components, 
-<varname>insertDate</varname> and <varname>refresh</varname>.
-</para>
-    <para>
-The two components used within this page are provided by the Tapestry framework.
-</para>
-    <para>
-The <varname>insertDate</varname> component is type &Insert;. 
-&Insert; components have a <varname>value</varname> parameter used to 
-specify what should be inserted into the HTML produced by the page.  The 
-<varname>insertDate</varname>
-component has its <varname>value</varname> parameter bound to a JavaBeans property of its container 
-(the page), the <varname>currentDate</varname> property.
-</para>
-    <para>
-The <varname>refresh</varname> component is type &PageLink;, meaning it creates a 
-link to some other page in the 
-application. &PageLink; components have a parameter, named <varname>page</varname>, 
-which defines the name of the 
-page to navigate to.  The name is matched against a page named in the application specification.
-</para>
-    <para>
-In this case, we only have one page in our application (named "Home"), so we can use a static 
-binding for the page parameter.  A static binding provides a value for the component parameter 
-statically, the same value every time.  The value is defined right in the specification.
-</para>
-    <para>
-That just leaves the implementation of the Home page component:
-</para>
-    <figure>
-      <title>Home.java</title>
-      <programlisting>
-package tutorial.simple;
-
-import java.util.Date;
-import org.apache.tapestry.html.BasePage;
-
-public class Home extends &BasePage;
-{
-  public Date getCurrentDate()
-  {
-    return new Date();
-  }
-}
-</programlisting>
-    </figure>
-    <para>
-      <classname>Home</classname> implements a  read-only JavaBeans property, <varname>currentDate</varname>.  
-This is the same <varname>currentDate</varname>
-that the <varname>insertDate</varname> component needs.  When asked for the current date, the 
-<varname>Home</varname> object returns 
-a new instance of the <classname>java.util.Date</classname> object.
-</para>
-    <para>
-The <varname>insertDate</varname> component converts objects into strings by invoking 
-<function>toString()</function> on the object.
-</para>
-    <para>
-Now all the bits and pieces are working together.
-</para>
-    <para>
-Run the application, and use the View Source command to examine the HTML generated by 
-by framework.
-</para>
-    <figure>
-      <title>HTML generated for Home page</title>
-      <programlisting><![CDATA[
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-<head>
-	<title>Simple</title>
-</head>
-<body>
-
-This application demonstrates some dynamic behavior using Tapestry components.
-
-<p>The current date and time is: <b>Fri Nov 23 17:05:53 PST 2001</b>
-
-<p>Click <a href="/tutorial/simple...">here</a> to refresh.
-
-</body>
-</html>
-
-]]></programlisting>
-    </figure>
-    <para> 
-This should look very familiar, in that it is mostly the same as the HTML template for the page.
-Tapestry not only inserted simple text (the current date and time, 
-obtained from an <classname>java.util.Date</classname> object), but the 
-<varname>refresh</varname> component inserted the <sgmltag class="starttag">a</sgmltag> and 
-<sgmltag class="endtag">a</sgmltag> tags, and created an appropriate URL for the href attribute.
-</para>
-  </chapter>
-  <chapter id="hangman">
-    <title>Hangman</title>
-    <para>
-So far, these examples have been a little bit cut-and-dried.  Lets do a meatier example that uses a 
-few more interesting components.  Let's play Hangman!
-</para>
-    <para>
-Our Hangman application consists of four pages.  The Home page allows a new game to be 
-started, which includes selecting the difficulty of the game (how many wrong guesses you are 
-allowed).
-</para>
-    <figure>
-      <title>Hangman Home Page</title>
-      <mediaobject>
-        <imageobject>
-          <imagedata fileref="images/hangman-home.jpg" format="JPEG"/>
-        </imageobject>
-      </mediaobject>
-    </figure>
-    <para> 
-The main page is the Guess page, where the partially filled out word is displayed, and the user can 
-make guesses (from a shrinking list of possible letters):
-</para>
-    <figure>
-      <title>Hangman Guess Page</title>
-      <mediaobject>
-        <imageobject>
-          <imagedata fileref="images/hangman-guess.jpg" format="JPEG"/>
-        </imageobject>
-      </mediaobject>
-    </figure>
-    <para>
-After you give up, or when you make too many mistakes, you end up on the the Failed page:
-</para>
-    <figure>
-      <title>Hangman Failed Page</title>
-      <mediaobject>
-        <imageobject>
-          <imagedata fileref="images/hangman-lose.jpg" format="JPEG"/>
-        </imageobject>
-      </mediaobject>
-    </figure>
-    <para> 
-But, if you guess all the letters, you are sent to the Success page:
-</para>
-    <figure>
-      <title>Hangman Success Page</title>
-      <mediaobject>
-        <imageobject>
-          <imagedata fileref="images/hangman-win.jpg" format="JPEG"/>
-        </imageobject>
-      </mediaobject>
-    </figure>
-    <section id="hangman.visit">
-      <title>The Visit Object</title>
-      <para>
-The center of this application is an object that represents game, an object of class 
-<classname>HangmanGame</classname>. This object is used to track the word being guessed, 
-the letters that have been 
-used, the number of misses and the letters that have been correctly guessed.
-</para>
-      <para>
-This object is a property of the <emphasis>visit</emphasis> object.  What's the visit object?  
-The visit object is a holder of 
-all information about a single client's visit to your web application.  It contains data and methods 
-that are needed by the pages and components of your application.
-</para>
-      <para>
-The visit object is owned and created by the engine object.  It is serialized and de-serialized with 
-the engine.
-</para>
-      <para>
-The application specification includes a little extra segment at the bottom to specify the class of 
-the visit object.
-</para>
-      <figure>
-        <title>Hangman.application</title>
-        <programlisting>
-&lt;?xml version="1.0" encoding="UTF-8"?&gt;
-&lt;!DOCTYPE application PUBLIC
-  "-//Howard Lewis Ship//Tapestry Specification 1.3//EN" 
-  "http://tapestry.sf.net/dtd/Tapestry_1_3.dtd"&gt;
-
-&lt;application name="Tapestry Hangman" engine-class="org.apache.tapestry.engine.&SimpleEngine;"&gt; 
-
-  &lt;property name="org.apache.tapestry.visit-class"&gt;tutorial.hangman.Visit&lt;/property&gt; <co id="hangman.app.visit"/>
-
-  &lt;page name="Home" specification-path="/tutorial/hangman/Home.page"/&gt;
-
-  &lt;page name="Guess" specification-path="/tutorial/hangman/Guess.page"/&gt;
-
-  &lt;page name="Failed" specification-path="/tutorial/hangman/Failed.page"/&gt;
-
-  &lt;page name="Success" specification-path="/tutorial/hangman/Success.page"/&gt;
-
-&lt;/application&gt;    
-</programlisting>
-      </figure>
-      <para>
-        <calloutlist>
-          <callout arearefs="hangman.app.visit">
-            <para>
-  This property specifies that the engine should instantiate an instance of
-  <classname>tutorial.hangman.Visit</classname> when a visit object is first required.
-  This is the default way in which the visit object is specified, though if
-  the visit object doesn't have an empty constructor method, the engine method
-  <function>createVisit()</function> must be implemented instead.
-  </para>
-          </callout>
-        </calloutlist>
-      </para>
-      <para>
-So, returning from that distraction, the game object is a property of the visit object, which is 
-accessible from any page (via the page's visit property).
-</para>
-    </section>
-    <section id="hangman.home-page">
-      <title>The Home Page</title>
-      <para>
-The Home page's job is to collect the difficulty and initiate a game:
-</para>
-      <figure>
-        <title>Home.java</title>
-        <programlisting>
-public class Home extends &BasePage;
-{
-	public static final int EASY = 10;
-	public static final int MEDIUM = 5;
-	public static final int HARD = 3;
-
-	private int misses;
-	private String error;
-
-	public void detach()
-	{
-		misses = 0;
-		error = null;
-
-		super.detach();
-	}
-
-	public int getMisses()
-	{
-		return misses;
-	}
-
-	public void setMisses(int value)
-	{
-		misses = value;
-
-		fireObservedChange("misses", value);
-	}
-
-	public String getError()
-	{
-		return error;
-	}
-
-	public void formSubmit(IRequestCycle cycle)
-	{
-		if (misses == 0)
-		{
-			error = "Please select a game difficulty.";
-			return;
-		}
-
-		Visit visit = (Visit) getVisit();
-
-		visit.start(misses);
-
-		cycle.setPage("Guess");
-	}
-
-}
-</programlisting>
-      </figure>
-      <para>
-We're seeing all the familiar ideas:  The 
-<varname>misses</varname> property is a persistent page property (which means 
-the page will "remember" the value previously selected by the user).
-</para>
-      <para>
-We use a common trick for simple pages:  the page contains a single 
-&Form; component, so we use 
-the page itself as the form's listener, and have the page implement the 
-&IActionListener; interface.  
-</para>
-      <para>
-This saves a bit of code for creating an inner class as the form listener.
-</para>
-      <para>
-Initially, we don't select a difficulty level, and the user can click "Play!" without selecting a value 
-from the list, so we check that.
-</para>
-      <para>
-Otherwise, we get the visit object and ask it to start a new game with the selected number of 
-misses.  We then jump to the Guess page to start accepting guesses from the user.
-</para>
-      <para>
-The interesting part of the Home page HTML template is the form:
-</para>
-      <figure>
-        <title>Home.html (excerpt)</title>
-        <programlisting><![CDATA[
-<form jwcid="form">
-
-<span jwcid="group">
-
-<span jwcid="ifError">
-<font size=+2 color=red><span jwcid="insertError"/></font>
-</span>
-
-<table>
-	<tr>
-		<td><input jwcid="inputEasy"/></td>
-		<td>Easy game; you are allowed ten misses.</td>
-	</tr>
-
-	<tr>
-		<td><input jwcid="inputMedium"/></td>
-		<td>Medium game; you are allowed five misses.</td>
-	</tr>
-
-	<tr>
-		<td><input jwcid="inputHard"/></td>
-		<td>Hard game; you are only allowed three misses.</td>
-	</tr>
-
-	<tr>
-		<td></td>
-		<td><input type="submit" value="Play!"></td>
-	</tr>
-
-</table>
-
-</span>
-</form>
-]]></programlisting>
-      </figure>
-      <para>
- Here, the interesting components are <varname>group</varname>, 
- <varname>inputEasy</varname>, <varname>inputMedium</varname> and <varname>inputHard</varname>.  
-<varname>group</varname> is 
-type &RadioGroup;, a wrapper that must go around the &Radio;
- components (the other three).  The 
-&RadioGroup; determines what property of the page is to be read and updated 
-(its bound to the 
-<varname>misses</varname> property).  Each &Radio; button is associated with 
-a particular value to be assigned to the 
-property, when that radio button is selected by the user.
-</para>
-      <para>
-This comes together in the Home page specification:
-</para>
-      <figure>
-        <title>Home.page (excerpt)</title>
-        <programlisting>
-  &lt;component id="group" type="&RadioGroup;"&gt;
-    &lt;binding name="selected" expression="misses"/&gt;
-  &lt;/component&gt;
-  
-  &lt;component id="inputEasy" type="&Radio;"&gt;
-    &lt;field-binding name="value" field-name="tutorial.hangman.Home.EASY"/&gt; <co id="hangman.home.spec.field-binding"/>
-  &lt;/component&gt;
-  
-  &lt;component id="inputMedium" type="&Radio;"&gt;
-    &lt;field-binding name="value" field-name="tutorial.hangman.Home.MEDIUM"/&gt;
-  &lt;/component&gt;
-  
-  &lt;component id="inputHard" type="&Radio;"&gt;
-    &lt;field-binding name="value" field-name="tutorial.hangman.Home.HARD"/&gt;
-  &lt;/component&gt;
-
-</programlisting>
-      </figure>
-      <para>
-        <calloutlist>
-          <callout arearefs="hangman.home.spec.field-binding">
-            <para>
-  A <sgmltag class="starttag">field-binding</sgmltag> is like a
-  <sgmltag class="starttag">static-binding</sgmltag>, except that
-  the static value is taken from a public static field of
-  some class.  This makes it easy to coordinate behaviors between
-  the specification and the class.
-  </para>
-            <para>
-This is a good thing, since if you decide to make a <varname>HARD</varname>
-game only allow two mistakes, you can 
-make the change in exactly one place .. your Java code.
-</para>
-          </callout>
-        </calloutlist>
-      </para>
-      <para>
-So the end result is: when the user clicks the radio button for a Hard game, the static constant 
-<varname>HARD</varname> is assigned to the page's <varname>misses</varname> property.
-</para>
-    </section>
-    <section id="hangman.guess-page">
-      <title>The Guess Page</title>
-      <para>
-This is the page where uses make letter guesses.  The page has four sections:
-</para>
-      <itemizedlist>
-        <listitem>
-          <para>
-        A display of the word, with underscores replacing unguessed letters.
-        </para>
-        </listitem>
-        <listitem>
-          <para>
-        A status area, showing the number of bad guesses and an optional error message after an 
-    invalid guess.
-        </para>
-        </listitem>
-        <listitem>
-          <para>
-        A list of letters that may be guessed.  Letters disappear after they are used.
-        </para>
-        </listitem>
-        <listitem>
-          <para>
-        An option to give up and see the word, terminating the game.
-        </para>
-        </listitem>
-      </itemizedlist>
-      <para>
-Let's start with the HTML template this time:
-</para>
-      <figure>
-        <title>Guess.html (excerpt)</title>
-        <programlisting><![CDATA[
-<h1>Make a Guess</h1>
-
-<font size=+3>
-	<span jwcid="insertGuess"/>
-</font>
-
-<p>
-
-You have made <span jwcid="insertMissed"/> bad guesses,
-out of a maximum of <span jwcid="insertMaxMisses"/>.
-
-<span jwcid="ifError">
-<p>
-<font size=+3 color=red><span jwcid="insertError"/></font>
-</span>
-
-<p>Guess:
-<font size=+1>
-<span jwcid="e">
-<a jwcid="guess"><span jwcid="insertLetter"/></a>
-</span>
-</font>
-
-<p><a jwcid="giveUp">Give up?</a>
-]]></programlisting>
-      </figure>
-      <para> 
-Most of these components should be fairly obvious by now; let's focus on the components that 
-allow the user to guess a letter.  This could have been implemented in a number of ways  using 
-more radio buttons, a drop down list or a text field the user could type into.  In this example, we 
-chose to simply create a series of links, one for each letter the user may still guess.
-</para>
-      <para>
-Let's look at the specification for those three components (<varname>e</varname>, 
-<varname>guess</varname> and <varname>insertLetter</varname>).
-</para>
-      <figure>
-        <title>Guess.jwc (excerpt)</title>
-        <programlisting>
-&lt;component id="e" type="&Foreach;"&gt;
-  &lt;binding name="source" expression="unused"/&gt;
-&lt;/component&gt;
-
-&lt;component id="guess" type="&DirectLink;"&gt;
-  &lt;binding name="listener" expression="listeners.makeGuess"/&gt;
-  &lt;binding name="parameters" expression="components.e.value"/&gt;
-&lt;/component&gt;
-
-&lt;component id="insertLetter" type="&Insert;"&gt;
-  &lt;binding name="value" expression="components.e.value"/&gt;
-&lt;/component&gt;
-</programlisting>
-      </figure>
-      <para> 
-Component <varname>e</varname> is simply a &Foreach;, 
-the <varname>source</varname> is the <varname>unused</varname> property of the page (we'll see in a 
-moment how the page gets this list of unused letters from the game object).
-</para>
-      <para>
-Component <varname>insertLetter</varname> inserts the current letter from the list of unused letters.  
-It gets this current letter directly from the <varname>e</varname> component.  
-On successive iterations, a &Foreach; component's 
-<varname>value</varname> property is the value for the iteration.
-</para>
-      <para>
-Component <varname>guess</varname> is type &DirectLink;, which creates a 
-hyperlink on the page and notifies its listener 
-when the user clicks the link.  Just knowing that the component was clicked isn't very helpful 
-though;  the application needs to know which letter was actually clicked.
-</para>
-      <para>
-Passing that kind of information along is accomplished by setting the 
-<varname>parameters</varname> parameter for the 
-component.  The <varname>parameters</varname> parameter is an object, or
-array or objects, that will be encoded into the 
-URL for the hyperlink.  When the component's listener is notified, it
-can obtain the array of objects from the &IRequestCycle;
-<footnote>
-<para>
-Tapestry takes care of converting objects into strings when constructing the URL, then
-converts those strings back into objects when the link is clicked.  Your listener method
-will be able to get <emphasis>copies</emphasis> of the original parameters.
-</para>
-</footnote>.
-</para>
-      <para>
-These <emphasis>service parameters</emphasis>
-are often used to encode primary keys of objects, names of columns or other 
-information specific to the application.
-</para>
-      <para>
-In this case, the service parameters consist of a single value,
-the letter to be guessed.
-</para>
-      <para>
-All of this comes together in the Java code for the Guess page.
-</para>
-      <figure>
-        <title>Guess.java (excerpt)</title>
-        <programlisting>
-public void makeGuess(&IRequestCycle; cycle)
-{
-    Object[] parameters = cycle.getServiceParameters();
-	char letter = ((Character)parameters[0]).charValue();
-	HangmanGame game = getGame();
-	
-	try
-	{
-		game.guess(letter);
-	}
-	catch (GameException ex)
-	{
-		error = ex.getMessage();
-
-		if (game.getFailed())
-			cycle.setPage("Failed");
-
-		return;
-	}
-
-	// A good guess.
-
-	if (game.getDone())
-		cycle.setPage("Success");
-}
-</programlisting>
-      </figure>
-      <para> 
-
-The component specification showed how data was encoded into the URL as the 
-service parameters; here we see how the 
-<function>makeGuess()</function> listener
-method has access to the service parameters and uses them.
-The listener method extracts the letter and informs the game object, which throws an exception
-if the letter is not in the word being guessed.
-</para>
-      <para>
-The method <function>HangmanGame.getFailed()</function> returns 
-<literal>true</literal> when all the missed guesses are used up, at 
-which point we go to the <varname>Failed</varname> page to tell the user what the word was.
-</para>
-      <para>
-On the other hand, if an exception isn't thrown, then the guess was good.  
-<function>getDone()</function> returns <literal>true</literal>
-if all letters have been guessed, in which go to the <varname>Success</varname> page.
-</para>
-      <para>
-If all letters weren't guessed, we stay on the <varname>Guess</varname> page, 
-which will display the word with the 
-guessed letter filled in, and with fewer options in the list of possible guesses.
-</para>
-    </section>
-    <section id="hangman.limitations">
-      <title>Limitations</title>
-      <para>
-This is a very, very simple implementation of the game.  For example, it's easy to cheat; you can 
-give up, then use your browser's back button to return to the <varname>Guess</varname>
-page and keep guessing (with accuracy, if your memory is any good).
-</para>
-    </section>
-  </chapter>
-  <chapter id="reuse">
-    <title>Creating Reusable Components</title>
-    <para>
-In this tutorial, we'll show how to create a reusable component.  One common use of components 
-it to create a common "border" for the application that includes basic navigation.  We'll be 
-creating a simple, three page application with a navigation bar down the left side.
-</para>
-    <figure>
-      <title>Border Home Page</title>
-      <mediaobject>
-        <imageobject>
-          <imagedata fileref="images/border-home.jpg" format="JPEG"/>
-        </imageobject>
-      </mediaobject>
-    </figure>
-    <para> 
-Navigating to another page results in a similar display:
-</para>
-    <figure>
-      <title>Border Credo Page</title>
-      <mediaobject>
-        <imageobject>
-          <imagedata fileref="images/border-credo.jpg" format="JPEG"/>
-        </imageobject>
-      </mediaobject>
-    </figure>
-    <para> 
-Each page's content is confined to the silver area in the center.  Note that the border adapts itself 
-to each page:  the title "Home" or "Credo" is specific to the page, and the current page doesn't 
-have an active link (in the above page, "Credo" is the current page, so only "Home" and "Legal" 
-are usable as navigation links).
-</para>
-    <para>
-The "i" in the gear is the Show Inspector link.  It will be described in the next chapter.
-</para>
-    <para>
-Because this tutorial is somewhat large, we'll only be showing excerpts from some of the files.  
-The complete source of the tutorial examples is available seperately, in the 
-<classname>tutorial.border</classname> package.
-</para>
-    <para>
-Each of the three pages has a similar HTML template:
-</para>
-    <figure>
-      <title>Home.html</title>
-      <programlisting>
-&lt;span jwcid="border"&gt;
-
-Nothing much doing here on the &lt;b&gt;home&lt;/b&gt; page.  Visit one of our other 
-fine 
-pages.
-
-&lt;/span&gt;
-</programlisting>
-    </figure>
-    <para> 
-Remember that Tapestry components can wrap around other HTML elements or components.  
-For the border, we have an HTML template where everything on the page is wrapped by the 
-<varname>border</varname> component.
-</para>
-    <para>
-Note that we don't specify any
-<sgmltag class="starttag">html</sgmltag> or 
-<sgmltag class="starttag">body</sgmltag> tags; those are provided by the <classname>Border</classname>
-component (as well as the matching close tags).
-</para>
-    <para>
-This illustrates a key concept within Tapestry:  embedding vs. wrapping.  The 
-<classname>Home</classname> page embeds 
-the <varname>border</varname> component (as we'll see in the <classname>Home</classname> page's specification).  
-This means that the <classname>Home</classname>
-page is implemented using the <varname>border</varname> component.
-</para>
-    <para>
-However, the <varname>border</varname> component wraps the content of the <classname>Home</classname> page,
-the <classname>Home</classname> page 
-HTML template indicates the <emphasis>order</emphasis> in which components (and static HTML elements) are  
-renderred.  On the <classname>Home</classname> page, the <varname>border</varname> component 'bats' first and cleanup.
-</para>
-    <para>
-The construction of the <classname>Border</classname> component is driven by how it differs from page to page.  
-You'll 
-see that on each page, the title (in the upper left corner) changes.  The names of all three pages are 
-displayed, but only two of the three will have links (the third, the current page, is just text).  
-Lastly,  each page contains the specific content from its own HTML template.
-</para>
-    <figure>
-      <title>Border.html</title>
-      <programlisting>
-&lt;span jwcid="shell"&gt; <co id="reuse.border.shell"/>
-&lt;body jwcid="body"&gt; <co id="reuse.border.body"/>
-&lt;table border=0 bgcolor=gray cellspacing=0 cellpadding=4&gt;
-  &lt;tr valign=top&gt;
-    &lt;td colspan=3 align=left&gt;
-      &lt;font size=5 color="White"&gt;&lt;jwc id="insertPageTitle"/&gt;&lt;/font&gt; 
-    &lt;/td&gt;
-  &lt;/tr&gt;
-  &lt;tr valign=top&gt;
-    &lt;td align=right&gt;
-      &lt;font color=white&gt;
-&lt;span jwcid="e"&gt; <co id="reuse.border.e"/>
-        &lt;br&gt;&lt;a jwcid="link"&gt;&lt;span jwcid="insertName"/&gt;&lt;/a&gt; <co id="reuse.border.insertName"/>
-&lt;/span&gt;
-      &lt;/font&gt;
-    &lt;/td&gt;
-    &lt;td rowspan=2 valign=top bgcolor=silver&gt;
-      &lt;span jwcid="renderBody"/&gt; <co id="reuse.border.renderBody"/>
-    &lt;/td&gt;
-    &lt;td rowspan=2 width=4&gt;&lt;/td&gt;
-  &lt;/tr&gt;
-  &lt;tr&gt;
-	&lt;td&gt;&lt;span jwcid="inspector"/&gt;&lt;/td&gt; <co id="reuse.border.showInspector"/>
-  &lt;/tr&gt;
-  &lt;tr&gt;
-    &lt;td colspan=3 height=4&gt;&nbsp;&lt;/td&gt;
-  &lt;/tr&gt;
-&lt;/table&gt;
-&lt;/body&gt;
-&lt;/span&gt;
-</programlisting>
-    </figure>
-    <para>
-      <calloutlist>
-        <callout arearefs="reuse.border.shell">
-          <para>
-	 The <varname>shell</varname> component provides the <sgmltag class="starttag">html</sgmltag> and
-	 <sgmltag class="starttag">head</sgmltag> elements of the response HTML.
-	 </para>
-        </callout>
-        <callout arearefs="reuse.border.body">
-          <para>
-	 The <varname>body</varname> components provides the <sgmltag class="starttag">body</sgmltag> element.
-	 It also provides support for JavaScript related to &Rollover; buttons, such as
-	 the <varname>showInspector</varname> component.
-	 </para>
-        </callout>
-        <callout arearefs="reuse.border.e">
-          <para>
-	 The <varname>e</varname> component is a &Foreach; configured to work through
-	 a list of page names (provided by the engine).
-	 </para>
-        </callout>
-        <callout arearefs="reuse.border.insertName">
-          <para>	 
-The <varname>link</varname> and <varname>insertName</varname>
-components provide the inter-page navigation links.  
-</para>
-        </callout>
-        <callout arearefs="reuse.border.renderBody">
-          <para>
-The <varname>renderBody</varname> component provides the actual content for the page.  The
-<classname>Border</classname> component is used on all three pages, but its a different
-instance on each page, wrapping around different content specific to the page.
-</para>
-        </callout>
-        <callout arearefs="reuse.border.showInspector">
-          <para>
-The <varname>showInspector</varname> component provides the button below the 
-page names (the italicized "i" in a 
-circle) and will be explained shortly.  
-</para>
-        </callout>
-      </calloutlist>
-    </para>
-    <para>
-The <classname>Border</classname> component is designed to be usable in other Tapestry 
-applications, so it doesn't hard 
-code the list of page names.  These must be provided to the component as a parameter. 
-In fact, the 
-application engine provides the list.
-</para>
-    <figure>
-      <title>Border.jwc </title>
-      <programlisting>
-&lt;?xml version="1.0" encoding="UTF-8"?&gt;
-&lt;!DOCTYPE component-specification PUBLIC
-  "-//Howard Lewis Ship//Tapestry Specification 1.3//EN" 
-  "http://tapestry.sf.net/dtd/Tapestry_1_3.dtd"&gt;
-  
-&lt;component-specification class="tutorial.border.Border" allow-informal-parameters="no"&gt;
-  
-  &lt;parameter name="title" java-type="java.lang.String" required="yes"/&gt; <co id="reuse.border.spec.title"/>
-  
-  &lt;parameter name="pages" required="yes"/&gt; <co id="reuse.border.spec.pages"/>
-  
-  &lt;component id="shell" type="&Shell;"&gt;
-    &lt;binding name="title" expression="page.engine.specification.name"/&gt; <co id="reuse.border.spec.shell-title"/>
-  &lt;/component&gt;
-  
-  &lt;component id="insertPageTitle" type="&Insert;"&gt;
-    &lt;inherited-binding name="value" parameter-name="title"/&gt; <co id="reuse.border.spec.insertPageTitle"/>
-  &lt;/component&gt;
-  
-  &lt;component id="body" type="&Body;"/&gt;
-  
-  &lt;component id="e" type="&Foreach;"&gt; <co id="reuse.border.spec.e"/>
-    &lt;inherited-binding name="source" parameter-name="pages"/&gt;
-    &lt;binding name="value" expression="pageName"/&gt;
-  &lt;/component&gt;
-  
-  &lt;component id="link" type="&PageLink;"&gt; <co id="reuse.border.spec.link"/>
-    &lt;binding name="page" expression="pageName"/&gt;
-    &lt;binding name="disabled" expression="disablePageLink"/&gt;
-  &lt;/component&gt;
-  
-  &lt;component id="insertName" type="&Insert;"&gt;
-    &lt;binding name="value" expression="pageName"/&gt;
-  &lt;/component&gt;
-  
-  &lt;component id="renderBody" type="&RenderBody;"/&gt;
-  
-  &lt;component id="inspector" type="&InspectorButton;"/&gt; <co id="resuse.border.spec.InspectorButton"/>
-&lt;/component-specification&gt;
-</programlisting>
-    </figure>
-    <para>
-      <calloutlist>
-        <callout arearefs="reuse.border.spec.title">
-          <para>
-Declares a required parameter for the border, the title that will appear on the 
-page.
-</para>
-        </callout>
-        <callout arearefs="reuse.border.spec.pages">
-          <para>
-Declares a parameter to specify the list of page names.  We don't specify a
-particular type because its pretty unbounded; the framework will accept
-&List;, &Iterator; or a Java array.
-</para>
-        </callout>
-        <callout arearefs="reuse.border.spec.shell-title">
-          <para>
-We then provide the <varname>shell</varname> component with its <varname>title</varname> parameter; 
-this will be the window title.  We 
-use the application's name, with is extracted from the application's specification.
-</para>
-        </callout>
-        <callout arearefs="reuse.border.spec.insertPageTitle">
-          <para>
-The <sgmltag class="starttag">inherited-binding</sgmltag> element allows a component to
-share its parameters.  Here the <classname>Border</classname>'s <varname>title</varname>
-is used as the <varname>value</varname> parameter of the <varname>insertPageTitle</varname> 
-component (an &Insert;).
-Using these 
-inherited bindings simplifies the process of creating complex components from simple ones.
-</para>
-        </callout>
-        <callout arearefs="reuse.border.spec.e">
-          <para>
-Likewise, the <varname>e</varname> component (a &Foreach;) 
-needs as its source the list of pages, which it inherits from 
-the <classname>Border</classname> component's <varname>pages</varname> parameter.  
-It has been configured to store each succesive page 
-name into the <varname>pageName</varname> property of the <classname>Border</classname> component; 
-this is necessary so that the <classname>Border</classname>
-component can determine which page link to disable (it disables the current page since we're 
-already there).
-</para>
-        </callout>
-        <callout arearefs="reuse.border.spec.link">
-          <para>
-The <varname>link</varname> component creates the link to the other pages.  It has a
-<varname>disabled</varname> parameter; which, 
-when true, causes the link component to not create the hyperlink (though it still allows the 
-elements it wraps to render).  The Java class for the <classname>Border</classname> component, 
-<classname>tutorial.border.Border</classname>, provides a method, <function>getDisablePageLink()</function>, 
-that returns true 
-when the <varname>pageName</varname> instance variable (set by the <varname>e</varname> component) 
-matches the current page's name.
-</para>
-        </callout>
-        <callout arearefs="resuse.border.spec.InspectorButton">
-          <para>
-This component will raise the Tapestry Inspector in a new window when clicked.
-</para>
-        </callout>
-      </calloutlist>
-    </para>
-    <para> 
-So, the specification for the <classname>Border</classname> component must identify the 
-parameters it needs, but also the 
-components it uses and how they are configured.
-</para>
-    <figure>
-      <title>Show Inspector Button</title>
-      <mediaobject>
-        <imageobject>
-          <imagedata fileref="images/show-inspector.gif" format="GIF"/>
-        </imageobject>
-      </mediaobject>
-    </figure>
-    <para>
-Clicking on the button raises a second window that describes the current page in the application 
-(this is used when debugging a Tapestry applicaton).  The Inspector is described in the next 
-chapter.
-</para>
-    <para>
-The final mystery is the <varname>wrapped</varname> component.  It is used to render the elements wrapped by the 
-<classname>Border</classname> on the page containing the <classname>Border</classname>. 
-Those elements  will vary from page to page; running 
-the application shows that they are different on the home, credo and legal pages (different text 
-appears in the central light-grey box).  There is no limitation on the elements either:  Tapestry is 
-specifically designed to allow components to wrap other components in this way, without any 
-arbitrary limitations.
-</para>
-    <para>
-This means that the different pages could contain forms, images or any set of components at all, 
-not just static HTML text.
-</para>
-    <para>
-The specification for the home page shows how the title and pages parameters are set.  The title is 
-static, the literal value "Home" (this isn't the best approach if localization is a concern).
-</para>
-    <figure>
-      <title>Home page specification</title>
-      <programlisting>
-&lt;?xml version="1.0" encoding="UTF-8"?&gt;
-&lt;!DOCTYPE page-specification PUBLIC
-  "-//Howard Lewis Ship//Tapestry Specification 1.3//EN" 
-  "http://tapestry.sf.net/dtd/Tapestry_1_3.dtd"&gt;
-
-&lt;page-specification class="org.apache.tapestry.html.BasePage"&gt;
-
-  &lt;component id="border" type="Border"&gt;
-    &lt;static-binding name="title"&gt;Home&lt;/static-binding&gt;
-    &lt;binding name="pages" expression="engine.pageNames"/&gt;
-  &lt;/component&gt;
-
-&lt;/page-specification&gt;
-</programlisting>
-    </figure>
-    <para>  
-The <varname>pages</varname> property is retrieved from the application engine, 
-which implements a <varname>pageNames</varname> JavaBeans property:
-</para>
-    <figure>
-      <title>BorderEngine.java (excerpt)</title>
-      <programlisting><![CDATA[  
-  private static final String[] pageNames =
-    { "Home", "Credo", "Legal" };
-
-  public String[] getPageNames()
-  {
-    return pageNames;
-  }
-]]></programlisting>
-    </figure>
-    <para>
-How did Tapestry know that the type 'Border' 
-corresponded to the specification <filename>/tutorial/border/Border.jwc</filename>?  Only because we defined 
-an alias in the application specification:
-</para>
-    <figure>
-      <title>Border.application (excerpt)</title>
-      <programlisting>
-  &lt;component-alias type="Border" specification-path="/tutorial/border/Border.jwc"/&gt;
-</programlisting>
-    </figure>
-    <para> 
-Had we failed to do this, we would have had to specify the complete resource path, 
-<filename>/tutorial/border/Border.jwc</filename>, on each page's specification, instead of the short alias 
-'Border'.  There is no magic about the existing Tapestry component types 
-(&Insert;, &Foreach;, &PageLink;, etc. ... they each have an 
-alias pre-registered into every application specification.  These short 
-aliases are simply a convienience.
-</para>
-  </chapter>
-  <chapter id="inspector">
-    <title>The Tapestry Inspector</title>
-    <para>
-Unlike scripting systems (such as JavaServer Pages and the like), Tapestry applications are gifted 
-with a huge amount of information about how they are implemented. The same component 
-object model that allows Tapestry to perform so many ordinary functions can be leveraged to 
-provide some unusual functionality.
-</para>
-    <para>
-Run the Border tutorial from the previous chapter and click on the show inspector button (the 
-gear icon in the lower right corner).  A new window will launch, containing the Inspector:
-</para>
-    <figure>
-      <title>Tapestry Inspector</title>
-      <mediaobject>
-        <imageobject>
-          <imagedata fileref="images/Inspector-Spec.jpg" format="JPEG"/>
-        </imageobject>
-      </mediaobject>
-    </figure>
-    <para>
-The Inspector displays live information from the running application; in fact, it is simply another 
-part of the application (the drop-down list of pages will include the Inspector page itself).  The 
-Inspector is most often used to debug HTML generation by viewing the HTML templates.
-It is also very useful in debugging problems where the wrong data is displayed, since it 
-allows the developer to navigate to the particular components and see directly what properties
-are used.
-</para>
-    <section id="inspector.navigation">
-      <title>Navigation</title>
-      <para>
-The inspector allows the user to navigate to any page and any component on a page.
-The drop down list in the upper left corner lists all pages in the application; changing
-the selection immediately updates the Inspector.
-</para>
-      <para>Next to the drop down list is the component path; a list of nested component ids, starting
-with "page" to represent the page.  Clicking on any id in the path changes the information displayed
-below.
-</para>
-      <para>
-Underneath the component navigation tools are a set of tab buttons for the different
-inspector views.
-</para>
-    </section>
-    <section id="inspector.specification">
-      <title>Specification View</title>
-      <figure>
-        <title>Specification View</title>
-        <mediaobject>
-          <imageobject>
-            <imagedata fileref="images/Inspector-Spec.jpg" format="JPEG"/>
-          </imageobject>
-        </mediaobject>
-      </figure>
-      <para>
-The specification view shows several sets of information about the selected component.
-</para>
-      <para>
-First shown are basic properties, such as the specification path and Java class.
-</para>
-      <para>
-Each formal parameter is displayed.  Unbound parameters will show no value in
-the Binding column.
-</para>
-      <para>
-Beneath formal parameters are informal parameters (the <classname>Border</classname>
-component has none, so there is nothing to see).  Informal parameters are
-usually mapped directly to HTML attributes.  They are most often used with
-components that generate a single HTML tag, such as the &ActionLink;,
-&DirectLink; or &TextField; components.
-</para>
-      <para>
-If the component contains assets, they are shown next.
-</para>
-      <para>
-Any helper beans for the component are displayed last.
-</para>
-      <para>
-On the right side is a list of each embedded component and its type.  Clicking
-the component id will navigate to the selected component.
-</para>
-    </section>
-    <section id="inspector.template">
-      <title>Template View</title>
-      <figure>
-        <title>Template View</title>
-        <mediaobject>
-          <imageobject>
-            <imagedata fileref="images/Inspector-Template.jpg" format="JPEG"/>
-          </imageobject>
-        </mediaobject>
-      </figure>
-      <para>
-The template view shows the HTML template for the component.  It shows dynamic tags in bold,
-and makes the component id a clickable link (which navigates to the component, but maintains
-the Template View).  This allows the developer to quickly drill down through the components.
-</para>
-    </section>
-    <section id="inspector.properties">
-      <title>Properties View</title>
-      <figure>
-        <title>Properties View</title>
-        <mediaobject>
-          <imageobject>
-            <imagedata fileref="images/Inspector-Properties.jpg" format="JPEG"/>
-          </imageobject>
-        </mediaobject>
-      </figure>
-      <para>
-The properties view shows persistant properties stored by the page (or any components on
-the page).  Most pages do not store any persistent state (it is more often stored
-in the application's visit object).
-</para>
-    </section>
-    <section id="inspector.engine">
-      <title>Engine View</title>
-      <figure>
-        <title>Engine View</title>
-        <mediaobject>
-          <imageobject>
-            <imagedata fileref="images/Inspector-Engine.jpg" format="JPEG"/>
-          </imageobject>
-        </mediaobject>
-      </figure>
-      <para>
-The engine view shows information about the running application engine, as well as some details
-from the application specification.
-</para>
-      <para>
-Under Operations are two buttons:  the first restarts the application.  The 
-second (when enabled
-	<footnote>
-          <para>
-		By default, the reset service (used by the reset button) is disabled.  
-		To enable it, set the JVM system property
-		<varname>org.apache.tapestry.enable-reset-service</varname> to true.
-		The service is disabled since it is too tempting a target for a denial
-		of service attack.
-		</para>
-        </footnote>) resets the application, which forces a reload of all component specifications
-and HTML templates.  This is useful during development, since it allows for incremental development
-without stopping and restarting the servlet container.
-</para>
-      <para>
-Below the operations is a binary dump of the application engine.  This is useful when
-developing to see how large the serialized state is, and perhaps gleam how it might be trimmed.
-</para>
-      <para>
-Further below (and not visible in the screen shot above), is a dump of the request context.  This
-is that vast amount of data also displayed when an unexpected exception is thrown.
-</para>
-    </section>
-    <section id="inspector.logging">
-      <title>Logging View</title>
-      <figure>
-        <title>Logging View (Level Selection)</title>
-        <mediaobject>
-          <imageobject>
-            <imagedata fileref="images/Inspector-Logging.jpg" format="JPEG"/>
-          </imageobject>
-        </mediaobject>
-      </figure>
-      <para>
-The Logging view allows dynamic integration with the 
-<ulink url="http://jakarta.apache.org/log4j">Log4J</ulink> logging framework.  The top half
-of the page allows the logging level of any category to be
-dynamically set.  This is useful when debugging, since logging output for specific
-classes
-	<footnote>
-          <para>
-			By convention, logging categories match the complete class name
-			of the corresponding class.  All Tapestry logging categories
-			conform to this convention.
-		</para>
-        </footnote>
-can be individually enabled or disable.
-</para>
-      <para>
-The right side is a small second form, allowing new categories to be created.
-This can be useful to make broad changes in logging levels.  For instance, creating
-a category "org.apache.tapestry" would allow the logging level of all Tapestry classes to be
-set in a single place.
-</para>
-    </section>
-  </chapter>
-  <chapter id="workbench">
-    <title>Tapestry Workbench</title>
-    <para>
-The Tapestry tutorial includes an additional application, the Workbench, which is used to show off
-interesting Tapestry components and features.
-</para>
-
-<figure>
-  <title>Workbench</title>
-
-
-<mediaobject>
-        <imageobject>
-          <imagedata format="JPEG" fileref="images/workbench-home.jpg"/>
-        </imageobject>
-      </mediaobject>
-</figure>
-
-    <para>
-The Workbench is divided into several areas, as shown by the tabs across the top of the page.
-Over time, the Workbench and this tutorial document will expand together, and the number of tabs will
-increase.
-</para>
-    <para>
-In addition to the Inspector, the Workbench has a useful feature which can be activated using the checkbox at the bottom.
-When enabled, the complete (and verbose) information available about the request, session and context (normally
-displayed by the Inspector's engine view) is shown at the bottom of each page.
-</para>
-
-<figure>
-	<title>Workbench (Showing Requests)</title>
-<mediaobject>
-        <imageobject>
-          <imagedata format="JPEG" fileref="images/workbench-home-expanded.jpg"/>
-        </imageobject>
-      </mediaobject>
-</figure>
-
-    <para>
-This feature can be very useful if you are interested in exactly how Tapestry forms and links work.
-</para>
-  </chapter>
-  <chapter id="local">
-    <title>Localization</title>
-    <para>
-One of the most powerful and useful features of the Tapestry framework is the way in which it 
-assists with localization of a web application.  This is normally an ugly area in web applications, 
-with tremendous amounts of ad-hoc coding necessary.
-</para>
-    <para>
-Because Tapestry does such a strong job of seperating the presentation of a component (its 
-HTML template) from its control logic (its specification and Java class) it becomes easy for it to 
-perform localization automatically.  It's as simple as providing additional localized HTML 
-templates for the component, and letting the framework select the proper one.
-</para>
-    <para>
-However, the static text of an application, provided by the HTML templates, is not all.
-</para>
-    <para>
-Applications also have assets (images, stylesheets and the like) that must also be localized: that 
-fancy button labeled "Search" is fine for your English clients, but your 
-French clients will require 
-a similar button labeled "Recherche".
-</para>
-    <para>
-Again, the framework assists, because it can look for localized versions of the assets as it runs.
-</para>
-    <para>
-The locale application demostrates this.  It is a very simply application that demonstrates changing 
-the locale of a running application
-	<footnote>
-        <para>
-		All the translations were performed using
-		<ulink url="http://world.altavista.com/">Babelfish</ulink>, and are probably quite laughable to
-		someone who actually speaks the alternate
-		languages.
-		</para>
-      </footnote>
-    </para>
-    <para>
-A demonstration of localization is built into the Workbench, under the <acronym>L10N</acronym>
-      <footnote>
-        <para>
-The "10" refers to the number of letters between 'l' and 'n' in the word 'localization'
-</para>
-      </footnote> tab.
-The page allows the user to select a new language for the application:
-</para>
-    <figure>
-      <title>L10N Page (English)</title>
-      <mediaobject>
-        <imageobject>
-          <imagedata fileref="images/localize-home-english.jpg" format="JPEG"/>
-        </imageobject>
-      </mediaobject>
-    </figure>
-    <para>
-Selecting "German" from the list and clicking the "Change" button brings you to a new page that 
-acknowledges your selection:
-</para>
-    <figure>
-      <title>Locale Changed (German)</title>
-      <mediaobject>
-        <imageobject>
-          <imagedata fileref="images/localize-changed-german.jpg" format="JPEG"/>
-        </imageobject>
-      </mediaobject>
-    </figure>
-    <para>
-Clicking the button (it's labeled "Return" in German) returns you to the L10N page to 
-select a new language:
-</para>
-    <figure>
-      <title>L10N Page (German)</title>
-      <mediaobject>
-        <imageobject>
-          <imagedata fileref="images/localize-home-german.jpg" format="JPEG"/>
-        </imageobject>
-      </mediaobject>
-    </figure>
-    <para>
-The neat thing here is that the <classname>L10N</classname> page has been localized into 
-German as well; it shows 
-equivalent German text, the options in the popup list are in German, and the "Change" button 
-has been replaced with a German equivalent.
-</para>
-
-<section id="locale.template">
-	<title>Localization of HTML Templates</title>
-	
-<para>
-Localization of HTML templates ia automatic.  When Tapestry reads a template, it looks for a localized version of it.
-In this example, in addition to the English language <filename>Localization.html</filename>, three additional files were created:
-<filename>Localization_de.html</filename>, <filename>Localization_fr.html</filename> and <filename>Localization_it.html</filename>.
-</para>
-
-<para>
-Tapestry tracks the locale for each user using either an HTTP Cookie, or the &HttpSession;.  It makes sure that all templates for all components
-on the page use the best available template; it does a standard search.
-</para>
-	
-	</section>
-
-<section id="locale.assets">
-	<title>Localization of Assets</title>
-	
-<para>
-In the L10N pages, there are images that are also localized.  
-Tapestry has a hand in this as well.  As with HTML templates, Tapestry
-searches for matches based on the user's locale. 
-
-</para>
-
-<para>
-Both context assets (assets that are part of the WAR) and private assets (assets that are stored in Java frameworks) can be localized.  This is demonstrated
-on the L10N page:  the "Change" button is a private asset; the "Back" button is a context asset.
-
-</para>
-
-</section>  
-
-  <section id="locale.other-options">
-      <title>Other Options for Localization</title>
-      <para>
-In some cases, different localizations of the a component will be very similar, perhaps having only 
-one or two small snippets of text that is different.
-In those cases, it may be easier on the developer to not localize the HTML template, but to 
-replace the variant text with an 
-&Insert; component.
-</para>
-      <para>
-The page can read a localized strings file (a <filename>.properties</filename> file) to get 
-appropriate localized text.  This 
-saves the bother of maintaining multiple HTML templates.  This is the same approach taken
-by the Apache Struts framework.
-</para>
-      <para>
-All components on a page share the single locale for the page, but each performs its own search 
-for its HTML template.  This means that some components may not have to be localized, if they 
-never contain any static HTML text.  This is sometimes the case for reusable components, even 
-navigational borders.
-</para>
-    </section>
-  </chapter>
-  <chapter id="summary">
-    <title>Further Study</title>
-    <para>
-The preceding chapters cover many of the basic aspects of Tapestry.  You should be comfortable 
-with basic Tapestry concepts:
-</para>
-    <itemizedlist>
-      <listitem>
-        <para>Seperation of presentation, business and control logic
-		</para>
-      </listitem>
-      <listitem>
-        <para>Use of JavaBeans properties as the source of dynamic data
-		</para>
-      </listitem>
-      <listitem>
-        <para>How bindings access JavaBeans properties to provide data to components
-		</para>
-      </listitem>
-      <listitem>
-        <para>How components wrap each other, allowing for the creation of very complicated 
-		components through aggregation
-		</para>
-      </listitem>
-      <listitem>
-        <para>
-		Different types of page properties (transient, dynamic, persistent)
-		</para>
-      </listitem>
-    </itemizedlist>
-    <para>
-Tapestry is capable of quite a bit more.  Also available within the Tapestry Examples package 
-(along with the tutorial code and this document) is the Virtual Library application (Vlib).
-</para>
-    <para>
-Vlib is a full-blown J2EE application, that makes use of Tapestry as its front end, and a set of 
-session and entity Enterprise JavaBeans as its back end.
-</para>
-    <para>
-Vlib also demonstrates some of the other aspects of developing a Tapestry application.  It shows 
-how to create pages that are bookmarkable (meaning that their URL includes enough information 
-to reconstruct them in a subsequent session).  It shows how to handle logging in to an application, 
-and how to protect pages from being accessed until the user is logged in.  It has many specialized 
-reusable components for creating links to pages about books and people.
-</para>
-  </chapter>
-</book>
diff --git a/3.0.4/doc/src/Tutorial/build.xml b/3.0.4/doc/src/Tutorial/build.xml
deleted file mode 100644
index b7dbbd5..0000000
--- a/3.0.4/doc/src/Tutorial/build.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-<?xml version="1.0"?>
-
-<!DOCTYPE project [
-    <!ENTITY docbook-setup SYSTEM "file:../common/docbook-setup.xml">
-]>
-
-<project name="Tutorial Documentation" default="install">
-
-<property name="root.filename" value="Tutorial"/>
-
-&docbook-setup;
-      
-</project>
-
-
diff --git a/3.0.4/doc/src/Tutorial/images/.cvsignore b/3.0.4/doc/src/Tutorial/images/.cvsignore
deleted file mode 100644
index cdf09e9..0000000
--- a/3.0.4/doc/src/Tutorial/images/.cvsignore
+++ /dev/null
@@ -1 +0,0 @@
-*.jbf
diff --git a/3.0.4/doc/src/Tutorial/images/Inspector-Engine.jpg b/3.0.4/doc/src/Tutorial/images/Inspector-Engine.jpg
deleted file mode 100644
index 029228b..0000000
--- a/3.0.4/doc/src/Tutorial/images/Inspector-Engine.jpg
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/src/Tutorial/images/Inspector-Logging.jpg b/3.0.4/doc/src/Tutorial/images/Inspector-Logging.jpg
deleted file mode 100644
index 9f84303a..0000000
--- a/3.0.4/doc/src/Tutorial/images/Inspector-Logging.jpg
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/src/Tutorial/images/Inspector-Properties.jpg b/3.0.4/doc/src/Tutorial/images/Inspector-Properties.jpg
deleted file mode 100644
index 65ca661..0000000
--- a/3.0.4/doc/src/Tutorial/images/Inspector-Properties.jpg
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/src/Tutorial/images/Inspector-Spec.jpg b/3.0.4/doc/src/Tutorial/images/Inspector-Spec.jpg
deleted file mode 100644
index 445f586..0000000
--- a/3.0.4/doc/src/Tutorial/images/Inspector-Spec.jpg
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/src/Tutorial/images/Inspector-Template.jpg b/3.0.4/doc/src/Tutorial/images/Inspector-Template.jpg
deleted file mode 100644
index 34730a6..0000000
--- a/3.0.4/doc/src/Tutorial/images/Inspector-Template.jpg
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/src/Tutorial/images/border-credo.jpg b/3.0.4/doc/src/Tutorial/images/border-credo.jpg
deleted file mode 100644
index ae2c46b..0000000
--- a/3.0.4/doc/src/Tutorial/images/border-credo.jpg
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/src/Tutorial/images/border-home.jpg b/3.0.4/doc/src/Tutorial/images/border-home.jpg
deleted file mode 100644
index 6bef66f..0000000
--- a/3.0.4/doc/src/Tutorial/images/border-home.jpg
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/src/Tutorial/images/dynamic.jpg b/3.0.4/doc/src/Tutorial/images/dynamic.jpg
deleted file mode 100644
index 9ae8298..0000000
--- a/3.0.4/doc/src/Tutorial/images/dynamic.jpg
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/src/Tutorial/images/hangman-guess.jpg b/3.0.4/doc/src/Tutorial/images/hangman-guess.jpg
deleted file mode 100644
index ea8381b..0000000
--- a/3.0.4/doc/src/Tutorial/images/hangman-guess.jpg
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/src/Tutorial/images/hangman-home.jpg b/3.0.4/doc/src/Tutorial/images/hangman-home.jpg
deleted file mode 100644
index db3da23..0000000
--- a/3.0.4/doc/src/Tutorial/images/hangman-home.jpg
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/src/Tutorial/images/hangman-lose.jpg b/3.0.4/doc/src/Tutorial/images/hangman-lose.jpg
deleted file mode 100644
index 4354c40..0000000
--- a/3.0.4/doc/src/Tutorial/images/hangman-lose.jpg
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/src/Tutorial/images/hangman-win.jpg b/3.0.4/doc/src/Tutorial/images/hangman-win.jpg
deleted file mode 100644
index d2ae61b..0000000
--- a/3.0.4/doc/src/Tutorial/images/hangman-win.jpg
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/src/Tutorial/images/hello-world.jpg b/3.0.4/doc/src/Tutorial/images/hello-world.jpg
deleted file mode 100644
index 045ea11..0000000
--- a/3.0.4/doc/src/Tutorial/images/hello-world.jpg
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/src/Tutorial/images/localize-changed-german.jpg b/3.0.4/doc/src/Tutorial/images/localize-changed-german.jpg
deleted file mode 100644
index f6b2ad4..0000000
--- a/3.0.4/doc/src/Tutorial/images/localize-changed-german.jpg
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/src/Tutorial/images/localize-home-english.jpg b/3.0.4/doc/src/Tutorial/images/localize-home-english.jpg
deleted file mode 100644
index b396653..0000000
--- a/3.0.4/doc/src/Tutorial/images/localize-home-english.jpg
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/src/Tutorial/images/localize-home-german.jpg b/3.0.4/doc/src/Tutorial/images/localize-home-german.jpg
deleted file mode 100644
index 67b137f..0000000
--- a/3.0.4/doc/src/Tutorial/images/localize-home-german.jpg
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/src/Tutorial/images/show-inspector.gif b/3.0.4/doc/src/Tutorial/images/show-inspector.gif
deleted file mode 100644
index a1bd2ff..0000000
--- a/3.0.4/doc/src/Tutorial/images/show-inspector.gif
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/src/Tutorial/images/timeout.jpg b/3.0.4/doc/src/Tutorial/images/timeout.jpg
deleted file mode 100644
index 407b62a..0000000
--- a/3.0.4/doc/src/Tutorial/images/timeout.jpg
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/src/Tutorial/images/tutorial-index.png b/3.0.4/doc/src/Tutorial/images/tutorial-index.png
deleted file mode 100644
index b3a3cb5..0000000
--- a/3.0.4/doc/src/Tutorial/images/tutorial-index.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/src/Tutorial/images/workbench-home-expanded.jpg b/3.0.4/doc/src/Tutorial/images/workbench-home-expanded.jpg
deleted file mode 100644
index 35d9e6b..0000000
--- a/3.0.4/doc/src/Tutorial/images/workbench-home-expanded.jpg
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/src/Tutorial/images/workbench-home.jpg b/3.0.4/doc/src/Tutorial/images/workbench-home.jpg
deleted file mode 100644
index 0e54a01..0000000
--- a/3.0.4/doc/src/Tutorial/images/workbench-home.jpg
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/src/Tutorial2/.cvsignore b/3.0.4/doc/src/Tutorial2/.cvsignore
deleted file mode 100644
index 1936cc1..0000000
--- a/3.0.4/doc/src/Tutorial2/.cvsignore
+++ /dev/null
@@ -1 +0,0 @@
-html
diff --git a/3.0.4/doc/src/Tutorial2/Tutorial2.xml b/3.0.4/doc/src/Tutorial2/Tutorial2.xml
deleted file mode 100644
index 99feac9..0000000
--- a/3.0.4/doc/src/Tutorial2/Tutorial2.xml
+++ /dev/null
@@ -1,128 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- $Id$ -->
-<!DOCTYPE book PUBLIC
-  "-//OASIS//DTD DocBook XML V4.1.2//EN"
-  "http://www.oasis-open.org/docbook/xml/4.0/docbookx.dtd" [
-  <!ENTITY % TapestryLinks SYSTEM "../common/TapestryLinks.xml">
-  <!ENTITY chapter-intro SYSTEM "./tutorial-chapter-intro.xml">
-  <!ENTITY chapter-gettingstarted SYSTEM "./tutorial-chapter-gettingstarted.xml">
-  <!ENTITY chapter-intro-examples SYSTEM "./tutorial-chapter-intro-examples.xml">
-  <!ENTITY into-examples-pagelinking SYSTEM "./tutorial-pagelinking.xml">
-  <!ENTITY chapter-forms SYSTEM "./tutorial-chapter-forms.xml">
-  <!ENTITY chapter-builtins SYSTEM "./tutorial-chapter-builtins.xml">
-  <!ENTITY chapter-components SYSTEM "./tutorial-chapter-components.xml">
-  <!ENTITY chapter-localization SYSTEM "./tutorial-localization.xml">
-  <!ENTITY chapter-inspector SYSTEM "./tutorial-inspector.xml">
-  <!ENTITY chapter-required-pages SYSTEM "./tutorial-required-pages.xml">
-  <!ENTITY chapter-assets SYSTEM "./tutorial-assets.xml">
-  %TapestryLinks;
-]>
-<!-- Conventions:
-
-	Component ids are <varname>
-	Java packages and class names are <classname>
-	Tapestry component aliases are <classname>
-
-	In-line code snippets use <function>
-	Property paths and JavaBeans property names used <varname>
--->
-<book>
-  <title>Tapestry Tutorial</title>
-  <bookinfo>
-    <author>
-      <firstname>Neil</firstname>
-      <surname>Clayton</surname>
-    </author>
-    <copyright>
-      <year>2002</year>
-      <holder>Howard M. Lewis Ship</holder>
-    </copyright>
-  </bookinfo>
-
-	&chapter-intro;
-	&chapter-gettingstarted;
-	&chapter-intro-examples;
-    &chapter-required-pages;
-    &chapter-forms;
-    &chapter-builtins;
-    &chapter-assets;
-    &chapter-localization;
-    &chapter-components;
-
-  <chapter id="common-tasks">
-  	<title>Common Tasks With Tapestry</title>
-  	<section id="ctasks-frames">
-  		<title>Using Frames</title>
-  	</section>
-  	<section id="ctasks-themes">
-  		<title>"Themeing" an Application</title>
-  	</section>
-  	<section id="ctasks-layout">
-  		<title>Provinding Alternate Layout</title>
-  	</section>
-  </chapter>
-
-  &chapter-inspector;
-
-  <chapter id="other">
-  	<title>Other Considerations</title>
-  	<section id="other-usingJavadoc">
-  		<title>Using the JavaDoc</title>
-  	</section>
-  	<section id="other-compref">
-  		<title>The Component Reference</title>
-  	</section>
-  	<section id="other-optimizations">
-  		<title>Tapestry Optimizations (pooling, buffering, and so on)</title>
-  	</section>
-  	<section id="other-services">
-  		<title>Tapestry Services</title>
-  	</section>
-  	<section id="other-ejb">
-  		<title>Using EJBs</title>
-  	</section>
-  </chapter>
-
-  <chapter id="best-practices">
-  	<title>Best Peactices</title>
-  	<section id="best-practices-workflow">
-  		<title>Modelling Workflow</title>
-  	</section>
-  	<section id="best-practices-security">
-  		<title>Security</title>
-  	</section>
-  	<section id="best-practices-persistence">
-  		<title>Persistence</title>
-  	</section>
-  	<section id="best-practices-j2ee">
-  		<title>J2EE Integration</title>
-  	</section>
-  </chapter>
-
-  <chapter id="alt-render">
-  	<title>Alternative Rendering (WAP)</title>
-  </chapter>
-
-  <chapter id="integration">
-    <title>Using Tapestry in your environment</title>
-    <section id="integrate-jetty">
-      <title>Integration with Jetty</title>
-    </section>
-    
-    <section id="integrate-jboss3">
-      <title>Integration with JBoss 3.0.x</title>
-    </section>
-    
-    <section id="integrate-tomcat">
-      <title>Integration with Tomcat</title>
-    </section>
-    
-    <section id="integrate-eclipse">
-      <title>Integration with Eclipse (for development)</title>
-    </section>
-  </chapter>
-  
-  <chapter id="resources">
-    <title>Resources</title>
-  </chapter>
-</book>
diff --git a/3.0.4/doc/src/Tutorial2/build.xml b/3.0.4/doc/src/Tutorial2/build.xml
deleted file mode 100644
index 1f956a5..0000000
--- a/3.0.4/doc/src/Tutorial2/build.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-<?xml version="1.0"?>
-
-<!DOCTYPE project [
-    <!ENTITY docbook-setup SYSTEM "file:../common/docbook-setup.xml">
-]>
-
-<project name="Tutorial Documentation" default="install">
-
-<property name="root.filename" value="Tutorial2"/>
-
-&docbook-setup;
-      
-</project>
-
-
diff --git a/3.0.4/doc/src/Tutorial2/images/.xvpics/forms-part1-form.gif b/3.0.4/doc/src/Tutorial2/images/.xvpics/forms-part1-form.gif
deleted file mode 100644
index 3d6e049..0000000
--- a/3.0.4/doc/src/Tutorial2/images/.xvpics/forms-part1-form.gif
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/src/Tutorial2/images/.xvpics/forms-part1-result.gif b/3.0.4/doc/src/Tutorial2/images/.xvpics/forms-part1-result.gif
deleted file mode 100644
index b890c85..0000000
--- a/3.0.4/doc/src/Tutorial2/images/.xvpics/forms-part1-result.gif
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/src/Tutorial2/images/.xvpics/helloworld-example.png b/3.0.4/doc/src/Tutorial2/images/.xvpics/helloworld-example.png
deleted file mode 100644
index 7ff6838..0000000
--- a/3.0.4/doc/src/Tutorial2/images/.xvpics/helloworld-example.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/src/Tutorial2/images/Inspector-Engine.jpg b/3.0.4/doc/src/Tutorial2/images/Inspector-Engine.jpg
deleted file mode 100644
index 029228b..0000000
--- a/3.0.4/doc/src/Tutorial2/images/Inspector-Engine.jpg
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/src/Tutorial2/images/Inspector-Logging.jpg b/3.0.4/doc/src/Tutorial2/images/Inspector-Logging.jpg
deleted file mode 100644
index 9f84303a..0000000
--- a/3.0.4/doc/src/Tutorial2/images/Inspector-Logging.jpg
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/src/Tutorial2/images/Inspector-Properties.jpg b/3.0.4/doc/src/Tutorial2/images/Inspector-Properties.jpg
deleted file mode 100644
index 65ca661..0000000
--- a/3.0.4/doc/src/Tutorial2/images/Inspector-Properties.jpg
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/src/Tutorial2/images/Inspector-Spec.jpg b/3.0.4/doc/src/Tutorial2/images/Inspector-Spec.jpg
deleted file mode 100644
index 445f586..0000000
--- a/3.0.4/doc/src/Tutorial2/images/Inspector-Spec.jpg
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/src/Tutorial2/images/Inspector-Template.jpg b/3.0.4/doc/src/Tutorial2/images/Inspector-Template.jpg
deleted file mode 100644
index 34730a6..0000000
--- a/3.0.4/doc/src/Tutorial2/images/Inspector-Template.jpg
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/src/Tutorial2/images/assets-example.jpg b/3.0.4/doc/src/Tutorial2/images/assets-example.jpg
deleted file mode 100644
index 522069b..0000000
--- a/3.0.4/doc/src/Tutorial2/images/assets-example.jpg
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/src/Tutorial2/images/events-genericlink.gif b/3.0.4/doc/src/Tutorial2/images/events-genericlink.gif
deleted file mode 100644
index 3f692a4..0000000
--- a/3.0.4/doc/src/Tutorial2/images/events-genericlink.gif
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/src/Tutorial2/images/forms-part1-form.gif b/3.0.4/doc/src/Tutorial2/images/forms-part1-form.gif
deleted file mode 100644
index 2460beb..0000000
--- a/3.0.4/doc/src/Tutorial2/images/forms-part1-form.gif
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/src/Tutorial2/images/forms-part1-result.gif b/3.0.4/doc/src/Tutorial2/images/forms-part1-result.gif
deleted file mode 100644
index 5580aa4..0000000
--- a/3.0.4/doc/src/Tutorial2/images/forms-part1-result.gif
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/src/Tutorial2/images/forms-part2-form.gif b/3.0.4/doc/src/Tutorial2/images/forms-part2-form.gif
deleted file mode 100644
index 679165c..0000000
--- a/3.0.4/doc/src/Tutorial2/images/forms-part2-form.gif
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/src/Tutorial2/images/forms-part3-date-result.gif b/3.0.4/doc/src/Tutorial2/images/forms-part3-date-result.gif
deleted file mode 100644
index 9b828c8..0000000
--- a/3.0.4/doc/src/Tutorial2/images/forms-part3-date-result.gif
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/src/Tutorial2/images/forms-part3-result.gif b/3.0.4/doc/src/Tutorial2/images/forms-part3-result.gif
deleted file mode 100644
index 1aabe2b..0000000
--- a/3.0.4/doc/src/Tutorial2/images/forms-part3-result.gif
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/src/Tutorial2/images/forms-part4-result.gif b/3.0.4/doc/src/Tutorial2/images/forms-part4-result.gif
deleted file mode 100644
index 128a91f..0000000
--- a/3.0.4/doc/src/Tutorial2/images/forms-part4-result.gif
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/src/Tutorial2/images/helloworld-example.png b/3.0.4/doc/src/Tutorial2/images/helloworld-example.png
deleted file mode 100644
index 2590f97..0000000
--- a/3.0.4/doc/src/Tutorial2/images/helloworld-example.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/src/Tutorial2/images/localize-changed-german.jpg b/3.0.4/doc/src/Tutorial2/images/localize-changed-german.jpg
deleted file mode 100644
index f6b2ad4..0000000
--- a/3.0.4/doc/src/Tutorial2/images/localize-changed-german.jpg
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/src/Tutorial2/images/localize-home-english.jpg b/3.0.4/doc/src/Tutorial2/images/localize-home-english.jpg
deleted file mode 100644
index b396653..0000000
--- a/3.0.4/doc/src/Tutorial2/images/localize-home-english.jpg
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/src/Tutorial2/images/localize-home-german.jpg b/3.0.4/doc/src/Tutorial2/images/localize-home-german.jpg
deleted file mode 100644
index 67b137f..0000000
--- a/3.0.4/doc/src/Tutorial2/images/localize-home-german.jpg
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/src/Tutorial2/images/pagelinking-actions.png b/3.0.4/doc/src/Tutorial2/images/pagelinking-actions.png
deleted file mode 100644
index a499c64..0000000
--- a/3.0.4/doc/src/Tutorial2/images/pagelinking-actions.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/src/Tutorial2/images/pagelinking-home.png b/3.0.4/doc/src/Tutorial2/images/pagelinking-home.png
deleted file mode 100644
index 8912c4e..0000000
--- a/3.0.4/doc/src/Tutorial2/images/pagelinking-home.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/src/Tutorial2/images/pages-exception.jpg b/3.0.4/doc/src/Tutorial2/images/pages-exception.jpg
deleted file mode 100644
index 8fb50e0..0000000
--- a/3.0.4/doc/src/Tutorial2/images/pages-exception.jpg
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/src/Tutorial2/images/pages-newexception.jpg b/3.0.4/doc/src/Tutorial2/images/pages-newexception.jpg
deleted file mode 100644
index 47eb93e..0000000
--- a/3.0.4/doc/src/Tutorial2/images/pages-newexception.jpg
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/src/Tutorial2/images/pages-stalelink.jpg b/3.0.4/doc/src/Tutorial2/images/pages-stalelink.jpg
deleted file mode 100644
index cd87f9a..0000000
--- a/3.0.4/doc/src/Tutorial2/images/pages-stalelink.jpg
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/src/Tutorial2/images/pages-stalesession.jpg b/3.0.4/doc/src/Tutorial2/images/pages-stalesession.jpg
deleted file mode 100644
index 3c30e69..0000000
--- a/3.0.4/doc/src/Tutorial2/images/pages-stalesession.jpg
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/src/Tutorial2/images/tapestry-dev-env.png b/3.0.4/doc/src/Tutorial2/images/tapestry-dev-env.png
deleted file mode 100644
index ce0e1c8..0000000
--- a/3.0.4/doc/src/Tutorial2/images/tapestry-dev-env.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/src/Tutorial2/images/tutorial-index.png b/3.0.4/doc/src/Tutorial2/images/tutorial-index.png
deleted file mode 100644
index c2f61df..0000000
--- a/3.0.4/doc/src/Tutorial2/images/tutorial-index.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/src/Tutorial2/tutorial-assets.xml b/3.0.4/doc/src/Tutorial2/tutorial-assets.xml
deleted file mode 100644
index 3151cf2..0000000
--- a/3.0.4/doc/src/Tutorial2/tutorial-assets.xml
+++ /dev/null
@@ -1,145 +0,0 @@
-<chapter id="assets">
-    <title>Assets</title>
-    <para>
-        This section will introduce you to the way in which Tapestry allows applications to manage
-        images, resources, external stylesheets and generally anything else non-Java-code-related that you might want to
-        make available within your application.  The section provides examples of how to use a simple
-        context asset (you'll learn what this is in just a moment) within a page.
-    </para>
-    <para>
-        In general, the management of assets is often related to the localization of an application. Further information
-        about localization is found in
-        <xref linkend="localization"/>.
-    </para>
-    <section id="assets-what">
-        <title>What is an Asset?</title>
-        <para>
-            In Tapestry, external resources (resources not managed by Java code) are called Assets.
-            Assets come in three flavors:  external, context and private.
-        </para>
-        <para>
-            <emphasis>External</emphasis> assets live at an arbitrary URL.
-            <emphasis>Context</emphasis> assets use a URL within the
-            servlet context hosting the Tapestry application, and are deployed
-            within the same Web Application Archive (WAR) as the application.
-            <emphasis> Private</emphasis> assets come from the Java classpath and are
-            resources not normally visible to the web server.
-        </para>
-        <para>
-            Private assets allow for easy deployment because the assets are
-            packaged with the HTML templates and Java code of the application,
-            inside a Java Archive (JAR) file.
-            Private assets support re-usability; a re-usable component may be
-            packaged with supporting assets (typically, image files) and used in any
-            Tapestry application without change, and without having to locate, extract or
-            otherwise fiddle with those assets.
-        </para>
-        <para>
-            The Tapestry framework provides two ways of exposing the assets to the client web browser.
-        </para>
-        <para>
-            First, it provides a service that will access the asset dynamically.
-            The URL encodes the application servlet and the resource to download,
-            and Tapestry framework code will pump the bytes down to the client web browser.
-            This is the default behavior (and is most useful during development).
-        </para>
-        <para>
-            The second method involves copying the asset out to a directory visible
-            to the web server, and creating a URL for it in its final location.
-            This requires some extra configuration of the application.
-            This method also has some implications when deploying new versions of the web application. These
-            implications are not covered here (see the developers guide).
-        </para>
-    </section>
-    <section id="assets-definition">
-        <title>Defining and Using Assets</title>
-        <para>
-            This example code will show the use of a context asset.  Assets of this type
-            are visible by the browser, through some well defined URL. That is, they
-            are effectively public.  The example code for this section can be found in
-            <filename>c:\Tapestry-x.x\examples\Tutorial\src\tutorial\assets</filename>.
-        </para>
-        <para>
-            Our goal in this example is to show a simple page, with a heading. The page itself
-            is completely useless, since it has no content (apart from the heading) and no
-            behavior (you can't do anything).  Buy hey. It's an example, right? Good!
-        </para>
-        <para>
-            As usual, we'll start with the HTML template:
-        </para>
-        <figure>
-            <title>Asset Example - HTML Template</title>
-            <programlisting>
-&lt;html&gt;
-&lt;head&gt;
-	&lt;title&gt;Assets Example&lt;/title&gt;
-&lt;/head&gt;
-&lt;body&gt;
-
-    &lt;table cellpadding="8" valign="middle"&gt;
-        &lt;tr&gt;
-         &lt;td&gt;
-            &lt;a href="http://tapestry.sourceforge.net/"&gt;
-                &lt;img jwcid="poweredbyImage" alt="View Tapestry Home"/&gt;
-            &lt;/a&gt;
-         &lt;/td&gt;
-         &lt;td&gt;
-              &lt;font color="navy" size="+2"&gt;&lt;b&gt;&lt;i&gt;Powered by Tapestry&lt;/i&gt;&lt;/b&gt;&lt;/font&gt;
-         &lt;/td&gt;
-        &lt;/tr&gt;
-    &lt;/table&gt;
-
-&lt;/body&gt;
-&lt;/html&gt;
-            </programlisting>
-        </figure>
-
-        <para>
-            And now, the page specification:
-        </para>
-
-        <figure>
-            <title>Asset Example - Specification</title>
-            <programlisting>
-&lt;page-specification class="net.sf.tapestry.html.BasePage"&gt;
-
-  &lt;component id="poweredbyImage" type="Image"&gt;
-    &lt;binding name="image" expression="assets.imageAsset"/&gt;
-  &lt;/component&gt;
-
-  &lt;context-asset name="imageAsset" path="/images/poweredby.jpg"/&gt;
-
-&lt;/page-specification&gt;
-            </programlisting>
-        </figure>
-
-        <para>
-            OK - there we have it. There is no Java object, because there is no
-            functionality nor property bindings that require one (so we can just
-            use the provided <emphasis>net.sf.tapestry.html.BasePage</emphasis>.
-        </para>
-        <para>
-            The &Image; component itself requires only a single parameter, named
-            <varname>image</varname>. This should be some kind of asset.  Tapestry allows you
-            to define fixed assets in the specification, which is what we have done here.
-            The context-asset declaration gives a name to a relative URL. That is,
-            the real name will end up being encoded into the HTML
-            as <varname>/tutorial/images/poweredby.jpg</varname>. As you can see,
-            Tapestry takes care of adding the context specific part to the front
-            of the URL, so that you don't have to.
-        </para>
-        <para>
-            If you have compiled the tutorial code and have a server running, you should be able
-            to click on the assets example and see a screen similar to this:
-        </para>
-
-        <figure>
-            <title>Context Asset Demonstration</title>
-            <mediaobject>
-               <imageobject>
-                  <imagedata format="JPEG" fileref="images/assets-example.jpg"/>
-               </imageobject>
-            </mediaobject>
-        </figure>
-    </section>
-</chapter>
\ No newline at end of file
diff --git a/3.0.4/doc/src/Tutorial2/tutorial-chapter-builtins.xml b/3.0.4/doc/src/Tutorial2/tutorial-chapter-builtins.xml
deleted file mode 100644
index 533bd36..0000000
--- a/3.0.4/doc/src/Tutorial2/tutorial-chapter-builtins.xml
+++ /dev/null
@@ -1,361 +0,0 @@
-<chapter id="built-ins">
-	<title>Using the Built-In Components</title>
-
-    <para>
-        This section will provide examples on a couple of basis non-visual built in components,
-        that are very, very useful.  The &Foreach; component (as you might have guessed from its name)
-        is used to iterator over a number of element. The other components are used to respond to
-        various user events, whether via a link or through a form button.
-    </para>
-
-  	<section id="builtin-foreach">
-  		<title>Foreach</title>
-		<para>The &Foreach; component can be used to iterate over some collection of items. 
-		The supplied collection can be either a <varname>java.util.Collection</varname>, <varname>java.lang.Iterator</varname>, 
-		an array of Objects, or a even a single Object (which is treated as a singleton collection). The source parameter 
-		may even be null, in which case the Foreach's body is never renderred.</para>
-		
-		<para>For each element in the collection, &Foreach; will render whatever is enclosed in the element body. 
-		For example, let us assume the following Java code exists on the page:</para>
-		
-		<figure>
-			<title>Foreach Example Code</title>
-			<programlisting>
-public Collection getPeople() {
-	... code here ...
-}			
-			</programlisting>				
-		</figure>
-
-		<para>This code would return zero or more instances of Person, defined to be:</para>
-		<figure>
-			<title>Interface Declaration, for Person</title>
-			<programlisting>
-interface Person {
-	String getFirstName();
-	String getLastName();
-	int getHeight();
-}
-			</programlisting>				
-		</figure>
-		
-		<para>We would use the following HTML Template, to show all people in a table:</para>
-		<figure>
-			<title>Example Template, for Person objects</title>
-			<programlisting>
-&lt;table&gt;
-	&lt;span jwcid="people"&gt;
-		&lt;tr&gt;&lt;td&gt;&lt;span jwcid="name"/&gt;&lt;/td&gt;&lt;/tr&gt;
-		&lt;tr&gt;&lt;td&gt;&lt;span jwcid="lastname"/&gt;&lt;/td&gt;&lt;/tr&gt;
-		&lt;tr&gt;&lt;td&gt;&lt;span jwcid="height"/&gt; cm&lt;/td&gt;&lt;/tr&gt;
-	&lt;/span&gt;
-&lt;/table&gt;
-			</programlisting>				
-		</figure>
-
-		<para>Notice that the <varname>people</varname> element wraps the other elements.
-		With the &Foreach; component, it is valid (and required if you want to do anything useful :-)
-		to have content inside the element. The page specification will include the following:</para>
-		<figure>
-			<title>Component Definition for people iterator</title>
-			<programlisting>
-&lt;component id="people" type="Foreach"&gt;
-	&lt;binding name="source" expression="getPeople()"/&gt;
-&lt;/component&gt;
-
-&lt;component id="name" type="InsertText"&gt;
-	&lt;binding name="value" expression="components.people.value.name"/&gt;
-&lt;/component&gt;
-
-&lt;component id="name" type="InsertText"&gt;
-	&lt;binding name="value" expression="components.people.value.lastname"/&gt;
-&lt;/component&gt;
-
-&lt;component id="name" type="InsertText"&gt;
-	&lt;binding name="value" expression="components.people.value.height"/&gt;
-&lt;/component&gt;
-			</programlisting>				
-		</figure>
-
-		<para>This definition binds our iterator in the HTML template, 
-		such that it uses the vale of <varname>getPeople()</varname> in the page class as the source of the collection.
-		In order to show the values, we use standard &InsertText; components - since for this example we just want to display the information.
-		</para>
-
-		<para>Note the expression being used here, which is rougly equivalent to the following Java code:</para>
-		<figure>
-			<title>Foreach Java Code (or thereabouts)</title>
-			<programlisting>
-Map components = getComponents();
-Foreach fe = (Foreach)components.get("people");
-Person person = (Person)fe.getValue(); 
-			</programlisting>				
-		</figure>
-
-		<para>What is happening, is that for every object in the source collection, 
-		the &Foreach; component is making it available via it's <varname>getValue()</varname> method. 
-		We can use this to our advantage in the component specification, and reference it directly - as shown above.</para>
-		
-		<para>This strategy will work for simple cases where all you need to do is access 
-		properties of the individual components during the iteration. 
-		If you require more than this, you can request that the Foreach component 'set' the current value on some other
-		object, for every object in the source collection. To do this, specify an expression for the value property:</para>
-		<figure>
-			<title>Example 'value' property for a Foreach component spec</title>
-			<programlisting>
-&lt;binding name="value" expression="currentPerson"/%gt;
-			</programlisting>				
-		</figure>
-
-		<para>Here, it is expected that there is the following Java code on the page object:</para>
-		<figure>
-			<title>Java code, called by Foreach component</title>
-			<programlisting>
-public void setCurrentPerson(Person value) {
-// ... Store variable, or some other processing...
-}
-			</programlisting>				
-		</figure>
-
-		<para>The Foreach component will call this method for every element that it iterates over in the source collection.
-		Of course, this approach would typically assume that the <varname>name</varname>, <varname>lastname</varname>
-		and <varname>height</varname> values were bound a little differently. 
-		For example, if the collection contained only entity identifiers, then the <varname>setCurrentPerson()</varname>
-		method would use these to lookup the real data from a database or other persistent store. 
-		This information would then be made available via a method such as:</para>
-
-		<figure>
-			<title>Java code, called by Foreach component to get the value</title>
-			<programlisting>
-public Person getPerson() {
-// make result of the setCurrentPerson() call available here
-}
-			</programlisting>				
-		</figure>
-		<para>The component specification expressions would then read:</para>
-		<figure>
-			<title>Modified component specifications</title>
-			<programlisting>
-&lt;component id="name" type="InsertText"&gt;
-	&lt;binding name="value" expression="person.name"/&gt;
-&lt;/component&gt;
-
-&lt;component id="name" type="InsertText"&gt;
-	&lt;binding name="value" expression="person.lastname"/&gt;
-&lt;/component&gt;
-
-&lt;component id="name" type="InsertText"&gt;
-	&lt;binding name="value" expression="person.height"/&gt;
-&lt;/component&gt;
-			</programlisting>				
-		</figure>
-
-		<para>The expressions here would retrieve the name (or other relevant attribute) of the Person in question 
-		from the <emphasis role="bold">Pages</emphasis> copy of the Person instance.</para>  		
-  	</section>
-  	
-  	<section id="builtin-events">
-  		<title>Handling Events</title>
-  		<para>There are two primary ways by which you can handle user events in Tapestry, the Submit component and Link components.
-  		The primary difference from a user point of view is the way in which they appear.  
-  		Submit components appears a HTML submit buttons and Link components appear as simple HTML links.
-  		Submit components were covered in <xref linkend="forms"/> and so will not be covered in further detail in this tutorial. 
-  		Please see the &Submit; documentation if you require more information.</para>
-  		
-  		<para>Link components come in a variety of forms:</para>
-  		<itemizedlist>
-  			<listitem>GenericLink</listitem>
-  			<listitem>PageLink</listitem>
-  			<listitem>ActionLink</listitem>
-  			<listitem>DirectLink</listitem>
-  		</itemizedlist>
-  		
-  		<para>&GenericLink; is used to construct a simple link to some resource.
-  		The resource is not Tapestry specific (i.e: the link can point to anything). GenericLink will render 
-  		it's body, and so an HTML template along these lines:</para>
-
-		<figure>
-			<title>Example specification for GenericLink</title>
-			<programlisting>
-&lt;h1&gt;A simple Generic Link&lt;/h1&gt;
-Click &lt;span jwcid="google"&gt;here&lt;/span&gt; to perform a search at Google.
-			</programlisting>				
-		</figure>
-		<para>would produce the following when rendered:</para>
-
-		<figure>
-			<title>Example GenericLink usage</title>
-			<mediaobject>
-				<imageobject>
-					<imagedata fileref="images/events-genericlink.gif" format="GIF"/>
-				</imageobject>
-			</mediaobject>
-		</figure>
-
-		<para>The other types of link mentioned here are Tapestry specific - that is, their parameters name
-		Tapestry resources, which are then coverted into the correct URL by Tapestry itself.
-		The &PageLink; component was used in the very first example, <xref linkend="getting-started"/> and 
-		so no example code or output is provided here. If you examine the URLs generated by that 
-		example, note that a correct Tapestry URL has been onstructed for you which also includes any
-		 container specific context information as well.
-		</para>
-		
-		<para>The last types of links introduced here are &ActionLink; and &DirectLink;. These components are 
-		very similar in that they both provide the ability for a user's action to be directed to a method on
-		some object (via a listener). The main difference between the two is that one uses the Direct service,
-		and the other the Action service. Before going further, a quick explanation is in order:<footnote><para>For
-		more detailed information, please see the Developer Reference</para></footnote></para>
-		
-		<para>Both Action and Direct services are used to handle triggering of events, as mentioned previously.
-		The Direct service will invoke the listener <emphasis>just prior</emphasis> to rendering whereas the Action service will invoke the 
-		listener <emphasis>during</emphasis> rendering. </para>
-		
-		<para>To clarify (because it took the author a reasonable amount of time to appreciate the difference between the two services),
-		the action service will call the listener during the rendering phase. As a result, the page will be in the exact state it was, when the
-		ActionLink was rendered.  The Direct service is much simpler, the listener is called before any page rendering takes place. So, why
-		is this important?</para>
-		
-		<para><emphasis role="bold">If your listener relies component and object state that changes during the render cycle,
-		you must use the action service</emphasis></para>
-		
-		<para>Lets look at how these components are used. Both provide the same properties such as <varname>listener</varname>, 
-		and <varname>disabled</varname>. DirectLink provides an additional property called <varname>parameters</varname>
-		which is used to set parameter values in the request, for use in the handler. Apart from this, their usage within
-		the component specification is identical.</para>
-		
-		<para>To demonstrate, we will create two links, using both the action and direct services.  The direct service link will
-		pass in a parameter to the listener method. In these simple examples, there will not be sufficient complexity
-		to examine the differences between the two services.<footnote><para>if you find yourself getting StaleLinkExceptions
-		using DirectLink (or a form component setup in "direct" mode) you should examine your page dependencies,
-		and if any processing is dependent upon page state then change to using the action service</para></footnote></para>
-
-		<para>For this example, we must set the <varname>stateful</varname> to false, since we will not
-		be using a visit object and creating any kind of session.  Here is the HTML, component specification
-		and java code for this example:</para>
-
-		<figure>
-			<title>Direct/ActionLink example HTML Template</title>
-			<programlisting>
-&lt;h1&gt;A simple Generic Link&lt;/h1&gt;
-Click &lt;span jwcid="google"&gt;here&lt;/span&gt; to perform a search at Google.
-
-&lt;h1&gt;ActionLink and DirectLink&lt;/h1&gt;
-&lt;p&gt;
-This &lt;span jwcid="direct"&gt;direct link&lt;/span&gt; will get the time of day,
-save it in a variable of the page, and show it underneath this paragraph
-using a InsertText component.
-&lt;/p&gt;
-
-&lt;p&gt;
-This &lt;span jwcid="action"&gt;action link&lt;/span&gt; will do the same thing
-as the direct link (it uses the same listener method). If you would like
-to observe the difference in processing, run this example from a console
-prompt with debug enabled. The listener method will output the string
-&lt;pre&gt;"TIME LISTENER METHOD CALLED"&lt;/pre&gt;. You will notice 
-the place in the render cycle in which the method is called is different
-depending upon the link type that you click.
-&lt;/p&gt;
-
-&lt;p&gt;
-&lt;center&gt;
-&lt;span jwcid="timeofday"&gt;Time of day (or nothing) will go here&lt;/span&gt;
-&lt;/center&gt;
-
-&lt;/body&gt;
-&lt;/html&gt;
-			</programlisting>				
-		</figure>
-		
-		<figure>
-			<title>Direct/ActionLink component specification</title>
-			<programlisting>
-&lt;page-specification class="tutorial.events.Home"&gt;
-
-	&lt;component id="google" type="GenericLink"&gt;
-		&lt;static-binding name="href"&gt;http://www.google.com&lt;/static-binding&gt;
-	&lt;/component&gt;
-	
-	&lt;component id="direct" type="DirectLink"&gt;
-		&lt;binding name="listener" expression="listeners.timeListener"/&gt;
-		&lt;binding name="stateful" expression="false"/&gt;
-	&lt;/component&gt;
-	
-	&lt;component id="action" type="ActionLink"&gt;
-		&lt;binding name="listener" expression="listeners.timeListener"/&gt;
-		&lt;binding name="stateful" expression="false"/&gt;
-	&lt;/component&gt;
-	
-	&lt;component id="timeofday" type="InsertText"&gt;
-		&lt;binding name="value" expression="pageTime"/&gt;
-	&lt;/component&gt;
-&lt;/page-specification&gt;	
-			</programlisting>				
-		</figure>
-
-		<figure>
-			<title>Direct/ActionLink Java code</title>
-			<programlisting>
-/**
- * Example code for the event handling section of the tutorial
- * @author neil clayton
- */
-public class Home extends BasePage {
-	/**
-	 * Called by both the "direct" and "action" components
-	 */
-	public void timeListener(IRequestCycle cycle) throws RequestCycleException {
-		System.err.println("TIME LISTENER METHOD CALLED");
-		pageTime = DateFormat.getDateTimeInstance().format(new Date());
-	}
-	
-	public String getPageTime() {
-		return pageTime;
-	}
-	
-	/**
-	 * @see net.sf.tapestry.AbstractPage#detach()
-	 */
-	public void detach() {
-		pageTime = null;
-	}
-
-	private String pageTime;
-}
-			</programlisting>				
-		</figure>
-
-		<para>The output with debug enabled when using both the direct and action services is shown below.
-		As you can see, the direct link service is calling the method well before anything happens with the
-		components on the page. The action service on the other hand is calling the method <emphasis>just
-		before</emphasis> it renders the &InsertText; component - which is midway through it's render cycle.</para>
-		<figure>
-			<title>Example debug ouput for DirectLink call</title>
-			<programlisting>
- ...
- [java] AbstractDocumentParser [DEBUG] Resolved -//Howard Lewis Ship//Tapestry Specification 1.3//EN as org.xml.sax.InputSource@7a5a19 (for Tapestry_1_3.dtd)
- [java] TIME LISTENER METHOD CALLED
- [java] DefaultSpecificationSource [DEBUG] Parsing library specification /net/sf/tapestry/Framework.library
- ...
-			</programlisting>				
-		</figure>
-		
-		<figure>
-			<title>Example debug ouput for ActionLink call</title>
-			<programlisting>
- ...
- [java] AbstractDocumentParser [DEBUG] Resolved -//Howard Lewis Ship//Tapestry Specification 1.3//EN as org.xml.sax.InputSource@59a34 (for Tapestry_1_3.dtd)
- [java] TIME LISTENER METHOD CALLED
- [java] DefaultSpecificationSource [DEBUG] Parsing component specification /net/sf/tapestry/html/InsertText.jwc
- ...
-			</programlisting>				
-		</figure>
-		
-		<para>
-		Finally, it is worth mentioning that these other Tapestry specific link types allow parameters such as 
-		<varname>disabled</varname>, 
-		<varname>scheme</varname>, <varname>port</varname> and <varname>anchor</varname>.
-		Please see either the Component Reference, Developer Reference or JavaDoc API for further
-		information on these parameters</para>
-  	</section>
-</chapter>
-
diff --git a/3.0.4/doc/src/Tutorial2/tutorial-chapter-components.xml b/3.0.4/doc/src/Tutorial2/tutorial-chapter-components.xml
deleted file mode 100644
index b3fbf85..0000000
--- a/3.0.4/doc/src/Tutorial2/tutorial-chapter-components.xml
+++ /dev/null
@@ -1,301 +0,0 @@
-<chapter id="components">
-  	<title>Creating Components</title>
-  		<para>
-  		One of the major features of Tapestry, that makes complex web development easier, is the ability to 
-  		create custom components that can be reused across the application (or in fact, in other applications, 
-  		via the use of Libraries). </para>
-  		
-  		<para>Components are similar to Pages, in that they can have an HTML template, 
-  		a specification and a Java object. However there is a crucial difference - components can expose properties, whereas Pages cannot.
-  		Other than this, components take the same form. They consist of an HTML template (optional), component specification and java object.
-  		The java object "backing" the component typically derives from AbstractComponent.  AbstractComponent 
-  		in turn implements IRender, which simply renders all components that are declared within the component specification.
-		</para>
-	
-	<para>You will find all code for this example within
-	the 'components' package of the tutorial.</para>
-  	
-  	<section id="components-example">
-  		<title>Building an Example</title>
-		<para>
-		The sample below is for a tutorial component, called <emphasis>ArrayViewer</emphasis>. 
-		This component can take any Java array, 
-		and render it as an HTML table.  In real applications, the same can be done using alternative components that 
-		exist in the framework (such as <varname>TableView</varname>). This example exists to show simply how easy it is to build a component.</para>
-		
-		<para>
-		By the end of this example, you should have learnt the basics of building a component with various properties.
-		</para>
-		
-		<para>First, we shall define the HTML template:</para>
-		<figure>
-			<title>HTML for example component</title>
-			<programlisting>
-&lt;span jwcid="$content$"&gt;
-	&lt;table border=1 width="95%"&gt;
-		&lt;tr&gt;&lt;td align="center"&gt;
-		
-			&lt;table&gt;
-				&lt;tr&gt;&lt;th&gt;
-					&lt;span jwcid="heading"/&gt;
-				&lt;/th&gt;&lt;/tr&gt;
-			&lt;/table&gt;
-			
-		&lt;/td&gt;&lt;/tr&gt;
-
-		&lt;tr&gt;&lt;td&gt;		
-		
-			&lt;table border=1 width="100%"&gt;
-				&lt;span jwcid="elements"&gt;
-					&lt;tr&gt;
-						&lt;span jwcid="cells"&gt;
-							&lt;td&gt;
-								&lt;span jwcid="cell"/&gt;
-							&lt;/td&gt;
-						&lt;/span&gt;
-					&lt;/tr&gt;
-				&lt;/span&gt;
-			&lt;/table&gt;
-			
-		&lt;/td&gt;&lt;/tr&gt;		
-	&lt;/table&gt;
-&lt;/span&gt;
-			</programlisting>				
-		</figure>
-
-		<para>This template defines a table skeleton, where the intention is to enable the rendering of headings 
-		and row data by the component itself.  Here, we intend to show a single row at the top of the component
-		as a heading <footnote><para>At this point, we are not going to consider aspects such as custom renderers</para></footnote>
-		, and then some number of rows (the <varname>
-		elements</varname> component) of data. Each row of data is rendered using another &Foreach; component - <varname>
-		cells</varname>. Finally we output the value of each cell using the <varname>cell</varname>, which you
-		will see below defined as being of type &InsertText;. 
-		</para>
-
-		<para>You may have noticed the span element with a jwcid of <emphasis>$content$</emphasis>. When reading the 
-		template, Tapestry will ignore anything <emphasis>outside</emphasis> of the &lt;span jwcid="$content$"&gt; element.
-		For example, it is then possible to write a template like this:</para>
-
-		<figure>
-			<title>Sample usage of $content$</title>
-			<programlisting>
-&lt;html&gt;
-	&lt;head&gt;&lt;title&gt;Your Component&lt;/title&gt;&lt;/head&gt;
-	&lt;body&gt;			
-		&lt;span jwcid="$content$"&gt;
-			&lt;table border=1 width="95%"&gt;
-			... other stuff here ...
-			&lt;/table&gt;
-		&lt;/span&gt;
-	&lt;/body&gt;
-&lt;/html&gt;
-			</programlisting>				
-		</figure>
-		
-		<para>and still have it work properly in Tapestry (that is, without the other elements that exist outside of the content span tag).
-		Now for the component specification:</para>
-
-		<figure>
-			<title>Component Specfication for example component</title>
-			<programlisting>
-&lt;component-specification class="tutorial.components.ArrayViewer" allow-body="no" allow-informal-parameters="yes"&gt;
-
-    &lt;parameter
-        name="source"
-        java-type="java.lang.Object"
-        direction="in"
-        required="yes"&gt;
-    &lt;/parameter&gt;
-    
-    &lt;parameter
-        name="heading"
-        java-type="java.lang.String"
-        direction="in"
-        required="no"&gt;
-    &lt;/parameter&gt;
-
-	&lt;component id="elements" type="Foreach"&gt;
-		&lt;inherited-binding name="source" parameter-name="source"/&gt;
-	&lt;/component&gt;	
-	
-	&lt;component id="cells" type="Foreach"&gt;
-		&lt;binding name="source" expression="components.elements.value"/&gt;
-	&lt;/component&gt;
-	
-	&lt;component id="heading" type="InsertText"&gt;
-		&lt;binding name="value" expression="getHeading()"/&gt;
-	&lt;/component&gt;
-	
-	&lt;component id="cell" type="InsertText"&gt;
-		&lt;binding name="value" expression="components.cells.value"/&gt;
-	&lt;/component&gt;
-
-&lt;/component-specification&gt;
-			</programlisting>				
-		</figure>
-
-		<para>The first thing to note is that this specification is named <filename>ArrayViewer.jwc</filename> and
-		not <filename>ArrayViewer.page</filename>. In Tapestry, all component specifications end with the
-		<filename>.jwc</filename> suffix.</para>
-		
-		<para>At the top, you will see two new parameters <varname>allow-body</varname> and <varname>
-		allow-informal-parameters</varname>. The former controls whether or not Tapestry will allow the
-		component to have a body. If you specify <varname>no</varname> here, then Tapestry will strip
-		any content inserted into the body of the element when the component is rendered. If you specify
-		<varname>yes</varname> then Tapestry will process the body, including any contained comonents</para>
-
-		<para>The <varname>parameter</varname> declarations define the source data (which is required) as well as an 
-		optional <varname>heading</varname> for the generated table. 
-		If a value for <varname>heading </varname> is omitted, the <varname>getHeading()</varname> method will
-		return a default heading value</para>
-
-		<para>The source data is expected to be some kind of collection that a &Foreach; component
-		can handle. This is not a Tapestry requirement. The only reason is that this example uses the 
-		<varname>source</varname> value directly within a &Foreach; component itself. 
-		In this example, we will pass a multi-dimensional array. The example is intentionally simple and 
-		the component does not check to see if each "row" of data has the same width.</para>
-
-		<para>The component code itself can be very simple, since we have bound everything
-		apart from the header text using OGNL expressions.  The <varname>inherited-binding</varname>
-		is used to refer to parameters specified in the parameter specification (top of the file). 
-		This type of binding links the values passed by the user of the component to values
-		used inside the component.</para>
-		
-		<para>Here is the associated Java code for the component:</para>
-
-		<figure>
-			<title>ArrayViewer Java Code</title>
-			<programlisting>
-public class ArrayViewer extends BaseComponent {
-	/**
-	 * Return the bound heading if there is one, else return a static default heading
-	 */
-	public String getHeading() {
-		IBinding binding = (IBinding)getBinding("heading");
-		if(binding.getObject() != null) {
-			return binding.getObject().toString();
-		}
-		return heading;
-	}
-
-	/**
-	 * Sets the heading.
-	 * @param heading The heading to set
-	 */
-	public void setHeading(String heading) {
-		this.heading = heading;
-	}
-
-	/**
-	 * @see net.sf.tapestry.AbstractComponent#cleanupAfterRender(IRequestCycle)
-	 */
-	protected void cleanupAfterRender(IRequestCycle cycle) {
-		source = null;
-		heading = "Array Viewer";
-		super.cleanupAfterRender(cycle);
-	}
-
-	/**
-	 * Returns the source.
-	 * @return Object
-	 */
-	public Object getSource() {
-		return source;
-	}
-
-	/**
-	 * Sets the source.
-	 * @param source The source to set
-	 */
-	public void setSource(Object source) {
-		this.source = source;
-	}
-
-	private String heading = "Array Viewer";
-	private Object source;
-}
-			</programlisting>				
-		</figure>
-
-		<para>Tapestry requires that accessors be available for the bindings as they have been implemented here.
-		The <varname>set/getSource()</varname> and <varname>set/getHeading()</varname> are called by Tapestry
-		at the appropriate time. Notice that we have added some code within <varname>getHeading()</varname> to 
-		ensure that if a value for the binding <emphasis>has</emphasis> been set, then this is used.</para>
-		
-		<para>Finally, we add to the application specification, to make the component available using a shorter name:</para>
-		<figure>
-			<title>Modified Application Specification</title>
-			<programlisting>
-&lt;application name="Components Tutorial" engine-class="net.sf.tapestry.engine.SimpleEngine"&gt;
- 	&lt;page name="Home" specification-path="/tutorial/components/Home.page"/&gt;
-	<emphasis role="bold">&lt;component-alias type="ArrayViewer" specification-path="/tutorial/components/ArrayViewer.jwc" /&gt;</emphasis>
-&lt;/application&gt;
-			</programlisting>				
-		</figure>
-	
-		<para>As you can see, the implementation of a component is very simple. Lastly, we show how to use
-		this newly defined component. Here is the HTML, page specification, and associated java code</para>
-
-		<figure>
-			<title>HTML for component usage</title>
-			<programlisting>
-&lt;body&gt;
-
-	&lt;h1&gt;ArrayViewer example&lt;/h1&gt;
-	This pag contains a single instance of ArrayViewer with some sample static data.
-	
-	&lt;hr&gt;
-		&lt;span jwcid="viewer"&gt;Viewer Will Go here&lt;/span&gt;
-	&lt;/hr&gt;
-
-&lt;/body&gt;
-			</programlisting>				
-		</figure>
-
-		<figure>
-			<title>Page specification for component usage</title>
-			<programlisting>
-&lt;page-specification class="tutorial.components.Home"&gt;
-
-	&lt;component id="viewer" type="ArrayViewer"&gt;
-		&lt;static-binding name="heading"&gt;Array Viewer Example!&lt;/static-binding&gt;
-		&lt;binding name="source" expression="getArraySource()"/&gt;
-	&lt;/component&gt;
-
-&lt;/page-specification&gt;
-			</programlisting>				
-		</figure>
-
-		<figure>
-			<title>JavaCode to return the data to display</title>
-			<programlisting>
-/**
- * Example code for the "creating components" section of the tutorial
- * @author neil clayton
- */
-public class Home extends BasePage {
-	public Object[] getArraySource() {
-		return new Object[] {
-			new Object[] { "This is", "a test", "of the array viewer" },
-			new Object[] { "There should be nothing in the next two columns", null, null },
-			new Object[] { new Integer(1234), Boolean.TRUE, this }
-		};
-	}
-}			</programlisting>				
-		</figure>
-		
-		<para>And finally, this is what you should see when running the turorial example:</para>
-		<figure>
-			<title>Simple Component - The result</title>
-			<mediaobject>
-				<imageobject>
-					<imagedata fileref="images/components-result.gif" format="GIF"/>
-				</imageobject>
-			</mediaobject>
-		</figure>
-		
-		<para>Note that in the component specification, we are able to use a shortened name for 
-		the new component. This is because in this tutorial, the Appliation specification had added to it a component alias. 
-		If this was not the case, the full package path to the component would also have to be specified.</para>
-  	</section>
-</chapter>
diff --git a/3.0.4/doc/src/Tutorial2/tutorial-chapter-forms.xml b/3.0.4/doc/src/Tutorial2/tutorial-chapter-forms.xml
deleted file mode 100644
index 5cda6ee..0000000
--- a/3.0.4/doc/src/Tutorial2/tutorial-chapter-forms.xml
+++ /dev/null
@@ -1,732 +0,0 @@
-<chapter id="forms">
-	<title>Using Forms</title>
-	<para>This chapter will introduce you to the way in which Tapestry handles HTML forms. 
-	It begins with basics on general form submission, covers server and client side 
-	validation, use of multiple submit buttons and non-trivial components. </para>
-
-	<para>The provided example tutorial code groups together the examples shown
-	here into a single Tapestry application.  The examples provided will be developed
-	in order, so that you can see how additional complexity and validation is added.</para>
-	
-	<para>The examples that you will firstly accept data from the user (probably you :-), validate
-	that data, and then show the results. If there is any error during validation, this will be
-	shown on the form and the user will be given the chance to fix the field values
-	and re-enter the data.  Note: The validation and error handling functionality is 
-	developed as the tutorial progresses so does not exist on the initial pages</para>
-	
-  	<section id="form-non-validated">
-  		<title>Basic non-validated form</title>
-		<para>
-			Lets begin by creating a form that allows you to enter some information about yourself, 
-			which is simply echoed back to you. Initially, we will use straight text fields - 
-			but as the tutorial progresses we will replace these with smarter (and cooler!) 
-			implementations which include error handling.
-		</para>
-
-		<para>The application specification below is used for all examples in this chapter.:</para>
-	
-		<figure>
-			<title>The Application Specification</title>
-			<programlisting>
-&lt;application name="Forms Tutorial" engine-class="net.sf.tapestry.engine.SimpleEngine"&gt;
-  &lt;property name="net.sf.tapestry.visit-class"&gt;tutorial.forms.VisitorState&lt;/property&gt;
-
-  &lt;page name="Home" specification-path="/tutorial/forms/Home.page"/&gt;
-  &lt;page name="Success" specification-path="/tutorial/forms/Success.page"/&gt;
-  &lt;page name="Part1" specification-path="/tutorial/forms/Part1.page"/&gt;
-  &lt;page name="Part2" specification-path="/tutorial/forms/Part2.page"/&gt;
-  &lt;page name="Part3" specification-path="/tutorial/forms/Part3.page"/&gt;
-  &lt;page name="Part4" specification-path="/tutorial/forms/Part4.page"/&gt;
-&lt;/application&gt;
-            </programlisting>
-		</figure>
-		
-		<para>The Home page of this application provides some description of what the application is,
-		and some links to various examples. We will skip it here for brevity. It can be found within
-		the <filename>examples/tutorial</filename> directory if you wish to view it</para>
-	
-		<para>The following listing shows the HTML for the first example:</para>
-		<figure>
-			<title>HTML for Part One</title>
-			<programlisting>
-&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"&gt;
-&lt;html&gt;
-&lt;head&gt;
-	&lt;title&gt;Forms Tutorial&lt;/title&gt;
-&lt;/head&gt;
-&lt;body&gt;
-
-&lt;h1&gt;Form Tutorial&lt;/h1&gt;
-Enter some fields on this page, and press the submit button. 
-
-&lt;form jwcid="form"&gt;
-	&lt;table&gt;
-		&lt;tr&gt;
-			&lt;td&gt;Your name:&lt;/td&gt;
-			&lt;td&gt;&lt;input jwcid="name"&gt;Neil&lt;/input&gt;&lt;/td&gt;
-		&lt;/tr&gt;
-
-		&lt;tr&gt;
-			&lt;td&gt;Date of birth:&lt;/td&gt;
-			&lt;td&gt;&lt;input jwcid="dateOfBirth"/&gt;&lt;/td&gt;
-		&lt;/tr&gt;
-
-		&lt;tr&gt;
-			&lt;td&gt;Favourite colour:&lt;/td&gt;
-			&lt;td&gt;&lt;input jwcid="favColour"/&gt;&lt;/td&gt;
-		&lt;/tr&gt;
-
-		&lt;tr&gt;
-			&lt;td colspan=2&gt;&lt;input type="submit" jwcid="submit"/&gt;&lt;/td&gt;
-		&lt;/tr&gt;
-	&lt;/table&gt;
-&lt;/form&gt;
-
-&lt;/body&gt;
-&lt;/html&gt;
-			</programlisting>				
-		</figure>
-
-		<para>We will now write a page specification to handle these fields, using standard &TextField;'s:</para>
-		<figure>
-			<title>Page Specification for Part One</title>
-			<programlisting>
-&lt;page-specification class="tutorial.forms.Part1"&gt;
-	&lt;bean name="delegate" class="net.sf.tapestry.valid.ValidationDelegate"/&gt;
-
-	&lt;component id="form" type="Form"&gt;
-		&lt;binding name="delegate" expression="beans.delegate"/&gt;
-	&lt;/component&gt;
-
-	&lt;component id="name" type="TextField"&gt;
-		&lt;binding name="value" expression="visit.userName"/&gt;
-	&lt;/component&gt;
-
-	&lt;component id="dateOfBirth" type="TextField"&gt;
-		&lt;binding name="value" expression="visit.dateOfBirthAsString"/&gt;
-	&lt;/component&gt;
-
-	&lt;component id="favColour" type="TextField"&gt;
-		&lt;binding name="value" expression="visit.favoriteColour"/&gt;
-	&lt;/component&gt;
-
-	&lt;component id="submit" type="Submit"&gt;
-		&lt;binding name="listener" expression="listeners.enterDetails"/&gt;
-	&lt;/component&gt;
-&lt;/page-specification&gt;
-			</programlisting>				
-		</figure>
-
-		<para>An &TextField; component allows you to show simple &lt;input&gt; HTML tags, and have the value bound 
-		to some property of an object. As we have have already seen, Tapestry is capable of getting the value which 
-		will appear in the form from almost anywhere. In these examples, we will create a Visit object for the application 
-		and bind the form's values to properties on that object. There is however nothing from stopping us using OGNL to 
-		bind the component to some other object, (e.g: a static method, or property of some EJB object, for example).
-		</para>
-	
-		<para>For the above specification, we have used simple OGNL bindings.  These will be used to both get the 
-		property value when Tapestry renders the form, and also to set the value when the user submits the form.
-		</para>
-		
-		<para>Moving along, lets examine the &Form; component. This has two properties, 
-		<varname>delegate</varname> and <varname>listener</varname>.  The <varname>delegate</varname> is used to 
-		store validataion error information.  This can be used by your submit handler to see if the form has any errors.
-		We have bound the value to <varname>beans.delegate</varname> which is an instance of the Tapestry 
-		supplied <varname>ValidationDelegate</varname> class.    This class handles the state required to 
-		peform validation and associates error messages with components.</para>
-		
-		<para>In most applications, you can just use the Tapestry supplied validator - as we have done here.</para>
-		
-		<para>The second property, <varname>submit</varname> is used to tell Tapestry what method to call 
-		on your Java object when the form is submitted.   The expression, <varname>listeners.submit</varname> 
-		refers to the <varname>public void submit(IRequestCycle)</varname> method on the page object. </para>
-		
-		<para>Lastly, there is the actual submit button itself. This is rendered using a &Submit; component,
-		which requires only two properties, the lable to use, and the method to call. 
-		Here, since we are not implementing a localized version of the form, we will use a <varname>static-binding</varname> 
-		for the button label, and we will refer to the same listener method that the form is using.</para>
-	
-		<para>Note that it is worth specifying the listener on both the &Form; and &Submit; components, 
-		as by doing so the user will be able to use "default submit behavior" on the browser (i.e.: fill in the form and hit enter.)</para>
-		
-		<para>The Java object for the page and Visit Object is listed below. 
-		You should be able to match up the OGNL expressions to JavaBean properties on the form. 
-		The submit and form listeners refer to a method, not a property.</para>
-	
-		<figure>
-			<title>Page1 Java Object, Part One</title>
-			<programlisting>
-package tutorial.forms;
-
-import net.sf.tapestry.IRequestCycle;
-import net.sf.tapestry.RequestCycleException;
-import net.sf.tapestry.html.BasePage;
-
-/**
- * Example code for the forms part of Tutorial
- * @author Neil Clayton
- */
-public class Part1 extends BasePage {
-	public void enterDetails(IRequestCycle cycle) throws RequestCycleException {
-		// Submission has been performed. Do something here.
-		cycle.setPage("Success");
-	}
-	
-}
-			</programlisting>
-		</figure>
-
-		<figure>
-			<title>The Visit Object, Part One</title>
-			<programlisting>
-	public class VisitorState implements Serializable
-	{
-		/**
-		 * Returns the dateOfBirth.
-		 * @return String
-		 */
-		public Date getDateOfBirth()
-		{
-			return dateOfBirth;
-		}
-
-		public String getDateOfBirthAsString()
-		{
-			return DateFormat.getDateInstance().format(dateOfBirth);
-		}
-
-		/**
-		 * Returns the favoriteColour.
-		 * @return String
-		 */
-		public String getFavoriteColour()
-		{
-			return favoriteColour;
-		}
-
-		/**
-		 * Returns the name.
-		 * @return String
-		 */
-		public String getUserName()
-		{
-			return userName;
-		}
-
-		/**
-		 * Sets the dateOfBirth.
-		 * @param dateOfBirth The dateOfBirth to set
-		 */
-		public void setDateOfBirth(Date dateOfBirth)
-		{
-			this.dateOfBirth = dateOfBirth;
-		}
-
-		/**
-		 * Sets the favoriteColour.
-		 * @param favoriteColour The favoriteColour to set
-		 */
-		public void setFavoriteColour(String favoriteColour)
-		{
-			this.favoriteColour = favoriteColour;
-		}
-
-		public void setDateOfBirthAsString(String newDOB) throws ParseException
-		{
-			dateOfBirth = DateFormat.getDateInstance().parse(newDOB);
-		}
-
-		/**
-		 * Sets the name.
-		 * @param name The name to set
-		 */
-		public void setUserName(String name)
-		{
-			this.userName = name;
-		}
-
-		private String userName;
-		private Date dateOfBirth = new Date(0);
-		private String favoriteColour;
-	}
-			</programlisting>
-		</figure>
-
-		<para>Compile and run this example. You should see the following form:</para>
-
-		<figure>
-			<title>Form Input, Part 1</title>
-			<mediaobject>
-				<imageobject>
-					<imagedata fileref="images/forms-part1-form.gif" format="GIF"/>
-				</imageobject>
-			</mediaobject>
-		</figure>
-
-		<para>When you enter the data and hit the submit button, you should see:</para>
-		
-		<figure>
-			<title>Form Input, Result - Part 1</title>
-			<mediaobject>
-				<imageobject>
-					<imagedata fileref="images/forms-part1-result.gif" format="GIF"/>
-				</imageobject>
-			</mediaobject>
-		</figure>
-
-		<para>This section has shown basic form field handling using components with no validation. 
-		The next section introduces some validation logic, and a method for showing errors on the page.</para>
-	  	</section>
-
-		<section id="server-side-validation">
-  		<title>Adding Server-side Validation Logic</title>  	
-
-		<para>Many Tapestry components use validators (they implement the <varname>IValidator</varname> interface) - 
-		these validators encapsulate specific validation rules, such as 'required, mininum length of 5 and maximum length of 12'.
-		Tapestry also provides some default validation implementations, to make life a little easier.</para>
-	
-		<para>The next example shows a complete page specification using a single StringValidator for the three
-		input fields. A StringValidator will accept any string type value. In this example, the only real validation
-		will be that a value for every field is that the value is <emphasis>required</emphasis>.  
-		The example will also show some new components such 
-		as &Delegator; and &Body; which are required in order to support validation. Here is the page specification:</para>
-
-		<figure>
-			<title>Component Specification, with StringValidator</title>
-			<programlisting>
-&lt;page-specification class="tutorial.forms.Part2"&gt;
-	&lt;bean name="delegate" class="net.sf.tapestry.valid.ValidationDelegate"/&gt;
-
-	&lt;bean name="stringValidator" class="net.sf.tapestry.valid.StringValidator" lifecycle="page"&gt;
-		  &lt;set-property name="required" expression="true"/&gt;
-		  &lt;set-property name="clientScriptingEnabled" expression="false"/&gt;
-	 &lt;/bean&gt;
-
-	&lt;component id="form" type="Form"&gt;
-		&lt;binding name="delegate" expression="beans.delegate"/&gt;
-	&lt;/component&gt;
-
-	&lt;component id="body" type="Body"/&gt;
-
-	&lt;component id="name" type="ValidField"&gt;
-		&lt;binding name="value" expression="visit.userName"/&gt;
-		&lt;binding name="validator" expression='beans.stringValidator'/&gt;
-		&lt;static-binding name="displayName"&gt;User name&lt;/static-binding&gt;
-	&lt;/component&gt;
-
-	&lt;component id="dateOfBirth" type="ValidField"&gt;
-		&lt;binding name="value" expression="visit.dateOfBirthAsString"/&gt;
-		&lt;binding name="validator" expression='beans.stringValidator'/&gt;
-		&lt;static-binding name="displayName"&gt;Date of birth&lt;/static-binding&gt;
-	&lt;/component&gt;
-
-	&lt;component id="favColour" type="ValidField"&gt;
-		&lt;binding name="value" expression="visit.favoriteColour"/&gt;
-		&lt;binding name="validator" expression='beans.stringValidator'/&gt;
-		&lt;static-binding name="displayName"&gt;Favorite colour&lt;/static-binding&gt;
-	&lt;/component&gt;
-
-	&lt;component id="errors" type="Delegator"&gt;
-		&lt;binding name="delegate" expression="beans.delegate.firstError"/&gt;
-	&lt;/component&gt;
-
-	&lt;component id="submit" type="Submit"&gt;
-		&lt;binding name="listener" expression="listeners.enterDetails"/&gt;
-	&lt;/component&gt;
-&lt;/page-specification&gt;
-			</programlisting>
-		</figure>
-
-		<para>The fields themselves are now &ValidField;s. A ValidField requires two additional properties, 
-		<varname>validator</varname> and <varname>displayName</varname>. The first specifies an instance of
-		a validator, and the later is used as a textual description of the form element if an error occurs.</para>
-		
-		<para>The &Body; component is required and used to insert client side validation
-		in the form of JavaScript at the top of the page (although for this example, client side
-		validation is turned off).  Tapestry will provide server side validation
-		all the time, and client side validation is possible if the user agent supports JavaScript.</para>
-	
-		<para>Finally, in order to show an error with validation on the page, we have added an
-		<varname>errors</varname> component, which simply shows the first error.  The &Delegator; 
-		component is an easy way to pass the responsibility for rendering to some other object. 
-		As the first error of a validator implements &IRender;, we can use the &Delegator; component to 
-		include its output into the page during the rendering process.  
-		This is of course only one example of presenting errors. It
-		would be possible to use an alternative error page, or a custom component to render all errors
-		that are present in the validation delegate. The option presented here has been chosen for
-		its simplicity.</para>
-
-		<para>The new HTML template is as shown</para>
-		<figure>
-			<title>HTML Template, with StringValidator</title>
-			<programlisting>
-&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"&gt;
-&lt;html&gt;
-&lt;head&gt;
-	&lt;title&gt;Forms Tutorial&lt;/title&gt;
-&lt;/head&gt;
-&lt;body&gt;
-
-&lt;h1&gt;Form Tutorial&lt;/h1&gt;
-Enter some fields on this page, and press the submit button. 
-
-&lt;span jwcid="body"&gt;
-	&lt;form jwcid="form"&gt;
-		&lt;table&gt;
-			&lt;tr&gt;
-				&lt;td&gt;Your name:&lt;/td&gt;
-				&lt;td&gt;&lt;input jwcid="name"&gt;Neil&lt;/input&gt;&lt;/td&gt;
-			&lt;/tr&gt;
-	
-			&lt;tr&gt;
-				&lt;td&gt;Date of birth:&lt;/td&gt;
-				&lt;td&gt;&lt;input jwcid="dateOfBirth"/&gt;&lt;/td&gt;
-			&lt;/tr&gt;
-	
-			&lt;tr&gt;
-				&lt;td&gt;Favourite colour:&lt;/td&gt;
-				&lt;td&gt;&lt;input jwcid="favColour"/&gt;&lt;/td&gt;
-			&lt;/tr&gt;
-	
-			&lt;tr&gt;
-				&lt;td colspan=2&gt;&lt;font color="red"&gt;&lt;span jwcid="errors"/&gt;&lt;/font&gt;&lt;/td&gt;
-			&lt;/tr&gt;
-
-			&lt;tr&gt;
-				&lt;td colspan=2&gt;&lt;input type="submit" jwcid="submit"/&gt;&lt;/td&gt;
-			&lt;/tr&gt;
-		&lt;/table&gt;
-	&lt;/form&gt;
-&lt;/span&gt;
-
-&lt;/body&gt;
-&lt;/html&gt;
-			</programlisting>
-		</figure>
-	
-		<para>And lastly, the associated Java object:</para>
-		<figure>
-			<title>Java Object, with Validator</title>
-			<programlisting>
-package tutorial.forms;
-
-import net.sf.tapestry.IRequestCycle;
-import net.sf.tapestry.RequestCycleException;
-import net.sf.tapestry.html.BasePage;
-import net.sf.tapestry.valid.ValidationDelegate;
-
-/**
- * Example code for the forms part of Tutorial
- * @author Neil Clayton
- */
-public class Part2 extends BasePage {
-	public void enterDetails(IRequestCycle cycle) throws RequestCycleException {
-		// Submission has been performed. Validate the fields
-		ValidationDelegate delegate = (ValidationDelegate)getBeans().getBean("delegate");
-		if(delegate.getHasErrors()) {
-			// there are errors
-			return;
-		}
-		
-		cycle.setPage("Success");
-	}
-	
-}
-			</programlisting>
-		</figure>
-
-		<para>In order to return the user to the previous page, we simply return from the
-		submit method, without having set any alternative page for the rendering cycle. As a result,
-		the same input page will show the user their error</para>
-	
-		<para>Compile and run the example. If you are using the precompiled examples, choose
-		the second link on the forms tutorial page. If you ommit a value for any field, you 
-		will see an error just above the submit button:</para>
-
-		<figure>
-			<title>Form Input, Part 2 - Required fields</title>
-			<mediaobject>
-				<imageobject>
-					<imagedata fileref="images/forms-part2-form.gif" format="GIF"/>
-				</imageobject>
-			</mediaobject>
-		</figure>
-
-		<para>The next section shows some more advanced validation</para>
-	</section>
-	
-	<section id="better-validation">
-		<title>Advanced Validation</title>
-		<para>The previous section showed some simple server side validation. 
-		This next section shows how to use client side Javascript validation, as well as some further validators.
-		Enabling client side validation is very simple in Tapestry. First, the page itself requires a &Body; component - 
-		then we just need to turn it on! If this is sounding too good to be true, 
-		it isn't.. really :-)</para>
-			
-		<para>Lets get started.  For this example, you don't need to do much, as the previous example code contained
-		all of the required components (&Body;). To enable client side scripting, change the page specification 
-		so that the <varname>stringValidator</varname> definition looks like this:</para>
-			
-		<figure>
-			<title>Part3 Component Specification, with client side enabled StringValidator</title>
-			<programlisting>
-...
-&lt;bean name="stringValidator" class="net.sf.tapestry.valid.StringValidator" lifecycle="page"&gt;
-  		&lt;set-property name="required" expression="true"/>
-  		&lt;set-property name="clientScriptingEnabled" expression="true"/>
-&lt;/bean>
-...
- 			</programlisting>
-		</figure>
-		<para>This example can be found in <filename>Part3.page</filename> and is referred to as 'client and server side scripting
-		from the index page of the complete forms example.	Compile and run the example.  
-		Again, submit the form. If your browser supports JavaScript, you should see a popup 
-		telling you that a field value is required.</para>
-
-		<figure>
-			<title>Form Input, Part 3 - Required fields with Client Side Validation</title>
-			<mediaobject>
-				<imageobject>
-					<imagedata fileref="images/forms-part3-result.gif" format="GIF"/>
-				</imageobject>
-			</mediaobject>
-		</figure>
-
-		<para>Note that enabling client side validation does not <emphasis>disable</emphasis> server side validation. 
-		If the browser does not support JavaScript, any incorrect values will still be caught and handled correctly.</para>
-
-		<section id="date-validator">
-			<title>A more specific Validator</title>
-			<para>Now, lets use a more suitable validator for the "date of birth" field.  
-			First, we need to instantiate an alternative IValidator instance. To do this, we will use another bean definition:</para>
-
-			<figure>
-				<title>Date Validator - bean definition</title>
-				<programlisting>
-...
-&lt;bean name="stringValidator" class="net.sf.tapestry.valid.DateValidator" lifecycle="page"&gt;
-  		&lt;set-property name="required" expression="true"/>
-  		&lt;set-property name="clientScriptingEnabled" expression="true"/>
-&lt;/bean>
-...
-	 			</programlisting>
-			</figure>
-
-			<para>Update the validator binding for the <varname>dateOfBirth</varname> component, to use the new validator.
-			That done, you shoul be able to compile and run the code. Enter any non valid date, and you will get an appropriate 
-			error message</para>
-			<figure>
-				<title>Updated Component Properties, for dateOfBirth</title>
-				<programlisting>
-...
-&lt;component id="dateOfBirth" type="ValidField"&gt;
-	&lt;binding name="value" expression="visit.dateOfBirth"/&gt;
-    &lt;binding name="validator" expression='beans.dateValidator'/&gt;
-    &lt;static-binding name="displayName"&gt;Date of birth&lt;/static-binding&gt;
-&lt;/component&gt;
-...
-	 			</programlisting>
-			</figure>
-			<para>If you enter an incorrect value for date of birth, you will see:</para>
-			<figure>
-				<title>Form Input, Part 3 - Required fields with Client Side Validation</title>
-				<mediaobject>
-					<imageobject>
-						<imagedata fileref="images/forms-part3-date-result.gif" format="GIF"/>
-					</imageobject>
-				</mediaobject>
-			</figure>
-		</section>
-		<section id="validation-summary">
-			<title>Summary</title>
-			<para>This section has the basics of validation. By now you should be familiar with simple string based
-			validation, and also the use of alternative validators such as the <varname>DateValidator</varname>.
-			All standard Tapestry supplied component validation follows a similar pattern to what you have seen here.
-			You need to first choose the validator, and then setup its properties.
-			</para>
-			
-			<para>
-			Tapestry contains more validators that those shown here, and of course it is not that hard to write
-			your own.  Also, there are specific components that help in this regard. For example, the <varname>DateField</varname>
-			component sets it's own validator, saving you the time in having to declare and attach it yourself.
-			</para>
-		</section>
-	</section>		  		
-  			
-  	<section id="built-in">
-  		<title>Smart Components</title>
-		<para>The final part of this chapter shows the use of some smarter components for appropriate fields. 
-		In terms of getting user input "right", prevention of bad input data is the best strategy. 
-		If the user can't enter invalid input - your form processing is going to be simpler.  
-		An excellent example is using the DatePicker, so that rather than the user having to type a date, they can just select one.
-		For the user, this is 100% more intuitive, easier to use and virtually eliminates all entry errors.</para>
-
-		<para>Tapestry includes some more advanced form components, which are used in this example. 
-		We will use a DatePicker for the date of birth field, and a PropertySeletion for favouriteColour.<footnote>
-		<para>DatePicker uses JavaScript to perform its work, so you will required something like IE5 (or above), Mozilla or Konqueror to use it</para></footnote>
-		</para>
-
-		<para>This example is named <varname>Part4</varname>. It is identical to <varname>Part3</varname>
-		except that there are additional component definitions, and the definition for <varname>dateOfBirth</varname> and
-		<varname>favColour</varname> have been modified. The specification below is highlighted to show those parts that differ:
-		</para>
-		
-		<figure>
-			<title>Full page specification for exampe - Part4</title>
-			<programlisting>
-&lt;page-specification class="tutorial.forms.Part4"&gt;
-	&lt;bean name="delegate" class="net.sf.tapestry.valid.ValidationDelegate"/&gt;
-
-	&lt;bean name="stringValidator" class="net.sf.tapestry.valid.StringValidator" lifecycle="page"&gt;
-  		&lt;set-property name="required" expression="true"/&gt;
-  		&lt;set-property name="clientScriptingEnabled" expression="true"/&gt;
- 	&lt;/bean&gt;
-
-	&lt;component id="form" type="Form"&gt;
-		&lt;binding name="delegate" expression="beans.delegate"/&gt;	
-	&lt;/component&gt;
-	
-	<emphasis role="bold">&lt;component id="shell" type="Shell"&gt;
-		&lt;static-binding name="title"&gt;Smarter Components&lt;/static-binding&gt;	
-	&lt;/component&gt;
-	&lt;component id="body" type="Body"/&gt;</emphasis>
-	
-	&lt;component id="name" type="ValidField"&gt;
-		&lt;binding name="value" expression="visit.userName"/&gt;
-        &lt;binding name="validator" expression='beans.stringValidator'/&gt;
-        &lt;static-binding name="displayName"&gt;User name&lt;/static-binding&gt;
-	&lt;/component&gt;
-	
-	<emphasis role="bold">&lt;component id="dateOfBirth" type="DatePicker"&gt;
-		&lt;binding name="value" expression="visit.dateOfBirth"/&gt;
-	&lt;/component&gt;</emphasis>
-	
-	&lt;component id="favColour" type="ValidField"&gt;
-		&lt;binding name="value" expression="visit.favoriteColour"/&gt;
-        &lt;binding name="validator" expression='beans.stringValidator'/&gt;
-        &lt;static-binding name="displayName"&gt;Favorite colour&lt;/static-binding&gt;
-	&lt;/component&gt;
-	
-	&lt;component id="errors" type="Delegator"&gt;
-		&lt;binding name="delegate" expression="beans.delegate.firstError"/&gt;
-	&lt;/component&gt;
-	
-	&lt;component id="submit" type="Submit"&gt;
-		&lt;binding name="listener" expression="listeners.enterDetails"/&gt;
-	&lt;/component&gt;
-&lt;/page-specification&gt;
- 			</programlisting>
-		</figure>
-
-		<para>
-		Because we have introduced a &Shell; component (required for the date picker to work), we need to modify the
-		HTML. The HTML for part four is provided here:
-		</para>
-		<figure>
-			<title>Full HTML for exampe - Part4</title>
-			<programlisting>
-&lt;span jwcid="shell"&gt;
-	&lt;span jwcid="body"&gt;
-		&lt;h1&gt;Form Tutorial&lt;/h1&gt;
-		Enter some fields on this page, and press the submit button. 
-		
-		&lt;form jwcid="form"&gt;
-			&lt;table&gt;
-				&lt;tr&gt;
-					&lt;td&gt;Your name:&lt;/td&gt;
-					&lt;td&gt;&lt;input jwcid="name"&gt;Neil&lt;/input&gt;&lt;/td&gt;
-				&lt;/tr&gt;
-		
-				&lt;tr&gt;
-					&lt;td&gt;Date of birth:&lt;/td&gt;
-					&lt;td&gt;&lt;input jwcid="dateOfBirth"/&gt;&lt;/td&gt;
-				&lt;/tr&gt;
-		
-				&lt;tr&gt;
-					&lt;td&gt;Favourite colour:&lt;/td&gt;
-					&lt;td&gt;&lt;input jwcid="favColour"/&gt;&lt;/td&gt;
-				&lt;/tr&gt;
-		
-				&lt;tr&gt;
-					&lt;td colspan=2&gt;&lt;font color="red"&gt;&lt;span jwcid="errors"/&gt;&lt;/font&gt;&lt;/td&gt;
-				&lt;/tr&gt;
-	
-				&lt;tr&gt;
-					&lt;td colspan=2&gt;&lt;input type="submit" jwcid="submit"/&gt;&lt;/td&gt;
-				&lt;/tr&gt;
-			&lt;/table&gt;
-		&lt;/form&gt;
-	&lt;/span&gt;
-&lt;/span&gt;
- 			</programlisting>
-		</figure>
-
-		<para>The Java code itself requires no modification, because the <varname>DatePicker</varname> component uses the
-		same data type as our previous &ValidField; did.  So, we have made it easier for the user to enter date values, by providing a date picker 
-		component. We can also restrict the possible values for favorite colour, using another built in Tapestry
-		component.
-		</para>
-
-		<para>
-		To restrict the inputs for favourite colour, we will use the &PropertySelection; component. This component 
-		takes as one of it's inputs a <emphasis>model</emphasis>. The model describes the data available 
-		(it's very MVC like). Tapestry provides a number of pre-built models, one of which is the StringPropertySelection.
-		</para>
-		
-		<para>The StringPropertySelection exposes an array of strings - which is very good if you have a 
-		discrete set of values from whih a user must choose. Modify the component property for favouriteColour to read:
-		</para>
-
-		<figure>
-			<title>PropertySelection for Favorite Colour - Part4</title>
-			<programlisting>
-&lt;component id="favColour" type="PropertySelection"&gt;
-	&lt;binding name="value" expression="visit.favoriteColour"/&gt;
-	&lt;binding name="model" expression="@getColourModel()"/&gt;
-&lt;/component&gt;
- 			</programlisting>
-		</figure>
-
-		<para>What happens here is that Tapestry takes care of rending a selection HTML element for you, 
-		and sticks whatever value the user chooses into the favouriteColour property. Finally we need to 
-		add the following method to Page4.java, to construct and return the model for the component:</para>
-		<figure>
-			<title>PropertySelection Code for Favorite Colour - Part4</title>
-			<programlisting>
-/**
- * Returns a set of colours that the user may choose from.
- */
-public static IPropertySelectionModel getColourModel() {
-	return new StringPropertySelectionModel(
-		new String[] { "Black", "Fiji Blue", "Green", "Red", "Yellow" });
-}
- 			</programlisting>
-		</figure>
-
-		<para>Upon compiling and running this new code, your form should look like this:</para>
-
-		<figure>
-			<title>Form, with DatePicker and PropertySelection components</title>
-			<mediaobject>
-				<imageobject>
-					<imagedata fileref="images/forms-part4-result.gif" format="GIF"/>
-				</imageobject>
-			</mediaobject>
-		</figure>
-
-		<section id="forms-part4-summary">
-			<title>Summary</title>
-			<para>We've looked at basic form handling, including different form fields, 
-			binding values of a form to properties on an object, and Tapestry supplied error handling. We 
-			have also introduced a couple of the smarter components - and seen how easy it is to switch 
-			a component type without having to modify the page template.
-			</para>
-			<para>
-			The usage of the components shown here is somewhat basic, due to the fact that this is a tutorial.
-			Keep in mind that something like the IPropertySelection (along with the PropertySelection component) interface 
-			allows you to make available any kind of object in both drop down lists and multi line lists, and handle selections
-			of those components.
-			</para>
-		</section>
-  	</section>
-  </chapter>
diff --git a/3.0.4/doc/src/Tutorial2/tutorial-chapter-gettingstarted.xml b/3.0.4/doc/src/Tutorial2/tutorial-chapter-gettingstarted.xml
deleted file mode 100644
index a4f0596..0000000
--- a/3.0.4/doc/src/Tutorial2/tutorial-chapter-gettingstarted.xml
+++ /dev/null
@@ -1,477 +0,0 @@
-<chapter id="getting-started">
-	<title>Getting Started</title>
-	<para>
-		This section provides your first introduction on how to write a Tapestry
-		application. This is followed with an example, and finally a more in depth
-		discussion on the various parts that make up an application.
-	</para>
-	<section id="tapestry-requirements">
-		<title>Requirements</title>
-		<para>
-			For this tutorial, you need only Tapestry and the included
-			contributed components. Of course, we expect that you have already
-			deployed the example development environment or tutorial into
-			a container.
-		</para>
-		<para>
-			The next section provide a brief summary of how Tapestry works, including
-			a little detail on how it processes your request, as well as an introduction
-			into the different parts that make up a Tapestry application.
-			Feel free to skip this section and proceed to
-			<xref linkend="Introductory-examples"/>
-			if you already understand what a Page is, and how &OGNL; fits into the picture.
-		</para>
-	</section>
-
-	<section id="how-does-it-work">
-		<title>How does it work?</title>
-		<para>
-			In a standard Java Web application (using the Servlet API), a request is
-			processed as follows:
-			<orderedlist>
-				<listitem>User agent (browser) sends request over HTTP to server (Servlet Engine)</listitem>
-				<listitem>Servlet Engine receives request, and routes it to your servlet</listitem>
-				<listitem>Your servlet(s) examine the HTTP content</listitem>
-				<listitem>Servlet(s) and JSP are combined to produce the desired result</listitem>
-				<listitem>The result is sent back to the user agent (browser)</listitem>
-			</orderedlist>
-		</para>
-		<para>
-			This is a somewhat simplified view, as it does not take into account the myriad
-			of things that as a developer you are responsible for. For anything but the simplest
-			(and hence, not very useful) web application, you will need to consider the
-			implementation of:
-			<orderedlist>
-				<listitem>Session management</listitem>
-				<listitem>Implementation of business logic and/or integration with existing 'back end' logic</listitem>
-				<listitem>Presentation and 'rendering' of the site or application</listitem>
-				<listitem>Maintenance over time</listitem>
-				<listitem>Performance</listitem>
-				<listitem>Scalability</listitem>
-				<listitem>...</listitem>
-			</orderedlist>
-		</para>
-		<para>
-			The list goes on. Tapestry provides almost all of the glue to make a Web Application
-			happen, so that you can concentrate on implementing the actual logic. Here's how it works:
-		</para>
-		<para>
-			A Tapestry Application consists of a number of Pages, where each page consists of some
-			HTML, some Java code, and what is known as a <emphasis>page specification</emphasis>.
-			The page specification is what allows you define the dynamic content that makes it's way
-			from various Java object into the HTML.
-		</para>
-
-		<para>
-			When responding to a request, Tapestry does the following:
-			<orderedlist>
-				<listitem>User agent (browser) sends request over HTTP to server (Servlet Engine)</listitem>
-				<listitem>Servlet Engine receives request, and routes it to
-					<emphasis>the Tapestry Application</emphasis> servlet</listitem>
-				<listitem>The users previous session is restored or created, as appropriate</listitem>
-				<listitem>The Application Servlet decodes the request, and calls the
-				relevant Java code (defined by you) to both get/set variables or take
-				an action (if the request was a form POST, for example)</listitem>
-				<listitem>Your application executes code (a method), and sets object
-				state.</listitem>
-				<listitem>Tapestry inserts the appropriate responses <emphasis>in
-				place of</emphasis> the existing HTML, using <emphasis>Components</emphasis></listitem>
-				<listitem>The result is sent back to the user agent (browser)</listitem>
-			</orderedlist>
-			Tapestry is doing much more 'glue' work for you
-			than with the standard Servlet/JSP model.  An important concept here
-			is that in terms of Java code, you only need to provide the
-			<emphasis>data</emphasis> and <emphasis>actions</emphasis> for the web page.
-			The actual rendering of this into HTML is put together by Tapestry, using
-			the HTML for the page as a basis, with the relevant parts of the page
-			being replaced with dynamic content.
-		</para>
-
-		<para>
-			Finally, Tapestry abstracts the rendering of content from the content
-			itself. For example, data for a web based shopping system may be extracted
-			by a Java component via JDBC, and presented to Tapestry as a Collection
-			of business objects.  Tapestry is then able to take that collection and
-			render it into HTML in a way that the page designer (the person who
-			create the Pages HTML) specified.
-		</para>
-		<para>
-			The next section shows the simplest Tapestry application - a single page.
-		</para>
-
-	</section>
-
-	<section id="simplest-app">
-		<title>The Simplest Application</title>
-		<para>
-			You're close to being able to write some code!
-		</para>
-		<para>
-			Not mentioned in the previous section, but important, is that
-			Tapestry applications have at least one mandatory page - called <emphasis>Home</emphasis>.
-			This is the page that Tapestry will route new requests to.
-		</para>
-		<para>
-			The following example
-			will construct a 'Hello World' application, where the text is
-			retreived a Java object. This example will build up the
-			application specification, basic HTML tempalte (for the Home page),
-			and finally a simple Java object to return the 'hello world' string.
-		</para>
-        <para>
-            You will see more on this later, but it is worth explaining now that most
-            Tapestry pages you write will consist of an HTML template, a page specification
-            and a Java object (this is exactly what we're going to do below). If it sounds confusing
-            don't worry - it will be explained in detail later - just follow on for now :-)
-        </para>
-		<para>
-			The example code supplied contains a full implementation of this tutorial.
-			Feel free to recreate the tutorial as you go along, using the supplied development
-			environment.
-            <note>
-                For each major part of this tutorial, you will find full source code within
-			<filename class="directory">c:\Tapestry-x.x\examples\Tutorial\src</filename>.    So, if
-                you don't want to construct your own version of the tutorial, you can just run
-                the examples provided.
-            </note>
-		</para>
-		<para>
-			The code for this example is in
-			<filename class="directory">c:\Tapestry-x.x\examples\Tutorial\src\tutorial\hello</filename>.
-		</para>
-
-		<section id="simplest-app-setup">
-			<title>Setup the Application</title>
-			<para>
-				Every Tapestry Application must have at least a single <emphasis>Application Servlet</emphasis>,
-				where the applications pages and other engine services are defined. For this example, create
-				a package in your source tree with the name <classname>tutorial.hello</classname>.
-				Within this package, create a file called <filename>HelloWorld.application</filename>. This
-				is the application specification file.
-			</para>
-			<para>
-				The application specification is a file that is located on the Java class path.
-				In a deployed Tapestry application, the specification lives with the application's
-				class files, in the	<filename class="directory">WEB-INF/classes</filename> directory
-				of a War file.
-			</para>
-      <figure>
-        <title>HelloWorld.application</title>
-        <programlisting>
-&lt;?xml version="1.0" encoding="UTF-8"?&gt;
-&lt;!DOCTYPE application PUBLIC
-  "-//Howard Lewis Ship//Tapestry Specification 1.3//EN"
-  "http://tapestry.sf.net/dtd/Tapestry_1_3.dtd"&gt;
-&lt;application
-  name="Hello World Tutorial"
-  engine-class="net.sf.tapestry.engine.&SimpleEngine;"&gt;
-  &lt;page name="Home" specification-path="/tapestry/tutorial/hello/Home.page"/&gt;
-&lt;/application&gt;
-</programlisting>
-      </figure>
-			<para>
-				This specification defines a Tapestry Application using the standard Tapestry Engine
-				(documented later), and a single page called <emphasis>Home</emphasis>,
-				which Tapestry expects to find at <filename>/tapestry/tutorial/hello/Home.page</filename>
-				on the classpath.
-			</para>
-			<para>
-				The last <emphasis>application related</emphasis> configuration we need (before we can work on
-				the page content itself), is to provide the Servlet engine configuration.
-				Within the <filename class="directory">WEB-INF</filename> directory is a
-				file called <filename>web.xml</filename>. This file should have at least the following
-				content:
-      <figure>
-        <title>Servet Configuration (web.xml)</title>
-        <programlisting>
-&lt;web-app&gt;
-  &lt;display-name&gt;Tapestry Tutorial&lt;/display-name&gt;
-  &lt;servlet&gt;
-    &lt;servlet-name&gt;hello&lt;/servlet-name&gt;
-    &lt;servlet-class&gt;tutorial.hello.HelloWorldServlet&lt;/servlet-class&gt;
-  	&lt;load-on-startup&gt;0&lt;/load-on-startup&gt;
-  &lt;/servlet&gt;
-  
-  &lt;servlet-mapping&gt;
-    &lt;servlet-name&gt;hello&lt;/servlet-name&gt;
-    &lt;url-pattern&gt;/hello&lt;/url-pattern&gt;
-  &lt;/servlet-mapping&gt;
-
-  &lt;session-config&gt;
-  	&lt;session-timeout&gt;15&lt;/session-timeout&gt;
-  &lt;/session-config&gt;
-
-  &lt;welcome-file-list&gt;
-    &lt;welcome-file&gt;index.html&lt;/welcome-file&gt;
-  &lt;/welcome-file-list&gt;
-&lt;/web-app&gt;
-</programlisting>
-      </figure>
-			Depending on the <filename>web.xml</filename> you are looking at, there may be
-			more than this (specifically, the definition of further servlets). That's fine - as long
-			as there is a definition for the <classname>HelloWorldServlet</classname>.
-			</para>
-		</section>
-		<section id="simplest-app-thehtml">
-			<title>The Home Page HTML</title>
-			<para>
-				With the basic application specification itself complete, we can now define the
-				HTML on the main page. This HTML file is a Tapestry resource, and for this tutorial
-				should reside	in the source directory for the application.
-				<footnote>
-					<para>The tutorial is setup to copy .html, .page and .application files to the classpath - as
-					such, these files will be loadable by Tapestry at runtime</para>
-				</footnote>
-				It should have the same filename as the Page name, in this case it is called <filename>
-				Home.html</filename>, and is in
-				 <filename class="directory">c:\Tapestry-x.x\examples\Tutorial\src\tutorial\hello</filename>.
-      <figure>
-        <title>The HTML Content (Home.html)</title>
-        <programlisting>
-&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"&gt;
-&lt;html&gt;
-&lt;head&gt;
-	&lt;title&gt;Hello World&lt;/title&gt;
-&lt;/head&gt;
-&lt;body&gt;
-Welcome to your first &lt;b&gt;Tapestry Application&lt;/b&gt;
-&lt;p&gt;
-&lt;h1&gt;
-	&lt;span jwcid="insertSomeText"&gt;This text will be replaced by Tapesty&lt;/span&gt;
-&lt;/h1&gt;
-&lt;/body&gt;
-&lt;/html&gt;
-</programlisting>
-      </figure>
-			</para>
-			<para>
-				You will notice that the page is completely normal, apart from the single
-				<emphasis>span </emphasis> tag, which contains an attribute with name
-				<varname>jwcid</varname>.  This is how Tapestry inserts dynamic data
-				into a page. In this example, Tapestry will completely replace 
-				the <emphasis>span </emphasis>
-				tag, including whatever it wraps when it renders the page -
-				that is, you will not see the text <emphasis>This text will be
-				replaced by Tapestry</emphasis>, but rather the value that is
-				returned by the <varname>getSomeText()</varname> method.
-				<footnote>
-					<para>The tag does not have to be a span tag. Don't worry about it now, it will be covered later.</para>
-				</footnote>
-			</para>
-			<para>
-				You may be wondering how Tapestry calls the <varname>getSomeText()</varname>
-				method. In the specification above, we have used an &OGNL; binding.
-				This type of binding uses an expression, which can be read like
-				a JavaBean name. For the above, it means that the expression "someText"
-				relates to the <varname>getSomeText()</varname> and <varname>setSomeText()</varname>
-				method respectively. In the case of the &Insert; component, only 
-				<varname>getSomeText()</varname> is required, so &Insert; will not try to
-				change the value.   Also note that the example here is very simple, 
-				and returns a constant String. There is no reason why the value could
-				not come from a Database, or some other dynamic source. There is no
-				restriction on what you can do in the method.  Finally, if you do change
-                the code to return the value a different way, you don't need to change
-                the specification or HTML template.
-			</para>
-		</section>
-		<section id="simplest-app-thejavaobject">
-			<title>The Java Object</title>
-			<para>
-				With the page definition completed, we will create the Java Object that
-				is related to this page. This object will simply supply some static text
-				to the HTML template.
-			</para>
-     <figure>
-        <title>The Java Object (Home.java)</title>
-        <programlisting>
-package tutorial.hello;
-
-import net.sf.tapestry.html.BasePage;
-
-public class Home extends BasePage
-{
-	public String getSomeText()
-	{
-		return "It's a brave new world!";
-	}
-}
-</programlisting>
-      </figure>
-		</section>
-		<section id="simplest-app-pagespec">
-			<title>The Page Specification</title>
-			<para>
-				Almost there! The last step is to tie the capabilities of the Java Object,
-				into the HTML. The final piece of the puzzle is the <emphasis>page
-				specification</emphasis>.
-			</para>
-			<para>
-				Again, this file should be with the .html and .java files, in the source directory
-				for this tutorial example.
-			</para>
-     <figure>
-        <title>The Page Specification (Home.page)</title>
-        <programlisting>
-&lt;?xml version="1.0" encoding="UTF-8"?&gt;
-&lt;!-- $Id: tutorial-chapter-two.xml,v 1.5 2002/09/30 22:54:21 scornflake Exp $ --&gt;
-&lt;!DOCTYPE page-specification PUBLIC
-	"-//Howard Lewis Ship//Tapestry Specification 1.3//EN"
-	"http://tapestry.sf.net/dtd/Tapestry_1_3.dtd"&gt;
-
-&lt;page-specification class="tutorial.hello.Home"&gt;
-	&lt;component id="insertSomeText" type="Insert"&gt;
-		&lt;binding name="value" expression="someText"/&gt;
-	&lt;/component&gt;
-&lt;/page-specification&gt;
-</programlisting>
-      </figure>
-      		<para>
-      		Note that Tapestry Components are different from JSP tags.
-      		Specifically, a Tapestry component takes typed values (the
-      		type is defined in the property binding part of the specification,
-      		at the top of the specification file).  Secondly, the values of a
-      		component can be read only, or read/write. In the later case, the 
-      		component Java code is able to change the value, which causes whatever
-      		was <emphasis>bound</emphasis> to that property to be changed.
-      		Lastly, components can be nested. 
-      		A component may itself be made up of many other 
-      		components (which themselves might be made up of other components, and so on),
-      		and can bind the properties of those contained 
-      		components to properties of itself.
-      		</para>
-			<para>
-				Whew! Thats it!  You can execute <emphasis>ant run</emphasis> to both
-				compile, package and run the Web Application. Go to
-	    <ulink url="http://localhost:8081/learn-tapestry/hello">
-	      <filename>http://localhost:8081/learn-tapestry/hello</filename>
-	    </ulink> to see the result.
-
-			<figure>
-        <title>Hello World Application</title>
-        <mediaobject>
-          <imageobject>
-            <imagedata fileref="images/helloworld-example.png" format="PNG"/>
-          </imageobject>
-        </mediaobject>
-      </figure>
-
-			</para>
-		</section>
-		<section id="simplest-app-summary">
-			<title>Summary</title>
-			<para>
-			What have we done?
-			<orderedlist>
-				<listitem>We have seen that an application requires a specification file, which lists
-				the pages of the application. The application specification is required for any Tapestry
-				app.</listitem>
-				<listitem>That pages are defined in terms of an HTML file (the content), a Page file
-				(which ties the content to the Java Object) and finally the Java Object for the page
-				logic.</listitem>
-				<listitem>That a Tapestry application, consisting of any number of pages is
-				controlled by a single servlet</listitem>
-				<listitem>Built an example which uses both static content, and content
-				from a java object</listitem>
-			</orderedlist>
-			</para>
-			<para>
-				The next section details the separate parts of a Tapestry application in more detail.
-			</para>
-		</section>
-	</section>
-
-	<section id="diff-parts">
-		<title>Different Parts of a Tapestry Application</title>
-		This last section outlines in a little more detail the separate parts of
-		a Tapestry application. <footnote><para>The Developer Reference is the definitive
-		manual for this information</para></footnote>
-		<section id="part-servlet">
-			<title>The Servlet</title>
-			<para>
-				The part most obvious if you have previous Java Web experience is the Servlet.
-				In Tapestry, only a single servlet is required per application in most cases. The
-				servlet becomes the glue between the web server itself, and the rest of tapestry.
-				It is otherwise known as a <emphasis>Controller</emphasis> servlet,
-				since it takes care of farming out whatever request is given to it to the right
-				part of the Tapestry application.
-			</para>
-		</section>
-		<section id="part-app-comp">
-			<title>Application Engine</title>
-			<para>
-				As each new client connects to the application, an instance of the
-				application engine is created for them.  The application engine is used to
-				track that client's activity within the application.
-			</para>
-			<para>
-				The application engine is an instance, or subclass of, the Tapestry class
-				&SimpleEngine;.
-				In these first example, we have no additional behavior to add to the provided base class, so
-				we simply use &SimpleEngine; directly.
-			</para>
-		</section>
-		<section id="part-pages">
-			<title>Pages</title>
-			<para>
-				Pages make up the visible content of the application. Each page consists
-				of a page template (The HTML) and page logic (the Java). Tapestry links these
-				together using a '.page' specification.
-			</para>
-			<para>
-				One of the goals of Tapestry is that the HTML should have the minimum amount
-				of special markup. As you saw in the example presented above, the page
-				was completely standard HTML, without any additional markup.  This idea is
-				carried across to other parts as well - when editing a Java object, you hardly
-				ever see any HTML (which keeps the java <emphasis>clean</emphasis>),
-				and when editing a page specification - you are editing straight XML, with no
-				Java or HTML in sight.
-			</para>
-			<para>
-				Tapestry inserts content in the HTML at points that you define using the
-				<varname>jwcid</varname> attributes on elements.
-			</para>
-		   <para>Tapestry doesn't really care what HTML tag you use, as long as you balance
-			 	the tag correctly.  In fact, it ignores the tag entirely:  the <varname>insertSomeText</varname>
-				component above could just has easily been identified with a &lt;text&gt; tag,
-				or any other tag for that matter.  Tapestry is only interested in the <emphasis>structure</emphasis>
-				of the HTML template.  The fact that you can use meaningful tags is a convienience;
-				it allows a Tapestry HTML template to be previewed in a <acronym>WYSIWYG</acronym>
-				HTML editor, such as HomeSite.   Additionally, Tapestry edits out the content of tags
-				for components that don't wrap around other content.
-				This allows a preview values to be kept in the template.
-				</para>
-</section>
-		<section id="part-components">
-			<title>Components</title>
-			<para>
-				Tapesty components provide the core building blocks for the application. They can
-				be thought of as 'black boxes' that both render HTML and respond to user actions.
-			</para>
-			<para>
-				Pages are typically built using multiple components. Components may either
-				exist on their own (non-wrapping, &Insert;) or may enclose some other number of
-				components (wrapping, e.g: &Form;).  Within a page, the HTML refers to various
-				components by name. Component names are defined in the page specification.
-			</para>
-			<para>
-				The component specification includes both name, type and some bound properties.
-				The properties define where the component gets its data from, and what other
-				objects it interacts with.
-				For example, in the 'Hello World' application above, a component
-				with name <varname>insertSomeText</varname> was defined to be an &Insert;,
-				and was bound to the <varname>someText</varname> property of the
-				page object. In this example, there is no real interaction, as the &Insert;
-				component does not provide any links for the user to click, nor forms to subnmit.
-			</para>
-		</section>
-		<section id="part-logic">
-			<title>Application Logic</title>
-			<para>
-				The last part of the page is the logic - which is simply a standard Java class
-				having the same name as the page (e.g: the Home page has a class called
-				<classname>Home.java</classname>.
-			</para>
-		</section>
-	</section>
-</chapter>
-
diff --git a/3.0.4/doc/src/Tutorial2/tutorial-chapter-intro-examples.xml b/3.0.4/doc/src/Tutorial2/tutorial-chapter-intro-examples.xml
deleted file mode 100644
index b3582b3..0000000
--- a/3.0.4/doc/src/Tutorial2/tutorial-chapter-intro-examples.xml
+++ /dev/null
@@ -1,309 +0,0 @@
-  <chapter id="Introductory-examples">
-  	<title>Introductory Examples</title>
-  	<para>
-  	This section provides a set of examples that show some of the fundamental aspects of
-  	Tapestry. It begins with a discussion on Tapestry binding, which is the process by which you
-  	as a developer link your objects to the components in the HTML page, or put another way -
-          it is how you provide to the compoents the values they need (think of methods that
-          need arguments), as well as a way for the component to change those values.
-          . Moving on, we
-  	create a simple multiple page application using the &PageLink; component, and then show
-  	how to respond to user actions (typically &Submit; buttons) via the &ActionLink; component.
-  	</para>
-  	<para>
-  	More advanced examples can be found from <xref linkend="forms"/> onwards.
-  	</para>
-
-  	<section id="ex-propertybinding">
-  		<title>Introduction to Tapestry Binding</title>
-  		<para>
-  		Most components have more than a single property. For example, the &Form; component typically
-  		requires that both <varname>listener</varname> and <varname>delegate</varname> properties be set to
-  		something meaningful.
-  		</para>
-  		<para>
-  		There are multiple ways to provide values for the component properties:
-			<variablelist>
-				<varlistentry>
-					<term>Property Binding</term>
-					<listitem><para>
-					Binds a component value to something, using an &OGNL; (Object Graph Navigation Language) expression.
-					This is the most flexible
-					binding type within Tapestry. These bindings in the most part look like JavaBean property names
-					strung together with dots. e.g: <varname>visit.name</varname>, would work against against
-					the following object graph:	<function>this.getVisit().getName()</function>.
-					Virtually anything can be references by
-					an &OGNL; expression, including methods, JavaBean properties and static fields
-					(<function>Boolean.TRUE</function>).</para>
-					<para>
-					<para><emphasis>All OGNL expressions are evaluated in the context of a current object, and a chain
-					simply uses the result of the previous link in the chain as the current object for the next one.
-					You can extend a chain as long as you like. (from &OGNL; web site)</emphasis></para></para>
-                    <figure>
-                      <title>OGNL binding example</title>
-                      <programlisting>
-
-  &lt;binding&gt; name="value" expression="visit.name"/&gt;
-                      </programlisting>
-                    </figure>
-					<para>
-					In Tapestry, the current object that you start with is the object for the page
-					in question. For the 'hello world' application covered previously, this is the
-					OGNL expressions must begin their evaluation somewhere. In Tapestry, this is
-					the <classname>tutorial.hello.Home</classname> obect.
-					Lets run through a few quick examples:
-					<orderedlist>
-						<listitem>Use <emphasis>sometext</emphasis> to access <function>public String getSomeText()</function> from the example</listitem>
-						<listitem>Use <emphasis>sometext.length()</emphasis> to access the <function>length()</function> method of the <function>String</function> object returned by the <function>getSomeText()</function> methodd.</listitem>
-						<listitem>Use <emphasis>true</emphasis> to refer to the constant which equals 'true' or <function>Boolean.TRUE</function></listitem>
-						<listitem>Use <emphasis>user.listAllCustomers()</emphasis> to get the <function>Collection</function> from the method <function>currentPageObject.getUser().listAllCustomers()</function> which is a member of the current page object</listitem>
-						<listitem>Use <emphasis>@com.someplace.MyClass@interestingMethod("hello world")</emphasis> to return the value from the static method <function>com.someplace.MyClass.interestingMethod(String arg)</function></listitem>
-						<listitem>Use <emphasis>@Boolean@TRUE</emphasis> to refer to <function>Boolean.TRUE</function></listitem>
-					</orderedlist>
-					</para>
-					<para>
-					This section provides only a brief introduction to the use of OGNL. For a full explanation, see the &OGNL; website.
-					</para>
-					</listitem>
-				</varlistentry>
-
-				<varlistentry>
-					<term>Static Binding</term>
-					<listitem><para>
-					A completely static piece of text, hardcoded into the component specification. As a result, static
-					bindings are not dynamic (being static!) and are read only.
-					</para>
-                    <figure>
-                      <title>Static Binding example</title>
-                      <programlisting>
-
-  &lt;static-binding name="value"&gt;Click To Save&lt;/static-binding&gt;
-                      </programlisting>
-                    </figure>
-                    <para>
-                        The example above would use the text <emphasis>Click to Save</emphasis> as
-                        the value for the binding. Note that <varname>static</varname> when used to
-                        refer to a binding type does not mean the same as <varname>static</varname> within
-                        Java itself. In Tapestry, the meaning is that the value is constant, and will never
-                        change.
-                    </para>
-					</listitem>
-				</varlistentry>
-
-				<varlistentry>
-					<term>Field Binding</term>
-					<listitem><para>
-					Refers to a static member variable on some class, e.g: <function>Boolean.TRUE</function>
-					or <function>com.mycompany.myclass.MyObject.SOMEVAR</function>. Static bindings must use full qualified
-					object names, except if the property being referenced is within the <function>java.lang</function> package.
-					</para>
-                        <para>Field bindings important Java code and referenced in pages, which ensures
-                        that the code and pages are synchronized and that changes occur only in a single place.</para>
-					<para>
-					Note that field bindings can also be achieved using an OGNL expression and property binding.
-                        The reason that field bindings reman is historic. It is likely that they will be removed
-                        in the 3.0 release, because you can achieve exactly the same thing with an &OGNL;
-                        binding.
-					</para>
-                    <figure>
-                      <title>Field Binding example (set the value to 'true')</title>
-                      <programlisting>
-
-  &lt;field-binding name="value" field-name="Boolean.TRUE"/&gt;
-                      </programlisting>
-                    </figure>
-					</listitem>
-				</varlistentry>
-
-				<varlistentry>
-					<term>String Binding</term>
-					<listitem><para>
-					Used for localization, the value of this binding should refer to some localized string resource for this page (
-					part of a resource bundle).  The binding is read only.  The example below shows a usage of a string=binding
-                        to provide a value for an &Insert; component. It is assumed that the properties file for the component,
-                        with at least a line along the lines of <varname>pageTitle=Super Application Title!</varname>.
-					</para>
-                    <figure>
-                      <title>String Binding example </title>
-                      <programlisting>
-
-  &lt;string-binding name="value" key="pageTitle"/&gt;
-                      </programlisting>
-                    </figure>
-					</listitem>
-				</varlistentry>
-			</variablelist>
-  		</para>
-
-			<para>
-			The next section takes you through the building of slightly more complex application.
-			</para>
-  	</section>
-
-		&into-examples-pagelinking;
-
-		<section id="ex-actions">
-			<title>Simple Actions</title>
-			<para>
-                You may notice a bunch more components on the second page than was really obvious
-                from the previous section. That's because I didn't want to complicate the previous
-                example.   Also note that there is lots of detail on &Form;s and other components later on.
-                What we are going to do here is give a taste of the simplicity that is Tapestry :-)
-			</para>
-            <para>
-                Below is the full HTML template and application specification, and Java code.
-                You will note that the code itself is really really simple, which is very cool.
-                In order to have an action called
-                on a component. You just name the method. Done.
-                <tip>
-                    The method must have a particular signature - as you will see by the code it takes
-                    a single <varname>IRequestCycle</varname> argument and is capable of throwing
-                    <varname>RequestCycleException</varname>s.
-                </tip>
-            </para>
-            <para>
-                Breaking from tradition, I will provide you the screenshot at the top of the section:
-            </para>
-            <figure>
-			    <title>Second page, showing various Actions</title>
-                <mediaobject>
-                    <imageobject>
-                        <imagedata fileref="images/pagelinking-actions.png" format="PNG"/>
-                    </imageobject>
-                </mediaobject>
-		    </figure>
-
-            <figure>
-                <title>Full HTML Template (for second page)</title>
-                <programlisting>
-    &lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"&gt;
-    &lt;html&gt;
-    &lt;head&gt;
-        &lt;title&gt;Page Linking Tutorial (page 2)&lt;/title&gt;
-    &lt;/head&gt;
-    &lt;body&gt;
-    &lt;h1&gt;Page Two&lt;/h1&gt;
-
-    &lt;center&gt;
-    &lt;table border=0&gt;
-        &lt;tr&gt;&lt;th&gt;Well, here we are! Let have some Action!&lt;/th&gt;&lt;/tr&gt;
-        &lt;tr&gt;&lt;td&gt;&lt;hr&gt;&lt;/td&gt;&lt;/tr&gt;
-        &lt;tr&gt;&lt;td&gt;Click &lt;span jwcid="homePage"&gt;here&lt;/span&gt; to go back to the home page.&lt;/td&gt;&lt;/tr&gt;
-        &lt;tr&gt;&lt;td&gt;Click &lt;span jwcid="linkListener"&gt;here&lt;/span&gt; to invoke a &lt;b&gt;DirectLink&lt;/b&gt; listener&lt;/td&gt;&lt;/tr&gt;
-        &lt;form jwcid="form"&gt;
-            &lt;tr&gt;&lt;td&gt;Click &lt;span jwcid="buttonListener"&gt;here&lt;/span&gt; to invoke a &lt;b&gt;Submit&lt;/b&gt; listener&lt;/td&gt;&lt;/tr&gt;
-        &lt;/form&gt;
-
-        &lt;!-- This part shows the 'result' of the listener --&gt;
-        &lt;tr&gt;&lt;td&gt;&lt;hr&gt;&lt;/td&gt;&lt;/tr&gt;
-        &lt;tr&gt;&lt;td&gt;&lt;span jwcid="result"/&gt;&lt;/td&gt;&lt;/tr&gt;
-
-    &lt;/body&gt;
-    &lt;/html&gt;
-				</programlisting>
-			</figure>
-
-            <para>
-                The template contains one &PageLink; which takes you back to the Home page
-                , one &DirectLink; and one &Submit; button. The later two links just set some text
-                inside the Java object, which is then displayed at the bottom of the table (this is
-                just so that you can see that the action listeners are called).
-                Finally, you will note the use of a &Form; object in the template - this is
-                required for the &Submit; component to work.  As mentioned above, don't worry to
-                much about how all this works - concentrate on the use of the &DirectLink;
-                and &Submit; listener methods.
-            </para>
-            <figure>
-                <title>Full Page Specification (for second page)</title>
-                <programlisting>
-    &lt;?xml version="1.0" encoding="UTF-8"?&gt;
-    &lt;!-- $Id: Home.page,v 1.6 2002/05/13 14:00:37 scornflake Exp $ --&gt;
-    &lt;!DOCTYPE page-specification PUBLIC
-        "-//Howard Lewis Ship//Tapestry Specification 1.3//EN"
-        "http://tapestry.sf.net/dtd/Tapestry_1_3.dtd"&gt;
-
-    &lt;page-specification class="tutorial.pagelinking.SecondPage"&gt;
-        &lt;component id="homePage" type="PageLink"&gt;
-            &lt;static-binding name="page"&gt;Home&lt;/static-binding&gt;
-        &lt;/component&gt;
-
-        &lt;component id="form" type="Form"&gt;
-            &lt;binding name="stateful" expression="false"/&gt;
-        &lt;/component&gt;
-
-        &lt;component id="result" type="InsertText"&gt;
-            &lt;binding name="value" expression="result"/&gt;
-        &lt;/component&gt;
-
-        &lt;component id="linkListener" type="DirectLink"&gt;
-            &lt;binding name="listener" expression="<emphasis>listeners.linkListener</emphasis>"/&gt;
-            &lt;binding name="stateful" expression="false"/&gt;
-        &lt;/component&gt;
-
-        &lt;component id="buttonListener" type="Submit"&gt;
-            &lt;binding name="listener" expression="<emphasis>listeners.buttonListener</emphasis>"/&gt;
-        &lt;/component&gt;
-    &lt;/page-specification&gt;
-				</programlisting>
-			</figure>
-
-            <para>
-                And now the Java object.  You can see the listener definitions at the top - very simple.
-                The <varname>result</varname> variable and <varname>getResult()</varname> method are
-                just there to provide feedback to the user.  Of course, now that we're in Java land, you
-                can imagine that doing something more complex like calling an EJB object, or some other
-                business related method is easy. Most likely, you would then use the result of the method
-                to affect the rendering - which is what all this is really about.
-                <footnote> <para>
-                    Dynamic behavior, that is...
-                </para></footnote>
-            </para>
-
-            <figure>
-                <title>Java Object (for second page)</title>
-                <programlisting>
-    package tutorial.pagelinking;
-
-    import net.sf.tapestry.html.BasePage;
-    import net.sf.tapestry.IRequestCycle;
-    import net.sf.tapestry.RequestCycleException;
-
-    /**
-     * Provides the listeners and a place to store a simple 'result' string
-     * that can be shown back to the user.
-     */
-    public class SecondPage extends BasePage {
-        public void linkListener(IRequestCycle cycle) throws RequestCycleException {
-            result = "The link listener was called - which is a good thing.";
-        }
-
-        public void buttonListener(IRequestCycle cycle) throws RequestCycleException {
-            result = "The submit listener was called - which is also a good thing.";
-        }
-
-        public String getResult() {
-            return result;
-        }
-
-        /** Clean up */
-        public void detach() {
-            super.detach();
-            result = null;
-        }
-
-        private String result;
-    }
-
-				</programlisting>
-			</figure>
-
-            <para>
-                That should give you a taste of the ease by which Tapestry can be used to handle user
-                actions.  The next section takes a break from components and describes the types
-                of pages that a Tapestry application can have. It also shows you how to override
-                the standard Exception page.
-            </para>
-       </section>
-
-  </chapter>
-
diff --git a/3.0.4/doc/src/Tutorial2/tutorial-chapter-intro.xml b/3.0.4/doc/src/Tutorial2/tutorial-chapter-intro.xml
deleted file mode 100644
index c84404c..0000000
--- a/3.0.4/doc/src/Tutorial2/tutorial-chapter-intro.xml
+++ /dev/null
@@ -1,227 +0,0 @@
-<chapter id="intro">
-  <title>Introduction</title>
-  <para>Welcome to Tapestry!</para>
-  <para>
-    Tapestry is an application framework for developing web applications.  It uses
-    a component object model to represent the pages of a web application.  This is
-    similar to spirit to using the Java Swing component object model to build GUIs.
-  </para>
-  <para>
-    This tutorial exists to help newcomers quickly understand Tapestry.
-    <xref linkend="intro"/>
-    begins by providing some detail on various ways in which you can use Tapestry in your environment.
-    <xref linkend="getting-started"/> and <xref linkend="Introductory-examples"/> provide both a basic
-    understanding of Tapestry, along with some introductory examples.
-
-    <xref linkend="pages"/>,
-    <xref linkend="forms"/>,
-    <xref linkend="built-ins"/>,
-    <xref linkend="assets"/> and
-    <xref linkend="localization"/>
-    explain the core Tapestry concepts in detail, providing full
-    examples along the way to assist you in learning how the framework is used.
-
-    The remainder of the tutorial provides useful information on advanced topics including component creation,
-    usage of the component inspector, EJB support, and optimizations.
-  </para>
-
-  <para>
-
-  </para>
-
-  <section id="working-with-tapestry">
-    <title>Working with Tapestry</title>
-    <para>
-      The goal of Tapestry is to eliminate most of the unnecessary <footnote><para>
-          Session management, manual validation and other "application plumbing" tasks.  In other words,
-          you get to focus on the problem you're trying to solve as opposed to writting a web framework
-          every time you go to write a web app or site.
-          </para></footnote>
-        coding in a web application.  Under Tapestry,
-      nearly all code is directly related to application functionality, with very little "plumbing".  If you
-      have previously developed a web application using Microsoft Active Server Pages, JavaServer
-      Pages or Java Servlets, you may take for granted all the plumbing:  writing servlets, assembling
-      URLs, parsing URLs, managing objects inside the &HttpSession;, etc.
-    </para>
-    <para>
-      Tapestry takes care of nearly all of that, for free.  It allows for the development of rich, highly
-      interactive applications.
-    </para>
-    <para>
-      Before you get into the wonders of Tapestry, you will need to setup your development
-      environment such that you are able to both run the provided tutorial applications,
-      and also such that you are able to
-      compile and run the code that you develop while moving through this tutorial.
-        If you're keen to read through some of the tutorial content without doing this setup,
-        you can skip to <xref linkend="getting-started"/>.
-    </para>
-  </section>
-
-  <section id="environment-setup">
-    <title>Setting up the environment</title>
-
-    <para>
-      This document expects that you will have extracted the full Tapestry distribution to your
-      <filename class="directory">C:</filename> drive.
-      <footnote> <para>
-          If you are using Solaris or another non-Windows operating system, you're expected
-          to be savvy enough to translate to a sensibly constructed file system.
-      </para></footnote>
-
-      This will have created a directory <filename class="directory">C:\Tapestry-<replaceable>x.x</replaceable>
-      </filename>
-      and, beneath it, several more directories.
-      <footnote> <para>
-          The three numbers are the release number.  At the time of this writing, the release
-          was 2.3, but this is constantly changing.  Simply adjust the actual pathname to
-          reflect the release of Tapestry you downloaded.
-      </para></footnote>
-    </para>
-    <para>
-      The source code for the Tutorial is distributed as a JAR file,
-      <filename>src/examples-src.jar</filename>.  A precompiled WAR file,
-      <filename>lib/tutorial.war</filename> is included in the distribution.
-      The Tapestry distribution includes an &Ant; build file that allows the
-      Tutorial to be directly executed.  Ant release 1.5 is required.
-    </para>
-
-    <para>
-      From the Tapestry root directory,
-      execute the command <command>ant -emacs run-tutorial</command>, which will launch the
-      Jetty server for the Tutorial.
-    </para>
-    <para>
-      Once Jetty is running, you can access the Tutorials using the URL
-      <ulink url="http://localhost:8080/tutorial">
-	<filename>http://localhost:8080/tutorial</filename>
-      </ulink>.
-      You should do this now, in order to check that your
-      environment is setup correctly so far.
-    </para>
-    <figure>
-      <title>Tutorial Index Page</title>
-      <mediaobject>
-	<imageobject>
-	  <imagedata fileref="images/tutorial-index.png" format="PNG"/>
-	</imageobject>
-      </mediaobject>
-    </figure>
-
-    Tapestry can exist in any Servlet (v2.1 +) compatible container,
-    for example JBoss. If you wish to deploy and run the tutorial in
-    an alternative environment please see <xref linkend="integration"/>
-  </section>
-
-  <section id="basic-dev-env">
-    <title>A basic development environment</title>
-    <para>
-      This section details how to setup a development environment suitable
-      for use with this tutorial. It will provide basic &Ant; support, and
-      the ability to test your examples using &Jetty;.
-    </para>
-
-    <para>
-      Within the <filename>examples</filename> directory, you will find a sample
-			build environment (<ulink url="examples/DevelopmentEnvironment.zip">
-				<filename>tutorial-environment.zip</filename>.
-				</ulink>), which you can use as you progress through this document.
-      This includes a build file capable of:
-      <orderedlist>
-	<listitem>Compiling the code</listitem>
-	<listitem>Packaging your developed code into a WAR</listitem>
-	<listitem>Running a Jetty instance, using your compiled code, and</listitem>
-	<listitem>Deploying your code into a user specified directory (for J2EE containers)</listitem>
-      </orderedlist>
-    </para>
-    <para>
-      To setup your environment, perform the following steps:
-      <orderedlist>
-	<listitem>The first step is to decide a directory for your example code.
-	  This tutorial uses <filename class="directory">C:\TapestryExample</filename>.
-	  <footnote><para>As before, it is assumed that if you are using a non-Windows environment,
-	    that you have the knowledge necessary to translate the paths</para></footnote>
-	</listitem>
-	<listitem>Extract the contents of the archive <filename>tutorial-environment.zip</filename>
-	  into this new directory.</listitem>
-	<listitem>Open the file <filename>build.xml</filename> with your favourite editor,
-	  and change the properties as listed below:
-	  <table>
-	    <title>Ant Build Properties</title>
-	    <tgroup cols="2" align="left" colsep="1" rowsep="1">
-	      <thead>
-		<row>
-		  <entry>Property Name</entry>
-		  <entry>Example Value</entry>
-		</row>
-	      </thead>
-	      <tbody>
-		<row>
-		  <entry>deployment.dir</entry>
-		  <entry><filename>c:\JBoss-3.0.0\server\default\deploy</filename></entry>
-		</row>
-		<row>
-		  <entry>tapestry.install.dir</entry>
-		  <entry><filename>c:\Tapestry-<replaceable>x.x</replaceable></filename></entry>
-		</row>
-	      </tbody>
-	    </tgroup>
-	  </table>
-	</listitem>
-	<listitem>Save the file :-)</listitem>
-	<listitem>
-	  <para>
-	    Go to a command console, to the directory you will be using
-	    for development. In the case of this tutorial, that is
-	    <filename class="directory">C:\TapestryExample</filename>
-	    and type 'ant'. If all goes will, you will see a message saying that the build was successful.
-	  </para>
-	</listitem>
-	<listitem>
-	  <para>
-	    Type 'ant run', and then open a web browser to
-	    <ulink url="http://localhost:8081/learn-tapestry">
-	      <filename>http://localhost:8081/learn-tapestry</filename>
-	    </ulink>
-	    <footnote><para>
-	      Note that this is intentionally a
-	      different port number from the tapestry tutorial example itself.
-	      It means you can run both at once if you wish.</para>
-	    </footnote>
-	  </para>
-	  <para>
-	    <figure>
-	      <title>What you should see, when you click on the link above</title>
-	      <mediaobject>
-		<imageobject>
-		  <imagedata fileref="images/tapestry-dev-env.png" format="PNG"/>
-		</imageobject>
-	      </mediaobject>
-	    </figure>
-	  </para>
-	</listitem>
-      </orderedlist>
-      A brief overview of the tasks provided by the script:
-      <variablelist>
-	<varlistentry>
-	  <term>compile</term>
-	  <listitem>Compiles any code within the <filename>src\</filename> directory (which is created for you by the
-	    script, if you don't create it yourself)</listitem>
-	</varlistentry>
-	<varlistentry>
-	  <term>war</term>
-	  <listitem>Packages up the compiled classes, Tapestry libs, and other 3rd party libs into
-	    a WAR file for deployment into a Servlet container</listitem>
-	</varlistentry>
-	<varlistentry>
-	  <term>deploy</term>
-	  <listitem>Builds the WAR if it does not exist, and copies it to the deployment
-	    location specified by <varname>deployment.dir</varname></listitem>
-	</varlistentry>
-	<varlistentry>
-	  <term>run</term>
-	  <listitem>Runs your compiled Tapestry Application via Jetty, on port 8081</listitem>
-	</varlistentry>
-      </variablelist>
-    </para>
-  </section>
-</chapter>
diff --git a/3.0.4/doc/src/Tutorial2/tutorial-inspector.xml b/3.0.4/doc/src/Tutorial2/tutorial-inspector.xml
deleted file mode 100644
index e51ef7e..0000000
--- a/3.0.4/doc/src/Tutorial2/tutorial-inspector.xml
+++ /dev/null
@@ -1,185 +0,0 @@
-<chapter id="inspector">
-    <title>The Tapestry Inspector</title>
-    <para>
-Unlike scripting systems (such as JavaServer Pages and the like), Tapestry applications are gifted
-with a huge amount of information about how they are implemented. The same component
-object model that allows Tapestry to perform so many ordinary functions can be leveraged to
-provide some unusual functionality.
-</para>
-    <para>
-Run the Border tutorial from the previous chapter and click on the show inspector button (the
-gear icon in the lower right corner).  A new window will launch, containing the Inspector:
-</para>
-    <figure>
-      <title>Tapestry Inspector</title>
-      <mediaobject>
-        <imageobject>
-          <imagedata fileref="images/Inspector-Spec.jpg" format="JPEG"/>
-        </imageobject>
-      </mediaobject>
-    </figure>
-    <para>
-The Inspector displays live information from the running application; in fact, it is simply another
-part of the application (the drop-down list of pages will include the Inspector page itself).  The
-Inspector is most often used to debug HTML generation by viewing the HTML templates.
-It is also very useful in debugging problems where the wrong data is displayed, since it
-allows the developer to navigate to the particular components and see directly what properties
-are used.
-</para>
-    <section id="inspector.navigation">
-      <title>Navigation</title>
-      <para>
-The inspector allows the user to navigate to any page and any component on a page.
-The drop down list in the upper left corner lists all pages in the application; changing
-the selection immediately updates the Inspector.
-</para>
-      <para>Next to the drop down list is the component path; a list of nested component ids, starting
-with "page" to represent the page.  Clicking on any id in the path changes the information displayed
-below.
-</para>
-      <para>
-Underneath the component navigation tools are a set of tab buttons for the different
-inspector views.
-</para>
-    </section>
-    <section id="inspector.specification">
-      <title>Specification View</title>
-      <figure>
-        <title>Specification View</title>
-        <mediaobject>
-          <imageobject>
-            <imagedata fileref="images/Inspector-Spec.jpg" format="JPEG"/>
-          </imageobject>
-        </mediaobject>
-      </figure>
-      <para>
-The specification view shows several sets of information about the selected component.
-</para>
-      <para>
-First shown are basic properties, such as the specification path and Java class.
-</para>
-      <para>
-Each formal parameter is displayed.  Unbound parameters will show no value in
-the Binding column.
-</para>
-      <para>
-Beneath formal parameters are informal parameters (the <classname>Border</classname>
-component has none, so there is nothing to see).  Informal parameters are
-usually mapped directly to HTML attributes.  They are most often used with
-components that generate a single HTML tag, such as the &ActionLink;,
-&DirectLink; or &TextField; components.
-</para>
-      <para>
-If the component contains assets, they are shown next.
-</para>
-      <para>
-Any helper beans for the component are displayed last.
-</para>
-      <para>
-On the right side is a list of each embedded component and its type.  Clicking
-the component id will navigate to the selected component.
-</para>
-    </section>
-    <section id="inspector.template">
-      <title>Template View</title>
-      <figure>
-        <title>Template View</title>
-        <mediaobject>
-          <imageobject>
-            <imagedata fileref="images/Inspector-Template.jpg" format="JPEG"/>
-          </imageobject>
-        </mediaobject>
-      </figure>
-      <para>
-The template view shows the HTML template for the component.  It shows dynamic tags in bold,
-and makes the component id a clickable link (which navigates to the component, but maintains
-the Template View).  This allows the developer to quickly drill down through the components.
-</para>
-    </section>
-    <section id="inspector.properties">
-      <title>Properties View</title>
-      <figure>
-        <title>Properties View</title>
-        <mediaobject>
-          <imageobject>
-            <imagedata fileref="images/Inspector-Properties.jpg" format="JPEG"/>
-          </imageobject>
-        </mediaobject>
-      </figure>
-      <para>
-The properties view shows persistant properties stored by the page (or any components on
-the page).  Most pages do not store any persistent state (it is more often stored
-in the application's visit object).
-</para>
-    </section>
-    <section id="inspector.engine">
-      <title>Engine View</title>
-      <figure>
-        <title>Engine View</title>
-        <mediaobject>
-          <imageobject>
-            <imagedata fileref="images/Inspector-Engine.jpg" format="JPEG"/>
-          </imageobject>
-        </mediaobject>
-      </figure>
-      <para>
-The engine view shows information about the running application engine, as well as some details
-from the application specification.
-</para>
-      <para>
-Under Operations are two buttons:  the first restarts the application.  The
-second (when enabled
-	<footnote>
-          <para>
-		By default, the reset service (used by the reset button) is disabled.
-		To enable it, set the JVM system property
-		<varname>net.sf.tapestry.enable-reset-service</varname> to true.
-		The service is disabled since it is too tempting a target for a denial
-		of service attack.
-		</para>
-        </footnote>) resets the application, which forces a reload of all component specifications
-and HTML templates.  This is useful during development, since it allows for incremental development
-without stopping and restarting the servlet container.
-</para>
-      <para>
-Below the operations is a binary dump of the application engine.  This is useful when
-developing to see how large the serialized state is, and perhaps gleam how it might be trimmed.
-</para>
-      <para>
-Further below (and not visible in the screen shot above), is a dump of the request context.  This
-is that vast amount of data also displayed when an unexpected exception is thrown.
-</para>
-    </section>
-    <section id="inspector.logging">
-      <title>Logging View</title>
-      <figure>
-        <title>Logging View (Level Selection)</title>
-        <mediaobject>
-          <imageobject>
-            <imagedata fileref="images/Inspector-Logging.jpg" format="JPEG"/>
-          </imageobject>
-        </mediaobject>
-      </figure>
-      <para>
-The Logging view allows dynamic integration with the
-<ulink url="http://jakarta.apache.org/log4j">Log4J</ulink> logging framework.  The top half
-of the page allows the logging level of any category to be
-dynamically set.  This is useful when debugging, since logging output for specific
-classes
-	<footnote>
-          <para>
-			By convention, logging categories match the complete class name
-			of the corresponding class.  All Tapestry logging categories
-			conform to this convention.
-		</para>
-        </footnote>
-can be individually enabled or disable.
-</para>
-      <para>
-The right side is a small second form, allowing new categories to be created.
-This can be useful to make broad changes in logging levels.  For instance, creating
-a category "net.sf.tapestry" would allow the logging level of all Tapestry classes to be
-set in a single place.
-</para>
-    </section>
-  </chapter>
\ No newline at end of file
diff --git a/3.0.4/doc/src/Tutorial2/tutorial-localization.xml b/3.0.4/doc/src/Tutorial2/tutorial-localization.xml
deleted file mode 100644
index 1f96f93..0000000
--- a/3.0.4/doc/src/Tutorial2/tutorial-localization.xml
+++ /dev/null
@@ -1,144 +0,0 @@
-
-
-<chapter id="localization">
-    <title>Localization</title>
-    <para>
-One of the most powerful and useful features of the Tapestry framework is the way in which it
-assists with localization of a web application.  This is normally an ugly area in web applications,
-with tremendous amounts of ad-hoc coding necessary.
-</para>
-    <para>
-Because Tapestry does such a strong job of seperating the presentation of a component (its
-HTML template) from its control logic (its specification and Java class) it becomes easy for it to
-perform localization automatically.  It's as simple as providing additional localized HTML
-templates for the component, and letting the framework select the proper one.
-</para>
-    <para>
-However, the static text of an application, provided by the HTML templates, is not all.
-</para>
-    <para>
-Applications also have assets (images, stylesheets and the like) that must also be localized: that
-fancy button labeled "Search" is fine for your English clients, but your
-French clients will require
-a similar button labeled "Recherche".
-</para>
-    <para>
-Again, the framework assists, because it can look for localized versions of the assets as it runs.
-</para>
-    <para>
-The locale application demostrates this.  It is a very simply application that demonstrates changing
-the locale of a running application
-	<footnote>
-        <para>
-		All the translations were performed using
-		<ulink url="http://world.altavista.com/">Babelfish</ulink>, and are probably quite laughable to
-		someone who actually speaks the alternate
-		languages.
-		</para>
-      </footnote>
-    </para>
-    <para>
-A demonstration of localization is built into the Workbench, under the <acronym>L10N</acronym>
-      <footnote>
-        <para>
-The "10" refers to the number of letters between 'l' and 'n' in the word 'localization'
-</para>
-      </footnote> tab.
-The page allows the user to select a new language for the application:
-</para>
-    <figure>
-      <title>L10N Page (English)</title>
-      <mediaobject>
-        <imageobject>
-          <imagedata fileref="images/localize-home-english.jpg" format="JPEG"/>
-        </imageobject>
-      </mediaobject>
-    </figure>
-    <para>
-Selecting "German" from the list and clicking the "Change" button brings you to a new page that
-acknowledges your selection:
-</para>
-    <figure>
-      <title>Locale Changed (German)</title>
-      <mediaobject>
-        <imageobject>
-          <imagedata fileref="images/localize-changed-german.jpg" format="JPEG"/>
-        </imageobject>
-      </mediaobject>
-    </figure>
-    <para>
-Clicking the button (it's labeled "Return" in German) returns you to the L10N page to
-select a new language:
-</para>
-    <figure>
-      <title>L10N Page (German)</title>
-      <mediaobject>
-        <imageobject>
-          <imagedata fileref="images/localize-home-german.jpg" format="JPEG"/>
-        </imageobject>
-      </mediaobject>
-    </figure>
-    <para>
-The neat thing here is that the <classname>L10N</classname> page has been localized into
-German as well; it shows
-equivalent German text, the options in the popup list are in German, and the "Change" button
-has been replaced with a German equivalent.
-</para>
-
-<section id="locale.template">
-	<title>Localization of HTML Templates</title>
-
-<para>
-Localization of HTML templates ia automatic.  When Tapestry reads a template, it looks for a localized version of it.
-In this example, in addition to the English language <filename>Localization.html</filename>, three additional files were created:
-<filename>Localization_de.html</filename>, <filename>Localization_fr.html</filename> and <filename>Localization_it.html</filename>.
-</para>
-
-<para>
-Tapestry tracks the locale for each user using either an HTTP Cookie, or the &HttpSession;.  It makes sure that all templates for all components
-on the page use the best available template; it does a standard search.
-</para>
-
-	</section>
-
-<section id="locale.assets">
-	<title>Localization of Assets</title>
-
-<para>
-In the L10N pages, there are images that are also localized.
-Tapestry has a hand in this as well.  As with HTML templates, Tapestry
-searches for matches based on the user's locale.
-
-</para>
-
-<para>
-Both context assets (assets that are part of the WAR) and private assets (assets that are stored in Java frameworks) can be localized.  This is demonstrated
-on the L10N page:  the "Change" button is a private asset; the "Back" button is a context asset.
-
-</para>
-
-</section>
-
-  <section id="locale.other-options">
-      <title>Other Options for Localization</title>
-      <para>
-In some cases, different localizations of the a component will be very similar, perhaps having only
-one or two small snippets of text that is different.
-In those cases, it may be easier on the developer to not localize the HTML template, but to
-replace the variant text with an
-&Insert; component.
-</para>
-      <para>
-The page can read a localized strings file (a <filename>.properties</filename> file) to get
-appropriate localized text.  This
-saves the bother of maintaining multiple HTML templates.  This is the same approach taken
-by the Apache Struts framework.
-</para>
-      <para>
-All components on a page share the single locale for the page, but each performs its own search
-for its HTML template.  This means that some components may not have to be localized, if they
-never contain any static HTML text.  This is sometimes the case for reusable components, even
-navigational borders.
-</para>
-    </section>
-</chapter>
\ No newline at end of file
diff --git a/3.0.4/doc/src/Tutorial2/tutorial-pagelinking.xml b/3.0.4/doc/src/Tutorial2/tutorial-pagelinking.xml
deleted file mode 100644
index b24bf45..0000000
--- a/3.0.4/doc/src/Tutorial2/tutorial-pagelinking.xml
+++ /dev/null
@@ -1,184 +0,0 @@
-  	<section id="ex-pagelinking">
-  		<title>Page Linking</title>
-			<para>
-				This next application introduces page linking. The application contains just two pages. The first
-				is the Home page, the second is a page to be statically linked to.
-			</para>
-			<para>
-				The code for this example can be found in 
-				<filename class="directory">c:\Tapestry-x.x\examples\Tutorial\src\tutorial\pagelinking</filename>.
-			</para>
-			<para>
-			We will start by defining the pages in the application:
-      	<figure>
-        <title>The Application Specification</title>
-        <programlisting>
-&lt;?xml version="1.0" encoding="UTF-8"?&gt;
-&lt;!-- $Id$ --&gt;
-&lt;!DOCTYPE application PUBLIC 
-	"-//Howard Lewis Ship//Tapestry Specification 1.3//EN" 
-	"http://tapestry.sf.net/dtd/Tapestry_1_3.dtd"&gt;
-
-&lt;application name="Page Linking Tutorial" engine-class="net.sf.tapestry.engine.SimpleEngine"&gt;
-  &lt;page name="Home" specification-path="/tutorial/pagelinking/Home.page"/&gt;
-  &lt;page name="SecondPage" specification-path="/tutorial/pagelinking/SecondPage.page"/&gt;
-&lt;/application&gt;
-				</programlisting>				
-				</figure>
-			</para>
-			<para>
-			We have defined two pages (one is a required page, Home) - and provided Tapestry
-			with their specifications.
-			</para>
-			<para>
-			Here is the HTML for the Home page:
-      	<figure>
-        <title>The HTML Content (Home.html)</title>
-        <programlisting>
-&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"&gt;
-&lt;html&gt;
-&lt;head&gt;
-	&lt;title&gt;Page Linking Tutorial&lt;/title&gt;
-&lt;/head&gt;
-&lt;body&gt;
-
-&lt;h1&gt;The first page&lt;/h1&gt;
-The link shown will take you to page two of this application.
-
-Click &lt;a href="#" jwcid="page2"&gt;here&lt;/a&gt; for the second page!
-
-&lt;/body&gt;
-&lt;/html&gt;
-				</programlisting>
-				</figure>
-				</para>
-				<para>
-				Now we need to tell Tapestry what kind of component <varname>page2</varname> is. In this case,
-				we want it to be a link to some other page in the application. Tapestry does this via the &PageLink;
-				component.
-				</para>
-				<para>
-				Here is the page specification:
-      	<figure>
-        <title>Home page specification</title>
-        <programlisting>
-&lt;?xml version="1.0" encoding="UTF-8"?&gt;
-&lt;!-- $Id$ --&gt;
-&lt;!DOCTYPE page-specification PUBLIC 
-	"-//Howard Lewis Ship//Tapestry Specification 1.3//EN" 
-	"http://tapestry.sf.net/dtd/Tapestry_1_3.dtd"&gt;
-
-&lt;page-specification class="net.sf.tapestry.html.BasePage"&gt;
-	&lt;component id="page2" type="PageLink"&gt;
-		&lt;static-binding name="page"&gt;SecondPage&lt;/static-binding&gt;
-	&lt;/component&gt;
-&lt;/page-specification&gt;
-				</programlisting>
-				</figure>
-				</para>
-				<para>
-				Here we specify that <varname>page2</varname> is a &PageLink; component. The example here
-				supplies the name of the destination page, which is defined in the application specification.
-				Note that in this case, the &PageLink; component outputs the content inside the %lt;a&gt;.
-				Components that do this are said to <emphasis>render</emphasis> their body sections.
-				tag. Using the correct element tag is useful for previewing the template in a browser,
-                    or some other HTML based editing tool - Tapestry will discard any attribtues that
-                    are problematic.   Another example (which you have already seen) is the &Insert;
-                    component, which will discard any content within its body.
-				</para>
-				<para>
-				If a page has no dynamic functionality, it does not require it's own Java object.
-				Here, we have used <function>class=net.sf.tapestry.html.BasePage</function> to point to the standard
-				page implementation supplied by Tapestry. The same is also done for the second page.				
-				</para>
-				<para>
-				Now lets define the second page HTML:
-      	<figure>
-        <title>SecondPage HTML</title>
-        <programlisting>
-&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"&gt;
-&lt;html&gt;
-&lt;head&gt;
-	&lt;title&gt;Page Linking Tutorial (page 2)&lt;/title&gt;
-&lt;/head&gt;
-&lt;body&gt;
-&lt;h1&gt;Page Two&lt;/h1&gt;
-Well, here we are! 
-Click &lt;span jwcid="homePage"&gt;here&lt;/span&gt; to go back to the home page.
-
-            &lt;!-- ... other HTML here ... --&gt;
-
-&lt;/body&gt;
-&lt;/html&gt;				
-				</programlisting>
-				</figure>				
-				</para>
-				<para>
-				The page specification:
-      	<figure>
-        <title>SecondPage HTML</title>
-        <programlisting>
-&lt;?xml version="1.0" encoding="UTF-8"?&gt;
-&lt;!-- $Id$ --&gt;
-&lt;!DOCTYPE page-specification PUBLIC 
-	"-//Howard Lewis Ship//Tapestry Specification 1.3//EN" 
-	"http://tapestry.sf.net/dtd/Tapestry_1_3.dtd"&gt;
-
-&lt;page-specification class="net.sf.tapestry.html.BasePage"&gt;
-	&lt;component id="homePage" type="PageLink"&gt;
-		&lt;static-binding name="page"&gt;Home&lt;/static-binding&gt;
-	&lt;/component&gt;
-
-    &lt;!-- ... other components below here ... --&gt;
-
-&lt;/page-specification&gt;
-				</programlisting>
-				</figure>
-				</para>				
-				<para>
-				As with the first page, the <varname>jwcid</varname> is defined to be a PageLink
-				component, and the component is given the name of the home page.
-				</para>
-				<para>
-				Finally, if you are building this yourself, you will need to add to the <filename>web.xml</filename>
-				of your web project the following:
-      	<figure>
-        <title>Additional web.xml entries</title>
-        <programlisting>
-  &lt;servlet&gt;
-    &lt;servlet-name&gt;pagelinking&lt;/servlet-name&gt;
-    &lt;servlet-class&gt;tutorial.pagelinking.PageLinkingServlet&lt;/servlet-class&gt;
-  	&lt;load-on-startup&gt;0&lt;/load-on-startup&gt;
-  &lt;/servlet&gt;
-
-...
-
-  &lt;servlet-mapping&gt;
-    &lt;servlet-name&gt;pagelinking&lt;/servlet-name&gt;
-    &lt;url-pattern&gt;/pagelinking&lt;/url-pattern&gt;
-  &lt;/servlet-mapping&gt;
-				</programlisting>
-				</figure>				
-				</para>
-
-          <para>
-              Assuming all went well, you should be able to visit the Home page of the application
-              via
-              <ulink url="http://localhost:8080/tutorial/pagelinking">
-	            <filename>http://localhost:8080/tutorial/pagelinking</filename>
-	          </ulink>, which will look like this:
-          </para>
-		<figure>
-			<title>First page of Linking App</title>
-			<mediaobject>
-				<imageobject>
-					<imagedata fileref="images/pagelinking-home.png" format="PNG"/>
-				</imageobject>
-			</mediaobject>
-		</figure>
-          <para>
-              If you have visited the second page of the pagelinking app, and are wondering what the other
-              controls on the page do, then move onto the next section!
-          </para>
-      </section>
-
diff --git a/3.0.4/doc/src/Tutorial2/tutorial-required-pages.xml b/3.0.4/doc/src/Tutorial2/tutorial-required-pages.xml
deleted file mode 100644
index bca25d9..0000000
--- a/3.0.4/doc/src/Tutorial2/tutorial-required-pages.xml
+++ /dev/null
@@ -1,255 +0,0 @@
-  <chapter id="pages">
-      <title>Pages</title>
-      <section id="required-pages">
-          <title>Pages in a Tapestry Application</title>
-          <para>Tapestry applications have a number of pre-defined pages.
-              Of of these you have already seen, is known as the <emphasis>Home</emphasis>
-              page - and is the first page of an application.  Tapestry also has
-              pages which are shown when some Exception occurs, when a request
-              results in a Stale Link <footnote><para>A stale link in Tapestry is defined to
-              be the case where the rewind of some component of page <emphasis>within a form</emphasis>
-              detects that the component content is now different from the previous
-              render.  At the time of writting, this was done by counting the number
-              of components during the render and storing this in a hidden field.
-              Then, when the user visits the page again, part of the rewind process
-              is to count the number of components rendered, and see if it matches
-              the value in the hidden field. If not, then a <varname>StaleLinkException</varname>
-              is thrown, which will end up showing the <varname>StaleLink</varname> page.
-              </para></footnote>
-
-              , or Tapestry detects that the session is now stale.
-          </para>
-
-          <para>
-              The following sections will explain how to use the pages in an application,
-              and where applicable provide some "best practices" and tips for debugging.
-              The tutorial example code provides a page which allows you to force the use
-              of these pages, or insert your own. The example is contained in
-              <filename>c:\Tapestry-x.x\examples\Tutorial\src\tutorial\pagetypes</filename>
-          </para>
-          <note>
-              <para>
-                  Note that all &DirectLink; components within this particular tutorial
-                  specify the parameter <varname>stateful</varname> as <varname>false</varname>.
-                  This is required because we do not have a defined Visit object, and in any
-                  case we don't want any state in this example. If you do not do this, then
-                  you will get <varname>StaleSessionException</varname>'s for every request.
-              </para>
-          </note>
-      </section>
-
-      <section id="pages-introduction">
-          <title>What comes with Tapestry?</title>
-          <section id="pages-intro-home">
-              <title>Home</title>
-              <para>
-                  There is not very much to say about the <varname>Home</varname> page, since
-                  you must have one for any Tapestry application. However; it is worth nothing
-                  that if you know your site or application is going to have a high number
-                  of users, that you should ensure that the <varname>Visit</varname> object
-                  is not constructed if it is not required. Note that this strategy will only
-                  provide benefit if most of the information your users require is available
-                  from pages where an HTTP session is not required.
-              </para>
-          </section>
-          <section id="pages-intro-exception">
-              <title>Exception</title>
-              <para>
-                  This page is shown whenever an an application exception occurs that is
-                  cannot be handled by Tapestry itself. The default page in Taepstry is
-                  useful for developers, but may not quite be what you want you're users so
-                  see (hence this tutorial will show you how to define your own page).
-                  Part of the default page is shown below:
-              </para>
-
-              <figure>
-                <title>Example Standard Exception Page</title>
-                <mediaobject>
-                   <imageobject>
-                      <imagedata format="JPEG" fileref="images/pages-exception.jpg"/>
-                   </imageobject>
-                </mediaobject>
-              </figure>
-
-              <para>
-                  The page contains the stack trace, as well as information related to the
-                  state of the container and Tapestry at the time the exception occured.
-              </para>
-          </section>
-          <section id="pages-intro-stalelink">
-              <title>StaleLink</title>
-              <para>
-                  <varname>StaleLinkExceptions</varname> are the result of some internal
-                  checking within Tapestry, which attempts to ensure that a user does not
-                  visit a page later which has changed since the last time they were there.
-                  The primary reason is to protect against a non-sensical operation by the
-                  user.
-              </para>
-              <figure>
-                <title>Example Stale Link</title>
-                <mediaobject>
-                   <imageobject>
-                      <imagedata format="JPEG" fileref="images/pages-stalelink.jpg"/>
-                   </imageobject>
-                </mediaobject>
-              </figure>
-
-          </section>
-          <section id="pages-intro-stalesession">
-              <title>StaleSession</title>
-              <para>
-                  This page informs the user that the HTTP session has expired on the server.
-                  You might choose to override this an provide a way for the user to re-login
-                  (if you application or site supports that) or restart their session in
-                  some other manner.   The default page provides a simple explanation of what
-                  has happended, and allows the user to restart their session.
-              </para>
-              <figure>
-                <title>Example Stale Session</title>
-                <mediaobject>
-                   <imageobject>
-                      <imagedata format="JPEG" fileref="images/pages-stalesession.jpg"/>
-                   </imageobject>
-                </mediaobject>
-              </figure>
-          </section>
-      </section>
-      <section id="pages-example">
-          <title>Changing the exception page</title>
-          <para>
-              This section will provide an example of changing the exception page.
-              The example itself shows a simple error header, some basic user-friendly
-              text and the text of the error. The stack trace is not shown on the form. <footnote>
-                  <para>This sounds like an excercise for the reader :-)
-              </para></footnote>
-          </para>
-
-          <para>
-              In order to replace the <emphasis>Exception</emphasis> page, you need only
-              provide an alternative implementation within the Application specification file.
-              An example of this is provded below:
-          </para>
-          <figure>
-              <title>Application Specification, with custom Exception page</title>
-              <programlisting>
-&lt;application name="PageTypes Demo" engine-class="tutorial.pagetypes.PageTypesEngine"&gt;
-  &lt;page name="Home" specification-path="/tutorial/pagetypes/Home.page"/&gt;
-  &lt;page name="Exception" specification-path="/tutorial/pagetypes/NewException.page"/&gt;
-&lt;/application&gt;
-              </programlisting>
-          </figure>
-          <note>
-              Note that in the above example, we are providing a new Page for <emphasis>Exception</emphasis>.
-              You will note that in the actual code supplied for this tutorial, we use a page
-              called <emphasis>NewException</emphasis>. This is because this particular example
-              is setup to show both the normal exception, and a new exception page. Normally you
-              just need provide a new Exception page.
-          </note>
-          <para>
-              Now we must define this new page. In the case of an exception, tapestry will set
-              a binding on the page called <varname>exception</varname>. We provide this on the
-              Java object, which you will see below.
-              We'll begin with the template. We will create one that is supposed to be "somewhat less
-              intimidating" to new users. Of course, given further time, you can make something
-              much nicer than this.
-          </para>
-          <figure>
-              <title>Custom Exception Template</title>
-              <programlisting>
-&lt;html&gt;
-&lt;head&gt;
-    &lt;title&gt;An Error has occurred with the Application&lt;/title&gt;
-&lt;/head&gt;
-
-&lt;body&gt;
-&lt;center&gt;
-    &lt;h1&gt;We have 'issues' ... &lt;/h1&gt;
-
-    &lt;h2&gt;&lt;font color="red"&gt;&lt;span jwcid="errorMessage"/&gt;&lt;/font&gt;&lt;/h2&gt;
-
-    &lt;p&gt;
-    We don't think we'll be doing that any time soon, since our system
-    appears to have some kind of problem.  We would appreciate it if you
-    could &lt;a href="mailto:errors@neverneverland.net"&gt;email us&lt;/a&gt; a copy
-    of this page.
-    &lt;/p&gt;
-&lt;/center&gt;
-&lt;/body&gt;
-
-&lt;/html&gt;
-              </programlisting>
-          </figure>
-          <para>
-              As you can see, it's very basic - but it is enough for this demonstration.
-              We need only a very simple page specification (note that the XML header part
-              of this specification has not been included, to keep the example smaller):
-          </para>
-          <figure>
-              <title>Custom Exception Page Specification</title>
-              <programlisting>
-&lt;page-specification class="tutorial.pagetypes.NewException"&gt;
-    &lt;component id="errorMessage" type="InsertText"&gt;
-        &lt;binding name="value" expression="exception.message"/&gt;
-    &lt;/component&gt;
-&lt;/page-specification&gt;
-              </programlisting>
-          </figure>
-          <para>
-              Finally, we require a Java object for the page which holds the binding,
-              and provides a way to access the exception:
-          </para>
-          <figure>
-              <title>Custom Exception Page Specification</title>
-              <programlisting>
-  package tutorial.pagetypes;
-
-  import net.sf.tapestry.IBinding;
-  import net.sf.tapestry.html.BasePage;
-
-  public class NewException extends BasePage {
-      public Throwable getException() {
-          return exception;
-      }
-
-      public void setException(Throwable exception) {
-          this.exception = exception;
-      }
-
-      public IBinding getExceptionBinding() {
-          return exceptionBinding;
-      }
-
-      public void setExceptionBinding(IBinding exceptionBinding) {
-          this.exceptionBinding = exceptionBinding;
-      }
-
-      private IBinding exceptionBinding;
-      private Throwable exception;
-  }
-              </programlisting>
-          </figure>
-          <para>
-              That's it!    In the example code, you will see there is an &IEngine; implementation,
-              as well as two types of <emphasis>Exception</emphasis> page. The first exception link
-              will show you a standard page. The second exception link will show you the page that
-              has been defined in this section.  Normally Tapestry will allow you to define only a single
-              exception page, which is why we needed to override the engine implementation.  For this
-              example, we show the <emphasis>NewException</emphasis> page if the exception being
-              thrown is of type <varname>MyException</varname>, and the standard page otherwise.
-          </para>
-          <para>
-              So in summary, we need accessors on the Java object to hold the actual exception instance.
-              The rest is entirely up to you - e.g: how you want the exception page to look, etc. Tapestry
-              will take care of the rest!  Assuming you have compiled the tutorial code and started a
-              server, you should be able to see this example page:
-          </para>
-          <figure>
-            <title>Example Custom Exception Page</title>
-            <mediaobject>
-               <imageobject>
-                  <imagedata format="JPEG" fileref="images/pages-newexception.jpg"/>
-               </imageobject>
-            </mediaobject>
-          </figure>
-      </section>
-  </chapter>
diff --git a/3.0.4/doc/src/UsersGuide/.cvsignore b/3.0.4/doc/src/UsersGuide/.cvsignore
deleted file mode 100644
index 1936cc1..0000000
--- a/3.0.4/doc/src/UsersGuide/.cvsignore
+++ /dev/null
@@ -1 +0,0 @@
-html
diff --git a/3.0.4/doc/src/UsersGuide/TapestryUsersGuide.xml b/3.0.4/doc/src/UsersGuide/TapestryUsersGuide.xml
deleted file mode 100644
index 9b38606..0000000
--- a/3.0.4/doc/src/UsersGuide/TapestryUsersGuide.xml
+++ /dev/null
@@ -1,144 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- $Id$ -->
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!DOCTYPE book PUBLIC
-  "-//OASIS//DTD DocBook XML V4.1.2//EN"
-  "http://www.oasis-open.org/docbook/xml/4.0/docbookx.dtd" [
-  <!ENTITY % TapestryLinks SYSTEM "../common/TapestryLinks.xml">
-  %TapestryLinks;
-  
-<!-- Each chapter is in its own file -->
-  
-<!ENTITY chap-intro SYSTEM "intro.xml">
-<!ENTITY chap-template SYSTEM "template.xml">
-<!ENTITY chap-components SYSTEM "components.xml">
-<!ENTITY chap-state SYSTEM "state.xml">
-<!ENTITY chap-configuration SYSTEM "configuration.xml">
-
-<!ENTITY appendix-properties SYSTEM "properties.xml">
-<!ENTITY appendix-jars SYSTEM "jars.xml">
-<!ENTITY appendix-spec SYSTEM "spec.xml"> 
-<!ENTITY appendix-script-spec SYSTEM "script-spec.xml">
-
-
-<!-- Configuration entities -->
-
-<!ENTITY configuration.character-sets '<link linkend="configuration.character-sets">Character Sets</link>'>
-
-<!-- Application, page, library, component specification entities  -->
-
-<!ENTITY spec.application '<link linkend="spec.application"><sgmltag class="starttag">application</sgmltag></link>'>
-<!ENTITY spec.bean '<link linkend="spec.bean"><sgmltag class="starttag">bean</sgmltag></link>'>
-<!ENTITY spec.binding '<link linkend="spec.binding"><sgmltag class="starttag">binding</sgmltag></link>'>
-<!ENTITY spec.configure '<link linkend="spec.configure"><sgmltag class="starttag">configure</sgmltag></link>'>
-<!ENTITY spec.component '<link linkend="spec.component"><sgmltag class="starttag">component</sgmltag></link>'>
-<!ENTITY spec.component-type '<link linkend="spec.component-type"><sgmltag class="starttag">component-type</sgmltag></link>'>
-<!ENTITY spec.component-specification '<link linkend="spec.component-specification"><sgmltag class="starttag">component-specification</sgmltag></link>'>
-<!ENTITY spec.context-asset '<link linkend="spec.context-asset"><sgmltag class="starttag">context-asset</sgmltag></link>'>
-<!ENTITY spec.description '<link linkend="spec.description"><sgmltag class="starttag">description</sgmltag></link>'>
-<!ENTITY spec.extension '<link linkend="spec.extension"><sgmltag class="starttag">extension</sgmltag></link>'>
-<!ENTITY spec.external-asset '<link linkend="spec.external-asset"><sgmltag class="starttag">external-asset</sgmltag></link>'>
-<!ENTITY spec.inherited-binding '<link linkend="spec.inherited-binding"><sgmltag class="starttag">inherited-binding</sgmltag></link>'>
-<!ENTITY spec.library '<link linkend="spec.library"><sgmltag class="starttag">library</sgmltag></link>'>
-<!ENTITY spec.library-specification '<link linkend="spec.library-specification"><sgmltag class="starttag">library-specification</sgmltag></link>'>
-<!ENTITY spec.listener-binding '<link linkend="spec.listener-binding"><sgmltag class="starttag">listener-binding</sgmltag></link>'>
-<!ENTITY spec.page '<link linkend="spec.page"><sgmltag class="starttag">page</sgmltag></link>'>
-<!ENTITY spec.page-specification '<link linkend="spec.page-specification"><sgmltag class="starttag">page-specification</sgmltag></link>'>
-<!ENTITY spec.parameter '<link linkend="spec.parameter"><sgmltag class="starttag">parameter</sgmltag></link>'>
-<!ENTITY spec.private-asset '<link linkend="spec.private-asset"><sgmltag class="starttag">private-asset</sgmltag></link>'>
-<!ENTITY spec.property '<link linkend="spec.property"><sgmltag class="starttag">property</sgmltag></link>'>
-<!ENTITY spec.property-specification '<link linkend="spec.property-specification"><sgmltag class="starttag">property-specification</sgmltag></link>'>
-<!ENTITY spec.reserved-parameter '<link linkend="spec.reserved-parameter"><sgmltag class="starttag">reserved-parameter</sgmltag></link>'>
-<!ENTITY spec.service '<link linkend="spec.service"><sgmltag class="starttag">service</sgmltag></link>'>
-<!ENTITY spec.set-property '<link linkend="spec.set-property"><sgmltag class="starttag">set-property</sgmltag></link>'>
-<!ENTITY spec.set-message-property '<link linkend="spec.set-message-property"><sgmltag class="starttag">set-message-property</sgmltag></link>'>
-<!ENTITY spec.static-binding '<link linkend="spec.static-binding"><sgmltag class="starttag">static-binding</sgmltag></link>'>
-<!ENTITY spec.message-binding '<link linkend="spec.message-binding"><sgmltag class="starttag">message-binding</sgmltag></link>'>
-
-
-<!-- Script specification entities -->
-
-<!ENTITY script-spec.body '<link linkend="script-spec.body"><sgmltag class="starttag">body</sgmltag></link>'>
-<!ENTITY script-spec.foreach '<link linkend="script-spec.foreach"><sgmltag class="starttag">foreach</sgmltag></link>'>
-<!ENTITY script-spec.if '<link linkend="script-spec.if"><sgmltag class="starttag">if</sgmltag></link>'>
-<!ENTITY script-spec.if-not '<link linkend="script-spec.if-not"><sgmltag class="starttag">if-not</sgmltag></link>'>
-<!ENTITY script-spec.include-script '<link linkend="script-spec.include-script"><sgmltag class="starttag">include-script</sgmltag></link>'>
-<!ENTITY script-spec.initialization '<link linkend="script-spec.initialization"><sgmltag class="starttag">initialization</sgmltag></link>'>
-<!ENTITY script-spec.input-symbol '<link linkend="script-spec.input-symbol"><sgmltag class="starttag">input-symbol</sgmltag></link>'>
-<!ENTITY script-spec.let '<link linkend="script-spec.let"><sgmltag class="starttag">let</sgmltag></link>'>
-<!ENTITY script-spec.script '<link linkend="script-spec.script"><sgmltag class="starttag">script</sgmltag></link>'>
-<!ENTITY script-spec.set '<link linkend="script-spec.set"><sgmltag class="starttag">set</sgmltag></link>'>
-<!ENTITY script-spec.unique '<link linkend="script-spec.unique"><sgmltag class="starttag">unique</sgmltag></link>'>
-	
-<!ENTITY script-spec.full-content '<replaceable>text</replaceable> | &script-spec.foreach; | &script-spec.if; | &script-spec.if-not; | &script-spec.unique;'>
-
-<!ENTITY configuration-property '<link linkend="configuration.search-path">configuration property</link>'>
-
-<!ENTITY WEB-INF '<filename>WEB-INF</filename>'>
-
-<!ENTITY jwcid '<literal>jwcid</literal>'>
-
-<!ENTITY listener-method 'listener method'>
-
-<!ENTITY span '<sgmltag class="starttag">span</sgmltag>'>
-<!ENTITY html '<sgmltag class="starttag">html</sgmltag>'>
-<!ENTITY head '<sgmltag class="starttag">head</sgmltag>'>
-<!ENTITY body '<sgmltag class="starttag">body</sgmltag>'>
-
-
-]>
-<!-- Conventions:
-
-	Component ids are <varname>
-	Java packages and class names are <classname>
-	Tapestry component aliases are <classname>
-
-	In-line code snippets use <function>
-	Property paths and JavaBeans property names used <varname>
--->
-<book>
-  <title>Tapestry User's Guide</title>
-  <bookinfo>
-    <author>
-      <firstname>Howard</firstname>
-      <surname>Lewis Ship</surname>
-    </author>
-    <copyright>
-      <year>2003-2004</year>
-      <holder>The Apache Software Foundation</holder>
-    </copyright>
-  </bookinfo>
-      
-  &chap-intro;
-  
-  &chap-template;
-  
-  &chap-components;
-  
-  &chap-state;
-         
-  &chap-configuration;
-  
-  &appendix-properties;
-  
-  &appendix-jars;
-                 
-  &appendix-spec;
-   
-  &appendix-script-spec;    
-    
-</book>
diff --git a/3.0.4/doc/src/UsersGuide/UsersGuideFigures.vsd b/3.0.4/doc/src/UsersGuide/UsersGuideFigures.vsd
deleted file mode 100644
index e1107c5..0000000
--- a/3.0.4/doc/src/UsersGuide/UsersGuideFigures.vsd
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/src/UsersGuide/build.xml b/3.0.4/doc/src/UsersGuide/build.xml
deleted file mode 100644
index 5a2ee52..0000000
--- a/3.0.4/doc/src/UsersGuide/build.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0"?>
-<!-- $Id$ -->
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!DOCTYPE project [
-    <!ENTITY docbook-setup SYSTEM "file:../common/docbook-setup.xml">
-]>
-
-<project name="Tapestry User's Guide" default="install">
-
-<property name="root.filename" value="TapestryUsersGuide"/>
-
-&docbook-setup;
-    
-
-</project>
-
-
diff --git a/3.0.4/doc/src/UsersGuide/components.xml b/3.0.4/doc/src/UsersGuide/components.xml
deleted file mode 100644
index 9123214..0000000
--- a/3.0.4/doc/src/UsersGuide/components.xml
+++ /dev/null
@@ -1,735 +0,0 @@
-<!-- $Id$ -->
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-	<chapter id="components">
-	<title>Creating Tapestry components</title>
-
-
-<section id="components.intro">
-	<title>Introduction</title>
-	
-<para>
-Tapestry is a component based web application framework; components, objects which implement
-the &IComponent; interface, are the fundamental building blocks of Tapestry.  Additional objects,
-such as the the engine, &IMarkupWriter; and the request cycle are infrastructure. The following figure
-identifies the core Tapestry classes and interfaces.
-</para>	
-
-<figure>
-  <title>Core Tapestry Classes and Interfaces</title>
-  <mediaobject>
-    <imageobject>
-      <imagedata fileref="images/core-classes.png" format="PNG"/>
-    </imageobject>
- </mediaobject>
-</figure>	
-	
-<para>
-Tapestry components can be simple or complex. They can be specific to a
-single application or completely generic. They can be part of an application,
-or they can be packaged into
-a <link linkend="components.libraries">component library</link>.
-</para>
-
-<para>
-All the techniques used with pages work with components as well ... pages are a specialized kind
-of Tapestry component. This includes
-<link linkend="state.page-properties">specified properties</link>	 (including persistent properties)
-and &listener-method;s.
-</para>
-
-<para>
-Components fit into the overall page rendering process because they implement the &IRender; interface.
-Components that inherit from &BaseComponent; will use an HTML template.  Components that inherit
-from &AbstractComponent; will render output in Java code, by implementing method
-<function>renderComponent()</function>.
-</para>
-
-<para>
-The components provided with the framework are not special in any way: they don't have access to
-any special APIs or perform any special down-casts. Anything a framework component can do, can be done by
-your own components.	
-</para>
-
-</section>  <!-- components.intro -->
-
-<section id="components.spec">
-	<title>Component Specifications</title>
-	
-<para>
-Every component has a component specification, a file ending in <filename>.jwc</filename>	whose
-root element is &spec.component-specification;.
-</para>
-
-<para>
-Each component's specification defines the basic characteristics of the component:
-<itemizedlist>
-	<listitem>
-		<para>The Java class for the component (which defaults to &BaseComponent;)</para>	
-	</listitem>	
-	<listitem>
-		<para>Whether the component uses its body, or discards it (the <literal>allow-body</literal> attribute,
-			which defaults to <literal>yes</literal>)</para>	
-	</listitem>
-	<listitem>
-		<para>
-			The name, type and other information for each <emphasis>formal</emphasis>
-			parameter.
-		</para>	
-	</listitem>
-	<listitem>
-		<para>
-			Whether the component allows informal parameters or discards them
-			(the <literal>allow-informal-parameters</literal> attribute, which defaults to 
-			<literal>yes</literal>)
-		</para>	
-	</listitem>
-	<listitem>
-		<para>
-		The names of any <emphasis>reserved parameters</emphasis> which may <emphasis>not</emphasis>
-		be used as informal parameters.
-		</para>	
-	</listitem>
-</itemizedlist>	
-</para>
-
-<para>
-Beyond those additions, a component specification is otherwise the same as a &spec.page-specification;.
-</para>
-
-<para>
-When a component is referenced in an HTML template (using the <literal>@<replaceable>Type</replaceable></literal>
-syntax), or in a specification (as the <literal>type</literal> attribute of
-a &spec.component; element), Tapestry must locate and parse the component's specification (this is only done once, with the
-result cached for later).
-</para>
-
-<para>
-Tapestry searches for components in the following places:
-<itemizedlist>
-	<listitem>
-		<para>As specified in a &spec.component-type; element (with the application specification)</para>	
-	</listitem>	
-	<listitem>
-		<para>In the same folder (typically, <filename>WEB-INF</filename>	) as the 
-			application specification</para>
-	</listitem>
-	<listitem>
-		<para>
-		In the <filename>WEB-INF/<replaceable>servlet-name</replaceable></filename> folder
-		(<replaceable>servlet-name</replaceable> is the name of the Tapestry &ApplicationServlet;
-		for the application)
-		<footnote>
-			<para>
-			This is a very rare option that will only occur when a single WAR file contains
-			multiple Tapestry applications.
-			</para>	
-		</footnote>
-		</para>	
-	</listitem>
-	<listitem>
-		<para>
-			In the <filename>WEB-INF</filename> folder
-		</para>	
-	</listitem>
-	<listitem>
-		<para>
-			In the root context directory
-		</para>	
-	</listitem>
-</itemizedlist>	
-</para>
-
-<para>
-Generally, the <emphasis>correct</emphasis>	 place is in the
-<filename>WEB-INF</filename> folder.  <link linkend="components.libraries">Components packaged into
-	libraries</link> have a different (and simpler) search.
-</para>
-	
-	
-</section> <!-- components.spec -->
-
-<section id="components.coding">
-	<title>Coding components</title>
-	
-<para>
-When creating a new component by subclassing &AbstractComponent;, you must write the
-<function>renderComponent()</function>	 method. This method is invoked when the components container (typically, but not always,
-a page) invokes its own <function>renderBody()</function> method.
-</para>
-
-<programlisting>
-protected void renderComponent(&IMarkupWriter; writer, &IRequestCycle; cycle)
-{
-  . . .
-}	
-</programlisting>
-
-<para>
-The &IMarkupWriter; object is used to produce output. It contains a number of <function>print()</function>	 methods
-that output text (the method is overloaded for different types).  It also contains <function>printRaw()</function>
-methods -- the difference being that <function>print()</function> uses a filter to convert certain characters
-into HTML entities.  
-</para>
-	
-	
-<para>
-&IMarkupWriter; also includes methods to simplify creating markup style output: that is, elements with attributes.	
-</para>
-
-
-<para>
-For example, to create a <sgmltag class="starttag">a</sgmltag> link:
-
-<informalexample>
-<programlisting>
-writer.begin("a");
-writer.attribute("url", url);
-writer.attribute("class", styleClass);
-
-renderBody(writer, cycle);
-
-writer.end(); // close the &lt;a&gt;	
-</programlisting>	
-</informalexample>
-	</para>
-	
-<para>
-The <function>begin()</function>	 method renders an open tag (the <sgmltag class="starttag">a</sgmltag>, in
-this case). The <function>end()</function> method renders
-the corresponding <sgmltag class="closetag">a</sgmltag>. As you can see, writing attributes into the tag
-is very simple.
-</para>
-	
-	
-<para>
-The call to <function>renderBody()</function> is used to render <emphasis>this</emphasis> component's
-body. A component doesn't have to render its body; the standard &Image; component doesn't render its
-body (and its component specification indicates that it discards its body). The &Conditional; component
-decides whether or not to render its body, and the
-&Foreach; component may render its body multiple times.
-</para>
-
-<para>
-A component that allows informal parameters can render those as well:
-
-<informalexample><programlisting>
-writer.beginEmpty("img");
-writer.attribute("src", imageURL);
-renderInformalParameters(writer, cycle);
-</programlisting>	
-</informalexample>	
-</para>
-
-<para>
-This example will add any informal parameters for the component
-as additional attributes within the <sgmltag class="starttag">img</sgmltag>	 element. These informal parameters
-can be specified in the page's HTML template, or within the &spec.component; tag of the page's specification. Note the use
-of the <function>beginEmpty()</function> method, for creating a start tag that is not balanced with an end tag (or
-a call to the <function>end()</function> method).
-</para>
-
-</section> <!-- components.coding -->
-
-<section id="components.parameters">
-	<title>Component Parameters</title>
-	
-<para>
-A Tapestry page consists of a number of components. These components communicate with, and coordinate with,
-the page (and each other) via <emphasis>parameters</emphasis>.
-</para>
-
-<para>
-A component parameter has a unique name and a type (a Java class, interface, or primitive type name).	
-The &spec.parameter; component specification element is used to define formal component parameters.
-</para>
-
-<para>
-In a traditional desktop application, components have <emphasis>properties</emphasis>. A controller may
-set the properties of a component, but that's it: properties are write-and-forget.
-</para>
-	
-<para>
-The Tapestry model is a little more complex. A component's parameters are <emphasis>bound</emphasis>	
-to properties of the enclosing page. The component is allowed to read its parameter, to access
-the page property the parameter is bound to.  A component may also <emphasis>update</emphasis> its
-parameter, to force a change to the bound page property.
-</para>	
-
-<para>
-The vast majority of components simply read their parameters. Updating parameters is more rare; the most
-common components that update their parameters are form control components such as &TextField; or &Checkbox;.	
-</para>
-
-<para>
-Because bindings are in the form of &OGNL; expressions, the property bound to a component parameter
-may not directly be a property of the page ... using a property sequence allows great flexibility.	
-</para>
-
-<figure>
-  <title>Parameter Bindings</title>
-  <mediaobject>
-    <imageobject>
-      <imagedata fileref="images/parameter-bindings.png" format="PNG"/>
-    </imageobject>
-    <caption>
-      <para>
-Using &OGNL;, the &TextField; component's <varname>value</varname> parameter is bound
-to the <classname>LineItem</classname>'s <varname>quantity</varname> property, using
-the OGNL expression <literal>lineItem.quantity</literal>, and the &Insert; component's
-<varname>value</varname> parameter is bound to the <classname>Product</classname>'s 
-<varname>name</varname> property using the OGNL expression <literal>lineItem.product.name</literal>.
-
-     </para>
-   </caption>
- </mediaobject>
-</figure>	
-
-<para>
-Not all parameter bindings are writable. So far, the examples have been for parameters bound using
-the &spec.binding; specification element (or the equivalent use of the <literal>ognl:</literal>	prefix
-in an HTML template).  <emphasis>Invariant bindings</emphasis> are also possible--these are bindings directly to fixed
-values that never change and can't be updated.  The &spec.static-binding; element is invariant; it's
-HTML template equivalent is a attribute with no prefix. Likewise, the
-&spec.message-binding; element, and the <literal>message:</literal> prefix on an attribute, are invariant.
-</para>
-	
-<section id="components.parameters.bindings">
-	<title>Using Bindings</title>
-	
-<para>
-To understand how Tapestry parameters work, you must understand how the binding objects work (even
-though, as we'll see, the binding objects are typically hidden). When a component needs access to
-a bound parameter value, it will invoke the method <code>getObject()</code>	 on &IBinding;
-</para>
-
-
-<figure>
-  <title>Reading a Parameter</title>
-  <mediaobject>
-    <imageobject>
-      <imagedata fileref="images/read-binding.png" format="PNG"/>
-    </imageobject>
-    <caption>
-      <para>
-The <function>getObject()</function> method on &IBinding; will (if the binding is dynamic) evaluate the
-OGNL expression (provided in the &spec.binding; specification element) to access a property of the
-page. The result is that cast or otherwise coerced to a type useful to the component.
-     </para>
-   </caption>
- </mediaobject>
-</figure>	
-
-
-<para>
-Updating a parameter is the same way, except that the method is
-<function>setObject()</function>. Most of the implementations of &IBinding; (those for literal strings
-and localize messages), will throw an exception immediately, since they are invariant.
-</para>
-
-<figure>
-  <title>Writing a Parameter</title>
-  <mediaobject>
-    <imageobject>
-      <imagedata fileref="images/write-binding.png" format="PNG"/>
-    </imageobject>
-    <caption>
-      <para>
-The <function>setObject()</function> method will use OGNL to update a page property.
-     </para>
-   </caption>
- </mediaobject>
-</figure>	
-
-<para>
-These flows are complicated by the fact that parameters may be optional; so not only do you need to acquire the
-correct binding object (method <function>getBinding()</function> defined in &IComponent;), 
-but your code must be prepared for that object to be null (if the parameter
-is optional). 	
-</para>
-
-</section> <!-- components.parameters.bindings -->
-		
-<section id="components.parameters.connected">
-	<title>Connected Parameter Properties</title>
-	
-<para>
-Accessing and manipulating the &IBinding; objects is tedious, so Tapestry has an alternate approach. Parameters may
-be represented as <emphasis>connected parameter properties</emphasis>	 that hide the existence of
-the binding objects entirely. If you component needs to know the value bound to a parameter, it can
-read the connected parameter property. If it wants to update the property bound to the parameter, the component
-will update the connected parameter. This is a much more natural approach, but requires a little bit of setup.
-</para>
-
-<para>
-As with <link linkend="state.page-properties">specified properties</link>, Tapestry will fabricate an enhanced subclass with
-the necessary instance variables, accessor methods, and cleanup code.
-</para>
-	
-<para>
-Connected parameters are controlled by the <varname>direction</varname>	
-attribute of the &spec.parameter; element.
-<footnote>
-<para>
-	The name, "direction", made sense initially, but is now a bit confusing. It probably
-	should have been called "processing" or "connection-type".
-</para>
-</footnote>
-There are four values:
-<literal>in</literal>, <literal>form</literal>, <literal>auto</literal>
-and <literal>custom</literal>.  The default is <literal>custom</literal>, which
-<emphasis>does not</emphasis> create a connected parameter property at all.
-</para>
-
-<section id="components.parameters.connected.in">
-	<title>Direction: in</title>
-	
-<para>
-The majority of component parameters are read-only, and are only actually used
-within the component's <function>renderComponent()</function>	 method ... the method that
-actually produces HTML output. For such components, direction <literal>in</literal>
-is the standard, efficient choice.
-</para>
-
-<para>
-The connected parameter for each component is set just before <function>renderComponent()</function>	
-is invoked.  The parameter is reset to its initial value just after 
-<function>renderComponent()</function> is invoked.
-</para>
-
-<para>
-Each component has a &ParameterManager;, whose responsibility is to set and reset connected
-parameter properties.	
-</para>
-
-<figure>
-  <title>ParameterManager and <function>renderComponent()</function></title>
-  <mediaobject>
-    <imageobject>
-      <imagedata fileref="images/parameter-manager.png" format="PNG"/>
-    </imageobject>
-    <caption>
-      <para>
-The &ParameterManager; will read the values bound to each parameter, and update the
-connected parameter property before the component's <function>renderComponent()</function>
-method is invoked. The &ParameterManager; cleans up after <function>renderComponent()</function>
-is invoked.
-     </para>
-   </caption>
- </mediaobject>
-</figure>	
-
-<para>
-For invariant bindings (literal strings and such), the ParameterManager will only set the connected parameter property once,
-and does not reset the property after <function>renderComponent()</function>.
-</para>
-
-<warning>
-	<para>
-		If your component has any &listener-method;s that need to access a parameter value, then you
-		can't use direction <literal>in</literal> (or direction <literal>form</literal>).  Listener methods are
-		invoked outside of the page rendering process, when value stored in the
-		connected parameter property is not set. You must use direction <literal>auto</literal> or 
-		<literal>custom</literal> in such cases.
-		</para>	
-</warning>
-
-	
-</section> <!-- components.parameters.connected.in -->
-
-<section id="components.parameters.connected.form">
-	<title>Direction: form</title>
-	
-<para>
-Components, such as &TextField; or &Checkbox;, that produce form control elements are the
-most likely candidates for updating their parameters. The read a parameter (usually named
-<varname>value</varname>) when they render. When the form is submitted, the same components
-read a query parameter and update their <varname>value</varname> parameter.
-</para>
-
-<para>
-The <literal>form</literal>	 direction simplifies this. For the most part, <literal>form</literal>
-is the same as <literal>in</literal>.  The diffference is, when the form is submitted, after the
-component's <function>renderComponent()</function> method has been invoked, the connected parameter property
-is read and used to update the binding (that is, invoke the binding object's <function>setObject()</function> 
-method).
-</para>
-	
-</section> <!-- components.parameters.connected.form -->
-
-<section id="components.parameters.connected.auto">
-	<title>Direction: auto</title>
-	
-<para>
-The previous direction values, <literal>in</literal> and <literal>form</literal>, have limitations. The value may only be
-accessed from within the component's <function>renderComponent()</function> method. That's often insufficient,
-especially when the component has a &listener-method; that needs access to a parameter.
-</para>
-
-<para>
-Direction <literal>auto</literal>	doesn't use the &ParameterManager;. Instead, the connected parameter property
-is <emphasis>synthetic</emphasis>.  Reading the property immediately turns around and invokes
-&IBinding;'s <function>getObject()</function> method.  Updating the property invokes
-the &IBinding;'s <function>setObject()</function> function.
-</para>
-
-<para>
-This can be a bit less efficient than direction <literal>in</literal>, as the &OGNL; expression may be
-evaluated multiple times. In Tapestry 3.0, the parameter must also be required. Future releases
-of Tapestry will relax these limitations.
-</para>
-
-<note>
-	<title>Removing parameter directions</title>
-	<para>
-Parameter directions are a bit of a sore spot: you must make too many decisions about how to use them, especially
-in terms of render-time-only vs. &listener-method;. Direction <literal>auto</literal>	 is too limited and
-possibly too inefficient. Tapestry 3.1 should address these limitations by improving direction
-<literal>auto</literal>. Instead of specifying a direction, you'll specify how long the component can cache the
-value obtained from the binding object (no caching, or only while the component is rendering, or until
-the page finishes rendering).
-	</para>
-</note>
-	
-</section> <!-- components.parameters.connected.auto -->	
-	
-<section id="components.parameters.connected.custom">
-	<title>Direction: custom</title>
-	
-<para>
-The <literal>custom</literal>	 direction, which is the default, <emphasis>does not</emphasis>
-create a connected parameter property. Your code is still responsible for
-accessing the &IBinding; object (via the <function>getBinding()</function> method of
-&IComponent;) and for invoking methods on the binding object.
-</para>	
-
-</section> <!-- components.parameters.connected.custom -->	
-
-</section> <!-- components.parameters.connected -->		
-		
-</section> <!-- components.parameters -->
-
-
-
-<section id="components.libraries">
-	<title>Component Libraries</title>
-	
-<para>
-Tapestry has a very advanced concept of a <emphasis>component library</emphasis>. A component library contains both Tapestry components and Tapestry pages
-(not to mention engine services).
-</para>
-
-<section id="components.libraries.ref">
-	<title>Referencing Library Components</title>
-	
-<para>
-Before a component library may be used, it must be listed in the application specification. Often, an application specification is <emphasis>only</emphasis>	
-needed so that it may list the libraries used by the application. Libraries are identified using the &spec.library; element.
-</para>
-
-<para>
-The &spec.library; element provides an <emphasis>id</emphasis> for the library, which is used to reference components (and pages) within the library. It also 
-provides a path to the library's specification. This is a complete path for a <filename>.library</filename> file on the classpath. For example:
-
-<example>
-	<title>Referencing a Component Library</title>	
-	<programlisting><![CDATA[
-<application name="Example Application">
-      
-  <library id="contrib" specification-path="/org/apache/tapestry/contrib/Contrib.library"/>
-  	
-</application>]]></programlisting>
-</example>
-</para>
-
-<para>
-In this example, <filename>Contrib.library</filename> defines a set of components, and those component can be accessed using
-<literal>contrib:</literal> as a prefix. In an HTML template, this might appear as:
-
-<informalexample>
-<programlisting><![CDATA[	
-<span jwcid="palette@contrib:Palette" . . . />
-]]></programlisting>	
-</informalexample>
-</para>
-
-<para>
-This example defines a component with id <literal>palette</literal>. The component will be an instance of the Palette component, supplied within
-the <literal>contrib</literal> component library. If an application uses multiple libraries, they will each have their own prefix. 
-Unlike JSPs and JSP tag libraries, the prefix is set once, in the application specification, and is used consistently in all HTML templates and
- specifications within the application.
-</para>
-
-<para>
-The same syntax may be used in page and component specifications:
-<informalexample>
-<programlisting><![CDATA[
-<component id="palette" type="contrib:Palette">
-  . . .
-</component>
-]]></programlisting>	
-</informalexample>	
-</para>
-
-</section> <!-- components.libraries.ref -->
-
-<section id="components.libraries.search">
-	<title>Library component search path</title>
-	
-<para>
-<link linkend="components.spec">Previously</link>, we described the search path for components and pages within the application. The rules are somewhat different
-for components and pages within a library.
-</para>	
-
-<para>
-Tapestry searches for library component specifications in the following places:
-<itemizedlist>
-	<listitem>
-		<para>As specified in a &spec.component-type; element (with the library specification)</para>	
-	</listitem>	
-	<listitem>
-		<para>In the same package folder as the 
-			library specification</para>
-	</listitem>
-</itemizedlist>	
-</para>
-
-<para>
-The search for page specifications is identical: as defined in the library specification, or in the same package folder. 	
-</para>
-
-</section> <!-- components.libraries.search -->
-
-<section id="components.libraries.private-assets">
-	<title>Using Private Assets</title>
-	
-<para>
-Often, a component must be packaged up with images, stylesheets or other resources (collectively termed "assets")
-that are needed at runtime. A reference to such an asset can be created using the &spec.private-asset; element of
-the page or component specification.	For example:
-<informalexample>
-<programlisting><![CDATA[
-	
-  <private-asset name="logo" resource-path="images/logo_200.png"/>
-  
-  <component id="image" type="Image">
-    <binding name="image" expression="assets.logo"/>
-  </component>
-]]></programlisting>	
-</informalexample>
-</para>
-
-<para>
-All assets (private, context or external) are converted into instances of &IAsset; and treated identically by
-components (such as &Image;). As in this example, relative paths are allowed: they are interpreted relative
-to the specification (page or component) they appear in.	
-</para>
-
-<para>
-The Tapestry framework will ensure that an asset will be converted to a valid URL that may be referenced from a client
-web browser ... even though the actual service is inside a JAR or otherwise on the classpath, not normally
-referenceable from the client browser.
-</para>
-
-<para>
-The <emphasis>default</emphasis>	behavior is to serve up the <emphasis>localized</emphasis> resource
-using the asset service. In effect, the framework will read the contents of the asset and pipe that binary content
-down to the client web browser. 
-</para>
-
-<para>
-An alternate behavior is to have the framework copy the asset to a fixed directory. This directory should be mapped
-to a know web folder; that is, have a URL that can be referenced from a client web browser. In this way, the web server
-can more efficiently serve up the asset, as a static resource (that just happens to be copied into place in a just-in-time manner).
-
-</para>
-
-<para>
-This behavior is controlled by a pair of <link linkend="configuration.search-path">configuration properties</link>:
-<literal>org.apache.tapestry.asset.dir</literal> and <literal>org.apache.tapestry.asset.URL</literal>.
-
-</para>	
-</section> <!-- components.libraries.private-assets -->
-
-<section id="components.libraries.spec">
-	<title>Library Specifications</title>
-
-
-<para>
-A library specification is a file with a <filename>.library</filename>	 extension. Library specifications
-use a root element of &spec.library-specification;, which supports a subset of the attributes
-allowed within an &spec.application; element (but allowing the <emphasis>same</emphasis> nested elements). Often, the library specification is an empty placeholder, used
-to an establish a search location for page and component specifications:
-<informalexample><programlisting><![CDATA[
-<!DOCTYPE library-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<library-specification/>
-]]></programlisting></informalexample>
-</para>
-	
-<para>
-It is allowed that components in one library be constructed using components provided by another library. 
-The referencing library's specification may contain
-&spec.library; elements that identify some other library.	
-</para>
-
-</section> <!-- comopnents.libraries.spec -->
-
-<section id="components.libraries.namespace">
-	<title>Libraries and Namespaces</title>
-	
-<para>
-Tapestry organizes components and pages (but <emphasis>not</emphasis>	 engine services) into
-<emphasis>namespaces</emphasis>. Namespaces are closely related to, but not exactly the same as,
-the library prefix established using the &spec.library; element in an application or library specification.
-</para>
-
-<para>
-Every Tapestry application consists of a default namespace, the application namespace. This is the namespace used 
-when referencing a page or component without a prefix. When a page or component can't be resolved within the application namespace,
-the framework namespaceis searched. Only if the component (or page) is not part of the framework namespace does an error result.	
-</para>
-
-<para>
-In fact, it is possible to override both pages and components provided by the framework. This is frequently used to change the
-look and feel of the default StateSession or Exception page.  In theory, it is even possible to override fundamental components such as
-&Insert; or &Foreach;!
-</para>
-
-<para>
-Every component provides a <varname>namespace</varname>	 property that defines the namespace (an instance
-of &INamespace;) that the component belongs to.
-</para>
-
-<para>
-You rarely need to be concerned with namespaces, however. The rare exception is when a page from a library wishes to
-make use of the &PageLink; or &ExternalLink; components to create a link to <emphasis>another page</emphasis>	 within
-the same namespace. This is accomplished (in the source page's HTML template) as:
-<informalexample>
-<programlisting><![CDATA[
-  <a href="#" jwcid="@PageLink" page="OtherPage" namespace="ognl:namespace"> ... </a>]]>	
-</programlisting>	
-</informalexample>
-</para>
-
-</section> <!-- components.libraries.namespace -->
-	
-</section> <!-- components.libraries -->
-
-
-</chapter>
\ No newline at end of file
diff --git a/3.0.4/doc/src/UsersGuide/configuration.xml b/3.0.4/doc/src/UsersGuide/configuration.xml
deleted file mode 100644
index 8f4dc44..0000000
--- a/3.0.4/doc/src/UsersGuide/configuration.xml
+++ /dev/null
@@ -1,792 +0,0 @@
-<!-- $Id$ -->
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<chapter id="configuration">
-	<title>Configuring Tapestry</title>
-	
-<section id="configuration.requirements">
-	<title>Requirements</title>
-	
-<para>
-Tapestry is designed to operate on a variety of different JVMs and versions of 
-the Java Servlet API. Below you can find the list of supported and 
-tested configurations:
-</para>
-
-<variablelist>
-	<title>Supported Java Versions</title>
-	
-<varlistentry>
-	<term>Java 1.2.2</term>
-	
-	<listitem>
-	<para>
-	Operates correctly. Requires the Xerces parser to be in the classpath 
-	(usually provided by the servlet container).
-	</para>
-	</listitem>
-</varlistentry>
-	
-<varlistentry>
-	<term>Java 1.3.x</term>
-	
-	<listitem>
-	<para>
-	Operates correctly. Requires the Xerces parser to be in the classpath
-	(usually provided by the servlet container).
-	</para>
-	</listitem>
-</varlistentry>
-	
-<varlistentry>
-	<term>Java 1.4.x (recommended)</term>
-	
-	<listitem>
-	<para>
-	Operates correctly.
-	</para>
-	</listitem>
-</varlistentry>
-
-</variablelist>
-
-
-
-<variablelist>
-	<title>Supported Java Servlet API Versions</title>
-	
-<varlistentry>
-	<term>Java Servlet API 2.2</term>
-	
-	<listitem>
-	<para>
-	Operates correctly with minor exceptions related to character encoding 
-	of the requests due to the limitations of the Servlet API version.
-	</para>
-	</listitem>
-</varlistentry>
-	
-<varlistentry>
-	<term>Java Servlet API 2.3 (recommended)</term>
-	
-	<listitem>
-	<para>
-	Operates correctly.
-	</para>
-	</listitem>
-</varlistentry>
-	
-</variablelist>
-
-</section>
-
-<section id="configuration.deployment-descriptor">
-	<title>Web deployment descriptor</title>
-	
-<para>
-All Tapestry applications make use of the &ApplicationServlet; class as their
-servlet; it is rarely necessary to create a subclass.
-</para>
-
-
-<example>
-	<title>Web Deployment Descriptor</title>
-<programlisting>
-&lt;?xml version="1.0"?&gt;
-&lt;!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
- "http://java.sun.com/dtd/web-app_2_3.dtd"&gt;
-&lt;web-app&gt;
-  &lt;distributable/&gt; <co id="configuration.web.distributable"/>
-  &lt;display-name&gt;My Application&lt;/display-name&gt;
-  &lt;servlet&gt;
-    &lt;servlet-name&gt;myapp&lt;/servlet-name&gt; <co id="configuration.web.servlet-name"/>
-    &lt;servlet-class&gt;org.apache.tapestry.&ApplicationServlet;&lt;/servlet-class&gt; <co id="configuration.web.servlet-class"/>
-    &lt;load-on-startup&gt;0&lt;/load-on-startup&gt; <co id="configuration.load-on-startup"/>
-  &lt;/servlet&gt;
-  
-  &lt;servlet-mapping&gt;
-    &lt;servlet-name&gt;myapp&lt;/servlet-name&gt;
-    &lt;url-pattern&gt;/app&lt;/url-pattern&gt; <co id="configuration.web.url"/>
-  &lt;/servlet-mapping&gt;
-  
-  &lt;filter&gt; <co id="configuration.web.filter"/>
-    &lt;filter-name&gt;redirect&lt;/filter-name&gt;
-    &lt;filter-class&gt;org.apache.tapestry.&RedirectFilter;&lt;/filter-class&gt;
-  &lt;/filter&gt;
-	
-  &lt;filter-mapping&gt;
-    &lt;filter-name&gt;redirect&lt;/filter-name&gt;
-    &lt;url-pattern&gt;/&lt;/url-pattern&gt;
-  &lt;/filter-mapping&gt;
-
-  &lt;session-config&gt;
-  	&lt;session-timeout&gt;15&lt;/session-timeout&gt;
-  &lt;/session-config&gt;
-    
-  &lt;welcome-file-list&gt;
-    &lt;welcome-file&gt;index.html&lt;/welcome-file&gt;
-  &lt;/welcome-file-list&gt;
-&lt;/web-app&gt;
-</programlisting>
-</example>
-
-<calloutlist>
-<callout arearefs="configuration.web.distributable">
-<para>
-This indicates to the application server that the Tapestry application may be clustered.  Most
-application servers ignore this element, but future servers may only distribute
-applications within a cluster if this element is present.	
-</para>	
-
-<warning>
-	 <title>JBoss is very literal!</title>
-JBoss 3.0.x appears to be very literal about the <sgmltag class="starttag">distributable</sgmltag>
-element.  If it appears, you had better be deploying into a clustered environment, otherwise
-HttpSession state management simply doesn't work.  
-</warning>
-
-</callout>
-<callout arearefs="configuration.web.servlet-name">
-	<para>
-	The servlet name may be used when locating the application specification (though
-	not in this example).
-	</para>
-</callout>
-<callout arearefs="configuration.web.servlet-class">
-	<para>
-	The servlet class is nearly always &ApplicationServlet;.  There's rarely
-	a need to create a subclass; Tapestry has many other hooks for extending the
-	application.
-	</para>
-</callout>
-<callout arearefs="configuration.load-on-startup">
-<para>
-It is generally a good idea to specify 
-<sgmltag class="starttag">load-on-startup</sgmltag>, this causes
-the servlet container to instantitate and initialize the the application servlet, which in turn,
-reads the Tapestry application specification. Many common development errors will be spotted immediately,
-rather than when the first application request arrives.
-</para>	
-</callout>
-<callout arearefs="configuration.web.url">
-	<para>
-	The servlet is mapped to <filename>/app</filename> within the context.  The context
-	itself has a path, determined by the application server and based on the name of the WAR file.
-	
-	The client web browser will see the Tapestry application
-	as <filename>http://<replaceable>host</replaceable>/<replaceable>war-name</replaceable>/app</filename>.
-	</para>
-	
-	<para>
-	Using <filename>/app</filename> as the URL is a common convention when creating
-	Tapestry applications, but is not a requirement. The framework will adapt to whatever mapping
-	you select.
-	</para>
-</callout>
-<callout arearefs="configuration.web.filter">
-<para>
-This filter sends a client redirect to the user when they access the web application context. The filter
-sends a client redirect to the user's browser, directing them to the application servlet. In this way,
-the "public" URL for an application can be <literal>http://myserver/mycontext/</literal> when, in fact,
-the real address is <literal>http://myserver/mycontext/app</literal>.
-</para>	
-</callout>
-</calloutlist>
-
-<para>
-On initialization, the Tapestry servlet will locate its
-application specification; a file that identifies details about the
-application, the pages and components within it, and any
-component libraries it uses.  Tapestry provides a great deal of
-flexibility on where the specification is stored; trivial Tapestry
-applications can operate without an application specification.
-</para>
-
-<para>
-The specification is normally
-stored under &WEB-INF;.  In fact, Tapestry performs a search to find the specification:
-</para>
-
-<orderedlist>
-<listitem>
-	<para>
-	On the classpath, as defined by the <literal>org.apache.tapestry.application-specification</literal>
-	configuration parameter.
-	</para>
-</listitem>
-<listitem>
-	<para>
-	As <filename>/WEB-INF/<replaceable>name</replaceable>/<replaceable>name</replaceable>.application</filename>.
-	The <replaceable>name</replaceable> is the servlet name.  This location
-	is only used in the rare case of a single WAR containing multiple Tapestry
-	applications.
-	</para>
-</listitem>
-<listitem>
-	<para>
-	As <filename>/WEB-INF/<replaceable>name</replaceable>.application</filename>.
-	Again, <replaceable>name</replaceable> is the
-	servlet name.  This is the standard location.
-	</para>
-</listitem>
-</orderedlist>
-
-<para>
-If the application specification still can not be found, then an empty, "stand in"
-application specification is used. This is perfectly acceptible ... an application specification is typically
-needed only when an application makes use of component libraries, or requires some other kind of customization
-only possible with an application specification.
-</para>
-	
-	
-</section>  <!-- configuration.deployment-descriptor -->
-
-<section id="configuration.search-path">
-	<title>Configuration Search Path</title>
-	
-<para>
-Tapestry occasionally must obtain a value for a configuration property.    These configuration
-properties are items that are frequently optional, and don't fit into any particular
-specification.  Many are related to the runtime environment, such as which class to instantiate as the
-Visit object.
-</para>
-
-<para>
-Tapestry
-is very flexible about where values for such properties may be obtained.  In general,
-the search path for configuration properties is:
-</para>
-
-<itemizedlist>
-	<listitem>
-		<para>
-		As a &spec.property; of the &spec.application; (in the application specification,
-		if the application uses one).
-		</para>
-	</listitem>
-	<listitem>
-		<para>
-		As an <sgmltag class="starttag">init-parameter</sgmltag>
-		for the servlet, in the web application deployment descriptor.
-		</para>
-	</listitem>
-	<listitem>
-		<para>
-		As an <sgmltag class="starttag">init-parameter</sgmltag>
-		for the servlet context, also in the web application deployment descriptor.
-		</para>
-	</listitem>
-	<listitem>
-		<para>
-		As a JVM system property.
-		</para>
-	</listitem>
-	<listitem>
-		<para>
-		Hard-coded "factory" defaults (for some properties).
-		</para>
-	</listitem>
-</itemizedlist>
-
-<para>
-It is expected that some configurations are not defined at any level; those will
-return null.
-</para>
-
-
-<para>
-Applications are free to leverage this lookup mechanism as well.  &IEngine; defines
-a <varname>propertySource</varname> property (of type &IPropertySource;)
-that can be used to perform such lookups.
-</para>
-
-<para>
-Applications may also want to change or augment
-the default search path; this is accomplished by overriding
-&AbstractEngine; method <function>createPropertySource()</function>.  For example,
-some configuration data could be drawn from a database.
-</para>
-		
-<para>
-The following are all the configuration values
-currently used in Tapestry:
-	
-<variablelist>
-	<title>Configuration Values</title>
-	
-<varlistentry>
-	<term><literal>org.apache.tapestry.template-extension</literal></term>
-	
-	<listitem>
-	<para>
-	Overrides the default extension used to locate templates for pages or components.
-	The default extension is "html", this configuration property 
-	allows overrides where appropriate.  For example,
-	an application that produces WML may want to override this to "wml".
-	</para>
-	
-	<para>
-	This configuration property does not follow the normal search path rules.  The
-	&spec.property; must be provided in the &spec.page-specification; or &spec.component-specification;.
-	If no value is found there, the immediate containing &spec.application; or
-	&spec.library-specification; is checked.  If still not found, the default is used.
-	</para>
-	
-	</listitem>
-</varlistentry>
-	
-<varlistentry>
-	<term><literal>org.apache.tapestry.asset.dir</literal></term>
-	<term><literal>org.apache.tapestry.asset.URL</literal></term>
-	
-	<listitem>
-	<para>
-	These two values are used to handle private assets.  Private assets are assets
-	that are stored on the classpath, and not normally visible to client web browsers.
-	</para>
-	
-	<para>
-	By specifying these two configuration values, Tapestry can export private assets
-	to a directory that is visible to the client web browser.  The <literal>URL</literal>
-	value should map to the directory specified by the <literal>dir</literal> value.
-	</para>
-	</listitem>
-</varlistentry>
-
-<varlistentry>
-	<term><literal>org.apache.tapestry.visit-class</literal></term>
-	
-	<listitem>
-	<para>
-	The fully qualified class name to instantiate as the 
-	<link linkend="intro.engine-service-visit">Visit object</link>.
-	</para>
-	
-	<para>
-	If not specified, an instance of &HashMap; will be created.
-	</para>
-	
-	</listitem>
-</varlistentry>
-
-
-<varlistentry>
-	<term><literal>org.apache.tapestry.default-page-class</literal></term>
-	
-	<listitem>
-	<para>
-	By default, any page that omits the
-	<varname>class</varname> attribute (in its &spec.page-specification;)
-	will be instantiated as &BasePage;.  If this is not desired,
-	the default may be overridden by specifying a fully
-	qualified class name.
-	</para>
-	</listitem>
-</varlistentry>
-
-<varlistentry>
-	<term><literal>org.apache.tapestry.engine-class</literal></term>
-	
-	<listitem>
-	<para>
-	The fully qualified class name to instantiate as the application engine.
-	This configuration value is only used when the 
-	application specification does not exist, or fails to
-	specify a class.  By default, &BaseEngine; is used if this configuration
-	value is also left unspecified.
-	</para>
-	</listitem>
-</varlistentry>
-
-<varlistentry>
-	<term><literal>org.apache.tapestry.enhance.disable-abstract-method-validation</literal></term>	
-	
-	<listitem>
-	<para>
-	Used to work around a bug in IBM's JDK 1.3.1. This JDK reports <emphasis>all</emphasis> methods
-	of an abstract class as abstract, even if they are concrete. This causes spurious errors
-	about unimplemented abstract methods. Specifying <literal>true</literal> for this property
-	disables checks for unimplemented abstract methods.
-	</para>	
-	</listitem>
-	
-</varlistentry>
-
-<varlistentry>
-	<term><literal>org.apache.tapestry.global-class</literal></term>
-	
-	<listitem>
-	<para>
-	The fully qualified class name to instantiate as the engine <literal>global</literal>
-	property.  The Global object is much like Visit object, 
-	except that it is shared by all instances
-	of the application engine rather than being private to any particular session.
-	If not specified, a synchronized instance of &HashMap; is used.
-		</para>
-	</listitem>
-</varlistentry>
-
-<varlistentry>
-	<term><literal>org.apache.tapestry.default-script-language</literal></term>
-	
-	<listitem>
-	<para>
-	The name of a &BSF;-supported language, used when a
-	&spec.listener-binding; element does not specify
-	a language.  If not overridden, the default is "jython".
-	</para>
-	</listitem>
-	
-	
-</varlistentry>
-
-<varlistentry>
-	<term><literal>org.apache.tapestry.enable-reset-service</literal></term>
-	
-	<listitem>
-	<para>
-	If not specified as "true", then the <literal>reset</literal> service
-	will be non-functional.  The reset service is used to force
-	the running Tapestry application to discard all cached data (including
-	templates, specifications, pooled objects and more).  This must
-	be explicitly enabled, and should only be used in development (in production,
-	it is too easily exploited as a denial of service attack).
-	</para>
-	
-	<para>
-	Unlike most other configuration values, this must be specified
-	as a JVM system property.
-	</para>
-	</listitem>
-</varlistentry>
-
-<varlistentry>
-	<term><literal>org.apache.tapestry.disable-caching</literal></term>
-	
-	<listitem>
-	<para>
-	If specified (as "true"), then the framework will discard all cached data
-	(specifications, templates, pooled objects, etc.) at the end of each request cycle.
-	</para>
-	
-	<para>
-	This slows down request handling by a noticable amount, but is very
-	useful in development; it means that changes to templates and specifications
-	are immediately visible to the application.  It also helps identify
-	any errors in managing persistent page state.
-	</para>
-	
-	<para>
-	This should never be enabled in production; the performance hit is too large.
-	Unlike most other configuration values, this must be specified
-	as a JVM system property.
-	</para>
-	</listitem>
-</varlistentry>
-
-
-<varlistentry>
-	<term><literal>org.apache.tapestry.output-encoding</literal></term>
-	
-	<listitem>
-	<para>
-	Defines the character set used by the application to encode its HTTP responses. 
-	This is also the character set that the application assumes that the browser uses 
-	when submitting data unless it is not specified differently in the HTTP request.
-	</para>
-
-	<para>
-	The default for this configuration property is UTF-8. 
-	Normally there is no need to modify this value since UTF-8 allows almost all
-	characters to be correctly encoded and displayed.
-	</para>
-	</listitem>
-</varlistentry>
-
-
-<varlistentry>
-	<term><literal>org.apache.tapestry.template-encoding</literal></term>
-	
-	<listitem>
-	<para>
-	Defines the character set used by the application templates. 
-	The default value is ISO-8859-1. 
-	</para>
-	
-	<para>
-	Please see the &configuration.character-sets; section for more information.
-	</para>
-	</listitem>
-</varlistentry>
-	
-
-</variablelist>
-</para>
-
-</section>  <!-- configuration.search-path -->
-
-<section id="configuration.extensions">
-	<title>Application extensions</title>
-	
-<para>Tapestry is designed for flexibility; this extends beyond simply 
-configuring the framework, and encompasses actually replacing or augmenting the implementation
-of the framework.  If Tapestry doesn't do what you want it to, there are multiple paths
-for extending, changing and overriding its normal behavior.
-  In some cases,
-	it is necessary to subclass framework classes in order to alter behavior, but in
-	many cases, it is possible to use an application extension.
-	</para>
-	
-<para>
-	Application extensions are JavaBeans declared in the application specification using
-	the &spec.extension; element.  Each extension consists of a name, a Java class
-	to instantiate, and an optional configuration (that is, properties of the
-	bean may be set).  The framework has a finite number of extension points.  If an extension
-	bean with the correct name exists, it will be used at that extension point.
-	</para>
-	
-	<para>
-	Your application may have its own set of extensions not related to Tapestry framework extension points.
-	For example, you might have an application extension referenced from multiple pages to perform common
-	operations such as JNDI lookups.	
-	</para>
-	
-	<para>
-	You may access application extensions via the engine's specification property. For example:
-	
-	<informalexample><programlisting>
-&IEngine; engine = getEngine();
-&IApplicationSpecification; specification = engine.getSpecification();
-	
-myExtension myExtension = (MyExtension) specification.getExtension("myExtension");	
-  </programlisting>		
-	</informalexample>	
-	</para>
-	
-	
-	<para>
-	Each application extension used with an framework extension point must implement an interface particular
-	to the extension point.
-	</para>
-	
-<variablelist>
-	<title>Application Extension Points</title>
-	
-<varlistentry>
-	<term><literal>org.apache.tapestry.property-source</literal> (&IPropertySource;)</term>
-	<listitem>
-	<para>
-		This extension
-		is fit into the configuration property search path, after the servlet context, but
-		before JVM system properties.  A typical use would be to access some set of configuration
-		properties stored in a database.
-		</para>	
-		</listitem>
-</varlistentry>
-
-<varlistentry>
-	<term><literal>org.apache.tapestry.request-decoder</literal> (&IRequestDecoder;)</term>
-	<listitem>
-	<para>
-		A request decoder is used
-		to identify the actual server name, server port, scheme and request URI for the
-		request.  In some configurations, a firewall may invalidate the values provided by
-		the actual &HttpServletRequest; (the values reflect the internal server forwarded
-		to by the firewall, not the actual values used by the external client).  A
-		request decoder knows how to determine the actual values.</para>	
-	</listitem>	
-</varlistentry>	
-
-<varlistentry>
-	<term><literal>org.apache.tapestry.monitor-factory</literal> (&IMonitorFactory;)</term>
-
-	<listitem>
-	<para>An object that is used to create &IMonitor; instances.  Monitors
-		are informed about key application events (such as loading a page)
-		during the processing of a request.
-	</para>	
-	
-	<para>
-	The factory may create a new instance for the request, or may simply
-	provide access to a shared instance.	
-	</para>
-	
-	<para>
-	If not specified, a default implementation is used (&DefaultMonitorFactory;).	
-	</para>
-	</listitem>	
-</varlistentry>
-
-<varlistentry>
-	<term><literal>org.apache.tapestry.specification-resolver-delegate</literal> (&ISpecificationResolverDelegate;)</term>
-	
-	<listitem>
-	<para>
-	An object which is used to find page and component specifications that are not located
-	using the default search rules.  The use of this is open-ended, but is generally
-	useful in very advanced scenarios where specifications are stored externally
-	(perhaps in a database), or constructed on the fly.
-	</para>	
-	</listitem>	
-</varlistentry>
-
-<varlistentry>
-	<term><literal>org.apache.tapestry.template-source-delegate</literal> (&ITemplateSourceDelegate;)</term>
-	
-	<listitem>
-	<para>
-	An object which is used to find page or component templates that are not located
-	using the default search rules. The use of this is open-ended, but is generally
-	useful in very advanced scenarios where templates are stored externally
-	(perhaps in a database), or constructed on the fly.
-	</para>	
-	</listitem>
-</varlistentry>
-
-<varlistentry> 
-<term><literal>org.apache.tapestry.multipart-decoder</literal> (&IMultipartDecoder;)</term>
-
-<listitem>
-<para>
-Allows an alternate object to be responsible for decoding multipart requests (context
-type multipart/form-data, used for file uploads).  Generally, this is used to
-configure an instance of &DefaultMultipartDecoder; with non-default values for
-the maximum upload size, threshold size (number of bytes before a temporary file is created
-to store the) and repository directory (where temporary files are stored).	
-</para>
-</listitem>	
-</varlistentry>
-
-<varlistentry>
-<term><literal>org.apache.tapestry.ognl-type-converter</literal></term>
-
-<listitem>
-<para>
-Specifies an implementation of ognl.TypeConverter to be used for expression bindings.
-See OGNL's <ulink url="http://www.ognl.org/2.6.3/Documentation/html/typeConversion.html">Type 
-	Converter documentation</ulink> 
-for further information on implementing a custom type converter.
-</para>
-</listitem>
-</varlistentry>
-
-</variablelist>
-
-</section>  <!-- configuration.extensions -->
-
-
-
-<section id="configuration.character-sets">
-	<title>Character Sets</title>
-
-<para>
-Tapestry is designed to make the web application localization easy and 
-offers the ability to define different localized templates for the same component.
-For example, <filename>Home.html</filename> would be the default template of the Home page, however
-<filename>Home_fr.html</filename> would be used in all French locales, while <filename>Home_zh_CN.html</filename> would be used in
-China and <filename>Home_zh_TW.html</filename> would be used in Taiwan.
-</para>
-
-<para>
-Web developers and designers in different countries tend to use different character sets 
-for the templates they produce. English, German, French templates are typically produced in
-ISO-8859-1, Russian templates often use KOI8-R, and Chinese texts are normally written in Big5.
-Tapestry allows the application to configure the character set used in its templates 
-and makes it possible to use different character sets for templates associated with 
-different components and different locales.
-</para>
-
-<para>
-The character set of a template is defined using the 
-<literal>org.apache.tapestry.template-encoding</literal>
-&configuration-property;. The search path of this property is slightly different then the
-standard one and allows specific components to use other character sets:
-</para>
-	
-<itemizedlist>
-	<listitem>
-		<para>
-		As a &spec.property; of the &spec.page-specification; or the &spec.component-specification; 
-		(in the page or component specification). 
-		</para>
-		<para>
-		This configuration will apply only to the page or component where it is defined.
-		</para>
-	</listitem>
-	<listitem>
-		<para>
-		As a &spec.property; of the &spec.library-specification; 
-		(in the library specification, if the components are included in a library). 
-		</para>
-		<para>
-		This configuration will apply to all pages and components in the library.
-		</para>
-	</listitem>
-	<listitem>
-		<para>
-		As a &spec.property; of the &spec.application; (in the application specification,
-		if the application uses one).
-		</para>
-	</listitem>
-	<listitem>
-		<para>
-		As an <sgmltag class="starttag">init-parameter</sgmltag>
-		for the servlet, in the web application deployment descriptor.
-		</para>
-	</listitem>
-	<listitem>
-		<para>
-		As an <sgmltag class="starttag">init-parameter</sgmltag>
-		for the servlet context, also in the web application deployment descriptor.
-		</para>
-	</listitem>
-	<listitem>
-		<para>
-		As a JVM system property.
-		</para>
-	</listitem>
-	<listitem>
-		<para>
-		The hard-coded default "ISO-8859-1".
-		</para>
-	</listitem>
-</itemizedlist>
-	
-<para>
-Tapestry also makes it possible to define the character set used by the templates specific 
-to a particular locale by appending the locale to the property name above. 
-As an example, the 
-<literal>org.apache.tapestry.template-encoding_ru</literal> configuration property would define
-the character set used by the Russian templates, such as <filename>Home_ru.html</filename>. 
-This allows templates for different locales to use different character sets, 
-even though they are in the same application. 
-For example, it is possible for all Russian templates in the application to use the KOI8-R 
-character set and all Chinese templates to use Big5 at the same time.
-</para>
-
-<para>
-The character sets used by the templates do not reflect in any way on the character set 
-Tapestry uses to encode its response to the browser. The character sets are used when reading
-the template to translate it appropriately into Unicode.
-The output character set is defined by the 
-<literal>org.apache.tapestry.output-encoding</literal> configuration property.
-</para>
-
-	
-</section>	<!-- configuration.character-sets -->
-
-
-</chapter>
\ No newline at end of file
diff --git a/3.0.4/doc/src/UsersGuide/images/README b/3.0.4/doc/src/UsersGuide/images/README
deleted file mode 100644
index d944679..0000000
--- a/3.0.4/doc/src/UsersGuide/images/README
+++ /dev/null
@@ -1 +0,0 @@
-Images for the user's guide.  Eventually, we'll move over stuff from the Developer's Guide.
\ No newline at end of file
diff --git a/3.0.4/doc/src/UsersGuide/images/component-body.png b/3.0.4/doc/src/UsersGuide/images/component-body.png
deleted file mode 100644
index 513224c..0000000
--- a/3.0.4/doc/src/UsersGuide/images/component-body.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/src/UsersGuide/images/core-classes.png b/3.0.4/doc/src/UsersGuide/images/core-classes.png
deleted file mode 100644
index b8cfbea..0000000
--- a/3.0.4/doc/src/UsersGuide/images/core-classes.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/src/UsersGuide/images/high-level-component-request.png b/3.0.4/doc/src/UsersGuide/images/high-level-component-request.png
deleted file mode 100644
index 2766051..0000000
--- a/3.0.4/doc/src/UsersGuide/images/high-level-component-request.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/src/UsersGuide/images/parameter-bindings.png b/3.0.4/doc/src/UsersGuide/images/parameter-bindings.png
deleted file mode 100644
index 24a9002..0000000
--- a/3.0.4/doc/src/UsersGuide/images/parameter-bindings.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/src/UsersGuide/images/parameter-manager.png b/3.0.4/doc/src/UsersGuide/images/parameter-manager.png
deleted file mode 100644
index beccdc8..0000000
--- a/3.0.4/doc/src/UsersGuide/images/parameter-manager.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/src/UsersGuide/images/read-binding.png b/3.0.4/doc/src/UsersGuide/images/read-binding.png
deleted file mode 100644
index 866f8bb..0000000
--- a/3.0.4/doc/src/UsersGuide/images/read-binding.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/src/UsersGuide/images/write-binding.png b/3.0.4/doc/src/UsersGuide/images/write-binding.png
deleted file mode 100644
index 54a9e09..0000000
--- a/3.0.4/doc/src/UsersGuide/images/write-binding.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/src/UsersGuide/intro.xml b/3.0.4/doc/src/UsersGuide/intro.xml
deleted file mode 100644
index be29fe7..0000000
--- a/3.0.4/doc/src/UsersGuide/intro.xml
+++ /dev/null
@@ -1,268 +0,0 @@
-<!-- $Id$ -->
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<chapter id="intro">
-	<title>Introduction</title>
-	
-<para>
-Tapestry is a component-based web application framework, written in Java.  Tapestry
-is more than a simple templating system; Tapestry builds on the Java Servlet API to
-build a platform for creating dynamic, interactive web sites.  More than
-just another templating language, Tapestry is a real framework for building
-complex applications from simple, reusable components.  Tapestry offloads
-much of the error-prone work in creating web applications into the framework itself,
-taking over mundane tasks such as dispatching incoming requests, constructing and
-interpretting URLs encoded with information, handling localization and internationalization
-and much  more besides.
-</para>
-
-<para>
-The "mantra" of Tapestry is "objects, methods and properties".  That is, rather than have developers concerned
-about the paraphanlia of the Servlet API: requests, responses, sessions, attributes, parameters, URLs and so on,
-Tapestry focuses the developer on objects (including Tapestry pages and components, but
-also including the domain objects  of the application), methods on those objects,
-and JavaBeans properties of those objects.  That is, in a Tapestry application, the
-actions of the user (clicking links and submitting forms) results in changes to object properties
-combined with the invocation of user-supplied methods (containing application logic).  Tapestry
-takes care of the plumbing necessary to connect these user actions 
-with the objects.
-</para>
-
-<para>
-This can take some getting used to. You don't write servlets in Tapestry, you write
-<emphasis>listener methods</emphasis>.  You don't build URLs to servlets either -- you
-use an existing component (such as &DirectLink;) and configure its <varname>listener</varname> parameter
-to invoke your listener method.  What does a listener method do? It interacts with backend systems (often,
-stateless session EJBs) or does other bookkeeping related to the request and selects a new page to provide
-a response to the user ... basically, the core code at the center of a servlet. In Tapestry, you write much less code
-because all the boring, mechanical plumbing (creating URLs, dispatching incoming requests, managing
-server-side state, and so forth) is the responsibility of the framework.
-</para>
-
-<para>
-This is not to say the Servlet API is inaccessible; it is simply not
-<emphasis>relevant</emphasis> to a typical Tapestry user.
-</para>
-
-<para>
-This document describes many of the internals of Tapestry.  It is not a tutorial,
-that is available as a separate document.  Instead, this is a guide to
-some of the internals of Tapestry, and is intended for experienced developers
-who wish to leverage Tapestry fully.
-</para>
-
-<para>
-Tapestry is currently in release 3.0, and has come a long way in the last couple
-of years.  Tapestry's focus is still on generating dynamic HTML pages, although there's plenty
-of support for XHTML, WML and other types of markup as well.
-</para>
-
-<para>
-Nearly all of Tapestry's API is described in terms of interfaces, with
-default implementations supplied.
-By substituting new objects with the correct interfaces, the behavior of the framework
-can be changed significantly. A common
-example  is to override where page and component specifications are stored
-(perhaps in a database).
-</para>
-
-<para>
-Finally, Tapestry boasts extremely complete JavaDoc API documentation.  This document
-exists to supplement that documentation, to fill in gaps that may not be obvious.  The JavaDoc
-is often the best reference.
-</para>
-
-<section id="intro.overview">
-	<title>An overview of Tapestry</title>
-	
-<para>
-Perhaps the hardest part of understanding Tapestry is the fact that it is 
-<emphasis>component-centric</emphasis>	not 
-<emphasis>operation-centric</emphasis>.  Most web technologies (&Struts;, servlets, PHP, etc.)
-are operation-centric.  You create servlets (or <classname>Action</classname>s, or what have you)
-that are invoked when a user clicks a link or submits a form. You are responsible for selecting an appropriate
-URL, and the name and type of any query parameters, so that you can pass along the information you need
-in the URL.
-</para>
-
-<para>
-You are also responsible for connecting your output pages (whether they are JSPs, &Velocity; templates,
-or some other form of templating technology) to those operations. This requires you to construct those URLs and get them into the
-<literal>href</literal>	 attribute of your <sgmltag class="starttag">a</sgmltag> tag, or
-into the <literal>action</literal> attribute
-of your <sgmltag class="starttag">form</sgmltag> tag.
-</para>
-
-<para>
-Everything is different inside Tapestry. Tapestry applications consist of pages; pages are constructed 
-from smaller components. Components may themselves be constructed from other components. Every page has a unique name,
-and every component within a page has its own unique id ... this is a <emphasis>component object model</emphasis>.
-Effectively, every component has an <emphasis>address</emphasis> that can easily be incorporated into a URL.
-</para>
-
-<para>
-In practical terms, your don't write a servlet for the <literal>add-item-to-shopping-cart</literal>	operation.
-In fact, you don't even write an <literal>add-item-to-shopping-cart</literal> component. What you do is take an existing component, such
-as &DirectLink;, and configure it. When the component renders, it will create a callback URL. When you click that link, the callback URL (which
-includes the name of the page and the id of the component within the page) will invoke a method on the component ... and <emphasis>that</emphasis>
-method invokes your application-specific <emphasis>listener method</emphasis>.
-<footnote>
-	<para>
-Listener methods in Tapestry are very similar in intent to <emphasis>delegates</emphasis> in C#. In both cases, a method of a
-particular object instance is represented as an object. Calling this a "listener" or a "listener method" is a bit of a naming
-snafu; it should be called a "delegate" and a "delegate method" but the existing naming is too deeply entrenched to change any time soon.	
- </para>
-</footnote>
-You supply just the listener method ... not an entire servlet.
-Tapestry takes care that your listener method is invoked at the right time, under the right conditions. You don't have to think about how to build that URL,
-what data goes in the URL, or how to hook it up to your application-specific code--that's all handled by the framework.
-</para>
-
-<figure>
-  <title>Tapestry request dispatch (high level)</title>
-  <mediaobject>
-    <imageobject>
-      <imagedata fileref="images/high-level-component-request.png" format="PNG"/>
-    </imageobject>
-    <caption>
-      <para>
-Tapestry uses a component object model to dispatch incoming requests to the correct
-page and component.
-     </para>
-   </caption>
- </mediaobject>
-</figure>
-
-
-
-</section> <!-- intro.overview -->
-
-<section id="intro.pages-and-components">
-	<title>Pages and components</title>
-	
-<para>
-Tapestry divides an application into a set of pages.  Each page is assembled from Tapestry components.
-Components themselves may be assembled from other components ... there's no artificial depth limit.
-</para>
-
-
-<para>
-Tapestry pages are themselves components, but are components with some special responsibilities.
-</para>
-
-<para>
-All Tapestry components can be containers of other components.  Tapestry pages, and most
-user-defined components, have a template, a special HTML file that defines the static
-and dynamic portions of the component, with markers to indicate where embedded components are
-active.  Components do not have to have a template, most of the components provided with
-Tapestry generate their portion of response in code, not using a template.
-</para>
-
-<para>
-Components may have one or more named parameters which may be set (or, more correctly, "bound") 
-by the page or component
-which contains them.  Unlike Java method parameters, Tapestry component parameters may be
-bidirectional; a component may read a parameter to obtain a value, or write a parameter
-to set a value.
-</para>
-
-<para>
-Most components are concerned only with generating HTML.  A certain subset of components deal with the flip-side
-of requests; handling of incoming requests.  Link classes, such as &PageLink;, &DirectLink; and
-&ActionLink;, create clickable links in the rendered page and are involved in dispatching to user-supplied
-code when such a link is triggered by clicking it.
-</para>
-
-<para>
-Other components, &Form;, and the form control components (&TextField;, &PropertySelection;, &Checkbox;, etc.),
-facilitate HTML forms.  When such components render, they read properties from application objects so as
-to provide default values.  When the forms are submitted, the components
-within the form read HTTP query parameters, convert the values to appropriate types
-and then update properties of application objects.
-</para> 
-
-</section> <!-- intro.pages-and-components -->
-
-<section id="intro.engine-service-visit">
-	<title>Engines, services and friends</title>
-	
-<para>
-Tapestry has evolved its own jargon over time.
-</para>
-
-<para>
-The Engine is a central object, it occupies the same semantic space in Tapestry that the
-&HttpSession; does in the Servlet API.  The Engine is ultimately responsible for
-storing the persistent state of the application (properties that exist from one request to
-the next), and this is accomplished by storing the Engine into the &HttpSession;.
-This document will largely discuss the <emphasis>default</emphasis> implementation,
-with notes about how the default implementation may be extended or overriden, where appropriate.
-</para>
-	
-<para>
-Engine services are the bridge between servlets and URLs and the rest of Tapestry.  Engine services 
-are responsible	for encoding URLs, providing query parameters that identify, to the framework,
-the exact operation that should occur when the generated URL is triggered (by the end user
-clicking a link or submitting a form).  Services are also responsible for dispatching
-those incoming requests.  This encapsulation of URL encoding and decoding inside a single object
-is key to how Tapestry components can flexibily operate without concern for how they are contained and on which
-page ... the services take into account page and location when formulating URLs.
-</para>
-
-<para>
-The <link linkend="state.visit">Visit</link> object
-is an application-defined object that acts as a focal point
-for all server-side state (not associated with any single page).  Individual applications define for themselves
-the class of the Visit object.  The Visit is stored as a property of the Engine, and so is ultimately
-stored persistently in the &HttpSession;
-</para>
-
-<para>
-The <link linkend="state.global">Global</link> object is also application-specific. It stores information
-global to the entire application, independent of any particular user or session. A common use for the Global
-object is to centralize logic that performs JNDI lookups of session EJBs.
-</para>
-	
-</section> <!-- intro.engine-service-visit -->
-
-<section id="intro.ognl">
-	<title>Object Graph Navigation Language</title>	
-	
-<para>
-Tapestry is tightly integrated with &OGNL;, the Object Graph Navigation Language. OGNL is a Java expression language, which is used
-to peek into objects and read or update their properties. OGNL is similar to, and must more powerful than, 
-the expression language built into the JSP 2.0 standard tag library. OGNL not only support property access,
-it can include mathematical expressions and method invocations. It can reference static fields of public classes. 
-It can create new objects, including lists and maps.
-</para>
-
-<para>
-The simplest OGNL expressions are property names, such as <literal>foo</literal>, which
-is equivalent to method <code>getFoo()</code> (or <code>setFoo()</code> if the expression is
-being used to update a property). The "Navigation" part comes
-into play when the expression is a series of property names, such as <literal>foo.bar.baz</literal>,
-which is equivalent to <code>getFoo().getBar().getBaz()</code> ... though care must always be taken that the intermediate
-properties (<literal>foo</literal> and <literal>bar</literal> in this example) are not null.
-</para>
-
-<para>
-OGNL is primarily used to allow two different objects (such as a page and a component contained by that page) to
-share information. 	
-</para>
-
-</section>  <!-- intro.ognl -->
-
-</chapter>
\ No newline at end of file
diff --git a/3.0.4/doc/src/UsersGuide/jars.xml b/3.0.4/doc/src/UsersGuide/jars.xml
deleted file mode 100644
index 475191a..0000000
--- a/3.0.4/doc/src/UsersGuide/jars.xml
+++ /dev/null
@@ -1,87 +0,0 @@
-<!-- $Id$ -->
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<appendix id="jars">
-	<title>Tapestry JAR files</title>
-	
-<para>
-The Tapestry distribution includes the Tapestry JARs, plus all the dependencies (other libraries that
-Tapestry makes use of). The JAR files are in the <filename>lib</filename> folder (or in folders beneath it).
-</para>
-	
-	
-<variablelist>
-		
-	<varlistentry>
-		<term>&TapestryFrameworkJar;</term>
-		<listitem>
-			<para>
-			The main Tapestry framework.  This is needed at compile time and runtime.   The framework release number is
-			integrated into the file name.
-			</para>
-		</listitem>
-	</varlistentry>
-	
-	
-	<varlistentry>
-		<term>&TapestryContribJar;</term>
-		<listitem>
-		<para>
-		Contains additional components and tools that are not integral to the framework itself, such
-		as the &Palette;.  Needed at runtime if any such components are used in an application.
-		The framework release number is integrated into the file name.
-		</para>
-		</listitem>
-	</varlistentry>
-			
-	<varlistentry>
-		<term><filename>runtime/<replaceable>*</replaceable>.jar</filename></term>
-		<listitem>
-		<para>
-		Frameworks that are usually needed at runtime (but not at framework build time) and
-		are not always supplied by the servlet container.  This currently
-		is just the &Log4J; framework.
-		</para>
-		</listitem>
-	</varlistentry>
-	
-
-	<varlistentry>
-		<term><filename>ext/<replaceable>*</replaceable>.jar</filename></term>
-		<listitem>
-		<para>
-		Frameworks needed when compiling the framework and at runtime.  This is
-		several other &Jakarta; frameworks (including &BSF; and &BCEL;), plus
-		the &OGNL; and &Javassist; frameworks.
-		</para>
-		</listitem>
-	</varlistentry>
-	
-	<varlistentry>
-		<term><filename>j2ee/*.jar</filename></term>	
-		<listitem>
-		<para>
-		Contains the J2EE and Servlet APIs. These are needed when building the framework, but
-		are typically provided at runtime by the servlet container or application server.	
-		</para>	
-		</listitem>
-	</varlistentry>
-	
-</variablelist>
-
-
-</appendix>
-  
diff --git a/3.0.4/doc/src/UsersGuide/properties.xml b/3.0.4/doc/src/UsersGuide/properties.xml
deleted file mode 100644
index 4ed2789..0000000
--- a/3.0.4/doc/src/UsersGuide/properties.xml
+++ /dev/null
@@ -1,505 +0,0 @@
-<!-- $Id$ -->
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<appendix id="properties">
-	<title>Tapestry Object Properties</title>
-
-<para>
-When using Tapestry, an important aspect of your work is to leverage the properties exposed
-by the various objects within Tapestry. A page has properties (inherited from base classes
-such as &AbstractComponent; and &BasePage;) and contains components and other objects
-with more properties. Pages are connected to an engine, which exports its own set of properties.
-This appendix is a quick guide to the most common objects and their properties.	
-</para>
-
-<table>
-	<title>Tapestry Object Properties</title>	
-	<tgroup cols="4">
-		<thead>
-			<row>
-				<entry>Property name</entry>
-				<entry>Defining class</entry>
-				<entry>Property type</entry>
-				<entry>Description</entry>
-			</row>	
-		</thead>	
-		
-		<tbody>
-			
-<row>
-	<entry>activePageNames</entry>
-	<entry>&BaseEngine;</entry>	
-	<entry>&Collection; of &String;</entry>
-	<entry>Names of all pages for which a page recorder has been created.</entry>
-</row>
-			
-<row>
-	<entry>assets</entry>
-	<entry>&IComponent;</entry>
-	<entry>&Map; of &IAsset;</entry>
-	<entry>
-	Localized assets as defined in the component's specification.	
-	</entry>
-</row>			
-
-
-
-<row>
-	<entry>beans</entry>
-	<entry>&IComponent;</entry>
-	<entry>&IBeanProvider;</entry>
-	<entry>Used to access beans defined using the &spec.bean; specification element.</entry>
-</row>
-			
-			
-<row>
-	<entry>bindingNames</entry>	
-	<entry>&IComponent;</entry>
-	<entry>&Collection; of &String;</entry>
-	<entry>
-	The names of all formal and informal parameter bindings for the component.
-	</entry>
-</row>
-
-<row>
-	<entry>bindings</entry>	
-	<entry>&IComponent;</entry>
-	<entry>&Map; of &IBinding;</entry>
-	<entry>
-	All bindings (for both formal and informal parameters) for this component, keyed on
-	the parameter name.
-	</entry>
-</row>		
-
-<row>
-	<entry>body</entry>	
-	<entry>&AbstractComponent;</entry>
-	<entry>&IRender;[]</entry>
-	<entry>
-	The body of the component: the text (as &IRender;) and components (which inherit from
-	&IRender;) that the component directly encloses within its container's template.
-	</entry>
-</row>
-
-<row>
-	<entry>bodyCount</entry>	
-	<entry>&AbstractComponent;</entry>
-	<entry>int</entry>
-	<entry>
-	The active number of elements in the <varname>body</varname> property array.
-	</entry>
-</row>
-
-<row>
-	<entry>componentClassEnhancer</entry>	
-	<entry>&IEngine;</entry>
-	<entry>&IComponentClassEnhancer;</entry>
-	<entry>
-	Object responsible for dynamic creation of enhanced subclasses of Tapestry pages and components.	
-	</entry>
-</row>
-
-<row>
-	<entry>components</entry>	
-	<entry>&IComponent;</entry>
-	<entry>&Map; of &IComponent;</entry>
-	<entry>
-	All components contained by this component, keyed on the component id.	
-	</entry>
-</row>
-
-<row>
-	<entry>contextPath</entry>	
-	<entry>&IEngine;</entry>
-	<entry>&String;</entry>
-	<entry>
-	The path, if any, for the web application context.	
-	</entry>
-</row>
-
-<row>
-	<entry>changeObserver</entry>	
-	<entry>&IPage;</entry>
-	<entry>&ChangeObserver;</entry>
-	<entry>An object that recieves notifications about changes to persistent page properties.</entry>
-</row>
-
-<row>
-<entry>componentMessagesSource</entry>	
-<entry>&IEngine;</entry>
-<entry>&IComponentMessagesSource;</entry>
-<entry>
-	An object that allows components to find their set of localized messages. 
-	</entry>
-</row>
-
-<row>
-	<entry>container</entry>	
-	<entry>&IComponent;</entry>
-	<entry>&IComponent;</entry>
-	<entry>
-	The page or component which contains this component.  Pages will return null.	
-	</entry>
-</row>	
-
-<row>
-	<entry>dataSqueezer</entry>
-	<entry>&IEngine;</entry>
-	<entry>&DataSqueezer;</entry>
-	<entry>Object used to encode and decode arbitrary values into a URL while maintaining their type.</entry>
-</row>
-
-<row>
-	<entry>dirty</entry>	
-	<entry>&AbstractEngine;</entry>
-	<entry>boolean</entry>
-	<entry>
-	True if the engine has been (potentially) modified, and should be stored 
-	into the &HttpSession;.	
-	</entry>
-</row>
-
-<row>
-	<entry>disabled</entry>	
-	<entry>&IFormComponent;</entry>
-	<entry>boolean</entry>
-	<entry>
-	If true, the component should be disabled (and not respond to query parameters passed up in the request).	
-	</entry>
-</row>
-
-<row>
-	<entry>displayName</entry>	
-	<entry>&IFormComponent;</entry>
-	<entry>&String;</entry>
-	<entry>
-	Localized string to be displayed as a label for the form control. Most implementations leave this
-	undefined (as null).	
-	</entry>
-</row>
-
-<row>
-	<entry>engine</entry>	
-	<entry>&IPage;</entry>
-	<entry>&IEngine;</entry>
-	<entry>The engine to which the page is currently attached.</entry>
-</row>
-
-<row>
-	<entry>extendedId</entry>	
-	<entry>&IComponent;</entry>
-	<entry>&String;</entry>
-	<entry>
-	An "extended" version of the <varname>idPath</varname>	 property that
-	includes the name of the page containing the component as well.
-	</entry>
-</row>
-
-<row>
-	<entry>form</entry>
-	<entry>&IFormComponent;</entry>
-	<entry>&IForm;</entry>
-	<entry>
-	The form which encloses the form control component.	
-	</entry>
-</row>
-
-<row>
-	<entry>global</entry>	
-	<entry>&IEngine;, &IPage;</entry>
-	<entry>&Object;</entry>
-	<entry>
-	The Global object for the application.	
-	</entry>
-</row>
-
-<row>
-	<entry>hasVisit</entry>	
-	<entry>&AbstractEngine;</entry>
-	<entry>boolean</entry>
-	<entry>
-	Returns true if the Visit object has been created, false initially.	
-	</entry>
-</row>
-
-<row>
-	<entry>id</entry>	
-	<entry>&IComponent;</entry>
-	<entry>&String;</entry>
-	<entry>
-	The id of the component, which is unique within its container. In many cases, the framework
-	may have assigned an automatically generated id. Pages do not have an id and return null.
-	</entry>
-</row>
-
-<row>
-	<entry>idPath</entry>	
-	<entry>&IComponent;</entry>
-	<entry>&String;</entry>
-	<entry>A sequence of id's used to locate a component within a page.  A component <literal>bar</literal>
-		within a component <literal>foo</literal> within a page will have an <varname>idPath</varname>
-		of <literal>foo.bar</literal>. Pages return null.
-		</entry>
-</row>
-
-<row>
-	<entry>listeners</entry>	
-	<entry>&AbstractComponent;, &AbstractEngine;</entry>
-	<entry>&ListenerMap;</entry>
-	<entry>
-	Used to map listener methods as objects that implement the &IActionListener; interface.
-	</entry>
-</row>
-
-<row>
-	<entry>locale</entry>	
-	<entry>&IEngine;</entry>
-	<entry>&Locale;</entry>
-	<entry>
-	The locale for the current client; this is used when loading pages from the page pool, or
-	when instantiating new page instances.	
-	</entry>
-</row>
-
-<row>
-	<entry>locale</entry>
-	<entry>&IPage;</entry>
-	<entry>&Locale;</entry>
-	<entry>
-	The locale to which the page and all components within the page is localized.	
-	</entry>
-</row>
-
-
-
-
-
-<row>
-	<entry>location</entry>	
-	<entry><emphasis>many</emphasis></entry>
-	<entry>&ILocation;</entry>
-	<entry>
-	The location that should be used with any error messages generated about the object. This is
-	ultimately the file, line (and even column) of the template or specification file responsible
-	for defining the object (be it a component, a page, or some other kind of object).
-	</entry>
-</row>
-
-<row>
-	<entry>messages</entry>	
-	<entry>&IComponent;</entry>
-	<entry>&IMessages;</entry>
-	<entry>
-	Localized messages for the component.	
-	</entry>
-</row>
-
-<row>
-	<entry>name</entry>	
-	<entry>&IFormComponent;</entry>
-	<entry>&String;</entry>
-	<entry>
-	The name, or element id, assigned to the form control by the &IForm;. This is set as the component
-	renders (but the property can then be read after the component renders).	
-	</entry>
-</row>
-
-<row>
-	<entry>namespace</entry>	
-	<entry>&IComponent;</entry>
-	<entry>&INamespace;</entry>
-	<entry>The namespace containing the component. Components are always within <emphasis>some</emphasis>
-		namespace, whether it is the default (application) namespace, the framework namespace,
-		or a namespace for a component library.</entry>
-</row>
-
-<row>
-	<entry>outputEncoding</entry>	
-	<entry>&AbstractPage;</entry>
-	<entry>&String;</entry>
-	<entry>
-	Output encoding for the page.	
-	</entry>
-</row>
-
-<row>
-	<entry>page</entry>	
-	<entry>&IComponent;</entry>
-	<entry>&IPage;</entry>
-	<entry>
-	The page which ultimately contains the component.	
-	</entry>
-</row>
-
-<row>
-	<entry>propertySource</entry>	
-	<entry>&IEngine;</entry>
-	<entry>&IPropertySource;</entry>
-	<entry>
-	Source for configuration properties.	
-	</entry>
-</row>
-
-<row>
-	<entry>pageName</entry>	
-	<entry>&IPage;</entry>
-	<entry>&String;</entry>
-	<entry>
-	The fully qualified page name (possibly including a namespace prefix).
-	</entry>
-</row>
-
-<row>
-	<entry>pageSource</entry>	
-	<entry>&IEngine;</entry>
-	<entry>&IPageSource;</entry>
-	<entry>
-	The object used to obtain page instances.	
-	</entry>
-</row>
-
-<row>
-	<entry>pool</entry>	
-	<entry>&IEngine;</entry>
-	<entry>&Pool;</entry>
-	<entry>
-	Stores objects that are expensive to create.	
-	</entry>
-</row>
-
-<row>
-	<entry>requestCycle</entry>	
-	<entry>&IPage;</entry>	
-	<entry>&IRequestCycle;</entry>
-	<entry>
-	The request cycle to which the page is currently attached.
-	</entry>
-</row>
-
-<row>
-	<entry>resetServiceEnabled</entry>	
-	<entry>&IEngine;</entry>
-	<entry>boolean</entry>
-	<entry>
-	If true, the reset service is enabled. The reset service is disabled by default.	
-	</entry>
-</row>
-
-
-
-<row>
-<entry>resourceResolver</entry>	
-<entry>&IEngine;</entry>
-<entry>&IResourceResolver;</entry>
-<entry>
-Object responsible for locating classes and classpath resources.	
-</entry>
-</row>
-
-<row>
-<entry>scriptSource</entry>	
-<entry>&IEngine;</entry>
-<entry>&IScriptSource;</entry>
-<entry>
-Object that parses and caches script specifications.	
-</entry>
-</row>
-
-<row>
-	<entry>servletPath</entry>	
-	<entry>&IEngine;</entry>
-	<entry>&String;</entry>
-	<entry>
-	The URL path used to reference the application servlet (including the context path, if any).	
-	</entry>
-</row>
-
-<row>
-	<entry>specification</entry>	
-	<entry>&IComponent;</entry>
-	<entry>&IComponentSpecification;</entry>
-	<entry>
-	The specification which defines this component.	Often used to access
-	meta data defined in the component's specification using the
-	&spec.property; element.
-	</entry>
-</row>
-
-<row>
-	<entry>specification</entry>	
-	<entry>&IEngine;</entry>
-	<entry>&IApplicationSpecification;</entry>
-	<entry>
-	The specification for the application.	
-	</entry>
-</row>
-
-<row>
-	<entry>specificationSource</entry>	
-	<entry>&IEngine;</entry>
-	<entry>&ISpecificationSource;</entry>
-	<entry>Object responsible for reading and caching page and component specifications.</entry>
-</row>
-
-<row>
-<entry>stateful</entry>	
-<entry>&IEngine;</entry>
-<entry>boolean</entry>
-<entry>
-If true, then an &HttpSession; has been created for the client to store server-side state. Initially false.	
-</entry>
-</row>
-
-
-
-<row>
-	<entry>templateSource</entry>	
-	<entry>&IEngine;</entry>
-	<entry>&ITemplateSource;</entry>
-	<entry>
-	Object responsible for reading and caching page and component templates.	
-	</entry>
-</row>
-
-
-<row>
-		<entry>visit</entry>
-		<entry>&IEngine;</entry>
-		<entry>&Object;</entry>
-		<entry>
-		Returns the Visit object for the current client, or null if the Visit object
-		has not yet been created.	
-		</entry>
-</row>
-
-<row>
-	<entry>visit</entry>	
-	<entry>&IPage;</entry>
-	<entry>&Object;</entry>
-	<entry>
-	Returns the Visit object for the current client, creating it if necessary.	
-	</entry>
-</row>
-
-
-			
-		</tbody>
-	</tgroup>
-</table>
-
-
-</appendix>
\ No newline at end of file
diff --git a/3.0.4/doc/src/UsersGuide/script-spec.xml b/3.0.4/doc/src/UsersGuide/script-spec.xml
deleted file mode 100644
index 0bb16cc..0000000
--- a/3.0.4/doc/src/UsersGuide/script-spec.xml
+++ /dev/null
@@ -1,516 +0,0 @@
-<!-- $Id$ -->
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<appendix id="script-spec">
-	<title>Tapestry Script Specification DTD</title>
-	
-<para>
-Tapestry Script Specifications are frequently used with the &Script;
-component, to create dynamic JavaScript functions, typically for use
-as event handlers for client-side logic.
-</para>
-
-<para>
-The root element is &script-spec.script;.
-</para>
-
-<para>
-A script specifcation is a kind of specialized template that
-takes some number of input symbols and combines and manipulates
-them to form output symbols, as well as
-body and initialization.  Symbols may
-be simple strings, but are also frequently objects or components.
-</para>
-
-<para>
-Script specifications use an Ant-like syntax to insert dynamic values
-into text blocks.  <literal>${<replaceable>OGNL expression</replaceable>}</literal>.
-The expression is evaluated relative to a &Map; of symbols.
-</para>
-
-<section id="script-spec.body">
-	<title><sgmltag class="starttag">body</sgmltag> element</title>
-	
-<para>
-Appears in: &script-spec.script;
-</para>
-
-<para>
-Specifies the main body of the JavaScript; this is where
-JavaScript variables and methods are typically declared.
-This body will be passed to the &Body; component for inclusion
-in the page.
-</para>
-	
-<figure>
-	<title><sgmltag class="starttag">body</sgmltag> Elements</title>
-<literallayout>
-  (&script-spec.full-content;) *
-</literallayout>
-</figure>	
-</section> <!-- script-spec.body -->
-
-
-<section id="script-spec.foreach">
-	<title><sgmltag class="starttag">foreach</sgmltag> element</title>
-	
-<para>
-Appears in: <emphasis>many</emphasis>
-</para>
-
-<para>
-An element that renders its body repeatedly, much like a &Foreach; component.
-An expression supplies a collection or array of objects, and its body is
-rendered for each element in the collection.
-</para>
-
-<figure>
-	<title><sgmltag class="starttag">foreach</sgmltag> Attributes</title>
-<informaltable>
-<tgroup cols="5">
-<thead>
-<row>
-  <entry>Name</entry>
-  <entry>Type</entry>
-  <entry>Required ?</entry>
-  <entry>Default Value</entry>
-  <entry>Description</entry>
-</row>
-</thead>
-<tbody>
-<row>
-	<entry>key</entry>
-	<entry>string</entry>
-	<entry>yes</entry>
-	<entry/>
-	<entry>The symbol to be updated with each successive value.</entry>
-</row>
-<row>
-  <entry>expression</entry>
-  <entry>string</entry>
-  <entry>yes</entry>
-  <entry/>
-  <entry>The OGNL expression which provides the source of elements.</entry>
-</row>
-<row>
-	<entry>index</entry>	
-	<entry>string</entry>
-	<entry>no</entry>
-	<entry/>
-	<entry>If specified, then the named symbol is updated with each successive index.</entry>
-</row>
-</tbody>
-</tgroup>
-</informaltable>
-</figure>	
-
-<figure>
-	<title><sgmltag class="starttag">foreach</sgmltag> Elements</title>
-<literallayout>
-  (&script-spec.full-content;) *
-</literallayout>
-</figure>
-
-
-</section> <!-- script-spec.foreach -->
-
-
-<section id="script-spec.if">
-	<title><sgmltag class="starttag">if</sgmltag> element</title>
-	
-
-<para>
-Appears in: <emphasis>many</emphasis>
-</para>
-
-<para>
-Conditionally renders its body, if a supplied OGNL 	
-expression is true.
-</para>
-
-<figure>
-	<title><sgmltag class="starttag">if</sgmltag> Attributes</title>
-<informaltable>
-<tgroup cols="5">
-<thead>
-<row>
-  <entry>Name</entry>
-  <entry>Type</entry>
-  <entry>Required ?</entry>
-  <entry>Default Value</entry>
-  <entry>Description</entry>
-</row>
-</thead>
-<tbody>
-<row>
-  <entry>expression</entry>
-  <entry>string</entry>
-  <entry>yes</entry>
-  <entry/>
-  <entry>The OGNL expression to be evaluated.</entry>
-</row>
-</tbody>
-</tgroup>
-</informaltable>
-</figure>	
-
-<figure>
-	<title><sgmltag class="starttag">if</sgmltag> Elements</title>
-<literallayout>
-  (&script-spec.full-content;) *
-</literallayout>
-</figure>
-
-</section> <!-- script-spec.if -->
-
-
-<section id="script-spec.if-not">
-	<title><sgmltag class="starttag">if-not</sgmltag> element</title>
-	
-
-<para>
-Appears in: <emphasis>many</emphasis>
-</para>
-
-<para>
-Conditionally renders its body, if a supplied OGNL 	
-expression is false.
-</para>
-
-<figure>
-	<title><sgmltag class="starttag">if-not</sgmltag> Attributes</title>
-<informaltable>
-<tgroup cols="5">
-<thead>
-<row>
-  <entry>Name</entry>
-  <entry>Type</entry>
-  <entry>Required ?</entry>
-  <entry>Default Value</entry>
-  <entry>Description</entry>
-</row>
-</thead>
-<tbody>
-<row>
-  <entry>expression</entry>
-  <entry>string</entry>
-  <entry>yes</entry>
-  <entry/>
-  <entry>The OGNL expression to be evaluated.</entry>
-</row>
-</tbody>
-</tgroup>
-</informaltable>
-</figure>	
-
-<figure>
-	<title><sgmltag class="starttag">if-not</sgmltag> Elements</title>
-<literallayout>
-  (&script-spec.full-content;) *
-</literallayout>
-</figure>
-	
-</section> <!-- script-spec.if-not -->
-
-
-<section id="script-spec.include-script">
-	<title><sgmltag class="starttag">include-script</sgmltag> element</title>
-	
-<para>
-Appears in: &script-spec.script;
-</para>
-
-<para>
-Used to include a static JavaScript library.  A library will only be included once, regardless of
-how many different scripts reference it.  Such libraries are located on the classpath.
-</para>
-
-	
-<figure>
-	<title><sgmltag class="starttag">include-script</sgmltag> Attributes</title>
-<informaltable>
-<tgroup cols="5">
-<thead>
-<row>
-  <entry>Name</entry>
-  <entry>Type</entry>
-  <entry>Required ?</entry>
-  <entry>Default Value</entry>
-  <entry>Description</entry>
-</row>
-</thead>
-<tbody>
-<row>
-  <entry>resource-path</entry>
-  <entry>string</entry>
-  <entry>yes</entry>
-  <entry/>
-  <entry>The location of the JavaScript library.</entry>
-</row>
-</tbody>
-</tgroup>
-</informaltable>
-</figure>	
-</section> <!-- script-spec.include-script -->
-
-
-<section id="script-spec.initialization">
-	<title><sgmltag class="starttag">initialization</sgmltag> element</title>
-	
-<para>
-Appears in: &script-spec.script;
-</para>
-
-<para>
-Defines initialization needed by the remainder of the script.  Such initialization
-is placed inside a method invoked from the HTML <sgmltag class="starttag">body</sgmltag>
-element's <literal>onload</literal> event handler ... that is, whatever is placed inside
-this element will not be executed until the entire page is loaded.
-</para>
-
-	
-
-<figure>
-	<title><sgmltag class="starttag">initialization</sgmltag> Elements</title>
-<literallayout>
-  (&script-spec.full-content;) *
-</literallayout>
-</figure>
-
-	
-</section> <!-- script-spec.initialization -->
-
-
-
-<section id="script-spec.input-symbol">
-	<title><sgmltag class="starttag">input-symbol</sgmltag> element</title>
-	
-<para>
-Appears in: &script-spec.script;
-</para>
-
-<para>
-Defines an input symbol for the script.  Input symbols can be thought of as parameters to the script.
-As the script executes, it uses the input symbols to create new output symbols, redefine input symbols
-(not a recommended practice) and define the body and initialization.
-</para>
-
-<para>
-This element allows the script to make input symbols required and to restrict their type.  Invalid input symbols
-(missing when required, or not of the correct type) will result in runtime exceptions.
-</para>
-
-<figure>
-	<title><sgmltag class="starttag">input-symbol</sgmltag> Attributes</title>
-<informaltable>
-<tgroup cols="5">
-<thead>
-<row>
-  <entry>Name</entry>
-  <entry>Type</entry>
-  <entry>Required ?</entry>
-  <entry>Default Value</entry>
-  <entry>Description</entry>
-</row>
-</thead>
-<tbody>
-<row>
-  <entry>key</entry>
-  <entry>string</entry>
-  <entry>yes</entry>
-  <entry/>
-  <entry>The input symbol to be checked.</entry>
-</row>
-<row>
-	<entry>class</entry>
-	<entry>string</entry>
-	<entry>no</entry>
-	<entry/>
-	<entry>If specified, this is the complete, qualified class name for the symbol.
-	The provided symbol must be assignable to this class (be a subclass, or implement
-	the specified class if the specified class is actually an interface).
-	</entry>
-</row>
-<row>
-	<entry>required</entry>
-	<entry><literal>yes | no</literal></entry>
-	<entry>no</entry>
-	<entry><literal>no</literal></entry>
-	<entry>If <literal>yes</literal>, then a non-null value must be specified for
-	the symbol.
-	</entry>
-</row>
-</tbody>
-</tgroup>
-</informaltable>
-</figure>	
-	
-</section> <!-- script-spec.input-symbol -->
-
-
-<section id="script-spec.let">
-	<title><sgmltag class="starttag">let</sgmltag> element</title>
-	
-
-
-<para>
-Appears in: &script-spec.script;
-</para>
-
-<para>
-Used to define (or redefine) a symbol.  The symbol's value is taken from
-the body of element (with leading and trailing whitespace removed).
-</para>
-
-<figure>
-	<title><sgmltag class="starttag">let</sgmltag> Attributes</title>
-<informaltable>
-<tgroup cols="5">
-<thead>
-<row>
-  <entry>Name</entry>
-  <entry>Type</entry>
-  <entry>Required ?</entry>
-  <entry>Default Value</entry>
-  <entry>Description</entry>
-</row>
-</thead>
-<tbody>
-<row>
-  <entry>key</entry>
-  <entry>string</entry>
-  <entry>yes</entry>
-  <entry/>
-  <entry>The key of the symbol to define.</entry>
-</row>
-<row>
-  <entry>unique</entry>	
-  <entry>boolean</entry>
-  <entry><literal>yes|no</literal></entry>
-  <entry>no</entry>
-  <entry>If yes, then the string is ensured to be unique (by possibly adding
-  a suffix) before being assigned to the symbol.</entry>
-</row>
-</tbody>
-</tgroup>
-</informaltable>
-</figure>	
-	
-
-
-<figure>
-	<title><sgmltag class="starttag">let</sgmltag> Elements</title>
-<literallayout>
-  (&script-spec.full-content;) *
-</literallayout>
-</figure>
-	
-</section> <!-- script-spec.let -->
-
-
-<section id="script-spec.script">
-	<title><sgmltag class="starttag">script</sgmltag> element</title>
-	
-<para>
-<emphasis>Root element</emphasis>
-</para>
-
-<para>
-The root element of a Tapestry script specification.
-</para>
-
-<figure>
-	<title><sgmltag class="starttag">script</sgmltag> Elements</title>
-<literallayout>
-  &script-spec.include-script; *, &script-spec.input-symbol; *,
-  (&script-spec.let; | &script-spec.set;) *,
-  &script-spec.body; ?, &script-spec.initialization; ?
-</literallayout>
-</figure>
-	
-</section> <!-- script-spec.script -->
-
-
-<section id="script-spec.set">
-	<title><sgmltag class="starttag">set</sgmltag> element</title>
-	
-<para>
-Appears in: &script-spec.script;
-</para>
-
-<para>
-A different way to define a new symbol, or redefine an existing one.  The new symbol
-is defined using an OGNL expression.
-</para>
-
-	
-<figure>
-	<title><sgmltag class="starttag">set</sgmltag> Attributes</title>
-<informaltable>
-<tgroup cols="5">
-<thead>
-<row>
-  <entry>Name</entry>
-  <entry>Type</entry>
-  <entry>Required ?</entry>
-  <entry>Default Value</entry>
-  <entry>Description</entry>
-</row>
-</thead>
-<tbody>
-<row>
-  <entry>key</entry>
-  <entry>string</entry>
-  <entry>yes</entry>
-  <entry/>
-  <entry>The key of the symbol to define.</entry>
-</row>
-<row>
-	<entry>expression</entry>
-	<entry>string</entry>
-	<entry>yes</entry>
-	<entry/>
-	<entry>The OGNL expression to evaluate.</entry>
-</row>
-</tbody>
-</tgroup>
-</informaltable>
-</figure>		
-</section> <!-- script-spec.set -->
-
-<section id="script-spec.unique">
-	<title><sgmltag class="starttag">unique</sgmltag> element</title>
-
-<para>
-Appears in: <emphasis>many</emphasis>
-</para>
-
-<para>
-Creates a block whose contents are contributed only once, no matter how many times
-the block is evaluated during the rendering of a single page.
-</para>
-
-
-<figure>
-	<title><sgmltag class="starttag">unique</sgmltag> Elements</title>
-<literallayout>
-  (&script-spec.full-content;) *
-</literallayout>
-</figure>
-	
-</section> <!-- script-spec.unique -->
-	
-</appendix>
\ No newline at end of file
diff --git a/3.0.4/doc/src/UsersGuide/spec.xml b/3.0.4/doc/src/UsersGuide/spec.xml
deleted file mode 100644
index ffcd18c..0000000
--- a/3.0.4/doc/src/UsersGuide/spec.xml
+++ /dev/null
@@ -1,1845 +0,0 @@
-<!-- $Id$ -->
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<appendix id="spec">
-	<title>Tapestry Specification DTDs</title>
-	
-
-<para>
-This appendix describes the four types of specifications
-used in Tapestry.
-</para>
- 
-<table>
-	<title>Tapestry Specifications</title>
-	<tgroup cols="5">
-<thead>
-<row>
-	<entry>Type</entry>
-	<entry>File Extension</entry>
-	<entry>Root Element</entry>
-	<entry>Public ID</entry>
-	<entry>System ID</entry>
-</row>
-</thead>
-<tbody>
-<row>
-	<entry>Application</entry>
-	<entry>application</entry>
-	<entry>&spec.application;</entry>
-	<entry><literal>-//Apache Software Foundation//Tapestry Specification 3.0//EN</literal></entry>
-	<entry><literal>http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd</literal></entry>
-</row>
-
-<row>
-	<entry>Page</entry>
-	<entry>page</entry>
-	<entry>&spec.page-specification;</entry>
-	<entry><literal>-//Apache Software Foundation//Tapestry Specification 3.0//EN</literal></entry>
-	<entry><literal>http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd</literal></entry>
-</row>
-
-<row>
-	<entry>Component</entry>
-	<entry>jwc</entry>
-	<entry>&spec.component-specification;</entry>
-	<entry><literal>-//Apache Software Foundation//Tapestry Specification 3.0//EN</literal></entry>
-	<entry><literal>http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd</literal></entry>
-</row>
-
-<row>
-	<entry>Library</entry>
-	<entry>library</entry>
-	<entry>&spec.library-specification;</entry>
-	<entry><literal>-//Apache Software Foundation//Tapestry Specification 3.0//EN</literal></entry>
-	<entry><literal>http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd</literal></entry>
-</row>
-
-<row>
-	<entry>Script</entry>
-	<entry>script</entry>
-	<entry>&script-spec.script;</entry>
-	<entry><literal>-//Apache Software Foundation//Tapestry Script Specification 3.0//EN</literal></entry>
-	<entry><literal>http://jakarta.apache.org/tapestry/dtd/Script_3_0.dtd</literal></entry>
-</row>
-
-</tbody>
-</tgroup>
-</table>
-
-<para>
-The four general Tapestry specifications (&spec.application;, &spec.component-specification;
-&spec.page-specification; and &spec.library-specification;) all share the same DTD, but use different
-root elements.
-</para>
-
-<section id="spec.application">
-	<title><sgmltag class="starttag">application</sgmltag> element</title>
-	
-
-<para>
-<emphasis>root element</emphasis>
-</para>
-
-<para>
-The application specification defines the pages and components specific to a single Tapestry application.
-It also defines any libraries that are used within the application.
-</para>
-
-<figure>
-	<title><sgmltag class="starttag">application</sgmltag> Attributes</title>
-<informaltable>
-<tgroup cols="5">
-<thead>
-<row>
-  <entry>Name</entry>
-  <entry>Type</entry>
-  <entry>Required ?</entry>
-  <entry>Default Value</entry>
-  <entry>Description</entry>
-</row>
-</thead>
-<tbody>
-<row>
-	<entry>name</entry>
-	<entry>string</entry>
-	<entry>no</entry>
-	<entry/>
-	<entry>User presentable name of application.</entry>
-</row>
-<row>
-	<entry>engine-class</entry>
-	<entry>string</entry>
-	<entry>no</entry>
-	<entry/>
-	<entry>Name of an implementation of &IEngine; to instantiate.  Defaults
-	to &BaseEngine; if not specified.</entry>
-</row>
-</tbody>
-</tgroup>
-
-</informaltable>
-</figure>
-
-<figure>
-	<title><sgmltag class="starttag">application</sgmltag> Elements</title>
-<literallayout>
-  &spec.description; ?, &spec.property; *,
-  (&spec.page; | &spec.component-type; | &spec.service; | &spec.library; | &spec.extension;) *
-</literallayout>
-</figure>
-
-</section>  <!-- spec.application -->
-
-<section id="spec.bean">
-	<title><sgmltag class="starttag">bean</sgmltag> element</title>
-	
-	
-<para>
-Appears in:
-&spec.component-specification; and &spec.page-specification;
-</para>	
-	
-<para>
-A <sgmltag class="starttag">bean</sgmltag> is used to add behaviors to a page or component via aggregation.
-Each <sgmltag class="starttag">bean</sgmltag> defines a named JavaBean that is instantiated on demand.
-Beans are accessed through the OGNL expression <literal>beans.<replaceable>name</replaceable></literal>.
-</para>
-
-<para>
-Once a bean is instantiated and initialized, it will be retained by the page or component
-for some period of time, specified by the bean's lifecycle.
-</para>
-
-<variablelist>
-	<title>bean lifecycle</title>
-	<varlistentry>
-		<term>none</term>
-		<listitem>
-			<para>
-			The bean is not retained, a new bean will be created on each access.
-			</para>
-		</listitem>
-	</varlistentry>
-
-	<varlistentry>
-		<term>page</term>
-		<listitem>
-			<para>
-			The bean is retained for the lifecycle of the page itself.
-			</para>
-		</listitem>
-	</varlistentry>
-	
-	<varlistentry>
-		<term>render</term>
-		<listitem> 
-			<para>
-			The bean is retained until the current render operation completes.
-			This will discard the bean when a page or form finishes rewinding.
-			</para>
-		</listitem>
-	</varlistentry>
-		
-	<varlistentry>
-		<term>request</term>
-		<listitem>
-			<para>
-			The bean is retained until the end of the current request.
-			</para>
-		</listitem>
-	</varlistentry>
-	
-
-</variablelist>
-
-<para>
-Caution should be taken when using lifeycle <literal>page</literal>.  A bean is associated
-with a particular instance of a page within a particular JVM.  Consecutive requests
-may be processed using different instances of the page, possibly in different JVMs (if the application
-is operating in a clustered environment).  No state particular to a single client session should
-be stored in a page.
-</para>
-
-<para>
-Beans must be public classes with a default (no arguments) constructor. Properties of the bean
-may be configured using the &spec.set-property; and &spec.set-message-property; elements.
-</para>
-
-<figure>
-	<title><sgmltag class="starttag">bean</sgmltag> Attributes</title>
-<informaltable>
-<tgroup cols="5">
-<thead>
-<row>
-  <entry>Name</entry>
-  <entry>Type</entry>
-  <entry>Required ?</entry>
-  <entry>Default Value</entry>
-  <entry>Description</entry>
-</row>
-</thead>
-<tbody>
-<row>
-	<entry>name</entry>
-	<entry>string</entry>
-	<entry>yes</entry>
-	<entry/>
-	<entry>The name of the bean, which must be a valid Java identifier.</entry>
-</row>
-<row>
-	<entry>class</entry>
-	<entry>string</entry>
-	<entry>yes</entry>
-	<entry/>
-	<entry>The name of the class to instantiate.</entry>
-</row>
-<row>
-	<entry>lifecycle</entry>
-	<entry><literal>none|page|render|request</literal></entry>
-	<entry>no</entry>
-	<entry><literal>request</literal></entry>
-	<entry>As described above; duration that bean is retained.</entry>
-</row>
-</tbody>
-</tgroup>
-
-</informaltable>
-</figure>
-
-
-<figure>
-	<title><sgmltag class="starttag">bean</sgmltag> Elements</title>
-<literallayout>
-  &spec.description; ?, &spec.property; *,
-  (&spec.set-property; | &spec.set-message-property;) *
-</literallayout>
-</figure>
-
-
-</section> <!-- spec.bean -->	
- 
-<section id="spec.binding">
-	<title><sgmltag class="starttag">binding</sgmltag> element</title>
-
-<para>
-Appears in: &spec.component;
-</para>
-
-<para>
-Binds a parameter of an embedded component to an OGNL expression rooted
-in its container.
-</para>
-
-<para>
-In an instantiated component, bindings can be accessed with
-the OGNL expression <literal>bindings.<replaceable>name</replaceable></literal>.
-</para>
-
-<para>
-If the <literal>expression</literal> attribute is omitted, then
-the body of the element is used.  This is useful when the
-expression is long, or contains problematic characters (such as a mix
-of single and double quotes).
-</para>
-
-
-<figure>
-	<title><sgmltag class="starttag">binding</sgmltag> Attributes</title>
-<informaltable>
-<tgroup cols="5">
-<thead>
-<row>
-  <entry>Name</entry>
-  <entry>Type</entry>
-  <entry>Required ?</entry>
-  <entry>Default Value</entry>
-  <entry>Description</entry>
-</row>
-</thead>
-<tbody>
-<row>
-	<entry>name</entry>
-	<entry>string</entry>
-	<entry>yes</entry>
-	<entry/>
-	<entry>The name of the parameter to bind.</entry>
-</row>
-<row>
-	<entry>expression</entry>
-	<entry>string</entry>
-	<entry>yes</entry>
-	<entry/>
-	<entry>The OGNL expression, relative to the container, to be bound to the parameter.</entry>
-</row>
-</tbody>
-</tgroup>
-</informaltable>
-</figure>
-
-</section> <!-- spec.binding -->
-
-<section id="spec.component">
-	<title><sgmltag class="starttag">component</sgmltag> element</title>
-	
-<para>
-Appears in: &spec.component-specification; and &spec.page-specification;
-</para>
-
-<para>
-Defines an embedded component within a container (a page or another component).
-</para>
-
-<para>
-In an instantiated component, embedded components can be accessed with
-the OGNL expression <literal>components.<replaceable>id</replaceable></literal>.
-</para>
-
-
-<figure>
-	<title><sgmltag class="starttag">component</sgmltag> Attributes</title>
-<informaltable>
-<tgroup cols="5">
-<thead>
-<row>
-  <entry>Name</entry>
-  <entry>Type</entry>
-  <entry>Required ?</entry>
-  <entry>Default Value</entry>
-  <entry>Description</entry>
-</row>
-</thead>
-<tbody>
-<row>
-	<entry>id</entry>
-	<entry>string</entry>
-	<entry>yes</entry>
-	<entry/>
-	<entry>Identifier for the component here and in the component's template.  Must be
-	a valid Java identifier.</entry>
-</row>
-<row>
-	<entry>type</entry>
-	<entry>string</entry>
-	<entry>no</entry>
-	<entry/>
-	<entry>A component type to instantiate.</entry>
-</row>
-<row>
-	<entry>copy-of</entry>
-	<entry>string</entry>
-	<entry>no</entry>
-	<entry/>
-	<entry>The name of a previously defined component.  The type and bindings of that
-	component will be copied to this component.
-	</entry>
-</row>
-
-<row>
-	<entry>inherit-informal-parameters</entry>	
-	<entry><literal>yes|no</literal></entry>
-	<entry>no</entry>
-	<entry><literal>no</literal></entry>
-	<entry>
-	If <literal>yes</literal>, then any informal parameters of the containing
-	component will be copied into this component.
-	</entry>
-</row>
-
-</tbody>
-</tgroup>
-</informaltable>
-</figure>
-
-<para>
-Either <literal>type</literal> or <literal>copy-of</literal> must be specified.
-</para>
-
-<para>
-A component type is either a simple name or a qualified name.  A simple name is the name of
-an component either provided by the framework, or
-provided by the application (if the page or component is defined in an application),
-or provided by the library (if the page or component is defined in a library).
-</para>
-
-<para>
-A qualified name is a library id, a colon, and a simple name of a component provided
-by the named library (for example, <literal>contrib:Palette</literal>).  
-Library ids are defined by a &spec.library; element in the
-containing library or application.
-</para>
-	
-<figure>
-	<title><sgmltag class="starttag">component</sgmltag> Elements</title>
-<literallayout>
-  &spec.property; *,
-  (&spec.binding; | &spec.inherited-binding; | &spec.listener-binding; | &spec.static-binding; | &spec.message-binding;) *
-</literallayout>
-</figure>
-
-	
-</section> <!-- spec.component -->
-
-<section id="spec.component-type">
-	<title><sgmltag class="starttag">component-type</sgmltag> element</title>
-	
-<para>
-Appears in: &spec.application; and 	&spec.library-specification;
-</para>
-
-<para>
-Defines a component type that may latter be used in a &spec.component; element
-(for pages and components also defined by this application or library).
-</para>
-
-<figure>
-	<title><sgmltag class="starttag">component-type</sgmltag> Attributes</title>
-<informaltable>
-<tgroup cols="5">
-<thead>
-<row>
-  <entry>Name</entry>
-  <entry>Type</entry>
-  <entry>Required ?</entry>
-  <entry>Default Value</entry>
-  <entry>Description</entry>
-</row>
-</thead>
-<tbody>
-<row>
-	<entry>type</entry>
-	<entry>string</entry>
-	<entry>yes</entry>
-	<entry/>
-	<entry>A name to be used as a component type.</entry>
-</row>
-<row>
-	<entry>specification-path</entry>
-	<entry>string</entry>
-	<entry>yes</entry>
-	<entry/>
-	<entry>An absolute or relative resource path to the component's specification (including leading
-	slash and file extension).  Relative resources are evaluated relative to
-	 the location of the containing application or library specfication.</entry>
-</row>
-</tbody>
-</tgroup>
-</informaltable>
-</figure>
-
-</section> <!-- spec.component-type -->
-
-
-<section id="spec.component-specification">
-	<title><sgmltag class="starttag">component-specification</sgmltag> element</title>
-
-<para>
-<emphasis>root element</emphasis>
-</para>
-
-<para>
-Defines a new component, in terms of its API (&spec.parameter;s), embedded components, beans and
-assets.
-</para>
-
-<para>
-The structure of a <sgmltag class="starttag">component-specification</sgmltag>
-is very similar to a &spec.page-specification; except components have additional attributes
-and elements related to parameters.
-</para>
-
-
-<figure>
-	<title><sgmltag class="starttag">component-specification</sgmltag> Attributes</title>
-<informaltable>
-<tgroup cols="5">
-<thead>
-<row>
-  <entry>Name</entry>
-  <entry>Type</entry>
-  <entry>Required ?</entry>
-  <entry>Default Value</entry>
-  <entry>Description</entry>
-</row>
-</thead>
-<tbody>
-<row>
-	<entry>class</entry>
-	<entry>string</entry>
-	<entry>no</entry>
-	<entry/>
-	<entry>The Java class to instantiate, which must implement the
-	interface &IComponent;.  If not specified, &BaseComponent; is used.
-	</entry>
-</row>
-<row>
-	<entry>allow-body</entry>
-	<entry><literal>yes|no</literal></entry>
-	<entry>no</entry>
-	<entry><literal>yes</literal></entry>
-	<entry>
-	<para>If <literal>yes</literal>, then any body for this component, from its
-	containing page or component's template, is retained and may be 
-	produced using a &RenderBody; component.
-	</para>
-	<para>If <literal>no</literal>, then any body for this component is
-	discarded.
-	</para>	
-	</entry>
-</row>
-<row>
-	<entry>allow-informal-parameters</entry>
-	<entry><literal>yes|no </literal></entry>
-	<entry>no</entry>
-	<entry><literal>yes</literal></entry>
-	<entry>
-	<para>If <literal>yes</literal>, then any informal parameters
-	(bindings that don't match a formal parameter) specified here, or in
-	the component's tag within its container's template, are retained.
-	Typically, they are converted into additional HTML attributes.
-	</para>
-	<para>If <literal>no</literal>, then informal parameters
-	are not allowed in the specification, and discarded if in the template.
-	</para>
-	</entry>
-</row>
-</tbody>
-</tgroup>
-</informaltable>
-</figure>
-
-<figure>
-	<title><sgmltag class="starttag">component-specification</sgmltag> Elements</title>
-<literallayout>
-  &spec.description; ?, &spec.parameter; *, &spec.reserved-parameter; *, &spec.property; *,
-  (&spec.bean; | &spec.component; | &spec.external-asset; | &spec.context-asset; | &spec.private-asset; | &spec.property-specification;)*
-</literallayout>
-</figure>
-
-
-</section> <!-- spec.component-specification -->
-
-<section id="spec.configure">
-	<title><sgmltag class="starttag">configure</sgmltag> element</title>
-
-<para>
-Appears in: &spec.extension;
-</para>
-
-<para>
-Allows a JavaBeans property of the extension to be set from a statically defined value.  The
-<sgmltag class="starttag">configure</sgmltag> element
-wraps around the static value.  The value is trimmed of leading and trailing
-whitespace and optionally converted to a specified type before being assigned
-to the property.
-</para>
-
-<figure>
-	<title><sgmltag class="starttag">configure</sgmltag> Attributes</title>
-<informaltable>
-<tgroup cols="5">
-<thead>
-<row>
-  <entry>Name</entry>
-  <entry>Type</entry>
-  <entry>Required ?</entry>
-  <entry>Default Value</entry>
-  <entry>Description</entry>
-</row>
-</thead>
-<tbody>
-<row>
-	<entry>property-name</entry>
-	<entry>string</entry>
-	<entry>yes</entry>
-	<entry/>
-	<entry>The name of the extension property to configure.</entry>
-</row>
-<row>
-	<entry>type</entry>
-	<entry><literal>boolean|int|long|double|String</literal></entry>
-	<entry>no</entry>
-	<entry><literal>String</literal></entry>
-	<entry>The conversion to apply to the value.</entry>
-</row>
-<row>
-	<entry>value</entry>
-	<entry/>
-	<entry>no</entry>
-	<entry/>
-	<entry>The value to configure, which will be converted before being assigned
-	to the property.  If not provided, the character data wrapped by the element
-	is used instead.
-	</entry>
-</row>
-</tbody>
-</tgroup>
-</informaltable>
-</figure>
-
-
-
-</section> <!-- spec.configure -->
-
-
-
-<section id="spec.context-asset">
-	<title><sgmltag class="starttag">context-asset</sgmltag> element</title>
-
-<para>
-Specifies an asset located relative to the web application context root folder.
-Context assets may be localized.
-</para>
-
-<para>
-Assets for an instantiated component (or page) 
-may be accessed using the OGNL expression <literal>assets.<replaceable>name</replaceable></literal>.
-</para>
-
-<para>
-The path may be either absolute or relative.  Absolute paths start with a leading slash, and are evalulated
-relative to the context root.  Relative paths are evaluated relative to the application root, which
-is typically the same as the context root (the exception being a WAR that contains multiple
-Tapestry applications, within multiple subfolders).
-</para>
-
-<figure>
-	<title><sgmltag class="starttag">context-asset</sgmltag> Attributes</title>
-<informaltable>
-<tgroup cols="5">
-<thead>
-<row>
-  <entry>Name</entry>
-  <entry>Type</entry>
-  <entry>Required ?</entry>
-  <entry>Default Value</entry>
-  <entry>Description</entry>
-</row>
-</thead>
-<tbody>
-<row>
-	<entry>name</entry>
-	<entry>string</entry>
-	<entry>yes</entry>
-	<entry/>
-	<entry>The name of the asset, which must be a valid Java identifier.</entry>
-</row>
-<row>
-	<entry>path</entry>
-	<entry>string</entry>
-	<entry>yes</entry>
-	<entry/>
-	<entry>The path to the asset.
-	</entry>
-</row>
-</tbody>
-</tgroup>
-</informaltable>
-</figure>
-
-</section> <!-- spec.context-asset -->
-
-<section id="spec.description">
-	<title><sgmltag class="starttag">description</sgmltag> element</title>
-	
-<para>
-Appears in: <emphasis>many</emphasis>
-</para>
-
-<para>
-A description may be attached to a many different elements.  Descriptions are used
-by an intelligent IDE to provide help.  The Tapestry Inspector may also display a description.
-</para>
-	
-<para>
-The descriptive text appears inside the <sgmltag class="starttag">description</sgmltag> tags.  Leading
-and trailing whitespace is removed and interior whitespace may be altered or removed.  Descriptions
-should be short; external documentation can provide greater details.
-</para>
-	
-<para>
-The 	<sgmltag class="starttag">description</sgmltag>
-element has no attributes.
-</para>
-
-</section> <!-- spec.description -->
-
-<section id="spec.extension">
-	<title><sgmltag class="starttag">extension</sgmltag> element</title>
-
-<para>
-Appears in: &spec.application; and &spec.library-specification;
-</para>
-
-<para>
-Defines an extension, a JavaBean that is instantiated as needed to provide
-a global service to the application.
-</para>
-
-<figure>
-	<title><sgmltag class="starttag">extension</sgmltag> Attributes</title>
-<informaltable>
-<tgroup cols="5">
-<thead>
-<row>
-  <entry>Name</entry>
-  <entry>Type</entry>
-  <entry>Required ?</entry>
-  <entry>Default Value</entry>
-  <entry>Description</entry>
-</row>
-
-</thead>
-<tbody>
-<row>
-	<entry>name</entry>
-	<entry>string</entry>
-	<entry>yes</entry>
-	<entry/>
-	<entry>A name for the extension, which can (and should) look like
-	a qualified class name, but may also include the dash character.
-	</entry>
-</row>
-<row>
-	<entry>class</entry>
-	<entry>string</entry>
-	<entry>yes</entry>
-	<entry/>
-	<entry>The Java class to instantiate.  The class must have a zero-arguments
-	constructor.</entry>
-</row>
-<row>
-	<entry>immediate</entry>
-	<entry><literal>yes|no</literal></entry>
-	<entry>no</entry>
-	<entry><literal>no</literal></entry>
-	<entry>If <literal>yes</literal>, the extension is instantiated when the specification is read.  If 
-	<literal>no</literal>, then the extension is not created until first needed.
-	</entry>
-</row>
-</tbody>
-</tgroup>
-</informaltable>
-</figure>
-
-
-<figure>
-	<title><sgmltag class="starttag">component-specification</sgmltag> Elements</title>
-<literallayout>
-  &spec.property; *, &spec.configure; *
-</literallayout>
-</figure>
-
-</section> <!-- spec.extension -->
-
-<section id="spec.external-asset">
-	<title><sgmltag class="starttag">external-asset</sgmltag> element</title>
-
-<para>
-Appears in: &spec.component-specification; and &spec.page-specification;
-</para>
-
-<para>
-Defines an asset at an arbitrary URL.  The URL may begin with a slash to indicate an asset on the same
-web server as the application, or may be a complete URL to an arbitrary location on the Internet.
-</para>
-
-<para>
-External assets may be accessed at runtime with the OGNL expression
-<literal>assets.<replaceable>name</replaceable></literal>.
-</para>
-
-<figure>
-	<title><sgmltag class="starttag">external-asset</sgmltag> Attributes</title>
-<informaltable>
-<tgroup cols="5">
-<thead>
-<row>
-  <entry>Name</entry>
-  <entry>Type</entry>
-  <entry>Required ?</entry>
-  <entry>Default Value</entry>
-  <entry>Description</entry>
-</row>
-
-</thead>
-<tbody>
-<row>
-	<entry>name</entry>
-	<entry>string</entry>
-	<entry>yes</entry>
-	<entry/>
-	<entry>A name for the asset. Asset names must be valid Java identifiers.
-	</entry>
-</row>
-<row>
-	<entry>URL</entry>
-	<entry>string</entry>
-	<entry>yes</entry>
-	<entry/>
-	<entry>The URL used to access the asset.</entry>
-</row>
-per</tbody>
-</tgroup>
-</informaltable>
-</figure>
-
-
-</section> <!-- spec.external-asset -->
-
-
-<section id="spec.inherited-binding">
-	<title><sgmltag class="starttag">inherited-binding</sgmltag> element</title>
-
-<para>
-Appears in: &spec.component;
-</para>
-
-<para>
-Binds a parameter of an embedded component to a parameter
-of its container.
-</para>
-
-
-<para>
-In an instantiated component, bindings can be accessed with
-the OGNL expression <literal>bindings.<replaceable>name</replaceable></literal>.
-</para>
-
-
-<figure>
-	<title><sgmltag class="starttag">inherited-binding</sgmltag> Attributes</title>
-<informaltable>
-<tgroup cols="5">
-<thead>
-<row>
-  <entry>Name</entry>
-  <entry>Type</entry>
-  <entry>Required ?</entry>
-  <entry>Default Value</entry>
-  <entry>Description</entry>
-</row>
-</thead>
-<tbody>
-<row>
-	<entry>name</entry>
-	<entry>string</entry>
-	<entry>yes</entry>
-	<entry/>
-	<entry>The name of the parameter to bind.</entry>
-</row>
-<row>
-	<entry>parameter-name</entry>
-	<entry>string</entry>
-	<entry>yes</entry>
-	<entry/>
-	<entry>The name of a parameter of the containing component.
-	</entry>
-</row>
-</tbody>
-</tgroup>
-</informaltable>
-</figure>
-
-
-
-
-</section> <!-- spec.inherited-binding -->
-
-<section id="spec.library">
-	<title><sgmltag class="starttag">library</sgmltag> element</title>
-	
-<para>
-Appears in: &spec.application; and &spec.library-specification;
-</para>
-
-<para>
-Establishes that the containing application or library uses components defined in
-another library, and sets the prefix used to reference those components.
-</para>
-
-<figure>
-	<title><sgmltag class="starttag">library</sgmltag> Attributes</title>
-<informaltable>
-<tgroup cols="5">
-<thead>
-<row>
-  <entry>Name</entry>
-  <entry>Type</entry>
-  <entry>Required ?</entry>
-  <entry>Default Value</entry>
-  <entry>Description</entry>
-</row>
-</thead>
-<tbody>
-<row>
-	<entry>id</entry>
-	<entry>string</entry>
-	<entry>yes</entry>
-	<entry/>
-	<entry>The id associated with the library.  Components within the library
-	can be referenced with the component type
-	<literal><replaceable>id</replaceable>:<replaceable>name</replaceable></literal>.
-	</entry>
-</row>
-<row>
-	<entry>specification-path</entry>
-	<entry>string</entry>
-	<entry>yes</entry>
-	<entry/>
-	<entry>The complete resource path for the library specification.
-	</entry>
-</row>
-</tbody>
-</tgroup>
-</informaltable>
-</figure>
-
-
-
-
-
-</section> <!-- spec.library -->
-
-<section id="spec.library-specification">
-	<title><sgmltag class="starttag">library-specification</sgmltag> element</title>
-	
-<para>
-<emphasis>root element</emphasis>
-</para>
-
-<para>
-Defines the pages, components, services and libraries used by a library.  Very similar
-to &spec.application;, but without attributes related application name or engine class.
-</para>
-
-<para>
-The 	<sgmltag class="starttag">library-specification</sgmltag>
-element has no attributes.
-</para>
-	
-
-<figure>
-	<title><sgmltag class="starttag">library-specification</sgmltag> Elements</title>
-<literallayout>
-  &spec.description; ?, &spec.property; *,
-  (&spec.page; | &spec.component-type; | &spec.service; | &spec.library; | &spec.extension;) *
-</literallayout>
-</figure>
-
-
-</section> <!-- spec.library-specification -->
-
-
-
-<section id="spec.listener-binding">
-	<title><sgmltag class="starttag">listener-binding</sgmltag> element</title>
-
-<para>
-Appears in: &spec.component;
-</para>
-
-
-<para>
-A listener binding is used to create application logic, in the form
-of a listener (for a &DirectLink;, &ActionLink;, &Form;, etc.)
-in place within the specification, in 
-a scripting language (such as &Jython; or JavaScript).  The script itself
-is the wrapped character data for the <sgmltag class="starttag">listener-binding</sgmltag> 
-element.
-</para>
-
-<para>
-When the listener is triggered, the script is executed.  Three beans,
-<varname>page</varname>, <varname>component</varname> and <varname>cycle</varname>
-are pre-declared.
-</para>
-
-<para>
-The <varname>page</varname> is the page activated by the request.  Usually, this is
-the same as the page which contains the <varname>component</varname> ... in fact,
-usually <varname>page</varname> and <varname>compoment</varname> are identical.
-</para>
-
-<para>
-The <varname>component</varname> is the component from whose specification
-the binding was created (that is, not the &DirectLink;, but the page or component
-which embeds the &DirectLink;).
-</para>
-
-<para>
-The <varname>cycle</varname> is the active request cycle, from which service parameters
-may be obtained.
-</para>
-
-
-<figure>
-	<title><sgmltag class="starttag">listener-binding</sgmltag> Attributes</title>
-<informaltable>
-<tgroup cols="5">
-<thead>
-<row>
-  <entry>Name</entry>
-  <entry>Type</entry>
-  <entry>Required ?</entry>
-  <entry>Default Value</entry>
-  <entry>Description</entry>
-</row>
-</thead>
-<tbody>
-<row>
-	<entry>name</entry>
-	<entry>string</entry>
-	<entry>yes</entry>
-	<entry/>
-	<entry>The name of the listener parameter to bind.</entry>
-</row>
-<row>
-	<entry>language</entry>
-	<entry>string</entry>
-	<entry>no</entry>
-	<entry/>
-	<entry>The name of a &BSF;-supported language that the script is written in.  The default,
-	if not specified, is <literal>jython</literal>.
-	</entry>
-</row>
-</tbody>
-</tgroup>
-</informaltable>
-</figure>
-
-</section> <!-- spec.listener-binding -->
-
-
-<section id="spec.message-binding">
-	<title><sgmltag class="starttag">message-binding</sgmltag> element</title>
-
-<para>
-Appears in: &spec.component;
-</para>
-
-<para>
-Binds a parameter of an embedded component to a localized
-string of its containing page or component.
-</para>
-
-<para>
-In an instantiated component, bindings can be accessed with
-the OGNL expression <literal>bindings.<replaceable>name</replaceable></literal>.
-</para>
-
-
-<figure>
-	<title><sgmltag class="starttag">message-binding</sgmltag> Attributes</title>
-<informaltable>
-<tgroup cols="5">
-<thead>
-<row>
-  <entry>Name</entry>
-  <entry>Type</entry>
-  <entry>Required ?</entry>
-  <entry>Default Value</entry>
-  <entry>Description</entry>
-</row>
-</thead>
-<tbody>
-<row>
-	<entry>name</entry>
-	<entry>string</entry>
-	<entry>yes</entry>
-	<entry/>
-	<entry>The name of the parameter to bind.</entry>
-</row>
-<row>
-	<entry>key</entry>
-	<entry>string</entry>
-	<entry>yes</entry>
-	<entry/>
-	<entry>The localized property key to retrieve.
-	</entry>
-</row>
-</tbody>
-</tgroup>
-</informaltable>
-</figure>
-</section> <!-- spec.message-binding -->
-
-<section id="spec.page">
-	<title><sgmltag class="starttag">page</sgmltag> element</title>
-
-<para>
-Appears in: &spec.application; and &spec.library-specification;
-</para>
-
-<para>
-Defines a page within an application (or contributed by a library).
-Relates a logical name for the page to the path to the page's specification file.
-</para>
-
-<figure>
-	<title><sgmltag class="starttag">page</sgmltag> Attributes</title>
-<informaltable>
-<tgroup cols="5">
-<thead>
-<row>
-  <entry>Name</entry>
-  <entry>Type</entry>
-  <entry>Required ?</entry>
-  <entry>Default Value</entry>
-  <entry>Description</entry>
-</row>
-</thead>
-<tbody>
-<row>
-	<entry>name</entry>
-	<entry>string</entry>
-	<entry>yes</entry>
-	<entry/>
-	<entry>The name for the page, which must start with a letter,
-	and may contain letters, numbers, underscores and the dash
-	character.
-	</entry>
-</row>
-<row>
-	<entry>specification-path</entry>
-	<entry>string</entry>
-	<entry>yes</entry>
-	<entry/>
-	<entry>
-	The path to the page's specification, which may be absolute
-	 (start with a leading slash), or relative to the application or library
-	 specification.
-	</entry>
-</row>
-</tbody>
-</tgroup>
-</informaltable>
-</figure>
-
-</section> <!-- spec.page -->
-
-<section id="spec.page-specification">
-	<title><sgmltag class="starttag">page-specification</sgmltag> element</title>
-
-<para>
-<emphasis>root element</emphasis>
-</para>
-
-<para>
-Defines a page within an application (or a library).  The 
-<sgmltag class="starttag">page-specification</sgmltag>
-is a subset of &spec.component-specification;
-with attributes and entities related to parameters removed.
-</para>
-
-
-<figure>
-	<title><sgmltag class="starttag">page-specification</sgmltag> Attributes</title>
-<informaltable>
-<tgroup cols="5">
-<thead>
-<row>
-  <entry>Name</entry>
-  <entry>Type</entry>
-  <entry>Required ?</entry>
-  <entry>Default Value</entry>
-  <entry>Description</entry>
-</row>
-</thead>
-<tbody>
-<row>
-	<entry>class</entry>
-	<entry>string</entry>
-	<entry>no</entry>
-	<entry/>
-	<entry>The Java class to instantiate, which must implement the
-	interface &IPage;.  Typically, this is
-	&BasePage; or a subclass of it.  &BasePage; is the default if not otherwise
-	 specified.</entry>
-</row>
-</tbody>
-</tgroup>
-</informaltable>
-</figure>
-
-<figure>
-	<title><sgmltag class="starttag">page-specification</sgmltag> Elements</title>
-<literallayout>
-  &spec.description; ?, &spec.property; *,
-  (&spec.bean; | &spec.component; | &spec.external-asset; | &spec.context-asset; | &spec.private-asset; | &spec.property-specification;)*
-</literallayout>
-</figure>
-
-
-</section> <!-- spec.page-specification -->
-
-<section id="spec.parameter">
-	<title><sgmltag class="starttag">parameter</sgmltag> element</title>
-
-<para>
-Appears in: &spec.component-specification;
-</para>
-
-<para>
-Defines a formal parameter of a component.  Parameters may be connected 
-(<literal>in</literal>, <literal>form</literal> or <literal>auto</literal>)
-or unconnected (<literal>custom</literal>).  If a parameter is
-connected, but the class does not provide the property (or does, but
-the accessors are abstract), then the framework
-will create and use a subclass that contains the implementation
-of the necessary property.
-</para>
-
-<para>
-For <literal>auto</literal> parameters, the framework will create a synthetic property
-as a wrapper around the binding.  Reading the property will read the value from
-the binding and updating the property will update the binding value.  <literal>auto</literal>
-may only be used with required parameters.  <literal>auto</literal> is less
-efficient than <literal>in</literal>, but can be used even when the component
-is not rendering.
-</para>
-
-<figure>
-	<title><sgmltag class="starttag">parameter</sgmltag> Attributes</title>
-<informaltable>
-<tgroup cols="5">
-<thead>
-<row>
-  <entry>Name</entry>
-  <entry>Type</entry>
-  <entry>Required ?</entry>
-  <entry>Default Value</entry>
-  <entry>Description</entry>
-</row>
-</thead>
-<tbody>
-<row>
-	<entry>name</entry>
-	<entry>string</entry>
-	<entry>yes</entry>
-	<entry/>
-	<entry>The name of the parameter, which must be 
-	a valid Java identifier.</entry>
-</row>
-<row>
-  <entry>type</entry>
-  <entry>scalar name, or class name</entry>
-  <entry>no</entry>
-  <entry/>
-  <entry>Required for connected parameters.  Specifies
-   the type of the JavaBean property that a connected
-   parameter writes and reads.  The property must
-    match this exact value, which can be a fully specified class name,
-    or the name of a scalar Java type.  
-   </entry>
-  </row>
-  
-<row>
-  <entry>required</entry>
-  <entry><literal>yes|no</literal></entry>
-  <entry>no</entry>
-  <entry><literal>no</literal></entry>
-  <entry>If <literal>yes</literal>, then the parameter must be
-  bound (though it is possible that the binding's value
-  will still be null).
- </entry>
-</row>
-
-<row>
-  <entry>property-name</entry>
-  <entry>string</entry>
-  <entry>no</entry>
-  <entry/>
-  <entry>For connected parameters only; allows the name of the property
-  to differ from the name of the parameter.  If not specified,
-  the property name will be the same as the parameter name.
-  </entry>
-</row>
-
-<row>
-  <entry>direction</entry>
-  <entry><literal>in|form|auto|custom</literal></entry>
-  <entry>no</entry>
-  <entry><literal>custom</literal></entry>
-  <entry>
-  <para>
-  Identifies the semantics of how the parameter is used by the
-  component.  <literal>custom</literal>, the default, means the
-  component explicitly controls reading and writing values through
-  the binding.
-  </para>
-  
-  <para>
-  <literal>in</literal> means the property is set from the parameter
-  before the component renders, and is reset back to default value
-  after the component renders.
-  </para>
-  
-  <para>
-  <literal>form</literal> means that the property is set from the
-  parameter when the component renders (as with <literal>in</literal>).
-  When the form is submitted, the value is read from the property
-  and used to set the binding value after the component rewinds.
-  </para>
-  
-  <para>
-  <literal>auto</literal> creates a synthetic property that works
-  with the binding to read and update.  <literal>auto</literal>
-  parameters must be required, but can be used even when the
-  component is not rendering.
-  </para>
-  </entry>
-</row>
-
-<row>
-	<entry>default-value</entry>	
-	<entry>OGNL expression</entry>
-	<entry>no</entry>
-	<entry/>
-	<entry>
-	Specifies the default value for the parameter, if the parameter is not bound.	
-	</entry>
-</row>
-
-</tbody>
-</tgroup>
-</informaltable>
-</figure>
-
-
-
-</section> <!-- spec.parameter -->
-
-<section id="spec.private-asset">
-	<title><sgmltag class="starttag">private-asset</sgmltag> element</title>
-
-<para>
-Specifies located from the classpath.  These exist to support
-reusable components packages (as part of a &spec.library-specification;)
-packaged in a JAR.  Private assets will be localized.
-</para>
-
-<para>
-Assets for an instantiated component (or page) 
-may be accessed using the OGNL expression <literal>assets.<replaceable>name</replaceable></literal>.
-</para>
-
-<para>
-The resource path may either be complete and absolute, and start with a leading slash,
-or be relative.  Relative paths are evaluated relative to the location of the
-containing specification.
-</para>
-
-
-<figure>
-	<title><sgmltag class="starttag">private-asset</sgmltag> Attributes</title>
-<informaltable>
-<tgroup cols="5">
-<thead>
-<row>
-  <entry>Name</entry>
-  <entry>Type</entry>
-  <entry>Required ?</entry>
-  <entry>Default Value</entry>
-  <entry>Description</entry>
-</row>
-</thead>
-<tbody>
-<row>
-	<entry>name</entry>
-	<entry>string</entry>
-	<entry>yes</entry>
-	<entry/>
-	<entry>The name of the asset, which must be a valid Java identifier.</entry>
-</row>
-<row>
-	<entry>resource-path</entry>
-	<entry>string</entry>
-	<entry>yes</entry>
-	<entry/>
-	<entry>The absolute or relative path to the asset on the classpath. 
-	</entry>
-</row>
-</tbody>
-</tgroup>
-</informaltable>
-</figure>
-
-</section> <!-- spec.private-asset -->
-
-<section id="spec.property">
-	<title><sgmltag class="starttag">property</sgmltag> element</title>
-	
-<para>
-Appears in: <emphasis>many</emphasis>
-</para>
-
-<para>
-The <sgmltag class="starttag">property</sgmltag> element is used to store meta-data
-about some other element (it is contained within).  Tapestry ignores this meta-data
-Any number of name/value pairs may be stored.  The value is provided with
-the <varname>value</varname> attribute, or the 
-character data for the <sgmltag class="starttag">property</sgmltag> element.
-</para>
-
-<figure>
-	<title><sgmltag class="starttag">property</sgmltag> Attributes</title>
-<informaltable>
-<tgroup cols="5">
-<thead>
-<row>
-  <entry>Name</entry>
-  <entry>Type</entry>
-  <entry>Required ?</entry>
-  <entry>Default Value</entry>
-  <entry>Description</entry>
-</row>
-</thead>
-<tbody>
-<row>
-	<entry>name</entry>
-	<entry>string</entry>
-	<entry>yes</entry>
-	<entry/>
-	<entry>The name of the property.</entry>
-</row>
-<row>
-	<entry>value</entry>
-	<entry>string</entry>
-	<entry>no</entry>
-	<entry/>
-	<entry>The value for the property.  If omitted, the value is taken
-	from the character data (the text the tag wraps around).  If specified,
-	the character data is ignored.</entry>
-</row>
-</tbody>
-</tgroup>
-</informaltable>
-</figure>
-</section> <!-- spec.property -->
-
-
-<section id="spec.property-specification">
-	<title><sgmltag class="starttag">property-specification</sgmltag> element</title>
-	
-<para>
-Appears in: &spec.component-specification;, &spec.page-specification;
-</para>
-
-<para>
-Defines a transient or persistent property to be added to the page or component.
-Tapestry will create a subclass of the page or component class (at runtime)
-and add the necessary fields and accessor methods, as well as end-of-request
-cleanup.
-</para>
-
-<para>
-It is acceptible for a page (or component) to be abstract, and have abstract accessor methods
-matching the names that Tapestry will generate for the subclass.  This can be
-useful when setting properties of the page (or component) from a &listener-method;.
-</para>
-
-<para>
-A connected parameter specified in a &spec.parameter; element may also cause an enhanced subclass
-to be created.
-</para>
-
-<para>
-An initial value may be specified as either the <literal>initial-value</literal>
-attribute, or as the body of the <sgmltag class="starttag">property-specification</sgmltag> element
-itself.
-</para>
-
-<figure>
-	<title><sgmltag class="starttag">property-specification</sgmltag> Attributes</title>
-<informaltable>
-<tgroup cols="5">
-<thead>
-<row>
-  <entry>Name</entry>
-  <entry>Type</entry>
-  <entry>Required ?</entry>
-  <entry>Default Value</entry>
-  <entry>Description</entry>
-</row>
-</thead>
-<tbody>
-<row>
-	<entry>name</entry>
-	<entry>string</entry>
-	<entry>yes</entry>
-	<entry/>
-	<entry>The name of the property to create.</entry>
-</row>
-<row>
-	<entry>type</entry>
-	<entry>string</entry>
-	<entry>no</entry>
-	<entry>java.lang.Object</entry>
-	<entry>
-	The type of the property.  If abstract accessors exist, they must exactly match
-	this type.  The type may be either a fully qualified class name, or the name
-	of one of the basic scalar types (int, boolean, etc.). It may be suffixed with
-	<literal>[]</literal> to indicate an array of the indicated type.
-	</entry>
-</row>
-<row>
-	<entry>persistent</entry>
-	<entry><literal>yes|no</literal></entry>
-	<entry>no</entry>
-	<entry><literal>no</literal></entry>
-	<entry>
-	If true, the generated property will be persistent, firing change notifications
-	when it is updated.
-	</entry>
-</row>
-<row>
-	<entry>initial-value</entry>
-	<entry>string</entry>
-	<entry>no</entry>
-	<entry/>
-	<entry>
-	An optional OGNL expression used to initialize the property.  The expression is evaluated
-	only when the page is first constructed.
-	</entry>
-</row>
-</tbody>
-</tgroup>
-</informaltable>
-</figure>
-</section> <!-- spec.property-specification -->
-
-<section id="spec.reserved-parameter">
-	<title><sgmltag class="starttag">reserved-parameter</sgmltag> element</title>
-	
-<para>
-Appears in: &spec.component-specification;
-</para>
-
-<para>
-Used in components that allow informal parameters to limit the possible
-informal parameters (so that there aren't conflicts with HTML attributes
-generated by the component).
-</para>
-
-<para>
-All formal parameters are automatically reserved.
-</para>
-
-<para>
-Comparisons are caseless, so an informal parameter of "SRC", "sRc", etc., will match
-a reserved parameter named "src" (or any variation), and be excluded.
-</para>
-
-
-<figure>
-	<title><sgmltag class="starttag">reserved-parameter</sgmltag> Attributes</title>
-<informaltable>
-<tgroup cols="5">
-<thead>
-<row>
-  <entry>Name</entry>
-  <entry>Type</entry>
-  <entry>Required ?</entry>
-  <entry>Default Value</entry>
-  <entry>Description</entry>
-</row>
-</thead>
-<tbody>
-<row>
-	<entry>name</entry>
-	<entry>string</entry>
-	<entry>yes</entry>
-	<entry/>
-	<entry>The name of the reserved parameter.</entry>
-</row>
-</tbody>
-</tgroup>
-</informaltable>
-</figure>
-
-
-</section> <!-- spec.reserved-parameter -->
-
-<section id="spec.service">
-	<title><sgmltag class="starttag">service</sgmltag> element</title>
-
-<para>
-Appears in: &spec.application; and &spec.library-specification;
-</para>
-
-<para>
-Defines an &IEngineService; provided by the application or by a library.
-</para>
-
-<para>
-The framework provides several services (home, direct, action, external, etc.).
-Applications may override these services by defining different
-services with the same names.
-</para>
-
-<para>
-Libraries that provide services should use a qualified name (that is, put
-a package prefix in front of the name) to avoid name collisions.
-</para>
-
-
-<figure>
-	<title><sgmltag class="starttag">service</sgmltag> Attributes</title>
-<informaltable>
-<tgroup cols="5">
-<thead>
-<row>
-  <entry>Name</entry>
-  <entry>Type</entry>
-  <entry>Required ?</entry>
-  <entry>Default Value</entry>
-  <entry>Description</entry>
-</row>
-</thead>
-<tbody>
-<row>
-	<entry>name</entry>
-	<entry>string</entry>
-	<entry>yes</entry>
-	<entry/>
-	<entry>The name of the service.</entry>
-</row>
-<row>
-	<entry>class</entry>
-	<entry>string</entry>
-	<entry>yes</entry>
-	<entry/>
-	<entry>The complete class name to instantiate.  The class must have
-	a zero-arguments constructor and implement the interface
-	&IEngineService;
-	</entry>
-</row>
-</tbody>
-</tgroup>
-</informaltable>
-</figure>
-
-</section> <!-- spec.service -->
-
-<section id="spec.set-message-property">
-	<title><sgmltag class="starttag">set-message-property</sgmltag> element</title>
-
-<para>
-Appears in: &spec.bean;
-</para>
-
-<para>
-Allows a property of a helper bean to be set to a localized string
-value of its containing page or component.
-</para>
-
-
-<figure>
-	<title><sgmltag class="starttag">set-message-property</sgmltag> Attributes</title>
-<informaltable>
-<tgroup cols="5">
-<thead>
-<row>
-  <entry>Name</entry>
-  <entry>Type</entry>
-  <entry>Required ?</entry>
-  <entry>Default Value</entry>
-  <entry>Description</entry>
-</row>
-</thead>
-<tbody>
-<row>
-	<entry>name</entry>
-	<entry>string</entry>
-	<entry>yes</entry>
-	<entry/>
-	<entry>The name of the helper bean property to set.</entry>
-</row>
-<row>
-	<entry>key</entry>
-	<entry>string</entry>
-	<entry>yes</entry>
-	<entry/>
-	<entry>A string property key of the containing page or component.
-	</entry>
-</row>
-</tbody>
-</tgroup>
-</informaltable>
-</figure>
-
-</section> <!-- spec.set-message-property -->
-
-<section id="spec.set-property">
-	<title><sgmltag class="starttag">set-property</sgmltag> element</title>
-	
-<para>
-Appears in: &spec.bean;
-</para>
-
-<para>
-Allows a property of a helper bean to be set to an OGNL expression (evaluated
-on the containing component or page).
-</para>
-
-
-<para>
-The value to be assigned to the bean property can be specified
-using the <literal>expression</literal> attribute, or as
-the content of the <sgmltag class="starttag">set-property</sgmltag> element
-itself.
-</para>
-
-<figure>
-	<title><sgmltag class="starttag">set-property</sgmltag> Attributes</title>
-<informaltable>
-<tgroup cols="5">
-<thead>
-<row>
-  <entry>Name</entry>
-  <entry>Type</entry>
-  <entry>Required ?</entry>
-  <entry>Default Value</entry>
-  <entry>Description</entry>
-</row>
-</thead>
-<tbody>
-<row>
-	<entry>name</entry>
-	<entry>string</entry>
-	<entry>yes</entry>
-	<entry/>
-	<entry>The name of the helper bean property to set.</entry>
-</row>
-<row>
-	<entry>expression</entry>
-	<entry>string</entry>
-	<entry>no</entry>
-	<entry/>
-	<entry>The OGNL expression used to set the property.
-	</entry>
-</row>
-</tbody>
-</tgroup>
-</informaltable>
-</figure>
-
-</section> <!-- spec.set-property -->
-
-
-
-<section id="spec.static-binding">
-	<title><sgmltag class="starttag">static-binding</sgmltag> element</title>
-
-<para>
-Appears in: &spec.component;
-</para>
-
-<para>
-Binds a parameter of an embedded component to a static value.  The value,
-which is stored as a string, is specified
-as the <literal>value</literal> attribute, or as
-the wrapped contents
-of the <sgmltag class="starttag">static-binding</sgmltag> tag.  Leading
-and trailing whitespace is removed.
-</para>
-
-<para>
-In an instantiated component, bindings can be accessed with
-the OGNL expression <literal>bindings.<replaceable>name</replaceable></literal>.
-</para>
-
-
-<figure>
-	<title><sgmltag class="starttag">static-binding</sgmltag> Attributes</title>
-<informaltable>
-<tgroup cols="5">
-<thead>
-<row>
-  <entry>Name</entry>
-  <entry>Type</entry>
-  <entry>Required ?</entry>
-  <entry>Default Value</entry>
-  <entry>Description</entry>
-</row>
-</thead>
-<tbody>
-<row>
-	<entry>name</entry>
-	<entry>string</entry>
-	<entry>yes</entry>
-	<entry/>
-	<entry>The name of the parameter to bind.</entry>
-</row>
-<row>
-	<entry>value</entry>
-	<entry>string</entry>
-	<entry>no</entry>
-	<entry/>
-	<entry>The string value to be used.  If omitted, the wrapped character data
-	is used instead (which is more convienient if the value is large, or
-	contains problematic punctuation).</entry>
-</row>
-</tbody>
-</tgroup>
-</informaltable>
-</figure>
-
-
-</section> <!-- spec.static-binding -->
-
-</appendix>
diff --git a/3.0.4/doc/src/UsersGuide/state.xml b/3.0.4/doc/src/UsersGuide/state.xml
deleted file mode 100644
index bdd28cf..0000000
--- a/3.0.4/doc/src/UsersGuide/state.xml
+++ /dev/null
@@ -1,743 +0,0 @@
-<!-- $Id$ -->
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<chapter id="state">
-	<title>Managing server-side state</title>
-	
-<para>
-Server-side state is any information that exists on the server, and persists between requests.
-This can be anything from a single flag all the way up to a large database result set.  In a typical
-application, server-side state is the identity of the user (once the user logs in) and, perhaps,
-a few important domain objects (or, at the very least, primary keys for those objects).
-</para>
-
-<para>
-In an ordinary servlet application, managing server-side state is 
-entirely the application's responsibility.  The Servlet API provides just the &HttpSession;, which
-acts like a &Map;, relating keys to arbitrary objects.  It is the application's responsibility
-to obtain values from the session, and to update values into the session when they change.
-</para>
-
-<para>
-Tapestry takes a different tack; it defines server-side state in terms of the Engine,
-the Visit object, and persistent page properties.
-</para>
-
-<section id="state.general">
-	<title>Understanding servlet state</title>
-	
-
-<para>
-Managing server-side state is one of the most complicated and error-prone aspects of web
-application design, and one of the areas where Tapestry provides the most benefit.  Generally
-speaking, Tapestry applications which are functional within a single server will be functional within
-a cluster with no additional effort.  This doesn't mean planning for clustering, and testing of
-clustering, is not necessary; it just means that, when using Tapestry, it is possible to narrow
-the design and testing focus.	
-</para>
-
-<para>
-The point of server-side state is to ensure that information about the user acquired during the session
-is available later in the same session.  The canonical example is an application that requires some form of
-login to access some or all of its content; the identify of the user must be collected at some point (in
-a login page) and be generally available to other pages.
-</para>
-
-<para>
-The other aspect of server-side state concerns failover.  Failover is an aspect of highly-available computing
-where the processing of the application is spread across many servers.  A group of servers used
-in this way is referred to as a <emphasis>cluster</emphasis>.  
-Generally speaking (and this may vary significantly between vendor's implementations)
-requests from a particular client will be routed to the same server within the cluster.
-</para>
-
-<para>
-In the event that the particular server in question fails (crashes unexpectedly, or otherwise brought 
-out of service), future requests from the client will be routed to a different, surviving server
-within the cluster.  This failover event should occur in such a way that the client is unaware that
-anything exceptional has occured with the web application; and this means that any server-side state
-gathered by the original server must be available to the backup server.
-</para>
-
-<para>
-The main mechanism for handling this using the Java Servlet API is the &HttpSession;.  The session can store
-<emphasis>attributes</emphasis>, much like a &Map;.  Attributes are object values referenced with
-a string key.  In the event of a failover, all such attributes are expected to be available on the
-new, backup server, to which the client's requests are routed.
-</para>
-
-<para>
-Different application servers implement &HttpSession; replication and failover in different ways; the servlet API
-specification is delibrately non-specific on how this implementation should take place.  Tapestry
-follows the conventions of the most limited interpretation of the servlet specification; it assumes
-that attribute replication only occurs when the &HttpSession; <function>setAttribute()</function>	
-method is invoked
-<footnote>
-	<para>
-This is the replication strategy employed by BEA's WebLogic server.
-	</para>
-</footnote>.
-</para>
-
-<para>
-Attribute replication was envisioned as a way to replicate simple, immutable objects
-such as &String; or &Integer;.  Attempting to store mutable objects, such as &List;, &Map; or some user-defined
-class, can be problematic.  For example, modifying an attribute value after it has been stored into the 
-&HttpSession; may cause a failover error.  Effectively, the backup server sees a snapshot of the object
-at the time that <function>setAttribute()</function> was invoked; any later change to the object's
-internal state is <emphasis>not</emphasis> replicated to the other servers in
-the cluster!  This
-can result in strange and unpredictable behavior following a failover.
-</para>
-
-<para>
-Tapestry attempts to sort out the issues involving server-side state in such a way that they
-are invisible to the developer.  Most applications will not need to explicitly access the &HttpSession; at
-all, but may still have significant amounts of server-side state.  The following
-sections go into more detail about how Tapestry approaches these issues.	
-</para>
-
-
-</section>  <!-- state.general -->
-
-<section id="state.engine">
-	<title>Engine</title>
-	
-<para>
-The engine, a class which implements the interface &IEngine;, is the central object that is
-responsible for managing server-side state (among its many other
-responsibilities).  The engine is itself stored as an &HttpSession; attribute.
-</para>
-
-<para>
-Because the internal state of the engine can change, the framework will re-store
-the engine into the &HttpSession; at the end of most requests.  This ensures that
-any changes to the
-<link linkend="state.visit">Visit object</link>	are properly replicated.
-</para>
-
-<para>
-The simplest way to replicate server-side state is simply not to have any.  With some
-care, Tapestry applications can
-<link linkend="state.stateless">run stateless</link>, at least until some
-actual server-side state is necessary.
-</para>
-
-</section>  <!-- state.engine -->
-
-<section id="state.visit">
-	<title>Visit object</title>
-	
-<para>
-The Visit object is an application-defined object that may be obtained from the engine (via the
-<varname>visit</varname> property of the &IEngine; or &IPage;).  By convention, the class is usually named <classname>Visit</classname>, but it can be
-any class whatsoever, even &Map;.
-</para>
-
-
-<para>
-The name, "Visit", was selected to emphasize that whatever data is stored in the Visit
-concerns just a single visit to the web application.
-<footnote>
-	<para>
-	Another good name would have been "session", but that name is heavily overloaded throughout Java
-	and J2EE.
-	</para>	
-</footnote>
-</para>
-
-
-<para>
-Tapestry doesn't mandate anything about the Visit object's class. The type of the
-<literal>visit</literal>	property is &Object;. In Java code, accessing the Visit object
-involves a cast from &Object; to an application-specific class.
-The following example demonstrates how a &listener-method;
-may access the visit object.
-</para>
-
-<example>
-	<title>Accessing the Visit object</title>
-<programlisting>
-public void formSubmit(&IRequestCycle; cycle)
-{
-    MyVisit visit = (MyVisit)getPage().getVisit();
-    
-    visit.<emphasis>doSomething()</emphasis>;   
-}
-</programlisting>
-</example>
-
-<para>
-In most cases, listener methods, such as <function>formSubmit()</function>, are implemented directly
-within the page.  In that case, the first line can be abbreviated to:
-<informalexample>
-<programlisting>
-    MyVisit visit = (MyVisit)getVisit();
-</programlisting>
-</informalexample>
-</para>
-
-<para>
-The Visit object is instantiated lazily, the first time it is needed.  Method
-<function>createVisit()</function> of &AbstractEngine; is responsible for this.
-</para>
-
-<para>
-In most cases, the Visit object is an ordinary JavaBean, and therefore, has a no-arguments
-constructor.  In this case, the complete class name of the
-Visit is specified as 
-&configuration-property;
-<literal>org.apache.tapestry.visit-class</literal>.
-</para>
-
-<para>
-Typically, the Visit class is defined in the application specification, or
-as a <sgmltag class="starttag">init-parameter</sgmltag> in the web deployment descriptor (web.xml).
-</para>
-
-<example>
-	<title>Defining the Visit class</title>
-<programlisting>
-<![CDATA[
-<application name="My Application">
-  <property name="org.apache.tapestry.visit-class" value="mypackage.MyVisit"/>
-
-  ...
-]]>
-</programlisting>
-</example>
-
-<para>
-In cases where the Visit object does not have a no-arguments contructor, or
-has other special initialization requirements, the method
-<function>createVisit()</function> of &AbstractEngine; can be overridden.
-</para>
-
-<para>
-There is a crucial difference between accessing the visit via the 
-<varname>visit</varname> property of &IPage; and the
-<varname>visit</varname> property of &IEngine;.  In the former case, accessing the visit
-via the page, the visit <emphasis>will</emphasis> be created if it does not already exist.
-</para>
-
-<para>
-Accessing the <varname>visit</varname> property of the &IEngine; is different, the visit will <emphasis>not</emphasis>
-be created if it does not already exist.
-</para>
-
-<para>
-Carefully crafted applications will take heed of this difference and try to avoid
-creating the visit unnecessarilly.  It is not just the creation of this one object that is
-to be avoided ... creating the visit will likely force the entire application
-to go stateful (create an &HttpSession;), and applications are more efficient
-while <link linkend="state.stateless">stateless</link>.
-</para>
-
-</section> <!-- state.visit -->
-
-<section id="state.global">
-	<title>Global object</title>
-	
-<para>
-The  Global object is very similar to the  Visit object with some key differences.
-The Global object is shared by all instances of the application engine; ultimately, it is stored
-as a &ServletContext; attribute.  The Global object is therefore not persistent in any way.
-The Global object is specific to an individual server within a cluster; each server will have its own instance
-of the Global object.
-  In a failover, 
-the engine will connect to a new instance of the Global object within the new server.
-</para>
-
-<para>
-The Global object may be accessed using the <varname>global</varname> property of either the
-page or the engine (unlike the <varname>visit</varname> property, they are completely equivalent).
-</para>
-
-<para>
-Care should be taken that the Global object is threadsafe; since many engines (from many sessions,
-in many threads) will access it simultanenously.  The default Global object is a synchronized
-&HashMap;.  This can be overriden with
-&configuration-property;
-<literal>org.apache.tapestry.global-class</literal>.
-</para>
-
-<para>
-The most typical use of the Global object is to interface to J2EE resources such as EJB home and remote
-interfaces or JDBC data sources.  The shared Global object can cache home and remote interfaces that 
-are efficiently shared by all engine instances.	
-</para>
-
-</section>  <!-- state.global -->
-
-<section id="state.page-properties">
-	<title>Persistent page properties</title>
-	
-<para>
-Servlets, and by extension, JavaServer Pages, are inherently stateless.  That is, they will be used
-simultaneously by many threads and clients.  Because of this, they must not store (in instance variables)
-any properties or values that are specified to any single client.
-</para>
-
-<para>
-This creates a frustration for developers, because ordinary programming techniques must be avoided.
-Instead, client-specific state and data must be stored in the &HttpSession; or as &HttpServletRequest; attributes.
-This is an awkward and limiting way to handle both <emphasis>transient</emphasis> state (state that is only needed
-during the actual processing of the request) and
-<emphasis>persistent</emphasis> state (state that should be available during the processing of this
-and subsequent requests).
-</para>
-
-<para>
-Tapestry bypasses most of these issues by <emphasis>not</emphasis> sharing objects between threads and clients.
-Tapestry uses an object pool to store constructed page instances. As a page is needed, it is removed from the page pool.
-If there are no available pages in the pool, a fresh page instance is constructed.
-</para>
-
-<para>
-For the duration of a request, a page and all components within the page are reserved to the single request.
-There is no chance of conflicts because only the single thread processing the request will have access
-to the page.  At the end of the request cycle, the page is reset back to a pristine state and 
-returned to the shared pool,
-ready for reuse by the same client, or by a different client.
-</para>
-
-<para>
-In fact, even in a high-volume Tapestry application, there will rarely be more than a few instances of any
-particular page in the page pool.
-</para>
-
-<para>
-For this scheme to work it is important that at the end of the request cycle, the page must return
-to its pristine state.  The prisitine state is equivalent to a freshly created instance of the page.  In other words, any
-properties of the page that changed during the processing of the request must be returned to their initial values.
-</para>
-
-<para>
-The page is then returned to the page pool, where it will wait to be used in a future request. That request may be for 
-the same end user, or for another user entirely.	
-</para>
-
-<note>
-	<title>Importance of resetting properties</title>	
-	
-	<para>
-	Imagine a page containing a form in which a user enters their address and credit card information. When
-	the form is submitted, properties of the page will be updated with the values supplied by the user.
-	Those values must be cleared out before the page is stored into the page pool ... if not, then the <emphasis>next</emphasis>
-	user who accesses the page will see the previous user's address and credit card information as default
-	values for the form fields!
-	</para>
-</note>
-
-<para>
-Tapestry separates the persistent state of a page from any instance of the page. 
-This is very important, because
-from one request cycle to another, a different instance of the page may be used ... even when clustering is
-not used.  Tapestry has many copies of any page in a pool, and pulls an arbitrary instance out of the pool
-for each request.
-</para>
-
-<para>
-In Tapestry, a page may have many properties
-and may have many components, each with many properties, but only a tiny number of all those
-properties needs to persist between request cycles.
-On a later request, the same or different page instance may be used.  With a little
-assistance from the developer, 
-the Tapestry framework can create the illusion that the same page instance is being used in
-a later request, even though the request may use a different page instance (from the page pool) ... or
-(in a clustering environment) may be handled by a completely different server.
-</para>
-
-<para>
-Each persistent page property is stored individually as an &HttpSession; attribute.  A call
-to the static method <function>Tapestry.fireObservedChange()</function> must be added
-to the setter method for the property (as we'll see shortly, Tapestry can
-write this method for you, which is the best approach). When the property is changed, its value is stored
-as a session attribute.
-Like the Servlet API, persistent properties work best with immutable objects
-such as &String; and Integer;.  For mutable objects (including &List; and &Map;), you must
-be careful <emphasis>not</emphasis> to change the internal state of a persistent property value after invoking the
-setter method.
-</para>
-
-
-<para>
-Persistent properties make use of a &spec.property-specification; element in the
-page or component specification.  Tapestry does something special when a component
-contains any such elements; it dynamically fabricates a subclass that provides the desired fields,
-methods and whatever extra initialization or cleanup is required.
-</para>
-
-<para>
-You may also, optionally, make your class abstract, and define abstract accessor methods that will
-be filled in by Tapestry in the fabricated subclass.  This allows you to read and update properties inside
-your class, inside listener methods.
-</para>
-
-<tip>
-	<title>Define only what you need</title>	
-	<para>
-	You only need to define abstract accessor methods if you are going to invoke those accesor methods
-	in your code, such as in a &listener-method;. Tapestry will create an enhanced subclass that contains
-	the new field, a getter method and a setter method, plus any necessary initialization methods.
-	If you are only going to access the property using OGNL expressions, then there's no need to define either
-	accessor 
-	method.
-	</para>
-</tip>
-
-<note>
-	  <title>Transient or persistent?</title>
-<para>
-Properties defined this way may be either transient or persistent.  It is useful to define
-even transient
-properties using the &spec.property-specification; element because doing so ensures that
-the property will be properly reset at the end of the request (before the page
-is returned to the pool for later reuse).
-</para>
-</note>
-	
-<example>
-<title>Persistent page property: Java class</title>
-<programlisting>
-package mypackage;
-
-import org.apache.tapestry.html.BasePage;
-	
-public abstract class MyPage extends &BasePage;
-{
-    abstract public int getItemsPerPage();
-	
-    abstract public void setItemsPerPage(int itemsPerPage);
-}
-</programlisting>
-</example>	
-
-<example>
-<title>Persistent page property: page specification</title>
-<programlisting>
-<![CDATA[
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<page-specification class="mypackage.MyPage">
-
-  <property-specification
-    name="itemsPerPage"
-    persistent="yes"
-    type="int" initial-value="10"/>
-
-</page-specification>
-]]>
-</programlisting>
-</example>	
-
-<para>
-Again, making the class abstract, and defining abstract accessors is <emphasis>optional</emphasis>.
-It is only useful when a method within the class will need to read or update the property.  It
-is also valid to just implement one of the two accessors.  The enhanced subclass will
-always include both a getter and a setter.
-</para>
-
-<para>
-This exact same technique can be used with components as well as pages.
-</para>
-
-<para>
-A last note about initialization.  After Tapestry invokes the <function>finishLoad()</function>
-method, it processes the initial value provided in the specification.  If 
-the <literal>initial-value</literal> attribute is ommitted or blank, no change takes place.
-Tapestry then takes a snapshot of the property value, which it retains 
-and uses at the end of each request cycle
-to reset the property back to its "pristine" state.
-</para>
-
-<warning>
-<para>
-The previous paragraph may not be accurate; I believe Mindbridge may have changed this behavior
-recently.	
-</para>	
-</warning>
-
-<para>
-This means that you may perform initialization for the property inside
-<function>finishLoad()</function> (instead of providing an <literal>initial-value</literal>).  However,
-don't attempt to update the property from <function>initialize()</function> ... the order of operations
-when the page detaches is not defined and is subject to change.
-</para>
-
-
-
-	
-</section> <!-- state.page-properties -->
-
-<section id="state.manual-page-properties ">
-	<title>Implementing persistent page properties manually</title>
-	
-<warning>
-<para>
-There is very little reason to implement persistent page properties manually.  Using
-the &spec.property-specification; element is much easier.
-</para>
-</warning>	
-	
-<para>
-The preferred way to
-implement persistent page properties without using
-the &spec.property-specification; element is to implement the method <function>initialize()</function> on your page.  This method is invoked
-once when the page is first created; it is invoked again at the end of each request cycle.  An empty implementation
-of this method is provided by &AbstractPage;.
-</para>
-
-
-<para>
-The first example demonstrates how to properly implement a transient property.  It is simply
-a normal JavaBean property implementation, with a little extra to reset the property
-back to its pristine value (<literal>null</literal>) at the end of the request.
-</para>
-
-<example>
-	<title>Use of <function>initialize()</function> method</title>
-<programlisting>
-package mypackage;
-
-import org.apache.tapestry.html.BasePage;
-	
-public class MyPage extends &BasePage;
-{
-    private String _message;
-    
-    public String getMessage()
-    {
-        return _message;
-    }
-    
-    public void setMessage(String message)
-    {
-        _message = message;
-    }
-    
-    protected void initialize()
-    {
-        _message = null;
-    }
-}
-</programlisting>
-</example>
-
-
-<para>
-If your page has additional attributes, they should also be reset inside
-the <function>initialize()</function> method.
-</para>
-
-<para>
-Now that we've shown how to manually implement  <emphasis>transient</emphasis> state, we'll
-show how to handle <emphasis>persistent</emphasis> state.
-</para>	
-
-
-<para>
-For a property to be persistent, all that's necessary is that the accessor method notify
-the framework of changes.  Tapestry will record the changes (using an &IPageRecorder;)
-and, in later request cycles, will restore the property
-using using the recorded value and whichever page instance is taken out of the page pool.
-</para>
-
-<para>
-This notification takes the form of an invocation of the static  method
-<function>fireObservedChange()</function> in the &Tapestry; class.  
-This method is overloaded for all the scalar types, and for &Object;.
-</para>
-
-<example>
-<title>Manual persistent page property</title>
-<programlisting>
-package mypackage;
-
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.html.BasePage;
-
-public class MyPage extends &BasePage;
-{
-    private int _itemsPerPage;
-    
-    public int getItemsPerPage()
-    {
-        return _itemsPerPage;
-    }
-    
-    public void setItemsPerPage(int itemsPerPage)
-    {
-        _itemsPerPage = itemsPerPage;
-        
-        Tapestry.fireObservedChange(this, "itemsPerPage", itemsPerPage);
-    }
-    
-    protected void initialize()
-    {
-        _itemsPerPage = 10;
-    }
-}
-</programlisting>
-</example>
-
-<para>
-This sets up a property, <varname>itemsPerPage</varname>, with a default value of 10.  If
-the value is changed (perhaps by a form or a &listener-method;),
-the changed value will "stick" with the user who changed it, for the duration of their
-session.
-</para>
-	
-</section> <!-- state.manual-page-properties -->
-
-<section id="state.manual-component-properties">
-	<title>Manual persistent component properties</title>
-	
-<warning>
-<para>
-There is very little reason to implement persistent component properties manually.  Using
-the &spec.property-specification; element is much easier.
-</para>
-</warning>	
-
-<para>
-Tapestry uses the same mechanism for persistent component properties as it does for
-persisting page properties (remember that pages are, in fact, specialized components).	
-Implementing transient and persistent properties inside components involves more work than with
-pages as the initialization of
-the component is more complicated.
-</para>
-
-<para>
-Components do not have the equivalent of the <function>initialize()</function> method.  Instead,
-they must register for an event notification to tell them when the page is being <emphasis>detached</emphasis>
-from the engine (prior to be stored back into the page pool).  This event is generated by the page itself.
-</para>
-
-<para>
-The Java interface &PageDetachListener; is the event listener interface for this purpose.  
-By simply implementing this interface, Tapestry will register the component as a listener and ensure that
-it receives event notifications at the right time (this works for the other
-page event interfaces, such as &PageRenderListener; as well; simply
-implement the interface and leave the rest to the framework).
-</para>
-
-<para>
-Tapestry provides a method, <function>finishLoad()</function>, for just this purpose: late initialization.
-</para>
-
-<example>
-	<title>Manual Persistent Component Properties</title>
-<programlisting>
-package mypackage;
-
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.BaseComponent;
-import org.apache.tapestry.event.PageDetachListener;
-import org.apache.tapestry.event.PageEvent;
-	
-public class MyComponent extends &BaseComponent; implements &PageDetachListener;
-{
-    private String _myProperty;
-    
-    public void setMyProperty(String myProperty)
-    {
-        _myProperty = myProperty;
-        
-        Tapestry.fireObservedChange(this, "myProperty", myProperty);
-    }
-    
-    public String getMyProperty()
-    {
-        return _myProperty;
-    }
-    
-    protected void initialize()
-    {
-        _myProperty = "<emphasis>a default value</emphasis>";
-    }
-    
-    protected void finishLoad()
-    {
-        initialize();
-    }
-    
-    /**
-     * The method specified by &PageDetachListener;.
-     *
-     */
-    
-    public void pageDetached(PageEvent event)
-    {
-        initialize();
-    }
-}
-</programlisting>
-</example>
-
-<para>
-Again, there is no particular need to do all this; using the
-&spec.property-specification; element is far, far simpler.	
-</para>
-	
-</section> <!-- state.manual-component-properties -->
-
-<section id="state.stateless">
-	<title>Stateless applications</title>
-	
-<para>
-In a Tapestry application, the framework acts as a buffer between the application code and
-the Servlet API ... in particular, it manages how data is stored into the &HttpSession;.
-In fact, the framework controls <emphasis>when</emphasis> the session is first created.
-</para>
-
-<para>
-This is important and powerful, because an application that runs, even just initially, without
-a session consumes far less resources that a stateful application.  This is even more important
-in a clustered environment with multiple servers; any data stored into the &HttpSession; will
-have to be replicated to other servers in the cluster, which can be expensive in terms of resources (CPU time,
-network bandwidth, and so forth).  Using
-less resources means better throughput and more concurrent clients, always a good thing
-in a web application.
-</para>
-
-<para>
-Tapestry defers creation of the &HttpSession; until one of two things happens:  When
-the Visit object is created, or when the first persistent page property is recorded.  At this point,
-Tapestry will create the &HttpSession; and store the engine into it.
-</para>
-
-<para>
-Earlier, we said that the &IEngine; instance is stored in the &HttpSession;, but this is not always the case.
-Tapestry maintains an object pool of &IEngine; instances that are used for stateless requests.  An instance
-is checked out of the pool and used to process a single request, then checked back into the pool for
-reuse in a later request, by the same or different client.
-</para>
-
-
-<para>
-For the most part, your application will be unaware of when it is stateful or stateless; statefulness
-just happens on its own.  Ideally, at least the first, or "Home" page, should be stateless (it should be
-organized in such a way that the visit is not created, and no persistent state is stored).  This will help
-speed the initial display of the application, since no processing time will be used in creating the session.
-</para>	
-	
-</section> <!-- state.stateless -->
-
-</chapter>
\ No newline at end of file
diff --git a/3.0.4/doc/src/UsersGuide/template.xml b/3.0.4/doc/src/UsersGuide/template.xml
deleted file mode 100644
index 114c582..0000000
--- a/3.0.4/doc/src/UsersGuide/template.xml
+++ /dev/null
@@ -1,767 +0,0 @@
-<!-- $Id$ -->
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<chapter id="template">
-	<title>Page and component templates</title>
-
-<para>
-Unlike many other web frameworks, such as 
-&Struts; or &WebWork;,
-Tapestry does not "plug into" an external templating system such as JavaServer Pages or
-&Velocity;.  Instead, Tapestry integrates its own templating system.
-	
-</para>
-
-<para>
-Tapestry templates are designed to look like valid HTML files (component HTML templates
-will just be snippets of HTML rather than complete pages). 
-Tapestry "hides" its extensions into special attributes of ordinary HTML elements.	
-	
-</para>
-
-<para>
-Don't be fooled by the terminology; we say "HTML templates" because that is the prevalent use of Tapestry ... but
-Tapestry is equally adept at WML or XML.
-</para>
-
-<section id="template.locations">
-	<title>Template locations</title>
-	
-	
-<para>
-The general rule of thumb is that a page's HTML template is simply an HTML file, stored in the context root directory. 
-That is, you'll have a <filename><replaceable>MyPage</replaceable>.html</filename> HTML template,
-a <filename>WEB-INF/<replaceable>MyPage</replaceable>.page</filename> page specification,
-and a <classname>MyPage</classname> class, in some Java package.
-</para>
-
-<para>
-Tapestry always starts knowing the name of the page and the location of the page's specification when it
-searches for the page's HTML template.  Starting with this, it performs the following search:
-</para>
-
-<itemizedlist>
-	<listitem>
-		<para>
-			In the same location as the specification
-		</para>
-		</listitem>
-	<listitem>
-		<para>
-		In the web application's context root directory (if the page is an application page, not a page from a component
-		library)	
-		</para>	
-	</listitem>
-</itemizedlist>
-
-<para>
-In addition, any HTML template in the web application context is considered a page, even if there is no matching
-page specification. For simple pages that don't need to have any page-specific logic or properties, there's no need
-for a page specification.  Such a page may still use the special Tapestry attributes 
-(described in the following sections).	
-</para>
-
-<para>
-Finally, with some <link linkend="configuration.search-path">minor configuration</link>	
-it is possible to change the extension used for templates. For example, if you are developing a WML
-application, you may wish to name your files with the extension <filename>.wml</filename>.
-</para>
-
-</section> <!-- template.locations -->
-
-<section id="template.contents">
-	<title>Template Contents</title>	
-	
-<para>
-Tapestry templates contain a mix of the following elements:
-</para>
-
-<itemizedlist>
-<listitem>
-	<para>Static HTML markup</para>	
-</listitem>	
-<listitem>	
-	<para>Tapestry components</para>
-</listitem>	
-<listitem>
-	<para>Localized messages</para>
-</listitem>		
-<listitem>
-	<para>Special template directives</para>
-</listitem>	
-</itemizedlist>
-
-<para>
-Usually, about 90% of a template is ordinary HTML markup.  Hidden inside that markup are particular tags that
-are placeholders for Tapestry components; these tags are recognized by the presence of the &jwcid; attribute.  "JWC"
-is short for "Java Web Component", and was chosen as the "magic" attribute so as not to conflict with any real HTML attribute.	
-</para>
-
-
-<para>
-Tapestry's parser is quite flexible, accepting all kinds of invalid HTML markup. That is, attributes don't <emphasis>have</emphasis> to be
-quoted. Start and end tags don't have to balance.  Case is ignored when matching start and end tags.  Basically,
-the kind of ugly HTML you'll find "in the field" is accepted.
-</para>
-
-<para>
-The goal is to allow you to preview your HTML templates using a WYSIWYG HTML editor (or even an ordinary web browser).
-The editor will ignore the undefined HTML attributes (such as &jwcid;).	
-</para>
-
-<para>
-A larger goal is to support real project teams: The special markup for Tapestry is unobtrusive, even invisible.
-This allows an HTML designer to work on a template without breaking the dynamic portions of it.	This is completely unlike
-JSPs, where the changes to support dynamic output are extremelyobtrusive and result in a file that is meaningless to an HTML
-editor.
-</para>
-
-</section> <!-- template.contents -->
-
-<section id="template.components">
-	<title>Components in templates</title>
-	
-<para>
-Components can be placed anywhere inside a template, simply  by adding the &jwcid; attribute to 
-any existing tag.  For example:
-
-<example>
-	<title>Example HTML template containing components</title>
-<programlisting><![CDATA[
-<html>
-  <head>
-    <title>Example HTML Template</title>
-  </head>
-  <body>]]>
-    &lt;span jwcid="border"&gt;  <co id="template.components.border"/>
-    
-      Hello,
-      &lt;span jwcid="@&Insert;" value="ognl:user.name">Joe User&lt;/span&gt; <co id="template.components.insert"/>
-<![CDATA[    
-    </span>
-  </body>
-</html>]]>	
-</programlisting>
-</example>
-
-<calloutlist>
-<callout arearefs="template.components.border">
-<para>
-This is a reference to a <emphasis>declared component</emphasis>; the type and parameters
-of the component are in the page's specification.
-</para>	
-</callout>	
-<callout arearefs="template.components.insert">
-This is a <emphasis>implicit component</emphasis>; the type of the component is &Insert;. The
-value parameter is bound to the &OGNL; expression <literal>user.name</literal>.
-</callout>
-</calloutlist>
-</para>	
-	
-<para>
-The point of all this is that the HTML template should preview properly in a WYSIWYG HTML editor. Unlike
-&Velocity; or JSPs, there are no strange directives to get in the way of a preview (or necessitate
-a special editting tool), Tapestry hides what's needed inside existing tags; at worst, it adds
-a few non-standard attributes (such as &jwcid;) to tags. This rarely causes a problem with most HTML editors.
-</para>
-
-<para>
-Templates may contain components using two different styles.  <emphasis>Declared components</emphasis>	 are
-little more than a placeholder; the type of the component is defined elsewhere, in the page (or component) 
-specification.
-</para>
-
-<para>
-Alternately, an <emphasis>implicit component</emphasis> can be defined in place, by preceding
-the component type with an "@" symbol.  Tapestry includes over forty components with the framework, additional components
-may be created as part of your application, or may be provided inside a component library.
-</para>	
-
-<para>
-In the above example, a &span;	 was used for both components. Tapestry
-doesn't care what tag is used for a component, as long as the start and end tags for components balance (it doesn't
-even care if the case of the start tag matches the case of the end tag). The example could just
-as easily use <sgmltag class="starttag">div</sgmltag> or <sgmltag class="starttag">fred</sgmltag>, the
-rendered page sent back to the client web browser will be the same.
-</para>
-
-<section id="templates.components.body">
-		<title>Component bodies</title>
-		
-<para>
-In Tapestry, each component is responsible for rendering itself and its <emphasis>body</emphasis>. 
-A component's body is the portion of its page's template
-<footnote>
-<para>
-More correct would be to say "its container's template" as a component may be contained within
-another component. For simplicities sake, we'll describe this as if it was always a simple two-level
-heirarchy even though practical Tapestry applications can be many levels deep.
-</para>	
-</footnote>
-  that its tags encloses. The Tapestry HTML template parser is responsible for dividing up the  template
-  into chunks: blocks of static HTML, component start tags (recognized by the &jwcid; attribute) and matching
-  component end tags. It is quite forgiving about case, quotes (which may be single quotes, double quotes, or even
-  omitted), and missing close tags (except for components, which must be balanced).
-</para>		
-
-<figure>
-  <title>Component templates and bodies</title>
-  <mediaobject>
-    <imageobject>
-      <imagedata fileref="images/component-body.png" format="PNG"/>
-    </imageobject>
-    <caption>
-      <para>
-The template is broken into small chunks that are each slotted into a particular
-component's body.
-     </para>
-   </caption>
- </mediaobject>
-</figure>
-
-	
-<para>
-In most cases, a component will make use of its body; it simply controls if, when and how often its body
-is rendered (when rendering the HTML response sent to the client). Other components, such as &Insert;,
-have no use for their bodies, which they discard.  Each component declares in its own specification (the
-<literal>allow-body</literal>	 attribute of the &spec.component-specification;) whether is allows or
-discards its body.
-</para>
-
-<para>
-In the previous example, the &Insert; component had a body, the text "Joe User". This supports WYSIWYG preview; the text
-will be displayed when previewing. Since the &Insert; component discards its body,
-this text will not be used at runtime, instead the OGNL expression <literal>user.name</literal>	 will be evaluated
-and the result inserted into the response.
-</para>
-
-<warning>
-	<title>No components in discarded blocks</title>	
-	<para>
-	If you put a component inside the body of an &Insert; (or any other component that discards
-	its body), then Tapestry will throw an exception. You aren't allowed to create a component
-	simply to discard it.	
-	</para>
-</warning>
-
-</section> <!-- templates.components.body -->
-
-<section id="templates.components.ids">
-	<title>Component ids</title>
-	
-<para>
-Every component in Tapestry has its own id.  In the above example, the first component has the id "border".  The second component
-is anonymous; the framework provides a unique id for the component since one was not supplied in the HTML template. The 
-framework provided id is built from the component's type; this component would have an id of
-<literal>$Insert</literal>; other &Insert; components
-would have ids <literal>$Insert$0</literal>, <literal>$Insert$1</literal>, etc.
-</para>
-
-<para>
-A component's id must only be unique within its immediate container.  Pages are top-level containers, but
-components can also contain other components. 
-</para>
-
-
-<para>
-Implicit components can also have a specific id, by placing the id in front of the "@" symbol:
-
-<informalexample>
-<programlisting>
-  &lt;span jwcid="insert@&Insert;" value="ognl:user.name"&gt;Joe User&lt;/span&gt;
-</programlisting>	
-</informalexample>	
-</para>
-
-<para>
-The component is still implicit; nothing about the component would go in the specification, but the id
-of the component would be "insert".	
-</para>
-
-<para>
-Providing explicit ids for your components is rarely required, but often beneficial. It is especially
-useful for form control components, 	
-</para>
-
-<para>
-Each component may only appear <emphasis>once</emphasis>	 in the template. You simply can't 
-use the same component
-repatedly ... but you can duplicate a component fairly easily; make the component a declared component,
-then use the <literal>copy-of</literal> attribute of the &spec.component; element to create clones of
-the component with new ids.
-</para>
-
-
-</section> <!-- templates.components.ids -->
-
-<section id="templates.components.parameters">
-		<title>Specifying parameters</title>
-		
-<para>
-Component parameters may always be specified in the page or component 
-specification, using the
-&spec.binding;, &spec.static-binding; and &spec.message-binding; elements. Prior to Tapestry 3.0, that
-was the only way ... but with 3.0, it is possible to specify parameters directly within the
-HTML template.
-</para>	
-	
-<para>
-Using either style of component (declared or implicit), parameters of the component may be <emphasis>bound</emphasis>
-by adding attributes to the tag.
-Most attributes bind parameters to a static (unchanging) value, equivalent to using
-the &spec.static-binding; element in the specification. Static bindings are just the
-literal text, the attribute value from the HTML template.
-</para>
-
-<para>
-Prefixing an attribute value with <literal>ognl:</literal>	 indicates that the value
-is really an &OGNL; expression, equivalent to using the &spec.binding; element in the specification.
-</para>
-
-<para>
-Finally, prefixing an attribute value with <literal>message:</literal> indicates that the value
-is really a key used to get a localized message, equivalent to the &spec.message-binding; element
-in the specification. Every page, and every component, is allowed to have its own set of messages (stored
-in a set of <literal>.properties</literal> files), and the <literal>message:</literal> prefix allows access
-to the localized messages stored in the files.
-</para>
-
-<tip>
-<title>Seperation of Concerns</title>	
-
-<para>
-Before Tapestry 3.0, there was a more clear separation of concerns. The template could only have declared
-components (not implicit), and any informal attributes in the template were always static values. The type
-of the component and all its formal parameters were always expressed in the specification. The template was very much
-focused on presentation, and the specification was very much focused on business logic. There were
-always minor exceptions to the rules, but in general, seperation of concerns was very good.
-</para>
-
-<para>
-With Tapestry 3.0, you can do more in the HTML template, and the specification file is much less
-important ... but the seperation of concerns is much more blurred together. It is very much acceptible to
-mix and match these approaches, even within a single page. In general, when learning Tapestry, or when prototyping, it
-is completely appopriate to do as much as possible in the HTML template. For large and complex
-applications, there are benefits to moving as much of the dynamic logic as possible out
-of the template and into the specification.
-</para>
-
-</tip>
-
-</section> <!-- templates.components.parameters -->
-
-<section id="template.components.formal">
-		<title>Formal and informal parameters</title>
-		
-<para>
-Components may accept two types of parameters: <emphasis>formal</emphasis>
-and <emphasis>informal</emphasis>.  Formal parameters are those defined in the
-component's specification, using the &spec.parameter; element.
-Informal parameters are <emphasis>additional</emphasis> parameters, beyond those
-known when the component was created.
-</para>
-
-<para>
-The majority of components that accept informal parameters simply emit the informal
-parameters as additional attributes.  Why is that useful?  Because it allows you to
-specify common HTML attributes such as <literal>class</literal>	or <literal>id</literal>,
-or JavaScript event handlers, without requiring that each component define each possible 
-HTML attribute (the list of which expands all the time).
-</para>
-
-<sidebar>
-<para>
-If you are used to developing with JSPs and JSP tags, this will be quite a difference. JSP tags have
-the equivalent of	formal parameters (they are called "tag attributes"), but nothing like informal parameters. Often a relatively
-simply JSP tag must be bloated  with dozens of extra attributes, to support arbitrary
-HTML attributes.
-</para>	
-</sidebar>
-
-<para>
-Informal and formal parameters can be specified in either the specification or in the template.
-Informal parameters <emphasis>are not</emphasis>	 limited to literal strings, you may use
-the <literal>ognl:</literal> and <literal>message:</literal> prefixes with them as well.
-</para>
-	
-
-<para>
-Not all components allow informal parameters; this is controlled by the
-<literal>allow-informal-parameters</literal>	 attribute of the
-&spec.component-specification; element. Many components do not map directly to an HTML element,
-those are the ones that do not allow informal parameters. If a component forbids informal parameters,
-then any informal parameters in the specification or the template will result in errors, with one exception:
-static strings in the HTML template are simply ignored when informal parameters are forbidden; they
-are presumed to be there only to support WYSIWYG preview.
-</para>
-
-<para>
-Another conflict can occur when the HTML template specified an attribute that the component needs
-to render itself. For example, the &DirectLink; component generates a <literal>&lt;a&gt;</literal> tag,
-and needs to control the <literal>href</literal> attribute. However, for preview purposes, it often will 
-be written into the HTML template as:
-
-<informalexample>
-<programlisting>
-&lt;a jwcid="@DirectLink" listener=". . ." href="#"&gt; . . . &lt;/a&gt;
-</programlisting>	
-</informalexample>
-
-</para>
-
-<para>
-This creates a conflict: will the template <literal>href</literal>	 be used,
-or the dynamically generated value produced by the &DirectLink; component, or both? The answer is: 
-the component wins. The <literal>href</literal> attribute in the template is ignored.
-</para>
-
-<para>
-Each component declares a list of reserved names using the &spec.reserved-parameter; element; these
-are  names which are not allowed as informal parameters, because the component generates 
-the named attribute itself, and doesn't want the value it writes to be overriden by an informal
-parameter.   Case is ignored when comparing attribute names to reserved names.
-</para>
-
-</section> <!-- template.components.formal -->
-
-
-
-</section>  <!-- template.components -->
-
-<section id="template.directives">
-	<title>Template directives</title>
-
-<para>
-For the most part, a Tapestry page or component template consists of 
-just static HTML intermixed with tags representing components (containing the &jwcid; attribute).
-The overarching goal is to make the Tapestry extensions completely invisible.
-</para>	
-
-<para>
-Tapestry supports a limited number of additional directives that are not about component placement, but 
-instead address other concerns about integrating the 
-efforts of HTML developers with the Java developers responsible
-for the running application.
-</para>
-
-<section id="template.directives.l10n">
-	 <title>Localization</title>
-	 
-<para>
-Tapestry includes a number of <link linkend="configuration.character-sets">localization features</link>. An important part of which
-is to allow each page or component to have its own catalog of localized messages (modeled after the Java 
-&ResourceBundle; class).
-</para>	 
-
-<para>
-The page (or component) message catalog 	is a collection of <filename>.properties</filename> files
-that are stored with the page or component specification. They follow the same naming conventions 
-as for &ResourceBundle;s, so component <classname>MyComponent</classname> (whose specification file
-is <filename>MyComponent.jwc</filename>) might have a default
-message file of <filename>MyComponent.properties</filename>, and a French translation as
-<filename>MyComponent_fr.properties</filename>.
-</para>
-
-<note>
-	<title>No global message catalog</title>	
-	<para>
-	On oft-requested feature for Tapestry is to have a global message catalog, and a way to
-	access that catalog from the individual pages and components. This would allow common messages
-	to be written (and translated) just once. This is a feature that may be added to Tapestry 3.1.	
-	</para>
-</note>
-
-<para>
-As we've seen, it is possible to access the messages for a page or component using the
-<literal>message:</literal>	 prefix on a component parameter (or use
-the &spec.message-binding; element in a page or component specification).
-</para>
-
-<para>
-What about the static text in the template itself?  How does that get translated?  One possibility
-would be to make use of the Insert component for each piece of text to be displayed, for example:
-<informalexample>
-<programlisting>
-&lt;span jwcid="@&Insert;" value="message:hello"&gt;Hello&lt;/span&gt;	
-</programlisting>
-</informalexample>
-</para>
-
-<para>
-This snippet will get the <literal>hello</literal> message from the page's  message catalog  
-and insert it into the response.  The text inside the &span;
-tag is useful for WYSIWYG preview, but will be discarded at runtime in favor of a message string
-from the catalog, such as "Hello", "Hola" or "Bonjour" (depending on the selected locale).
-</para>
-
-<para>
-Because, in an internationalized application, this  scenario
-will occur with great frequency, Tapestry includes
-a special directive to perform the equivalent function:
-<informalexample>
-<programlisting>
-&lt;span key="hello"&gt;Hello&lt;/span&gt;		
-</programlisting>
-</informalexample>	
-</para>
-
-<para>
-This is not an &Insert; component, but behaves in a similar way. The tag used must be
-&span;. You do not use the <literal>message:</literal> prefix
-on the message key (<literal>hello</literal>). You can't use OGNL expressions.
-</para>
-
-<para>
-Normally, the &span; does not render, just the message.
-However, if you specify any additional attributes in the &span; tag (such as, commonly,
-<literal>id</literal> or <literal>class</literal> to specify a CSS style),
-then the &span; will render around the message>  For example, the template:
-<informalexample>
-<programlisting>
-&lt;span class="error" key="invalid-access"&gt;Invalid Access&lt;/span&gt;
-</programlisting>
-</informalexample>
-
-might render as:
-
-<informalexample>
-<programlisting>
-&lt;span class="error"&gt;You do not have the necessary access.&lt;/span&gt;	
-</programlisting>	
-</informalexample>
-
-In this example, the placeholder text "Invalid Access" was replaced with a much
-longer message acquired from the message catalog.
-
-</para>
-
-<para>
-In rare cases, your message may have pre-formatted HTML inside it.  Normally, output is
-filtered, so that any reserved
-HTML characters in a message string are expanded to HTML entities.  For example,
-a <literal>&lt;</literal>	 will be expanded to <literal>&amp;lt;</literal>. If this is not desired,
-add  <literal>raw="true"</literal> to the &span;. This defeats the filtering, and text in the message
-is passed through as-is.
-</para>
-
-	
-</section> <!-- template.directives.l10n -->
-	
-<section id="template.directives.remove">
-	<title><literal>$remove$ jwcid</literal>
-	 </title>
-
-<para>
-HTML templates in Tapestry serve two purposes. On the one hand, they are used to dynamically render
-pages that end up in client web browsers. On the other hand, they allow HTML developers to use WYSIWYG editors
-to modify the pages without running the full application.	
-</para>
-
-<para>
-We've already seen two ways in which Tapestry accomidates WYSIWYG preview.  Informal component
-parameters may be quietly dropped
-if they conflict with reserved names defined by the component.	Components that discard their body may enclose
-static text used for WYSIWYG prefix.
-</para>
-
-<para>
-In some cases, we need even more direct control over the content of the template.  Consider, for example,
-the following HTML template:	
-</para>
-
-<example>
-<title>HTML template with repetative blocks (partial)</title>	
-<programlisting><![CDATA[
-<table>
-  <tr>
-    <th>First Name</th>	
-    <th>Last Name</th>
-  </tr>
-  <tr jwcid="loop">
-    <td><span jwcid="insertFirstName">John</span></td>
-    <td><span jwcid="insertLastName">Doe</span></td>
-  </tr>
-  <tr>
-    <td>Frank</td>
-    <td>Smith</td>
-  </tr>
-  <tr>
-    <td>Jane</td>
-    <td>Jones</td>
-  </tr>	
-</table>	
-]]></programlisting>
-</example>
-
-<para>
-This is part of the HTML template that writes out the names of a list of people, perhaps from some kind of database.
-When this page renders, the <literal>loop</literal>	 component (presumably a &Foreach;, such details
-being in the page's specification)
-will render its body zero or more times. So we might see rows for "Frank Miller", "Alan Moore" and so forth
-(depending on the content of the database).
-However, every listing will also include "Frank Smith" and "Jane Jones" ... because the HTML developer left those
-two rows in, to ensure that the layout of the table was correct with more than one row.
-</para>
-
-<para>
-Tapestry allows a special &jwcid;, <literal>$remove$</literal>, for this case. A tag so marked is
-not a component, but is instead eliminated from the 
-template. It is used, as in this case, to mark sections of the template that are just there for WYSIWYG preview.
-</para>
-
-<sidebar>
-Normally, <literal>$remove$</literal>	 would not be a valid component id, because it contains a dollar sign.
-</sidebar>
-
-<para>
-With this in mind, the template can be rewritten:	
-</para>
-
-
-<example>
-<title>Updated HTML template (partial)</title>	
-<programlisting><![CDATA[
-<table>
-  <tr>
-    <th>First Name</th>	
-    <th>Last Name</th>
-  </tr>
-  <tr jwcid="loop">
-    <td><span jwcid="insertFirstName">John</span></td>
-    <td><span jwcid="insertLastName">Doe</span></td>
-  </tr>
-  <tr jwcid="$remove$">
-    <td>Frank</td>
-    <td>Smith</td>
-  </tr>
-  <tr jwcid="$remove$">
-    <td>Jane</td>
-    <td>Jones</td>
-  </tr>	
-</table>	
-]]></programlisting>
-</example>
-
-<para>
-With the <literal>$remove$</literal> blocks in place, the output is as expected, one row for each
-row read from the database,
-and "Frank Smith" and "Jane Jones" nowhere to be seen.
-</para>
-
-<warning>
-	<title>No components in removed blocks</title>	
-	<para>
-	It's not allowed to put components inside a removed block. This is effectively the same rule that prevents
-	components from being put inside discarded component bodies. Tapestry will throw an exception if a template
-	violates this rule.	
-	</para>
-</warning>
-	
-	
-</section> <!-- template.directives.remove -->
-
-<section id="template.directives.content">
-	<title><literal>$content$ jwcid</literal></title>
-	
-<para>
-In Tapestry, components can have their own templates. Because of how components integrate their own templates
-with their bodies (the portion from their container's template), you can do a lot ofn iteresting things. It is very
-common for a Tapestry application to have a Border component: a component that produces the &html;,
-&head;, and &body; tags (along with additional tags
-to reference stylesheets), plus some form of navigational control (typically, a nested table and a collection of links and images).
-</para>	
-
-<para>
-Once again, maintaining the ability to use WYSIWYG preview is a problem.  Consider the following:
-<informalexample>
-<programlisting><![CDATA[
-<html>
-  <head>
-    <title>Home page</title>
-    <link rel="stylesheet" href="style.css" type="text/css">
-   </head>
- <body>
-   
-   <span jwcid="border">
-   
-     <!-- Page specific content: -->
-   
-     <form jwcid=". . .">
-       . . .
-     </form>
-   
-   </span>
-</body>
-]]></programlisting>	
-</informalexample>	
-</para>
-
-<para>
-It is quite common for Tapestry applications to have a <emphasis>Border</emphasis>	
-component, a component that is used by pages to provide the
-&html;, &head;, and
-&body; tags, plus common navigational features (menus,
-copyrights, and so forth). In this example, it is presumed that the <literal>border</literal>
-component is a reference to just such as component.
-</para>
-
-<para>
-When this page renders, the page template will provide the &html;, &head; and &body; tags.
-Then when the <literal>border</literal> component renders, it will <emphasis>again</emphasis>
-render those tags (possibly with different attributes, and mixed in to much other stuff).
-</para>
-
-<para>
-If we put a <literal>$remove$</literal>	on the &html; tag in the page template, the entire page will
-be removed, causing runtime exceptions.
-
-Instead, we want to identify that the portion of the template <emphasis>inside</emphasis>
-the &body; tag (on the page template) is the only part that counts). The <literal>$content$</literal>
-component id is used for this purpose:
-<informalexample>
-<programlisting><![CDATA[
-<html>
-  <head>
-    <title>Home page</title>
-    <link rel="stylesheet" href="style.css" type="text/css">
-   </head>
- <body jwcid="$content$">
-   
-   <span jwcid="border">
-   
-     <!-- Page specific content: -->
-   
-     <form jwcid=". . .">
-       . . .
-     </form>
-   
-   </span>
-</body>
-]]></programlisting>	
-</informalexample>	
-</para>
-
-<para>
-The &body; tag, the text preceding its open tag, the <sgmltag class="endtag">body</sgmltag>	tag, and the text following
-it are all removed.  It's as if the template consisted only of the &span; tag for the <literal>border</literal> component.
-</para>
-
-</section> <!-- template.directives.content -->
-
-	
-</section>  <!-- template.directives -->
-
-</chapter>
diff --git a/3.0.4/doc/src/build.xml b/3.0.4/doc/src/build.xml
deleted file mode 100644
index 888097c..0000000
--- a/3.0.4/doc/src/build.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0"?>
-<!-- Interface between the top-level build file and all the documentation projects.
-	 Simply re-executes its targets in each of its sub-projects. -->
-<project name="Tapestry Documentation" default="install">
-	<target name="clean">
-		<ant dir="DevelopersGuide" target="clean"/>
-		<ant dir="UsersGuide" target="clean"/>
-		<ant dir="ContributorsGuide" target="clean"/>
-	</target>
-	
-	<target name="install">
-		<ant dir="DevelopersGuide" target="install" inheritAll="false">
-		  <property name="ext.dist.dir" location="${ext.dist.dir}"/>
-		</ant>
-		
-		<ant dir="ContributorsGuide" target="install" inheritAll="false">
-		  <property name="ext.dist.dir" location="${ext.dist.dir}"/>
-		</ant>
-		
-		<ant dir="UsersGuide" target="install" inheritAll="false">
-		  <property name="ext.dist.dir" location="${ext.dist.dir}"/>
-		</ant>
-		
-		<ant dir="ComponentReference" target="install" inheritAll="false"/>
-	</target>
-</project>
diff --git a/3.0.4/doc/src/common/.cvsignore b/3.0.4/doc/src/common/.cvsignore
deleted file mode 100644
index 9c117d1..0000000
--- a/3.0.4/doc/src/common/.cvsignore
+++ /dev/null
@@ -1,4 +0,0 @@
-docbkx*
-docbook-xsl-*
-*.xsl
-
diff --git a/3.0.4/doc/src/common/40chg.txt b/3.0.4/doc/src/common/40chg.txt
deleted file mode 100644
index f1c720a..0000000
--- a/3.0.4/doc/src/common/40chg.txt
+++ /dev/null
@@ -1,53 +0,0 @@
-19 June 2000
-
-Changes from DocBook V3.1 to DocBook XML V4.1:
-
-Global:
-
-- Broad changes required for XML compatibility
-- Added a *provisional* set of character entities based on the ISO
-  entity sets. The DocBook TC is not willing to accept the long-term
-  responsibility for defining and maintaining these sets. The TC
-  will ask OASIS to form a new TC for this purpose.
-
-Markup:
-
-- RFE  17: Added a common attribute 'Condition' for generic effectivity
-- RFE  38: The nav.class elements (ToC|LoT|Index|Glossary|Bibliography) are
-           now allowed at the beginning and end of components and sections
-- RFE  58: The 'optmult' and 'reqmult' attribute values have been
-           removed from Group
-- RFE  65: Added several class attribute values to Filename and SystemItem
-           at the request of the Linux community
-- RFE  73: Removed BookBiblio and SeriesInfo
-- RFE  81: Added SidebarInfo to Sidebar
-- RFE  87: Added 'xmlpi' and 'emptytag' as class values of SGMLTag
-- RFE  92: Added 'CO' to Synopsis and LiteralLayout
-- RFE  99: Added SimpleMsgEntry as an alternative to MsgEntry in order
-           to provide a simpler MsgSet construct
-- RFE 103: Added RevDescription as an alternative to RevRemark in
-           RevHistory; this allows longer descriptive text in a revision
-- RFE 104: Added 'Specification' to the list of document classes on Article
-- RFE 108: Allow admonitions in Answers
-- RFE 110: Allow a RevHistory on QandAEntry
-- RFE 115: Allow optional Title on OrderedList and ItemizedList
-- RFE 116: Added LineNumbering attribute to linespecific environments for
-           presentation of line numbers
-- Added a common attribute 'Security' for effectivity
-- Added synopsis markup for modern programming languages (e.g, object
-  oriented languages like Java, C++, and IDL)
-- Renamed DocInfo to PrefaceInfo, ChapterInfo, AppendixInfo, etc.
-- Comment was renamed Remark
-- InterfaceDefinition was removed
-
-Other:
-
-- RFE  88: Added PEs to include/ignore dbnotn.mod and dbcent.mod
-- RFE 102: Fixed some outstanding namecase problems
-- RFE 105: Added PNG notation
-- RFE 106: Removed some odd *.content PEs that interfered with
-           customization layers
-- RFE 109: Added FPI to content of dbgenent.mod (for consistency)
-- RFE 111: Added the Euro symbol
-- Fixed bug in cals-tbl.dtd; a model group was used for the element
-  declaration, but the attlist declaration used "Table" literally.
diff --git a/3.0.4/doc/src/common/41chg.txt b/3.0.4/doc/src/common/41chg.txt
deleted file mode 100644
index 4bb6b91..0000000
--- a/3.0.4/doc/src/common/41chg.txt
+++ /dev/null
@@ -1,18 +0,0 @@
-27 Aug 2000
-
-Changes from DocBook V4.1.1 to DocBook V4.1.2:
-
-- Fixed broken ISO FPIs in docbook.cat introduced by
-  careless search-and-replace.
-
-Changes from DocBook V4.0 to DocBook V4.1.1:
-
-- Removed some 4.0 future use comments that had accidentally
-  been left in the DTD
-- Fixed system identifiers in docbook.cat
-- Added version information to all the ent/*.ent files
-- Fixed a number of numeric character references in the ent/*.ent files
-- Fixed a couple of incorrect FPIs.
-- Renamed dbgenent.ent to dbgenent.mod for parity with SGML version
-
-See 40chg.txt for a list of the significant changes.
diff --git a/3.0.4/doc/src/common/ChangeLog b/3.0.4/doc/src/common/ChangeLog
deleted file mode 100644
index b203c1b..0000000
--- a/3.0.4/doc/src/common/ChangeLog
+++ /dev/null
@@ -1,118 +0,0 @@
-2000-08-27  Norman Walsh  <ndw@nwalsh.com>
-
-	* 41chg.txt, readme.txt: Updated descriptions
-
-	* calstblx.dtd, dbcentx.mod, dbgenent.mod, dbhierx.mod, dbnotnx.mod, dbpoolx.mod, docbook.cat: 
-	Updated version numbers
-
-	* docbook.cat: Fixed stupid search-and-replace error in ISO FPIs
-
-	* docbookx.dtd: DocBook XML V4.1.2 released
-
-2000-08-12  Norman Walsh  <ndw@nwalsh.com>
-
-	* 40chg.txt: Updated; changed version number
-
-	* 41chg.txt: Added note about renaming dbgenent
-
-	* 41chg.txt, readme.txt: Updated; changed version number, release date
-
-	* calstblx.dtd, dbcentx.mod, dbgenent.ent, dbhierx.mod, dbnotnx.mod, dbpoolx.mod, docbook.cat: 
-	Changed version number
-
-	* dbgenent.ent, dbgenent.mod: Renamed .ent to .mod
-
-	* docbookx.dtd: DocBook XML V4.1.1 released
-
-	* docbookx.dtd: Fixed system identifier for dbgenent.ent to dbgenent.mod
-
-2000-07-06  Norman Walsh  <ndw@nwalsh.com>
-
-	* 40chg.txt, 41chg.txt, calstblx.dtd, dbcentx.mod, dbgenent.ent, dbhierx.mod, dbnotnx.mod, dbpoolx.mod, docbook.cat, readme.txt: 
-	Changed version numbers to 4.1.1beta1
-
-	* docbook.cat: Fixed incorrect system identifiers
-
-	* docbookx.dtd: Version 4.1.1beta1 released
-
-2000-06-19  Norman Walsh  <ndw@nwalsh.com>
-
-	* 40chg.txt: Added notes about comment and interfacedefinition
-
-	* 41chg.txt: New file.
-
-	* calstblx.dtd, dbcentx.mod, dbgenent.ent, dbhierx.mod, dbnotnx.mod, dbpoolx.mod, docbook.cat, docbookx.dtd, readme.txt: 
-	Updated version numbers to 4.1
-
-	* dbgenent.ent: Fixed FPI; added 'XML'
-
-	* dbhierx.mod: Removed 4.0 future use comments
-
-	* dbpoolx.mod: Removed 4.0 future use comments; fixed table model selection comment; fixed 'Norman Walsh' FPIs
-
-	* docbook.cat: New file.
-
-2000-05-18  Norman Walsh  <ndw@nwalsh.com>
-
-	* 40chg.txt, calstblx.dtd, dbcentx.mod, dbgenent.ent, dbhierx.mod, dbnotnx.mod, dbpoolx.mod, docbookx.dtd, readme.txt: 
-	Removed references to beta6
-
-	* docbookx.dtd: DocBook XML V4.0 released.
-
-2000-04-10  Norman Walsh  <ndw@nwalsh.com>
-
-	* 40chg.txt, calstblx.dtd, dbcentx.mod, dbgenent.ent, dbhierx.mod, dbnotnx.mod, dbpoolx.mod, docbookx.dtd, readme.txt: 
-	Updated release date and version to 4.0beta6
-
-	* dbpoolx.mod: Added support for EBNF hook; fixed equation content bug
-
-2000-04-03  Norman Walsh  <ndw@nwalsh.com>
-
-	* 40chg.txt: Added note about renaming DocInfo to *Info.
-
-	* 40chg.txt, calstblx.dtd, dbcentx.mod, dbgenent.ent, dbhierx.mod, dbnotnx.mod, dbpoolx.mod, docbookx.dtd, readme.txt: 
-	Updated version numbers
-
-2000-03-30  Norman Walsh  <ndw@nwalsh.com>
-
-	* dbpoolx.mod: Removed beginpage from highlights.mix; it's excluded in the SGML version.
-
-2000-03-24  Norman Walsh  <ndw@nwalsh.com>
-
-	* 40chg.txt, calstblx.dtd, dbcentx.mod, dbgenent.ent, dbhierx.mod, dbnotnx.mod, dbpoolx.mod, docbookx.dtd, readme.txt: 
-	Updated version numbers
-
-	* dbefsyn.mod: Removed
-
-	* dbpoolx.mod: Removed ELEMENT from comments to ease text searching of the DTD.
-	Merged dbefsyn.mod into dbpoolx.mod
-	Added Modifier as an optional element at the end of MethodSynopsis
-	and MethodParam.
-
-2000-03-07  Norman Walsh  <ndw@nwalsh.com>
-
-	* 40chg.txt: New file.
-
-	* 40chg.txt, calstblx.dtd, dbcentx.mod, dbgenent.ent, dbhierx.mod, dbnotnx.mod, dbpoolx.mod, docbookx.dtd, readme.txt, soextblx.dtd: 
-	Updated internal versions to beta3
-
-2000-03-03  Norman Walsh  <ndw@nwalsh.com>
-
-	* dbpoolx.mod: Removed erroneous comment about inline synopses
-
-2000-03-02  Norman Walsh  <ndw@nwalsh.com>
-
-	* calstblx.dtd, dbcentx.mod, dbefsyn.mod, dbgenent.ent, dbhierx.mod, dbnotnx.mod, dbpoolx.mod, docbookx.dtd, readme.txt, soextblx.dtd: 
-	New file.
-
-	* dbefsyn.mod, dbpoolx.mod: Added ooclass, oointerface, and ooexception as wrappers for modifiers
-	and names in classsynopsis. Also allow them inline.
-	
-	Fixed SGML PE parsing problem with hook PEs.
-
-	* dbhierx.mod, dbpoolx.mod: Added hook PEs for future module extension
-
-	* dbpoolx.mod: Removed unused PEs for equation content
-
-	* dbpoolx.mod: Made primary optional (XML has no #CONREF)
-
diff --git a/3.0.4/doc/src/common/Readme.html b/3.0.4/doc/src/common/Readme.html
deleted file mode 100644
index 8877d45..0000000
--- a/3.0.4/doc/src/common/Readme.html
+++ /dev/null
@@ -1,58 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<!-- $Id$ -->
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<html>
-<head>
-	<title>Tapestry / Docbook</title>
-</head>
-
-<body>
-
-<p>
-This directory is reliant on third-party distributions  to 
-process DocBook XML documents into HTML and PDF.  This includes the DocBook DTDs and
-the modular XSL stylesheets.  The Tapestry Contributor's Guide provides the necessary
-information on how to configure your environment to build documentation.
-</p>
-
-<p>
-The following two files must be downloaded and copied into the
-<code><i>$TAPESTRY_ROOT</i>/ext-dist</code> directory before
-documentation may be built.
-</p>
-
-<table border="1">
-<tr>
-<th>Distribution</th>
-<th>File</th>
-<th>Source</th></tr>
-
-<tr>
-<td>DocBook XML DTD</td>
-<td>docbkx412.zip</td>
-<td><a href="http://www.oasis-open.org/docbook/xml/4.1.2/">http://www.oasis-open.org/docbook/xml/4.1.2/</a></td>
-</tr>
-
-<tr>
-<td>DocBook XSL</td>
-<td>docbook-xsl-1.62.4.zip</td>
-<td><a href="http://sourceforge.net/projects/docbook/">DocBook Open Repository</a></td>
-</tr>
-</table>
-
-</body>
-</html>
diff --git a/3.0.4/doc/src/common/Tapestry.css b/3.0.4/doc/src/common/Tapestry.css
deleted file mode 100644
index e0f9bcd..0000000
--- a/3.0.4/doc/src/common/Tapestry.css
+++ /dev/null
@@ -1,26 +0,0 @@
-/*  $Id$ */
-/*
- * Copyright 2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- 
-IMG
-{
-  border: 0;
-}
-
-BODY, TABLE, TD, P
-{
-	font-family: Trebuchet MS, arial, sans-serif;
-}
diff --git a/3.0.4/doc/src/common/Tapestry.fop-xsl.template b/3.0.4/doc/src/common/Tapestry.fop-xsl.template
deleted file mode 100644
index 8095df4..0000000
--- a/3.0.4/doc/src/common/Tapestry.fop-xsl.template
+++ /dev/null
@@ -1,60 +0,0 @@
-<?xml version='1.0'?>
-<!-- $Id$ -->
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!--
-
-  A stylesheet used commonly for Tapestry documentation.
-  
-  -->
-  
-<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
-                version='1.0'
-                xmlns="http://www.w3.org/TR/xhtml1/transitional"
-                exclude-result-prefixes="#default">
-
-<!-- The common buildfiles ensure that the XSL files are unpacked
-     to this relative directory. -->
-     
-<xsl:import href="@docbook.xsl.base@/fo/docbook.xsl"/>
-
-<!-- Enable shading of verbatim blocks, such as programlisting. -->
- 
-<xsl:param name="shade.verbatim" select="1"/>
-  
-<xsl:param name="navig.graphics" select="1"/>
-<xsl:param name="navig.graphics.path">common-images/</xsl:param>
-<xsl:param name="navig.showtitles">1</xsl:param>
-<xsl:param name="navig.graphics.extension" select="'.png'"/>
-
-<xsl:param name="admon.graphics" select="1"/>
-<xsl:param name="admon.graphics.path">common-images/</xsl:param>
-
-<xsl:param name="callout.graphics" select="0"/>
-<xsl:param name="callout.unicode" select="1"/>
-
-<xsl:param name="variablelist.as.blocks" select="1"/>
-<xsl:param name="ulink.show" select="0"/>
-
-<xsl:attribute-set name="verbatim.properties">
-     <xsl:attribute name="space-before.minimum">0.8em</xsl:attribute>
-      <xsl:attribute name="space-before.optimum">1em</xsl:attribute>
-      <xsl:attribute name="space-before.maximum">1.2em</xsl:attribute>
-      <xsl:attribute name="text-align">start</xsl:attribute>
-</xsl:attribute-set>
-
-</xsl:stylesheet>
-
diff --git a/3.0.4/doc/src/common/Tapestry.xsl.template b/3.0.4/doc/src/common/Tapestry.xsl.template
deleted file mode 100644
index bbe200d..0000000
--- a/3.0.4/doc/src/common/Tapestry.xsl.template
+++ /dev/null
@@ -1,62 +0,0 @@
-<?xml version='1.0'?>
-<!-- $Id$ -->
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!--
-
-  A stylesheet used commonly for Tapestry documentation.
-  
-  -->
-  
-<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
-                version='1.0'
-                xmlns="http://www.w3.org/TR/xhtml1/transitional"
-                exclude-result-prefixes="#default">
-
-<!-- The common buildfiles ensure that the XSL files are unpacked
-     to this relative directory. -->
-     
-<xsl:import href="@docbook.xsl.base@/html/@format@.xsl"/>
-
-<xsl:param name="chunk.first.sections" select="1"/>
-  
-<!-- Enable shading of verbatim blocks, such as programlisting. -->
- 
-<xsl:param name="shade.verbatim" select="1"/>
-  
-<xsl:param name="navig.graphics" select="1"/>
-<xsl:param name="navig.graphics.path">common-images/</xsl:param>
-<xsl:param name="navig.showtitles">1</xsl:param>
-<xsl:param name="navig.graphics.extension" select="'.png'"/>
-
-<xsl:param name="admon.graphics" select="1"/>
-<xsl:param name="admon.graphics.path">common-images/</xsl:param>
-
-<xsl:param name="callout.graphics" select="1"/>
-<xsl:param name="callout.graphics.path">standard-images/callouts/</xsl:param>
-
-<!-- The Tapestry documentation is inside a frameset and we want to keep the
-     frameset even when the use clicks a link "outside" the documentation.  -->
-     
-<xsl:param name="ulink.target">_self</xsl:param>
-
-<!-- This stylesheet allows the generated HTML to blend into
-     the Tapestry web page. -->
-     
-<xsl:param name="html.stylesheet">Tapestry.css</xsl:param>
-
-</xsl:stylesheet>
-
diff --git a/3.0.4/doc/src/common/TapestryLinks.xml b/3.0.4/doc/src/common/TapestryLinks.xml
deleted file mode 100644
index 33feeae..0000000
--- a/3.0.4/doc/src/common/TapestryLinks.xml
+++ /dev/null
@@ -1,189 +0,0 @@
-<!-- $Id$ -->
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!--
-  Provides a common place to define entities that are links to API and other external
-  documentation.
--->
-
-<!-- Classes provided by Sun -->
-
-<!ENTITY Collection "<classname>Collection</classname>">
-<!ENTITY Double "<classname>Double</classname>">
-<!ENTITY HashMap "<classname>HashMap</classname>">
-<!ENTITY HttpServletRequest "<classname>HttpServletRequest</classname>">
-<!ENTITY HttpSession "<classname>HttpSession</classname>">
-<!ENTITY Integer "<classname>Integer</classname>">
-<!ENTITY Iterator "<classname>Iterator</classname>">
-<!ENTITY List "<classname>List</classname>">
-<!ENTITY Locale "<classname>Locale</classname>">
-<!ENTITY Map "<classname>Map</classname>">
-<!ENTITY Object "<classname>Object</classname>">
-<!ENTITY ResourceBundle "<classname>ResourceBundle</classname>">
-<!ENTITY ServletContext "<classname>ServletContext</classname>">
-<!ENTITY String "<classname>String</classname>">
-
-<!-- Common Tapestry classes -->
-
-<!ENTITY ApiRoot "../api/org/apache/tapestry">
-
-<!ENTITY AbstractComponent '<ulink url="&ApiRoot;/AbstractComponent.html"><classname>AbstractComponent</classname></ulink>'>
-<!ENTITY AbstractEngine '<ulink url="&ApiRoot;/engine/AbstractEngine.html"><classname>AbstractEngine</classname></ulink>'>
-<!ENTITY AbstractFormComponent '<ulink url="&ApiRoot;/form/AbstractFormComponent.html"><classname>AbstractFormComponent</classname></ulink>'>
-<!ENTITY AbstractPage '<ulink url="&ApiRoot;/AbstractPage.html"><classname>AbstractPage</classname></ulink>'>
-<!ENTITY ApplicationServlet '<ulink url="&ApiRoot;/ApplicationServlet.html"><classname>ApplicationServlet</classname></ulink>'>
-<!ENTITY ChangeObserver '<ulink url="&ApiRoot;/event/ChangeObserver.html"><classname>ChangeObserver</classname></ulink>'>
-<!ENTITY BaseComponent '<ulink url="&ApiRoot;/BaseComponent.html"><classname>BaseComponent</classname></ulink>'>
-<!ENTITY BaseEngine '<ulink url="&ApiRoot;/engine/BaseEngine.html"><classname>BaseEngine</classname></ulink>'>
-<!ENTITY BasePage '<ulink url="&ApiRoot;/html/BasePage.html"><classname>BasePage</classname></ulink>'>
-<!ENTITY DataSqueezer '<ulink url="&ApiRoot;/util/io/DataSqueezer.html"><classname>DataSqueezer</classname></ulink>'>
-<!ENTITY Default '<ulink url="&ApiRoot;/bean/Default.html"><classname>Default</classname></ulink>'>
-<!ENTITY DefaultMonitorFactory '<ulink url="&ApiRoot;/engine/DefaultMonitorFactory.html"><classname>DefaultMonitorFactory</classname></ulink>'>
-<!ENTITY DefaultMultipartDecoder '<ulink url="&ApiRoot;/multipart/DefaultMultipartDecoder.html"><classname>DefaultMultipartDecoder</classname></ulink>'>
-<!ENTITY DefaultValuePersister '<ulink url="&ApiRoot;/record/DefaultValuePersister.html"><classname>DefaultValuePersister</classname></ulink>'>
-<!ENTITY Enum '<ulink url="&ApiRoot;/util/Enum.html"><classname>Enum</classname></ulink>'>
-<!ENTITY EnumPropertySelectionModel '<ulink url="&ApiRoot;/form/EnumPropertySelectionModel.html"><classname>EnumPropertySelectionModel</classname></ulink>'>
-<!ENTITY EvenOdd '<ulink url="&ApiRoot;/bean/EvenOdd.html"><classname>EvenOdd</classname></ulink>'>
-<!ENTITY ExceptionAnalyzer '<ulink url="&ApiRoot;/util/exception/ExceptionAnalyzer.html"><classname>ExceptionAnalyzer</classname></ulink>'>
-<!ENTITY ExceptionDescription '<ulink url="&ApiRoot;/util/exception/ExceptionDescription.html"><classname>ExceptionDescription</classname></ulink>'>
-<!ENTITY IAsset '<ulink url="&ApiRoot;/IAsset.html"><classname>IAsset</classname></ulink>'>
-<!ENTITY IBeanProvider '<ulink url="&ApiRoot;/IBeanProvider.html"><classname>IBeanProvider</classname></ulink>'>
-<!ENTITY IBinding '<ulink url="&ApiRoot;/IBinding.html"><classname>IBinding</classname></ulink>'>
-<!ENTITY IActionListener '<ulink url="&ApiRoot;/IActionListener.html"><classname>IActionListener</classname></ulink>'>
-<!ENTITY IApplicationSpecification '<ulink url="&ApiRoot;/spec/IApplicationSpecification.html"><classname>IApplicationSpecification</classname></ulink>'>
-<!ENTITY IComponent '<ulink url="&ApiRoot;/IComponent.html"><classname>IComponent</classname></ulink>'>
-<!ENTITY IComponentClassEnhancer '<ulink url="&ApiRoot;/engine/IComponentClassEnhancer.html"><classname>IComponentClassEnhancer</classname></ulink>'>
-<!ENTITY IComponentMessagesSource '<ulink url="&ApiRoot;/engine/IComponentMessagesSource.html"><classname>IComponentMessagesSource</classname></ulink>'>
-<!ENTITY IComponentSpecification '<ulink url="&ApiRoot;/spec/IComponentSpecification.html"><classname>IComponentSpecification</classname></ulink>'>
-<!ENTITY IDirect '<ulink url="&ApiRoot;/IDirect.html"><classname>IDirect</classname></ulink>'>
-<!ENTITY IEngine '<ulink url="&ApiRoot;/IEngine.html"><classname>IEngine</classname></ulink>'>
-<!ENTITY IForm '<ulink url="&ApiRoot;/IForm.html"><classname>IForm</classname></ulink>'>
-<!ENTITY IFormComponent '<ulink url="&ApiRoot;/form/IFormComponent.html"><classname>IFormComponent</classname></ulink>'>
-<!ENTITY IEngineService '<ulink url="&ApiRoot;/IEngineService.html"><classname>IEngineService</classname></ulink>'>
-<!ENTITY ILocation '<ulink url="&ApiRoot;/ILocation.html"><classname>ILocation</classname></ulink>'>
-<!ENTITY ILifecycle '<classname>ILifecycle</classname>'>
-<!ENTITY INamespace '<ulink url="&ApiRoot;/INamespace.html"><classname>INamespace</classname></ulink>'>
-<!ENTITY IMarkupWriter '<ulink url="&ApiRoot;/IMarkupWriter.html"><classname>IMarkupWriter</classname></ulink>'>
-<!ENTITY IMessages '<ulink url="&ApiRoot;/IMessages.html"><classname>IMessages</classname></ulink>'>
-<!ENTITY IMonitor '<ulink url="&ApiRoot;/engine/IMonitor.html"><classname>IMonitor</classname></ulink>'>
-<!ENTITY IMonitorFactory '<ulink url="&ApiRoot;/engine/IMonitorFactory.html"><classname>IMonitorFactory</classname></ulink>'>
-<!ENTITY IMultipartDecoder '<ulink url="&ApiRoot;/multipart/IMultipartDecoder.html"><classname>IMultipartDecoder</classname></ulink>'>
-<!ENTITY IPage '<ulink url="&ApiRoot;/IPage.html"><classname>IPage</classname></ulink>'>
-<!ENTITY IPageRecorder '<ulink url="&ApiRoot;/IPageRecorder.html"><classname>IPageRecorder</classname></ulink>'>
-<!ENTITY IPageSource '<ulink url="&ApiRoot;/engine/IPageSource.html"><classname>IPageSource</classname></ulink>'>
-<!ENTITY IPropertySelectionModel '<ulink url="&ApiRoot;/form/IPropertySelectionModel.html"><classname>IPropertySelectionModel</classname></ulink>'>
-<!ENTITY IPropertySource '<ulink url="&ApiRoot;/engine/IPropertySource.html"><classname>IPropertySource</classname></ulink>'>
-<!ENTITY IPoolable '<ulink url="&ApiRoot;/util/pool/IPoolable.html"><classname>IPoolable</classname></ulink>'>
-<!ENTITY IRender '<ulink url="&ApiRoot;/IRender.html"><classname>IRender</classname></ulink>'>
-<!ENTITY IResourceResolver '<ulink url="&ApiRoot;/IResourceResolver.html"><classname>IResourceResolver</classname></ulink>'>
-<!ENTITY IRequestCycle '<ulink url="&ApiRoot;/IRequestCycle.html"><classname>IRequestCycle</classname></ulink>'>
-<!ENTITY IRequestDecoder '<ulink url="&ApiRoot;/request/IRequestDecoder.html"><classname>IRequestDecoder</classname></ulink>'>
-<!ENTITY IScriptSource '<ulink url="&ApiRoot;/engine/IScriptSource.html"><classname>IScriptSource</classname></ulink>'>
-<!ENTITY ISpecificationSource '<ulink url="&ApiRoot;/engine/ISpecificationSource.html"><classname>ISpecificationSource</classname></ulink>'>
-<!ENTITY ISpecificationResolverDelegate '<ulink url="&ApiRoot;/resolver/ISpecificationResolverDelegate.html"><classname>ISpecificationResolverDelegate</classname></ulink>'>
-<!ENTITY ITemplateSource '<ulink url="&ApiRoot;/engine/ITemplateSource.html"><classname>ITemplateSource</classname></ulink>'>
-<!ENTITY ITemplateSourceDelegate '<ulink url="&ApiRoot;/engine/ITemplateSourceDelegate.html"><classname>ITemplateSourceDelegate</classname></ulink>'>
-<!ENTITY IValidator '<ulink url="&ApiRoot;/valid/IValidator.html"><classname>IValidator</classname></ulink>'>
-<!ENTITY IValidationDelegate '<ulink url="&ApiRoot;/valid/IValidationDelegate.html"><classname>IValidationDelegate</classname></ulink>'>
-<!ENTITY IUploadFile '<ulink url="&ApiRoot;/IUploadFile.html"><classname>IUploadFile</classname></ulink>'>
-<!ENTITY ListenerMap '<ulink url="&ApiRoot;/listener/ListenerMap.html"><classname>ListenerMap</classname></ulink>'>
-<!ENTITY PageDetachListener '<ulink url="&ApiRoot;/event/PageDetachListener.html"><classname>PageDetachListener</classname></ulink>'>
-<!ENTITY PageRecorder '<ulink url="&ApiRoot;/record/PageRecorder.html"><classname>PageRecorder</classname></ulink>'>
-<!ENTITY PageRedirectException '<ulink url="&ApiRoot;/PageRedirectException.html"><classname>PageRedirectException</classname></ulink>'>
-<!ENTITY PageRenderListener '<ulink url="&ApiRoot;/event/PageRenderListener.html"><classname>PageRenderListener</classname></ulink>'>
-<!ENTITY ParameterManager '<ulink ulr="&ApiRoot;/param/ParameterManager.html"><classname>ParameterManager</classname></ulink>'>
-<!ENTITY Pool '<ulink ulr="&ApiRoot;/util/pool/Pool.html"><classname>Pool</classname></ulink>'>
-<!ENTITY RedirectFilter '<ulink url="&ApiRoot;/RedirectFilter.html"><classname>RedirectFilter</classname></ulink>'>
-<!ENTITY RequestContext '<ulink url="&ApiRoot;/RequestContext.html"><classname>RequestContext</classname></ulink>'>
-<!ENTITY SimpleEngine '<ulink url="&ApiRoot;/engine/SimpleEngine.html"><classname>SimpleEngine</classname></ulink>'>
-<!ENTITY SpecificationParser '<ulink url="&ApiRoot;/parse/SpecificationParser"><classname>SpecificationParser</classname></ulink>'>
-<!ENTITY StaleLinkException '<ulink url="&ApiRoot;/StaleLinkException.html"><classname>StaleLinkException</classname></ulink>'>
-<!ENTITY Tapestry '<ulink ulr="&ApiRoot;/Tapestry.html"><classname>Tapestry</classname></ulink>'>
-<!ENTITY ValidationDelegate '<ulink url="&ApiRoot;/valid/ValidationDelegate.html"><classname>ValidationDelegate</classname></ulink>'>
-
-<!-- Links to Component Reference -->
-
-<!ENTITY ReferenceRoot "../ComponentReference">
-  
-<!ENTITY ActionLink '<ulink url="&ReferenceRoot;/ActionLink.html"><classname>ActionLink</classname></ulink>'>
-<!ENTITY Any '<ulink url="&ReferenceRoot;/Any.html"><classname>Any</classname></ulink>'>
-<!ENTITY Block '<ulink url="&ReferenceRoot;/Block.html"><classname>Block</classname></ulink>'>
-<!ENTITY Checkbox '<ulink url="&ReferenceRoot;/Checkbox.html"><classname>Checkbox</classname></ulink>'>
-<!ENTITY Body '<ulink url="&ReferenceRoot;/Body.html"><classname>Body</classname></ulink>'>
-<!ENTITY Conditional '<ulink url="&ReferenceRoot;/Conditional.html"><classname>Conditional</classname></ulink>'>
-<!ENTITY Delegator '<ulink url="&ReferenceRoot;/Delegator.html"><classname>Delegator</classname></ulink>'>
-<!ENTITY DirectLink '<ulink url="&ReferenceRoot;/DirectLink.html"><classname>DirectLink</classname></ulink>'>
-<!ENTITY ExceptionDisplay '<ulink url="&ReferenceRoot;/ExceptionDisplay.html"><classname>ExceptionDisplay</classname></ulink>'>
-<!ENTITY ExternalLink '<ulink url="&ReferenceRoot;/ExternalLink.html"><classname>ExternalLink</classname></ulink>'>
-<!ENTITY Foreach '<ulink url="&ReferenceRoot;/Foreach.html"><classname>Foreach</classname></ulink>'>
-<!ENTITY Form '<ulink url="&ReferenceRoot;/Form.html"><classname>Form</classname></ulink>'>
-<!ENTITY Frame '<link linkend="bultin.Frame.html"><classname>Frame</classname></ulink>'>
-<!ENTITY GenericLink '<ulink url="&ReferenceRoot;/GenericLink.html"><classname>GenericLink</classname></ulink>'>
-<!ENTITY Hidden '<ulink url="&ReferenceRoot;/Hidden.html"><classname>Hidden</classname></ulink>'>
-<!ENTITY ListEdit '<ulink url="&ReferenceRoot;/ListEdit.html"><classname>ListEdit</classname></ulink>'>
-<!ENTITY Image '<ulink url="&ReferenceRoot;/Image.html"><classname>Image</classname></ulink>'>
-<!ENTITY Insert '<ulink url="&ReferenceRoot;/Insert.html"><classname>Insert</classname></ulink>'>
-<!ENTITY InsertText '<ulink url="&ReferenceRoot;/InsertText.html"><classname>InsertText</classname></ulink>'>
-<!ENTITY InspectorButton '<ulink url="&ReferenceRoot;/InspectorButton.html"><classname>InspectorButton</classname></ulink>'>
-<!ENTITY Option '<ulink url="&ReferenceRoot;/Option.html"><classname>Option</classname></ulink>'>
-<!ENTITY PageLink '<ulink url="&ReferenceRoot;/PageLink.html"><classname>PageLink</classname></ulink>'>
-<!ENTITY Palette '<ulink url="&ReferenceRoot;/contrib.Palette.html"><classname>Palette</classname></ulink>'>
-<!ENTITY PropertySelection '<ulink url="&ReferenceRoot;/PropertySelection.html"><classname>PropertySelection</classname></ulink>'>
-<!ENTITY Radio '<ulink url="&ReferenceRoot;/Radio.html"><classname>Radio</classname></ulink>'>
-<!ENTITY RadioGroup '<ulink url="&ReferenceRoot;/RadioGroup.html"><classname>RadioGroup</classname></ulink>'>
-<!ENTITY RenderBlock '<ulink url="&ReferenceRoot;/RenderBlock.html"><classname>RenderBlock</classname></ulink>'>
-<!ENTITY RenderBody '<ulink url="&ReferenceRoot;/RenderBody.html"><classname>RenderBody</classname></ulink>'>
-<!ENTITY Rollover '<ulink url="&ReferenceRoot;/Rollover.html"><classname>Rollover</classname></ulink>'>
-<!ENTITY Script '<ulink url="&ReferenceRoot;/Script.html"><classname>Script</classname></ulink>'>
-<!ENTITY Select '<ulink url="&ReferenceRoot;/Select.html"><classname>Select</classname></ulink>'>
-<!ENTITY ServiceLink '<ulink url="&ReferenceRoot;/ServiceLink.html"><classname>ServiceLink</classname></ulink>'>
-<!ENTITY Shell '<ulink url="&ReferenceRoot;/Shell.html"><classname>Shell</classname></ulink>'>
-<!ENTITY Submit '<ulink url="&ReferenceRoot;/Submit.html"><classname>Submit</classname></ulink>'>
-<!ENTITY TextArea '<ulink url="&ReferenceRoot;/TextArea.html"><classname>TextArea</classname></ulink>'>
-<!ENTITY TextField '<ulink url="&ReferenceRoot;/TextField.html"><classname>TextField</classname></ulink>'>
-<!ENTITY Upload '<ulink url="&ReferenceRoot;/Upload.html"><classname>Upload</classname></ulink>'>
-<!ENTITY ValidField '<ulink url="&ReferenceRoot;/ValidField.html"><classname>ValidField</classname></ulink>'>
-  
-<!-- External links -->
-
-<!ENTITY Ant 			'<ulink url="http://ant.apache.org/">Ant</ulink>'>
-<!ENTITY BSF 			'<ulink url="http://jakarta.apache.org/bsf/">BSF</ulink>'>
-<!ENTITY BCEL 		'<ulink url="http://jakarta.apache.org/bcel/">BCEL</ulink>'>
-<!ENTITY DocBook 	'<ulink url="http://docbook.sourceforge.net/">DocBook</ulink>'>
-<!ENTITY Eclipse 	'<ulink url="http://www.eclipse.org">Eclipse</ulink>'>
-<!ENTITY Fop 			'<ulink url="http://xml.apache.org/fop/">FOP</ulink>'>
-<!ENTITY Log4J 		'<ulink url="http://jakarta.apache.org/log4j/">Log4J</ulink>'>
-<!ENTITY Jakarta	'<ulink url="http://jakarta.apache.org">Jakarta</ulink>'>
-<!ENTITY Javassist '<ulink url="http://jboss.org/developers/projects/javassist.html">Javassist</ulink>'>
-<!ENTITY JBoss 		'<ulink url="http://www.jboss.org">JBoss</ulink>'>
-<!ENTITY Jetty 		'<ulink url="http://sf.net/projects/jetty/">Jetty</ulink>'>
-<!ENTITY JUnit 		'<ulink url="http://www.junit.org">JUnit</ulink>'>
-<!ENTITY Jython	  '<ulink url="http://www.jython.org">Jython</ulink>'>
-<!ENTITY OGNL 		'<ulink url="http://www.ognl.org">OGNL</ulink>'>
-<!ENTITY Saxon 		'<ulink url="http://sf.net/projects/saxon/">Saxon</ulink>'>
-
-<!ENTITY Struts 	'<ulink url="http://jakarta.apache.org/struts/">Struts</ulink>'>
-<!ENTITY WebWork 	'<ulink url="http://opensymphony.com/webwork/">WebWork</ulink>'>
-<!ENTITY Velocity '<ulink url="http://jakarta.apache.org/velocity/">Velocity</ulink>'>
-
-<!ENTITY TapestryHomePage '<ulink url="http://jakarta.apache.org/tapestry/">Tapestry Home Page</ulink>'>
-
-<!-- Other useful stuff -->
-
-<!ENTITY TapestryFrameworkJar "<filename>tapestry-3.0.jar</filename>">
-<!ENTITY TapestryContribJar "<filename>tapestry-contrib-3.0.jar</filename>">
-
-<!ENTITY HowardLewisShipEmail '<ulink url="mailto:hlship@apache.org">Howard M. Lewis Ship</ulink>'>
diff --git a/3.0.4/doc/src/common/calstblx.dtd b/3.0.4/doc/src/common/calstblx.dtd
deleted file mode 100644
index 2b75079..0000000
--- a/3.0.4/doc/src/common/calstblx.dtd
+++ /dev/null
@@ -1,199 +0,0 @@
-<!-- ...................................................................... -->
-<!-- DocBook XML CALS Table Model V4.1.2 .................................... -->
-<!-- File calstblx.mod .................................................... -->
-
-<!-- Copyright 1992-2000 HaL Computer Systems, Inc.,
-     O'Reilly & Associates, Inc., ArborText, Inc., Fujitsu Software
-     Corporation, Norman Walsh and the Organization for the Advancement
-     of Structured Information Standards (OASIS).
-
-     This DTD is based on the CALS Table Model
-     PUBLIC "-//USA-DOD//DTD Table Model 951010//EN"
-
-     $Id: calstblx.dtd,v 1.10 2000/08/27 15:12:41 nwalsh Exp $
-
-     Permission to use, copy, modify and distribute the DocBook XML DTD
-     and its accompanying documentation for any purpose and without fee
-     is hereby granted in perpetuity, provided that the above copyright
-     notice and this paragraph appear in all copies.  The copyright
-     holders make no representation about the suitability of the DTD for
-     any purpose.  It is provided "as is" without expressed or implied
-     warranty.
-
-     If you modify the DocBook XML DTD in any way, except for declaring and
-     referencing additional sets of general entities and declaring
-     additional notations, label your DTD as a variant of DocBook.  See
-     the maintenance documentation for more information.
-
-     Please direct all questions, bug reports, or suggestions for
-     changes to the docbook@lists.oasis-open.org mailing list. For more
-     information, see http://www.oasis-open.org/docbook/.
--->
-
-<!-- ...................................................................... -->
-
-<!-- This module contains the definitions for the CALS Table Model
-     converted to XML.
--->
-
-<!-- These definitions are not directly related to the table model, but are 
-     used in the default CALS table model and are usually defined elsewhere 
-     (and prior to the inclusion of this table module) in a CALS DTD. -->
-
-<!ENTITY % bodyatt "">
-<!ENTITY % secur "">
-
-<!-- no if zero(s),
-                                yes if any other digits value -->
-
-<!ENTITY % yesorno 'CDATA'>
-<!ENTITY % titles  'title?'>
-
-<!-- default for use in entry content -->
-
-<!ENTITY % paracon '#PCDATA'>
-
-<!--
-The parameter entities as defined below provide the CALS table model
-as published (as part of the Example DTD) in MIL-HDBK-28001.
-
-These following declarations provide the CALS-compliant default definitions
-for these entities.  However, these entities can and should be redefined
-(by giving the appropriate parameter entity declaration(s) prior to the
-reference to this Table Model declaration set entity) to fit the needs
-of the current application.
--->
-
-<!ENTITY % tbl.table.name       "(table|chart)">
-<!ENTITY % tbl.table-titles.mdl "%titles;,">
-<!ENTITY % tbl.table-main.mdl   "(tgroup+|graphic+)">
-<!ENTITY % tbl.table.mdl        "%tbl.table-titles.mdl; %tbl.table-main.mdl;">
-<!ENTITY % tbl.table.att        '
-    tabstyle    CDATA           #IMPLIED
-    tocentry    %yesorno;       #IMPLIED
-    shortentry  %yesorno;       #IMPLIED
-    orient      (port|land)     #IMPLIED
-    pgwide      %yesorno;       #IMPLIED '>
-<!ENTITY % tbl.tgroup.mdl       "colspec*,spanspec*,thead?,tfoot?,tbody">
-<!ENTITY % tbl.tgroup.att       '
-    tgroupstyle CDATA           #IMPLIED '>
-<!ENTITY % tbl.hdft.mdl         "colspec*,row+">
-<!ENTITY % tbl.row.mdl          "(entry|entrytbl)+">
-<!ENTITY % tbl.entrytbl.mdl     "colspec*,spanspec*,thead?,tbody">
-<!ENTITY % tbl.entry.mdl        "(para|warning|caution|note|legend|%paracon;)*">
-<!-- =====  Element and attribute declarations follow. =====  -->
-
-<!ELEMENT table (%tbl.table.mdl;)>
-
-<!ATTLIST table
-        frame           (top|bottom|topbot|all|sides|none)      #IMPLIED
-        colsep          %yesorno;                               #IMPLIED
-        rowsep          %yesorno;                               #IMPLIED
-        %tbl.table.att;
-        %bodyatt;
-        %secur;
->
-
-<!ELEMENT tgroup (%tbl.tgroup.mdl;) >
-
-<!ATTLIST tgroup
-        cols            CDATA                                   #REQUIRED
-        %tbl.tgroup.att;
-        colsep          %yesorno;                               #IMPLIED
-        rowsep          %yesorno;                               #IMPLIED
-        align           (left|right|center|justify|char)        #IMPLIED
-        char            CDATA                                   #IMPLIED
-        charoff         CDATA                                   #IMPLIED
-        %secur;
->
-
-<!ELEMENT colspec EMPTY >
-
-<!ATTLIST colspec
-        colnum          CDATA                                   #IMPLIED
-        colname         CDATA                                   #IMPLIED
-        colwidth        CDATA                                   #IMPLIED
-        colsep          %yesorno;                               #IMPLIED
-        rowsep          %yesorno;                               #IMPLIED
-        align           (left|right|center|justify|char)        #IMPLIED
-        char            CDATA                                   #IMPLIED
-        charoff         CDATA                                   #IMPLIED
->
-
-<!ELEMENT spanspec EMPTY >
-
-<!ATTLIST spanspec
-        namest          CDATA                                   #REQUIRED
-        nameend         CDATA                                   #REQUIRED
-        spanname        CDATA                                   #REQUIRED
-        colsep          %yesorno;                               #IMPLIED
-        rowsep          %yesorno;                               #IMPLIED
-        align           (left|right|center|justify|char)        #IMPLIED
-        char            CDATA                                   #IMPLIED
-        charoff         CDATA                                   #IMPLIED
->
-
-<!ELEMENT thead (%tbl.hdft.mdl;)>
-<!ATTLIST thead
-        valign          (top|middle|bottom)                     #IMPLIED
-        %secur;
->
-
-<!ELEMENT tfoot (%tbl.hdft.mdl;)>
-<!ATTLIST tfoot
-        valign          (top|middle|bottom)                     #IMPLIED
-        %secur;
->
-
-<!ELEMENT tbody (row+)>
-
-<!ATTLIST tbody
-        valign          (top|middle|bottom)                     #IMPLIED
-        %secur;
->
-
-<!ELEMENT row (%tbl.row.mdl;)>
-
-<!ATTLIST row
-        rowsep          %yesorno;                               #IMPLIED
-        valign          (top|middle|bottom)                     #IMPLIED
-        %secur;
->
-
-<!ELEMENT entrytbl (%tbl.entrytbl.mdl;)>
-
-<!ATTLIST entrytbl
-        cols            CDATA                                   #REQUIRED
-        %tbl.tgroup.att;
-        colname         CDATA                                   #IMPLIED
-        spanname        CDATA                                   #IMPLIED
-        namest          CDATA                                   #IMPLIED
-        nameend         CDATA                                   #IMPLIED
-        colsep          %yesorno;                               #IMPLIED
-        rowsep          %yesorno;                               #IMPLIED
-        align           (left|right|center|justify|char)        #IMPLIED
-        char            CDATA                                   #IMPLIED
-        charoff         CDATA                                   #IMPLIED
-        %secur;
->
-
-<!ELEMENT entry (%tbl.entry.mdl;)*>
-
-<!ATTLIST entry
-        colname         CDATA                                   #IMPLIED
-        namest          CDATA                                   #IMPLIED
-        nameend         CDATA                                   #IMPLIED
-        spanname        CDATA                                   #IMPLIED
-        morerows        CDATA                                   #IMPLIED
-        colsep          %yesorno;                               #IMPLIED
-        rowsep          %yesorno;                               #IMPLIED
-        align           (left|right|center|justify|char)        #IMPLIED
-        char            CDATA                                   #IMPLIED
-        charoff         CDATA                                   #IMPLIED
-        rotate          %yesorno;                               #IMPLIED
-        valign          (top|middle|bottom)                     #IMPLIED
-        %secur;
->
-
-<!-- End of DocBook XML CALS Table Model V4.1.2 ............................. -->
-<!-- ...................................................................... -->
diff --git a/3.0.4/doc/src/common/dbcentx.mod b/3.0.4/doc/src/common/dbcentx.mod
deleted file mode 100644
index 55cdc81..0000000
--- a/3.0.4/doc/src/common/dbcentx.mod
+++ /dev/null
@@ -1,204 +0,0 @@
-<!-- ...................................................................... -->
-<!-- DocBook XML character entities module V4.1.2 ........................... -->
-<!-- File dbcentx.mod ..................................................... -->
-
-<!-- Copyright 1992-2000 HaL Computer Systems, Inc.,
-     O'Reilly & Associates, Inc., ArborText, Inc., Fujitsu Software
-     Corporation, Norman Walsh, and the Organization for the Advancement
-     of Structured Information Standards (OASIS).
-
-     $Id: dbcentx.mod,v 1.10 2000/08/27 15:12:42 nwalsh Exp $
-
-     Permission to use, copy, modify and distribute the DocBook XML DTD
-     and its accompanying documentation for any purpose and without fee
-     is hereby granted in perpetuity, provided that the above copyright
-     notice and this paragraph appear in all copies.  The copyright
-     holders make no representation about the suitability of the DTD for
-     any purpose.  It is provided "as is" without expressed or implied
-     warranty.
-
-     If you modify the DocBook XML DTD in any way, except for declaring and
-     referencing additional sets of general entities and declaring
-     additional notations, label your DTD as a variant of DocBook.  See
-     the maintenance documentation for more information.
-
-     Please direct all questions, bug reports, or suggestions for
-     changes to the docbook@lists.oasis-open.org mailing list. For more
-     information, see http://www.oasis-open.org/docbook/.
--->
-
-<!-- ...................................................................... -->
-
-<!-- This module contains the entity declarations for the standard ISO
-     entity sets used by DocBook.
-
-     In DTD driver files referring to this module, please use an entity
-     declaration that uses the public identifier shown below:
-
-     <!ENTITY % dbcent PUBLIC
-     "-//OASIS//ENTITIES DocBook XML Character Entities V4.1.2//EN"
-     "dbcentx.mod">
-     %dbcent;
-
-     See the documentation for detailed information on the parameter
-     entity and module scheme used in DocBook, customizing DocBook and
-     planning for interchange, and changes made since the last release
-     of DocBook.
--->
-
-<!-- ...................................................................... -->
-
-<!ENTITY % ISOamsa.module "INCLUDE">
-<![%ISOamsa.module;[
-<!ENTITY % ISOamsa PUBLIC
-"ISO 8879:1986//ENTITIES Added Math Symbols: Arrow Relations//EN//XML"
-"ent/iso-amsa.ent">
-%ISOamsa;
-<!--end of ISOamsa.module-->]]>
-
-<!ENTITY % ISOamsb.module "INCLUDE">
-<![%ISOamsb.module;[
-<!ENTITY % ISOamsb PUBLIC
-"ISO 8879:1986//ENTITIES Added Math Symbols: Binary Operators//EN//XML"
-"ent/iso-amsb.ent">
-%ISOamsb;
-<!--end of ISOamsb.module-->]]>
-
-<!ENTITY % ISOamsc.module "INCLUDE">
-<![%ISOamsc.module;[
-<!ENTITY % ISOamsc PUBLIC
-"ISO 8879:1986//ENTITIES Added Math Symbols: Delimiters//EN//XML"
-"ent/iso-amsc.ent">
-%ISOamsc;
-<!--end of ISOamsc.module-->]]>
-
-<!ENTITY % ISOamsn.module "INCLUDE">
-<![%ISOamsn.module;[
-<!ENTITY % ISOamsn PUBLIC
-"ISO 8879:1986//ENTITIES Added Math Symbols: Negated Relations//EN//XML"
-"ent/iso-amsn.ent">
-%ISOamsn;
-<!--end of ISOamsn.module-->]]>
-
-<!ENTITY % ISOamso.module "INCLUDE">
-<![%ISOamso.module;[
-<!ENTITY % ISOamso PUBLIC
-"ISO 8879:1986//ENTITIES Added Math Symbols: Ordinary//EN//XML"
-"ent/iso-amso.ent">
-%ISOamso;
-<!--end of ISOamso.module-->]]>
-
-<!ENTITY % ISOamsr.module "INCLUDE">
-<![%ISOamsr.module;[
-<!ENTITY % ISOamsr PUBLIC
-"ISO 8879:1986//ENTITIES Added Math Symbols: Relations//EN//XML"
-"ent/iso-amsr.ent">
-%ISOamsr;
-<!--end of ISOamsr.module-->]]>
-
-<!ENTITY % ISObox.module "INCLUDE">
-<![%ISObox.module;[
-<!ENTITY % ISObox PUBLIC
-"ISO 8879:1986//ENTITIES Box and Line Drawing//EN//XML"
-"ent/iso-box.ent">
-%ISObox;
-<!--end of ISObox.module-->]]>
-
-<!ENTITY % ISOcyr1.module "INCLUDE">
-<![%ISOcyr1.module;[
-<!ENTITY % ISOcyr1 PUBLIC
-"ISO 8879:1986//ENTITIES Russian Cyrillic//EN//XML"
-"ent/iso-cyr1.ent">
-%ISOcyr1;
-<!--end of ISOcyr1.module-->]]>
-
-<!ENTITY % ISOcyr2.module "INCLUDE">
-<![%ISOcyr2.module;[
-<!ENTITY % ISOcyr2 PUBLIC
-"ISO 8879:1986//ENTITIES Non-Russian Cyrillic//EN//XML"
-"ent/iso-cyr2.ent">
-%ISOcyr2;
-<!--end of ISOcyr2.module-->]]>
-
-<!ENTITY % ISOdia.module "INCLUDE">
-<![%ISOdia.module;[
-<!ENTITY % ISOdia PUBLIC
-"ISO 8879:1986//ENTITIES Diacritical Marks//EN//XML"
-"ent/iso-dia.ent">
-%ISOdia;
-<!--end of ISOdia.module-->]]>
-
-<!ENTITY % ISOgrk1.module "INCLUDE">
-<![%ISOgrk1.module;[
-<!ENTITY % ISOgrk1 PUBLIC
-"ISO 8879:1986//ENTITIES Greek Letters//EN//XML"
-"ent/iso-grk1.ent">
-%ISOgrk1;
-<!--end of ISOgrk1.module-->]]>
-
-<!ENTITY % ISOgrk2.module "INCLUDE">
-<![%ISOgrk2.module;[
-<!ENTITY % ISOgrk2 PUBLIC
-"ISO 8879:1986//ENTITIES Monotoniko Greek//EN//XML"
-"ent/iso-grk2.ent">
-%ISOgrk2;
-<!--end of ISOgrk2.module-->]]>
-
-<!ENTITY % ISOgrk3.module "INCLUDE">
-<![%ISOgrk3.module;[
-<!ENTITY % ISOgrk3 PUBLIC
-"ISO 8879:1986//ENTITIES Greek Symbols//EN//XML"
-"ent/iso-grk3.ent">
-%ISOgrk3;
-<!--end of ISOgrk3.module-->]]>
-
-<!ENTITY % ISOgrk4.module "INCLUDE">
-<![%ISOgrk4.module;[
-<!ENTITY % ISOgrk4 PUBLIC
-"ISO 8879:1986//ENTITIES Alternative Greek Symbols//EN//XML"
-"ent/iso-grk4.ent">
-%ISOgrk4;
-<!--end of ISOgrk4.module-->]]>
-
-<!ENTITY % ISOlat1.module "INCLUDE">
-<![%ISOlat1.module;[
-<!ENTITY % ISOlat1 PUBLIC
-"ISO 8879:1986//ENTITIES Added Latin 1//EN//XML"
-"ent/iso-lat1.ent">
-%ISOlat1;
-<!--end of ISOlat1.module-->]]>
-
-<!ENTITY % ISOlat2.module "INCLUDE">
-<![%ISOlat2.module;[
-<!ENTITY % ISOlat2 PUBLIC
-"ISO 8879:1986//ENTITIES Added Latin 2//EN//XML"
-"ent/iso-lat2.ent">
-%ISOlat2;
-<!--end of ISOlat2.module-->]]>
-
-<!ENTITY % ISOnum.module "INCLUDE">
-<![%ISOnum.module;[
-<!ENTITY % ISOnum PUBLIC
-"ISO 8879:1986//ENTITIES Numeric and Special Graphic//EN//XML"
-"ent/iso-num.ent">
-%ISOnum;
-<!--end of ISOnum.module-->]]>
-
-<!ENTITY % ISOpub.module "INCLUDE">
-<![%ISOpub.module;[
-<!ENTITY % ISOpub PUBLIC
-"ISO 8879:1986//ENTITIES Publishing//EN//XML"
-"ent/iso-pub.ent">
-%ISOpub;
-<!--end of ISOpub.module-->]]>
-
-<!ENTITY % ISOtech.module "INCLUDE">
-<![%ISOtech.module;[
-<!ENTITY % ISOtech PUBLIC
-"ISO 8879:1986//ENTITIES General Technical//EN//XML"
-"ent/iso-tech.ent">
-%ISOtech;
-<!--end of ISOtech.module-->]]>
-
-<!-- End of DocBook XML character entity sets module V4.1.2 ................. -->
-<!-- ...................................................................... -->
diff --git a/3.0.4/doc/src/common/dbgenent.mod b/3.0.4/doc/src/common/dbgenent.mod
deleted file mode 100644
index 5dc9a41..0000000
--- a/3.0.4/doc/src/common/dbgenent.mod
+++ /dev/null
@@ -1,41 +0,0 @@
-<!-- ...................................................................... -->
-<!-- DocBook XML additional general entities V4.1.2 ......................... -->
-
-<!-- Copyright 1992-2000 HaL Computer Systems, Inc.,
-     O'Reilly & Associates, Inc., ArborText, Inc., Fujitsu Software
-     Corporation, and the Organization for the Advancement of
-     Structured Information Standards (OASIS).
-
-     In DTD driver files referring to this module, please use an entity
-     declaration that uses the public identifier shown below:
-
-     <!ENTITY % dbgenent PUBLIC
-     "-//OASIS//ENTITIES DocBook XML Additional General Entities V4.1.2//EN"
-     "dbgenent.mod">
-     %dbgenent;
--->
-
-<!-- File dbgenent.mod .................................................... -->
-
-<!-- You can edit this file to add the following:
-
-     o General entity declarations of any kind.  For example:
-
-       <!ENTITY happyface SDATA "insert-face">    (system-specific data)
-       <!ENTITY productname "WinWidget">          (small boilerplate)
-       <!ENTITY legal-notice SYSTEM "notice.sgm"> (large boilerplate)
-
-     o Notation declarations.  For example:
-
-       <!NOTATION chicken-scratch SYSTEM>
-
-     o Declarations for and references to external parameter entities
-       containing collections of any of the above.  For example:
-
-       <!ENTITY % all-titles PUBLIC "-//DocTools//ELEMENTS Book Titles//EN"
-           "booktitles.ent">
-       %all-titles;
--->
-
-<!-- End of DocBook XML additional general entities V4.1.2 .................. -->
-<!-- ...................................................................... -->
diff --git a/3.0.4/doc/src/common/dbhierx.mod b/3.0.4/doc/src/common/dbhierx.mod
deleted file mode 100644
index 5cc4195..0000000
--- a/3.0.4/doc/src/common/dbhierx.mod
+++ /dev/null
@@ -1,2074 +0,0 @@
-<!-- ...................................................................... -->
-<!-- DocBook XML document hierarchy module V4.1.2 ........................... -->
-<!-- File dbhierx.mod ..................................................... -->
-
-<!-- Copyright 1992-2000 HaL Computer Systems, Inc.,
-     O'Reilly & Associates, Inc., ArborText, Inc., Fujitsu Software
-     Corporation, Norman Walsh, and the Organization for the Advancement
-     of Structured Information Standards (OASIS).
-
-     $Id: dbhierx.mod,v 1.12 2000/08/27 15:12:42 nwalsh Exp $
-
-     Permission to use, copy, modify and distribute the DocBook XML DTD
-     and its accompanying documentation for any purpose and without fee
-     is hereby granted in perpetuity, provided that the above copyright
-     notice and this paragraph appear in all copies.  The copyright
-     holders make no representation about the suitability of the DTD for
-     any purpose.  It is provided "as is" without expressed or implied
-     warranty.
-
-     If you modify the DocBook XML DTD in any way, except for declaring and
-     referencing additional sets of general entities and declaring
-     additional notations, label your DTD as a variant of DocBook.  See
-     the maintenance documentation for more information.
-
-     Please direct all questions, bug reports, or suggestions for
-     changes to the docbook@lists.oasis-open.org mailing list. For more
-     information, see http://www.oasis-open.org/docbook/.
--->
-
-<!-- ...................................................................... -->
-
-<!-- This module contains the definitions for the overall document
-     hierarchies of DocBook documents.  It covers computer documentation
-     manuals and manual fragments, as well as reference entries (such as
-     man pages) and technical journals or anthologies containing
-     articles.
-
-     This module depends on the DocBook information pool module.  All
-     elements and entities referenced but not defined here are assumed
-     to be defined in the information pool module.
-
-     In DTD driver files referring to this module, please use an entity
-     declaration that uses the public identifier shown below:
-
-     <!ENTITY % dbhier PUBLIC
-     "-//OASIS//ELEMENTS DocBook XML Document Hierarchy V4.1.2//EN"
-     "dbhierx.mod">
-     %dbhier;
-
-     See the documentation for detailed information on the parameter
-     entity and module scheme used in DocBook, customizing DocBook and
-     planning for interchange, and changes made since the last release
-     of DocBook.
--->
-
-<!-- ...................................................................... -->
-<!-- Entities for module inclusions ....................................... -->
-
-<!ENTITY % dbhier.redecl.module		"IGNORE">
-<!ENTITY % dbhier.redecl2.module	"IGNORE">
-
-<!-- ...................................................................... -->
-<!-- Entities for element classes ......................................... -->
-
-<!ENTITY % local.appendix.class "">
-<!ENTITY % appendix.class	"appendix %local.appendix.class;">
-
-<!ENTITY % local.article.class "">
-<!ENTITY % article.class	"article %local.article.class;">
-
-<!ENTITY % local.book.class "">
-<!ENTITY % book.class		"book %local.book.class;">
-
-<!ENTITY % local.chapter.class "">
-<!ENTITY % chapter.class	"chapter %local.chapter.class;">
-
-<!ENTITY % local.index.class "">
-<!ENTITY % index.class		"index|setindex %local.index.class;">
-
-<!ENTITY % local.refentry.class "">
-<!ENTITY % refentry.class	"refentry %local.refentry.class;">
-
-<!ENTITY % local.nav.class "">
-<!ENTITY % nav.class		"toc|lot|index|glossary|bibliography 
-				%local.nav.class;">
-
-<!-- Redeclaration placeholder ............................................ -->
-
-<!-- For redeclaring entities that are declared after this point while
-     retaining their references to the entities that are declared before
-     this point -->
-
-<![%dbhier.redecl.module;[
-<!-- Defining rdbhier here makes some buggy XML parsers happy. -->
-<!ENTITY % rdbhier "">
-%rdbhier;
-<!--end of dbhier.redecl.module-->]]>
-
-<!-- ...................................................................... -->
-<!-- Entities for element mixtures ........................................ -->
-
-<!-- The DocBook TC may produce an official forms module for DocBook. -->
-<!-- This PE provides the hook by which it can be inserted into the DTD. -->
-<!ENTITY % forms.hook "">
-
-<!ENTITY % local.divcomponent.mix "">
-<!ENTITY % divcomponent.mix
-		"%list.class;		|%admon.class;
-		|%linespecific.class;	|%synop.class;
-		|%para.class;		|%informal.class;
-		|%formal.class;		|%compound.class;
-		|%genobj.class;		|%descobj.class;
-		|%ndxterm.class;        |beginpage
-                %forms.hook;
-		%local.divcomponent.mix;">
-
-<!ENTITY % local.refcomponent.mix "">
-<!ENTITY % refcomponent.mix
-		"%list.class;		|%admon.class;
-		|%linespecific.class;	|%synop.class;
-		|%para.class;		|%informal.class;
-		|%formal.class;		|%compound.class;
-		|%genobj.class;		|%descobj.class;
-		|%ndxterm.class;        |beginpage
-		%local.refcomponent.mix;">
-
-<!ENTITY % local.indexdivcomponent.mix "">
-<!ENTITY % indexdivcomponent.mix
-		"itemizedlist|orderedlist|variablelist|simplelist
-		|%linespecific.class;	|%synop.class;
-		|%para.class;		|%informal.class;
-		|anchor|remark
-		|%link.char.class;
- 		                        |beginpage
-		%local.indexdivcomponent.mix;">
-
-<!ENTITY % local.refname.char.mix "">
-<!ENTITY % refname.char.mix
-		"#PCDATA
-		|%tech.char.class;
-		%local.refname.char.mix;">
-
-<!ENTITY % local.partcontent.mix "">
-<!ENTITY % partcontent.mix
-		"%appendix.class;|%chapter.class;|%nav.class;|%article.class;
-		|preface|%refentry.class;|reference %local.partcontent.mix;">
-
-<!ENTITY % local.refinline.char.mix "">
-<!ENTITY % refinline.char.mix
-		"#PCDATA
-		|%xref.char.class;	|%gen.char.class;
-		|%link.char.class;	|%tech.char.class;
-		|%base.char.class;	|%docinfo.char.class;
-		|%other.char.class;
-		|%ndxterm.class;        |beginpage
-		%local.refinline.char.mix;">
-
-<!ENTITY % local.refclass.char.mix "">
-<!ENTITY % refclass.char.mix
-		"#PCDATA
-		|application
-		%local.refclass.char.mix;">
-
-<!-- Redeclaration placeholder 2 .......................................... -->
-
-<!-- For redeclaring entities that are declared after this point while
-     retaining their references to the entities that are declared before
-     this point -->
-
-<![%dbhier.redecl2.module;[
-<!-- Defining rdbhier2 here makes some buggy XML parsers happy. -->
-<!ENTITY % rdbhier2 "">
-%rdbhier2;
-<!--end of dbhier.redecl2.module-->]]>
-
-<!-- ...................................................................... -->
-<!-- Entities for content models .......................................... -->
-
-<!ENTITY % div.title.content
-	"title, subtitle?, titleabbrev?">
-
-<!ENTITY % bookcomponent.title.content
-	"title, subtitle?, titleabbrev?">
-
-<!ENTITY % sect.title.content
-	"title, subtitle?, titleabbrev?">
-
-<!ENTITY % refsect.title.content
-	"title, subtitle?, titleabbrev?">
-
-<!ENTITY % bookcomponent.content
-	"((%divcomponent.mix;)+, 
-	(sect1*|(%refentry.class;)*|simplesect*|section*))
-	| (sect1+|(%refentry.class;)+|simplesect+|section+)">
-
-<!-- ...................................................................... -->
-<!-- Set and SetInfo ...................................................... -->
-
-<!ENTITY % set.content.module "INCLUDE">
-<![%set.content.module;[
-<!ENTITY % set.module "INCLUDE">
-<![%set.module;[
-<!ENTITY % local.set.attrib "">
-<!ENTITY % set.role.attrib "%role.attrib;">
-
-<!ENTITY % set.element "INCLUDE">
-<![%set.element;[
-<!ELEMENT set ((%div.title.content;)?, setinfo?, toc?, (%book.class;)+,
-		setindex?)>
-<!--end of set.element-->]]>
-
-<!-- FPI: SGML formal public identifier -->
-
-
-<!ENTITY % set.attlist "INCLUDE">
-<![%set.attlist;[
-<!ATTLIST set
-		fpi		CDATA		#IMPLIED
-		%status.attrib;
-		%common.attrib;
-		%set.role.attrib;
-		%local.set.attrib;
->
-<!--end of set.attlist-->]]>
-<!--end of set.module-->]]>
-
-<!ENTITY % setinfo.module "INCLUDE">
-<![%setinfo.module;[
-<!ENTITY % local.setinfo.attrib "">
-<!ENTITY % setinfo.role.attrib "%role.attrib;">
-
-<!ENTITY % setinfo.element "INCLUDE">
-<![%setinfo.element;[
-<!ELEMENT setinfo ((graphic | mediaobject 
-        | legalnotice | modespec | subjectset 
-	| keywordset | itermset | %bibliocomponent.mix;)+)>
-<!--end of setinfo.element-->]]>
-
-<!-- Contents: IDs of the ToC, Books, and SetIndex that comprise 
-		the set, in the order of their appearance -->
-
-
-<!ENTITY % setinfo.attlist "INCLUDE">
-<![%setinfo.attlist;[
-<!ATTLIST setinfo
-		contents	IDREFS		#IMPLIED
-		%common.attrib;
-		%setinfo.role.attrib;
-		%local.setinfo.attrib;
->
-<!--end of setinfo.attlist-->]]>
-<!--end of setinfo.module-->]]>
-<!--end of set.content.module-->]]>
-
-<!-- ...................................................................... -->
-<!-- Book and BookInfo .................................................... -->
-
-<!ENTITY % book.content.module "INCLUDE">
-<![%book.content.module;[
-<!ENTITY % book.module "INCLUDE">
-<![%book.module;[
-
-<!ENTITY % local.book.attrib "">
-<!ENTITY % book.role.attrib "%role.attrib;">
-
-<!ENTITY % book.element "INCLUDE">
-<![%book.element;[
-<!ELEMENT book ((%div.title.content;)?, bookinfo?,
- 		(dedication | toc | lot
- 		| glossary | bibliography | preface
-		| %chapter.class; | reference | part
-		| %article.class;
- 		| %appendix.class;
-		| %index.class;
-		| colophon)*)>
-<!--end of book.element-->]]>
-
-<!-- FPI: SGML formal public identifier -->
-
-
-<!ENTITY % book.attlist "INCLUDE">
-<![%book.attlist;[
-<!ATTLIST book		fpi		CDATA		#IMPLIED
-		%label.attrib;
-		%status.attrib;
-		%common.attrib;
-		%book.role.attrib;
-		%local.book.attrib;
->
-<!--end of book.attlist-->]]>
-<!--end of book.module-->]]>
-
-<!ENTITY % bookinfo.module "INCLUDE">
-<![%bookinfo.module;[
-<!ENTITY % local.bookinfo.attrib "">
-<!ENTITY % bookinfo.role.attrib "%role.attrib;">
-
-<!ENTITY % bookinfo.element "INCLUDE">
-<![%bookinfo.element;[
-<!ELEMENT bookinfo ((graphic | mediaobject
-        | legalnotice | modespec | subjectset 
-	| keywordset | itermset | %bibliocomponent.mix;)+)>
-<!--end of bookinfo.element-->]]>
-
-<!-- Contents: IDs of the ToC, LoTs, Prefaces, Parts, Chapters,
-		Appendixes, References, GLossary, Bibliography, and indexes
-		comprising the Book, in the order of their appearance -->
-
-
-<!ENTITY % bookinfo.attlist "INCLUDE">
-<![%bookinfo.attlist;[
-<!ATTLIST bookinfo
-		contents	IDREFS		#IMPLIED
-		%common.attrib;
-		%bookinfo.role.attrib;
-		%local.bookinfo.attrib;
->
-<!--end of bookinfo.attlist-->]]>
-<!--end of bookinfo.module-->]]>
-<!--end of book.content.module-->]]>
-
-<!-- ...................................................................... -->
-<!-- Dedication, ToC, and LoT ............................................. -->
-
-<!ENTITY % dedication.module "INCLUDE">
-<![%dedication.module;[
-<!ENTITY % local.dedication.attrib "">
-<!ENTITY % dedication.role.attrib "%role.attrib;">
-
-<!ENTITY % dedication.element "INCLUDE">
-<![%dedication.element;[
-<!ELEMENT dedication ((%sect.title.content;)?, (%legalnotice.mix;)+)>
-<!--end of dedication.element-->]]>
-
-<!ENTITY % dedication.attlist "INCLUDE">
-<![%dedication.attlist;[
-<!ATTLIST dedication
-		%status.attrib;
-		%common.attrib;
-		%dedication.role.attrib;
-		%local.dedication.attrib;
->
-<!--end of dedication.attlist-->]]>
-<!--end of dedication.module-->]]>
-
-<!ENTITY % colophon.module "INCLUDE">
-<![ %colophon.module; [
-<!ENTITY % local.colophon.attrib "">
-<!ENTITY % colophon.role.attrib "%role.attrib;">
-
-<!ENTITY % colophon.element "INCLUDE">
-<![ %colophon.element; [
-<!ELEMENT colophon ((%sect.title.content;)?, (%textobject.mix;)+)>
-<!--end of colophon.element-->]]>
-
-<!ENTITY % colophon.attlist "INCLUDE">
-<![ %colophon.attlist; [
-<!ATTLIST colophon
-		%status.attrib;
-		%common.attrib;
-		%colophon.role.attrib;
-		%local.colophon.attrib;>
-<!--end of colophon.attlist-->]]>
-<!--end of colophon.module-->]]>
-
-<!ENTITY % toc.content.module "INCLUDE">
-<![%toc.content.module;[
-<!ENTITY % toc.module "INCLUDE">
-<![%toc.module;[
-<!ENTITY % local.toc.attrib "">
-<!ENTITY % toc.role.attrib "%role.attrib;">
-
-<!ENTITY % toc.element "INCLUDE">
-<![%toc.element;[
-<!ELEMENT toc ((%bookcomponent.title.content;)?, tocfront*,
-		(tocpart | tocchap)*, tocback*)>
-<!--end of toc.element-->]]>
-
-<!ENTITY % toc.attlist "INCLUDE">
-<![%toc.attlist;[
-<!ATTLIST toc
-		%pagenum.attrib;
-		%common.attrib;
-		%toc.role.attrib;
-		%local.toc.attrib;
->
-<!--end of toc.attlist-->]]>
-<!--end of toc.module-->]]>
-
-<!ENTITY % tocfront.module "INCLUDE">
-<![%tocfront.module;[
-<!ENTITY % local.tocfront.attrib "">
-<!ENTITY % tocfront.role.attrib "%role.attrib;">
-
-<!ENTITY % tocfront.element "INCLUDE">
-<![%tocfront.element;[
-<!ELEMENT tocfront (%para.char.mix;)*>
-<!--end of tocfront.element-->]]>
-
-<!-- to element that this entry represents -->
-
-
-<!ENTITY % tocfront.attlist "INCLUDE">
-<![%tocfront.attlist;[
-<!ATTLIST tocfront
-		%label.attrib;
-		%linkend.attrib;		%pagenum.attrib;
-		%common.attrib;
-		%tocfront.role.attrib;
-		%local.tocfront.attrib;
->
-<!--end of tocfront.attlist-->]]>
-<!--end of tocfront.module-->]]>
-
-<!ENTITY % tocentry.module "INCLUDE">
-<![%tocentry.module;[
-<!ENTITY % local.tocentry.attrib "">
-<!ENTITY % tocentry.role.attrib "%role.attrib;">
-
-<!ENTITY % tocentry.element "INCLUDE">
-<![%tocentry.element;[
-<!ELEMENT tocentry (%para.char.mix;)*>
-<!--end of tocentry.element-->]]>
-
-<!-- to element that this entry represents -->
-
-
-<!ENTITY % tocentry.attlist "INCLUDE">
-<![%tocentry.attlist;[
-<!ATTLIST tocentry
-		%linkend.attrib;		%pagenum.attrib;
-		%common.attrib;
-		%tocentry.role.attrib;
-		%local.tocentry.attrib;
->
-<!--end of tocentry.attlist-->]]>
-<!--end of tocentry.module-->]]>
-
-<!ENTITY % tocpart.module "INCLUDE">
-<![%tocpart.module;[
-<!ENTITY % local.tocpart.attrib "">
-<!ENTITY % tocpart.role.attrib "%role.attrib;">
-
-<!ENTITY % tocpart.element "INCLUDE">
-<![%tocpart.element;[
-<!ELEMENT tocpart (tocentry+, tocchap*)>
-<!--end of tocpart.element-->]]>
-
-<!ENTITY % tocpart.attlist "INCLUDE">
-<![%tocpart.attlist;[
-<!ATTLIST tocpart
-		%common.attrib;
-		%tocpart.role.attrib;
-		%local.tocpart.attrib;
->
-<!--end of tocpart.attlist-->]]>
-<!--end of tocpart.module-->]]>
-
-<!ENTITY % tocchap.module "INCLUDE">
-<![%tocchap.module;[
-<!ENTITY % local.tocchap.attrib "">
-<!ENTITY % tocchap.role.attrib "%role.attrib;">
-
-<!ENTITY % tocchap.element "INCLUDE">
-<![%tocchap.element;[
-<!ELEMENT tocchap (tocentry+, toclevel1*)>
-<!--end of tocchap.element-->]]>
-
-<!ENTITY % tocchap.attlist "INCLUDE">
-<![%tocchap.attlist;[
-<!ATTLIST tocchap
-		%label.attrib;
-		%common.attrib;
-		%tocchap.role.attrib;
-		%local.tocchap.attrib;
->
-<!--end of tocchap.attlist-->]]>
-<!--end of tocchap.module-->]]>
-
-<!ENTITY % toclevel1.module "INCLUDE">
-<![%toclevel1.module;[
-<!ENTITY % local.toclevel1.attrib "">
-<!ENTITY % toclevel1.role.attrib "%role.attrib;">
-
-<!ENTITY % toclevel1.element "INCLUDE">
-<![%toclevel1.element;[
-<!ELEMENT toclevel1 (tocentry+, toclevel2*)>
-<!--end of toclevel1.element-->]]>
-
-<!ENTITY % toclevel1.attlist "INCLUDE">
-<![%toclevel1.attlist;[
-<!ATTLIST toclevel1
-		%common.attrib;
-		%toclevel1.role.attrib;
-		%local.toclevel1.attrib;
->
-<!--end of toclevel1.attlist-->]]>
-<!--end of toclevel1.module-->]]>
-
-<!ENTITY % toclevel2.module "INCLUDE">
-<![%toclevel2.module;[
-<!ENTITY % local.toclevel2.attrib "">
-<!ENTITY % toclevel2.role.attrib "%role.attrib;">
-
-<!ENTITY % toclevel2.element "INCLUDE">
-<![%toclevel2.element;[
-<!ELEMENT toclevel2 (tocentry+, toclevel3*)>
-<!--end of toclevel2.element-->]]>
-
-<!ENTITY % toclevel2.attlist "INCLUDE">
-<![%toclevel2.attlist;[
-<!ATTLIST toclevel2
-		%common.attrib;
-		%toclevel2.role.attrib;
-		%local.toclevel2.attrib;
->
-<!--end of toclevel2.attlist-->]]>
-<!--end of toclevel2.module-->]]>
-
-<!ENTITY % toclevel3.module "INCLUDE">
-<![%toclevel3.module;[
-<!ENTITY % local.toclevel3.attrib "">
-<!ENTITY % toclevel3.role.attrib "%role.attrib;">
-
-<!ENTITY % toclevel3.element "INCLUDE">
-<![%toclevel3.element;[
-<!ELEMENT toclevel3 (tocentry+, toclevel4*)>
-<!--end of toclevel3.element-->]]>
-
-<!ENTITY % toclevel3.attlist "INCLUDE">
-<![%toclevel3.attlist;[
-<!ATTLIST toclevel3
-		%common.attrib;
-		%toclevel3.role.attrib;
-		%local.toclevel3.attrib;
->
-<!--end of toclevel3.attlist-->]]>
-<!--end of toclevel3.module-->]]>
-
-<!ENTITY % toclevel4.module "INCLUDE">
-<![%toclevel4.module;[
-<!ENTITY % local.toclevel4.attrib "">
-<!ENTITY % toclevel4.role.attrib "%role.attrib;">
-
-<!ENTITY % toclevel4.element "INCLUDE">
-<![%toclevel4.element;[
-<!ELEMENT toclevel4 (tocentry+, toclevel5*)>
-<!--end of toclevel4.element-->]]>
-
-<!ENTITY % toclevel4.attlist "INCLUDE">
-<![%toclevel4.attlist;[
-<!ATTLIST toclevel4
-		%common.attrib;
-		%toclevel4.role.attrib;
-		%local.toclevel4.attrib;
->
-<!--end of toclevel4.attlist-->]]>
-<!--end of toclevel4.module-->]]>
-
-<!ENTITY % toclevel5.module "INCLUDE">
-<![%toclevel5.module;[
-<!ENTITY % local.toclevel5.attrib "">
-<!ENTITY % toclevel5.role.attrib "%role.attrib;">
-
-<!ENTITY % toclevel5.element "INCLUDE">
-<![%toclevel5.element;[
-<!ELEMENT toclevel5 (tocentry+)>
-<!--end of toclevel5.element-->]]>
-
-<!ENTITY % toclevel5.attlist "INCLUDE">
-<![%toclevel5.attlist;[
-<!ATTLIST toclevel5
-		%common.attrib;
-		%toclevel5.role.attrib;
-		%local.toclevel5.attrib;
->
-<!--end of toclevel5.attlist-->]]>
-<!--end of toclevel5.module-->]]>
-
-<!ENTITY % tocback.module "INCLUDE">
-<![%tocback.module;[
-<!ENTITY % local.tocback.attrib "">
-<!ENTITY % tocback.role.attrib "%role.attrib;">
-
-<!ENTITY % tocback.element "INCLUDE">
-<![%tocback.element;[
-<!ELEMENT tocback (%para.char.mix;)*>
-<!--end of tocback.element-->]]>
-
-<!-- to element that this entry represents -->
-
-
-<!ENTITY % tocback.attlist "INCLUDE">
-<![%tocback.attlist;[
-<!ATTLIST tocback
-		%label.attrib;
-		%linkend.attrib;		%pagenum.attrib;
-		%common.attrib;
-		%tocback.role.attrib;
-		%local.tocback.attrib;
->
-<!--end of tocback.attlist-->]]>
-<!--end of tocback.module-->]]>
-<!--end of toc.content.module-->]]>
-
-<!ENTITY % lot.content.module "INCLUDE">
-<![%lot.content.module;[
-<!ENTITY % lot.module "INCLUDE">
-<![%lot.module;[
-<!ENTITY % local.lot.attrib "">
-<!ENTITY % lot.role.attrib "%role.attrib;">
-
-<!ENTITY % lot.element "INCLUDE">
-<![%lot.element;[
-<!ELEMENT lot ((%bookcomponent.title.content;)?, lotentry*)>
-<!--end of lot.element-->]]>
-
-<!ENTITY % lot.attlist "INCLUDE">
-<![%lot.attlist;[
-<!ATTLIST lot
-		%label.attrib;
-		%common.attrib;
-		%lot.role.attrib;
-		%local.lot.attrib;
->
-<!--end of lot.attlist-->]]>
-<!--end of lot.module-->]]>
-
-<!ENTITY % lotentry.module "INCLUDE">
-<![%lotentry.module;[
-<!ENTITY % local.lotentry.attrib "">
-<!ENTITY % lotentry.role.attrib "%role.attrib;">
-
-<!ENTITY % lotentry.element "INCLUDE">
-<![%lotentry.element;[
-<!ELEMENT lotentry (%para.char.mix;)*>
-<!--end of lotentry.element-->]]>
-
-<!-- SrcCredit: Information about the source of the entry, 
-		as for a list of illustrations -->
-<!-- linkend: to element that this entry represents-->
-<!ENTITY % lotentry.attlist "INCLUDE">
-<![%lotentry.attlist;[
-<!ATTLIST lotentry
-		srccredit	CDATA		#IMPLIED
-		%pagenum.attrib;
-		%common.attrib;
-		%linkend.attrib;
-		%lotentry.role.attrib;
-		%local.lotentry.attrib;
->
-<!--end of lotentry.attlist-->]]>
-<!--end of lotentry.module-->]]>
-<!--end of lot.content.module-->]]>
-
-<!-- ...................................................................... -->
-<!-- Appendix, Chapter, Part, Preface, Reference, PartIntro ............... -->
-
-<!ENTITY % appendix.module "INCLUDE">
-<![%appendix.module;[
-<!ENTITY % local.appendix.attrib "">
-<!ENTITY % appendix.role.attrib "%role.attrib;">
-
-<!ENTITY % appendix.element "INCLUDE">
-<![%appendix.element;[
-<!ELEMENT appendix (appendixinfo?,
-                     (%bookcomponent.title.content;), 
-                     (%nav.class;)*,
-                     tocchap?,
-                     (%bookcomponent.content;),
-                     (%nav.class;)*)>
-<!--end of appendix.element-->]]>
-
-<!ENTITY % appendix.attlist "INCLUDE">
-<![%appendix.attlist;[
-<!ATTLIST appendix
-		%label.attrib;
-		%status.attrib;
-		%common.attrib;
-		%appendix.role.attrib;
-		%local.appendix.attrib;
->
-<!--end of appendix.attlist-->]]>
-<!--end of appendix.module-->]]>
-
-<!ENTITY % chapter.module "INCLUDE">
-<![%chapter.module;[
-<!ENTITY % local.chapter.attrib "">
-<!ENTITY % chapter.role.attrib "%role.attrib;">
-
-<!ENTITY % chapter.element "INCLUDE">
-<![%chapter.element;[
-<!ELEMENT chapter (chapterinfo?,
-                    (%bookcomponent.title.content;),
-                    (%nav.class;)*,
-                    tocchap?,
-                    (%bookcomponent.content;),
-                    (%nav.class;)*)>
-<!--end of chapter.element-->]]>
-
-<!ENTITY % chapter.attlist "INCLUDE">
-<![%chapter.attlist;[
-<!ATTLIST chapter
-		%label.attrib;
-		%status.attrib;
-		%common.attrib;
-		%chapter.role.attrib;
-		%local.chapter.attrib;
->
-<!--end of chapter.attlist-->]]>
-<!--end of chapter.module-->]]>
-
-<!ENTITY % part.module "INCLUDE">
-<![%part.module;[
-
-<!-- Note that Part was to have its content model reduced in V4.1.2.  This
-change will not be made after all. -->
-
-<!ENTITY % local.part.attrib "">
-<!ENTITY % part.role.attrib "%role.attrib;">
-
-<!ENTITY % part.element "INCLUDE">
-<![%part.element;[
-<!ELEMENT part (partinfo?, (%bookcomponent.title.content;), partintro?,
-		(%partcontent.mix;)+)>
-<!--end of part.element-->]]>
-
-<!ENTITY % part.attlist "INCLUDE">
-<![%part.attlist;[
-<!ATTLIST part
-		%label.attrib;
-		%status.attrib;
-		%common.attrib;
-		%part.role.attrib;
-		%local.part.attrib;
->
-<!--end of part.attlist-->]]>
-<!--ELEMENT PartIntro (defined below)-->
-<!--end of part.module-->]]>
-
-<!ENTITY % preface.module "INCLUDE">
-<![%preface.module;[
-<!ENTITY % local.preface.attrib "">
-<!ENTITY % preface.role.attrib "%role.attrib;">
-
-<!ENTITY % preface.element "INCLUDE">
-<![%preface.element;[
-<!ELEMENT preface (prefaceinfo?,
-                    (%bookcomponent.title.content;),
-                    (%nav.class;)*,
-                    tocchap?,
-                    (%bookcomponent.content;),
-                    (%nav.class;)*)>
-<!--end of preface.element-->]]>
-
-<!ENTITY % preface.attlist "INCLUDE">
-<![%preface.attlist;[
-<!ATTLIST preface
-		%status.attrib;
-		%common.attrib;
-		%preface.role.attrib;
-		%local.preface.attrib;
->
-<!--end of preface.attlist-->]]>
-<!--end of preface.module-->]]>
-
-<!ENTITY % reference.module "INCLUDE">
-<![%reference.module;[
-<!ENTITY % local.reference.attrib "">
-<!ENTITY % reference.role.attrib "%role.attrib;">
-
-<!ENTITY % reference.element "INCLUDE">
-<![%reference.element;[
-<!ELEMENT reference (referenceinfo?,
-                     (%bookcomponent.title.content;), partintro?,
-                     (%refentry.class;)+)>
-<!--end of reference.element-->]]>
-
-<!ENTITY % reference.attlist "INCLUDE">
-<![%reference.attlist;[
-<!ATTLIST reference
-		%label.attrib;
-		%status.attrib;
-		%common.attrib;
-		%reference.role.attrib;
-		%local.reference.attrib;
->
-<!--end of reference.attlist-->]]>
-<!--ELEMENT PartIntro (defined below)-->
-<!--end of reference.module-->]]>
-
-<!ENTITY % partintro.module "INCLUDE">
-<![%partintro.module;[
-<!ENTITY % local.partintro.attrib "">
-<!ENTITY % partintro.role.attrib "%role.attrib;">
-
-<!ENTITY % partintro.element "INCLUDE">
-<![%partintro.element;[
-<!ELEMENT partintro ((%div.title.content;)?, (%bookcomponent.content;))>
-<!--end of partintro.element-->]]>
-
-<!ENTITY % partintro.attlist "INCLUDE">
-<![%partintro.attlist;[
-<!ATTLIST partintro	
-		%label.attrib;
-		%common.attrib;
-		%local.partintro.attrib;
-		%partintro.role.attrib;
->
-<!--end of partintro.attlist-->]]>
-<!--end of partintro.module-->]]>
-
-<!-- ...................................................................... -->
-<!-- Other Info elements .................................................. -->
-
-<!ENTITY % appendixinfo.module "INCLUDE">
-<![ %appendixinfo.module; [
-<!ENTITY % local.appendixinfo.attrib "">
-<!ENTITY % appendixinfo.role.attrib "%role.attrib;">
-
-<!ENTITY % appendixinfo.element "INCLUDE">
-<![ %appendixinfo.element; [
-<!ELEMENT appendixinfo ((graphic | mediaobject 
-		| legalnotice | modespec 
-		| subjectset | keywordset | itermset
-                | %bibliocomponent.mix;)+)>
-<!--end of appendixinfo.element-->]]>
-
-<!ENTITY % appendixinfo.attlist "INCLUDE">
-<![ %appendixinfo.attlist; [
-<!ATTLIST appendixinfo
-		%common.attrib;
-		%appendixinfo.role.attrib;
-		%local.appendixinfo.attrib;
->
-<!--end of appendixinfo.attlist-->]]>
-<!--end of appendixinfo.module-->]]>
-
-<!ENTITY % bibliographyinfo.module "INCLUDE">
-<![ %bibliographyinfo.module; [
-<!ENTITY % local.bibliographyinfo.attrib "">
-<!ENTITY % bibliographyinfo.role.attrib "%role.attrib;">
-
-<!ENTITY % bibliographyinfo.element "INCLUDE">
-<![ %bibliographyinfo.element; [
-<!ELEMENT bibliographyinfo ((graphic | mediaobject 
-		| legalnotice | modespec 
-		| subjectset | keywordset | itermset
-                | %bibliocomponent.mix;)+)>
-<!--end of bibliographyinfo.element-->]]>
-
-<!ENTITY % bibliographyinfo.attlist "INCLUDE">
-<![ %bibliographyinfo.attlist; [
-<!ATTLIST bibliographyinfo
-		%common.attrib;
-		%bibliographyinfo.role.attrib;
-		%local.bibliographyinfo.attrib;
->
-<!--end of bibliographyinfo.attlist-->]]>
-<!--end of bibliographyinfo.module-->]]>
-
-<!ENTITY % chapterinfo.module "INCLUDE">
-<![ %chapterinfo.module; [
-<!ENTITY % local.chapterinfo.attrib "">
-<!ENTITY % chapterinfo.role.attrib "%role.attrib;">
-
-<!ENTITY % chapterinfo.element "INCLUDE">
-<![ %chapterinfo.element; [
-<!ELEMENT chapterinfo ((graphic | mediaobject 
-		| legalnotice | modespec 
-		| subjectset | keywordset | itermset
-                | %bibliocomponent.mix;)+)>
-<!--end of chapterinfo.element-->]]>
-
-<!ENTITY % chapterinfo.attlist "INCLUDE">
-<![ %chapterinfo.attlist; [
-<!ATTLIST chapterinfo
-		%common.attrib;
-		%chapterinfo.role.attrib;
-		%local.chapterinfo.attrib;
->
-<!--end of chapterinfo.attlist-->]]>
-<!--end of chapterinfo.module-->]]>
-
-<!ENTITY % glossaryinfo.module "INCLUDE">
-<![ %glossaryinfo.module; [
-<!ENTITY % local.glossaryinfo.attrib "">
-<!ENTITY % glossaryinfo.role.attrib "%role.attrib;">
-
-<!ENTITY % glossaryinfo.element "INCLUDE">
-<![ %glossaryinfo.element; [
-<!ELEMENT glossaryinfo ((graphic | mediaobject 
-		| legalnotice | modespec 
-		| subjectset | keywordset | itermset
-                | %bibliocomponent.mix;)+)>
-<!--end of glossaryinfo.element-->]]>
-
-<!ENTITY % glossaryinfo.attlist "INCLUDE">
-<![ %glossaryinfo.attlist; [
-<!ATTLIST glossaryinfo
-		%common.attrib;
-		%glossaryinfo.role.attrib;
-		%local.glossaryinfo.attrib;
->
-<!--end of glossaryinfo.attlist-->]]>
-<!--end of glossaryinfo.module-->]]>
-
-<!ENTITY % indexinfo.module "INCLUDE">
-<![ %indexinfo.module; [
-<!ENTITY % local.indexinfo.attrib "">
-<!ENTITY % indexinfo.role.attrib "%role.attrib;">
-
-<!ENTITY % indexinfo.element "INCLUDE">
-<![ %indexinfo.element; [
-<!ELEMENT indexinfo ((graphic | mediaobject 
-		| legalnotice | modespec 
-		| subjectset | keywordset | itermset
-                | %bibliocomponent.mix;)+)>
-<!--end of indexinfo.element-->]]>
-
-<!ENTITY % indexinfo.attlist "INCLUDE">
-<![ %indexinfo.attlist; [
-<!ATTLIST indexinfo
-		%common.attrib;
-		%indexinfo.role.attrib;
-		%local.indexinfo.attrib;
->
-<!--end of indexinfo.attlist-->]]>
-<!--end of indexinfo.module-->]]>
-
-<!ENTITY % setindexinfo.module "INCLUDE">
-<![ %setindexinfo.module; [
-<!ENTITY % local.setindexinfo.attrib "">
-<!ENTITY % setindexinfo.role.attrib "%role.attrib;">
-
-<!ENTITY % setindexinfo.element "INCLUDE">
-<![ %setindexinfo.element; [
-<!ELEMENT setindexinfo ((graphic | mediaobject 
-		| legalnotice | modespec 
-		| subjectset | keywordset | itermset
-                | %bibliocomponent.mix;)+)>
-<!--end of setindexinfo.element-->]]>
-
-<!ENTITY % setindexinfo.attlist "INCLUDE">
-<![ %setindexinfo.attlist; [
-<!ATTLIST setindexinfo
-		%common.attrib;
-		%setindexinfo.role.attrib;
-		%local.setindexinfo.attrib;
->
-<!--end of setindexinfo.attlist-->]]>
-<!--end of setindexinfo.module-->]]>
-
-<!ENTITY % partinfo.module "INCLUDE">
-<![ %partinfo.module; [
-<!ENTITY % local.partinfo.attrib "">
-<!ENTITY % partinfo.role.attrib "%role.attrib;">
-
-<!ENTITY % partinfo.element "INCLUDE">
-<![ %partinfo.element; [
-<!ELEMENT partinfo ((graphic | mediaobject 
-		| legalnotice | modespec 
-		| subjectset | keywordset | itermset
-                | %bibliocomponent.mix;)+)>
-<!--end of partinfo.element-->]]>
-
-<!ENTITY % partinfo.attlist "INCLUDE">
-<![ %partinfo.attlist; [
-<!ATTLIST partinfo
-		%common.attrib;
-		%partinfo.role.attrib;
-		%local.partinfo.attrib;
->
-<!--end of partinfo.attlist-->]]>
-<!--end of partinfo.module-->]]>
-
-<!ENTITY % prefaceinfo.module "INCLUDE">
-<![ %prefaceinfo.module; [
-<!ENTITY % local.prefaceinfo.attrib "">
-<!ENTITY % prefaceinfo.role.attrib "%role.attrib;">
-
-<!ENTITY % prefaceinfo.element "INCLUDE">
-<![ %prefaceinfo.element; [
-<!ELEMENT prefaceinfo ((graphic | mediaobject 
-		| legalnotice | modespec 
-		| subjectset | keywordset | itermset
-                | %bibliocomponent.mix;)+)>
-<!--end of prefaceinfo.element-->]]>
-
-<!ENTITY % prefaceinfo.attlist "INCLUDE">
-<![ %prefaceinfo.attlist; [
-<!ATTLIST prefaceinfo
-		%common.attrib;
-		%prefaceinfo.role.attrib;
-		%local.prefaceinfo.attrib;
->
-<!--end of prefaceinfo.attlist-->]]>
-<!--end of prefaceinfo.module-->]]>
-
-<!ENTITY % refentryinfo.module "INCLUDE">
-<![ %refentryinfo.module; [
-<!ENTITY % local.refentryinfo.attrib "">
-<!ENTITY % refentryinfo.role.attrib "%role.attrib;">
-
-<!ENTITY % refentryinfo.element "INCLUDE">
-<![ %refentryinfo.element; [
-<!ELEMENT refentryinfo ((graphic | mediaobject 
-		| legalnotice | modespec 
-		| subjectset | keywordset | itermset
-                | %bibliocomponent.mix;)+)>
-<!--end of refentryinfo.element-->]]>
-
-<!ENTITY % refentryinfo.attlist "INCLUDE">
-<![ %refentryinfo.attlist; [
-<!ATTLIST refentryinfo
-		%common.attrib;
-		%refentryinfo.role.attrib;
-		%local.refentryinfo.attrib;
->
-<!--end of refentryinfo.attlist-->]]>
-<!--end of refentryinfo.module-->]]>
-
-<!ENTITY % refsect1info.module "INCLUDE">
-<![ %refsect1info.module; [
-<!ENTITY % local.refsect1info.attrib "">
-<!ENTITY % refsect1info.role.attrib "%role.attrib;">
-
-<!ENTITY % refsect1info.element "INCLUDE">
-<![ %refsect1info.element; [
-<!ELEMENT refsect1info ((graphic | mediaobject 
-		| legalnotice | modespec 
-		| subjectset | keywordset | itermset
-                | %bibliocomponent.mix;)+)>
-<!--end of refsect1info.element-->]]>
-
-<!ENTITY % refsect1info.attlist "INCLUDE">
-<![ %refsect1info.attlist; [
-<!ATTLIST refsect1info
-		%common.attrib;
-		%refsect1info.role.attrib;
-		%local.refsect1info.attrib;
->
-<!--end of refsect1info.attlist-->]]>
-<!--end of refsect1info.module-->]]>
-
-<!ENTITY % refsect2info.module "INCLUDE">
-<![ %refsect2info.module; [
-<!ENTITY % local.refsect2info.attrib "">
-<!ENTITY % refsect2info.role.attrib "%role.attrib;">
-
-<!ENTITY % refsect2info.element "INCLUDE">
-<![ %refsect2info.element; [
-<!ELEMENT refsect2info ((graphic | mediaobject 
-		| legalnotice | modespec 
-		| subjectset | keywordset | itermset
-                | %bibliocomponent.mix;)+)>
-<!--end of refsect2info.element-->]]>
-
-<!ENTITY % refsect2info.attlist "INCLUDE">
-<![ %refsect2info.attlist; [
-<!ATTLIST refsect2info
-		%common.attrib;
-		%refsect2info.role.attrib;
-		%local.refsect2info.attrib;
->
-<!--end of refsect2info.attlist-->]]>
-<!--end of refsect2info.module-->]]>
-
-<!ENTITY % refsect3info.module "INCLUDE">
-<![ %refsect3info.module; [
-<!ENTITY % local.refsect3info.attrib "">
-<!ENTITY % refsect3info.role.attrib "%role.attrib;">
-
-<!ENTITY % refsect3info.element "INCLUDE">
-<![ %refsect3info.element; [
-<!ELEMENT refsect3info ((graphic | mediaobject 
-		| legalnotice | modespec 
-		| subjectset | keywordset | itermset
-                | %bibliocomponent.mix;)+)>
-<!--end of refsect3info.element-->]]>
-
-<!ENTITY % refsect3info.attlist "INCLUDE">
-<![ %refsect3info.attlist; [
-<!ATTLIST refsect3info
-		%common.attrib;
-		%refsect3info.role.attrib;
-		%local.refsect3info.attrib;
->
-<!--end of refsect3info.attlist-->]]>
-<!--end of refsect3info.module-->]]>
-
-<!ENTITY % refsynopsisdivinfo.module "INCLUDE">
-<![ %refsynopsisdivinfo.module; [
-<!ENTITY % local.refsynopsisdivinfo.attrib "">
-<!ENTITY % refsynopsisdivinfo.role.attrib "%role.attrib;">
-
-<!ENTITY % refsynopsisdivinfo.element "INCLUDE">
-<![ %refsynopsisdivinfo.element; [
-<!ELEMENT refsynopsisdivinfo ((graphic | mediaobject 
-		| legalnotice | modespec 
-		| subjectset | keywordset | itermset
-                | %bibliocomponent.mix;)+)>
-<!--end of refsynopsisdivinfo.element-->]]>
-
-<!ENTITY % refsynopsisdivinfo.attlist "INCLUDE">
-<![ %refsynopsisdivinfo.attlist; [
-<!ATTLIST refsynopsisdivinfo
-		%common.attrib;
-		%refsynopsisdivinfo.role.attrib;
-		%local.refsynopsisdivinfo.attrib;
->
-<!--end of refsynopsisdivinfo.attlist-->]]>
-<!--end of refsynopsisdivinfo.module-->]]>
-
-<!ENTITY % referenceinfo.module "INCLUDE">
-<![ %referenceinfo.module; [
-<!ENTITY % local.referenceinfo.attrib "">
-<!ENTITY % referenceinfo.role.attrib "%role.attrib;">
-
-<!ENTITY % referenceinfo.element "INCLUDE">
-<![ %referenceinfo.element; [
-<!ELEMENT referenceinfo ((graphic | mediaobject 
-		| legalnotice | modespec 
-		| subjectset | keywordset | itermset
-                | %bibliocomponent.mix;)+)>
-<!--end of referenceinfo.element-->]]>
-
-<!ENTITY % referenceinfo.attlist "INCLUDE">
-<![ %referenceinfo.attlist; [
-<!ATTLIST referenceinfo
-		%common.attrib;
-		%referenceinfo.role.attrib;
-		%local.referenceinfo.attrib;
->
-<!--end of referenceinfo.attlist-->]]>
-<!--end of referenceinfo.module-->]]>
-
-<!ENTITY % local.sect1info.attrib "">
-<!ENTITY % sect1info.role.attrib "%role.attrib;">
-
-<!ENTITY % sect1info.element "INCLUDE">
-<![%sect1info.element;[
-<!ELEMENT sect1info ((graphic | mediaobject | legalnotice | modespec 
-	| subjectset | keywordset | itermset | %bibliocomponent.mix;)+)>
-<!--end of sect1info.element-->]]>
-
-<!ENTITY % sect1info.attlist "INCLUDE">
-<![%sect1info.attlist;[
-<!ATTLIST sect1info
-		%common.attrib;
-		%sect1info.role.attrib;
-		%local.sect1info.attrib;
->
-<!--end of sect1info.attlist-->]]>
-
-<!ENTITY % local.sect2info.attrib "">
-<!ENTITY % sect2info.role.attrib "%role.attrib;">
-
-<!ENTITY % sect2info.element "INCLUDE">
-<![%sect2info.element;[
-<!ELEMENT sect2info ((graphic | mediaobject | legalnotice | modespec 
-	| subjectset | keywordset | itermset | %bibliocomponent.mix;)+)>
-<!--end of sect2info.element-->]]>
-
-<!ENTITY % sect2info.attlist "INCLUDE">
-<![%sect2info.attlist;[
-<!ATTLIST sect2info
-		%common.attrib;
-		%sect2info.role.attrib;
-		%local.sect2info.attrib;
->
-<!--end of sect2info.attlist-->]]>
-
-<!ENTITY % local.sect3info.attrib "">
-<!ENTITY % sect3info.role.attrib "%role.attrib;">
-
-<!ENTITY % sect3info.element "INCLUDE">
-<![%sect3info.element;[
-<!ELEMENT sect3info ((graphic | mediaobject | legalnotice | modespec 
-	| subjectset | keywordset | itermset | %bibliocomponent.mix;)+)>
-<!--end of sect3info.element-->]]>
-
-<!ENTITY % sect3info.attlist "INCLUDE">
-<![%sect3info.attlist;[
-<!ATTLIST sect3info
-		%common.attrib;
-		%sect3info.role.attrib;
-		%local.sect3info.attrib;
->
-<!--end of sect3info.attlist-->]]>
-
-<!ENTITY % local.sect4info.attrib "">
-<!ENTITY % sect4info.role.attrib "%role.attrib;">
-
-<!ENTITY % sect4info.element "INCLUDE">
-<![%sect4info.element;[
-<!ELEMENT sect4info ((graphic | mediaobject | legalnotice | modespec 
-	| subjectset | keywordset | itermset | %bibliocomponent.mix;)+)>
-<!--end of sect4info.element-->]]>
-
-<!ENTITY % sect4info.attlist "INCLUDE">
-<![%sect4info.attlist;[
-<!ATTLIST sect4info
-		%common.attrib;
-		%sect4info.role.attrib;
-		%local.sect4info.attrib;
->
-<!--end of sect4info.attlist-->]]>
-
-<!ENTITY % local.sect5info.attrib "">
-<!ENTITY % sect5info.role.attrib "%role.attrib;">
-
-<!ENTITY % sect5info.element "INCLUDE">
-<![%sect5info.element;[
-<!ELEMENT sect5info ((graphic | mediaobject | legalnotice | modespec 
-	| subjectset | keywordset | itermset | %bibliocomponent.mix;)+)>
-<!--end of sect5info.element-->]]>
-
-<!ENTITY % sect5info.attlist "INCLUDE">
-<![%sect5info.attlist;[
-<!ATTLIST sect5info
-		%common.attrib;
-		%sect5info.role.attrib;
-		%local.sect5info.attrib;
->
-<!--end of sect5info.attlist-->]]>
-
-<!-- ...................................................................... -->
-<!-- Section (parallel to Sect*) ......................................... -->
-
-<!ENTITY % section.content.module "INCLUDE">
-<![ %section.content.module; [
-<!ENTITY % section.module "INCLUDE">
-<![ %section.module; [
-<!ENTITY % local.section.attrib "">
-<!ENTITY % section.role.attrib "%role.attrib;">
-
-<!ENTITY % section.element "INCLUDE">
-<![ %section.element; [
-<!ELEMENT section (sectioninfo?,
-			(%sect.title.content;),
-			(%nav.class;)*,
-			(((%divcomponent.mix;)+,
- 			  ((%refentry.class;)*|section*))
-			 | (%refentry.class;)+|section+),
-			(%nav.class;)*)>
-<!--end of section.element-->]]>
-
-<!ENTITY % section.attlist "INCLUDE">
-<![ %section.attlist; [
-<!ATTLIST section
-		%label.attrib;
-		%status.attrib;
-		%common.attrib;
-		%section.role.attrib;
-		%local.section.attrib;
->
-<!--end of section.attlist-->]]>
-<!--end of section.module-->]]>
-
-<!ENTITY % sectioninfo.module "INCLUDE">
-<![ %sectioninfo.module; [
-<!ENTITY % sectioninfo.role.attrib "%role.attrib;">
-<!ENTITY % local.sectioninfo.attrib "">
-
-<!ENTITY % sectioninfo.element "INCLUDE">
-<![ %sectioninfo.element; [
-<!ELEMENT sectioninfo ((graphic | mediaobject | legalnotice | modespec 
-	| subjectset | keywordset | itermset | %bibliocomponent.mix;)+)>
-<!--end of sectioninfo.element-->]]>
-
-<!ENTITY % sectioninfo.attlist "INCLUDE">
-<![ %sectioninfo.attlist; [
-<!ATTLIST sectioninfo
-		%common.attrib;
-		%sectioninfo.role.attrib;
-		%local.sectioninfo.attrib;
->
-<!--end of sectioninfo.attlist-->]]>
-<!--end of sectioninfo.module-->]]>
-<!--end of section.content.module-->]]>
-
-<!-- ...................................................................... -->
-<!-- Sect1, Sect2, Sect3, Sect4, Sect5 .................................... -->
-
-<!ENTITY % sect1.module "INCLUDE">
-<![%sect1.module;[
-<!ENTITY % local.sect1.attrib "">
-<!ENTITY % sect1.role.attrib "%role.attrib;">
-
-<!ENTITY % sect1.element "INCLUDE">
-<![%sect1.element;[
-<!ELEMENT sect1 (sect1info?, (%sect.title.content;), (%nav.class;)*,
-		(((%divcomponent.mix;)+, 
-		((%refentry.class;)* | sect2* | simplesect*))
-		| (%refentry.class;)+ | sect2+ | simplesect+), (%nav.class;)*)>
-<!--end of sect1.element-->]]>
-
-<!-- Renderas: Indicates the format in which the heading should
-		appear -->
-
-
-<!ENTITY % sect1.attlist "INCLUDE">
-<![%sect1.attlist;[
-<!ATTLIST sect1
-		renderas	(sect2
-				|sect3
-				|sect4
-				|sect5)		#IMPLIED
-		%label.attrib;
-		%status.attrib;
-		%common.attrib;
-		%sect1.role.attrib;
-		%local.sect1.attrib;
->
-<!--end of sect1.attlist-->]]>
-<!--end of sect1.module-->]]>
-
-<!ENTITY % sect2.module "INCLUDE">
-<![%sect2.module;[
-<!ENTITY % local.sect2.attrib "">
-<!ENTITY % sect2.role.attrib "%role.attrib;">
-
-<!ENTITY % sect2.element "INCLUDE">
-<![%sect2.element;[
-<!ELEMENT sect2 (sect2info?, (%sect.title.content;), (%nav.class;)*,
-		(((%divcomponent.mix;)+, 
-		((%refentry.class;)* | sect3* | simplesect*))
-		| (%refentry.class;)+ | sect3+ | simplesect+), (%nav.class;)*)>
-<!--end of sect2.element-->]]>
-
-<!-- Renderas: Indicates the format in which the heading should
-		appear -->
-
-
-<!ENTITY % sect2.attlist "INCLUDE">
-<![%sect2.attlist;[
-<!ATTLIST sect2
-		renderas	(sect1
-				|sect3
-				|sect4
-				|sect5)		#IMPLIED
-		%label.attrib;
-		%status.attrib;
-		%common.attrib;
-		%sect2.role.attrib;
-		%local.sect2.attrib;
->
-<!--end of sect2.attlist-->]]>
-<!--end of sect2.module-->]]>
-
-<!ENTITY % sect3.module "INCLUDE">
-<![%sect3.module;[
-<!ENTITY % local.sect3.attrib "">
-<!ENTITY % sect3.role.attrib "%role.attrib;">
-
-<!ENTITY % sect3.element "INCLUDE">
-<![%sect3.element;[
-<!ELEMENT sect3 (sect3info?, (%sect.title.content;), (%nav.class;)*,
-		(((%divcomponent.mix;)+, 
-		((%refentry.class;)* | sect4* | simplesect*))
-		| (%refentry.class;)+ | sect4+ | simplesect+), (%nav.class;)*)>
-<!--end of sect3.element-->]]>
-
-<!-- Renderas: Indicates the format in which the heading should
-		appear -->
-
-
-<!ENTITY % sect3.attlist "INCLUDE">
-<![%sect3.attlist;[
-<!ATTLIST sect3
-		renderas	(sect1
-				|sect2
-				|sect4
-				|sect5)		#IMPLIED
-		%label.attrib;
-		%status.attrib;
-		%common.attrib;
-		%sect3.role.attrib;
-		%local.sect3.attrib;
->
-<!--end of sect3.attlist-->]]>
-<!--end of sect3.module-->]]>
-
-<!ENTITY % sect4.module "INCLUDE">
-<![%sect4.module;[
-<!ENTITY % local.sect4.attrib "">
-<!ENTITY % sect4.role.attrib "%role.attrib;">
-
-<!ENTITY % sect4.element "INCLUDE">
-<![%sect4.element;[
-<!ELEMENT sect4 (sect4info?, (%sect.title.content;), (%nav.class;)*,
-		(((%divcomponent.mix;)+, 
-		((%refentry.class;)* | sect5* | simplesect*))
-		| (%refentry.class;)+ | sect5+ | simplesect+), (%nav.class;)*)>
-<!--end of sect4.element-->]]>
-
-<!-- Renderas: Indicates the format in which the heading should
-		appear -->
-
-
-<!ENTITY % sect4.attlist "INCLUDE">
-<![%sect4.attlist;[
-<!ATTLIST sect4
-		renderas	(sect1
-				|sect2
-				|sect3
-				|sect5)		#IMPLIED
-		%label.attrib;
-		%status.attrib;
-		%common.attrib;
-		%sect4.role.attrib;
-		%local.sect4.attrib;
->
-<!--end of sect4.attlist-->]]>
-<!--end of sect4.module-->]]>
-
-<!ENTITY % sect5.module "INCLUDE">
-<![%sect5.module;[
-<!ENTITY % local.sect5.attrib "">
-<!ENTITY % sect5.role.attrib "%role.attrib;">
-
-<!ENTITY % sect5.element "INCLUDE">
-<![%sect5.element;[
-<!ELEMENT sect5 (sect5info?, (%sect.title.content;), (%nav.class;)*,
-		(((%divcomponent.mix;)+, ((%refentry.class;)* | simplesect*))
-		| (%refentry.class;)+ | simplesect+), (%nav.class;)*)>
-<!--end of sect5.element-->]]>
-
-<!-- Renderas: Indicates the format in which the heading should
-		appear -->
-
-
-<!ENTITY % sect5.attlist "INCLUDE">
-<![%sect5.attlist;[
-<!ATTLIST sect5
-		renderas	(sect1
-				|sect2
-				|sect3
-				|sect4)		#IMPLIED
-		%label.attrib;
-		%status.attrib;
-		%common.attrib;
-		%sect5.role.attrib;
-		%local.sect5.attrib;
->
-<!--end of sect5.attlist-->]]>
-<!--end of sect5.module-->]]>
-
-<!ENTITY % simplesect.module "INCLUDE">
-<![%simplesect.module;[
-<!ENTITY % local.simplesect.attrib "">
-<!ENTITY % simplesect.role.attrib "%role.attrib;">
-
-<!ENTITY % simplesect.element "INCLUDE">
-<![%simplesect.element;[
-<!ELEMENT simplesect ((%sect.title.content;), (%divcomponent.mix;)+)>
-<!--end of simplesect.element-->]]>
-
-<!ENTITY % simplesect.attlist "INCLUDE">
-<![%simplesect.attlist;[
-<!ATTLIST simplesect
-		%common.attrib;
-		%simplesect.role.attrib;
-		%local.simplesect.attrib;
->
-<!--end of simplesect.attlist-->]]>
-<!--end of simplesect.module-->]]>
-
-<!-- ...................................................................... -->
-<!-- Bibliography ......................................................... -->
-
-<!ENTITY % bibliography.content.module "INCLUDE">
-<![%bibliography.content.module;[
-<!ENTITY % bibliography.module "INCLUDE">
-<![%bibliography.module;[
-<!ENTITY % local.bibliography.attrib "">
-<!ENTITY % bibliography.role.attrib "%role.attrib;">
-
-<!ENTITY % bibliography.element "INCLUDE">
-<![%bibliography.element;[
-<!ELEMENT bibliography (bibliographyinfo?,
-                        (%bookcomponent.title.content;)?,
-                        (%component.mix;)*, 
-                        (bibliodiv+ | (biblioentry|bibliomixed)+))>
-<!--end of bibliography.element-->]]>
-
-<!ENTITY % bibliography.attlist "INCLUDE">
-<![%bibliography.attlist;[
-<!ATTLIST bibliography
-		%status.attrib;
-		%common.attrib;
-		%bibliography.role.attrib;
-		%local.bibliography.attrib;
->
-<!--end of bibliography.attlist-->]]>
-<!--end of bibliography.module-->]]>
-
-<!ENTITY % bibliodiv.module "INCLUDE">
-<![%bibliodiv.module;[
-<!ENTITY % local.bibliodiv.attrib "">
-<!ENTITY % bibliodiv.role.attrib "%role.attrib;">
-
-<!ENTITY % bibliodiv.element "INCLUDE">
-<![%bibliodiv.element;[
-<!ELEMENT bibliodiv ((%sect.title.content;)?, (%component.mix;)*,
-		(biblioentry|bibliomixed)+)>
-<!--end of bibliodiv.element-->]]>
-
-<!ENTITY % bibliodiv.attlist "INCLUDE">
-<![%bibliodiv.attlist;[
-<!ATTLIST bibliodiv
-		%status.attrib;
-		%common.attrib;
-		%bibliodiv.role.attrib;
-		%local.bibliodiv.attrib;
->
-<!--end of bibliodiv.attlist-->]]>
-<!--end of bibliodiv.module-->]]>
-<!--end of bibliography.content.module-->]]>
-
-<!-- ...................................................................... -->
-<!-- Glossary ............................................................. -->
-
-<!ENTITY % glossary.content.module "INCLUDE">
-<![%glossary.content.module;[
-<!ENTITY % glossary.module "INCLUDE">
-<![%glossary.module;[
-<!ENTITY % local.glossary.attrib "">
-<!ENTITY % glossary.role.attrib "%role.attrib;">
-
-<!ENTITY % glossary.element "INCLUDE">
-<![%glossary.element;[
-<!ELEMENT glossary (glossaryinfo?,
-                    (%bookcomponent.title.content;)?,
-                    (%component.mix;)*,
-                    (glossdiv+ | glossentry+), bibliography?)>
-<!--end of glossary.element-->]]>
-
-<!ENTITY % glossary.attlist "INCLUDE">
-<![%glossary.attlist;[
-<!ATTLIST glossary
-		%status.attrib;
-		%common.attrib;
-		%glossary.role.attrib;
-		%local.glossary.attrib;
->
-<!--end of glossary.attlist-->]]>
-<!--end of glossary.module-->]]>
-
-<!ENTITY % glossdiv.module "INCLUDE">
-<![%glossdiv.module;[
-<!ENTITY % local.glossdiv.attrib "">
-<!ENTITY % glossdiv.role.attrib "%role.attrib;">
-
-<!ENTITY % glossdiv.element "INCLUDE">
-<![%glossdiv.element;[
-<!ELEMENT glossdiv ((%sect.title.content;), (%component.mix;)*,
-		glossentry+)>
-<!--end of glossdiv.element-->]]>
-
-<!ENTITY % glossdiv.attlist "INCLUDE">
-<![%glossdiv.attlist;[
-<!ATTLIST glossdiv
-		%status.attrib;
-		%common.attrib;
-		%glossdiv.role.attrib;
-		%local.glossdiv.attrib;
->
-<!--end of glossdiv.attlist-->]]>
-<!--end of glossdiv.module-->]]>
-<!--end of glossary.content.module-->]]>
-
-<!-- ...................................................................... -->
-<!-- Index and SetIndex ................................................... -->
-
-<!ENTITY % index.content.module "INCLUDE">
-<![%index.content.module;[
-<!ENTITY % indexes.module "INCLUDE">
-<![%indexes.module;[
-<!ENTITY % local.indexes.attrib "">
-<!ENTITY % indexes.role.attrib "%role.attrib;">
-
-<!ENTITY % index.element "INCLUDE">
-<![%index.element;[
-<!ELEMENT index (indexinfo?,
-                 (%bookcomponent.title.content;)?,
-                 (%component.mix;)*,
-                 (indexdiv* | indexentry*))>
-<!--end of index.element-->]]>
-
-<!ENTITY % index.attlist "INCLUDE">
-<![%index.attlist;[
-<!ATTLIST index
-		%common.attrib;
-		%indexes.role.attrib;
-		%local.indexes.attrib;
->
-<!--end of index.attlist-->]]>
-
-<!ENTITY % setindex.element "INCLUDE">
-<![%setindex.element;[
-<!ELEMENT setindex (setindexinfo?,
-                    (%bookcomponent.title.content;)?,
-                    (%component.mix;)*, (indexdiv* | indexentry*))>
-<!--end of setindex.element-->]]>
-
-<!ENTITY % setindex.attlist "INCLUDE">
-<![%setindex.attlist;[
-<!ATTLIST setindex
-		%common.attrib;
-		%indexes.role.attrib;
-		%local.indexes.attrib;
->
-<!--end of setindex.attlist-->]]>
-<!--end of indexes.module-->]]>
-
-<!ENTITY % indexdiv.module "INCLUDE">
-<![%indexdiv.module;[
-
-<!-- SegmentedList in this content is useful for marking up permuted
-     indices. -->
-
-<!ENTITY % local.indexdiv.attrib "">
-<!ENTITY % indexdiv.role.attrib "%role.attrib;">
-
-<!ENTITY % indexdiv.element "INCLUDE">
-<![%indexdiv.element;[
-<!ELEMENT indexdiv ((%sect.title.content;)?, ((%indexdivcomponent.mix;)*,
-		(indexentry+ | segmentedlist)))>
-<!--end of indexdiv.element-->]]>
-
-<!ENTITY % indexdiv.attlist "INCLUDE">
-<![%indexdiv.attlist;[
-<!ATTLIST indexdiv
-		%common.attrib;
-		%indexdiv.role.attrib;
-		%local.indexdiv.attrib;
->
-<!--end of indexdiv.attlist-->]]>
-<!--end of indexdiv.module-->]]>
-
-<!ENTITY % indexentry.module "INCLUDE">
-<![%indexentry.module;[
-<!-- Index entries appear in the index, not the text. -->
-
-<!ENTITY % local.indexentry.attrib "">
-<!ENTITY % indexentry.role.attrib "%role.attrib;">
-
-<!ENTITY % indexentry.element "INCLUDE">
-<![%indexentry.element;[
-<!ELEMENT indexentry (primaryie, (seeie|seealsoie)*,
-		(secondaryie, (seeie|seealsoie|tertiaryie)*)*)>
-<!--end of indexentry.element-->]]>
-
-<!ENTITY % indexentry.attlist "INCLUDE">
-<![%indexentry.attlist;[
-<!ATTLIST indexentry
-		%common.attrib;
-		%indexentry.role.attrib;
-		%local.indexentry.attrib;
->
-<!--end of indexentry.attlist-->]]>
-<!--end of indexentry.module-->]]>
-
-<!ENTITY % primsecterie.module "INCLUDE">
-<![%primsecterie.module;[
-<!ENTITY % local.primsecterie.attrib "">
-<!ENTITY % primsecterie.role.attrib "%role.attrib;">
-
-<!ENTITY % primaryie.element "INCLUDE">
-<![%primaryie.element;[
-<!ELEMENT primaryie (%ndxterm.char.mix;)*>
-<!--end of primaryie.element-->]]>
-
-<!-- to IndexTerms that these entries represent -->
-
-<!ENTITY % primaryie.attlist "INCLUDE">
-<![%primaryie.attlist;[
-<!ATTLIST primaryie
-		%linkends.attrib;		%common.attrib;
-		%primsecterie.role.attrib;
-		%local.primsecterie.attrib;
->
-<!--end of primaryie.attlist-->]]>
-
-<!ENTITY % secondaryie.element "INCLUDE">
-<![%secondaryie.element;[
-<!ELEMENT secondaryie (%ndxterm.char.mix;)*>
-<!--end of secondaryie.element-->]]>
-
-<!-- to IndexTerms that these entries represent -->
-
-<!ENTITY % secondaryie.attlist "INCLUDE">
-<![%secondaryie.attlist;[
-<!ATTLIST secondaryie
-		%linkends.attrib;		%common.attrib;
-		%primsecterie.role.attrib;
-		%local.primsecterie.attrib;
->
-<!--end of secondaryie.attlist-->]]>
-
-<!ENTITY % tertiaryie.element "INCLUDE">
-<![%tertiaryie.element;[
-<!ELEMENT tertiaryie (%ndxterm.char.mix;)*>
-<!--end of tertiaryie.element-->]]>
-
-<!-- to IndexTerms that these entries represent -->
-
-<!ENTITY % tertiaryie.attlist "INCLUDE">
-<![%tertiaryie.attlist;[
-<!ATTLIST tertiaryie
-		%linkends.attrib;		%common.attrib;
-		%primsecterie.role.attrib;
-		%local.primsecterie.attrib;
->
-<!--end of tertiaryie.attlist-->]]>
-
-<!--end of primsecterie.module-->]]>
-	
-<!ENTITY % seeie.module "INCLUDE">
-<![%seeie.module;[
-<!ENTITY % local.seeie.attrib "">
-<!ENTITY % seeie.role.attrib "%role.attrib;">
-
-<!ENTITY % seeie.element "INCLUDE">
-<![%seeie.element;[
-<!ELEMENT seeie (%ndxterm.char.mix;)*>
-<!--end of seeie.element-->]]>
-
-<!-- to IndexEntry to look up -->
-
-
-<!ENTITY % seeie.attlist "INCLUDE">
-<![%seeie.attlist;[
-<!ATTLIST seeie
-		%linkend.attrib;		%common.attrib;
-		%seeie.role.attrib;
-		%local.seeie.attrib;
->
-<!--end of seeie.attlist-->]]>
-<!--end of seeie.module-->]]>
-
-<!ENTITY % seealsoie.module "INCLUDE">
-<![%seealsoie.module;[
-<!ENTITY % local.seealsoie.attrib "">
-<!ENTITY % seealsoie.role.attrib "%role.attrib;">
-
-<!ENTITY % seealsoie.element "INCLUDE">
-<![%seealsoie.element;[
-<!ELEMENT seealsoie (%ndxterm.char.mix;)*>
-<!--end of seealsoie.element-->]]>
-
-<!-- to related IndexEntries -->
-
-
-<!ENTITY % seealsoie.attlist "INCLUDE">
-<![%seealsoie.attlist;[
-<!ATTLIST seealsoie
-		%linkends.attrib;		%common.attrib;
-		%seealsoie.role.attrib;
-		%local.seealsoie.attrib;
->
-<!--end of seealsoie.attlist-->]]>
-<!--end of seealsoie.module-->]]>
-<!--end of index.content.module-->]]>
-
-<!-- ...................................................................... -->
-<!-- RefEntry ............................................................. -->
-
-<!ENTITY % refentry.content.module "INCLUDE">
-<![%refentry.content.module;[
-<!ENTITY % refentry.module "INCLUDE">
-<![%refentry.module;[
-<!ENTITY % local.refentry.attrib "">
-<!ENTITY % refentry.role.attrib "%role.attrib;">
-
-<!ENTITY % refentry.element "INCLUDE">
-<![%refentry.element;[
-<!ELEMENT refentry ((%ndxterm.class;)*,
-                    refentryinfo?, refmeta?, (remark|%link.char.class;)*,
-                    refnamediv, refsynopsisdiv?, refsect1+)>
-<!--end of refentry.element-->]]>
-
-<!ENTITY % refentry.attlist "INCLUDE">
-<![%refentry.attlist;[
-<!ATTLIST refentry
-		%status.attrib;
-		%common.attrib;
-		%refentry.role.attrib;
-		%local.refentry.attrib;
->
-<!--end of refentry.attlist-->]]>
-<!--end of refentry.module-->]]>
-
-<!ENTITY % refmeta.module "INCLUDE">
-<![%refmeta.module;[
-<!ENTITY % local.refmeta.attrib "">
-<!ENTITY % refmeta.role.attrib "%role.attrib;">
-
-<!ENTITY % refmeta.element "INCLUDE">
-<![%refmeta.element;[
-<!ELEMENT refmeta ((%ndxterm.class;)*,
-                   refentrytitle, manvolnum?, refmiscinfo*,
-                   (%ndxterm.class;)*)>
-<!--end of refmeta.element-->]]>
-
-<!ENTITY % refmeta.attlist "INCLUDE">
-<![%refmeta.attlist;[
-<!ATTLIST refmeta
-		%common.attrib;
-		%refmeta.role.attrib;
-		%local.refmeta.attrib;
->
-<!--end of refmeta.attlist-->]]>
-<!--end of refmeta.module-->]]>
-
-<!ENTITY % refmiscinfo.module "INCLUDE">
-<![%refmiscinfo.module;[
-<!ENTITY % local.refmiscinfo.attrib "">
-<!ENTITY % refmiscinfo.role.attrib "%role.attrib;">
-
-<!ENTITY % refmiscinfo.element "INCLUDE">
-<![%refmiscinfo.element;[
-<!ELEMENT refmiscinfo (%docinfo.char.mix;)*>
-<!--end of refmiscinfo.element-->]]>
-
-<!-- Class: Freely assignable parameter; no default -->
-
-
-<!ENTITY % refmiscinfo.attlist "INCLUDE">
-<![%refmiscinfo.attlist;[
-<!ATTLIST refmiscinfo
-		class		CDATA		#IMPLIED
-		%common.attrib;
-		%refmiscinfo.role.attrib;
-		%local.refmiscinfo.attrib;
->
-<!--end of refmiscinfo.attlist-->]]>
-<!--end of refmiscinfo.module-->]]>
-
-<!ENTITY % refnamediv.module "INCLUDE">
-<![%refnamediv.module;[
-<!ENTITY % local.refnamediv.attrib "">
-<!ENTITY % refnamediv.role.attrib "%role.attrib;">
-
-<!ENTITY % refnamediv.element "INCLUDE">
-<![%refnamediv.element;[
-<!ELEMENT refnamediv (refdescriptor?, refname+, refpurpose, refclass*,
-		(remark|%link.char.class;)*)>
-<!--end of refnamediv.element-->]]>
-
-<!ENTITY % refnamediv.attlist "INCLUDE">
-<![%refnamediv.attlist;[
-<!ATTLIST refnamediv
-		%common.attrib;
-		%refnamediv.role.attrib;
-		%local.refnamediv.attrib;
->
-<!--end of refnamediv.attlist-->]]>
-<!--end of refnamediv.module-->]]>
-	
-<!ENTITY % refdescriptor.module "INCLUDE">
-<![%refdescriptor.module;[
-<!ENTITY % local.refdescriptor.attrib "">
-<!ENTITY % refdescriptor.role.attrib "%role.attrib;">
-
-<!ENTITY % refdescriptor.element "INCLUDE">
-<![%refdescriptor.element;[
-<!ELEMENT refdescriptor (%refname.char.mix;)*>
-<!--end of refdescriptor.element-->]]>
-
-<!ENTITY % refdescriptor.attlist "INCLUDE">
-<![%refdescriptor.attlist;[
-<!ATTLIST refdescriptor
-		%common.attrib;
-		%refdescriptor.role.attrib;
-		%local.refdescriptor.attrib;
->
-<!--end of refdescriptor.attlist-->]]>
-<!--end of refdescriptor.module-->]]>
-
-<!ENTITY % refname.module "INCLUDE">
-<![%refname.module;[
-<!ENTITY % local.refname.attrib "">
-<!ENTITY % refname.role.attrib "%role.attrib;">
-
-<!ENTITY % refname.element "INCLUDE">
-<![%refname.element;[
-<!ELEMENT refname (%refname.char.mix;)*>
-<!--end of refname.element-->]]>
-
-<!ENTITY % refname.attlist "INCLUDE">
-<![%refname.attlist;[
-<!ATTLIST refname
-		%common.attrib;
-		%refname.role.attrib;
-		%local.refname.attrib;
->
-<!--end of refname.attlist-->]]>
-<!--end of refname.module-->]]>
-
-<!ENTITY % refpurpose.module "INCLUDE">
-<![%refpurpose.module;[
-<!ENTITY % local.refpurpose.attrib "">
-<!ENTITY % refpurpose.role.attrib "%role.attrib;">
-
-<!ENTITY % refpurpose.element "INCLUDE">
-<![%refpurpose.element;[
-<!ELEMENT refpurpose (%refinline.char.mix;)*>
-<!--end of refpurpose.element-->]]>
-
-<!ENTITY % refpurpose.attlist "INCLUDE">
-<![%refpurpose.attlist;[
-<!ATTLIST refpurpose
-		%common.attrib;
-		%refpurpose.role.attrib;
-		%local.refpurpose.attrib;
->
-<!--end of refpurpose.attlist-->]]>
-<!--end of refpurpose.module-->]]>
-
-<!ENTITY % refclass.module "INCLUDE">
-<![%refclass.module;[
-<!ENTITY % local.refclass.attrib "">
-<!ENTITY % refclass.role.attrib "%role.attrib;">
-
-<!ENTITY % refclass.element "INCLUDE">
-<![%refclass.element;[
-<!ELEMENT refclass (%refclass.char.mix;)*>
-<!--end of refclass.element-->]]>
-
-<!ENTITY % refclass.attlist "INCLUDE">
-<![%refclass.attlist;[
-<!ATTLIST refclass
-		%common.attrib;
-		%refclass.role.attrib;
-		%local.refclass.attrib;
->
-<!--end of refclass.attlist-->]]>
-<!--end of refclass.module-->]]>
-
-<!ENTITY % refsynopsisdiv.module "INCLUDE">
-<![%refsynopsisdiv.module;[
-<!ENTITY % local.refsynopsisdiv.attrib "">
-<!ENTITY % refsynopsisdiv.role.attrib "%role.attrib;">
-
-<!ENTITY % refsynopsisdiv.element "INCLUDE">
-<![%refsynopsisdiv.element;[
-<!ELEMENT refsynopsisdiv (refsynopsisdivinfo?, (%refsect.title.content;)?,
-		(((%refcomponent.mix;)+, refsect2*) | (refsect2+)))>
-<!--end of refsynopsisdiv.element-->]]>
-
-<!ENTITY % refsynopsisdiv.attlist "INCLUDE">
-<![%refsynopsisdiv.attlist;[
-<!ATTLIST refsynopsisdiv
-		%common.attrib;
-		%refsynopsisdiv.role.attrib;
-		%local.refsynopsisdiv.attrib;
->
-<!--end of refsynopsisdiv.attlist-->]]>
-<!--end of refsynopsisdiv.module-->]]>
-
-<!ENTITY % refsect1.module "INCLUDE">
-<![%refsect1.module;[
-<!ENTITY % local.refsect1.attrib "">
-<!ENTITY % refsect1.role.attrib "%role.attrib;">
-
-<!ENTITY % refsect1.element "INCLUDE">
-<![%refsect1.element;[
-<!ELEMENT refsect1 (refsect1info?, (%refsect.title.content;),
-		(((%refcomponent.mix;)+, refsect2*) | refsect2+))>
-<!--end of refsect1.element-->]]>
-
-<!ENTITY % refsect1.attlist "INCLUDE">
-<![%refsect1.attlist;[
-<!ATTLIST refsect1
-		%status.attrib;
-		%common.attrib;
-		%refsect1.role.attrib;
-		%local.refsect1.attrib;
->
-<!--end of refsect1.attlist-->]]>
-<!--end of refsect1.module-->]]>
-
-<!ENTITY % refsect2.module "INCLUDE">
-<![%refsect2.module;[
-<!ENTITY % local.refsect2.attrib "">
-<!ENTITY % refsect2.role.attrib "%role.attrib;">
-
-<!ENTITY % refsect2.element "INCLUDE">
-<![%refsect2.element;[
-<!ELEMENT refsect2 (refsect2info?, (%refsect.title.content;),
-	(((%refcomponent.mix;)+, refsect3*) | refsect3+))>
-<!--end of refsect2.element-->]]>
-
-<!ENTITY % refsect2.attlist "INCLUDE">
-<![%refsect2.attlist;[
-<!ATTLIST refsect2
-		%status.attrib;
-		%common.attrib;
-		%refsect2.role.attrib;
-		%local.refsect2.attrib;
->
-<!--end of refsect2.attlist-->]]>
-<!--end of refsect2.module-->]]>
-
-<!ENTITY % refsect3.module "INCLUDE">
-<![%refsect3.module;[
-<!ENTITY % local.refsect3.attrib "">
-<!ENTITY % refsect3.role.attrib "%role.attrib;">
-
-<!ENTITY % refsect3.element "INCLUDE">
-<![%refsect3.element;[
-<!ELEMENT refsect3 (refsect3info?, (%refsect.title.content;), 
-	(%refcomponent.mix;)+)>
-<!--end of refsect3.element-->]]>
-
-<!ENTITY % refsect3.attlist "INCLUDE">
-<![%refsect3.attlist;[
-<!ATTLIST refsect3
-		%status.attrib;
-		%common.attrib;
-		%refsect3.role.attrib;
-		%local.refsect3.attrib;
->
-<!--end of refsect3.attlist-->]]>
-<!--end of refsect3.module-->]]>
-<!--end of refentry.content.module-->]]>
-
-<!-- ...................................................................... -->
-<!-- Article .............................................................. -->
-
-<!ENTITY % article.module "INCLUDE">
-<![%article.module;[
-<!-- An Article is a chapter-level, stand-alone document that is often,
-     but need not be, collected into a Book. -->
-
-<!ENTITY % local.article.attrib "">
-<!ENTITY % article.role.attrib "%role.attrib;">
-
-<!ENTITY % article.element "INCLUDE">
-<![%article.element;[
-<!ELEMENT article ((%div.title.content;)?, articleinfo?, tocchap?, lot*,
-			(%bookcomponent.content;),
-			((%nav.class;) | (%appendix.class;) | ackno)*)>
-<!--end of article.element-->]]>
-
-<!-- Class: Indicates the type of a particular article;
-		all articles have the same structure and general purpose.
-		No default. -->
-<!-- ParentBook: ID of the enclosing Book -->
-
-
-<!ENTITY % article.attlist "INCLUDE">
-<![%article.attlist;[
-<!ATTLIST article
-		class		(journalarticle
-				|productsheet
-				|whitepaper
-				|techreport
-                                |specification
-				|faq)		#IMPLIED
-		parentbook	IDREF		#IMPLIED
-		%status.attrib;
-		%common.attrib;
-		%article.role.attrib;
-		%local.article.attrib;
->
-<!--end of article.attlist-->]]>
-<!--end of article.module-->]]>
-
-<!-- End of DocBook XML document hierarchy module V4.1.2 .................... -->
-<!-- ...................................................................... -->
diff --git a/3.0.4/doc/src/common/dbnotnx.mod b/3.0.4/doc/src/common/dbnotnx.mod
deleted file mode 100644
index 0ea4c44..0000000
--- a/3.0.4/doc/src/common/dbnotnx.mod
+++ /dev/null
@@ -1,97 +0,0 @@
-<!-- ...................................................................... -->
-<!-- DocBook XML notations module V4.1.2 .................................... -->
-<!-- File dbnotnx.mod ..................................................... -->
-
-<!-- Copyright 1992-2000 HaL Computer Systems, Inc.,
-     O'Reilly & Associates, Inc., ArborText, Inc., Fujitsu Software
-     Corporation, Norman Walsh, and the Organization for the Advancement
-     of Structured Information Standards (OASIS).
-
-     $Id: dbnotnx.mod,v 1.10 2000/08/27 15:12:42 nwalsh Exp $
-
-     Permission to use, copy, modify and distribute the DocBook XML DTD
-     and its accompanying documentation for any purpose and without fee
-     is hereby granted in perpetuity, provided that the above copyright
-     notice and this paragraph appear in all copies.  The copyright
-     holders make no representation about the suitability of the DTD for
-     any purpose.  It is provided "as is" without expressed or implied
-     warranty.
-
-     If you modify the DocBook DTD in any way, except for declaring and
-     referencing additional sets of general entities and declaring
-     additional notations, label your DTD as a variant of DocBook.  See
-     the maintenance documentation for more information.
-
-     Please direct all questions, bug reports, or suggestions for
-     changes to the docbook@lists.oasis-open.org mailing list. For more
-     information, see http://www.oasis-open.org/docbook/.
--->
-
-<!-- ...................................................................... -->
-
-<!-- This module contains the entity declarations for the standard ISO
-     entity sets used by DocBook.
-
-     In DTD driver files referring to this module, please use an entity
-     declaration that uses the public identifier shown below:
-
-     <!ENTITY % dbnotn PUBLIC
-     "-//OASIS//ENTITIES DocBook XML Notations V4.1.2//EN"
-     "dbnotnx.mod">
-     %dbnotn;
-
-     See the documentation for detailed information on the parameter
-     entity and module scheme used in DocBook, customizing DocBook and
-     planning for interchange, and changes made since the last release
-     of DocBook.
--->
-
-<!ENTITY % local.notation.class "">
-<!ENTITY % notation.class
-		"BMP| CGM-CHAR | CGM-BINARY | CGM-CLEAR | DITROFF | DVI
-		| EPS | EQN | FAX | GIF | GIF87a | GIF89a 
-		| JPG | JPEG | IGES | PCX
-		| PIC | PNG | PS | SGML | TBL | TEX | TIFF | WMF | WPG
-		| linespecific
-		%local.notation.class;">
-
-<!NOTATION BMP		PUBLIC
-"+//ISBN 0-7923-9432-1::Graphic Notation//NOTATION Microsoft Windows bitmap//EN">
-<!NOTATION CGM-CHAR	PUBLIC "ISO 8632/2//NOTATION Character encoding//EN">
-<!NOTATION CGM-BINARY	PUBLIC "ISO 8632/3//NOTATION Binary encoding//EN">
-<!NOTATION CGM-CLEAR	PUBLIC "ISO 8632/4//NOTATION Clear text encoding//EN">
-<!NOTATION DITROFF	SYSTEM "DITROFF">
-<!NOTATION DVI		SYSTEM "DVI">
-<!NOTATION EPS		PUBLIC 
-"+//ISBN 0-201-18127-4::Adobe//NOTATION PostScript Language Ref. Manual//EN">
-<!NOTATION EQN		SYSTEM "EQN">
-<!NOTATION FAX		PUBLIC 
-"-//USA-DOD//NOTATION CCITT Group 4 Facsimile Type 1 Untiled Raster//EN">
-<!NOTATION GIF		SYSTEM "GIF">
-<!NOTATION GIF87a               PUBLIC
-"-//CompuServe//NOTATION Graphics Interchange Format 87a//EN">
-
-<!NOTATION GIF89a               PUBLIC
-"-//CompuServe//NOTATION Graphics Interchange Format 89a//EN">
-<!NOTATION JPG		SYSTEM "JPG">
-<!NOTATION JPEG		SYSTEM "JPG">
-<!NOTATION IGES		PUBLIC 
-"-//USA-DOD//NOTATION (ASME/ANSI Y14.26M-1987) Initial Graphics Exchange Specification//EN">
-<!NOTATION PCX		PUBLIC 
-"+//ISBN 0-7923-9432-1::Graphic Notation//NOTATION ZSoft PCX bitmap//EN">
-<!NOTATION PIC		SYSTEM "PIC">
-<!NOTATION PNG          SYSTEM "http://www.w3.org/TR/REC-png">
-<!NOTATION PS		SYSTEM "PS">
-<!NOTATION SGML		PUBLIC 
-"ISO 8879:1986//NOTATION Standard Generalized Markup Language//EN">
-<!NOTATION TBL		SYSTEM "TBL">
-<!NOTATION TEX		PUBLIC 
-"+//ISBN 0-201-13448-9::Knuth//NOTATION The TeXbook//EN">
-<!NOTATION TIFF		SYSTEM "TIFF">
-<!NOTATION WMF		PUBLIC 
-"+//ISBN 0-7923-9432-1::Graphic Notation//NOTATION Microsoft Windows Metafile//EN">
-<!NOTATION WPG		SYSTEM "WPG"> <!--WordPerfect Graphic format-->
-<!NOTATION linespecific	SYSTEM "linespecific">
-
-<!-- End of DocBook XML notations module V4.1.2 ............................. -->
-<!-- ...................................................................... -->
diff --git a/3.0.4/doc/src/common/dbpoolx.mod b/3.0.4/doc/src/common/dbpoolx.mod
deleted file mode 100644
index 9fe5d9a..0000000
--- a/3.0.4/doc/src/common/dbpoolx.mod
+++ /dev/null
@@ -1,7516 +0,0 @@
-<!-- ...................................................................... -->
-<!-- DocBook XML information pool module V4.1.2 ............................. -->
-<!-- File dbpoolx.mod ..................................................... -->
-
-<!-- Copyright 1992-2000 HaL Computer Systems, Inc.,
-     O'Reilly & Associates, Inc., ArborText, Inc., Fujitsu Software
-     Corporation, Norman Walsh and the Organization for the Advancement
-     of Structured Information Standards (OASIS).
-
-     $Id: dbpoolx.mod,v 1.19 2000/08/27 15:12:42 nwalsh Exp $
-
-     Permission to use, copy, modify and distribute the DocBook XML DTD
-     and its accompanying documentation for any purpose and without fee
-     is hereby granted in perpetuity, provided that the above copyright
-     notice and this paragraph appear in all copies.  The copyright
-     holders make no representation about the suitability of the DTD for
-     any purpose.  It is provided "as is" without expressed or implied
-     warranty.
-
-     If you modify the DocBook XML DTD in any way, except for declaring and
-     referencing additional sets of general entities and declaring
-     additional notations, label your DTD as a variant of DocBook.  See
-     the maintenance documentation for more information.
-
-     Please direct all questions, bug reports, or suggestions for
-     changes to the docbook@lists.oasis-open.org mailing list. For more
-     information, see http://www.oasis-open.org/docbook/.
--->
-
-<!-- ...................................................................... -->
-
-<!-- This module contains the definitions for the objects, inline
-     elements, and so on that are available to be used as the main
-     content of DocBook documents.  Some elements are useful for general
-     publishing, and others are useful specifically for computer
-     documentation.
-
-     This module has the following dependencies on other modules:
-
-     o It assumes that a %notation.class; entity is defined by the
-       driver file or other high-level module.  This entity is
-       referenced in the NOTATION attributes for the graphic-related and
-       ModeSpec elements.
-
-     o It assumes that an appropriately parameterized table module is
-       available for use with the table-related elements.
-
-     In DTD driver files referring to this module, please use an entity
-     declaration that uses the public identifier shown below:
-
-     <!ENTITY % dbpool PUBLIC
-     "-//OASIS//ELEMENTS DocBook XML Information Pool V4.1.2//EN"
-     "dbpoolx.mod">
-     %dbpool;
-
-     See the documentation for detailed information on the parameter
-     entity and module scheme used in DocBook, customizing DocBook and
-     planning for interchange, and changes made since the last release
-     of DocBook.
--->
-
-<!-- ...................................................................... -->
-<!-- General-purpose semantics entities ................................... -->
-
-<!ENTITY % yesorno.attvals	"CDATA">
-
-<!-- ...................................................................... -->
-<!-- Entities for module inclusions ....................................... -->
-
-<!ENTITY % dbpool.redecl.module "IGNORE">
-
-<!-- ...................................................................... -->
-<!-- Entities for element classes and mixtures ............................ -->
-
-<!-- "Ubiquitous" classes: ndxterm.class and beginpage -->
-
-<!ENTITY % local.ndxterm.class "">
-<!ENTITY % ndxterm.class
-		"indexterm %local.ndxterm.class;">
-
-<!-- Object-level classes ................................................. -->
-
-<!ENTITY % local.list.class "">
-<!ENTITY % list.class
-		"calloutlist|glosslist|itemizedlist|orderedlist|segmentedlist
-		|simplelist|variablelist %local.list.class;">
-
-<!ENTITY % local.admon.class "">
-<!ENTITY % admon.class
-		"caution|important|note|tip|warning %local.admon.class;">
-
-<!ENTITY % local.linespecific.class "">
-<!ENTITY % linespecific.class
-		"literallayout|programlisting|programlistingco|screen
-		|screenco|screenshot %local.linespecific.class;">
-
-<!ENTITY % local.method.synop.class "">
-<!ENTITY % method.synop.class
-		"constructorsynopsis
-                 |destructorsynopsis
-                 |methodsynopsis %local.method.synop.class;">
-
-<!ENTITY % local.synop.class "">
-<!ENTITY % synop.class
-		"synopsis|cmdsynopsis|funcsynopsis
-                 |classsynopsis|fieldsynopsis
-                 |%method.synop.class; %local.synop.class;">
-
-<!ENTITY % local.para.class "">
-<!ENTITY % para.class
-		"formalpara|para|simpara %local.para.class;">
-
-<!ENTITY % local.informal.class "">
-<!ENTITY % informal.class
-		"address|blockquote
-                |graphic|graphicco|mediaobject|mediaobjectco
-                |informalequation
-		|informalexample
-                |informalfigure
-                |informaltable %local.informal.class;">
-
-<!ENTITY % local.formal.class "">
-<!ENTITY % formal.class
-		"equation|example|figure|table %local.formal.class;">
-
-<!-- The DocBook TC may produce an official EBNF module for DocBook. -->
-<!-- This PE provides the hook by which it can be inserted into the DTD. -->
-<!ENTITY % ebnf.block.hook "">
-
-<!ENTITY % local.compound.class "">
-<!ENTITY % compound.class
-		"msgset|procedure|sidebar|qandaset
-                 %ebnf.block.hook;
-                 %local.compound.class;">
-
-<!ENTITY % local.genobj.class "">
-<!ENTITY % genobj.class
-		"anchor|bridgehead|remark|highlights
-		%local.genobj.class;">
-
-<!ENTITY % local.descobj.class "">
-<!ENTITY % descobj.class
-		"abstract|authorblurb|epigraph
-		%local.descobj.class;">
-
-<!-- Character-level classes .............................................. -->
-
-<!ENTITY % local.xref.char.class "">
-<!ENTITY % xref.char.class
-		"footnoteref|xref %local.xref.char.class;">
-
-<!ENTITY % local.gen.char.class "">
-<!ENTITY % gen.char.class
-		"abbrev|acronym|citation|citerefentry|citetitle|emphasis
-		|firstterm|foreignphrase|glossterm|footnote|phrase
-		|quote|trademark|wordasword %local.gen.char.class;">
-
-<!ENTITY % local.link.char.class "">
-<!ENTITY % link.char.class
-		"link|olink|ulink %local.link.char.class;">
-
-<!-- The DocBook TC may produce an official EBNF module for DocBook. -->
-<!-- This PE provides the hook by which it can be inserted into the DTD. -->
-<!ENTITY % ebnf.inline.hook "">
-
-<!ENTITY % local.tech.char.class "">
-<!ENTITY % tech.char.class
-		"action|application
-                |classname|methodname|interfacename|exceptionname
-                |ooclass|oointerface|ooexception
-                |command|computeroutput
-		|database|email|envar|errorcode|errorname|errortype|filename
-		|function|guibutton|guiicon|guilabel|guimenu|guimenuitem
-		|guisubmenu|hardware|interface|keycap
-		|keycode|keycombo|keysym|literal|constant|markup|medialabel
-		|menuchoice|mousebutton|option|optional|parameter
-		|prompt|property|replaceable|returnvalue|sgmltag|structfield
-		|structname|symbol|systemitem|token|type|userinput|varname
-                %ebnf.inline.hook;
-		%local.tech.char.class;">
-
-<!ENTITY % local.base.char.class "">
-<!ENTITY % base.char.class
-		"anchor %local.base.char.class;">
-
-<!ENTITY % local.docinfo.char.class "">
-<!ENTITY % docinfo.char.class
-		"author|authorinitials|corpauthor|modespec|othercredit
-		|productname|productnumber|revhistory
-		%local.docinfo.char.class;">
-
-<!ENTITY % local.other.char.class "">
-<!ENTITY % other.char.class
-		"remark|subscript|superscript %local.other.char.class;">
-
-<!ENTITY % local.inlineobj.char.class "">
-<!ENTITY % inlineobj.char.class
-		"inlinegraphic|inlinemediaobject|inlineequation %local.inlineobj.char.class;">
-
-<!-- Redeclaration placeholder ............................................ -->
-
-<!-- For redeclaring entities that are declared after this point while
-     retaining their references to the entities that are declared before
-     this point -->
-
-<![%dbpool.redecl.module;[
-<!-- Defining rdbpool here makes some buggy XML parsers happy. -->
-<!ENTITY % rdbpool "">
-%rdbpool;
-<!--end of dbpool.redecl.module-->]]>
-
-<!-- Object-level mixtures ................................................ -->
-
-<!--
-                      list admn line synp para infm form cmpd gen  desc
-Component mixture       X    X    X    X    X    X    X    X    X    X
-Sidebar mixture         X    X    X    X    X    X    X    a    X
-Footnote mixture        X         X    X    X    X
-Example mixture         X         X    X    X    X
-Highlights mixture      X    X              X
-Paragraph mixture       X         X    X         X
-Admonition mixture      X         X    X    X    X    X    b    c
-Figure mixture                    X    X         X
-Table entry mixture     X    X    X         X    d
-Glossary def mixture    X         X    X    X    X         e
-Legal notice mixture    X    X    X         X    f
-
-a. Just Procedure; not Sidebar itself or MsgSet.
-b. No MsgSet.
-c. No Highlights.
-d. Just Graphic; no other informal objects.
-e. No Anchor, BridgeHead, or Highlights.
-f. Just BlockQuote; no other informal objects.
--->
-
-<!ENTITY % local.component.mix "">
-<!ENTITY % component.mix
-		"%list.class;		|%admon.class;
-		|%linespecific.class;	|%synop.class;
-		|%para.class;		|%informal.class;
-		|%formal.class;		|%compound.class;
-		|%genobj.class;		|%descobj.class;
-		|%ndxterm.class;        |beginpage
-		%local.component.mix;">
-
-<!ENTITY % local.sidebar.mix "">
-<!ENTITY % sidebar.mix
-		"%list.class;		|%admon.class;
-		|%linespecific.class;	|%synop.class;
-		|%para.class;		|%informal.class;
-		|%formal.class;		|procedure
-		|%genobj.class;
-		|%ndxterm.class;        |beginpage
-		%local.sidebar.mix;">
-
-<!ENTITY % local.qandaset.mix "">
-<!ENTITY % qandaset.mix
-		"%list.class;           |%admon.class;
-		|%linespecific.class;	|%synop.class;
-		|%para.class;		|%informal.class;
-		|%formal.class;		|procedure
-		|%genobj.class;
-		|%ndxterm.class;
-		%local.qandaset.mix;">
-
-<!ENTITY % local.revdescription.mix "">
-<!ENTITY % revdescription.mix
-		"%list.class;		|%admon.class;
-		|%linespecific.class;	|%synop.class;
-		|%para.class;		|%informal.class;
-		|%formal.class;		|procedure
-		|%genobj.class;
-		|%ndxterm.class;
-		%local.revdescription.mix;">
-
-<!ENTITY % local.footnote.mix "">
-<!ENTITY % footnote.mix
-		"%list.class;
-		|%linespecific.class;	|%synop.class;
-		|%para.class;		|%informal.class;
-		%local.footnote.mix;">
-
-<!ENTITY % local.example.mix "">
-<!ENTITY % example.mix
-		"%list.class;
-		|%linespecific.class;	|%synop.class;
-		|%para.class;		|%informal.class;
-		|%ndxterm.class;        |beginpage
-		%local.example.mix;">
-
-<!ENTITY % local.highlights.mix "">
-<!ENTITY % highlights.mix
-		"%list.class;		|%admon.class;
-		|%para.class;
-		|%ndxterm.class;
-		%local.highlights.mix;">
-
-<!-- %formal.class; is explicitly excluded from many contexts in which
-     paragraphs are used -->
-<!ENTITY % local.para.mix "">
-<!ENTITY % para.mix
-		"%list.class;           |%admon.class;
-		|%linespecific.class;
-					|%informal.class;
-		|%formal.class;
-		%local.para.mix;">
-
-<!ENTITY % local.admon.mix "">
-<!ENTITY % admon.mix
-		"%list.class;
-		|%linespecific.class;	|%synop.class;
-		|%para.class;		|%informal.class;
-		|%formal.class;		|procedure|sidebar
-		|anchor|bridgehead|remark
-		|%ndxterm.class;        |beginpage
-		%local.admon.mix;">
-
-<!ENTITY % local.figure.mix "">
-<!ENTITY % figure.mix
-		"%linespecific.class;	|%synop.class;
-					|%informal.class;
-		|%ndxterm.class;        |beginpage
-		%local.figure.mix;">
-
-<!ENTITY % local.tabentry.mix "">
-<!ENTITY % tabentry.mix
-		"%list.class;		|%admon.class;
-		|%linespecific.class;
-		|%para.class;		|graphic|mediaobject
-		%local.tabentry.mix;">
-
-<!ENTITY % local.glossdef.mix "">
-<!ENTITY % glossdef.mix
-		"%list.class;
-		|%linespecific.class;	|%synop.class;
-		|%para.class;		|%informal.class;
-		|%formal.class;
-		|remark
-		|%ndxterm.class;        |beginpage
-		%local.glossdef.mix;">
-
-<!ENTITY % local.legalnotice.mix "">
-<!ENTITY % legalnotice.mix
-		"%list.class;		|%admon.class;
-		|%linespecific.class;
-		|%para.class;		|blockquote
-		|%ndxterm.class;        |beginpage
-		%local.legalnotice.mix;">
-
-<!ENTITY % local.textobject.mix "">
-<!ENTITY % textobject.mix
-		"%list.class;		|%admon.class;
-		|%linespecific.class;
-		|%para.class;		|blockquote
-		%local.textobject.mix;">
-
-<!ENTITY % local.mediaobject.mix "">
-<!ENTITY % mediaobject.mix 
-		"videoobject|audioobject|imageobject %local.mediaobject.mix;">
-
-<!-- Character-level mixtures ............................................. -->
-
-<!--
-                    #PCD xref word link cptr base dnfo othr inob (synop)
-para.char.mix         X    X    X    X    X    X    X    X    X
-title.char.mix        X    X    X    X    X    X    X    X    X
-ndxterm.char.mix      X    X    X    X    X    X    X    X    a
-cptr.char.mix         X              X    X    X         X    a
-smallcptr.char.mix    X                   b                   a
-word.char.mix         X         c    X         X         X    a
-docinfo.char.mix      X         d    X    b              X    a
-
-a. Just InlineGraphic; no InlineEquation.
-b. Just Replaceable; no other computer terms.
-c. Just Emphasis and Trademark; no other word elements.
-d. Just Acronym, Emphasis, and Trademark; no other word elements.
--->
-
-<!-- The DocBook TC may produce an official forms module for DocBook. -->
-<!-- This PE provides the hook by which it can be inserted into the DTD. -->
-<!ENTITY % forminlines.hook "">
-
-<!ENTITY % local.para.char.mix "">
-<!ENTITY % para.char.mix
-		"#PCDATA
-		|%xref.char.class;	|%gen.char.class;
-		|%link.char.class;	|%tech.char.class;
-		|%base.char.class;	|%docinfo.char.class;
-		|%other.char.class;	|%inlineobj.char.class;
-		|%synop.class;
-		|%ndxterm.class;        |beginpage
-                %forminlines.hook;
-		%local.para.char.mix;">
-
-<!ENTITY % local.title.char.mix "">
-<!ENTITY % title.char.mix
-		"#PCDATA
-		|%xref.char.class;	|%gen.char.class;
-		|%link.char.class;	|%tech.char.class;
-		|%base.char.class;	|%docinfo.char.class;
-		|%other.char.class;	|%inlineobj.char.class;
-		|%ndxterm.class;
-		%local.title.char.mix;">
-
-<!ENTITY % local.ndxterm.char.mix "">
-<!ENTITY % ndxterm.char.mix
-		"#PCDATA
-		|%xref.char.class;	|%gen.char.class;
-		|%link.char.class;	|%tech.char.class;
-		|%base.char.class;	|%docinfo.char.class;
-		|%other.char.class;	|inlinegraphic|inlinemediaobject
-		%local.ndxterm.char.mix;">
-
-<!ENTITY % local.cptr.char.mix "">
-<!ENTITY % cptr.char.mix
-		"#PCDATA
-		|%link.char.class;	|%tech.char.class;
-		|%base.char.class;
-		|%other.char.class;	|inlinegraphic|inlinemediaobject
-		|%ndxterm.class;        |beginpage
-		%local.cptr.char.mix;">
-
-<!ENTITY % local.smallcptr.char.mix "">
-<!ENTITY % smallcptr.char.mix
-		"#PCDATA
-					|replaceable
-					|inlinegraphic|inlinemediaobject
-		|%ndxterm.class;        |beginpage
-		%local.smallcptr.char.mix;">
-
-<!ENTITY % local.word.char.mix "">
-<!ENTITY % word.char.mix
-		"#PCDATA
-					|acronym|emphasis|trademark
-		|%link.char.class;
-		|%base.char.class;
-		|%other.char.class;	|inlinegraphic|inlinemediaobject
-		|%ndxterm.class;        |beginpage
-		%local.word.char.mix;">
-
-<!ENTITY % local.docinfo.char.mix "">
-<!ENTITY % docinfo.char.mix
-		"#PCDATA
-		|%link.char.class;
-					|emphasis|trademark
-					|replaceable
-		|%other.char.class;	|inlinegraphic|inlinemediaobject
-		|%ndxterm.class;
-		%local.docinfo.char.mix;">
-<!--ENTITY % bibliocomponent.mix (see Bibliographic section, below)-->
-<!--ENTITY % person.ident.mix (see Bibliographic section, below)-->
-
-<!-- ...................................................................... -->
-<!-- Entities for content models .......................................... -->
-
-<!ENTITY % formalobject.title.content "title, titleabbrev?">
-
-<!-- ...................................................................... -->
-<!-- Entities for attributes and attribute components ..................... -->
-
-<!-- Effectivity attributes ............................................... -->
-
-
-<!-- Arch: Computer or chip architecture to which element applies; no 
-	default -->
-
-<!ENTITY % arch.attrib
-	"arch		CDATA		#IMPLIED">
-
-<!-- Condition: General-purpose effectivity attribute -->
-
-<!ENTITY % condition.attrib
-	"condition	CDATA		#IMPLIED">
-
-<!-- Conformance: Standards conformance characteristics -->
-
-<!ENTITY % conformance.attrib
-	"conformance	NMTOKENS	#IMPLIED">
-
-
-<!-- OS: Operating system to which element applies; no default -->
-
-<!ENTITY % os.attrib
-	"os		CDATA		#IMPLIED">
-
-
-<!-- Revision: Editorial revision to which element belongs; no default -->
-
-<!ENTITY % revision.attrib
-	"revision	CDATA		#IMPLIED">
-
-<!-- Security: Security classification; no default -->
-
-<!ENTITY % security.attrib
-	"security	CDATA		#IMPLIED">
-
-<!-- UserLevel: Level of user experience to which element applies; no 
-	default -->
-
-<!ENTITY % userlevel.attrib
-	"userlevel	CDATA		#IMPLIED">
-
-
-<!-- Vendor: Computer vendor to which element applies; no default -->
-
-<!ENTITY % vendor.attrib
-	"vendor		CDATA		#IMPLIED">
-
-<!ENTITY % local.effectivity.attrib "">
-<!ENTITY % effectivity.attrib
-	"%arch.attrib;
-        %condition.attrib;
-	%conformance.attrib;
-	%os.attrib;
-	%revision.attrib;
-        %security.attrib;
-	%userlevel.attrib;
-	%vendor.attrib;
-	%local.effectivity.attrib;"
->
-
-<!-- Common attributes .................................................... -->
-
-
-<!-- Id: Unique identifier of element; no default -->
-
-<!ENTITY % id.attrib
-	"id		ID		#IMPLIED">
-
-
-<!-- Id: Unique identifier of element; a value must be supplied; no 
-	default -->
-
-<!ENTITY % idreq.attrib
-	"id		ID		#REQUIRED">
-
-
-<!-- Lang: Indicator of language in which element is written, for
-	translation, character set management, etc.; no default -->
-
-<!ENTITY % lang.attrib
-	"lang		CDATA		#IMPLIED">
-
-
-<!-- Remap: Previous role of element before conversion; no default -->
-
-<!ENTITY % remap.attrib
-	"remap		CDATA		#IMPLIED">
-
-
-<!-- Role: New role of element in local environment; no default -->
-
-<!ENTITY % role.attrib
-	"role		CDATA		#IMPLIED">
-
-
-<!-- XRefLabel: Alternate labeling string for XRef text generation;
-	default is usually title or other appropriate label text already
-	contained in element -->
-
-<!ENTITY % xreflabel.attrib
-	"xreflabel	CDATA		#IMPLIED">
-
-
-<!-- RevisionFlag: Revision status of element; default is that element
-	wasn't revised -->
-
-<!ENTITY % revisionflag.attrib
-	"revisionflag	(changed
-			|added
-			|deleted
-			|off)		#IMPLIED">
-
-<!ENTITY % local.common.attrib "">
-
-<!-- Role is included explicitly on each element -->
-
-<!ENTITY % common.attrib
-	"%id.attrib;
-	%lang.attrib;
-	%remap.attrib;
-	%xreflabel.attrib;
-	%revisionflag.attrib;
-	%effectivity.attrib;
-	%local.common.attrib;"
->
-
-
-<!-- Role is included explicitly on each element -->
-
-<!ENTITY % idreq.common.attrib
-	"%idreq.attrib;
-	%lang.attrib;
-	%remap.attrib;
-	%xreflabel.attrib;
-	%revisionflag.attrib;
-	%effectivity.attrib;
-	%local.common.attrib;"
->
-
-<!-- Semi-common attributes and other attribute entities .................. -->
-
-<!ENTITY % local.graphics.attrib "">
-
-<!-- EntityRef: Name of an external entity containing the content
-	of the graphic -->
-<!-- FileRef: Filename, qualified by a pathname if desired, 
-	designating the file containing the content of the graphic -->
-<!-- Format: Notation of the element content, if any -->
-<!-- SrcCredit: Information about the source of the Graphic -->
-<!-- Width: Same as CALS reprowid (desired width) -->
-<!-- Depth: Same as CALS reprodep (desired depth) -->
-<!-- Align: Same as CALS hplace with 'none' removed; #IMPLIED means 
-	application-specific -->
-<!-- Scale: Conflation of CALS hscale and vscale -->
-<!-- Scalefit: Same as CALS scalefit -->
-
-<!ENTITY % graphics.attrib
-	"
-	entityref	ENTITY		#IMPLIED
-	fileref 	CDATA		#IMPLIED
-	format		(%notation.class;) #IMPLIED
-	srccredit	CDATA		#IMPLIED
-	width		CDATA		#IMPLIED
-	depth		CDATA		#IMPLIED
-	align		(left
-			|right 
-			|center)	#IMPLIED
-	scale		CDATA		#IMPLIED
-	scalefit	%yesorno.attvals;
-					#IMPLIED
-	%local.graphics.attrib;"
->
-
-<!ENTITY % local.keyaction.attrib "">
-
-<!-- Action: Key combination type; default is unspecified if one 
-	child element, Simul if there is more than one; if value is 
-	Other, the OtherAction attribute must have a nonempty value -->
-<!-- OtherAction: User-defined key combination type -->
-
-<!ENTITY % keyaction.attrib
-	"
-	action		(click
-			|double-click
-			|press
-			|seq
-			|simul
-			|other)		#IMPLIED
-	otheraction	CDATA		#IMPLIED
-	%local.keyaction.attrib;"
->
-
-
-<!-- Label: Identifying number or string; default is usually the
-	appropriate number or string autogenerated by a formatter -->
-
-<!ENTITY % label.attrib
-	"label		CDATA		#IMPLIED">
-
-
-<!-- Format: whether element is assumed to contain significant white
-	space -->
-
-<!ENTITY % linespecific.attrib
-	"format		NOTATION
-			(linespecific)	'linespecific'
-         linenumbering	(numbered|unnumbered) 	#IMPLIED">
-
-
-<!-- Linkend: link to related information; no default -->
-
-<!ENTITY % linkend.attrib
-	"linkend	IDREF		#IMPLIED">
-
-
-<!-- Linkend: required link to related information -->
-
-<!ENTITY % linkendreq.attrib
-	"linkend	IDREF		#REQUIRED">
-
-
-<!-- Linkends: link to one or more sets of related information; no 
-	default -->
-
-<!ENTITY % linkends.attrib
-	"linkends	IDREFS		#IMPLIED">
-
-
-<!ENTITY % local.mark.attrib "">
-<!ENTITY % mark.attrib
-	"mark		CDATA		#IMPLIED
-	%local.mark.attrib;"
->
-
-
-<!-- MoreInfo: whether element's content has an associated RefEntry -->
-
-<!ENTITY % moreinfo.attrib
-	"moreinfo	(refentry|none)	'none'">
-
-
-<!-- Pagenum: number of page on which element appears; no default -->
-
-<!ENTITY % pagenum.attrib
-	"pagenum	CDATA		#IMPLIED">
-
-<!ENTITY % local.status.attrib "">
-
-<!-- Status: Editorial or publication status of the element
-	it applies to, such as "in review" or "approved for distribution" -->
-
-<!ENTITY % status.attrib
-	"status		CDATA		#IMPLIED
-	%local.status.attrib;"
->
-
-
-<!-- Width: width of the longest line in the element to which it
-	pertains, in number of characters -->
-
-<!ENTITY % width.attrib
-	"width		CDATA		#IMPLIED">
-
-<!-- ...................................................................... -->
-<!-- Title elements ....................................................... -->
-
-<!ENTITY % title.module "INCLUDE">
-<![%title.module;[
-<!ENTITY % local.title.attrib "">
-<!ENTITY % title.role.attrib "%role.attrib;">
-
-<!ENTITY % title.element "INCLUDE">
-<![%title.element;[
-<!ELEMENT title (%title.char.mix;)*>
-<!--end of title.element-->]]>
-
-<!ENTITY % title.attlist "INCLUDE">
-<![%title.attlist;[
-<!ATTLIST title
-		%pagenum.attrib;
-		%common.attrib;
-		%title.role.attrib;
-		%local.title.attrib;
->
-<!--end of title.attlist-->]]>
-<!--end of title.module-->]]>
-
-<!ENTITY % titleabbrev.module "INCLUDE">
-<![%titleabbrev.module;[
-<!ENTITY % local.titleabbrev.attrib "">
-<!ENTITY % titleabbrev.role.attrib "%role.attrib;">
-
-<!ENTITY % titleabbrev.element "INCLUDE">
-<![%titleabbrev.element;[
-<!ELEMENT titleabbrev (%title.char.mix;)*>
-<!--end of titleabbrev.element-->]]>
-
-<!ENTITY % titleabbrev.attlist "INCLUDE">
-<![%titleabbrev.attlist;[
-<!ATTLIST titleabbrev
-		%common.attrib;
-		%titleabbrev.role.attrib;
-		%local.titleabbrev.attrib;
->
-<!--end of titleabbrev.attlist-->]]>
-<!--end of titleabbrev.module-->]]>
-
-<!ENTITY % subtitle.module "INCLUDE">
-<![%subtitle.module;[
-<!ENTITY % local.subtitle.attrib "">
-<!ENTITY % subtitle.role.attrib "%role.attrib;">
-
-<!ENTITY % subtitle.element "INCLUDE">
-<![%subtitle.element;[
-<!ELEMENT subtitle (%title.char.mix;)*>
-<!--end of subtitle.element-->]]>
-
-<!ENTITY % subtitle.attlist "INCLUDE">
-<![%subtitle.attlist;[
-<!ATTLIST subtitle
-		%common.attrib;
-		%subtitle.role.attrib;
-		%local.subtitle.attrib;
->
-<!--end of subtitle.attlist-->]]>
-<!--end of subtitle.module-->]]>
-
-<!-- ...................................................................... -->
-<!-- Bibliographic entities and elements .................................. -->
-
-<!-- The bibliographic elements are typically used in the document
-     hierarchy. They do not appear in content models of information
-     pool elements.  See also the document information elements,
-     below. -->
-
-<!ENTITY % local.person.ident.mix "">
-<!ENTITY % person.ident.mix
-		"honorific|firstname|surname|lineage|othername|affiliation
-		|authorblurb|contrib %local.person.ident.mix;">
-
-<!ENTITY % local.bibliocomponent.mix "">
-<!ENTITY % bibliocomponent.mix
-		"abbrev|abstract|address|artpagenums|author
-		|authorgroup|authorinitials|bibliomisc|biblioset
-		|collab|confgroup|contractnum|contractsponsor
-		|copyright|corpauthor|corpname|date|edition
-		|editor|invpartnumber|isbn|issn|issuenum|orgname
-		|othercredit|pagenums|printhistory|productname
-		|productnumber|pubdate|publisher|publishername
-		|pubsnumber|releaseinfo|revhistory|seriesvolnums
-		|subtitle|title|titleabbrev|volumenum|citetitle
-		|%person.ident.mix;
-		|%ndxterm.class;
-		%local.bibliocomponent.mix;">
-
-<!ENTITY % biblioentry.module "INCLUDE">
-<![%biblioentry.module;[
-<!ENTITY % local.biblioentry.attrib "">
-<!ENTITY % biblioentry.role.attrib "%role.attrib;">
-
-<!ENTITY % biblioentry.element "INCLUDE">
-<![%biblioentry.element;[
-<!ELEMENT biblioentry ((articleinfo | (%bibliocomponent.mix;))+)>
-<!--end of biblioentry.element-->]]>
-
-<!ENTITY % biblioentry.attlist "INCLUDE">
-<![%biblioentry.attlist;[
-<!ATTLIST biblioentry
-		%common.attrib;
-		%biblioentry.role.attrib;
-		%local.biblioentry.attrib;
->
-<!--end of biblioentry.attlist-->]]>
-<!--end of biblioentry.module-->]]>
-
-<!ENTITY % bibliomixed.module "INCLUDE">
-<![%bibliomixed.module;[
-<!ENTITY % local.bibliomixed.attrib "">
-<!ENTITY % bibliomixed.role.attrib "%role.attrib;">
-
-<!ENTITY % bibliomixed.element "INCLUDE">
-<![%bibliomixed.element;[
-<!ELEMENT bibliomixed (#PCDATA | %bibliocomponent.mix; | bibliomset)*>
-<!--end of bibliomixed.element-->]]>
-
-<!ENTITY % bibliomixed.attlist "INCLUDE">
-<![%bibliomixed.attlist;[
-<!ATTLIST bibliomixed
-		%common.attrib;
-		%bibliomixed.role.attrib;
-		%local.bibliomixed.attrib;
->
-<!--end of bibliomixed.attlist-->]]>
-<!--end of bibliomixed.module-->]]>
-
-<!ENTITY % articleinfo.module "INCLUDE">
-<![%articleinfo.module;[
-<!ENTITY % local.articleinfo.attrib "">
-<!ENTITY % articleinfo.role.attrib "%role.attrib;">
-
-<!ENTITY % articleinfo.element "INCLUDE">
-<![%articleinfo.element;[
-<!ELEMENT articleinfo ((graphic | mediaobject | legalnotice | modespec 
-	| subjectset | keywordset | itermset | %bibliocomponent.mix;)+)>
-<!--end of articleinfo.element-->]]>
-
-<!ENTITY % articleinfo.attlist "INCLUDE">
-<![%articleinfo.attlist;[
-<!ATTLIST articleinfo
-		%common.attrib;
-		%articleinfo.role.attrib;
-		%local.articleinfo.attrib;
->
-<!--end of articleinfo.attlist-->]]>
-<!--end of articleinfo.module-->]]>
-
-<!ENTITY % biblioset.module "INCLUDE">
-<![%biblioset.module;[
-<!ENTITY % local.biblioset.attrib "">
-<!ENTITY % biblioset.role.attrib "%role.attrib;">
-
-<!ENTITY % biblioset.element "INCLUDE">
-<![%biblioset.element;[
-<!ELEMENT biblioset ((%bibliocomponent.mix;)+)>
-<!--end of biblioset.element-->]]>
-
-<!-- Relation: Relationship of elements contained within BiblioSet -->
-
-
-<!ENTITY % biblioset.attlist "INCLUDE">
-<![%biblioset.attlist;[
-<!ATTLIST biblioset
-		relation	CDATA		#IMPLIED
-		%common.attrib;
-		%biblioset.role.attrib;
-		%local.biblioset.attrib;
->
-<!--end of biblioset.attlist-->]]>
-<!--end of biblioset.module-->]]>
-
-<!ENTITY % bibliomset.module "INCLUDE">
-<![%bibliomset.module;[
-<!ENTITY % bibliomset.role.attrib "%role.attrib;">
-<!ENTITY % local.bibliomset.attrib "">
-
-<!ENTITY % bibliomset.element "INCLUDE">
-<![%bibliomset.element;[
-<!ELEMENT bibliomset (#PCDATA | %bibliocomponent.mix; | bibliomset)*>
-<!--end of bibliomset.element-->]]>
-
-<!-- Relation: Relationship of elements contained within BiblioMSet -->
-
-
-<!ENTITY % bibliomset.attlist "INCLUDE">
-<![%bibliomset.attlist;[
-<!ATTLIST bibliomset
-		relation	CDATA		#IMPLIED
-		%bibliomset.role.attrib;
-		%common.attrib;
-		%local.bibliomset.attrib;
->
-<!--end of bibliomset.attlist-->]]>
-<!--end of bibliomset.module-->]]>
-
-<!ENTITY % bibliomisc.module "INCLUDE">
-<![%bibliomisc.module;[
-<!ENTITY % local.bibliomisc.attrib "">
-<!ENTITY % bibliomisc.role.attrib "%role.attrib;">
-
-<!ENTITY % bibliomisc.element "INCLUDE">
-<![%bibliomisc.element;[
-<!ELEMENT bibliomisc (%para.char.mix;)*>
-<!--end of bibliomisc.element-->]]>
-
-<!ENTITY % bibliomisc.attlist "INCLUDE">
-<![%bibliomisc.attlist;[
-<!ATTLIST bibliomisc
-		%common.attrib;
-		%bibliomisc.role.attrib;
-		%local.bibliomisc.attrib;
->
-<!--end of bibliomisc.attlist-->]]>
-<!--end of bibliomisc.module-->]]>
-
-<!-- ...................................................................... -->
-<!-- Subject, Keyword, and ITermSet elements .............................. -->
-
-<!ENTITY % subjectset.content.module "INCLUDE">
-<![%subjectset.content.module;[
-<!ENTITY % subjectset.module "INCLUDE">
-<![%subjectset.module;[
-<!ENTITY % local.subjectset.attrib "">
-<!ENTITY % subjectset.role.attrib "%role.attrib;">
-
-<!ENTITY % subjectset.element "INCLUDE">
-<![%subjectset.element;[
-<!ELEMENT subjectset (subject+)>
-<!--end of subjectset.element-->]]>
-
-<!-- Scheme: Controlled vocabulary employed in SubjectTerms -->
-
-
-<!ENTITY % subjectset.attlist "INCLUDE">
-<![%subjectset.attlist;[
-<!ATTLIST subjectset
-		scheme		NMTOKEN		#IMPLIED
-		%common.attrib;
-		%subjectset.role.attrib;
-		%local.subjectset.attrib;
->
-<!--end of subjectset.attlist-->]]>
-<!--end of subjectset.module-->]]>
-
-<!ENTITY % subject.module "INCLUDE">
-<![%subject.module;[
-<!ENTITY % local.subject.attrib "">
-<!ENTITY % subject.role.attrib "%role.attrib;">
-
-<!ENTITY % subject.element "INCLUDE">
-<![%subject.element;[
-<!ELEMENT subject (subjectterm+)>
-<!--end of subject.element-->]]>
-
-<!-- Weight: Ranking of this group of SubjectTerms relative 
-		to others, 0 is low, no highest value specified -->
-
-
-<!ENTITY % subject.attlist "INCLUDE">
-<![%subject.attlist;[
-<!ATTLIST subject
-		weight		CDATA		#IMPLIED
-		%common.attrib;
-		%subject.role.attrib;
-		%local.subject.attrib;
->
-<!--end of subject.attlist-->]]>
-<!--end of subject.module-->]]>
-
-<!ENTITY % subjectterm.module "INCLUDE">
-<![%subjectterm.module;[
-<!ENTITY % local.subjectterm.attrib "">
-<!ENTITY % subjectterm.role.attrib "%role.attrib;">
-
-<!ENTITY % subjectterm.element "INCLUDE">
-<![%subjectterm.element;[
-<!ELEMENT subjectterm (#PCDATA)>
-<!--end of subjectterm.element-->]]>
-
-<!ENTITY % subjectterm.attlist "INCLUDE">
-<![%subjectterm.attlist;[
-<!ATTLIST subjectterm
-		%common.attrib;
-		%subjectterm.role.attrib;
-		%local.subjectterm.attrib;
->
-<!--end of subjectterm.attlist-->]]>
-<!--end of subjectterm.module-->]]>
-<!--end of subjectset.content.module-->]]>
-
-<!ENTITY % keywordset.content.module "INCLUDE">
-<![%keywordset.content.module;[
-<!ENTITY % keywordset.module "INCLUDE">
-<![%keywordset.module;[
-<!ENTITY % local.keywordset.attrib "">
-<!ENTITY % keywordset.role.attrib "%role.attrib;">
-
-<!ENTITY % keywordset.element "INCLUDE">
-<![%keywordset.element;[
-<!ELEMENT keywordset (keyword+)>
-<!--end of keywordset.element-->]]>
-
-<!ENTITY % keywordset.attlist "INCLUDE">
-<![%keywordset.attlist;[
-<!ATTLIST keywordset
-		%common.attrib;
-		%keywordset.role.attrib;
-		%local.keywordset.attrib;
->
-<!--end of keywordset.attlist-->]]>
-<!--end of keywordset.module-->]]>
-
-<!ENTITY % keyword.module "INCLUDE">
-<![%keyword.module;[
-<!ENTITY % local.keyword.attrib "">
-<!ENTITY % keyword.role.attrib "%role.attrib;">
-
-<!ENTITY % keyword.element "INCLUDE">
-<![%keyword.element;[
-<!ELEMENT keyword (#PCDATA)>
-<!--end of keyword.element-->]]>
-
-<!ENTITY % keyword.attlist "INCLUDE">
-<![%keyword.attlist;[
-<!ATTLIST keyword
-		%common.attrib;
-		%keyword.role.attrib;
-		%local.keyword.attrib;
->
-<!--end of keyword.attlist-->]]>
-<!--end of keyword.module-->]]>
-<!--end of keywordset.content.module-->]]>
-
-<!ENTITY % itermset.module "INCLUDE">
-<![%itermset.module;[
-<!ENTITY % local.itermset.attrib "">
-<!ENTITY % itermset.role.attrib "%role.attrib;">
-
-<!ENTITY % itermset.element "INCLUDE">
-<![%itermset.element;[
-<!ELEMENT itermset (indexterm+)>
-<!--end of itermset.element-->]]>
-
-<!ENTITY % itermset.attlist "INCLUDE">
-<![%itermset.attlist;[
-<!ATTLIST itermset
-		%common.attrib;
-		%itermset.role.attrib;
-		%local.itermset.attrib;
->
-<!--end of itermset.attlist-->]]>
-<!--end of itermset.module-->]]>
-
-<!-- ...................................................................... -->
-<!-- Compound (section-ish) elements ...................................... -->
-
-<!-- Message set ...................... -->
-
-<!ENTITY % msgset.content.module "INCLUDE">
-<![%msgset.content.module;[
-<!ENTITY % msgset.module "INCLUDE">
-<![%msgset.module;[
-<!ENTITY % local.msgset.attrib "">
-<!ENTITY % msgset.role.attrib "%role.attrib;">
-
-<!ENTITY % msgset.element "INCLUDE">
-<![%msgset.element;[
-<!ELEMENT msgset ((%formalobject.title.content;)?, (msgentry+|simplemsgentry+))>
-<!--end of msgset.element-->]]>
-
-<!ENTITY % msgset.attlist "INCLUDE">
-<![%msgset.attlist;[
-<!ATTLIST msgset
-		%common.attrib;
-		%msgset.role.attrib;
-		%local.msgset.attrib;
->
-<!--end of msgset.attlist-->]]>
-<!--end of msgset.module-->]]>
-
-<!ENTITY % msgentry.module "INCLUDE">
-<![%msgentry.module;[
-<!ENTITY % local.msgentry.attrib "">
-<!ENTITY % msgentry.role.attrib "%role.attrib;">
-
-<!ENTITY % msgentry.element "INCLUDE">
-<![%msgentry.element;[
-<!ELEMENT msgentry (msg+, msginfo?, msgexplan*)>
-<!--end of msgentry.element-->]]>
-
-<!ENTITY % msgentry.attlist "INCLUDE">
-<![%msgentry.attlist;[
-<!ATTLIST msgentry
-		%common.attrib;
-		%msgentry.role.attrib;
-		%local.msgentry.attrib;
->
-<!--end of msgentry.attlist-->]]>
-<!--end of msgentry.module-->]]>
-
-<!ENTITY % simplemsgentry.module "INCLUDE">
-<![ %simplemsgentry.module; [
-<!ENTITY % local.simplemsgentry.attrib "">
-<!ENTITY % simplemsgentry.role.attrib "%role.attrib;">
-
-<!ENTITY % simplemsgentry.element "INCLUDE">
-<![ %simplemsgentry.element; [
-<!ELEMENT simplemsgentry (msgtext, msgexplan)>
-<!--end of simplemsgentry.element-->]]>
-
-<!ENTITY % simplemsgentry.attlist "INCLUDE">
-<![ %simplemsgentry.attlist; [
-<!ATTLIST simplemsgentry
-		%common.attrib;
-		%simplemsgentry.role.attrib;
-		%local.simplemsgentry.attrib;
-		audience	CDATA	#IMPLIED
-		level		CDATA	#IMPLIED
-		origin		CDATA	#IMPLIED
->
-<!--end of simplemsgentry.attlist-->]]>
-<!--end of simplemsgentry.module-->]]>
-
-<!ENTITY % msg.module "INCLUDE">
-<![%msg.module;[
-<!ENTITY % local.msg.attrib "">
-<!ENTITY % msg.role.attrib "%role.attrib;">
-
-<!ENTITY % msg.element "INCLUDE">
-<![%msg.element;[
-<!ELEMENT msg (title?, msgmain, (msgsub | msgrel)*)>
-<!--end of msg.element-->]]>
-
-<!ENTITY % msg.attlist "INCLUDE">
-<![%msg.attlist;[
-<!ATTLIST msg
-		%common.attrib;
-		%msg.role.attrib;
-		%local.msg.attrib;
->
-<!--end of msg.attlist-->]]>
-<!--end of msg.module-->]]>
-
-<!ENTITY % msgmain.module "INCLUDE">
-<![%msgmain.module;[
-<!ENTITY % local.msgmain.attrib "">
-<!ENTITY % msgmain.role.attrib "%role.attrib;">
-
-<!ENTITY % msgmain.element "INCLUDE">
-<![%msgmain.element;[
-<!ELEMENT msgmain (title?, msgtext)>
-<!--end of msgmain.element-->]]>
-
-<!ENTITY % msgmain.attlist "INCLUDE">
-<![%msgmain.attlist;[
-<!ATTLIST msgmain
-		%common.attrib;
-		%msgmain.role.attrib;
-		%local.msgmain.attrib;
->
-<!--end of msgmain.attlist-->]]>
-<!--end of msgmain.module-->]]>
-
-<!ENTITY % msgsub.module "INCLUDE">
-<![%msgsub.module;[
-<!ENTITY % local.msgsub.attrib "">
-<!ENTITY % msgsub.role.attrib "%role.attrib;">
-
-<!ENTITY % msgsub.element "INCLUDE">
-<![%msgsub.element;[
-<!ELEMENT msgsub (title?, msgtext)>
-<!--end of msgsub.element-->]]>
-
-<!ENTITY % msgsub.attlist "INCLUDE">
-<![%msgsub.attlist;[
-<!ATTLIST msgsub
-		%common.attrib;
-		%msgsub.role.attrib;
-		%local.msgsub.attrib;
->
-<!--end of msgsub.attlist-->]]>
-<!--end of msgsub.module-->]]>
-
-<!ENTITY % msgrel.module "INCLUDE">
-<![%msgrel.module;[
-<!ENTITY % local.msgrel.attrib "">
-<!ENTITY % msgrel.role.attrib "%role.attrib;">
-
-<!ENTITY % msgrel.element "INCLUDE">
-<![%msgrel.element;[
-<!ELEMENT msgrel (title?, msgtext)>
-<!--end of msgrel.element-->]]>
-
-<!ENTITY % msgrel.attlist "INCLUDE">
-<![%msgrel.attlist;[
-<!ATTLIST msgrel
-		%common.attrib;
-		%msgrel.role.attrib;
-		%local.msgrel.attrib;
->
-<!--end of msgrel.attlist-->]]>
-<!--end of msgrel.module-->]]>
-
-<!-- MsgText (defined in the Inlines section, below)-->
-
-<!ENTITY % msginfo.module "INCLUDE">
-<![%msginfo.module;[
-<!ENTITY % local.msginfo.attrib "">
-<!ENTITY % msginfo.role.attrib "%role.attrib;">
-
-<!ENTITY % msginfo.element "INCLUDE">
-<![%msginfo.element;[
-<!ELEMENT msginfo ((msglevel | msgorig | msgaud)*)>
-<!--end of msginfo.element-->]]>
-
-<!ENTITY % msginfo.attlist "INCLUDE">
-<![%msginfo.attlist;[
-<!ATTLIST msginfo
-		%common.attrib;
-		%msginfo.role.attrib;
-		%local.msginfo.attrib;
->
-<!--end of msginfo.attlist-->]]>
-<!--end of msginfo.module-->]]>
-
-<!ENTITY % msglevel.module "INCLUDE">
-<![%msglevel.module;[
-<!ENTITY % local.msglevel.attrib "">
-<!ENTITY % msglevel.role.attrib "%role.attrib;">
-
-<!ENTITY % msglevel.element "INCLUDE">
-<![%msglevel.element;[
-<!ELEMENT msglevel (%smallcptr.char.mix;)*>
-<!--end of msglevel.element-->]]>
-
-<!ENTITY % msglevel.attlist "INCLUDE">
-<![%msglevel.attlist;[
-<!ATTLIST msglevel
-		%common.attrib;
-		%msglevel.role.attrib;
-		%local.msglevel.attrib;
->
-<!--end of msglevel.attlist-->]]>
-<!--end of msglevel.module-->]]>
-
-<!ENTITY % msgorig.module "INCLUDE">
-<![%msgorig.module;[
-<!ENTITY % local.msgorig.attrib "">
-<!ENTITY % msgorig.role.attrib "%role.attrib;">
-
-<!ENTITY % msgorig.element "INCLUDE">
-<![%msgorig.element;[
-<!ELEMENT msgorig (%smallcptr.char.mix;)*>
-<!--end of msgorig.element-->]]>
-
-<!ENTITY % msgorig.attlist "INCLUDE">
-<![%msgorig.attlist;[
-<!ATTLIST msgorig
-		%common.attrib;
-		%msgorig.role.attrib;
-		%local.msgorig.attrib;
->
-<!--end of msgorig.attlist-->]]>
-<!--end of msgorig.module-->]]>
-
-<!ENTITY % msgaud.module "INCLUDE">
-<![%msgaud.module;[
-<!ENTITY % local.msgaud.attrib "">
-<!ENTITY % msgaud.role.attrib "%role.attrib;">
-
-<!ENTITY % msgaud.element "INCLUDE">
-<![%msgaud.element;[
-<!ELEMENT msgaud (%para.char.mix;)*>
-<!--end of msgaud.element-->]]>
-
-<!ENTITY % msgaud.attlist "INCLUDE">
-<![%msgaud.attlist;[
-<!ATTLIST msgaud
-		%common.attrib;
-		%msgaud.role.attrib;
-		%local.msgaud.attrib;
->
-<!--end of msgaud.attlist-->]]>
-<!--end of msgaud.module-->]]>
-
-<!ENTITY % msgexplan.module "INCLUDE">
-<![%msgexplan.module;[
-<!ENTITY % local.msgexplan.attrib "">
-<!ENTITY % msgexplan.role.attrib "%role.attrib;">
-
-<!ENTITY % msgexplan.element "INCLUDE">
-<![%msgexplan.element;[
-<!ELEMENT msgexplan (title?, (%component.mix;)+)>
-<!--end of msgexplan.element-->]]>
-
-<!ENTITY % msgexplan.attlist "INCLUDE">
-<![%msgexplan.attlist;[
-<!ATTLIST msgexplan
-		%common.attrib;
-		%msgexplan.role.attrib;
-		%local.msgexplan.attrib;
->
-<!--end of msgexplan.attlist-->]]>
-<!--end of msgexplan.module-->]]>
-<!--end of msgset.content.module-->]]>
-
-<!-- QandASet ........................ -->
-<!ENTITY % qandset.content.module "INCLUDE">
-<![ %qandset.content.module; [
-<!ENTITY % qandset.module "INCLUDE">
-<![ %qandset.module; [
-<!ENTITY % local.qandset.attrib "">
-<!ENTITY % qandset.role.attrib "%role.attrib;">
-
-<!ENTITY % qandset.element "INCLUDE">
-<![ %qandset.element; [
-<!ELEMENT qandaset ((%formalobject.title.content;)?,
-			(%qandaset.mix;)*,
-                        (qandadiv+|qandaentry+))>
-<!--end of qandset.element-->]]>
-
-<!ENTITY % qandset.attlist "INCLUDE">
-<![ %qandset.attlist; [
-<!ATTLIST qandaset
-		defaultlabel	(qanda|number|none)       #IMPLIED
-		%common.attrib;
-		%qandset.role.attrib;
-		%local.qandset.attrib;>
-<!--end of qandset.attlist-->]]>
-<!--end of qandset.module-->]]>
-
-<!ENTITY % qandadiv.module "INCLUDE">
-<![ %qandadiv.module; [
-<!ENTITY % local.qandadiv.attrib "">
-<!ENTITY % qandadiv.role.attrib "%role.attrib;">
-
-<!ENTITY % qandadiv.element "INCLUDE">
-<![ %qandadiv.element; [
-<!ELEMENT qandadiv ((%formalobject.title.content;)?, 
-			(%qandaset.mix;)*,
-			(qandadiv+|qandaentry+))>
-<!--end of qandadiv.element-->]]>
-
-<!ENTITY % qandadiv.attlist "INCLUDE">
-<![ %qandadiv.attlist; [
-<!ATTLIST qandadiv
-		%common.attrib;
-		%qandadiv.role.attrib;
-		%local.qandadiv.attrib;>
-<!--end of qandadiv.attlist-->]]>
-<!--end of qandadiv.module-->]]>
-
-<!ENTITY % qandaentry.module "INCLUDE">
-<![ %qandaentry.module; [
-<!ENTITY % local.qandaentry.attrib "">
-<!ENTITY % qandaentry.role.attrib "%role.attrib;">
-
-<!ENTITY % qandaentry.element "INCLUDE">
-<![ %qandaentry.element; [
-<!ELEMENT qandaentry (revhistory?, question, answer*)>
-<!--end of qandaentry.element-->]]>
-
-<!ENTITY % qandaentry.attlist "INCLUDE">
-<![ %qandaentry.attlist; [
-<!ATTLIST qandaentry
-		%common.attrib;
-		%qandaentry.role.attrib;
-		%local.qandaentry.attrib;>
-<!--end of qandaentry.attlist-->]]>
-<!--end of qandaentry.module-->]]>
-
-<!ENTITY % question.module "INCLUDE">
-<![ %question.module; [
-<!ENTITY % local.question.attrib "">
-<!ENTITY % question.role.attrib "%role.attrib;">
-
-<!ENTITY % question.element "INCLUDE">
-<![ %question.element; [
-<!ELEMENT question (label?, (%qandaset.mix;)+)>
-<!--end of question.element-->]]>
-
-<!ENTITY % question.attlist "INCLUDE">
-<![ %question.attlist; [
-<!ATTLIST question
-		%common.attrib;
-		%question.role.attrib;
-		%local.question.attrib;
->
-<!--end of question.attlist-->]]>
-<!--end of question.module-->]]>
-
-<!ENTITY % answer.module "INCLUDE">
-<![ %answer.module; [
-<!ENTITY % local.answer.attrib "">
-<!ENTITY % answer.role.attrib "%role.attrib;">
-
-<!ENTITY % answer.element "INCLUDE">
-<![ %answer.element; [
-<!ELEMENT answer (label?, (%qandaset.mix;)*, qandaentry*)>
-<!--end of answer.element-->]]>
-
-<!ENTITY % answer.attlist "INCLUDE">
-<![ %answer.attlist; [
-<!ATTLIST answer
-		%common.attrib;
-		%answer.role.attrib;
-		%local.answer.attrib;
->
-<!--end of answer.attlist-->]]>
-<!--end of answer.module-->]]>
-
-<!ENTITY % label.module "INCLUDE">
-<![ %label.module; [
-<!ENTITY % local.label.attrib "">
-<!ENTITY % label.role.attrib "%role.attrib;">
-
-<!ENTITY % label.element "INCLUDE">
-<![ %label.element; [
-<!ELEMENT label (%word.char.mix;)*>
-<!--end of label.element-->]]>
-
-<!ENTITY % label.attlist "INCLUDE">
-<![ %label.attlist; [
-<!ATTLIST label
-		%common.attrib;
-		%label.role.attrib;
-		%local.label.attrib;
->
-<!--end of label.attlist-->]]>
-<!--end of label.module-->]]>
-<!--end of qandset.content.module-->]]>
-
-<!-- Procedure ........................ -->
-
-<!ENTITY % procedure.content.module "INCLUDE">
-<![%procedure.content.module;[
-<!ENTITY % procedure.module "INCLUDE">
-<![%procedure.module;[
-<!ENTITY % local.procedure.attrib "">
-<!ENTITY % procedure.role.attrib "%role.attrib;">
-
-<!ENTITY % procedure.element "INCLUDE">
-<![%procedure.element;[
-<!ELEMENT procedure ((%formalobject.title.content;)?,
-	(%component.mix;)*, step+)>
-<!--end of procedure.element-->]]>
-
-<!ENTITY % procedure.attlist "INCLUDE">
-<![%procedure.attlist;[
-<!ATTLIST procedure
-		%common.attrib;
-		%procedure.role.attrib;
-		%local.procedure.attrib;
->
-<!--end of procedure.attlist-->]]>
-<!--end of procedure.module-->]]>
-
-<!ENTITY % step.module "INCLUDE">
-<![%step.module;[
-<!ENTITY % local.step.attrib "">
-<!ENTITY % step.role.attrib "%role.attrib;">
-
-<!ENTITY % step.element "INCLUDE">
-<![%step.element;[
-<!ELEMENT step (title?, (((%component.mix;)+, (substeps,
-		(%component.mix;)*)?) | (substeps, (%component.mix;)*)))>
-<!--end of step.element-->]]>
-
-<!-- Performance: Whether the Step must be performed -->
-<!-- not #REQUIRED! -->
-
-
-<!ENTITY % step.attlist "INCLUDE">
-<![%step.attlist;[
-<!ATTLIST step
-		performance	(optional
-				|required)	"required"
-		%common.attrib;
-		%step.role.attrib;
-		%local.step.attrib;
->
-<!--end of step.attlist-->]]>
-<!--end of step.module-->]]>
-
-<!ENTITY % substeps.module "INCLUDE">
-<![%substeps.module;[
-<!ENTITY % local.substeps.attrib "">
-<!ENTITY % substeps.role.attrib "%role.attrib;">
-
-<!ENTITY % substeps.element "INCLUDE">
-<![%substeps.element;[
-<!ELEMENT substeps (step+)>
-<!--end of substeps.element-->]]>
-
-<!-- Performance: whether entire set of substeps must be performed -->
-<!-- not #REQUIRED! -->
-
-
-<!ENTITY % substeps.attlist "INCLUDE">
-<![%substeps.attlist;[
-<!ATTLIST substeps
-		performance	(optional
-				|required)	"required"
-		%common.attrib;
-		%substeps.role.attrib;
-		%local.substeps.attrib;
->
-<!--end of substeps.attlist-->]]>
-<!--end of substeps.module-->]]>
-<!--end of procedure.content.module-->]]>
-
-<!-- Sidebar .......................... -->
-
-<!ENTITY % sidebar.content.model "INCLUDE">
-<![ %sidebar.content.model; [
-
-<!ENTITY % sidebarinfo.module "INCLUDE">
-<![ %sidebarinfo.module; [
-<!ENTITY % local.sidebarinfo.attrib "">
-<!ENTITY % sidebarinfo.role.attrib "%role.attrib;">
-
-<!ENTITY % sidebarinfo.element "INCLUDE">
-<![ %sidebarinfo.element; [
-<!ELEMENT sidebarinfo ((graphic | mediaobject | legalnotice | modespec 
-	| subjectset | keywordset | itermset | %bibliocomponent.mix;)+)>
-<!--end of sidebarinfo.element-->]]>
-
-<!ENTITY % sidebarinfo.attlist "INCLUDE">
-<![ %sidebarinfo.attlist; [
-<!ATTLIST sidebarinfo
-		%common.attrib;
-		%sidebarinfo.role.attrib;
-		%local.sidebarinfo.attrib;
->
-<!--end of sidebarinfo.attlist-->]]>
-<!--end of sidebarinfo.module-->]]>
-
-<!ENTITY % sidebar.module "INCLUDE">
-<![%sidebar.module;[
-<!ENTITY % local.sidebar.attrib "">
-<!ENTITY % sidebar.role.attrib "%role.attrib;">
-
-<!ENTITY % sidebar.element "INCLUDE">
-<![%sidebar.element;[
-<!ELEMENT sidebar (sidebarinfo?, 
-                   (%formalobject.title.content;)?,
-                   (%sidebar.mix;)+)>
-<!--end of sidebar.element-->]]>
-
-<!ENTITY % sidebar.attlist "INCLUDE">
-<![%sidebar.attlist;[
-<!ATTLIST sidebar
-		%common.attrib;
-		%sidebar.role.attrib;
-		%local.sidebar.attrib;
->
-<!--end of sidebar.attlist-->]]>
-<!--end of sidebar.module-->]]>
-<!--end of sidebar.content.model-->]]>
-
-<!-- ...................................................................... -->
-<!-- Paragraph-related elements ........................................... -->
-
-<!ENTITY % abstract.module "INCLUDE">
-<![%abstract.module;[
-<!ENTITY % local.abstract.attrib "">
-<!ENTITY % abstract.role.attrib "%role.attrib;">
-
-<!ENTITY % abstract.element "INCLUDE">
-<![%abstract.element;[
-<!ELEMENT abstract (title?, (%para.class;)+)>
-<!--end of abstract.element-->]]>
-
-<!ENTITY % abstract.attlist "INCLUDE">
-<![%abstract.attlist;[
-<!ATTLIST abstract
-		%common.attrib;
-		%abstract.role.attrib;
-		%local.abstract.attrib;
->
-<!--end of abstract.attlist-->]]>
-<!--end of abstract.module-->]]>
-
-<!ENTITY % authorblurb.module "INCLUDE">
-<![%authorblurb.module;[
-<!ENTITY % local.authorblurb.attrib "">
-<!ENTITY % authorblurb.role.attrib "%role.attrib;">
-
-<!ENTITY % authorblurb.element "INCLUDE">
-<![%authorblurb.element;[
-<!ELEMENT authorblurb (title?, (%para.class;)+)>
-<!--end of authorblurb.element-->]]>
-
-<!ENTITY % authorblurb.attlist "INCLUDE">
-<![%authorblurb.attlist;[
-<!ATTLIST authorblurb
-		%common.attrib;
-		%authorblurb.role.attrib;
-		%local.authorblurb.attrib;
->
-<!--end of authorblurb.attlist-->]]>
-<!--end of authorblurb.module-->]]>
-
-<!ENTITY % blockquote.module "INCLUDE">
-<![%blockquote.module;[
-
-<!ENTITY % local.blockquote.attrib "">
-<!ENTITY % blockquote.role.attrib "%role.attrib;">
-
-<!ENTITY % blockquote.element "INCLUDE">
-<![%blockquote.element;[
-<!ELEMENT blockquote (title?, attribution?, (%component.mix;)+)>
-<!--end of blockquote.element-->]]>
-
-<!ENTITY % blockquote.attlist "INCLUDE">
-<![%blockquote.attlist;[
-<!ATTLIST blockquote
-		%common.attrib;
-		%blockquote.role.attrib;
-		%local.blockquote.attrib;
->
-<!--end of blockquote.attlist-->]]>
-<!--end of blockquote.module-->]]>
-
-<!ENTITY % attribution.module "INCLUDE">
-<![%attribution.module;[
-<!ENTITY % local.attribution.attrib "">
-<!ENTITY % attribution.role.attrib "%role.attrib;">
-
-<!ENTITY % attribution.element "INCLUDE">
-<![%attribution.element;[
-<!ELEMENT attribution (%para.char.mix;)*>
-<!--end of attribution.element-->]]>
-
-<!ENTITY % attribution.attlist "INCLUDE">
-<![%attribution.attlist;[
-<!ATTLIST attribution
-		%common.attrib;
-		%attribution.role.attrib;
-		%local.attribution.attrib;
->
-<!--end of attribution.attlist-->]]>
-<!--end of attribution.module-->]]>
-
-<!ENTITY % bridgehead.module "INCLUDE">
-<![%bridgehead.module;[
-<!ENTITY % local.bridgehead.attrib "">
-<!ENTITY % bridgehead.role.attrib "%role.attrib;">
-
-<!ENTITY % bridgehead.element "INCLUDE">
-<![%bridgehead.element;[
-<!ELEMENT bridgehead (%title.char.mix;)*>
-<!--end of bridgehead.element-->]]>
-
-<!-- Renderas: Indicates the format in which the BridgeHead
-		should appear -->
-
-
-<!ENTITY % bridgehead.attlist "INCLUDE">
-<![%bridgehead.attlist;[
-<!ATTLIST bridgehead
-		renderas	(other
-				|sect1
-				|sect2
-				|sect3
-				|sect4
-				|sect5)		#IMPLIED
-		%common.attrib;
-		%bridgehead.role.attrib;
-		%local.bridgehead.attrib;
->
-<!--end of bridgehead.attlist-->]]>
-<!--end of bridgehead.module-->]]>
-
-<!ENTITY % remark.module "INCLUDE">
-<![%remark.module;[
-<!ENTITY % local.remark.attrib "">
-<!ENTITY % remark.role.attrib "%role.attrib;">
-
-<!ENTITY % remark.element "INCLUDE">
-<![%remark.element;[
-<!ELEMENT remark (%para.char.mix;)*>
-<!--end of remark.element-->]]>
-
-<!ENTITY % remark.attlist "INCLUDE">
-<![%remark.attlist;[
-<!ATTLIST remark
-		%common.attrib;
-		%remark.role.attrib;
-		%local.remark.attrib;
->
-<!--end of remark.attlist-->]]>
-<!--end of remark.module-->]]>
-
-<!ENTITY % epigraph.module "INCLUDE">
-<![%epigraph.module;[
-<!ENTITY % local.epigraph.attrib "">
-<!ENTITY % epigraph.role.attrib "%role.attrib;">
-
-<!ENTITY % epigraph.element "INCLUDE">
-<![%epigraph.element;[
-<!ELEMENT epigraph (attribution?, (%para.class;)+)>
-<!--end of epigraph.element-->]]>
-
-<!ENTITY % epigraph.attlist "INCLUDE">
-<![%epigraph.attlist;[
-<!ATTLIST epigraph
-		%common.attrib;
-		%epigraph.role.attrib;
-		%local.epigraph.attrib;
->
-<!--end of epigraph.attlist-->]]>
-<!-- Attribution (defined above)-->
-<!--end of epigraph.module-->]]>
-
-<!ENTITY % footnote.module "INCLUDE">
-<![%footnote.module;[
-<!ENTITY % local.footnote.attrib "">
-<!ENTITY % footnote.role.attrib "%role.attrib;">
-
-<!ENTITY % footnote.element "INCLUDE">
-<![%footnote.element;[
-<!ELEMENT footnote ((%footnote.mix;)+)>
-<!--end of footnote.element-->]]>
-
-<!ENTITY % footnote.attlist "INCLUDE">
-<![%footnote.attlist;[
-<!ATTLIST footnote
-		%label.attrib;
-		%common.attrib;
-		%footnote.role.attrib;
-		%local.footnote.attrib;
->
-<!--end of footnote.attlist-->]]>
-<!--end of footnote.module-->]]>
-
-<!ENTITY % highlights.module "INCLUDE">
-<![%highlights.module;[
-<!ENTITY % local.highlights.attrib "">
-<!ENTITY % highlights.role.attrib "%role.attrib;">
-
-<!ENTITY % highlights.element "INCLUDE">
-<![%highlights.element;[
-<!ELEMENT highlights ((%highlights.mix;)+)>
-<!--end of highlights.element-->]]>
-
-<!ENTITY % highlights.attlist "INCLUDE">
-<![%highlights.attlist;[
-<!ATTLIST highlights
-		%common.attrib;
-		%highlights.role.attrib;
-		%local.highlights.attrib;
->
-<!--end of highlights.attlist-->]]>
-<!--end of highlights.module-->]]>
-
-<!ENTITY % formalpara.module "INCLUDE">
-<![%formalpara.module;[
-<!ENTITY % local.formalpara.attrib "">
-<!ENTITY % formalpara.role.attrib "%role.attrib;">
-
-<!ENTITY % formalpara.element "INCLUDE">
-<![%formalpara.element;[
-<!ELEMENT formalpara (title, (%ndxterm.class;)*, para)>
-<!--end of formalpara.element-->]]>
-
-<!ENTITY % formalpara.attlist "INCLUDE">
-<![%formalpara.attlist;[
-<!ATTLIST formalpara
-		%common.attrib;
-		%formalpara.role.attrib;
-		%local.formalpara.attrib;
->
-<!--end of formalpara.attlist-->]]>
-<!--end of formalpara.module-->]]>
-
-<!ENTITY % para.module "INCLUDE">
-<![%para.module;[
-<!ENTITY % local.para.attrib "">
-<!ENTITY % para.role.attrib "%role.attrib;">
-
-<!ENTITY % para.element "INCLUDE">
-<![%para.element;[
-<!ELEMENT para (%para.char.mix; | %para.mix;)*>
-<!--end of para.element-->]]>
-
-<!ENTITY % para.attlist "INCLUDE">
-<![%para.attlist;[
-<!ATTLIST para
-		%common.attrib;
-		%para.role.attrib;
-		%local.para.attrib;
->
-<!--end of para.attlist-->]]>
-<!--end of para.module-->]]>
-
-<!ENTITY % simpara.module "INCLUDE">
-<![%simpara.module;[
-<!ENTITY % local.simpara.attrib "">
-<!ENTITY % simpara.role.attrib "%role.attrib;">
-
-<!ENTITY % simpara.element "INCLUDE">
-<![%simpara.element;[
-<!ELEMENT simpara (%para.char.mix;)*>
-<!--end of simpara.element-->]]>
-
-<!ENTITY % simpara.attlist "INCLUDE">
-<![%simpara.attlist;[
-<!ATTLIST simpara
-		%common.attrib;
-		%simpara.role.attrib;
-		%local.simpara.attrib;
->
-<!--end of simpara.attlist-->]]>
-<!--end of simpara.module-->]]>
-
-<!ENTITY % admon.module "INCLUDE">
-<![%admon.module;[
-<!ENTITY % local.admon.attrib "">
-<!ENTITY % admon.role.attrib "%role.attrib;">
-
-
-<!ENTITY % caution.element "INCLUDE">
-<![%caution.element;[
-<!ELEMENT caution (title?, (%admon.mix;)+)>
-<!--end of caution.element-->]]>
-
-<!ENTITY % caution.attlist "INCLUDE">
-<![%caution.attlist;[
-<!ATTLIST caution
-		%common.attrib;
-		%admon.role.attrib;
-		%local.admon.attrib;
->
-<!--end of caution.attlist-->]]>
-
-
-<!ENTITY % important.element "INCLUDE">
-<![%important.element;[
-<!ELEMENT important (title?, (%admon.mix;)+)>
-<!--end of important.element-->]]>
-
-<!ENTITY % important.attlist "INCLUDE">
-<![%important.attlist;[
-<!ATTLIST important
-		%common.attrib;
-		%admon.role.attrib;
-		%local.admon.attrib;
->
-<!--end of important.attlist-->]]>
-
-
-<!ENTITY % note.element "INCLUDE">
-<![%note.element;[
-<!ELEMENT note (title?, (%admon.mix;)+)>
-<!--end of note.element-->]]>
-
-<!ENTITY % note.attlist "INCLUDE">
-<![%note.attlist;[
-<!ATTLIST note
-		%common.attrib;
-		%admon.role.attrib;
-		%local.admon.attrib;
->
-<!--end of note.attlist-->]]>
-
-
-<!ENTITY % tip.element "INCLUDE">
-<![%tip.element;[
-<!ELEMENT tip (title?, (%admon.mix;)+)>
-<!--end of tip.element-->]]>
-
-<!ENTITY % tip.attlist "INCLUDE">
-<![%tip.attlist;[
-<!ATTLIST tip
-		%common.attrib;
-		%admon.role.attrib;
-		%local.admon.attrib;
->
-<!--end of tip.attlist-->]]>
-
-
-<!ENTITY % warning.element "INCLUDE">
-<![%warning.element;[
-<!ELEMENT warning (title?, (%admon.mix;)+)>
-<!--end of warning.element-->]]>
-
-<!ENTITY % warning.attlist "INCLUDE">
-<![%warning.attlist;[
-<!ATTLIST warning
-		%common.attrib;
-		%admon.role.attrib;
-		%local.admon.attrib;
->
-<!--end of warning.attlist-->]]>
-
-<!--end of admon.module-->]]>
-
-<!-- ...................................................................... -->
-<!-- Lists ................................................................ -->
-
-<!-- GlossList ........................ -->
-
-<!ENTITY % glosslist.module "INCLUDE">
-<![%glosslist.module;[
-<!ENTITY % local.glosslist.attrib "">
-<!ENTITY % glosslist.role.attrib "%role.attrib;">
-
-<!ENTITY % glosslist.element "INCLUDE">
-<![%glosslist.element;[
-<!ELEMENT glosslist (glossentry+)>
-<!--end of glosslist.element-->]]>
-
-<!ENTITY % glosslist.attlist "INCLUDE">
-<![%glosslist.attlist;[
-<!ATTLIST glosslist
-		%common.attrib;
-		%glosslist.role.attrib;
-		%local.glosslist.attrib;
->
-<!--end of glosslist.attlist-->]]>
-<!--end of glosslist.module-->]]>
-
-<!ENTITY % glossentry.content.module "INCLUDE">
-<![%glossentry.content.module;[
-<!ENTITY % glossentry.module "INCLUDE">
-<![%glossentry.module;[
-<!ENTITY % local.glossentry.attrib "">
-<!ENTITY % glossentry.role.attrib "%role.attrib;">
-
-<!ENTITY % glossentry.element "INCLUDE">
-<![%glossentry.element;[
-<!ELEMENT glossentry (glossterm, acronym?, abbrev?,
-                      (%ndxterm.class;)*,
-                      revhistory?, (glosssee|glossdef+))>
-<!--end of glossentry.element-->]]>
-
-<!-- SortAs: String by which the GlossEntry is to be sorted
-		(alphabetized) in lieu of its proper content -->
-
-
-<!ENTITY % glossentry.attlist "INCLUDE">
-<![%glossentry.attlist;[
-<!ATTLIST glossentry
-		sortas		CDATA		#IMPLIED
-		%common.attrib;
-		%glossentry.role.attrib;
-		%local.glossentry.attrib;
->
-<!--end of glossentry.attlist-->]]>
-<!--end of glossentry.module-->]]>
-
-<!-- GlossTerm (defined in the Inlines section, below)-->
-<!ENTITY % glossdef.module "INCLUDE">
-<![%glossdef.module;[
-<!ENTITY % local.glossdef.attrib "">
-<!ENTITY % glossdef.role.attrib "%role.attrib;">
-
-<!ENTITY % glossdef.element "INCLUDE">
-<![%glossdef.element;[
-<!ELEMENT glossdef ((%glossdef.mix;)+, glossseealso*)>
-<!--end of glossdef.element-->]]>
-
-<!-- Subject: List of subjects; keywords for the definition -->
-
-
-<!ENTITY % glossdef.attlist "INCLUDE">
-<![%glossdef.attlist;[
-<!ATTLIST glossdef
-		subject		CDATA		#IMPLIED
-		%common.attrib;
-		%glossdef.role.attrib;
-		%local.glossdef.attrib;
->
-<!--end of glossdef.attlist-->]]>
-<!--end of glossdef.module-->]]>
-
-<!ENTITY % glosssee.module "INCLUDE">
-<![%glosssee.module;[
-<!ENTITY % local.glosssee.attrib "">
-<!ENTITY % glosssee.role.attrib "%role.attrib;">
-
-<!ENTITY % glosssee.element "INCLUDE">
-<![%glosssee.element;[
-<!ELEMENT glosssee (%para.char.mix;)*>
-<!--end of glosssee.element-->]]>
-
-<!-- OtherTerm: Reference to the GlossEntry whose GlossTerm
-		should be displayed at the point of the GlossSee -->
-
-
-<!ENTITY % glosssee.attlist "INCLUDE">
-<![%glosssee.attlist;[
-<!ATTLIST glosssee
-		otherterm	IDREF		#IMPLIED
-		%common.attrib;
-		%glosssee.role.attrib;
-		%local.glosssee.attrib;
->
-<!--end of glosssee.attlist-->]]>
-<!--end of glosssee.module-->]]>
-
-<!ENTITY % glossseealso.module "INCLUDE">
-<![%glossseealso.module;[
-<!ENTITY % local.glossseealso.attrib "">
-<!ENTITY % glossseealso.role.attrib "%role.attrib;">
-
-<!ENTITY % glossseealso.element "INCLUDE">
-<![%glossseealso.element;[
-<!ELEMENT glossseealso (%para.char.mix;)*>
-<!--end of glossseealso.element-->]]>
-
-<!-- OtherTerm: Reference to the GlossEntry whose GlossTerm
-		should be displayed at the point of the GlossSeeAlso -->
-
-
-<!ENTITY % glossseealso.attlist "INCLUDE">
-<![%glossseealso.attlist;[
-<!ATTLIST glossseealso
-		otherterm	IDREF		#IMPLIED
-		%common.attrib;
-		%glossseealso.role.attrib;
-		%local.glossseealso.attrib;
->
-<!--end of glossseealso.attlist-->]]>
-<!--end of glossseealso.module-->]]>
-<!--end of glossentry.content.module-->]]>
-
-<!-- ItemizedList and OrderedList ..... -->
-
-<!ENTITY % itemizedlist.module "INCLUDE">
-<![%itemizedlist.module;[
-<!ENTITY % local.itemizedlist.attrib "">
-<!ENTITY % itemizedlist.role.attrib "%role.attrib;">
-
-<!ENTITY % itemizedlist.element "INCLUDE">
-<![%itemizedlist.element;[
-<!ELEMENT itemizedlist ((%formalobject.title.content;)?, listitem+)>
-<!--end of itemizedlist.element-->]]>
-
-<!-- Spacing: Whether the vertical space in the list should be
-		compressed -->
-<!-- Mark: Keyword, e.g., bullet, dash, checkbox, none;
-		list of keywords and defaults are implementation specific -->
-
-
-<!ENTITY % itemizedlist.attlist "INCLUDE">
-<![%itemizedlist.attlist;[
-<!ATTLIST itemizedlist		spacing		(normal
-				|compact)	#IMPLIED
-		%mark.attrib;
-		%common.attrib;
-		%itemizedlist.role.attrib;
-		%local.itemizedlist.attrib;
->
-<!--end of itemizedlist.attlist-->]]>
-<!--end of itemizedlist.module-->]]>
-
-<!ENTITY % orderedlist.module "INCLUDE">
-<![%orderedlist.module;[
-<!ENTITY % local.orderedlist.attrib "">
-<!ENTITY % orderedlist.role.attrib "%role.attrib;">
-
-<!ENTITY % orderedlist.element "INCLUDE">
-<![%orderedlist.element;[
-<!ELEMENT orderedlist ((%formalobject.title.content;)?, listitem+)>
-<!--end of orderedlist.element-->]]>
-
-<!-- Numeration: Style of ListItem numbered; default is expected
-		to be Arabic -->
-<!-- InheritNum: Specifies for a nested list that the numbering
-		of ListItems should include the number of the item
-		within which they are nested (e.g., 1a and 1b within 1,
-		rather than a and b) -->
-<!-- Continuation: Where list numbering begins afresh (Restarts,
-		the default) or continues that of the immediately preceding 
-		list (Continues) -->
-<!-- Spacing: Whether the vertical space in the list should be
-		compressed -->
-
-
-<!ENTITY % orderedlist.attlist "INCLUDE">
-<![%orderedlist.attlist;[
-<!ATTLIST orderedlist
-		numeration	(arabic
-				|upperalpha
-				|loweralpha
-				|upperroman
-				|lowerroman)	#IMPLIED
-		inheritnum	(inherit
-				|ignore)	"ignore"
-		continuation	(continues
-				|restarts)	"restarts"
-		spacing		(normal
-				|compact)	#IMPLIED
-		%common.attrib;
-		%orderedlist.role.attrib;
-		%local.orderedlist.attrib;
->
-<!--end of orderedlist.attlist-->]]>
-<!--end of orderedlist.module-->]]>
-
-<!ENTITY % listitem.module "INCLUDE">
-<![%listitem.module;[
-<!ENTITY % local.listitem.attrib "">
-<!ENTITY % listitem.role.attrib "%role.attrib;">
-
-<!ENTITY % listitem.element "INCLUDE">
-<![%listitem.element;[
-<!ELEMENT listitem ((%component.mix;)+)>
-<!--end of listitem.element-->]]>
-
-<!-- Override: Indicates the mark to be used for this ListItem
-		instead of the default mark or the mark specified by
-		the Mark attribute on the enclosing ItemizedList -->
-
-
-<!ENTITY % listitem.attlist "INCLUDE">
-<![%listitem.attlist;[
-<!ATTLIST listitem
-		override	CDATA		#IMPLIED
-		%common.attrib;
-		%listitem.role.attrib;
-		%local.listitem.attrib;
->
-<!--end of listitem.attlist-->]]>
-<!--end of listitem.module-->]]>
-
-<!-- SegmentedList .................... -->
-<!ENTITY % segmentedlist.content.module "INCLUDE">
-<![%segmentedlist.content.module;[
-<!ENTITY % segmentedlist.module "INCLUDE">
-<![%segmentedlist.module;[
-<!ENTITY % local.segmentedlist.attrib "">
-<!ENTITY % segmentedlist.role.attrib "%role.attrib;">
-
-<!ENTITY % segmentedlist.element "INCLUDE">
-<![%segmentedlist.element;[
-<!ELEMENT segmentedlist ((%formalobject.title.content;)?,
-                         segtitle, segtitle+,
-                         seglistitem+)>
-<!--end of segmentedlist.element-->]]>
-
-<!ENTITY % segmentedlist.attlist "INCLUDE">
-<![%segmentedlist.attlist;[
-<!ATTLIST segmentedlist
-		%common.attrib;
-		%segmentedlist.role.attrib;
-		%local.segmentedlist.attrib;
->
-<!--end of segmentedlist.attlist-->]]>
-<!--end of segmentedlist.module-->]]>
-
-<!ENTITY % segtitle.module "INCLUDE">
-<![%segtitle.module;[
-<!ENTITY % local.segtitle.attrib "">
-<!ENTITY % segtitle.role.attrib "%role.attrib;">
-
-<!ENTITY % segtitle.element "INCLUDE">
-<![%segtitle.element;[
-<!ELEMENT segtitle (%title.char.mix;)*>
-<!--end of segtitle.element-->]]>
-
-<!ENTITY % segtitle.attlist "INCLUDE">
-<![%segtitle.attlist;[
-<!ATTLIST segtitle
-		%common.attrib;
-		%segtitle.role.attrib;
-		%local.segtitle.attrib;
->
-<!--end of segtitle.attlist-->]]>
-<!--end of segtitle.module-->]]>
-
-<!ENTITY % seglistitem.module "INCLUDE">
-<![%seglistitem.module;[
-<!ENTITY % local.seglistitem.attrib "">
-<!ENTITY % seglistitem.role.attrib "%role.attrib;">
-
-<!ENTITY % seglistitem.element "INCLUDE">
-<![%seglistitem.element;[
-<!ELEMENT seglistitem (seg, seg+)>
-<!--end of seglistitem.element-->]]>
-
-<!ENTITY % seglistitem.attlist "INCLUDE">
-<![%seglistitem.attlist;[
-<!ATTLIST seglistitem
-		%common.attrib;
-		%seglistitem.role.attrib;
-		%local.seglistitem.attrib;
->
-<!--end of seglistitem.attlist-->]]>
-<!--end of seglistitem.module-->]]>
-
-<!ENTITY % seg.module "INCLUDE">
-<![%seg.module;[
-<!ENTITY % local.seg.attrib "">
-<!ENTITY % seg.role.attrib "%role.attrib;">
-
-<!ENTITY % seg.element "INCLUDE">
-<![%seg.element;[
-<!ELEMENT seg (%para.char.mix;)*>
-<!--end of seg.element-->]]>
-
-<!ENTITY % seg.attlist "INCLUDE">
-<![%seg.attlist;[
-<!ATTLIST seg
-		%common.attrib;
-		%seg.role.attrib;
-		%local.seg.attrib;
->
-<!--end of seg.attlist-->]]>
-<!--end of seg.module-->]]>
-<!--end of segmentedlist.content.module-->]]>
-
-<!-- SimpleList ....................... -->
-
-<!ENTITY % simplelist.content.module "INCLUDE">
-<![%simplelist.content.module;[
-<!ENTITY % simplelist.module "INCLUDE">
-<![%simplelist.module;[
-<!ENTITY % local.simplelist.attrib "">
-<!ENTITY % simplelist.role.attrib "%role.attrib;">
-
-<!ENTITY % simplelist.element "INCLUDE">
-<![%simplelist.element;[
-<!ELEMENT simplelist (member+)>
-<!--end of simplelist.element-->]]>
-
-<!-- Columns: The number of columns the array should contain -->
-<!-- Type: How the Members of the SimpleList should be
-		formatted: Inline (members separated with commas etc.
-		inline), Vert (top to bottom in n Columns), or Horiz (in
-		the direction of text flow) in n Columns.  If Column
-		is 1 or implied, Type=Vert and Type=Horiz give the same
-		results. -->
-
-
-<!ENTITY % simplelist.attlist "INCLUDE">
-<![%simplelist.attlist;[
-<!ATTLIST simplelist
-		columns		CDATA		#IMPLIED
-		type		(inline
-				|vert
-				|horiz)		"vert"
-		%common.attrib;
-		%simplelist.role.attrib;
-		%local.simplelist.attrib;
->
-<!--end of simplelist.attlist-->]]>
-<!--end of simplelist.module-->]]>
-
-<!ENTITY % member.module "INCLUDE">
-<![%member.module;[
-<!ENTITY % local.member.attrib "">
-<!ENTITY % member.role.attrib "%role.attrib;">
-
-<!ENTITY % member.element "INCLUDE">
-<![%member.element;[
-<!ELEMENT member (%para.char.mix;)*>
-<!--end of member.element-->]]>
-
-<!ENTITY % member.attlist "INCLUDE">
-<![%member.attlist;[
-<!ATTLIST member
-		%common.attrib;
-		%member.role.attrib;
-		%local.member.attrib;
->
-<!--end of member.attlist-->]]>
-<!--end of member.module-->]]>
-<!--end of simplelist.content.module-->]]>
-
-<!-- VariableList ..................... -->
-
-<!ENTITY % variablelist.content.module "INCLUDE">
-<![%variablelist.content.module;[
-<!ENTITY % variablelist.module "INCLUDE">
-<![%variablelist.module;[
-<!ENTITY % local.variablelist.attrib "">
-<!ENTITY % variablelist.role.attrib "%role.attrib;">
-
-<!ENTITY % variablelist.element "INCLUDE">
-<![%variablelist.element;[
-<!ELEMENT variablelist ((%formalobject.title.content;)?, varlistentry+)>
-<!--end of variablelist.element-->]]>
-
-<!-- TermLength: Length beyond which the presentation engine
-		may consider the Term too long and select an alternate
-		presentation of the Term and, or, its associated ListItem. -->
-
-
-<!ENTITY % variablelist.attlist "INCLUDE">
-<![%variablelist.attlist;[
-<!ATTLIST variablelist
-		termlength	CDATA		#IMPLIED
-		%common.attrib;
-		%variablelist.role.attrib;
-		%local.variablelist.attrib;
->
-<!--end of variablelist.attlist-->]]>
-<!--end of variablelist.module-->]]>
-
-<!ENTITY % varlistentry.module "INCLUDE">
-<![%varlistentry.module;[
-<!ENTITY % local.varlistentry.attrib "">
-<!ENTITY % varlistentry.role.attrib "%role.attrib;">
-
-<!ENTITY % varlistentry.element "INCLUDE">
-<![%varlistentry.element;[
-<!ELEMENT varlistentry (term+, listitem)>
-<!--end of varlistentry.element-->]]>
-
-<!ENTITY % varlistentry.attlist "INCLUDE">
-<![%varlistentry.attlist;[
-<!ATTLIST varlistentry
-		%common.attrib;
-		%varlistentry.role.attrib;
-		%local.varlistentry.attrib;
->
-<!--end of varlistentry.attlist-->]]>
-<!--end of varlistentry.module-->]]>
-
-<!ENTITY % term.module "INCLUDE">
-<![%term.module;[
-<!ENTITY % local.term.attrib "">
-<!ENTITY % term.role.attrib "%role.attrib;">
-
-<!ENTITY % term.element "INCLUDE">
-<![%term.element;[
-<!ELEMENT term (%para.char.mix;)*>
-<!--end of term.element-->]]>
-
-<!ENTITY % term.attlist "INCLUDE">
-<![%term.attlist;[
-<!ATTLIST term
-		%common.attrib;
-		%term.role.attrib;
-		%local.term.attrib;
->
-<!--end of term.attlist-->]]>
-<!--end of term.module-->]]>
-
-<!-- ListItem (defined above)-->
-<!--end of variablelist.content.module-->]]>
-
-<!-- CalloutList ...................... -->
-
-<!ENTITY % calloutlist.content.module "INCLUDE">
-<![%calloutlist.content.module;[
-<!ENTITY % calloutlist.module "INCLUDE">
-<![%calloutlist.module;[
-<!ENTITY % local.calloutlist.attrib "">
-<!ENTITY % calloutlist.role.attrib "%role.attrib;">
-
-<!ENTITY % calloutlist.element "INCLUDE">
-<![%calloutlist.element;[
-<!ELEMENT calloutlist ((%formalobject.title.content;)?, callout+)>
-<!--end of calloutlist.element-->]]>
-
-<!ENTITY % calloutlist.attlist "INCLUDE">
-<![%calloutlist.attlist;[
-<!ATTLIST calloutlist
-		%common.attrib;
-		%calloutlist.role.attrib;
-		%local.calloutlist.attrib;
->
-<!--end of calloutlist.attlist-->]]>
-<!--end of calloutlist.module-->]]>
-
-<!ENTITY % callout.module "INCLUDE">
-<![%callout.module;[
-<!ENTITY % local.callout.attrib "">
-<!ENTITY % callout.role.attrib "%role.attrib;">
-
-<!ENTITY % callout.element "INCLUDE">
-<![%callout.element;[
-<!ELEMENT callout ((%component.mix;)+)>
-<!--end of callout.element-->]]>
-
-<!-- AreaRefs: IDs of one or more Areas or AreaSets described
-		by this Callout -->
-
-
-<!ENTITY % callout.attlist "INCLUDE">
-<![%callout.attlist;[
-<!ATTLIST callout
-		arearefs	IDREFS		#REQUIRED
-		%common.attrib;
-		%callout.role.attrib;
-		%local.callout.attrib;
->
-<!--end of callout.attlist-->]]>
-<!--end of callout.module-->]]>
-<!--end of calloutlist.content.module-->]]>
-
-<!-- ...................................................................... -->
-<!-- Objects .............................................................. -->
-
-<!-- Examples etc. .................... -->
-
-<!ENTITY % example.module "INCLUDE">
-<![%example.module;[
-<!ENTITY % local.example.attrib "">
-<!ENTITY % example.role.attrib "%role.attrib;">
-
-<!ENTITY % example.element "INCLUDE">
-<![%example.element;[
-<!ELEMENT example ((%formalobject.title.content;), (%example.mix;)+)>
-<!--end of example.element-->]]>
-
-<!ENTITY % example.attlist "INCLUDE">
-<![%example.attlist;[
-<!ATTLIST example
-		%label.attrib;
-		%width.attrib;
-		%common.attrib;
-		%example.role.attrib;
-		%local.example.attrib;
->
-<!--end of example.attlist-->]]>
-<!--end of example.module-->]]>
-
-<!ENTITY % informalexample.module "INCLUDE">
-<![%informalexample.module;[
-<!ENTITY % local.informalexample.attrib "">
-<!ENTITY % informalexample.role.attrib "%role.attrib;">
-
-<!ENTITY % informalexample.element "INCLUDE">
-<![%informalexample.element;[
-<!ELEMENT informalexample ((%example.mix;)+)>
-<!--end of informalexample.element-->]]>
-
-<!ENTITY % informalexample.attlist "INCLUDE">
-<![%informalexample.attlist;[
-<!ATTLIST informalexample
-		%width.attrib;
-		%common.attrib;
-		%informalexample.role.attrib;
-		%local.informalexample.attrib;
->
-<!--end of informalexample.attlist-->]]>
-<!--end of informalexample.module-->]]>
-
-<!ENTITY % programlistingco.module "INCLUDE">
-<![%programlistingco.module;[
-<!ENTITY % local.programlistingco.attrib "">
-<!ENTITY % programlistingco.role.attrib "%role.attrib;">
-
-<!ENTITY % programlistingco.element "INCLUDE">
-<![%programlistingco.element;[
-<!ELEMENT programlistingco (areaspec, programlisting, calloutlist*)>
-<!--end of programlistingco.element-->]]>
-
-<!ENTITY % programlistingco.attlist "INCLUDE">
-<![%programlistingco.attlist;[
-<!ATTLIST programlistingco
-		%common.attrib;
-		%programlistingco.role.attrib;
-		%local.programlistingco.attrib;
->
-<!--end of programlistingco.attlist-->]]>
-<!-- CalloutList (defined above in Lists)-->
-<!--end of informalexample.module-->]]>
-
-<!ENTITY % areaspec.content.module "INCLUDE">
-<![%areaspec.content.module;[
-<!ENTITY % areaspec.module "INCLUDE">
-<![%areaspec.module;[
-<!ENTITY % local.areaspec.attrib "">
-<!ENTITY % areaspec.role.attrib "%role.attrib;">
-
-<!ENTITY % areaspec.element "INCLUDE">
-<![%areaspec.element;[
-<!ELEMENT areaspec ((area|areaset)+)>
-<!--end of areaspec.element-->]]>
-
-<!-- Units: global unit of measure in which coordinates in
-		this spec are expressed:
-
-		- CALSPair "x1,y1 x2,y2": lower-left and upper-right 
-		coordinates in a rectangle describing repro area in which 
-		graphic is placed, where X and Y dimensions are each some 
-		number 0..10000 (taken from CALS graphic attributes)
-
-		- LineColumn "line column": line number and column number
-		at which to start callout text in "linespecific" content
-
-		- LineRange "startline endline": whole lines from startline
-		to endline in "linespecific" content
-
-		- LineColumnPair "line1 col1 line2 col2": starting and ending
-		points of area in "linespecific" content that starts at
-		first position and ends at second position (including the
-		beginnings of any intervening lines)
-
-		- Other: directive to look at value of OtherUnits attribute
-		to get implementation-specific keyword
-
-		The default is implementation-specific; usually dependent on 
-		the parent element (GraphicCO gets CALSPair, ProgramListingCO
-		and ScreenCO get LineColumn) -->
-<!-- OtherUnits: User-defined units -->
-
-
-<!ENTITY % areaspec.attlist "INCLUDE">
-<![%areaspec.attlist;[
-<!ATTLIST areaspec
-		units		(calspair
-				|linecolumn
-				|linerange
-				|linecolumnpair
-				|other)		#IMPLIED
-		otherunits	NMTOKEN		#IMPLIED
-		%common.attrib;
-		%areaspec.role.attrib;
-		%local.areaspec.attrib;
->
-<!--end of areaspec.attlist-->]]>
-<!--end of areaspec.module-->]]>
-
-<!ENTITY % area.module "INCLUDE">
-<![%area.module;[
-<!ENTITY % local.area.attrib "">
-<!ENTITY % area.role.attrib "%role.attrib;">
-
-<!ENTITY % area.element "INCLUDE">
-<![%area.element;[
-<!ELEMENT area EMPTY>
-<!--end of area.element-->]]>
-
-<!-- bug number/symbol override or initialization -->
-<!-- to any related information -->
-<!-- Units: unit of measure in which coordinates in this
-		area are expressed; inherits from AreaSet and AreaSpec -->
-<!-- OtherUnits: User-defined units -->
-
-
-<!ENTITY % area.attlist "INCLUDE">
-<![%area.attlist;[
-<!ATTLIST area
-		%label.attrib;		
-		%linkends.attrib;
-		units		(calspair
-				|linecolumn
-				|linerange
-				|linecolumnpair
-				|other)		#IMPLIED
-		otherunits	NMTOKEN		#IMPLIED
-		coords		CDATA		#REQUIRED
-		%idreq.common.attrib;
-		%area.role.attrib;
-		%local.area.attrib;
->
-<!--end of area.attlist-->]]>
-<!--end of area.module-->]]>
-
-<!ENTITY % areaset.module "INCLUDE">
-<![%areaset.module;[
-<!ENTITY % local.areaset.attrib "">
-<!ENTITY % areaset.role.attrib "%role.attrib;">
-
-<!ENTITY % areaset.element "INCLUDE">
-<![%areaset.element;[
-<!ELEMENT areaset (area+)>
-<!--end of areaset.element-->]]>
-
-<!-- bug number/symbol override or initialization -->
-<!-- Units: unit of measure in which coordinates in this
-		area are expressed; inherits from AreaSpec -->
-
-
-<!ENTITY % areaset.attlist "INCLUDE">
-<![%areaset.attlist;[
-<!ATTLIST areaset
-		%label.attrib;
-		units		(calspair
-				|linecolumn
-				|linerange
-				|linecolumnpair
-				|other)		#IMPLIED
-		otherunits	NMTOKEN		#IMPLIED
-		coords		CDATA		#REQUIRED
-		%idreq.common.attrib;
-		%areaset.role.attrib;
-		%local.areaset.attrib;
->
-<!--end of areaset.attlist-->]]>
-<!--end of areaset.module-->]]>
-<!--end of areaspec.content.module-->]]>
-
-<!ENTITY % programlisting.module "INCLUDE">
-<![%programlisting.module;[
-<!ENTITY % local.programlisting.attrib "">
-<!ENTITY % programlisting.role.attrib "%role.attrib;">
-
-<!ENTITY % programlisting.element "INCLUDE">
-<![%programlisting.element;[
-<!ELEMENT programlisting (%para.char.mix; | co | lineannotation)*>
-<!--end of programlisting.element-->]]>
-
-<!ENTITY % programlisting.attlist "INCLUDE">
-<![%programlisting.attlist;[
-<!ATTLIST programlisting
-		%width.attrib;
-		%linespecific.attrib;
-		%common.attrib;
-		%programlisting.role.attrib;
-		%local.programlisting.attrib;
->
-<!--end of programlisting.attlist-->]]>
-<!--end of programlisting.module-->]]>
-
-<!ENTITY % literallayout.module "INCLUDE">
-<![%literallayout.module;[
-<!ENTITY % local.literallayout.attrib "">
-<!ENTITY % literallayout.role.attrib "%role.attrib;">
-
-<!ENTITY % literallayout.element "INCLUDE">
-<![%literallayout.element;[
-<!ELEMENT literallayout (%para.char.mix; | lineannotation | co)*>
-<!--end of literallayout.element-->]]>
-
-<!ENTITY % literallayout.attlist "INCLUDE">
-<![%literallayout.attlist;[
-<!ATTLIST literallayout
-		%width.attrib;
-		%linespecific.attrib;
-		class	(monospaced|normal)	"normal"
-		%common.attrib;
-		%literallayout.role.attrib;
-		%local.literallayout.attrib;
->
-<!--end of literallayout.attlist-->]]>
-<!-- LineAnnotation (defined in the Inlines section, below)-->
-<!--end of literallayout.module-->]]>
-
-<!ENTITY % screenco.module "INCLUDE">
-<![%screenco.module;[
-<!ENTITY % local.screenco.attrib "">
-<!ENTITY % screenco.role.attrib "%role.attrib;">
-
-<!ENTITY % screenco.element "INCLUDE">
-<![%screenco.element;[
-<!ELEMENT screenco (areaspec, screen, calloutlist*)>
-<!--end of screenco.element-->]]>
-
-<!ENTITY % screenco.attlist "INCLUDE">
-<![%screenco.attlist;[
-<!ATTLIST screenco
-		%common.attrib;
-		%screenco.role.attrib;
-		%local.screenco.attrib;
->
-<!--end of screenco.attlist-->]]>
-<!-- AreaSpec (defined above)-->
-<!-- CalloutList (defined above in Lists)-->
-<!--end of screenco.module-->]]>
-
-<!ENTITY % screen.module "INCLUDE">
-<![%screen.module;[
-<!ENTITY % local.screen.attrib "">
-<!ENTITY % screen.role.attrib "%role.attrib;">
-
-<!ENTITY % screen.element "INCLUDE">
-<![%screen.element;[
-<!ELEMENT screen (%para.char.mix; | co | lineannotation)*>
-<!--end of screen.element-->]]>
-
-<!ENTITY % screen.attlist "INCLUDE">
-<![%screen.attlist;[
-<!ATTLIST screen
-		%width.attrib;
-		%linespecific.attrib;
-		%common.attrib;
-		%screen.role.attrib;
-		%local.screen.attrib;
->
-<!--end of screen.attlist-->]]>
-<!--end of screen.module-->]]>
-
-<!ENTITY % screenshot.content.module "INCLUDE">
-<![%screenshot.content.module;[
-<!ENTITY % screenshot.module "INCLUDE">
-<![%screenshot.module;[
-<!ENTITY % local.screenshot.attrib "">
-<!ENTITY % screenshot.role.attrib "%role.attrib;">
-
-<!ENTITY % screenshot.element "INCLUDE">
-<![%screenshot.element;[
-<!ELEMENT screenshot (screeninfo?,
-                      (graphic|graphicco
-                      |mediaobject|mediaobjectco))>
-<!--end of screenshot.element-->]]>
-
-<!ENTITY % screenshot.attlist "INCLUDE">
-<![%screenshot.attlist;[
-<!ATTLIST screenshot
-		%common.attrib;
-		%screenshot.role.attrib;
-		%local.screenshot.attrib;
->
-<!--end of screenshot.attlist-->]]>
-<!--end of screenshot.module-->]]>
-
-<!ENTITY % screeninfo.module "INCLUDE">
-<![%screeninfo.module;[
-<!ENTITY % local.screeninfo.attrib "">
-<!ENTITY % screeninfo.role.attrib "%role.attrib;">
-
-<!ENTITY % screeninfo.element "INCLUDE">
-<![%screeninfo.element;[
-<!ELEMENT screeninfo (%para.char.mix;)*>
-<!--end of screeninfo.element-->]]>
-
-<!ENTITY % screeninfo.attlist "INCLUDE">
-<![%screeninfo.attlist;[
-<!ATTLIST screeninfo
-		%common.attrib;
-		%screeninfo.role.attrib;
-		%local.screeninfo.attrib;
->
-<!--end of screeninfo.attlist-->]]>
-<!--end of screeninfo.module-->]]>
-<!--end of screenshot.content.module-->]]>
-
-<!-- Figures etc. ..................... -->
-
-<!ENTITY % figure.module "INCLUDE">
-<![%figure.module;[
-<!ENTITY % local.figure.attrib "">
-<!ENTITY % figure.role.attrib "%role.attrib;">
-
-<!ENTITY % figure.element "INCLUDE">
-<![%figure.element;[
-<!ELEMENT figure ((%formalobject.title.content;), (%figure.mix; |
-		%link.char.class;)+)>
-<!--end of figure.element-->]]>
-
-<!-- Float: Whether the Figure is supposed to be rendered
-		where convenient (yes (1) value) or at the place it occurs
-		in the text (no (0) value, the default) -->
-
-
-<!ENTITY % figure.attlist "INCLUDE">
-<![%figure.attlist;[
-<!ATTLIST figure
-		float		%yesorno.attvals;	'0'
-		pgwide      	%yesorno.attvals;       #IMPLIED
-		%label.attrib;
-		%common.attrib;
-		%figure.role.attrib;
-		%local.figure.attrib;
->
-<!--end of figure.attlist-->]]>
-<!--end of figure.module-->]]>
-
-<!ENTITY % informalfigure.module "INCLUDE">
-<![ %informalfigure.module; [
-<!ENTITY % local.informalfigure.attrib "">
-<!ENTITY % informalfigure.role.attrib "%role.attrib;">
-
-<!ENTITY % informalfigure.element "INCLUDE">
-<![ %informalfigure.element; [
-<!ELEMENT informalfigure ((%figure.mix; | %link.char.class;)+)>
-<!--end of informalfigure.element-->]]>
-
-<!ENTITY % informalfigure.attlist "INCLUDE">
-<![ %informalfigure.attlist; [
-<!--
-Float: Whether the Figure is supposed to be rendered
-where convenient (yes (1) value) or at the place it occurs
-in the text (no (0) value, the default)
--->
-<!ATTLIST informalfigure
-		float		%yesorno.attvals;	"0"
-		pgwide      	%yesorno.attvals;       #IMPLIED
-		%label.attrib;
-		%common.attrib;
-		%informalfigure.role.attrib;
-		%local.informalfigure.attrib;
->
-<!--end of informalfigure.attlist-->]]>
-<!--end of informalfigure.module-->]]>
-
-<!ENTITY % graphicco.module "INCLUDE">
-<![%graphicco.module;[
-<!ENTITY % local.graphicco.attrib "">
-<!ENTITY % graphicco.role.attrib "%role.attrib;">
-
-<!ENTITY % graphicco.element "INCLUDE">
-<![%graphicco.element;[
-<!ELEMENT graphicco (areaspec, graphic, calloutlist*)>
-<!--end of graphicco.element-->]]>
-
-<!ENTITY % graphicco.attlist "INCLUDE">
-<![%graphicco.attlist;[
-<!ATTLIST graphicco
-		%common.attrib;
-		%graphicco.role.attrib;
-		%local.graphicco.attrib;
->
-<!--end of graphicco.attlist-->]]>
-<!-- AreaSpec (defined above in Examples)-->
-<!-- CalloutList (defined above in Lists)-->
-<!--end of graphicco.module-->]]>
-
-<!-- Graphical data can be the content of Graphic, or you can reference
-     an external file either as an entity (Entitref) or a filename
-     (Fileref). -->
-
-<!ENTITY % graphic.module "INCLUDE">
-<![%graphic.module;[
-<!ENTITY % local.graphic.attrib "">
-<!ENTITY % graphic.role.attrib "%role.attrib;">
-
-<!ENTITY % graphic.element "INCLUDE">
-<![%graphic.element;[
-<!ELEMENT graphic EMPTY>
-<!--end of graphic.element-->]]>
-
-<!ENTITY % graphic.attlist "INCLUDE">
-<![%graphic.attlist;[
-<!ATTLIST graphic
-		%graphics.attrib;
-		%common.attrib;
-		%graphic.role.attrib;
-		%local.graphic.attrib;
->
-<!--end of graphic.attlist-->]]>
-<!--end of graphic.module-->]]>
-
-<!ENTITY % inlinegraphic.module "INCLUDE">
-<![%inlinegraphic.module;[
-<!ENTITY % local.inlinegraphic.attrib "">
-<!ENTITY % inlinegraphic.role.attrib "%role.attrib;">
-
-<!ENTITY % inlinegraphic.element "INCLUDE">
-<![%inlinegraphic.element;[
-<!ELEMENT inlinegraphic EMPTY>
-<!--end of inlinegraphic.element-->]]>
-
-<!ENTITY % inlinegraphic.attlist "INCLUDE">
-<![%inlinegraphic.attlist;[
-<!ATTLIST inlinegraphic
-		%graphics.attrib;
-		%common.attrib;
-		%inlinegraphic.role.attrib;
-		%local.inlinegraphic.attrib;
->
-<!--end of inlinegraphic.attlist-->]]>
-<!--end of inlinegraphic.module-->]]>
-
-<!ENTITY % mediaobject.content.module "INCLUDE">
-<![ %mediaobject.content.module; [
-
-<!ENTITY % mediaobject.module "INCLUDE">
-<![ %mediaobject.module; [
-<!ENTITY % local.mediaobject.attrib "">
-<!ENTITY % mediaobject.role.attrib "%role.attrib;">
-
-<!ENTITY % mediaobject.element "INCLUDE">
-<![ %mediaobject.element; [
-<!ELEMENT mediaobject (objectinfo?,
-                           (%mediaobject.mix;),
-			   (%mediaobject.mix;|textobject)*,
-			   caption?)>
-<!--end of mediaobject.element-->]]>
-
-<!ENTITY % mediaobject.attlist "INCLUDE">
-<![ %mediaobject.attlist; [
-<!ATTLIST mediaobject
-		%common.attrib;
-		%mediaobject.role.attrib;
-		%local.mediaobject.attrib;
->
-<!--end of mediaobject.attlist-->]]>
-<!--end of mediaobject.module-->]]>
-
-<!ENTITY % inlinemediaobject.module "INCLUDE">
-<![ %inlinemediaobject.module; [
-<!ENTITY % local.inlinemediaobject.attrib "">
-<!ENTITY % inlinemediaobject.role.attrib "%role.attrib;">
-
-<!ENTITY % inlinemediaobject.element "INCLUDE">
-<![ %inlinemediaobject.element; [
-<!ELEMENT inlinemediaobject (objectinfo?,
-                	         (%mediaobject.mix;),
-				 (%mediaobject.mix;|textobject)*)>
-<!--end of inlinemediaobject.element-->]]>
-
-<!ENTITY % inlinemediaobject.attlist "INCLUDE">
-<![ %inlinemediaobject.attlist; [
-<!ATTLIST inlinemediaobject
-		%common.attrib;
-		%inlinemediaobject.role.attrib;
-		%local.inlinemediaobject.attrib;
->
-<!--end of inlinemediaobject.attlist-->]]>
-<!--end of inlinemediaobject.module-->]]>
-
-<!ENTITY % videoobject.module "INCLUDE">
-<![ %videoobject.module; [
-<!ENTITY % local.videoobject.attrib "">
-<!ENTITY % videoobject.role.attrib "%role.attrib;">
-
-<!ENTITY % videoobject.element "INCLUDE">
-<![ %videoobject.element; [
-<!ELEMENT videoobject (objectinfo?, videodata)>
-<!--end of videoobject.element-->]]>
-
-<!ENTITY % videoobject.attlist "INCLUDE">
-<![ %videoobject.attlist; [
-<!ATTLIST videoobject
-		%common.attrib;
-		%videoobject.role.attrib;
-		%local.videoobject.attrib;
->
-<!--end of videoobject.attlist-->]]>
-<!--end of videoobject.module-->]]>
-
-<!ENTITY % audioobject.module "INCLUDE">
-<![ %audioobject.module; [
-<!ENTITY % local.audioobject.attrib "">
-<!ENTITY % audioobject.role.attrib "%role.attrib;">
-
-<!ENTITY % audioobject.element "INCLUDE">
-<![ %audioobject.element; [
-<!ELEMENT audioobject (objectinfo?, audiodata)>
-<!--end of audioobject.element-->]]>
-
-<!ENTITY % audioobject.attlist "INCLUDE">
-<![ %audioobject.attlist; [
-<!ATTLIST audioobject
-		%common.attrib;
-		%audioobject.role.attrib;
-		%local.audioobject.attrib;
->
-<!--end of audioobject.attlist-->]]>
-<!--end of audioobject.module-->]]>
-
-<!ENTITY % imageobject.module "INCLUDE">
-<![ %imageobject.module; [
-<!ENTITY % local.imageobject.attrib "">
-<!ENTITY % imageobject.role.attrib "%role.attrib;">
-
-<!ENTITY % imageobject.element "INCLUDE">
-<![ %imageobject.element; [
-<!ELEMENT imageobject (objectinfo?, imagedata)>
-<!--end of imageobject.element-->]]>
-
-<!ENTITY % imageobject.attlist "INCLUDE">
-<![ %imageobject.attlist; [
-<!ATTLIST imageobject
-		%common.attrib;
-		%imageobject.role.attrib;
-		%local.imageobject.attrib;
->
-<!--end of imageobject.attlist-->]]>
-<!--end of imageobject.module-->]]>
-
-<!ENTITY % textobject.module "INCLUDE">
-<![ %textobject.module; [
-<!ENTITY % local.textobject.attrib "">
-<!ENTITY % textobject.role.attrib "%role.attrib;">
-
-<!ENTITY % textobject.element "INCLUDE">
-<![ %textobject.element; [
-<!ELEMENT textobject (objectinfo?, (phrase|(%textobject.mix;)+))>
-<!--end of textobject.element-->]]>
-
-<!ENTITY % textobject.attlist "INCLUDE">
-<![ %textobject.attlist; [
-<!ATTLIST textobject
-		%common.attrib;
-		%textobject.role.attrib;
-		%local.textobject.attrib;
->
-<!--end of textobject.attlist-->]]>
-<!--end of textobject.module-->]]>
-
-<!ENTITY % objectinfo.module "INCLUDE">
-<![ %objectinfo.module; [
-<!ENTITY % local.objectinfo.attrib "">
-<!ENTITY % objectinfo.role.attrib "%role.attrib;">
-
-<!ENTITY % objectinfo.element "INCLUDE">
-<![ %objectinfo.element; [
-<!ELEMENT objectinfo ((graphic | mediaobject | legalnotice | modespec 
-	| subjectset | keywordset | itermset | %bibliocomponent.mix;)+)>
-<!--end of objectinfo.element-->]]>
-
-<!ENTITY % objectinfo.attlist "INCLUDE">
-<![ %objectinfo.attlist; [
-<!ATTLIST objectinfo
-		%common.attrib;
-		%objectinfo.role.attrib;
-		%local.objectinfo.attrib;
->
-<!--end of objectinfo.attlist-->]]>
-<!--end of objectinfo.module-->]]>
-
-<!--EntityRef: Name of an external entity containing the content
-	of the object data-->
-<!--FileRef: Filename, qualified by a pathname if desired, 
-	designating the file containing the content of the object data-->
-<!--Format: Notation of the element content, if any-->
-<!--SrcCredit: Information about the source of the image-->
-<!ENTITY % local.objectdata.attrib "">
-<!ENTITY % objectdata.attrib
-	"
-	entityref	ENTITY		#IMPLIED
-	fileref 	CDATA		#IMPLIED
-	format		(%notation.class;)
-					#IMPLIED
-	srccredit	CDATA		#IMPLIED
-	%local.objectdata.attrib;"
->
-
-<!ENTITY % videodata.module "INCLUDE">
-<![ %videodata.module; [
-<!ENTITY % local.videodata.attrib "">
-<!ENTITY % videodata.role.attrib "%role.attrib;">
-
-<!ENTITY % videodata.element "INCLUDE">
-<![ %videodata.element; [
-<!ELEMENT videodata EMPTY>
-<!--end of videodata.element-->]]>
-
-<!ENTITY % videodata.attlist "INCLUDE">
-<![ %videodata.attlist; [
-
-<!--Width: Same as CALS reprowid (desired width)-->
-<!--Depth: Same as CALS reprodep (desired depth)-->
-<!--Align: Same as CALS hplace with 'none' removed; #IMPLIED means 
-	application-specific-->
-<!--Scale: Conflation of CALS hscale and vscale-->
-<!--Scalefit: Same as CALS scalefit-->
-<!ATTLIST videodata
-		%common.attrib;
-		%objectdata.attrib;
-	width		CDATA		#IMPLIED
-	depth		CDATA		#IMPLIED
-	align		(left
-			|right 
-			|center)	#IMPLIED
-	scale		CDATA		#IMPLIED
-	scalefit	%yesorno.attvals;
-					#IMPLIED
-		%videodata.role.attrib;
-		%local.videodata.attrib;
->
-<!--end of videodata.attlist-->]]>
-<!--end of videodata.module-->]]>
-
-<!ENTITY % audiodata.module "INCLUDE">
-<![ %audiodata.module; [
-<!ENTITY % local.audiodata.attrib "">
-<!ENTITY % audiodata.role.attrib "%role.attrib;">
-
-<!ENTITY % audiodata.element "INCLUDE">
-<![ %audiodata.element; [
-<!ELEMENT audiodata EMPTY>
-<!--end of audiodata.element-->]]>
-
-<!ENTITY % audiodata.attlist "INCLUDE">
-<![ %audiodata.attlist; [
-<!ATTLIST audiodata
-		%common.attrib;
-		%objectdata.attrib;
-		%local.audiodata.attrib;
-		%audiodata.role.attrib;
->
-<!--end of audiodata.attlist-->]]>
-<!--end of audiodata.module-->]]>
-
-<!ENTITY % imagedata.module "INCLUDE">
-<![ %imagedata.module; [
-<!ENTITY % local.imagedata.attrib "">
-<!ENTITY % imagedata.role.attrib "%role.attrib;">
-
-<!ENTITY % imagedata.element "INCLUDE">
-<![ %imagedata.element; [
-<!ELEMENT imagedata EMPTY>
-<!--end of imagedata.element-->]]>
-
-<!ENTITY % imagedata.attlist "INCLUDE">
-<![ %imagedata.attlist; [
-
-<!--Width: Same as CALS reprowid (desired width)-->
-<!--Depth: Same as CALS reprodep (desired depth)-->
-<!--Align: Same as CALS hplace with 'none' removed; #IMPLIED means 
-	application-specific-->
-<!--Scale: Conflation of CALS hscale and vscale-->
-<!--Scalefit: Same as CALS scalefit-->
-<!ATTLIST imagedata
-		%common.attrib;
-		%objectdata.attrib;
-	width		CDATA		#IMPLIED
-	depth		CDATA		#IMPLIED
-	align		(left
-			|right 
-			|center)	#IMPLIED
-	scale		CDATA		#IMPLIED
-	scalefit	%yesorno.attvals;
-					#IMPLIED
-		%local.imagedata.attrib;
-		%imagedata.role.attrib;
->
-<!--end of imagedata.attlist-->]]>
-<!--end of imagedata.module-->]]>
-
-<!ENTITY % caption.module "INCLUDE">
-<![ %caption.module; [
-<!ENTITY % local.caption.attrib "">
-<!ENTITY % caption.role.attrib "%role.attrib;">
-
-<!ENTITY % caption.element "INCLUDE">
-<![ %caption.element; [
-<!ELEMENT caption (%textobject.mix;)*>
-<!--end of caption.element-->]]>
-
-<!ENTITY % caption.attlist "INCLUDE">
-<![ %caption.attlist; [
-<!ATTLIST caption
-		%common.attrib;
-		%local.caption.attrib;
-		%caption.role.attrib;
->
-<!--end of caption.attlist-->]]>
-<!--end of caption.module-->]]>
-
-<!ENTITY % mediaobjectco.module "INCLUDE">
-<![ %mediaobjectco.module; [
-<!ENTITY % local.mediaobjectco.attrib "">
-<!ENTITY % mediaobjectco.role.attrib "%role.attrib;">
-
-<!ENTITY % mediaobjectco.element "INCLUDE">
-<![ %mediaobjectco.element; [
-<!ELEMENT mediaobjectco (objectinfo?, imageobjectco,
-			   (imageobjectco|textobject)*)>
-<!--end of mediaobjectco.element-->]]>
-
-<!ENTITY % mediaobjectco.attlist "INCLUDE">
-<![ %mediaobjectco.attlist; [
-<!ATTLIST mediaobjectco
-		%common.attrib;
-		%mediaobjectco.role.attrib;
-		%local.mediaobjectco.attrib;
->
-<!--end of mediaobjectco.attlist-->]]>
-<!--end of mediaobjectco.module-->]]>
-
-<!ENTITY % imageobjectco.module "INCLUDE">
-<![ %imageobjectco.module; [
-<!ENTITY % local.imageobjectco.attrib "">
-<!ENTITY % imageobjectco.role.attrib "%role.attrib;">
-
-<!ENTITY % imageobjectco.element "INCLUDE">
-<![ %imageobjectco.element; [
-<!ELEMENT imageobjectco (areaspec, imageobject, calloutlist*)>
-<!--end of imageobjectco.element-->]]>
-
-<!ENTITY % imageobjectco.attlist "INCLUDE">
-<![ %imageobjectco.attlist; [
-<!ATTLIST imageobjectco
-		%common.attrib;
-		%imageobjectco.role.attrib;
-		%local.imageobjectco.attrib;
->
-<!--end of imageobjectco.attlist-->]]>
-<!--end of imageobjectco.module-->]]>
-<!--end of mediaobject.content.module-->]]>
-
-<!-- Equations ........................ -->
-
-<!-- This PE provides a mechanism for replacing equation content, -->
-<!-- perhaps adding a new or different model (e.g., MathML) -->
-<!ENTITY % equation.content "(alt?, (graphic+|mediaobject+))">
-<!ENTITY % inlineequation.content "(alt?, (graphic+|inlinemediaobject+))">
-
-<!ENTITY % equation.module "INCLUDE">
-<![%equation.module;[
-<!ENTITY % local.equation.attrib "">
-<!ENTITY % equation.role.attrib "%role.attrib;">
-
-<!ENTITY % equation.element "INCLUDE">
-<![%equation.element;[
-<!ELEMENT equation ((%formalobject.title.content;)?, (informalequation |
-		%equation.content;))>
-<!--end of equation.element-->]]>
-
-<!ENTITY % equation.attlist "INCLUDE">
-<![%equation.attlist;[
-<!ATTLIST equation
-		%label.attrib;
-	 	%common.attrib;
-		%equation.role.attrib;
-		%local.equation.attrib;
->
-<!--end of equation.attlist-->]]>
-<!--end of equation.module-->]]>
-
-<!ENTITY % informalequation.module "INCLUDE">
-<![%informalequation.module;[
-<!ENTITY % local.informalequation.attrib "">
-<!ENTITY % informalequation.role.attrib "%role.attrib;">
-
-<!ENTITY % informalequation.element "INCLUDE">
-<![%informalequation.element;[
-<!ELEMENT informalequation (%equation.content;) >
-<!--end of informalequation.element-->]]>
-
-<!ENTITY % informalequation.attlist "INCLUDE">
-<![%informalequation.attlist;[
-<!ATTLIST informalequation
-		%common.attrib;
-		%informalequation.role.attrib;
-		%local.informalequation.attrib;
->
-<!--end of informalequation.attlist-->]]>
-<!--end of informalequation.module-->]]>
-
-<!ENTITY % inlineequation.module "INCLUDE">
-<![%inlineequation.module;[
-<!ENTITY % local.inlineequation.attrib "">
-<!ENTITY % inlineequation.role.attrib "%role.attrib;">
-
-<!ENTITY % inlineequation.element "INCLUDE">
-<![%inlineequation.element;[
-<!ELEMENT inlineequation (%inlineequation.content;)>
-<!--end of inlineequation.element-->]]>
-
-<!ENTITY % inlineequation.attlist "INCLUDE">
-<![%inlineequation.attlist;[
-<!ATTLIST inlineequation
-		%common.attrib;
-		%inlineequation.role.attrib;
-		%local.inlineequation.attrib;
->
-<!--end of inlineequation.attlist-->]]>
-<!--end of inlineequation.module-->]]>
-
-<!ENTITY % alt.module "INCLUDE">
-<![%alt.module;[
-<!ENTITY % local.alt.attrib "">
-<!ENTITY % alt.role.attrib "%role.attrib;">
-
-<!ENTITY % alt.element "INCLUDE">
-<![%alt.element;[
-<!ELEMENT alt (#PCDATA)>
-<!--end of alt.element-->]]>
-
-<!ENTITY % alt.attlist "INCLUDE">
-<![%alt.attlist;[
-<!ATTLIST alt 
-		%common.attrib;
-		%alt.role.attrib;
-		%local.alt.attrib;
->
-<!--end of alt.attlist-->]]>
-<!--end of alt.module-->]]>
-
-<!-- Tables ........................... -->
-
-<!ENTITY % table.module "INCLUDE">
-<![%table.module;[
-
-<!-- Choose a table model. CALS or OASIS XML Exchange -->
-
-<!ENTITY % cals.table.module "INCLUDE">
-<![%cals.table.module;[
-<!ENTITY % exchange.table.module "IGNORE">
-]]>
-<!ENTITY % exchange.table.module "INCLUDE">
-
-<!ENTITY % tables.role.attrib "%role.attrib;">
-
-<![%cals.table.module;[
-<!-- Add label and role attributes to table and informaltable -->
-<!ENTITY % bodyatt "%label.attrib;">
-
-<!-- Add common attributes to Table, TGroup, TBody, THead, TFoot, Row, 
-     EntryTbl, and Entry (and InformalTable element). -->
-<!ENTITY % secur
-	"%common.attrib;
-	%tables.role.attrib;">
-
-<!ENTITY % common.table.attribs
-	"%bodyatt;
-	%secur;">
-
-<!-- Content model for Table. -->
-<!ENTITY % tbl.table.mdl
-	"((%formalobject.title.content;), (%ndxterm.class;)*,
-          (graphic+|mediaobject+|tgroup+))">
-
-<!-- Allow either objects or inlines; beware of REs between elements. -->
-<!ENTITY % tbl.entry.mdl "%para.char.mix; | %tabentry.mix;">
-
-<!-- Reference CALS Table Model -->
-<!ENTITY % tablemodel 
-  PUBLIC "-//OASIS//DTD DocBook XML CALS Table Model V4.1.2//EN"
-  "calstblx.dtd">
-]]>
-
-<![%exchange.table.module;[
-<!-- Add common attributes and the Label attribute to Table and -->
-<!-- InformalTable.                                             -->
-<!ENTITY % bodyatt 
-	"%common.attrib;
-	%label.attrib;
-	%tables.role.attrib;">
-
-<!ENTITY % common.table.attribs
-	"%bodyatt;">
-
-<!-- Add common attributes to TGroup, ColSpec, TBody, THead, Row, Entry -->
-
-<!ENTITY % tbl.tgroup.att       "%common.attrib;">
-<!ENTITY % tbl.colspec.att      "%common.attrib;">
-<!ENTITY % tbl.tbody.att        "%common.attrib;">
-<!ENTITY % tbl.thead.att        "%common.attrib;">
-<!ENTITY % tbl.row.att          "%common.attrib;">
-<!ENTITY % tbl.entry.att        "%common.attrib;">
-
-<!-- Content model for Table. -->
-<!ENTITY % tbl.table.mdl
-	"((%formalobject.title.content;),
-          (%ndxterm.class;)*,
-          (graphic+|tgroup+))">
-
-<!-- Allow either objects or inlines; beware of REs between elements. -->
-<!ENTITY % tbl.entry.mdl "(%para.char.mix; | %tabentry.mix;)*">
-
-<!-- Reference OASIS Exchange Table Model -->
-<!ENTITY % tablemodel 
-  PUBLIC "-//OASIS//DTD XML Exchange Table Model 19990315//EN"
-  "soextblx.dtd">
-]]>
-
-%tablemodel;
-
-<!--end of table.module-->]]>
-
-<!ENTITY % informaltable.module "INCLUDE">
-<![%informaltable.module;[
-
-<!-- Note that InformalTable is dependent on some of the entity
-     declarations that customize Table. -->
-
-<!ENTITY % local.informaltable.attrib "">
-
-<!ENTITY % informaltable.element "INCLUDE">
-<![%informaltable.element;[
-<!ELEMENT informaltable (graphic+|mediaobject+|tgroup+)>
-<!--end of informaltable.element-->]]>
-
-<!-- Frame, Colsep, and Rowsep must be repeated because
-		they are not in entities in the table module. -->
-<!-- includes TabStyle, ToCentry, ShortEntry, 
-				Orient, PgWide -->
-<!-- includes Label -->
-<!-- includes common attributes -->
-
-
-<!ENTITY % informaltable.attlist "INCLUDE">
-<![%informaltable.attlist;[
-<!ATTLIST informaltable
-		frame		(top
-				|bottom
-				|topbot
-				|all
-				|sides
-				|none)			#IMPLIED
-		colsep		%yesorno.attvals;	#IMPLIED
-		rowsep		%yesorno.attvals;	#IMPLIED
-		%common.table.attribs;
-		%tbl.table.att;
-		%local.informaltable.attrib;
->
-<!--end of informaltable.attlist-->]]>
-<!--end of informaltable.module-->]]>
-
-<!-- ...................................................................... -->
-<!-- Synopses ............................................................. -->
-
-<!-- Synopsis ......................... -->
-
-<!ENTITY % synopsis.module "INCLUDE">
-<![%synopsis.module;[
-<!ENTITY % local.synopsis.attrib "">
-<!ENTITY % synopsis.role.attrib "%role.attrib;">
-
-<!ENTITY % synopsis.element "INCLUDE">
-<![%synopsis.element;[
-<!ELEMENT synopsis (%para.char.mix; | graphic | mediaobject | lineannotation | co)*>
-<!--end of synopsis.element-->]]>
-
-<!ENTITY % synopsis.attlist "INCLUDE">
-<![%synopsis.attlist;[
-<!ATTLIST synopsis
-		%label.attrib;
-		%linespecific.attrib;
-		%common.attrib;
-		%synopsis.role.attrib;
-		%local.synopsis.attrib;
->
-<!--end of synopsis.attlist-->]]>
-
-<!-- LineAnnotation (defined in the Inlines section, below)-->
-<!--end of synopsis.module-->]]>
-
-<!-- CmdSynopsis ...................... -->
-
-<!ENTITY % cmdsynopsis.content.module "INCLUDE">
-<![%cmdsynopsis.content.module;[
-<!ENTITY % cmdsynopsis.module "INCLUDE">
-<![%cmdsynopsis.module;[
-<!ENTITY % local.cmdsynopsis.attrib "">
-<!ENTITY % cmdsynopsis.role.attrib "%role.attrib;">
-
-<!ENTITY % cmdsynopsis.element "INCLUDE">
-<![%cmdsynopsis.element;[
-<!ELEMENT cmdsynopsis ((command | arg | group | sbr)+, synopfragment*)>
-<!--end of cmdsynopsis.element-->]]>
-
-<!-- Sepchar: Character that should separate command and all 
-		top-level arguments; alternate value might be e.g., &Delta; -->
-
-
-<!ENTITY % cmdsynopsis.attlist "INCLUDE">
-<![%cmdsynopsis.attlist;[
-<!ATTLIST cmdsynopsis
-		%label.attrib;
-		sepchar		CDATA		" "
-		cmdlength	CDATA		#IMPLIED
-		%common.attrib;
-		%cmdsynopsis.role.attrib;
-		%local.cmdsynopsis.attrib;
->
-<!--end of cmdsynopsis.attlist-->]]>
-<!--end of cmdsynopsis.module-->]]>
-
-<!ENTITY % arg.module "INCLUDE">
-<![%arg.module;[
-<!ENTITY % local.arg.attrib "">
-<!ENTITY % arg.role.attrib "%role.attrib;">
-
-<!ENTITY % arg.element "INCLUDE">
-<![%arg.element;[
-<!ELEMENT arg (#PCDATA 
-		| arg 
-		| group 
-		| option 
-		| synopfragmentref 
-		| replaceable
-		| sbr)*>
-<!--end of arg.element-->]]>
-
-<!-- Choice: Whether Arg must be supplied: Opt (optional to 
-		supply, e.g. [arg]; the default), Req (required to supply, 
-		e.g. {arg}), or Plain (required to supply, e.g. arg) -->
-<!-- Rep: whether Arg is repeatable: Norepeat (e.g. arg without 
-		ellipsis; the default), or Repeat (e.g. arg...) -->
-
-
-<!ENTITY % arg.attlist "INCLUDE">
-<![%arg.attlist;[
-<!ATTLIST arg
-		choice		(opt
-				|req
-				|plain)		'opt'
-		rep		(norepeat
-				|repeat)	'norepeat'
-		%common.attrib;
-		%arg.role.attrib;
-		%local.arg.attrib;
->
-<!--end of arg.attlist-->]]>
-<!--end of arg.module-->]]>
-
-<!ENTITY % group.module "INCLUDE">
-<![%group.module;[
-
-<!ENTITY % local.group.attrib "">
-<!ENTITY % group.role.attrib "%role.attrib;">
-
-<!ENTITY % group.element "INCLUDE">
-<![%group.element;[
-<!ELEMENT group ((arg | group | option | synopfragmentref 
-		| replaceable | sbr)+)>
-<!--end of group.element-->]]>
-
-<!-- Choice: Whether Group must be supplied: Opt (optional to
-		supply, e.g.  [g1|g2|g3]; the default), Req (required to
-		supply, e.g.  {g1|g2|g3}), Plain (required to supply,
-		e.g.  g1|g2|g3), OptMult (can supply zero or more, e.g.
-		[[g1|g2|g3]]), or ReqMult (must supply one or more, e.g.
-		{{g1|g2|g3}}) -->
-<!-- Rep: whether Group is repeatable: Norepeat (e.g. group 
-		without ellipsis; the default), or Repeat (e.g. group...) -->
-
-
-<!ENTITY % group.attlist "INCLUDE">
-<![%group.attlist;[
-<!ATTLIST group
-		choice		(opt
-				|req
-				|plain)         'opt'
-		rep		(norepeat
-				|repeat)	'norepeat'
-		%common.attrib;
-		%group.role.attrib;
-		%local.group.attrib;
->
-<!--end of group.attlist-->]]>
-<!--end of group.module-->]]>
-
-<!ENTITY % sbr.module "INCLUDE">
-<![%sbr.module;[
-<!ENTITY % local.sbr.attrib "">
-<!-- Synopsis break -->
-<!ENTITY % sbr.role.attrib "%role.attrib;">
-
-<!ENTITY % sbr.element "INCLUDE">
-<![%sbr.element;[
-<!ELEMENT sbr EMPTY>
-<!--end of sbr.element-->]]>
-
-<!ENTITY % sbr.attlist "INCLUDE">
-<![%sbr.attlist;[
-<!ATTLIST sbr
-		%common.attrib;
-		%sbr.role.attrib;
-		%local.sbr.attrib;
->
-<!--end of sbr.attlist-->]]>
-<!--end of sbr.module-->]]>
-
-<!ENTITY % synopfragmentref.module "INCLUDE">
-<![%synopfragmentref.module;[
-<!ENTITY % local.synopfragmentref.attrib "">
-<!ENTITY % synopfragmentref.role.attrib "%role.attrib;">
-
-<!ENTITY % synopfragmentref.element "INCLUDE">
-<![%synopfragmentref.element;[
-<!ELEMENT synopfragmentref (#PCDATA)>
-<!--end of synopfragmentref.element-->]]>
-
-<!-- to SynopFragment of complex synopsis
-			material for separate referencing -->
-
-
-<!ENTITY % synopfragmentref.attlist "INCLUDE">
-<![%synopfragmentref.attlist;[
-<!ATTLIST synopfragmentref
-		%linkendreq.attrib;		%common.attrib;
-		%synopfragmentref.role.attrib;
-		%local.synopfragmentref.attrib;
->
-<!--end of synopfragmentref.attlist-->]]>
-<!--end of synopfragmentref.module-->]]>
-
-<!ENTITY % synopfragment.module "INCLUDE">
-<![%synopfragment.module;[
-<!ENTITY % local.synopfragment.attrib "">
-<!ENTITY % synopfragment.role.attrib "%role.attrib;">
-
-<!ENTITY % synopfragment.element "INCLUDE">
-<![%synopfragment.element;[
-<!ELEMENT synopfragment ((arg | group)+)>
-<!--end of synopfragment.element-->]]>
-
-<!ENTITY % synopfragment.attlist "INCLUDE">
-<![%synopfragment.attlist;[
-<!ATTLIST synopfragment
-		%idreq.common.attrib;
-		%synopfragment.role.attrib;
-		%local.synopfragment.attrib;
->
-<!--end of synopfragment.attlist-->]]>
-<!--end of synopfragment.module-->]]>
-
-<!-- Command (defined in the Inlines section, below)-->
-<!-- Option (defined in the Inlines section, below)-->
-<!-- Replaceable (defined in the Inlines section, below)-->
-<!--end of cmdsynopsis.content.module-->]]>
-
-<!-- FuncSynopsis ..................... -->
-
-<!ENTITY % funcsynopsis.content.module "INCLUDE">
-<![%funcsynopsis.content.module;[
-<!ENTITY % funcsynopsis.module "INCLUDE">
-<![%funcsynopsis.module;[
-
-<!ENTITY % local.funcsynopsis.attrib "">
-<!ENTITY % funcsynopsis.role.attrib "%role.attrib;">
-
-<!ENTITY % funcsynopsis.element "INCLUDE">
-<![%funcsynopsis.element;[
-<!ELEMENT funcsynopsis ((funcsynopsisinfo | funcprototype)+)>
-<!--end of funcsynopsis.element-->]]>
-
-<!ENTITY % funcsynopsis.attlist "INCLUDE">
-<![%funcsynopsis.attlist;[
-<!ATTLIST funcsynopsis
-		%label.attrib;
-		%common.attrib;
-		%funcsynopsis.role.attrib;
-		%local.funcsynopsis.attrib;
->
-<!--end of funcsynopsis.attlist-->]]>
-<!--end of funcsynopsis.module-->]]>
-
-<!ENTITY % funcsynopsisinfo.module "INCLUDE">
-<![%funcsynopsisinfo.module;[
-<!ENTITY % local.funcsynopsisinfo.attrib "">
-<!ENTITY % funcsynopsisinfo.role.attrib "%role.attrib;">
-
-<!ENTITY % funcsynopsisinfo.element "INCLUDE">
-<![%funcsynopsisinfo.element;[
-<!ELEMENT funcsynopsisinfo (%cptr.char.mix; | lineannotation)*>
-<!--end of funcsynopsisinfo.element-->]]>
-
-<!ENTITY % funcsynopsisinfo.attlist "INCLUDE">
-<![%funcsynopsisinfo.attlist;[
-<!ATTLIST funcsynopsisinfo
-		%linespecific.attrib;
-		%common.attrib;
-		%funcsynopsisinfo.role.attrib;
-		%local.funcsynopsisinfo.attrib;
->
-<!--end of funcsynopsisinfo.attlist-->]]>
-<!--end of funcsynopsisinfo.module-->]]>
-
-<!ENTITY % funcprototype.module "INCLUDE">
-<![%funcprototype.module;[
-<!ENTITY % local.funcprototype.attrib "">
-<!ENTITY % funcprototype.role.attrib "%role.attrib;">
-
-<!ENTITY % funcprototype.element "INCLUDE">
-<![%funcprototype.element;[
-<!ELEMENT funcprototype (funcdef, (void | varargs | paramdef+))>
-<!--end of funcprototype.element-->]]>
-
-<!ENTITY % funcprototype.attlist "INCLUDE">
-<![%funcprototype.attlist;[
-<!ATTLIST funcprototype
-		%common.attrib;
-		%funcprototype.role.attrib;
-		%local.funcprototype.attrib;
->
-<!--end of funcprototype.attlist-->]]>
-<!--end of funcprototype.module-->]]>
-
-<!ENTITY % funcdef.module "INCLUDE">
-<![%funcdef.module;[
-<!ENTITY % local.funcdef.attrib "">
-<!ENTITY % funcdef.role.attrib "%role.attrib;">
-
-<!ENTITY % funcdef.element "INCLUDE">
-<![%funcdef.element;[
-<!ELEMENT funcdef (#PCDATA 
-		| replaceable 
-		| function)*>
-<!--end of funcdef.element-->]]>
-
-<!ENTITY % funcdef.attlist "INCLUDE">
-<![%funcdef.attlist;[
-<!ATTLIST funcdef
-		%common.attrib;
-		%funcdef.role.attrib;
-		%local.funcdef.attrib;
->
-<!--end of funcdef.attlist-->]]>
-<!--end of funcdef.module-->]]>
-
-<!ENTITY % void.module "INCLUDE">
-<![%void.module;[
-<!ENTITY % local.void.attrib "">
-<!ENTITY % void.role.attrib "%role.attrib;">
-
-<!ENTITY % void.element "INCLUDE">
-<![%void.element;[
-<!ELEMENT void EMPTY>
-<!--end of void.element-->]]>
-
-<!ENTITY % void.attlist "INCLUDE">
-<![%void.attlist;[
-<!ATTLIST void
-		%common.attrib;
-		%void.role.attrib;
-		%local.void.attrib;
->
-<!--end of void.attlist-->]]>
-<!--end of void.module-->]]>
-
-<!ENTITY % varargs.module "INCLUDE">
-<![%varargs.module;[
-<!ENTITY % local.varargs.attrib "">
-<!ENTITY % varargs.role.attrib "%role.attrib;">
-
-<!ENTITY % varargs.element "INCLUDE">
-<![%varargs.element;[
-<!ELEMENT varargs EMPTY>
-<!--end of varargs.element-->]]>
-
-<!ENTITY % varargs.attlist "INCLUDE">
-<![%varargs.attlist;[
-<!ATTLIST varargs
-		%common.attrib;
-		%varargs.role.attrib;
-		%local.varargs.attrib;
->
-<!--end of varargs.attlist-->]]>
-<!--end of varargs.module-->]]>
-
-<!-- Processing assumes that only one Parameter will appear in a
-     ParamDef, and that FuncParams will be used at most once, for
-     providing information on the "inner parameters" for parameters that
-     are pointers to functions. -->
-
-<!ENTITY % paramdef.module "INCLUDE">
-<![%paramdef.module;[
-<!ENTITY % local.paramdef.attrib "">
-<!ENTITY % paramdef.role.attrib "%role.attrib;">
-
-<!ENTITY % paramdef.element "INCLUDE">
-<![%paramdef.element;[
-<!ELEMENT paramdef (#PCDATA 
-		| replaceable 
-		| parameter 
-		| funcparams)*>
-<!--end of paramdef.element-->]]>
-
-<!ENTITY % paramdef.attlist "INCLUDE">
-<![%paramdef.attlist;[
-<!ATTLIST paramdef
-		%common.attrib;
-		%paramdef.role.attrib;
-		%local.paramdef.attrib;
->
-<!--end of paramdef.attlist-->]]>
-<!--end of paramdef.module-->]]>
-
-<!ENTITY % funcparams.module "INCLUDE">
-<![%funcparams.module;[
-<!ENTITY % local.funcparams.attrib "">
-<!ENTITY % funcparams.role.attrib "%role.attrib;">
-
-<!ENTITY % funcparams.element "INCLUDE">
-<![%funcparams.element;[
-<!ELEMENT funcparams (%cptr.char.mix;)*>
-<!--end of funcparams.element-->]]>
-
-<!ENTITY % funcparams.attlist "INCLUDE">
-<![%funcparams.attlist;[
-<!ATTLIST funcparams
-		%common.attrib;
-		%funcparams.role.attrib;
-		%local.funcparams.attrib;
->
-<!--end of funcparams.attlist-->]]>
-<!--end of funcparams.module-->]]>
-
-<!-- LineAnnotation (defined in the Inlines section, below)-->
-<!-- Replaceable (defined in the Inlines section, below)-->
-<!-- Function (defined in the Inlines section, below)-->
-<!-- Parameter (defined in the Inlines section, below)-->
-<!--end of funcsynopsis.content.module-->]]>
-
-<!-- ClassSynopsis ..................... -->
-
-<!ENTITY % classsynopsis.content.module "INCLUDE">
-<![%classsynopsis.content.module;[
-
-<!ENTITY % classsynopsis.module "INCLUDE">
-<![%classsynopsis.module;[
-<!ENTITY % local.classsynopsis.attrib "">
-<!ENTITY % classsynopsis.role.attrib "%role.attrib;">
-
-<!ENTITY % classsynopsis.element "INCLUDE">
-<![%classsynopsis.element;[
-<!ELEMENT classsynopsis ((ooclass|oointerface|ooexception)+,
-                         (classsynopsisinfo
-                          |fieldsynopsis|%method.synop.class;)*)>
-<!--end of classsynopsis.element-->]]>
-
-<!ENTITY % classsynopsis.attlist "INCLUDE">
-<![%classsynopsis.attlist;[
-<!ATTLIST classsynopsis
-	%common.attrib;
-	%classsynopsis.role.attrib;
-	%local.classsynopsis.attrib;
-	language	CDATA	#IMPLIED
-	class	(class|interface)	"class"
->
-<!--end of classsynopsis.attlist-->]]>
-<!--end of classsynopsis.module-->]]>
-
-<!ENTITY % classsynopsisinfo.module "INCLUDE">
-<![ %classsynopsisinfo.module; [
-<!ENTITY % local.classsynopsisinfo.attrib "">
-<!ENTITY % classsynopsisinfo.role.attrib "%role.attrib;">
-
-<!ENTITY % classsynopsisinfo.element "INCLUDE">
-<![ %classsynopsisinfo.element; [
-<!ELEMENT classsynopsisinfo (%cptr.char.mix; | lineannotation)*>
-<!--end of classsynopsisinfo.element-->]]>
-
-<!ENTITY % classsynopsisinfo.attlist "INCLUDE">
-<![ %classsynopsisinfo.attlist; [
-<!ATTLIST classsynopsisinfo
-		%linespecific.attrib;
-		%common.attrib;
-		%classsynopsisinfo.role.attrib;
-		%local.classsynopsisinfo.attrib;
->
-<!--end of classsynopsisinfo.attlist-->]]>
-<!--end of classsynopsisinfo.module-->]]>
-
-<!ENTITY % ooclass.module "INCLUDE">
-<![%ooclass.module;[
-<!ENTITY % local.ooclass.attrib "">
-<!ENTITY % ooclass.role.attrib "%role.attrib;">
-
-<!ENTITY % ooclass.element "INCLUDE">
-<![%ooclass.element;[
-<!ELEMENT ooclass (modifier*, classname)>
-<!--end of ooclass.element-->]]>
-
-<!ENTITY % ooclass.attlist "INCLUDE">
-<![%ooclass.attlist;[
-<!ATTLIST ooclass
-	%common.attrib;
-	%ooclass.role.attrib;
-	%local.ooclass.attrib;
->
-<!--end of ooclass.attlist-->]]>
-<!--end of ooclass.module-->]]>
-
-<!ENTITY % oointerface.module "INCLUDE">
-<![%oointerface.module;[
-<!ENTITY % local.oointerface.attrib "">
-<!ENTITY % oointerface.role.attrib "%role.attrib;">
-
-<!ENTITY % oointerface.element "INCLUDE">
-<![%oointerface.element;[
-<!ELEMENT oointerface (modifier*, interfacename)>
-<!--end of oointerface.element-->]]>
-
-<!ENTITY % oointerface.attlist "INCLUDE">
-<![%oointerface.attlist;[
-<!ATTLIST oointerface
-	%common.attrib;
-	%oointerface.role.attrib;
-	%local.oointerface.attrib;
->
-<!--end of oointerface.attlist-->]]>
-<!--end of oointerface.module-->]]>
-
-<!ENTITY % ooexception.module "INCLUDE">
-<![%ooexception.module;[
-<!ENTITY % local.ooexception.attrib "">
-<!ENTITY % ooexception.role.attrib "%role.attrib;">
-
-<!ENTITY % ooexception.element "INCLUDE">
-<![%ooexception.element;[
-<!ELEMENT ooexception (modifier*, exceptionname)>
-<!--end of ooexception.element-->]]>
-
-<!ENTITY % ooexception.attlist "INCLUDE">
-<![%ooexception.attlist;[
-<!ATTLIST ooexception
-	%common.attrib;
-	%ooexception.role.attrib;
-	%local.ooexception.attrib;
->
-<!--end of ooexception.attlist-->]]>
-<!--end of ooexception.module-->]]>
-
-<!ENTITY % modifier.module "INCLUDE">
-<![%modifier.module;[
-<!ENTITY % local.modifier.attrib "">
-<!ENTITY % modifier.role.attrib "%role.attrib;">
-
-<!ENTITY % modifier.element "INCLUDE">
-<![%modifier.element;[
-<!ELEMENT modifier (%smallcptr.char.mix;)*>
-<!--end of modifier.element-->]]>
-
-<!ENTITY % modifier.attlist "INCLUDE">
-<![%modifier.attlist;[
-<!ATTLIST modifier
-	%common.attrib;
-	%modifier.role.attrib;
-	%local.modifier.attrib;
->
-<!--end of modifier.attlist-->]]>
-<!--end of modifier.module-->]]>
-
-<!ENTITY % interfacename.module "INCLUDE">
-<![%interfacename.module;[
-<!ENTITY % local.interfacename.attrib "">
-<!ENTITY % interfacename.role.attrib "%role.attrib;">
-
-<!ENTITY % interfacename.element "INCLUDE">
-<![%interfacename.element;[
-<!ELEMENT interfacename (%smallcptr.char.mix;)*>
-<!--end of interfacename.element-->]]>
-
-<!ENTITY % interfacename.attlist "INCLUDE">
-<![%interfacename.attlist;[
-<!ATTLIST interfacename
-	%common.attrib;
-	%interfacename.role.attrib;
-	%local.interfacename.attrib;
->
-<!--end of interfacename.attlist-->]]>
-<!--end of interfacename.module-->]]>
-
-<!ENTITY % exceptionname.module "INCLUDE">
-<![%exceptionname.module;[
-<!ENTITY % local.exceptionname.attrib "">
-<!ENTITY % exceptionname.role.attrib "%role.attrib;">
-
-<!ENTITY % exceptionname.element "INCLUDE">
-<![%exceptionname.element;[
-<!ELEMENT exceptionname (%smallcptr.char.mix;)*>
-<!--end of exceptionname.element-->]]>
-
-<!ENTITY % exceptionname.attlist "INCLUDE">
-<![%exceptionname.attlist;[
-<!ATTLIST exceptionname
-	%common.attrib;
-	%exceptionname.role.attrib;
-	%local.exceptionname.attrib;
->
-<!--end of exceptionname.attlist-->]]>
-<!--end of exceptionname.module-->]]>
-
-<!ENTITY % fieldsynopsis.module "INCLUDE">
-<![%fieldsynopsis.module;[
-<!ENTITY % local.fieldsynopsis.attrib "">
-<!ENTITY % fieldsynopsis.role.attrib "%role.attrib;">
-
-<!ENTITY % fieldsynopsis.element "INCLUDE">
-<![%fieldsynopsis.element;[
-<!ELEMENT fieldsynopsis (modifier*, type?, varname, initializer?)>
-<!--end of fieldsynopsis.element-->]]>
-
-<!ENTITY % fieldsynopsis.attlist "INCLUDE">
-<![%fieldsynopsis.attlist;[
-<!ATTLIST fieldsynopsis
-	%common.attrib;
-	%fieldsynopsis.role.attrib;
-	%local.fieldsynopsis.attrib;
->
-<!--end of fieldsynopsis.attlist-->]]>
-<!--end of fieldsynopsis.module-->]]>
-
-<!ENTITY % initializer.module "INCLUDE">
-<![%initializer.module;[
-<!ENTITY % local.initializer.attrib "">
-<!ENTITY % initializer.role.attrib "%role.attrib;">
-
-<!ENTITY % initializer.element "INCLUDE">
-<![%initializer.element;[
-<!ELEMENT initializer (%smallcptr.char.mix;)*>
-<!--end of initializer.element-->]]>
-
-<!ENTITY % initializer.attlist "INCLUDE">
-<![%initializer.attlist;[
-<!ATTLIST initializer
-	%common.attrib;
-	%initializer.role.attrib;
-	%local.initializer.attrib;
->
-<!--end of initializer.attlist-->]]>
-<!--end of initializer.module-->]]>
-
-<!ENTITY % constructorsynopsis.module "INCLUDE">
-<![%constructorsynopsis.module;[
-<!ENTITY % local.constructorsynopsis.attrib "">
-<!ENTITY % constructorsynopsis.role.attrib "%role.attrib;">
-
-<!ENTITY % constructorsynopsis.element "INCLUDE">
-<![%constructorsynopsis.element;[
-<!ELEMENT constructorsynopsis (modifier*,
-                               methodname?,
-                               (methodparam+|void),
-                               exceptionname*)>
-<!--end of constructorsynopsis.element-->]]>
-
-<!ENTITY % constructorsynopsis.attlist "INCLUDE">
-<![%constructorsynopsis.attlist;[
-<!ATTLIST constructorsynopsis
-	%common.attrib;
-	%constructorsynopsis.role.attrib;
-	%local.constructorsynopsis.attrib;
->
-<!--end of constructorsynopsis.attlist-->]]>
-<!--end of constructorsynopsis.module-->]]>
-
-<!ENTITY % destructorsynopsis.module "INCLUDE">
-<![%destructorsynopsis.module;[
-<!ENTITY % local.destructorsynopsis.attrib "">
-<!ENTITY % destructorsynopsis.role.attrib "%role.attrib;">
-
-<!ENTITY % destructorsynopsis.element "INCLUDE">
-<![%destructorsynopsis.element;[
-<!ELEMENT destructorsynopsis (modifier*,
-                              methodname?,
-                              (methodparam+|void),
-                              exceptionname*)>
-<!--end of destructorsynopsis.element-->]]>
-
-<!ENTITY % destructorsynopsis.attlist "INCLUDE">
-<![%destructorsynopsis.attlist;[
-<!ATTLIST destructorsynopsis
-	%common.attrib;
-	%destructorsynopsis.role.attrib;
-	%local.destructorsynopsis.attrib;
->
-<!--end of destructorsynopsis.attlist-->]]>
-<!--end of destructorsynopsis.module-->]]>
-
-<!ENTITY % methodsynopsis.module "INCLUDE">
-<![%methodsynopsis.module;[
-<!ENTITY % local.methodsynopsis.attrib "">
-<!ENTITY % methodsynopsis.role.attrib "%role.attrib;">
-
-<!ENTITY % methodsynopsis.element "INCLUDE">
-<![%methodsynopsis.element;[
-<!ELEMENT methodsynopsis (modifier*,
-                          (type|void)?,
-                          methodname,
-                          (methodparam+|void),
-                          exceptionname*,
-                          modifier*)>
-<!--end of methodsynopsis.element-->]]>
-
-<!ENTITY % methodsynopsis.attlist "INCLUDE">
-<![%methodsynopsis.attlist;[
-<!ATTLIST methodsynopsis
-	%common.attrib;
-	%methodsynopsis.role.attrib;
-	%local.methodsynopsis.attrib;
->
-<!--end of methodsynopsis.attlist-->]]>
-<!--end of methodsynopsis.module-->]]>
-
-<!ENTITY % methodname.module "INCLUDE">
-<![%methodname.module;[
-<!ENTITY % local.methodname.attrib "">
-<!ENTITY % methodname.role.attrib "%role.attrib;">
-
-<!ENTITY % methodname.element "INCLUDE">
-<![%methodname.element;[
-<!ELEMENT methodname (%smallcptr.char.mix;)*>
-<!--end of methodname.element-->]]>
-
-<!ENTITY % methodname.attlist "INCLUDE">
-<![%methodname.attlist;[
-<!ATTLIST methodname
-	%common.attrib;
-	%methodname.role.attrib;
-	%local.methodname.attrib;
->
-<!--end of methodname.attlist-->]]>
-<!--end of methodname.module-->]]>
-
-<!ENTITY % methodparam.module "INCLUDE">
-<![%methodparam.module;[
-<!ENTITY % local.methodparam.attrib "">
-<!ENTITY % methodparam.role.attrib "%role.attrib;">
-
-<!ENTITY % methodparam.element "INCLUDE">
-<![%methodparam.element;[
-<!ELEMENT methodparam (modifier*,
-                       type?,
-                       ((parameter,initializer?)|funcparams),
-                       modifier*)>
-<!--end of methodparam.element-->]]>
-
-<!ENTITY % methodparam.attlist "INCLUDE">
-<![%methodparam.attlist;[
-<!ATTLIST methodparam
-	%common.attrib;
-	%methodparam.role.attrib;
-	%local.methodparam.attrib;
-	choice		(opt
-			|req
-			|plain)		"req"
-	rep		(norepeat
-			|repeat)	"norepeat"
->
-<!--end of methodparam.attlist-->]]>
-<!--end of methodparam.module-->]]>
-<!--end of classsynopsis.content.module-->]]>
-
-<!-- ...................................................................... -->
-<!-- Document information entities and elements ........................... -->
-
-<!-- The document information elements include some elements that are
-     currently used only in the document hierarchy module. They are
-     defined here so that they will be available for use in customized
-     document hierarchies. -->
-
-<!-- .................................. -->
-
-<!ENTITY % docinfo.content.module "INCLUDE">
-<![%docinfo.content.module;[
-
-<!-- Ackno ............................ -->
-
-<!ENTITY % ackno.module "INCLUDE">
-<![%ackno.module;[
-<!ENTITY % local.ackno.attrib "">
-<!ENTITY % ackno.role.attrib "%role.attrib;">
-
-<!ENTITY % ackno.element "INCLUDE">
-<![%ackno.element;[
-<!ELEMENT ackno (%docinfo.char.mix;)*>
-<!--end of ackno.element-->]]>
-
-<!ENTITY % ackno.attlist "INCLUDE">
-<![%ackno.attlist;[
-<!ATTLIST ackno
-		%common.attrib;
-		%ackno.role.attrib;
-		%local.ackno.attrib;
->
-<!--end of ackno.attlist-->]]>
-<!--end of ackno.module-->]]>
-
-<!-- Address .......................... -->
-
-<!ENTITY % address.content.module "INCLUDE">
-<![%address.content.module;[
-<!ENTITY % address.module "INCLUDE">
-<![%address.module;[
-<!ENTITY % local.address.attrib "">
-<!ENTITY % address.role.attrib "%role.attrib;">
-
-<!ENTITY % address.element "INCLUDE">
-<![%address.element;[
-<!ELEMENT address (#PCDATA|%person.ident.mix;
-		|street|pob|postcode|city|state|country|phone
-		|fax|email|otheraddr)*>
-<!--end of address.element-->]]>
-
-<!ENTITY % address.attlist "INCLUDE">
-<![%address.attlist;[
-<!ATTLIST address
-		%linespecific.attrib;
-		%common.attrib;
-		%address.role.attrib;
-		%local.address.attrib;
->
-<!--end of address.attlist-->]]>
-<!--end of address.module-->]]>
-
-  <!ENTITY % street.module "INCLUDE">
-  <![%street.module;[
- <!ENTITY % local.street.attrib "">
-  <!ENTITY % street.role.attrib "%role.attrib;">
-  
-<!ENTITY % street.element "INCLUDE">
-<![%street.element;[
-<!ELEMENT street (%docinfo.char.mix;)*>
-<!--end of street.element-->]]>
-  
-<!ENTITY % street.attlist "INCLUDE">
-<![%street.attlist;[
-<!ATTLIST street
-		%common.attrib;
-		%street.role.attrib;
-		%local.street.attrib;
->
-<!--end of street.attlist-->]]>
-  <!--end of street.module-->]]>
-
-  <!ENTITY % pob.module "INCLUDE">
-  <![%pob.module;[
-  <!ENTITY % local.pob.attrib "">
-  <!ENTITY % pob.role.attrib "%role.attrib;">
-  
-<!ENTITY % pob.element "INCLUDE">
-<![%pob.element;[
-<!ELEMENT pob (%docinfo.char.mix;)*>
-<!--end of pob.element-->]]>
-  
-<!ENTITY % pob.attlist "INCLUDE">
-<![%pob.attlist;[
-<!ATTLIST pob
-		%common.attrib;
-		%pob.role.attrib;
-		%local.pob.attrib;
->
-<!--end of pob.attlist-->]]>
-  <!--end of pob.module-->]]>
-
-  <!ENTITY % postcode.module "INCLUDE">
-  <![%postcode.module;[
-  <!ENTITY % local.postcode.attrib "">
-  <!ENTITY % postcode.role.attrib "%role.attrib;">
-  
-<!ENTITY % postcode.element "INCLUDE">
-<![%postcode.element;[
-<!ELEMENT postcode (%docinfo.char.mix;)*>
-<!--end of postcode.element-->]]>
-  
-<!ENTITY % postcode.attlist "INCLUDE">
-<![%postcode.attlist;[
-<!ATTLIST postcode
-		%common.attrib;
-		%postcode.role.attrib;
-		%local.postcode.attrib;
->
-<!--end of postcode.attlist-->]]>
-  <!--end of postcode.module-->]]>
-
-  <!ENTITY % city.module "INCLUDE">
-  <![%city.module;[
-  <!ENTITY % local.city.attrib "">
-  <!ENTITY % city.role.attrib "%role.attrib;">
-  
-<!ENTITY % city.element "INCLUDE">
-<![%city.element;[
-<!ELEMENT city (%docinfo.char.mix;)*>
-<!--end of city.element-->]]>
-  
-<!ENTITY % city.attlist "INCLUDE">
-<![%city.attlist;[
-<!ATTLIST city
-		%common.attrib;
-		%city.role.attrib;
-		%local.city.attrib;
->
-<!--end of city.attlist-->]]>
-  <!--end of city.module-->]]>
-
-  <!ENTITY % state.module "INCLUDE">
-  <![%state.module;[
-  <!ENTITY % local.state.attrib "">
-  <!ENTITY % state.role.attrib "%role.attrib;">
-  
-<!ENTITY % state.element "INCLUDE">
-<![%state.element;[
-<!ELEMENT state (%docinfo.char.mix;)*>
-<!--end of state.element-->]]>
-  
-<!ENTITY % state.attlist "INCLUDE">
-<![%state.attlist;[
-<!ATTLIST state
-		%common.attrib;
-		%state.role.attrib;
-		%local.state.attrib;
->
-<!--end of state.attlist-->]]>
-  <!--end of state.module-->]]>
-
-  <!ENTITY % country.module "INCLUDE">
-  <![%country.module;[
-  <!ENTITY % local.country.attrib "">
-  <!ENTITY % country.role.attrib "%role.attrib;">
-  
-<!ENTITY % country.element "INCLUDE">
-<![%country.element;[
-<!ELEMENT country (%docinfo.char.mix;)*>
-<!--end of country.element-->]]>
-  
-<!ENTITY % country.attlist "INCLUDE">
-<![%country.attlist;[
-<!ATTLIST country
-		%common.attrib;
-		%country.role.attrib;
-		%local.country.attrib;
->
-<!--end of country.attlist-->]]>
-  <!--end of country.module-->]]>
-
-  <!ENTITY % phone.module "INCLUDE">
-  <![%phone.module;[
-  <!ENTITY % local.phone.attrib "">
-  <!ENTITY % phone.role.attrib "%role.attrib;">
-  
-<!ENTITY % phone.element "INCLUDE">
-<![%phone.element;[
-<!ELEMENT phone (%docinfo.char.mix;)*>
-<!--end of phone.element-->]]>
-  
-<!ENTITY % phone.attlist "INCLUDE">
-<![%phone.attlist;[
-<!ATTLIST phone
-		%common.attrib;
-		%phone.role.attrib;
-		%local.phone.attrib;
->
-<!--end of phone.attlist-->]]>
-  <!--end of phone.module-->]]>
-
-  <!ENTITY % fax.module "INCLUDE">
-  <![%fax.module;[
-  <!ENTITY % local.fax.attrib "">
-  <!ENTITY % fax.role.attrib "%role.attrib;">
-  
-<!ENTITY % fax.element "INCLUDE">
-<![%fax.element;[
-<!ELEMENT fax (%docinfo.char.mix;)*>
-<!--end of fax.element-->]]>
-  
-<!ENTITY % fax.attlist "INCLUDE">
-<![%fax.attlist;[
-<!ATTLIST fax
-		%common.attrib;
-		%fax.role.attrib;
-		%local.fax.attrib;
->
-<!--end of fax.attlist-->]]>
-  <!--end of fax.module-->]]>
-
-  <!-- Email (defined in the Inlines section, below)-->
-
-  <!ENTITY % otheraddr.module "INCLUDE">
-  <![%otheraddr.module;[
-  <!ENTITY % local.otheraddr.attrib "">
-  <!ENTITY % otheraddr.role.attrib "%role.attrib;">
-  
-<!ENTITY % otheraddr.element "INCLUDE">
-<![%otheraddr.element;[
-<!ELEMENT otheraddr (%docinfo.char.mix;)*>
-<!--end of otheraddr.element-->]]>
-  
-<!ENTITY % otheraddr.attlist "INCLUDE">
-<![%otheraddr.attlist;[
-<!ATTLIST otheraddr
-		%common.attrib;
-		%otheraddr.role.attrib;
-		%local.otheraddr.attrib;
->
-<!--end of otheraddr.attlist-->]]>
-  <!--end of otheraddr.module-->]]>
-<!--end of address.content.module-->]]>
-
-<!-- Affiliation ...................... -->
-
-<!ENTITY % affiliation.content.module "INCLUDE">
-<![%affiliation.content.module;[
-<!ENTITY % affiliation.module "INCLUDE">
-<![%affiliation.module;[
-<!ENTITY % local.affiliation.attrib "">
-<!ENTITY % affiliation.role.attrib "%role.attrib;">
-
-<!ENTITY % affiliation.element "INCLUDE">
-<![%affiliation.element;[
-<!ELEMENT affiliation (shortaffil?, jobtitle*, orgname?, orgdiv*,
-		address*)>
-<!--end of affiliation.element-->]]>
-
-<!ENTITY % affiliation.attlist "INCLUDE">
-<![%affiliation.attlist;[
-<!ATTLIST affiliation
-		%common.attrib;
-		%affiliation.role.attrib;
-		%local.affiliation.attrib;
->
-<!--end of affiliation.attlist-->]]>
-<!--end of affiliation.module-->]]>
-
-  <!ENTITY % shortaffil.module "INCLUDE">
-  <![%shortaffil.module;[
-  <!ENTITY % local.shortaffil.attrib "">
-  <!ENTITY % shortaffil.role.attrib "%role.attrib;">
-  
-<!ENTITY % shortaffil.element "INCLUDE">
-<![%shortaffil.element;[
-<!ELEMENT shortaffil (%docinfo.char.mix;)*>
-<!--end of shortaffil.element-->]]>
-  
-<!ENTITY % shortaffil.attlist "INCLUDE">
-<![%shortaffil.attlist;[
-<!ATTLIST shortaffil
-		%common.attrib;
-		%shortaffil.role.attrib;
-		%local.shortaffil.attrib;
->
-<!--end of shortaffil.attlist-->]]>
-  <!--end of shortaffil.module-->]]>
-
-  <!ENTITY % jobtitle.module "INCLUDE">
-  <![%jobtitle.module;[
-  <!ENTITY % local.jobtitle.attrib "">
-  <!ENTITY % jobtitle.role.attrib "%role.attrib;">
-  
-<!ENTITY % jobtitle.element "INCLUDE">
-<![%jobtitle.element;[
-<!ELEMENT jobtitle (%docinfo.char.mix;)*>
-<!--end of jobtitle.element-->]]>
-  
-<!ENTITY % jobtitle.attlist "INCLUDE">
-<![%jobtitle.attlist;[
-<!ATTLIST jobtitle
-		%common.attrib;
-		%jobtitle.role.attrib;
-		%local.jobtitle.attrib;
->
-<!--end of jobtitle.attlist-->]]>
-  <!--end of jobtitle.module-->]]>
-
-  <!-- OrgName (defined elsewhere in this section)-->
-
-  <!ENTITY % orgdiv.module "INCLUDE">
-  <![%orgdiv.module;[
-  <!ENTITY % local.orgdiv.attrib "">
-  <!ENTITY % orgdiv.role.attrib "%role.attrib;">
-  
-<!ENTITY % orgdiv.element "INCLUDE">
-<![%orgdiv.element;[
-<!ELEMENT orgdiv (%docinfo.char.mix;)*>
-<!--end of orgdiv.element-->]]>
-  
-<!ENTITY % orgdiv.attlist "INCLUDE">
-<![%orgdiv.attlist;[
-<!ATTLIST orgdiv
-		%common.attrib;
-		%orgdiv.role.attrib;
-		%local.orgdiv.attrib;
->
-<!--end of orgdiv.attlist-->]]>
-  <!--end of orgdiv.module-->]]>
-
-  <!-- Address (defined elsewhere in this section)-->
-<!--end of affiliation.content.module-->]]>
-
-<!-- ArtPageNums ...................... -->
-
-<!ENTITY % artpagenums.module "INCLUDE">
-<![%artpagenums.module;[
-<!ENTITY % local.artpagenums.attrib "">
-<!ENTITY % artpagenums.role.attrib "%role.attrib;">
-
-<!ENTITY % artpagenums.element "INCLUDE">
-<![%artpagenums.element;[
-<!ELEMENT artpagenums (%docinfo.char.mix;)*>
-<!--end of artpagenums.element-->]]>
-
-<!ENTITY % artpagenums.attlist "INCLUDE">
-<![%artpagenums.attlist;[
-<!ATTLIST artpagenums
-		%common.attrib;
-		%artpagenums.role.attrib;
-		%local.artpagenums.attrib;
->
-<!--end of artpagenums.attlist-->]]>
-<!--end of artpagenums.module-->]]>
-
-<!-- Author ........................... -->
-
-<!ENTITY % author.module "INCLUDE">
-<![%author.module;[
-<!ENTITY % local.author.attrib "">
-<!ENTITY % author.role.attrib "%role.attrib;">
-
-<!ENTITY % author.element "INCLUDE">
-<![%author.element;[
-<!ELEMENT author ((%person.ident.mix;)+)>
-<!--end of author.element-->]]>
-
-<!ENTITY % author.attlist "INCLUDE">
-<![%author.attlist;[
-<!ATTLIST author
-		%common.attrib;
-		%author.role.attrib;
-		%local.author.attrib;
->
-<!--end of author.attlist-->]]>
-<!--(see "Personal identity elements" for %person.ident.mix;)-->
-<!--end of author.module-->]]>
-
-<!-- AuthorGroup ...................... -->
-
-<!ENTITY % authorgroup.content.module "INCLUDE">
-<![%authorgroup.content.module;[
-<!ENTITY % authorgroup.module "INCLUDE">
-<![%authorgroup.module;[
-<!ENTITY % local.authorgroup.attrib "">
-<!ENTITY % authorgroup.role.attrib "%role.attrib;">
-
-<!ENTITY % authorgroup.element "INCLUDE">
-<![%authorgroup.element;[
-<!ELEMENT authorgroup ((author|editor|collab|corpauthor|othercredit)+)>
-<!--end of authorgroup.element-->]]>
-
-<!ENTITY % authorgroup.attlist "INCLUDE">
-<![%authorgroup.attlist;[
-<!ATTLIST authorgroup
-		%common.attrib;
-		%authorgroup.role.attrib;
-		%local.authorgroup.attrib;
->
-<!--end of authorgroup.attlist-->]]>
-<!--end of authorgroup.module-->]]>
-
-  <!-- Author (defined elsewhere in this section)-->
-  <!-- Editor (defined elsewhere in this section)-->
-
-  <!ENTITY % collab.content.module "INCLUDE">
-  <![%collab.content.module;[
-  <!ENTITY % collab.module "INCLUDE">
-  <![%collab.module;[
-  <!ENTITY % local.collab.attrib "">
-  <!ENTITY % collab.role.attrib "%role.attrib;">
-  
-<!ENTITY % collab.element "INCLUDE">
-<![%collab.element;[
-<!ELEMENT collab (collabname, affiliation*)>
-<!--end of collab.element-->]]>
-  
-<!ENTITY % collab.attlist "INCLUDE">
-<![%collab.attlist;[
-<!ATTLIST collab
-		%common.attrib;
-		%collab.role.attrib;
-		%local.collab.attrib;
->
-<!--end of collab.attlist-->]]>
-  <!--end of collab.module-->]]>
-
-    <!ENTITY % collabname.module "INCLUDE">
-  <![%collabname.module;[
-  <!ENTITY % local.collabname.attrib "">
-  <!ENTITY % collabname.role.attrib "%role.attrib;">
-    
-<!ENTITY % collabname.element "INCLUDE">
-<![%collabname.element;[
-<!ELEMENT collabname (%docinfo.char.mix;)*>
-<!--end of collabname.element-->]]>
-    
-<!ENTITY % collabname.attlist "INCLUDE">
-<![%collabname.attlist;[
-<!ATTLIST collabname
-		%common.attrib;
-		%collabname.role.attrib;
-		%local.collabname.attrib;
->
-<!--end of collabname.attlist-->]]>
-    <!--end of collabname.module-->]]>
-
-    <!-- Affiliation (defined elsewhere in this section)-->
-  <!--end of collab.content.module-->]]>
-
-  <!-- CorpAuthor (defined elsewhere in this section)-->
-  <!-- OtherCredit (defined elsewhere in this section)-->
-
-<!--end of authorgroup.content.module-->]]>
-
-<!-- AuthorInitials ................... -->
-
-<!ENTITY % authorinitials.module "INCLUDE">
-<![%authorinitials.module;[
-<!ENTITY % local.authorinitials.attrib "">
-<!ENTITY % authorinitials.role.attrib "%role.attrib;">
-
-<!ENTITY % authorinitials.element "INCLUDE">
-<![%authorinitials.element;[
-<!ELEMENT authorinitials (%docinfo.char.mix;)*>
-<!--end of authorinitials.element-->]]>
-
-<!ENTITY % authorinitials.attlist "INCLUDE">
-<![%authorinitials.attlist;[
-<!ATTLIST authorinitials
-		%common.attrib;
-		%authorinitials.role.attrib;
-		%local.authorinitials.attrib;
->
-<!--end of authorinitials.attlist-->]]>
-<!--end of authorinitials.module-->]]>
-
-<!-- ConfGroup ........................ -->
-
-<!ENTITY % confgroup.content.module "INCLUDE">
-<![%confgroup.content.module;[
-<!ENTITY % confgroup.module "INCLUDE">
-<![%confgroup.module;[
-<!ENTITY % local.confgroup.attrib "">
-<!ENTITY % confgroup.role.attrib "%role.attrib;">
-
-<!ENTITY % confgroup.element "INCLUDE">
-<![%confgroup.element;[
-<!ELEMENT confgroup ((confdates|conftitle|confnum|address|confsponsor)*)>
-<!--end of confgroup.element-->]]>
-
-<!ENTITY % confgroup.attlist "INCLUDE">
-<![%confgroup.attlist;[
-<!ATTLIST confgroup
-		%common.attrib;
-		%confgroup.role.attrib;
-		%local.confgroup.attrib;
->
-<!--end of confgroup.attlist-->]]>
-<!--end of confgroup.module-->]]>
-
-  <!ENTITY % confdates.module "INCLUDE">
-  <![%confdates.module;[
-  <!ENTITY % local.confdates.attrib "">
-  <!ENTITY % confdates.role.attrib "%role.attrib;">
-  
-<!ENTITY % confdates.element "INCLUDE">
-<![%confdates.element;[
-<!ELEMENT confdates (%docinfo.char.mix;)*>
-<!--end of confdates.element-->]]>
-  
-<!ENTITY % confdates.attlist "INCLUDE">
-<![%confdates.attlist;[
-<!ATTLIST confdates
-		%common.attrib;
-		%confdates.role.attrib;
-		%local.confdates.attrib;
->
-<!--end of confdates.attlist-->]]>
-  <!--end of confdates.module-->]]>
-
-  <!ENTITY % conftitle.module "INCLUDE">
-  <![%conftitle.module;[
-  <!ENTITY % local.conftitle.attrib "">
-  <!ENTITY % conftitle.role.attrib "%role.attrib;">
-  
-<!ENTITY % conftitle.element "INCLUDE">
-<![%conftitle.element;[
-<!ELEMENT conftitle (%docinfo.char.mix;)*>
-<!--end of conftitle.element-->]]>
-  
-<!ENTITY % conftitle.attlist "INCLUDE">
-<![%conftitle.attlist;[
-<!ATTLIST conftitle
-		%common.attrib;
-		%conftitle.role.attrib;
-		%local.conftitle.attrib;
->
-<!--end of conftitle.attlist-->]]>
-  <!--end of conftitle.module-->]]>
-
-  <!ENTITY % confnum.module "INCLUDE">
-  <![%confnum.module;[
-  <!ENTITY % local.confnum.attrib "">
-  <!ENTITY % confnum.role.attrib "%role.attrib;">
-  
-<!ENTITY % confnum.element "INCLUDE">
-<![%confnum.element;[
-<!ELEMENT confnum (%docinfo.char.mix;)*>
-<!--end of confnum.element-->]]>
-  
-<!ENTITY % confnum.attlist "INCLUDE">
-<![%confnum.attlist;[
-<!ATTLIST confnum
-		%common.attrib;
-		%confnum.role.attrib;
-		%local.confnum.attrib;
->
-<!--end of confnum.attlist-->]]>
-  <!--end of confnum.module-->]]>
-
-  <!-- Address (defined elsewhere in this section)-->
-
-  <!ENTITY % confsponsor.module "INCLUDE">
-  <![%confsponsor.module;[
-  <!ENTITY % local.confsponsor.attrib "">
-  <!ENTITY % confsponsor.role.attrib "%role.attrib;">
-  
-<!ENTITY % confsponsor.element "INCLUDE">
-<![%confsponsor.element;[
-<!ELEMENT confsponsor (%docinfo.char.mix;)*>
-<!--end of confsponsor.element-->]]>
-  
-<!ENTITY % confsponsor.attlist "INCLUDE">
-<![%confsponsor.attlist;[
-<!ATTLIST confsponsor
-		%common.attrib;
-		%confsponsor.role.attrib;
-		%local.confsponsor.attrib;
->
-<!--end of confsponsor.attlist-->]]>
-  <!--end of confsponsor.module-->]]>
-<!--end of confgroup.content.module-->]]>
-
-<!-- ContractNum ...................... -->
-
-<!ENTITY % contractnum.module "INCLUDE">
-<![%contractnum.module;[
-<!ENTITY % local.contractnum.attrib "">
-<!ENTITY % contractnum.role.attrib "%role.attrib;">
-
-<!ENTITY % contractnum.element "INCLUDE">
-<![%contractnum.element;[
-<!ELEMENT contractnum (%docinfo.char.mix;)*>
-<!--end of contractnum.element-->]]>
-
-<!ENTITY % contractnum.attlist "INCLUDE">
-<![%contractnum.attlist;[
-<!ATTLIST contractnum
-		%common.attrib;
-		%contractnum.role.attrib;
-		%local.contractnum.attrib;
->
-<!--end of contractnum.attlist-->]]>
-<!--end of contractnum.module-->]]>
-
-<!-- ContractSponsor .................. -->
-
-<!ENTITY % contractsponsor.module "INCLUDE">
-<![%contractsponsor.module;[
-<!ENTITY % local.contractsponsor.attrib "">
-<!ENTITY % contractsponsor.role.attrib "%role.attrib;">
-
-<!ENTITY % contractsponsor.element "INCLUDE">
-<![%contractsponsor.element;[
-<!ELEMENT contractsponsor (%docinfo.char.mix;)*>
-<!--end of contractsponsor.element-->]]>
-
-<!ENTITY % contractsponsor.attlist "INCLUDE">
-<![%contractsponsor.attlist;[
-<!ATTLIST contractsponsor
-		%common.attrib;
-		%contractsponsor.role.attrib;
-		%local.contractsponsor.attrib;
->
-<!--end of contractsponsor.attlist-->]]>
-<!--end of contractsponsor.module-->]]>
-
-<!-- Copyright ........................ -->
-
-<!ENTITY % copyright.content.module "INCLUDE">
-<![%copyright.content.module;[
-<!ENTITY % copyright.module "INCLUDE">
-<![%copyright.module;[
-<!ENTITY % local.copyright.attrib "">
-<!ENTITY % copyright.role.attrib "%role.attrib;">
-
-<!ENTITY % copyright.element "INCLUDE">
-<![%copyright.element;[
-<!ELEMENT copyright (year+, holder*)>
-<!--end of copyright.element-->]]>
-
-<!ENTITY % copyright.attlist "INCLUDE">
-<![%copyright.attlist;[
-<!ATTLIST copyright
-		%common.attrib;
-		%copyright.role.attrib;
-		%local.copyright.attrib;
->
-<!--end of copyright.attlist-->]]>
-<!--end of copyright.module-->]]>
-
-  <!ENTITY % year.module "INCLUDE">
-  <![%year.module;[
-  <!ENTITY % local.year.attrib "">
-  <!ENTITY % year.role.attrib "%role.attrib;">
-  
-<!ENTITY % year.element "INCLUDE">
-<![%year.element;[
-<!ELEMENT year (%docinfo.char.mix;)*>
-<!--end of year.element-->]]>
-  
-<!ENTITY % year.attlist "INCLUDE">
-<![%year.attlist;[
-<!ATTLIST year
-		%common.attrib;
-		%year.role.attrib;
-		%local.year.attrib;
->
-<!--end of year.attlist-->]]>
-  <!--end of year.module-->]]>
-
-  <!ENTITY % holder.module "INCLUDE">
-  <![%holder.module;[
-  <!ENTITY % local.holder.attrib "">
-  <!ENTITY % holder.role.attrib "%role.attrib;">
-  
-<!ENTITY % holder.element "INCLUDE">
-<![%holder.element;[
-<!ELEMENT holder (%docinfo.char.mix;)*>
-<!--end of holder.element-->]]>
-  
-<!ENTITY % holder.attlist "INCLUDE">
-<![%holder.attlist;[
-<!ATTLIST holder
-		%common.attrib;
-		%holder.role.attrib;
-		%local.holder.attrib;
->
-<!--end of holder.attlist-->]]>
-  <!--end of holder.module-->]]>
-<!--end of copyright.content.module-->]]>
-
-<!-- CorpAuthor ....................... -->
-
-<!ENTITY % corpauthor.module "INCLUDE">
-<![%corpauthor.module;[
-<!ENTITY % local.corpauthor.attrib "">
-<!ENTITY % corpauthor.role.attrib "%role.attrib;">
-
-<!ENTITY % corpauthor.element "INCLUDE">
-<![%corpauthor.element;[
-<!ELEMENT corpauthor (%docinfo.char.mix;)*>
-<!--end of corpauthor.element-->]]>
-
-<!ENTITY % corpauthor.attlist "INCLUDE">
-<![%corpauthor.attlist;[
-<!ATTLIST corpauthor
-		%common.attrib;
-		%corpauthor.role.attrib;
-		%local.corpauthor.attrib;
->
-<!--end of corpauthor.attlist-->]]>
-<!--end of corpauthor.module-->]]>
-
-<!-- CorpName ......................... -->
-
-<!ENTITY % corpname.module "INCLUDE">
-<![%corpname.module;[
-<!ENTITY % local.corpname.attrib "">
-
-<!ENTITY % corpname.element "INCLUDE">
-<![%corpname.element;[
-<!ELEMENT corpname (%docinfo.char.mix;)*>
-<!--end of corpname.element-->]]>
-<!ENTITY % corpname.role.attrib "%role.attrib;">
-
-<!ENTITY % corpname.attlist "INCLUDE">
-<![%corpname.attlist;[
-<!ATTLIST corpname
-		%common.attrib;
-		%corpname.role.attrib;
-		%local.corpname.attrib;
->
-<!--end of corpname.attlist-->]]>
-<!--end of corpname.module-->]]>
-
-<!-- Date ............................. -->
-
-<!ENTITY % date.module "INCLUDE">
-<![%date.module;[
-<!ENTITY % local.date.attrib "">
-<!ENTITY % date.role.attrib "%role.attrib;">
-
-<!ENTITY % date.element "INCLUDE">
-<![%date.element;[
-<!ELEMENT date (%docinfo.char.mix;)*>
-<!--end of date.element-->]]>
-
-<!ENTITY % date.attlist "INCLUDE">
-<![%date.attlist;[
-<!ATTLIST date
-		%common.attrib;
-		%date.role.attrib;
-		%local.date.attrib;
->
-<!--end of date.attlist-->]]>
-<!--end of date.module-->]]>
-
-<!-- Edition .......................... -->
-
-<!ENTITY % edition.module "INCLUDE">
-<![%edition.module;[
-<!ENTITY % local.edition.attrib "">
-<!ENTITY % edition.role.attrib "%role.attrib;">
-
-<!ENTITY % edition.element "INCLUDE">
-<![%edition.element;[
-<!ELEMENT edition (%docinfo.char.mix;)*>
-<!--end of edition.element-->]]>
-
-<!ENTITY % edition.attlist "INCLUDE">
-<![%edition.attlist;[
-<!ATTLIST edition
-		%common.attrib;
-		%edition.role.attrib;
-		%local.edition.attrib;
->
-<!--end of edition.attlist-->]]>
-<!--end of edition.module-->]]>
-
-<!-- Editor ........................... -->
-
-<!ENTITY % editor.module "INCLUDE">
-<![%editor.module;[
-<!ENTITY % local.editor.attrib "">
-<!ENTITY % editor.role.attrib "%role.attrib;">
-
-<!ENTITY % editor.element "INCLUDE">
-<![%editor.element;[
-<!ELEMENT editor ((%person.ident.mix;)+)>
-<!--end of editor.element-->]]>
-
-<!ENTITY % editor.attlist "INCLUDE">
-<![%editor.attlist;[
-<!ATTLIST editor
-		%common.attrib;
-		%editor.role.attrib;
-		%local.editor.attrib;
->
-<!--end of editor.attlist-->]]>
-  <!--(see "Personal identity elements" for %person.ident.mix;)-->
-<!--end of editor.module-->]]>
-
-<!-- ISBN ............................. -->
-
-<!ENTITY % isbn.module "INCLUDE">
-<![%isbn.module;[
-<!ENTITY % local.isbn.attrib "">
-<!ENTITY % isbn.role.attrib "%role.attrib;">
-
-<!ENTITY % isbn.element "INCLUDE">
-<![%isbn.element;[
-<!ELEMENT isbn (%docinfo.char.mix;)*>
-<!--end of isbn.element-->]]>
-
-<!ENTITY % isbn.attlist "INCLUDE">
-<![%isbn.attlist;[
-<!ATTLIST isbn
-		%common.attrib;
-		%isbn.role.attrib;
-		%local.isbn.attrib;
->
-<!--end of isbn.attlist-->]]>
-<!--end of isbn.module-->]]>
-
-<!-- ISSN ............................. -->
-
-<!ENTITY % issn.module "INCLUDE">
-<![%issn.module;[
-<!ENTITY % local.issn.attrib "">
-<!ENTITY % issn.role.attrib "%role.attrib;">
-
-<!ENTITY % issn.element "INCLUDE">
-<![%issn.element;[
-<!ELEMENT issn (%docinfo.char.mix;)*>
-<!--end of issn.element-->]]>
-
-<!ENTITY % issn.attlist "INCLUDE">
-<![%issn.attlist;[
-<!ATTLIST issn
-		%common.attrib;
-		%issn.role.attrib;
-		%local.issn.attrib;
->
-<!--end of issn.attlist-->]]>
-<!--end of issn.module-->]]>
-
-<!-- InvPartNumber .................... -->
-
-<!ENTITY % invpartnumber.module "INCLUDE">
-<![%invpartnumber.module;[
-<!ENTITY % local.invpartnumber.attrib "">
-<!ENTITY % invpartnumber.role.attrib "%role.attrib;">
-
-<!ENTITY % invpartnumber.element "INCLUDE">
-<![%invpartnumber.element;[
-<!ELEMENT invpartnumber (%docinfo.char.mix;)*>
-<!--end of invpartnumber.element-->]]>
-
-<!ENTITY % invpartnumber.attlist "INCLUDE">
-<![%invpartnumber.attlist;[
-<!ATTLIST invpartnumber
-		%common.attrib;
-		%invpartnumber.role.attrib;
-		%local.invpartnumber.attrib;
->
-<!--end of invpartnumber.attlist-->]]>
-<!--end of invpartnumber.module-->]]>
-
-<!-- IssueNum ......................... -->
-
-<!ENTITY % issuenum.module "INCLUDE">
-<![%issuenum.module;[
-<!ENTITY % local.issuenum.attrib "">
-<!ENTITY % issuenum.role.attrib "%role.attrib;">
-
-<!ENTITY % issuenum.element "INCLUDE">
-<![%issuenum.element;[
-<!ELEMENT issuenum (%docinfo.char.mix;)*>
-<!--end of issuenum.element-->]]>
-
-<!ENTITY % issuenum.attlist "INCLUDE">
-<![%issuenum.attlist;[
-<!ATTLIST issuenum
-		%common.attrib;
-		%issuenum.role.attrib;
-		%local.issuenum.attrib;
->
-<!--end of issuenum.attlist-->]]>
-<!--end of issuenum.module-->]]>
-
-<!-- LegalNotice ...................... -->
-
-<!ENTITY % legalnotice.module "INCLUDE">
-<![%legalnotice.module;[
-<!ENTITY % local.legalnotice.attrib "">
-<!ENTITY % legalnotice.role.attrib "%role.attrib;">
-
-<!ENTITY % legalnotice.element "INCLUDE">
-<![%legalnotice.element;[
-<!ELEMENT legalnotice (title?, (%legalnotice.mix;)+)>
-<!--end of legalnotice.element-->]]>
-
-<!ENTITY % legalnotice.attlist "INCLUDE">
-<![%legalnotice.attlist;[
-<!ATTLIST legalnotice
-		%common.attrib;
-		%legalnotice.role.attrib;
-		%local.legalnotice.attrib;
->
-<!--end of legalnotice.attlist-->]]>
-<!--end of legalnotice.module-->]]>
-
-<!-- ModeSpec ......................... -->
-
-<!ENTITY % modespec.module "INCLUDE">
-<![%modespec.module;[
-<!ENTITY % local.modespec.attrib "">
-<!ENTITY % modespec.role.attrib "%role.attrib;">
-
-<!ENTITY % modespec.element "INCLUDE">
-<![%modespec.element;[
-<!ELEMENT modespec (%docinfo.char.mix;)*>
-<!--end of modespec.element-->]]>
-
-<!-- Application: Type of action required for completion
-		of the links to which the ModeSpec is relevant (e.g.,
-		retrieval query) -->
-
-
-<!ENTITY % modespec.attlist "INCLUDE">
-<![%modespec.attlist;[
-<!ATTLIST modespec
-		application	NOTATION
-				(%notation.class;)	#IMPLIED
-		%common.attrib;
-		%modespec.role.attrib;
-		%local.modespec.attrib;
->
-<!--end of modespec.attlist-->]]>
-<!--end of modespec.module-->]]>
-
-<!-- OrgName .......................... -->
-
-<!ENTITY % orgname.module "INCLUDE">
-<![%orgname.module;[
-<!ENTITY % local.orgname.attrib "">
-<!ENTITY % orgname.role.attrib "%role.attrib;">
-
-<!ENTITY % orgname.element "INCLUDE">
-<![%orgname.element;[
-<!ELEMENT orgname (%docinfo.char.mix;)*>
-<!--end of orgname.element-->]]>
-
-<!ENTITY % orgname.attlist "INCLUDE">
-<![%orgname.attlist;[
-<!ATTLIST orgname
-		%common.attrib;
-		%orgname.role.attrib;
-		%local.orgname.attrib;
->
-<!--end of orgname.attlist-->]]>
-<!--end of orgname.module-->]]>
-
-<!-- OtherCredit ...................... -->
-
-<!ENTITY % othercredit.module "INCLUDE">
-<![%othercredit.module;[
-<!ENTITY % local.othercredit.attrib "">
-<!ENTITY % othercredit.role.attrib "%role.attrib;">
-
-<!ENTITY % othercredit.element "INCLUDE">
-<![%othercredit.element;[
-<!ELEMENT othercredit ((%person.ident.mix;)+)>
-<!--end of othercredit.element-->]]>
-
-<!ENTITY % othercredit.attlist "INCLUDE">
-<![%othercredit.attlist;[
-<!ATTLIST othercredit
-		%common.attrib;
-		%othercredit.role.attrib;
-		%local.othercredit.attrib;
->
-<!--end of othercredit.attlist-->]]>
-  <!--(see "Personal identity elements" for %person.ident.mix;)-->
-<!--end of othercredit.module-->]]>
-
-<!-- PageNums ......................... -->
-
-<!ENTITY % pagenums.module "INCLUDE">
-<![%pagenums.module;[
-<!ENTITY % local.pagenums.attrib "">
-<!ENTITY % pagenums.role.attrib "%role.attrib;">
-
-<!ENTITY % pagenums.element "INCLUDE">
-<![%pagenums.element;[
-<!ELEMENT pagenums (%docinfo.char.mix;)*>
-<!--end of pagenums.element-->]]>
-
-<!ENTITY % pagenums.attlist "INCLUDE">
-<![%pagenums.attlist;[
-<!ATTLIST pagenums
-		%common.attrib;
-		%pagenums.role.attrib;
-		%local.pagenums.attrib;
->
-<!--end of pagenums.attlist-->]]>
-<!--end of pagenums.module-->]]>
-
-<!-- Personal identity elements ....... -->
-
-<!-- These elements are used only within Author, Editor, and 
-OtherCredit. -->
-
-<!ENTITY % person.ident.module "INCLUDE">
-<![%person.ident.module;[
-  <!ENTITY % contrib.module "INCLUDE">
-  <![%contrib.module;[
-  <!ENTITY % local.contrib.attrib "">
-  <!ENTITY % contrib.role.attrib "%role.attrib;">
-  
-<!ENTITY % contrib.element "INCLUDE">
-<![%contrib.element;[
-<!ELEMENT contrib (%docinfo.char.mix;)*>
-<!--end of contrib.element-->]]>
-  
-<!ENTITY % contrib.attlist "INCLUDE">
-<![%contrib.attlist;[
-<!ATTLIST contrib
-		%common.attrib;
-		%contrib.role.attrib;
-		%local.contrib.attrib;
->
-<!--end of contrib.attlist-->]]>
-  <!--end of contrib.module-->]]>
-
-  <!ENTITY % firstname.module "INCLUDE">
-  <![%firstname.module;[
-  <!ENTITY % local.firstname.attrib "">
-  <!ENTITY % firstname.role.attrib "%role.attrib;">
-  
-<!ENTITY % firstname.element "INCLUDE">
-<![%firstname.element;[
-<!ELEMENT firstname (%docinfo.char.mix;)*>
-<!--end of firstname.element-->]]>
-  
-<!ENTITY % firstname.attlist "INCLUDE">
-<![%firstname.attlist;[
-<!ATTLIST firstname
-		%common.attrib;
-		%firstname.role.attrib;
-		%local.firstname.attrib;
->
-<!--end of firstname.attlist-->]]>
-  <!--end of firstname.module-->]]>
-
-  <!ENTITY % honorific.module "INCLUDE">
-  <![%honorific.module;[
-  <!ENTITY % local.honorific.attrib "">
-  <!ENTITY % honorific.role.attrib "%role.attrib;">
-  
-<!ENTITY % honorific.element "INCLUDE">
-<![%honorific.element;[
-<!ELEMENT honorific (%docinfo.char.mix;)*>
-<!--end of honorific.element-->]]>
-  
-<!ENTITY % honorific.attlist "INCLUDE">
-<![%honorific.attlist;[
-<!ATTLIST honorific
-		%common.attrib;
-		%honorific.role.attrib;
-		%local.honorific.attrib;
->
-<!--end of honorific.attlist-->]]>
-  <!--end of honorific.module-->]]>
-
-  <!ENTITY % lineage.module "INCLUDE">
-  <![%lineage.module;[
-  <!ENTITY % local.lineage.attrib "">
-  <!ENTITY % lineage.role.attrib "%role.attrib;">
-  
-<!ENTITY % lineage.element "INCLUDE">
-<![%lineage.element;[
-<!ELEMENT lineage (%docinfo.char.mix;)*>
-<!--end of lineage.element-->]]>
-  
-<!ENTITY % lineage.attlist "INCLUDE">
-<![%lineage.attlist;[
-<!ATTLIST lineage
-		%common.attrib;
-		%lineage.role.attrib;
-		%local.lineage.attrib;
->
-<!--end of lineage.attlist-->]]>
-  <!--end of lineage.module-->]]>
-
-  <!ENTITY % othername.module "INCLUDE">
-  <![%othername.module;[
-  <!ENTITY % local.othername.attrib "">
-  <!ENTITY % othername.role.attrib "%role.attrib;">
-  
-<!ENTITY % othername.element "INCLUDE">
-<![%othername.element;[
-<!ELEMENT othername (%docinfo.char.mix;)*>
-<!--end of othername.element-->]]>
-  
-<!ENTITY % othername.attlist "INCLUDE">
-<![%othername.attlist;[
-<!ATTLIST othername
-		%common.attrib;
-		%othername.role.attrib;
-		%local.othername.attrib;
->
-<!--end of othername.attlist-->]]>
-  <!--end of othername.module-->]]>
-
-  <!ENTITY % surname.module "INCLUDE">
-  <![%surname.module;[
-  <!ENTITY % local.surname.attrib "">
-  <!ENTITY % surname.role.attrib "%role.attrib;">
-  
-<!ENTITY % surname.element "INCLUDE">
-<![%surname.element;[
-<!ELEMENT surname (%docinfo.char.mix;)*>
-<!--end of surname.element-->]]>
-  
-<!ENTITY % surname.attlist "INCLUDE">
-<![%surname.attlist;[
-<!ATTLIST surname
-		%common.attrib;
-		%surname.role.attrib;
-		%local.surname.attrib;
->
-<!--end of surname.attlist-->]]>
-  <!--end of surname.module-->]]>
-<!--end of person.ident.module-->]]>
-
-<!-- PrintHistory ..................... -->
-
-<!ENTITY % printhistory.module "INCLUDE">
-<![%printhistory.module;[
-<!ENTITY % local.printhistory.attrib "">
-<!ENTITY % printhistory.role.attrib "%role.attrib;">
-
-<!ENTITY % printhistory.element "INCLUDE">
-<![%printhistory.element;[
-<!ELEMENT printhistory ((%para.class;)+)>
-<!--end of printhistory.element-->]]>
-
-<!ENTITY % printhistory.attlist "INCLUDE">
-<![%printhistory.attlist;[
-<!ATTLIST printhistory
-		%common.attrib;
-		%printhistory.role.attrib;
-		%local.printhistory.attrib;
->
-<!--end of printhistory.attlist-->]]>
-<!--end of printhistory.module-->]]>
-
-<!-- ProductName ...................... -->
-
-<!ENTITY % productname.module "INCLUDE">
-<![%productname.module;[
-<!ENTITY % local.productname.attrib "">
-<!ENTITY % productname.role.attrib "%role.attrib;">
-
-<!ENTITY % productname.element "INCLUDE">
-<![%productname.element;[
-<!ELEMENT productname (%para.char.mix;)*>
-<!--end of productname.element-->]]>
-
-<!-- Class: More precisely identifies the item the element names -->
-
-
-<!ENTITY % productname.attlist "INCLUDE">
-<![%productname.attlist;[
-<!ATTLIST productname
-		class		(service
-				|trade
-				|registered
-				|copyright)	'trade'
-		%common.attrib;
-		%productname.role.attrib;
-		%local.productname.attrib;
->
-<!--end of productname.attlist-->]]>
-<!--end of productname.module-->]]>
-
-<!-- ProductNumber .................... -->
-
-<!ENTITY % productnumber.module "INCLUDE">
-<![%productnumber.module;[
-<!ENTITY % local.productnumber.attrib "">
-<!ENTITY % productnumber.role.attrib "%role.attrib;">
-
-<!ENTITY % productnumber.element "INCLUDE">
-<![%productnumber.element;[
-<!ELEMENT productnumber (%docinfo.char.mix;)*>
-<!--end of productnumber.element-->]]>
-
-<!ENTITY % productnumber.attlist "INCLUDE">
-<![%productnumber.attlist;[
-<!ATTLIST productnumber
-		%common.attrib;
-		%productnumber.role.attrib;
-		%local.productnumber.attrib;
->
-<!--end of productnumber.attlist-->]]>
-<!--end of productnumber.module-->]]>
-
-<!-- PubDate .......................... -->
-
-<!ENTITY % pubdate.module "INCLUDE">
-<![%pubdate.module;[
-<!ENTITY % local.pubdate.attrib "">
-<!ENTITY % pubdate.role.attrib "%role.attrib;">
-
-<!ENTITY % pubdate.element "INCLUDE">
-<![%pubdate.element;[
-<!ELEMENT pubdate (%docinfo.char.mix;)*>
-<!--end of pubdate.element-->]]>
-
-<!ENTITY % pubdate.attlist "INCLUDE">
-<![%pubdate.attlist;[
-<!ATTLIST pubdate
-		%common.attrib;
-		%pubdate.role.attrib;
-		%local.pubdate.attrib;
->
-<!--end of pubdate.attlist-->]]>
-<!--end of pubdate.module-->]]>
-
-<!-- Publisher ........................ -->
-
-<!ENTITY % publisher.content.module "INCLUDE">
-<![%publisher.content.module;[
-<!ENTITY % publisher.module "INCLUDE">
-<![%publisher.module;[
-<!ENTITY % local.publisher.attrib "">
-<!ENTITY % publisher.role.attrib "%role.attrib;">
-
-<!ENTITY % publisher.element "INCLUDE">
-<![%publisher.element;[
-<!ELEMENT publisher (publishername, address*)>
-<!--end of publisher.element-->]]>
-
-<!ENTITY % publisher.attlist "INCLUDE">
-<![%publisher.attlist;[
-<!ATTLIST publisher
-		%common.attrib;
-		%publisher.role.attrib;
-		%local.publisher.attrib;
->
-<!--end of publisher.attlist-->]]>
-<!--end of publisher.module-->]]>
-
-  <!ENTITY % publishername.module "INCLUDE">
-  <![%publishername.module;[
-  <!ENTITY % local.publishername.attrib "">
-  <!ENTITY % publishername.role.attrib "%role.attrib;">
-  
-<!ENTITY % publishername.element "INCLUDE">
-<![%publishername.element;[
-<!ELEMENT publishername (%docinfo.char.mix;)*>
-<!--end of publishername.element-->]]>
-  
-<!ENTITY % publishername.attlist "INCLUDE">
-<![%publishername.attlist;[
-<!ATTLIST publishername
-		%common.attrib;
-		%publishername.role.attrib;
-		%local.publishername.attrib;
->
-<!--end of publishername.attlist-->]]>
-  <!--end of publishername.module-->]]>
-
-  <!-- Address (defined elsewhere in this section)-->
-<!--end of publisher.content.module-->]]>
-
-<!-- PubsNumber ....................... -->
-
-<!ENTITY % pubsnumber.module "INCLUDE">
-<![%pubsnumber.module;[
-<!ENTITY % local.pubsnumber.attrib "">
-<!ENTITY % pubsnumber.role.attrib "%role.attrib;">
-
-<!ENTITY % pubsnumber.element "INCLUDE">
-<![%pubsnumber.element;[
-<!ELEMENT pubsnumber (%docinfo.char.mix;)*>
-<!--end of pubsnumber.element-->]]>
-
-<!ENTITY % pubsnumber.attlist "INCLUDE">
-<![%pubsnumber.attlist;[
-<!ATTLIST pubsnumber
-		%common.attrib;
-		%pubsnumber.role.attrib;
-		%local.pubsnumber.attrib;
->
-<!--end of pubsnumber.attlist-->]]>
-<!--end of pubsnumber.module-->]]>
-
-<!-- ReleaseInfo ...................... -->
-
-<!ENTITY % releaseinfo.module "INCLUDE">
-<![%releaseinfo.module;[
-<!ENTITY % local.releaseinfo.attrib "">
-<!ENTITY % releaseinfo.role.attrib "%role.attrib;">
-
-<!ENTITY % releaseinfo.element "INCLUDE">
-<![%releaseinfo.element;[
-<!ELEMENT releaseinfo (%docinfo.char.mix;)*>
-<!--end of releaseinfo.element-->]]>
-
-<!ENTITY % releaseinfo.attlist "INCLUDE">
-<![%releaseinfo.attlist;[
-<!ATTLIST releaseinfo
-		%common.attrib;
-		%releaseinfo.role.attrib;
-		%local.releaseinfo.attrib;
->
-<!--end of releaseinfo.attlist-->]]>
-<!--end of releaseinfo.module-->]]>
-
-<!-- RevHistory ....................... -->
-
-<!ENTITY % revhistory.content.module "INCLUDE">
-<![%revhistory.content.module;[
-<!ENTITY % revhistory.module "INCLUDE">
-<![%revhistory.module;[
-<!ENTITY % local.revhistory.attrib "">
-<!ENTITY % revhistory.role.attrib "%role.attrib;">
-
-<!ENTITY % revhistory.element "INCLUDE">
-<![%revhistory.element;[
-<!ELEMENT revhistory (revision+)>
-<!--end of revhistory.element-->]]>
-
-<!ENTITY % revhistory.attlist "INCLUDE">
-<![%revhistory.attlist;[
-<!ATTLIST revhistory
-		%common.attrib;
-		%revhistory.role.attrib;
-		%local.revhistory.attrib;
->
-<!--end of revhistory.attlist-->]]>
-<!--end of revhistory.module-->]]>
-
-<!ENTITY % revision.module "INCLUDE">
-<![%revision.module;[
-<!ENTITY % local.revision.attrib "">
-<!ENTITY % revision.role.attrib "%role.attrib;">
-
-<!ENTITY % revision.element "INCLUDE">
-<![%revision.element;[
-<!ELEMENT revision (revnumber, date, authorinitials*, 
-                    (revremark|revdescription)?)>
-<!--end of revision.element-->]]>
-
-<!ENTITY % revision.attlist "INCLUDE">
-<![%revision.attlist;[
-<!ATTLIST revision
-		%common.attrib;
-		%revision.role.attrib;
-		%local.revision.attrib;
->
-<!--end of revision.attlist-->]]>
-<!--end of revision.module-->]]>
-
-<!ENTITY % revnumber.module "INCLUDE">
-<![%revnumber.module;[
-<!ENTITY % local.revnumber.attrib "">
-<!ENTITY % revnumber.role.attrib "%role.attrib;">
-
-<!ENTITY % revnumber.element "INCLUDE">
-<![%revnumber.element;[
-<!ELEMENT revnumber (%docinfo.char.mix;)*>
-<!--end of revnumber.element-->]]>
-
-<!ENTITY % revnumber.attlist "INCLUDE">
-<![%revnumber.attlist;[
-<!ATTLIST revnumber
-		%common.attrib;
-		%revnumber.role.attrib;
-		%local.revnumber.attrib;
->
-<!--end of revnumber.attlist-->]]>
-<!--end of revnumber.module-->]]>
-
-<!-- Date (defined elsewhere in this section)-->
-<!-- AuthorInitials (defined elsewhere in this section)-->
-
-<!ENTITY % revremark.module "INCLUDE">
-<![%revremark.module;[
-<!ENTITY % local.revremark.attrib "">
-<!ENTITY % revremark.role.attrib "%role.attrib;">
-
-<!ENTITY % revremark.element "INCLUDE">
-<![%revremark.element;[
-<!ELEMENT revremark (%docinfo.char.mix;)*>
-<!--end of revremark.element-->]]>
-
-<!ENTITY % revremark.attlist "INCLUDE">
-<![%revremark.attlist;[
-<!ATTLIST revremark
-		%common.attrib;
-		%revremark.role.attrib;
-		%local.revremark.attrib;
->
-<!--end of revremark.attlist-->]]>
-<!--end of revremark.module-->]]>
-
-<!ENTITY % revdescription.module "INCLUDE">
-<![ %revdescription.module; [
-<!ENTITY % local.revdescription.attrib "">
-<!ENTITY % revdescription.role.attrib "%role.attrib;">
-
-<!ENTITY % revdescription.element "INCLUDE">
-<![ %revdescription.element; [
-<!ELEMENT revdescription ((%revdescription.mix;)+)>
-<!--end of revdescription.element-->]]>
-
-<!ENTITY % revdescription.attlist "INCLUDE">
-<![ %revdescription.attlist; [
-<!ATTLIST revdescription
-		%common.attrib;
-		%revdescription.role.attrib;
-		%local.revdescription.attrib;
->
-<!--end of revdescription.attlist-->]]>
-<!--end of revdescription.module-->]]>
-<!--end of revhistory.content.module-->]]>
-
-<!-- SeriesVolNums .................... -->
-
-<!ENTITY % seriesvolnums.module "INCLUDE">
-<![%seriesvolnums.module;[
-<!ENTITY % local.seriesvolnums.attrib "">
-<!ENTITY % seriesvolnums.role.attrib "%role.attrib;">
-
-<!ENTITY % seriesvolnums.element "INCLUDE">
-<![%seriesvolnums.element;[
-<!ELEMENT seriesvolnums (%docinfo.char.mix;)*>
-<!--end of seriesvolnums.element-->]]>
-
-<!ENTITY % seriesvolnums.attlist "INCLUDE">
-<![%seriesvolnums.attlist;[
-<!ATTLIST seriesvolnums
-		%common.attrib;
-		%seriesvolnums.role.attrib;
-		%local.seriesvolnums.attrib;
->
-<!--end of seriesvolnums.attlist-->]]>
-<!--end of seriesvolnums.module-->]]>
-
-<!-- VolumeNum ........................ -->
-
-<!ENTITY % volumenum.module "INCLUDE">
-<![%volumenum.module;[
-<!ENTITY % local.volumenum.attrib "">
-<!ENTITY % volumenum.role.attrib "%role.attrib;">
-
-<!ENTITY % volumenum.element "INCLUDE">
-<![%volumenum.element;[
-<!ELEMENT volumenum (%docinfo.char.mix;)*>
-<!--end of volumenum.element-->]]>
-
-<!ENTITY % volumenum.attlist "INCLUDE">
-<![%volumenum.attlist;[
-<!ATTLIST volumenum
-		%common.attrib;
-		%volumenum.role.attrib;
-		%local.volumenum.attrib;
->
-<!--end of volumenum.attlist-->]]>
-<!--end of volumenum.module-->]]>
-
-<!-- .................................. -->
-
-<!--end of docinfo.content.module-->]]>
-
-<!-- ...................................................................... -->
-<!-- Inline, link, and ubiquitous elements ................................ -->
-
-<!-- Technical and computer terms ......................................... -->
-
-<!ENTITY % accel.module "INCLUDE">
-<![%accel.module;[
-<!ENTITY % local.accel.attrib "">
-<!ENTITY % accel.role.attrib "%role.attrib;">
-
-<!ENTITY % accel.element "INCLUDE">
-<![%accel.element;[
-<!ELEMENT accel (%smallcptr.char.mix;)*>
-<!--end of accel.element-->]]>
-
-<!ENTITY % accel.attlist "INCLUDE">
-<![%accel.attlist;[
-<!ATTLIST accel
-		%common.attrib;
-		%accel.role.attrib;
-		%local.accel.attrib;
->
-<!--end of accel.attlist-->]]>
-<!--end of accel.module-->]]>
-
-<!ENTITY % action.module "INCLUDE">
-<![%action.module;[
-<!ENTITY % local.action.attrib "">
-<!ENTITY % action.role.attrib "%role.attrib;">
-
-<!ENTITY % action.element "INCLUDE">
-<![%action.element;[
-<!ELEMENT action (%smallcptr.char.mix;)*>
-<!--end of action.element-->]]>
-
-<!ENTITY % action.attlist "INCLUDE">
-<![%action.attlist;[
-<!ATTLIST action
-		%moreinfo.attrib;
-		%common.attrib;
-		%action.role.attrib;
-		%local.action.attrib;
->
-<!--end of action.attlist-->]]>
-<!--end of action.module-->]]>
-
-<!ENTITY % application.module "INCLUDE">
-<![%application.module;[
-<!ENTITY % local.application.attrib "">
-<!ENTITY % application.role.attrib "%role.attrib;">
-
-<!ENTITY % application.element "INCLUDE">
-<![%application.element;[
-<!ELEMENT application (%para.char.mix;)*>
-<!--end of application.element-->]]>
-
-<!ENTITY % application.attlist "INCLUDE">
-<![%application.attlist;[
-<!ATTLIST application
-		class 		(hardware
-				|software)	#IMPLIED
-		%moreinfo.attrib;
-		%common.attrib;
-		%application.role.attrib;
-		%local.application.attrib;
->
-<!--end of application.attlist-->]]>
-<!--end of application.module-->]]>
-
-<!ENTITY % classname.module "INCLUDE">
-<![%classname.module;[
-<!ENTITY % local.classname.attrib "">
-<!ENTITY % classname.role.attrib "%role.attrib;">
-
-<!ENTITY % classname.element "INCLUDE">
-<![%classname.element;[
-<!ELEMENT classname (%smallcptr.char.mix;)*>
-<!--end of classname.element-->]]>
-
-<!ENTITY % classname.attlist "INCLUDE">
-<![%classname.attlist;[
-<!ATTLIST classname
-		%common.attrib;
-		%classname.role.attrib;
-		%local.classname.attrib;
->
-<!--end of classname.attlist-->]]>
-<!--end of classname.module-->]]>
-
-<!ENTITY % co.module "INCLUDE">
-<![%co.module;[
-<!ENTITY % local.co.attrib "">
-<!-- CO is a callout area of the LineColumn unit type (a single character 
-     position); the position is directly indicated by the location of CO. -->
-<!ENTITY % co.role.attrib "%role.attrib;">
-
-<!ENTITY % co.element "INCLUDE">
-<![%co.element;[
-<!ELEMENT co EMPTY>
-<!--end of co.element-->]]>
-
-<!-- bug number/symbol override or initialization -->
-<!-- to any related information -->
-
-
-<!ENTITY % co.attlist "INCLUDE">
-<![%co.attlist;[
-<!ATTLIST co
-		%label.attrib;
-		%linkends.attrib;
-		%idreq.common.attrib;
-		%co.role.attrib;
-		%local.co.attrib;
->
-<!--end of co.attlist-->]]>
-<!--end of co.module-->]]>
-
-<!ENTITY % command.module "INCLUDE">
-<![%command.module;[
-<!ENTITY % local.command.attrib "">
-<!ENTITY % command.role.attrib "%role.attrib;">
-
-<!ENTITY % command.element "INCLUDE">
-<![%command.element;[
-<!ELEMENT command (%cptr.char.mix;)*>
-<!--end of command.element-->]]>
-
-<!ENTITY % command.attlist "INCLUDE">
-<![%command.attlist;[
-<!ATTLIST command
-		%moreinfo.attrib;
-		%common.attrib;
-		%command.role.attrib;
-		%local.command.attrib;
->
-<!--end of command.attlist-->]]>
-<!--end of command.module-->]]>
-
-<!ENTITY % computeroutput.module "INCLUDE">
-<![%computeroutput.module;[
-<!ENTITY % local.computeroutput.attrib "">
-<!ENTITY % computeroutput.role.attrib "%role.attrib;">
-
-<!ENTITY % computeroutput.element "INCLUDE">
-<![%computeroutput.element;[
-<!ELEMENT computeroutput (%cptr.char.mix;)*>
-<!--end of computeroutput.element-->]]>
-
-<!ENTITY % computeroutput.attlist "INCLUDE">
-<![%computeroutput.attlist;[
-<!ATTLIST computeroutput
-		%moreinfo.attrib;
-		%common.attrib;
-		%computeroutput.role.attrib;
-		%local.computeroutput.attrib;
->
-<!--end of computeroutput.attlist-->]]>
-<!--end of computeroutput.module-->]]>
-
-<!ENTITY % database.module "INCLUDE">
-<![%database.module;[
-<!ENTITY % local.database.attrib "">
-<!ENTITY % database.role.attrib "%role.attrib;">
-
-<!ENTITY % database.element "INCLUDE">
-<![%database.element;[
-<!ELEMENT database (%smallcptr.char.mix;)*>
-<!--end of database.element-->]]>
-
-<!-- Class: Type of database the element names; no default -->
-
-
-<!ENTITY % database.attlist "INCLUDE">
-<![%database.attlist;[
-<!ATTLIST database
-		class 		(name
-				|table
-				|field
-				|key1
-				|key2
-				|record)	#IMPLIED
-		%moreinfo.attrib;
-		%common.attrib;
-		%database.role.attrib;
-		%local.database.attrib;
->
-<!--end of database.attlist-->]]>
-<!--end of database.module-->]]>
-
-<!ENTITY % email.module "INCLUDE">
-<![%email.module;[
-<!ENTITY % local.email.attrib "">
-<!ENTITY % email.role.attrib "%role.attrib;">
-
-<!ENTITY % email.element "INCLUDE">
-<![%email.element;[
-<!ELEMENT email (%docinfo.char.mix;)*>
-<!--end of email.element-->]]>
-
-<!ENTITY % email.attlist "INCLUDE">
-<![%email.attlist;[
-<!ATTLIST email
-		%common.attrib;
-		%email.role.attrib;
-		%local.email.attrib;
->
-<!--end of email.attlist-->]]>
-<!--end of email.module-->]]>
-
-<!ENTITY % envar.module "INCLUDE">
-<![%envar.module;[
-<!ENTITY % local.envar.attrib "">
-<!ENTITY % envar.role.attrib "%role.attrib;">
-
-<!ENTITY % envar.element "INCLUDE">
-<![%envar.element;[
-<!ELEMENT envar (%smallcptr.char.mix;)*>
-<!--end of envar.element-->]]>
-
-<!ENTITY % envar.attlist "INCLUDE">
-<![%envar.attlist;[
-<!ATTLIST envar
-		%common.attrib;
-		%envar.role.attrib;
-		%local.envar.attrib;
->
-<!--end of envar.attlist-->]]>
-<!--end of envar.module-->]]>
-
-
-<!ENTITY % errorcode.module "INCLUDE">
-<![%errorcode.module;[
-<!ENTITY % local.errorcode.attrib "">
-<!ENTITY % errorcode.role.attrib "%role.attrib;">
-
-<!ENTITY % errorcode.element "INCLUDE">
-<![%errorcode.element;[
-<!ELEMENT errorcode (%smallcptr.char.mix;)*>
-<!--end of errorcode.element-->]]>
-
-<!ENTITY % errorcode.attlist "INCLUDE">
-<![%errorcode.attlist;[
-<!ATTLIST errorcode
-		%moreinfo.attrib;
-		%common.attrib;
-		%errorcode.role.attrib;
-		%local.errorcode.attrib;
->
-<!--end of errorcode.attlist-->]]>
-<!--end of errorcode.module-->]]>
-
-<!ENTITY % errorname.module "INCLUDE">
-<![%errorname.module;[
-<!ENTITY % local.errorname.attrib "">
-<!ENTITY % errorname.role.attrib "%role.attrib;">
-
-<!ENTITY % errorname.element "INCLUDE">
-<![%errorname.element;[
-<!ELEMENT errorname (%smallcptr.char.mix;)*>
-<!--end of errorname.element-->]]>
-
-<!ENTITY % errorname.attlist "INCLUDE">
-<![%errorname.attlist;[
-<!ATTLIST errorname
-		%common.attrib;
-		%errorname.role.attrib;
-		%local.errorname.attrib;
->
-<!--end of errorname.attlist-->]]>
-<!--end of errorname.module-->]]>
-
-<!ENTITY % errortype.module "INCLUDE">
-<![%errortype.module;[
-<!ENTITY % local.errortype.attrib "">
-<!ENTITY % errortype.role.attrib "%role.attrib;">
-
-<!ENTITY % errortype.element "INCLUDE">
-<![%errortype.element;[
-<!ELEMENT errortype (%smallcptr.char.mix;)*>
-<!--end of errortype.element-->]]>
-
-<!ENTITY % errortype.attlist "INCLUDE">
-<![%errortype.attlist;[
-<!ATTLIST errortype
-		%common.attrib;
-		%errortype.role.attrib;
-		%local.errortype.attrib;
->
-<!--end of errortype.attlist-->]]>
-<!--end of errortype.module-->]]>
-
-<!ENTITY % filename.module "INCLUDE">
-<![%filename.module;[
-<!ENTITY % local.filename.attrib "">
-<!ENTITY % filename.role.attrib "%role.attrib;">
-
-<!ENTITY % filename.element "INCLUDE">
-<![%filename.element;[
-<!ELEMENT filename (%smallcptr.char.mix;)*>
-<!--end of filename.element-->]]>
-
-<!-- Class: Type of filename the element names; no default -->
-<!-- Path: Search path (possibly system-specific) in which 
-		file can be found -->
-
-
-<!ENTITY % filename.attlist "INCLUDE">
-<![%filename.attlist;[
-<!ATTLIST filename
-		class		(headerfile
-                                |devicefile
-                                |libraryfile
-                                |directory
-				|symlink)       #IMPLIED
-		path		CDATA		#IMPLIED
-		%moreinfo.attrib;
-		%common.attrib;
-		%filename.role.attrib;
-		%local.filename.attrib;
->
-<!--end of filename.attlist-->]]>
-<!--end of filename.module-->]]>
-
-<!ENTITY % function.module "INCLUDE">
-<![%function.module;[
-<!ENTITY % local.function.attrib "">
-<!ENTITY % function.role.attrib "%role.attrib;">
-
-<!ENTITY % function.element "INCLUDE">
-<![%function.element;[
-<!ELEMENT function (%cptr.char.mix;)*>
-<!--end of function.element-->]]>
-
-<!ENTITY % function.attlist "INCLUDE">
-<![%function.attlist;[
-<!ATTLIST function
-		%moreinfo.attrib;
-		%common.attrib;
-		%function.role.attrib;
-		%local.function.attrib;
->
-<!--end of function.attlist-->]]>
-<!--end of function.module-->]]>
-
-<!ENTITY % guibutton.module "INCLUDE">
-<![%guibutton.module;[
-<!ENTITY % local.guibutton.attrib "">
-<!ENTITY % guibutton.role.attrib "%role.attrib;">
-
-<!ENTITY % guibutton.element "INCLUDE">
-<![%guibutton.element;[
-<!ELEMENT guibutton (%smallcptr.char.mix;|accel)*>
-<!--end of guibutton.element-->]]>
-
-<!ENTITY % guibutton.attlist "INCLUDE">
-<![%guibutton.attlist;[
-<!ATTLIST guibutton
-		%moreinfo.attrib;
-		%common.attrib;
-		%guibutton.role.attrib;
-		%local.guibutton.attrib;
->
-<!--end of guibutton.attlist-->]]>
-<!--end of guibutton.module-->]]>
-
-<!ENTITY % guiicon.module "INCLUDE">
-<![%guiicon.module;[
-<!ENTITY % local.guiicon.attrib "">
-<!ENTITY % guiicon.role.attrib "%role.attrib;">
-
-<!ENTITY % guiicon.element "INCLUDE">
-<![%guiicon.element;[
-<!ELEMENT guiicon (%smallcptr.char.mix;|accel)*>
-<!--end of guiicon.element-->]]>
-
-<!ENTITY % guiicon.attlist "INCLUDE">
-<![%guiicon.attlist;[
-<!ATTLIST guiicon
-		%moreinfo.attrib;
-		%common.attrib;
-		%guiicon.role.attrib;
-		%local.guiicon.attrib;
->
-<!--end of guiicon.attlist-->]]>
-<!--end of guiicon.module-->]]>
-
-<!ENTITY % guilabel.module "INCLUDE">
-<![%guilabel.module;[
-<!ENTITY % local.guilabel.attrib "">
-<!ENTITY % guilabel.role.attrib "%role.attrib;">
-
-<!ENTITY % guilabel.element "INCLUDE">
-<![%guilabel.element;[
-<!ELEMENT guilabel (%smallcptr.char.mix;|accel)*>
-<!--end of guilabel.element-->]]>
-
-<!ENTITY % guilabel.attlist "INCLUDE">
-<![%guilabel.attlist;[
-<!ATTLIST guilabel
-		%moreinfo.attrib;
-		%common.attrib;
-		%guilabel.role.attrib;
-		%local.guilabel.attrib;
->
-<!--end of guilabel.attlist-->]]>
-<!--end of guilabel.module-->]]>
-
-<!ENTITY % guimenu.module "INCLUDE">
-<![%guimenu.module;[
-<!ENTITY % local.guimenu.attrib "">
-<!ENTITY % guimenu.role.attrib "%role.attrib;">
-
-<!ENTITY % guimenu.element "INCLUDE">
-<![%guimenu.element;[
-<!ELEMENT guimenu (%smallcptr.char.mix;|accel)*>
-<!--end of guimenu.element-->]]>
-
-<!ENTITY % guimenu.attlist "INCLUDE">
-<![%guimenu.attlist;[
-<!ATTLIST guimenu
-		%moreinfo.attrib;
-		%common.attrib;
-		%guimenu.role.attrib;
-		%local.guimenu.attrib;
->
-<!--end of guimenu.attlist-->]]>
-<!--end of guimenu.module-->]]>
-
-<!ENTITY % guimenuitem.module "INCLUDE">
-<![%guimenuitem.module;[
-<!ENTITY % local.guimenuitem.attrib "">
-<!ENTITY % guimenuitem.role.attrib "%role.attrib;">
-
-<!ENTITY % guimenuitem.element "INCLUDE">
-<![%guimenuitem.element;[
-<!ELEMENT guimenuitem (%smallcptr.char.mix;|accel)*>
-<!--end of guimenuitem.element-->]]>
-
-<!ENTITY % guimenuitem.attlist "INCLUDE">
-<![%guimenuitem.attlist;[
-<!ATTLIST guimenuitem
-		%moreinfo.attrib;
-		%common.attrib;
-		%guimenuitem.role.attrib;
-		%local.guimenuitem.attrib;
->
-<!--end of guimenuitem.attlist-->]]>
-<!--end of guimenuitem.module-->]]>
-
-<!ENTITY % guisubmenu.module "INCLUDE">
-<![%guisubmenu.module;[
-<!ENTITY % local.guisubmenu.attrib "">
-<!ENTITY % guisubmenu.role.attrib "%role.attrib;">
-
-<!ENTITY % guisubmenu.element "INCLUDE">
-<![%guisubmenu.element;[
-<!ELEMENT guisubmenu (%smallcptr.char.mix;|accel)*>
-<!--end of guisubmenu.element-->]]>
-
-<!ENTITY % guisubmenu.attlist "INCLUDE">
-<![%guisubmenu.attlist;[
-<!ATTLIST guisubmenu
-		%moreinfo.attrib;
-		%common.attrib;
-		%guisubmenu.role.attrib;
-		%local.guisubmenu.attrib;
->
-<!--end of guisubmenu.attlist-->]]>
-<!--end of guisubmenu.module-->]]>
-
-<!ENTITY % hardware.module "INCLUDE">
-<![%hardware.module;[
-<!ENTITY % local.hardware.attrib "">
-<!ENTITY % hardware.role.attrib "%role.attrib;">
-
-<!ENTITY % hardware.element "INCLUDE">
-<![%hardware.element;[
-<!ELEMENT hardware (%smallcptr.char.mix;)*>
-<!--end of hardware.element-->]]>
-
-<!ENTITY % hardware.attlist "INCLUDE">
-<![%hardware.attlist;[
-<!ATTLIST hardware
-		%moreinfo.attrib;
-		%common.attrib;
-		%hardware.role.attrib;
-		%local.hardware.attrib;
->
-<!--end of hardware.attlist-->]]>
-<!--end of hardware.module-->]]>
-
-<!ENTITY % interface.module "INCLUDE">
-<![%interface.module;[
-<!ENTITY % local.interface.attrib "">
-<!ENTITY % interface.role.attrib "%role.attrib;">
-
-<!ENTITY % interface.element "INCLUDE">
-<![%interface.element;[
-<!ELEMENT interface (%smallcptr.char.mix;|accel)*>
-<!--end of interface.element-->]]>
-
-<!-- Class: Type of the Interface item; no default -->
-
-
-<!ENTITY % interface.attlist "INCLUDE">
-<![%interface.attlist;[
-<!ATTLIST interface
-		%moreinfo.attrib;
-		%common.attrib;
-		%interface.role.attrib;
-		%local.interface.attrib;
->
-<!--end of interface.attlist-->]]>
-<!--end of interface.module-->]]>
-
-<!ENTITY % keycap.module "INCLUDE">
-<![%keycap.module;[
-<!ENTITY % local.keycap.attrib "">
-<!ENTITY % keycap.role.attrib "%role.attrib;">
-
-<!ENTITY % keycap.element "INCLUDE">
-<![%keycap.element;[
-<!ELEMENT keycap (%smallcptr.char.mix;)*>
-<!--end of keycap.element-->]]>
-
-<!ENTITY % keycap.attlist "INCLUDE">
-<![%keycap.attlist;[
-<!ATTLIST keycap
-		%moreinfo.attrib;
-		%common.attrib;
-		%keycap.role.attrib;
-		%local.keycap.attrib;
->
-<!--end of keycap.attlist-->]]>
-<!--end of keycap.module-->]]>
-
-<!ENTITY % keycode.module "INCLUDE">
-<![%keycode.module;[
-<!ENTITY % local.keycode.attrib "">
-<!ENTITY % keycode.role.attrib "%role.attrib;">
-
-<!ENTITY % keycode.element "INCLUDE">
-<![%keycode.element;[
-<!ELEMENT keycode (%smallcptr.char.mix;)*>
-<!--end of keycode.element-->]]>
-
-<!ENTITY % keycode.attlist "INCLUDE">
-<![%keycode.attlist;[
-<!ATTLIST keycode
-		%common.attrib;
-		%keycode.role.attrib;
-		%local.keycode.attrib;
->
-<!--end of keycode.attlist-->]]>
-<!--end of keycode.module-->]]>
-
-<!ENTITY % keycombo.module "INCLUDE">
-<![%keycombo.module;[
-<!ENTITY % local.keycombo.attrib "">
-<!ENTITY % keycombo.role.attrib "%role.attrib;">
-
-<!ENTITY % keycombo.element "INCLUDE">
-<![%keycombo.element;[
-<!ELEMENT keycombo ((keycap|keycombo|keysym|mousebutton)+)>
-<!--end of keycombo.element-->]]>
-
-<!ENTITY % keycombo.attlist "INCLUDE">
-<![%keycombo.attlist;[
-<!ATTLIST keycombo
-		%keyaction.attrib;
-		%moreinfo.attrib;
-		%common.attrib;
-		%keycombo.role.attrib;
-		%local.keycombo.attrib;
->
-<!--end of keycombo.attlist-->]]>
-<!--end of keycombo.module-->]]>
-
-<!ENTITY % keysym.module "INCLUDE">
-<![%keysym.module;[
-<!ENTITY % local.keysym.attrib "">
-<!ENTITY % keysysm.role.attrib "%role.attrib;">
-
-<!ENTITY % keysym.element "INCLUDE">
-<![%keysym.element;[
-<!ELEMENT keysym (%smallcptr.char.mix;)*>
-<!--end of keysym.element-->]]>
-
-<!ENTITY % keysym.attlist "INCLUDE">
-<![%keysym.attlist;[
-<!ATTLIST keysym
-		%common.attrib;
-		%keysysm.role.attrib;
-		%local.keysym.attrib;
->
-<!--end of keysym.attlist-->]]>
-<!--end of keysym.module-->]]>
-
-<!ENTITY % lineannotation.module "INCLUDE">
-<![%lineannotation.module;[
-<!ENTITY % local.lineannotation.attrib "">
-<!ENTITY % lineannotation.role.attrib "%role.attrib;">
-
-<!ENTITY % lineannotation.element "INCLUDE">
-<![%lineannotation.element;[
-<!ELEMENT lineannotation (%para.char.mix;)*>
-<!--end of lineannotation.element-->]]>
-
-<!ENTITY % lineannotation.attlist "INCLUDE">
-<![%lineannotation.attlist;[
-<!ATTLIST lineannotation
-		%common.attrib;
-		%lineannotation.role.attrib;
-		%local.lineannotation.attrib;
->
-<!--end of lineannotation.attlist-->]]>
-<!--end of lineannotation.module-->]]>
-
-<!ENTITY % literal.module "INCLUDE">
-<![%literal.module;[
-<!ENTITY % local.literal.attrib "">
-<!ENTITY % literal.role.attrib "%role.attrib;">
-
-<!ENTITY % literal.element "INCLUDE">
-<![%literal.element;[
-<!ELEMENT literal (%cptr.char.mix;)*>
-<!--end of literal.element-->]]>
-
-<!ENTITY % literal.attlist "INCLUDE">
-<![%literal.attlist;[
-<!ATTLIST literal
-		%moreinfo.attrib;
-		%common.attrib;
-		%literal.role.attrib;
-		%local.literal.attrib;
->
-<!--end of literal.attlist-->]]>
-<!--end of literal.module-->]]>
-
-<!ENTITY % constant.module "INCLUDE">
-<![ %constant.module; [
-<!ENTITY % local.constant.attrib "">
-<!ENTITY % constant.role.attrib "%role.attrib;">
-
-<!ENTITY % constant.element "INCLUDE">
-<![ %constant.element; [
-<!ELEMENT constant (%smallcptr.char.mix;)*>
-<!--end of constant.element-->]]>
-
-<!ENTITY % constant.attlist "INCLUDE">
-<![ %constant.attlist; [
-<!ATTLIST constant
-		%common.attrib;
-		%constant.role.attrib;
-		%local.constant.attrib;
-		class	(limit)		#IMPLIED
->
-<!--end of constant.attlist-->]]>
-<!--end of constant.module-->]]>
-
-<!ENTITY % varname.module "INCLUDE">
-<![ %varname.module; [
-<!ENTITY % local.varname.attrib "">
-<!ENTITY % varname.role.attrib "%role.attrib;">
-
-<!ENTITY % varname.element "INCLUDE">
-<![ %varname.element; [
-<!ELEMENT varname (%smallcptr.char.mix;)*>
-<!--end of varname.element-->]]>
-
-<!ENTITY % varname.attlist "INCLUDE">
-<![ %varname.attlist; [
-<!ATTLIST varname
-		%common.attrib;
-		%varname.role.attrib;
-		%local.varname.attrib;
->
-<!--end of varname.attlist-->]]>
-<!--end of varname.module-->]]>
-
-<!ENTITY % markup.module "INCLUDE">
-<![%markup.module;[
-<!ENTITY % local.markup.attrib "">
-<!ENTITY % markup.role.attrib "%role.attrib;">
-
-<!ENTITY % markup.element "INCLUDE">
-<![%markup.element;[
-<!ELEMENT markup (%smallcptr.char.mix;)*>
-<!--end of markup.element-->]]>
-
-<!ENTITY % markup.attlist "INCLUDE">
-<![%markup.attlist;[
-<!ATTLIST markup
-		%common.attrib;
-		%markup.role.attrib;
-		%local.markup.attrib;
->
-<!--end of markup.attlist-->]]>
-<!--end of markup.module-->]]>
-
-<!ENTITY % medialabel.module "INCLUDE">
-<![%medialabel.module;[
-<!ENTITY % local.medialabel.attrib "">
-<!ENTITY % medialabel.role.attrib "%role.attrib;">
-
-<!ENTITY % medialabel.element "INCLUDE">
-<![%medialabel.element;[
-<!ELEMENT medialabel (%smallcptr.char.mix;)*>
-<!--end of medialabel.element-->]]>
-
-<!-- Class: Type of medium named by the element; no default -->
-
-
-<!ENTITY % medialabel.attlist "INCLUDE">
-<![%medialabel.attlist;[
-<!ATTLIST medialabel
-		class 		(cartridge
-				|cdrom
-				|disk
-				|tape)		#IMPLIED
-		%common.attrib;
-		%medialabel.role.attrib;
-		%local.medialabel.attrib;
->
-<!--end of medialabel.attlist-->]]>
-<!--end of medialabel.module-->]]>
-
-<!ENTITY % menuchoice.content.module "INCLUDE">
-<![%menuchoice.content.module;[
-<!ENTITY % menuchoice.module "INCLUDE">
-<![%menuchoice.module;[
-<!ENTITY % local.menuchoice.attrib "">
-<!ENTITY % menuchoice.role.attrib "%role.attrib;">
-
-<!ENTITY % menuchoice.element "INCLUDE">
-<![%menuchoice.element;[
-<!ELEMENT menuchoice (shortcut?, (guibutton|guiicon|guilabel
-		|guimenu|guimenuitem|guisubmenu|interface)+)>
-<!--end of menuchoice.element-->]]>
-
-<!ENTITY % menuchoice.attlist "INCLUDE">
-<![%menuchoice.attlist;[
-<!ATTLIST menuchoice
-		%moreinfo.attrib;
-		%common.attrib;
-		%menuchoice.role.attrib;
-		%local.menuchoice.attrib;
->
-<!--end of menuchoice.attlist-->]]>
-<!--end of menuchoice.module-->]]>
-
-<!ENTITY % shortcut.module "INCLUDE">
-<![%shortcut.module;[
-<!-- See also KeyCombo -->
-<!ENTITY % local.shortcut.attrib "">
-<!ENTITY % shortcut.role.attrib "%role.attrib;">
-
-<!ENTITY % shortcut.element "INCLUDE">
-<![%shortcut.element;[
-<!ELEMENT shortcut ((keycap|keycombo|keysym|mousebutton)+)>
-<!--end of shortcut.element-->]]>
-
-<!ENTITY % shortcut.attlist "INCLUDE">
-<![%shortcut.attlist;[
-<!ATTLIST shortcut
-		%keyaction.attrib;
-		%moreinfo.attrib;
-		%common.attrib;
-		%shortcut.role.attrib;
-		%local.shortcut.attrib;
->
-<!--end of shortcut.attlist-->]]>
-<!--end of shortcut.module-->]]>
-<!--end of menuchoice.content.module-->]]>
-
-<!ENTITY % mousebutton.module "INCLUDE">
-<![%mousebutton.module;[
-<!ENTITY % local.mousebutton.attrib "">
-<!ENTITY % mousebutton.role.attrib "%role.attrib;">
-
-<!ENTITY % mousebutton.element "INCLUDE">
-<![%mousebutton.element;[
-<!ELEMENT mousebutton (%smallcptr.char.mix;)*>
-<!--end of mousebutton.element-->]]>
-
-<!ENTITY % mousebutton.attlist "INCLUDE">
-<![%mousebutton.attlist;[
-<!ATTLIST mousebutton
-		%moreinfo.attrib;
-		%common.attrib;
-		%mousebutton.role.attrib;
-		%local.mousebutton.attrib;
->
-<!--end of mousebutton.attlist-->]]>
-<!--end of mousebutton.module-->]]>
-
-<!ENTITY % msgtext.module "INCLUDE">
-<![%msgtext.module;[
-<!ENTITY % local.msgtext.attrib "">
-<!ENTITY % msgtext.role.attrib "%role.attrib;">
-
-<!ENTITY % msgtext.element "INCLUDE">
-<![%msgtext.element;[
-<!ELEMENT msgtext ((%component.mix;)+)>
-<!--end of msgtext.element-->]]>
-
-<!ENTITY % msgtext.attlist "INCLUDE">
-<![%msgtext.attlist;[
-<!ATTLIST msgtext
-		%common.attrib;
-		%msgtext.role.attrib;
-		%local.msgtext.attrib;
->
-<!--end of msgtext.attlist-->]]>
-<!--end of msgtext.module-->]]>
-
-<!ENTITY % option.module "INCLUDE">
-<![%option.module;[
-<!ENTITY % local.option.attrib "">
-<!ENTITY % option.role.attrib "%role.attrib;">
-
-<!ENTITY % option.element "INCLUDE">
-<![%option.element;[
-<!ELEMENT option (%smallcptr.char.mix;)*>
-<!--end of option.element-->]]>
-
-<!ENTITY % option.attlist "INCLUDE">
-<![%option.attlist;[
-<!ATTLIST option
-		%common.attrib;
-		%option.role.attrib;
-		%local.option.attrib;
->
-<!--end of option.attlist-->]]>
-<!--end of option.module-->]]>
-
-<!ENTITY % optional.module "INCLUDE">
-<![%optional.module;[
-<!ENTITY % local.optional.attrib "">
-<!ENTITY % optional.role.attrib "%role.attrib;">
-
-<!ENTITY % optional.element "INCLUDE">
-<![%optional.element;[
-<!ELEMENT optional (%cptr.char.mix;)*>
-<!--end of optional.element-->]]>
-
-<!ENTITY % optional.attlist "INCLUDE">
-<![%optional.attlist;[
-<!ATTLIST optional
-		%common.attrib;
-		%optional.role.attrib;
-		%local.optional.attrib;
->
-<!--end of optional.attlist-->]]>
-<!--end of optional.module-->]]>
-
-<!ENTITY % parameter.module "INCLUDE">
-<![%parameter.module;[
-<!ENTITY % local.parameter.attrib "">
-<!ENTITY % parameter.role.attrib "%role.attrib;">
-
-<!ENTITY % parameter.element "INCLUDE">
-<![%parameter.element;[
-<!ELEMENT parameter (%smallcptr.char.mix;)*>
-<!--end of parameter.element-->]]>
-
-<!-- Class: Type of the Parameter; no default -->
-
-
-<!ENTITY % parameter.attlist "INCLUDE">
-<![%parameter.attlist;[
-<!ATTLIST parameter
-		class 		(command
-				|function
-				|option)	#IMPLIED
-		%moreinfo.attrib;
-		%common.attrib;
-		%parameter.role.attrib;
-		%local.parameter.attrib;
->
-<!--end of parameter.attlist-->]]>
-<!--end of parameter.module-->]]>
-
-<!ENTITY % prompt.module "INCLUDE">
-<![%prompt.module;[
-<!ENTITY % local.prompt.attrib "">
-<!ENTITY % prompt.role.attrib "%role.attrib;">
-
-<!ENTITY % prompt.element "INCLUDE">
-<![%prompt.element;[
-<!ELEMENT prompt (%smallcptr.char.mix;)*>
-<!--end of prompt.element-->]]>
-
-<!ENTITY % prompt.attlist "INCLUDE">
-<![%prompt.attlist;[
-<!ATTLIST prompt
-		%moreinfo.attrib;
-		%common.attrib;
-		%prompt.role.attrib;
-		%local.prompt.attrib;
->
-<!--end of prompt.attlist-->]]>
-<!--end of prompt.module-->]]>
-
-<!ENTITY % property.module "INCLUDE">
-<![%property.module;[
-<!ENTITY % local.property.attrib "">
-<!ENTITY % property.role.attrib "%role.attrib;">
-
-<!ENTITY % property.element "INCLUDE">
-<![%property.element;[
-<!ELEMENT property (%smallcptr.char.mix;)*>
-<!--end of property.element-->]]>
-
-<!ENTITY % property.attlist "INCLUDE">
-<![%property.attlist;[
-<!ATTLIST property
-		%moreinfo.attrib;
-		%common.attrib;
-		%property.role.attrib;
-		%local.property.attrib;
->
-<!--end of property.attlist-->]]>
-<!--end of property.module-->]]>
-
-<!ENTITY % replaceable.module "INCLUDE">
-<![%replaceable.module;[
-<!ENTITY % local.replaceable.attrib "">
-<!ENTITY % replaceable.role.attrib "%role.attrib;">
-
-<!ENTITY % replaceable.element "INCLUDE">
-<![%replaceable.element;[
-<!ELEMENT replaceable (#PCDATA 
-		| %link.char.class; 
-		| optional
-		| %base.char.class; 
-		| %other.char.class; 
-		| inlinegraphic
-                | inlinemediaobject)*>
-<!--end of replaceable.element-->]]>
-
-<!-- Class: Type of information the element represents; no
-		default -->
-
-
-<!ENTITY % replaceable.attlist "INCLUDE">
-<![%replaceable.attlist;[
-<!ATTLIST replaceable
-		class		(command
-				|function
-				|option
-				|parameter)	#IMPLIED
-		%common.attrib;
-		%replaceable.role.attrib;
-		%local.replaceable.attrib;
->
-<!--end of replaceable.attlist-->]]>
-<!--end of replaceable.module-->]]>
-
-<!ENTITY % returnvalue.module "INCLUDE">
-<![%returnvalue.module;[
-<!ENTITY % local.returnvalue.attrib "">
-<!ENTITY % returnvalue.role.attrib "%role.attrib;">
-
-<!ENTITY % returnvalue.element "INCLUDE">
-<![%returnvalue.element;[
-<!ELEMENT returnvalue (%smallcptr.char.mix;)*>
-<!--end of returnvalue.element-->]]>
-
-<!ENTITY % returnvalue.attlist "INCLUDE">
-<![%returnvalue.attlist;[
-<!ATTLIST returnvalue
-		%common.attrib;
-		%returnvalue.role.attrib;
-		%local.returnvalue.attrib;
->
-<!--end of returnvalue.attlist-->]]>
-<!--end of returnvalue.module-->]]>
-
-<!ENTITY % sgmltag.module "INCLUDE">
-<![%sgmltag.module;[
-<!ENTITY % local.sgmltag.attrib "">
-<!ENTITY % sgmltag.role.attrib "%role.attrib;">
-
-<!ENTITY % sgmltag.element "INCLUDE">
-<![%sgmltag.element;[
-<!ELEMENT sgmltag (%smallcptr.char.mix;)*>
-<!--end of sgmltag.element-->]]>
-
-<!-- Class: Type of SGML construct the element names; no default -->
-
-
-<!ENTITY % sgmltag.attlist "INCLUDE">
-<![%sgmltag.attlist;[
-<!ATTLIST sgmltag
-		class 		(attribute
-				|attvalue
-				|element
-				|endtag
-                                |emptytag
-				|genentity
-				|numcharref
-				|paramentity
-				|pi
-                                |xmlpi
-				|starttag
-				|sgmlcomment)	#IMPLIED
-		%common.attrib;
-		%sgmltag.role.attrib;
-		%local.sgmltag.attrib;
->
-<!--end of sgmltag.attlist-->]]>
-<!--end of sgmltag.module-->]]>
-
-<!ENTITY % structfield.module "INCLUDE">
-<![%structfield.module;[
-<!ENTITY % local.structfield.attrib "">
-<!ENTITY % structfield.role.attrib "%role.attrib;">
-
-<!ENTITY % structfield.element "INCLUDE">
-<![%structfield.element;[
-<!ELEMENT structfield (%smallcptr.char.mix;)*>
-<!--end of structfield.element-->]]>
-
-<!ENTITY % structfield.attlist "INCLUDE">
-<![%structfield.attlist;[
-<!ATTLIST structfield
-		%common.attrib;
-		%structfield.role.attrib;
-		%local.structfield.attrib;
->
-<!--end of structfield.attlist-->]]>
-<!--end of structfield.module-->]]>
-
-<!ENTITY % structname.module "INCLUDE">
-<![%structname.module;[
-<!ENTITY % local.structname.attrib "">
-<!ENTITY % structname.role.attrib "%role.attrib;">
-
-<!ENTITY % structname.element "INCLUDE">
-<![%structname.element;[
-<!ELEMENT structname (%smallcptr.char.mix;)*>
-<!--end of structname.element-->]]>
-
-<!ENTITY % structname.attlist "INCLUDE">
-<![%structname.attlist;[
-<!ATTLIST structname
-		%common.attrib;
-		%structname.role.attrib;
-		%local.structname.attrib;
->
-<!--end of structname.attlist-->]]>
-<!--end of structname.module-->]]>
-
-<!ENTITY % symbol.module "INCLUDE">
-<![%symbol.module;[
-<!ENTITY % local.symbol.attrib "">
-<!ENTITY % symbol.role.attrib "%role.attrib;">
-
-<!ENTITY % symbol.element "INCLUDE">
-<![%symbol.element;[
-<!ELEMENT symbol (%smallcptr.char.mix;)*>
-<!--end of symbol.element-->]]>
-
-<!-- Class: Type of symbol; no default -->
-
-
-<!ENTITY % symbol.attlist "INCLUDE">
-<![%symbol.attlist;[
-<!ATTLIST symbol
-		class		(limit)		#IMPLIED
-		%common.attrib;
-		%symbol.role.attrib;
-		%local.symbol.attrib;
->
-<!--end of symbol.attlist-->]]>
-<!--end of symbol.module-->]]>
-
-<!ENTITY % systemitem.module "INCLUDE">
-<![%systemitem.module;[
-<!ENTITY % local.systemitem.attrib "">
-<!ENTITY % systemitem.role.attrib "%role.attrib;">
-
-<!ENTITY % systemitem.element "INCLUDE">
-<![%systemitem.element;[
-<!ELEMENT systemitem (%smallcptr.char.mix; | acronym)*>
-<!--end of systemitem.element-->]]>
-
-<!-- Class: Type of system item the element names; no default -->
-
-<!ENTITY % systemitem.attlist "INCLUDE">
-<![%systemitem.attlist;[
-<!ATTLIST systemitem
-		class	(constant
-			|groupname
-                        |library
-			|macro
-			|osname
-			|resource
-			|systemname
-                        |username)	#IMPLIED
-		%moreinfo.attrib;
-		%common.attrib;
-		%systemitem.role.attrib;
-		%local.systemitem.attrib;
->
-<!--end of systemitem.attlist-->]]>
-<!--end of systemitem.module-->]]>
-
-
-<!ENTITY % token.module "INCLUDE">
-<![%token.module;[
-<!ENTITY % local.token.attrib "">
-<!ENTITY % token.role.attrib "%role.attrib;">
-
-<!ENTITY % token.element "INCLUDE">
-<![%token.element;[
-<!ELEMENT token (%smallcptr.char.mix;)*>
-<!--end of token.element-->]]>
-
-<!ENTITY % token.attlist "INCLUDE">
-<![%token.attlist;[
-<!ATTLIST token
-		%common.attrib;
-		%token.role.attrib;
-		%local.token.attrib;
->
-<!--end of token.attlist-->]]>
-<!--end of token.module-->]]>
-
-<!ENTITY % type.module "INCLUDE">
-<![%type.module;[
-<!ENTITY % local.type.attrib "">
-<!ENTITY % type.role.attrib "%role.attrib;">
-
-<!ENTITY % type.element "INCLUDE">
-<![%type.element;[
-<!ELEMENT type (%smallcptr.char.mix;)*>
-<!--end of type.element-->]]>
-
-<!ENTITY % type.attlist "INCLUDE">
-<![%type.attlist;[
-<!ATTLIST type
-		%common.attrib;
-		%type.role.attrib;
-		%local.type.attrib;
->
-<!--end of type.attlist-->]]>
-<!--end of type.module-->]]>
-
-<!ENTITY % userinput.module "INCLUDE">
-<![%userinput.module;[
-<!ENTITY % local.userinput.attrib "">
-<!ENTITY % userinput.role.attrib "%role.attrib;">
-
-<!ENTITY % userinput.element "INCLUDE">
-<![%userinput.element;[
-<!ELEMENT userinput (%cptr.char.mix;)*>
-<!--end of userinput.element-->]]>
-
-<!ENTITY % userinput.attlist "INCLUDE">
-<![%userinput.attlist;[
-<!ATTLIST userinput
-		%moreinfo.attrib;
-		%common.attrib;
-		%userinput.role.attrib;
-		%local.userinput.attrib;
->
-<!--end of userinput.attlist-->]]>
-<!--end of userinput.module-->]]>
-
-<!-- General words and phrases ............................................ -->
-
-<!ENTITY % abbrev.module "INCLUDE">
-<![%abbrev.module;[
-<!ENTITY % local.abbrev.attrib "">
-<!ENTITY % abbrev.role.attrib "%role.attrib;">
-
-<!ENTITY % abbrev.element "INCLUDE">
-<![%abbrev.element;[
-<!ELEMENT abbrev (%word.char.mix;)*>
-<!--end of abbrev.element-->]]>
-
-<!ENTITY % abbrev.attlist "INCLUDE">
-<![%abbrev.attlist;[
-<!ATTLIST abbrev
-		%common.attrib;
-		%abbrev.role.attrib;
-		%local.abbrev.attrib;
->
-<!--end of abbrev.attlist-->]]>
-<!--end of abbrev.module-->]]>
-
-<!ENTITY % acronym.module "INCLUDE">
-<![%acronym.module;[
-<!ENTITY % local.acronym.attrib "">
-<!ENTITY % acronym.role.attrib "%role.attrib;">
-
-<!ENTITY % acronym.element "INCLUDE">
-<![%acronym.element;[
-<!ELEMENT acronym (%word.char.mix;)*>
-<!--end of acronym.element-->]]>
-
-<!ENTITY % acronym.attlist "INCLUDE">
-<![%acronym.attlist;[
-<!ATTLIST acronym
-		%common.attrib;
-		%acronym.role.attrib;
-		%local.acronym.attrib;
->
-<!--end of acronym.attlist-->]]>
-<!--end of acronym.module-->]]>
-
-<!ENTITY % citation.module "INCLUDE">
-<![%citation.module;[
-<!ENTITY % local.citation.attrib "">
-<!ENTITY % citation.role.attrib "%role.attrib;">
-
-<!ENTITY % citation.element "INCLUDE">
-<![%citation.element;[
-<!ELEMENT citation (%para.char.mix;)*>
-<!--end of citation.element-->]]>
-
-<!ENTITY % citation.attlist "INCLUDE">
-<![%citation.attlist;[
-<!ATTLIST citation
-		%common.attrib;
-		%citation.role.attrib;
-		%local.citation.attrib;
->
-<!--end of citation.attlist-->]]>
-<!--end of citation.module-->]]>
-
-<!ENTITY % citerefentry.module "INCLUDE">
-<![%citerefentry.module;[
-<!ENTITY % local.citerefentry.attrib "">
-<!ENTITY % citerefentry.role.attrib "%role.attrib;">
-
-<!ENTITY % citerefentry.element "INCLUDE">
-<![%citerefentry.element;[
-<!ELEMENT citerefentry (refentrytitle, manvolnum?)>
-<!--end of citerefentry.element-->]]>
-
-<!ENTITY % citerefentry.attlist "INCLUDE">
-<![%citerefentry.attlist;[
-<!ATTLIST citerefentry
-		%common.attrib;
-		%citerefentry.role.attrib;
-		%local.citerefentry.attrib;
->
-<!--end of citerefentry.attlist-->]]>
-<!--end of citerefentry.module-->]]>
-
-<!ENTITY % refentrytitle.module "INCLUDE">
-<![%refentrytitle.module;[
-<!ENTITY % local.refentrytitle.attrib "">
-<!ENTITY % refentrytitle.role.attrib "%role.attrib;">
-
-<!ENTITY % refentrytitle.element "INCLUDE">
-<![%refentrytitle.element;[
-<!ELEMENT refentrytitle (%para.char.mix;)*>
-<!--end of refentrytitle.element-->]]>
-
-<!ENTITY % refentrytitle.attlist "INCLUDE">
-<![%refentrytitle.attlist;[
-<!ATTLIST refentrytitle
-		%common.attrib;
-		%refentrytitle.role.attrib;
-		%local.refentrytitle.attrib;
->
-<!--end of refentrytitle.attlist-->]]>
-<!--end of refentrytitle.module-->]]>
-
-<!ENTITY % manvolnum.module "INCLUDE">
-<![%manvolnum.module;[
-<!ENTITY % local.manvolnum.attrib "">
-<!ENTITY % namvolnum.role.attrib "%role.attrib;">
-
-<!ENTITY % manvolnum.element "INCLUDE">
-<![%manvolnum.element;[
-<!ELEMENT manvolnum (%word.char.mix;)*>
-<!--end of manvolnum.element-->]]>
-
-<!ENTITY % manvolnum.attlist "INCLUDE">
-<![%manvolnum.attlist;[
-<!ATTLIST manvolnum
-		%common.attrib;
-		%namvolnum.role.attrib;
-		%local.manvolnum.attrib;
->
-<!--end of manvolnum.attlist-->]]>
-<!--end of manvolnum.module-->]]>
-
-<!ENTITY % citetitle.module "INCLUDE">
-<![%citetitle.module;[
-<!ENTITY % local.citetitle.attrib "">
-<!ENTITY % citetitle.role.attrib "%role.attrib;">
-
-<!ENTITY % citetitle.element "INCLUDE">
-<![%citetitle.element;[
-<!ELEMENT citetitle (%para.char.mix;)*>
-<!--end of citetitle.element-->]]>
-
-<!-- Pubwork: Genre of published work cited; no default -->
-
-
-<!ENTITY % citetitle.attlist "INCLUDE">
-<![%citetitle.attlist;[
-<!ATTLIST citetitle
-		pubwork		(article
-				|book
-				|chapter
-				|part
-				|refentry
-				|section
-				|journal
-				|series
-				|set
-				|manuscript)	#IMPLIED
-		%common.attrib;
-		%citetitle.role.attrib;
-		%local.citetitle.attrib;
->
-<!--end of citetitle.attlist-->]]>
-<!--end of citetitle.module-->]]>
-
-<!ENTITY % emphasis.module "INCLUDE">
-<![%emphasis.module;[
-<!ENTITY % local.emphasis.attrib "">
-<!ENTITY % emphasis.role.attrib "%role.attrib;">
-
-<!ENTITY % emphasis.element "INCLUDE">
-<![%emphasis.element;[
-<!ELEMENT emphasis (%para.char.mix;)*>
-<!--end of emphasis.element-->]]>
-
-<!ENTITY % emphasis.attlist "INCLUDE">
-<![%emphasis.attlist;[
-<!ATTLIST emphasis
-		%common.attrib;
-		%emphasis.role.attrib;
-		%local.emphasis.attrib;
->
-<!--end of emphasis.attlist-->]]>
-<!--end of emphasis.module-->]]>
-
-<!ENTITY % firstterm.module "INCLUDE">
-<![%firstterm.module;[
-<!ENTITY % local.firstterm.attrib "">
-<!ENTITY % firstterm.role.attrib "%role.attrib;">
-
-<!ENTITY % firstterm.element "INCLUDE">
-<![%firstterm.element;[
-<!ELEMENT firstterm (%word.char.mix;)*>
-<!--end of firstterm.element-->]]>
-
-<!-- to GlossEntry or other explanation -->
-
-
-<!ENTITY % firstterm.attlist "INCLUDE">
-<![%firstterm.attlist;[
-<!ATTLIST firstterm
-		%linkend.attrib;		%common.attrib;
-		%firstterm.role.attrib;
-		%local.firstterm.attrib;
->
-<!--end of firstterm.attlist-->]]>
-<!--end of firstterm.module-->]]>
-
-<!ENTITY % foreignphrase.module "INCLUDE">
-<![%foreignphrase.module;[
-<!ENTITY % local.foreignphrase.attrib "">
-<!ENTITY % foreignphrase.role.attrib "%role.attrib;">
-
-<!ENTITY % foreignphrase.element "INCLUDE">
-<![%foreignphrase.element;[
-<!ELEMENT foreignphrase (%para.char.mix;)*>
-<!--end of foreignphrase.element-->]]>
-
-<!ENTITY % foreignphrase.attlist "INCLUDE">
-<![%foreignphrase.attlist;[
-<!ATTLIST foreignphrase
-		%common.attrib;
-		%foreignphrase.role.attrib;
-		%local.foreignphrase.attrib;
->
-<!--end of foreignphrase.attlist-->]]>
-<!--end of foreignphrase.module-->]]>
-
-<!ENTITY % glossterm.module "INCLUDE">
-<![%glossterm.module;[
-<!ENTITY % local.glossterm.attrib "">
-<!ENTITY % glossterm.role.attrib "%role.attrib;">
-
-<!ENTITY % glossterm.element "INCLUDE">
-<![%glossterm.element;[
-<!ELEMENT glossterm (%para.char.mix;)*>
-<!--end of glossterm.element-->]]>
-
-<!-- to GlossEntry if Glossterm used in text -->
-<!-- BaseForm: Provides the form of GlossTerm to be used
-		for indexing -->
-
-
-<!ENTITY % glossterm.attlist "INCLUDE">
-<![%glossterm.attlist;[
-<!ATTLIST glossterm
-		%linkend.attrib;		baseform	CDATA		#IMPLIED
-		%common.attrib;
-		%glossterm.role.attrib;
-		%local.glossterm.attrib;
->
-<!--end of glossterm.attlist-->]]>
-<!--end of glossterm.module-->]]>
-
-<!ENTITY % phrase.module "INCLUDE">
-<![%phrase.module;[
-<!ENTITY % local.phrase.attrib "">
-<!ENTITY % phrase.role.attrib "%role.attrib;">
-
-<!ENTITY % phrase.element "INCLUDE">
-<![%phrase.element;[
-<!ELEMENT phrase (%para.char.mix;)*>
-<!--end of phrase.element-->]]>
-
-<!ENTITY % phrase.attlist "INCLUDE">
-<![%phrase.attlist;[
-<!ATTLIST phrase
-		%common.attrib;
-		%phrase.role.attrib;
-		%local.phrase.attrib;
->
-<!--end of phrase.attlist-->]]>
-<!--end of phrase.module-->]]>
-
-<!ENTITY % quote.module "INCLUDE">
-<![%quote.module;[
-<!ENTITY % local.quote.attrib "">
-<!ENTITY % quote.role.attrib "%role.attrib;">
-
-<!ENTITY % quote.element "INCLUDE">
-<![%quote.element;[
-<!ELEMENT quote (%para.char.mix;)*>
-<!--end of quote.element-->]]>
-
-<!ENTITY % quote.attlist "INCLUDE">
-<![%quote.attlist;[
-<!ATTLIST quote
-		%common.attrib;
-		%quote.role.attrib;
-		%local.quote.attrib;
->
-<!--end of quote.attlist-->]]>
-<!--end of quote.module-->]]>
-
-<!ENTITY % ssscript.module "INCLUDE">
-<![%ssscript.module;[
-<!ENTITY % local.ssscript.attrib "">
-<!ENTITY % ssscript.role.attrib "%role.attrib;">
-
-<!ENTITY % subscript.element "INCLUDE">
-<![%subscript.element;[
-<!ELEMENT subscript (#PCDATA 
-		| %link.char.class;
-		| emphasis
-		| replaceable 
-		| symbol 
-		| inlinegraphic
-                | inlinemediaobject
-		| %base.char.class; 
-		| %other.char.class;)*>
-<!--end of subscript.element-->]]>
-
-<!ENTITY % subscript.attlist "INCLUDE">
-<![%subscript.attlist;[
-<!ATTLIST subscript
-		%common.attrib;
-		%ssscript.role.attrib;
-		%local.ssscript.attrib;
->
-<!--end of subscript.attlist-->]]>
-
-<!ENTITY % superscript.element "INCLUDE">
-<![%superscript.element;[
-<!ELEMENT superscript (#PCDATA 
-		| %link.char.class;
-		| emphasis
-		| replaceable 
-		| symbol 
-		| inlinegraphic
-                | inlinemediaobject 
-		| %base.char.class; 
-		| %other.char.class;)*>
-<!--end of superscript.element-->]]>
-
-<!ENTITY % superscript.attlist "INCLUDE">
-<![%superscript.attlist;[
-<!ATTLIST superscript
-		%common.attrib;
-		%ssscript.role.attrib;
-		%local.ssscript.attrib;
->
-<!--end of superscript.attlist-->]]>
-<!--end of ssscript.module-->]]>
-
-<!ENTITY % trademark.module "INCLUDE">
-<![%trademark.module;[
-<!ENTITY % local.trademark.attrib "">
-<!ENTITY % trademark.role.attrib "%role.attrib;">
-
-<!ENTITY % trademark.element "INCLUDE">
-<![%trademark.element;[
-<!ELEMENT trademark (#PCDATA 
-		| %link.char.class; 
-		| %tech.char.class;
-		| %base.char.class; 
-		| %other.char.class; 
-		| inlinegraphic
-                | inlinemediaobject
-		| emphasis)*>
-<!--end of trademark.element-->]]>
-
-<!-- Class: More precisely identifies the item the element names -->
-
-
-<!ENTITY % trademark.attlist "INCLUDE">
-<![%trademark.attlist;[
-<!ATTLIST trademark
-		class		(service
-				|trade
-				|registered
-				|copyright)	'trade'
-		%common.attrib;
-		%trademark.role.attrib;
-		%local.trademark.attrib;
->
-<!--end of trademark.attlist-->]]>
-<!--end of trademark.module-->]]>
-
-<!ENTITY % wordasword.module "INCLUDE">
-<![%wordasword.module;[
-<!ENTITY % local.wordasword.attrib "">
-<!ENTITY % wordasword.role.attrib "%role.attrib;">
-
-<!ENTITY % wordasword.element "INCLUDE">
-<![%wordasword.element;[
-<!ELEMENT wordasword (%word.char.mix;)*>
-<!--end of wordasword.element-->]]>
-
-<!ENTITY % wordasword.attlist "INCLUDE">
-<![%wordasword.attlist;[
-<!ATTLIST wordasword
-		%common.attrib;
-		%wordasword.role.attrib;
-		%local.wordasword.attrib;
->
-<!--end of wordasword.attlist-->]]>
-<!--end of wordasword.module-->]]>
-
-<!-- Links and cross-references ........................................... -->
-
-<!ENTITY % link.module "INCLUDE">
-<![%link.module;[
-<!ENTITY % local.link.attrib "">
-<!ENTITY % link.role.attrib "%role.attrib;">
-
-<!ENTITY % link.element "INCLUDE">
-<![%link.element;[
-<!ELEMENT link (%para.char.mix;)*>
-<!--end of link.element-->]]>
-
-<!-- Endterm: ID of element containing text that is to be
-		fetched from elsewhere in the document to appear as
-		the content of this element -->
-<!-- to linked-to object -->
-<!-- Type: Freely assignable parameter -->
-
-
-<!ENTITY % link.attlist "INCLUDE">
-<![%link.attlist;[
-<!ATTLIST link
-		endterm		IDREF		#IMPLIED
-		%linkendreq.attrib;		type		CDATA		#IMPLIED
-		%common.attrib;
-		%link.role.attrib;
-		%local.link.attrib;
->
-<!--end of link.attlist-->]]>
-<!--end of link.module-->]]>
-
-<!ENTITY % olink.module "INCLUDE">
-<![%olink.module;[
-<!ENTITY % local.olink.attrib "">
-<!ENTITY % olink.role.attrib "%role.attrib;">
-
-<!ENTITY % olink.element "INCLUDE">
-<![%olink.element;[
-<!ELEMENT olink (%para.char.mix;)*>
-<!--end of olink.element-->]]>
-
-<!-- TargetDocEnt: Name of an entity to be the target of the link -->
-<!-- LinkMode: ID of a ModeSpec containing instructions for
-		operating on the entity named by TargetDocEnt -->
-<!-- LocalInfo: Information that may be passed to ModeSpec -->
-<!-- Type: Freely assignable parameter -->
-
-
-<!ENTITY % olink.attlist "INCLUDE">
-<![%olink.attlist;[
-<!ATTLIST olink
-		targetdocent	ENTITY 		#IMPLIED
-		linkmode	IDREF		#IMPLIED
-		localinfo 	CDATA		#IMPLIED
-		type		CDATA		#IMPLIED
-		%common.attrib;
-		%olink.role.attrib;
-		%local.olink.attrib;
->
-<!--end of olink.attlist-->]]>
-<!--end of olink.module-->]]>
-
-<!ENTITY % ulink.module "INCLUDE">
-<![%ulink.module;[
-<!ENTITY % local.ulink.attrib "">
-<!ENTITY % ulink.role.attrib "%role.attrib;">
-
-<!ENTITY % ulink.element "INCLUDE">
-<![%ulink.element;[
-<!ELEMENT ulink (%para.char.mix;)*>
-<!--end of ulink.element-->]]>
-
-<!-- URL: uniform resource locator; the target of the ULink -->
-<!-- Type: Freely assignable parameter -->
-
-
-<!ENTITY % ulink.attlist "INCLUDE">
-<![%ulink.attlist;[
-<!ATTLIST ulink
-		url		CDATA		#REQUIRED
-		type		CDATA		#IMPLIED
-		%common.attrib;
-		%ulink.role.attrib;
-		%local.ulink.attrib;
->
-<!--end of ulink.attlist-->]]>
-<!--end of ulink.module-->]]>
-
-<!ENTITY % footnoteref.module "INCLUDE">
-<![%footnoteref.module;[
-<!ENTITY % local.footnoteref.attrib "">
-<!ENTITY % footnoteref.role.attrib "%role.attrib;">
-
-<!ENTITY % footnoteref.element "INCLUDE">
-<![%footnoteref.element;[
-<!ELEMENT footnoteref EMPTY>
-<!--end of footnoteref.element-->]]>
-
-<!-- to footnote content supplied elsewhere -->
-
-
-<!ENTITY % footnoteref.attlist "INCLUDE">
-<![%footnoteref.attlist;[
-<!ATTLIST footnoteref
-		%linkendreq.attrib;		%label.attrib;
-		%common.attrib;
-		%footnoteref.role.attrib;
-		%local.footnoteref.attrib;
->
-<!--end of footnoteref.attlist-->]]>
-<!--end of footnoteref.module-->]]>
-
-<!ENTITY % xref.module "INCLUDE">
-<![%xref.module;[
-<!ENTITY % local.xref.attrib "">
-<!ENTITY % xref.role.attrib "%role.attrib;">
-
-<!ENTITY % xref.element "INCLUDE">
-<![%xref.element;[
-<!ELEMENT xref EMPTY>
-<!--end of xref.element-->]]>
-
-<!-- Endterm: ID of element containing text that is to be
-		fetched from elsewhere in the document to appear as
-		the content of this element -->
-<!-- to linked-to object -->
-
-
-<!ENTITY % xref.attlist "INCLUDE">
-<![%xref.attlist;[
-<!ATTLIST xref
-		endterm		IDREF		#IMPLIED
-		%linkendreq.attrib;		%common.attrib;
-		%xref.role.attrib;
-		%local.xref.attrib;
->
-<!--end of xref.attlist-->]]>
-<!--end of xref.module-->]]>
-
-<!-- Ubiquitous elements .................................................. -->
-
-<!ENTITY % anchor.module "INCLUDE">
-<![%anchor.module;[
-<!ENTITY % local.anchor.attrib "">
-<!ENTITY % anchor.role.attrib "%role.attrib;">
-
-<!ENTITY % anchor.element "INCLUDE">
-<![%anchor.element;[
-<!ELEMENT anchor EMPTY>
-<!--end of anchor.element-->]]>
-
-<!-- required -->
-<!-- replaces Lang -->
-
-
-<!ENTITY % anchor.attlist "INCLUDE">
-<![%anchor.attlist;[
-<!ATTLIST anchor
-		%idreq.attrib;		%pagenum.attrib;		%remap.attrib;
-		%xreflabel.attrib;
-		%revisionflag.attrib;
-		%effectivity.attrib;
-		%anchor.role.attrib;
-		%local.anchor.attrib;
->
-<!--end of anchor.attlist-->]]>
-<!--end of anchor.module-->]]>
-
-<!ENTITY % beginpage.module "INCLUDE">
-<![%beginpage.module;[
-<!ENTITY % local.beginpage.attrib "">
-<!ENTITY % beginpage.role.attrib "%role.attrib;">
-
-<!ENTITY % beginpage.element "INCLUDE">
-<![%beginpage.element;[
-<!ELEMENT beginpage EMPTY>
-<!--end of beginpage.element-->]]>
-
-<!-- PageNum: Number of page that begins at this point -->
-
-
-<!ENTITY % beginpage.attlist "INCLUDE">
-<![%beginpage.attlist;[
-<!ATTLIST beginpage
-		%pagenum.attrib;
-		%common.attrib;
-		%beginpage.role.attrib;
-		%local.beginpage.attrib;
->
-<!--end of beginpage.attlist-->]]>
-<!--end of beginpage.module-->]]>
-
-<!-- IndexTerms appear in the text flow for generating or linking an
-     index. -->
-
-<!ENTITY % indexterm.content.module "INCLUDE">
-<![%indexterm.content.module;[
-<!ENTITY % indexterm.module "INCLUDE">
-<![%indexterm.module;[
-<!ENTITY % local.indexterm.attrib "">
-<!ENTITY % indexterm.role.attrib "%role.attrib;">
-
-<!ENTITY % indexterm.element "INCLUDE">
-<![%indexterm.element;[
-<!ELEMENT indexterm (primary?, ((secondary, ((tertiary, (see|seealso+)?)
-		| see | seealso+)?) | see | seealso+)?)>
-<!--end of indexterm.element-->]]>
-
-<!-- Scope: Indicates which generated indices the IndexTerm
-		should appear in: Global (whole document set), Local (this
-		document only), or All (both) -->
-<!-- Significance: Whether this IndexTerm is the most pertinent
-		of its series (Preferred) or not (Normal, the default) -->
-<!-- Class: Indicates type of IndexTerm; default is Singular, 
-		or EndOfRange if StartRef is supplied; StartOfRange value 
-		must be supplied explicitly on starts of ranges -->
-<!-- StartRef: ID of the IndexTerm that starts the indexing 
-		range ended by this IndexTerm -->
-<!-- Zone: IDs of the elements to which the IndexTerm applies,
-		and indicates that the IndexTerm applies to those entire
-		elements rather than the point at which the IndexTerm
-		occurs -->
-
-
-<!ENTITY % indexterm.attlist "INCLUDE">
-<![%indexterm.attlist;[
-<!ATTLIST indexterm
-		%pagenum.attrib;
-		scope		(all
-				|global
-				|local)		#IMPLIED
-		significance	(preferred
-				|normal)	"normal"
-		class		(singular
-				|startofrange
-				|endofrange)	#IMPLIED
-		startref		IDREF		#IMPLIED
-		zone			IDREFS		#IMPLIED
-		%common.attrib;
-		%indexterm.role.attrib;
-		%local.indexterm.attrib;
->
-<!--end of indexterm.attlist-->]]>
-<!--end of indexterm.module-->]]>
-
-<!ENTITY % primsecter.module "INCLUDE">
-<![%primsecter.module;[
-<!ENTITY % local.primsecter.attrib "">
-<!ENTITY % primsecter.role.attrib "%role.attrib;">
-
-
-<!ENTITY % primary.element "INCLUDE">
-<![%primary.element;[
-<!ELEMENT primary   (%ndxterm.char.mix;)*>
-<!--end of primary.element-->]]>
-<!-- SortAs: Alternate sort string for index sorting, e.g.,
-		"fourteen" for an element containing "14" -->
-
-<!ENTITY % primary.attlist "INCLUDE">
-<![%primary.attlist;[
-<!ATTLIST primary
-		sortas		CDATA		#IMPLIED
-		%common.attrib;
-		%primsecter.role.attrib;
-		%local.primsecter.attrib;
->
-<!--end of primary.attlist-->]]>
-
-
-<!ENTITY % secondary.element "INCLUDE">
-<![%secondary.element;[
-<!ELEMENT secondary (%ndxterm.char.mix;)*>
-<!--end of secondary.element-->]]>
-<!-- SortAs: Alternate sort string for index sorting, e.g.,
-		"fourteen" for an element containing "14" -->
-
-<!ENTITY % secondary.attlist "INCLUDE">
-<![%secondary.attlist;[
-<!ATTLIST secondary
-		sortas		CDATA		#IMPLIED
-		%common.attrib;
-		%primsecter.role.attrib;
-		%local.primsecter.attrib;
->
-<!--end of secondary.attlist-->]]>
-
-
-<!ENTITY % tertiary.element "INCLUDE">
-<![%tertiary.element;[
-<!ELEMENT tertiary  (%ndxterm.char.mix;)*>
-<!--end of tertiary.element-->]]>
-<!-- SortAs: Alternate sort string for index sorting, e.g.,
-		"fourteen" for an element containing "14" -->
-
-<!ENTITY % tertiary.attlist "INCLUDE">
-<![%tertiary.attlist;[
-<!ATTLIST tertiary
-		sortas		CDATA		#IMPLIED
-		%common.attrib;
-		%primsecter.role.attrib;
-		%local.primsecter.attrib;
->
-<!--end of tertiary.attlist-->]]>
-
-<!--end of primsecter.module-->]]>
-
-<!ENTITY % seeseealso.module "INCLUDE">
-<![%seeseealso.module;[
-<!ENTITY % local.seeseealso.attrib "">
-<!ENTITY % seeseealso.role.attrib "%role.attrib;">
-
-<!ENTITY % see.element "INCLUDE">
-<![%see.element;[
-<!ELEMENT see (%ndxterm.char.mix;)*>
-<!--end of see.element-->]]>
-
-<!ENTITY % see.attlist "INCLUDE">
-<![%see.attlist;[
-<!ATTLIST see
-		%common.attrib;
-		%seeseealso.role.attrib;
-		%local.seeseealso.attrib;
->
-<!--end of see.attlist-->]]>
-
-<!ENTITY % seealso.element "INCLUDE">
-<![%seealso.element;[
-<!ELEMENT seealso (%ndxterm.char.mix;)*>
-<!--end of seealso.element-->]]>
-
-<!ENTITY % seealso.attlist "INCLUDE">
-<![%seealso.attlist;[
-<!ATTLIST seealso
-		%common.attrib;
-		%seeseealso.role.attrib;
-		%local.seeseealso.attrib;
->
-<!--end of seealso.attlist-->]]>
-<!--end of seeseealso.module-->]]>
-<!--end of indexterm.content.module-->]]>
-
-<!-- End of DocBook XML information pool module V4.1.2 ...................... -->
-<!-- ...................................................................... -->
diff --git a/3.0.4/doc/src/common/docbook-setup.xml b/3.0.4/doc/src/common/docbook-setup.xml
deleted file mode 100644
index 6c2ea8c..0000000
--- a/3.0.4/doc/src/common/docbook-setup.xml
+++ /dev/null
@@ -1,263 +0,0 @@
-<!-- $Id$ -->
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!--
-
-This XML snippet is included into an ant build file.
-
-It includes a rule, docbook-setup, that ensures that the necessary
-DocBook distributions are unpacked and ready to process the XML.
-
-Very important to keep this synchronized with .cvsignore to prevent
-problems using Team support inside the Eclipse IDE.
-
--->
-<property name="root.dir" value="../../.."/>
-
-<property file="${root.dir}/config/build.properties"/>
-
-<property name="html.install.dir" value="${root.dir}/web/doc/${root.filename}"/>
-
-<!-- The base name for the DTD distribution (the directory and tar file
-     will match). -->
-     
-<property name="docbook.dtd.base" value="docbkx412"/>
-
-<!-- Base name for the XSL distribution. -->
-<!-- this value is duplicated in ./Readme.html and /ext-dist/README.html -->
-<property name="docbook.xsl.base" value="docbook-xsl-1.64.1"/>
-
-<property name="docbook.dtd.dir" value="../common/${docbook.dtd.base}"/>
-<property name="docbook.xsl.dir" value="../common/${docbook.xsl.base}"/>
-
-<property name="docbook.chunked.xsl"
-	value="../common/Tapestry-${docbook.xsl.base}-Chunked.xsl"/>
-	
-<property name="docbook.fop.xsl"
-	value="../common/Tapestry-${docbook.xsl.base}-Fop.xsl"/>
-
-
-<xmlcatalog id="docbook.catalog">
-  <dtd publicId="-//OASIS//DTD DocBook XML V4.1.2//EN" location="${docbook.dtd.dir}/docbookx.dtd"/>
-  <dtd publicId="-//OASIS//DTD DocBook CALS Table Model V4.1.2//EN" location="${docbook.dtd.dir}/calstblx.dtd"/>
-  <dtd publicId="-//OASIS//DTD XML Exchange Table Model 19990315//EN" location="${docbook.dtd.dir}/soextblx.dtd"/>
-  <dtd publicId="-//OASIS//ELEMENTS DocBook Information Pool V4.1.2//EN" location="${docbook.dtd.dir}/dbpoolx.mod"/>
-  <dtd publicId="-//OASIS//ELEMENTS DocBook Document Hierarchy V4.1.2//EN" location="${docbook.dtd.dir}/dbhierx.mod"/>
-  <dtd publicId="-//OASIS//ENTITIES DocBook Additional General Entities V4.1.2//EN" location="${docbook.dtd.dir}/dbgenent.mod"/>
-  <dtd publicId="-//OASIS//ENTITIES DocBook Notations V4.1.2//EN" location="${docbook.dtd.dir}/dbnotnx.mod"/>
-  <dtd publicId="-//OASIS//ENTITIES DocBook Character Entities V4.1.2//EN" location="${docbook.dtd.dir}/dbcentx.mod"/>
-  <dtd publicId="ISO 8879:1986//ENTITIES Diacritical Marks//EN//XML" location="${docbook.dtd.dir}/ent/iso-dia.ent"/>
-  <dtd publicId="ISO 8879:1986//ENTITIES Numeric and Special Graphic//EN//XML" location="${docbook.dtd.dir}/ent/iso-num.ent"/>
-  <dtd publicId="ISO 8879:1986//ENTITIES Publishing//EN//XML" location="${docbook.dtd.dir}/ent/iso-pub.ent"/>
-  <dtd publicId="ISO 8879:1986//ENTITIES General Technical//EN//XML" location="${docbook.dtd.dir}/ent/iso-tech.ent"/>
-  <dtd publicId="ISO 8879:1986//ENTITIES Added Latin 1//EN//XML" location="${docbook.dtd.dir}/ent/iso-lat1.ent"/>
-  <dtd publicId="ISO 8879:1986//ENTITIES Added Latin 2//EN//XML" location="${docbook.dtd.dir}/ent/iso-lat2.ent"/>
-  <dtd publicId="ISO 8879:1986//ENTITIES Greek Letters//EN//XML" location="${docbook.dtd.dir}/ent/iso-grk1.ent"/>
-  <dtd publicId="ISO 8879:1986//ENTITIES Monotoniko Greek//EN//XML" location="${docbook.dtd.dir}/ent/iso-grk2.ent"/>
-  <dtd publicId="ISO 8879:1986//ENTITIES Greek Symbols//EN//XML" location="${docbook.dtd.dir}/ent/iso-grk3.ent"/>
-  <dtd publicId="ISO 8879:1986//ENTITIES Alternative Greek Symbols//EN//XML" location="${docbook.dtd.dir}/ent/iso-grk4.ent"/>
-  <dtd publicId="ISO 8879:1986//ENTITIES Added Math Symbols: Arrow Relations//EN//XML" location="${docbook.dtd.dir}/ent/iso-amsa.ent"/>
-  <dtd publicId="ISO 8879:1986//ENTITIES Added Math Symbols: Binary Operators//EN//XML" location="${docbook.dtd.dir}/ent/iso-amsb.ent"/>
-  <dtd publicId="ISO 8879:1986//ENTITIES Added Math Symbols: Delimiters//EN//XML" location="${docbook.dtd.dir}/ent/iso-amsc.ent"/>
-  <dtd publicId="ISO 8879:1986//ENTITIES Added Math Symbols: Negated Relations//EN//XML" location="${docbook.dtd.dir}/ent/iso-amsn.ent"/>
-  <dtd publicId="ISO 8879:1986//ENTITIES Added Math Symbols: Ordinary//EN//XML" location="${docbook.dtd.dir}/ent/iso-amso.ent"/>
-  <dtd publicId="ISO 8879:1986//ENTITIES Added Math Symbols: Relations//EN//XML" location="${docbook.dtd.dir}/ent/iso-amsr.ent"/>
-  <dtd publicId="ISO 8879:1986//ENTITIES Box and Line Drawing//EN//XML" location="${docbook.dtd.dir}/ent/iso-box.ent"/>
-  <dtd publicId="ISO 8879:1986//ENTITIES Russian Cyrillic//EN//XML" location="${docbook.dtd.dir}/ent/iso-cyr1.ent"/>
-  <dtd publicId="ISO 8879:1986//ENTITIES Non-Russian Cyrillic//EN//XML" location="${docbook.dtd.dir}/ent/iso-cyr2.ent"/>
-</xmlcatalog>
-    
-
-<target name="docbook-setup"
-	description="Make sure the latest distributions of DocBook DTDs and stylesheets are ready.">
-	<available property="docbook.dtd.available" file="${docbook.dtd.dir}" type="dir"/>
-	<available property="docbook.xsl.available" file="${docbook.xsl.dir}" type="dir"/>
-	<antcall target="docbook-setup-inner"/>
-
-	<copy 
-		file="../common/Tapestry.xsl.template" 
-		tofile="${docbook.chunked.xsl}">
-		<filterset>
-			<filter token="docbook.xsl.base" value="${docbook.xsl.base}"/>
-			<filter token="format" value="chunk"/>
-		</filterset>
-	</copy>
-	
-	<copy
-		file="../common/Tapestry.fop-xsl.template"
-		tofile="${docbook.fop.xsl}">
-		<filterset>
-			<filter token="docbook.xsl.base" value="${docbook.xsl.base}"/>
-		</filterset>
-	</copy>
-	
-</target>
-
-<target name="docbook-setup-inner" depends="docbook-unpack-dtd,docbook-unpack-xsl">
-</target>
-
-<target name="docbook-unpack-dtd" unless="docbook.dtd.available">
-	<echo>Unpacking DocBook DTD distribution ...</echo>
-	<unzip src="${ext.dist.dir}/${docbook.dtd.base}.zip" dest="../common"/>
-</target>
-  	
-<target name="docbook-unpack-xsl" unless="docbook.xsl.available">
-	<echo>Unpacking DocBook XSL distribution ...</echo>
-	<unzip src="${ext.dist.dir}/${docbook.xsl.base}.zip" dest="../common"/>
-	
-</target>
-
-<property name="html.output.dir" value="html"/>
-<property name="images.src.dir" value="images"/>
-<property name="images.dest.dir" value="${html.output.dir}/images"/>
-<property name="common-images.dest.dir" value="${html.output.dir}/common-images"/>
-
-<target name="setup">
- <mkdir dir="${html.output.dir}"/>
- <mkdir dir="${common-images.dest.dir}"/>
-</target>
-
-<target name="clean">
-  <delete dir="${html.output.dir}"/>
-</target>
-  
-<target name="copy-images" depends="setup">
-    <copy todir="${images.dest.dir}" >
-      <fileset dir="${images.src.dir}"/>
-    </copy>
-    <copy todir="${html.output.dir}/standard-images">
-      <fileset dir="${docbook.xsl.dir}/images">
-        <include name="callouts/*.png"/>
-      </fileset>
-    </copy>
-    <copy todir="${common-images.dest.dir}">
-    	<fileset dir="../common/images">
-    		<include name="*.png"/>
-    	</fileset>
-    </copy>
-</target>
-
-
-<!-- Only attempt to generate PDF if the developer has set fop.dir
-     in their build.properties. -->
-
-<target name="pdf" depends="docbook-setup,copy-images" if="fop.dir">
-
-   <uptodate property="uptodate.fop"
-     targetfile="${html.output.dir}/${root.filename}.fop">
-     <srcfiles dir=".">
-       <include name="*.xml"/>
-     </srcfiles>
-    </uptodate>
-    
-    <antcall target="generate-fo-from-xml"/>
-    
-    <uptodate property="pdf.uptodate"
-    	srcfile="${html.output.dir}/${root.filename}.fop"
-    	targetfile="${html.output.dir}/${root.filename}.pdf"/>
-    	
-    <antcall target="convert-fo-to-pdf"/>
-    
-</target>
-
-<target name="generate-fo-from-xml" unless="uptodate.fop">
-	<echo>
-	
-Generating Flow Objects from ${root.filename}.xml ...
-
-</echo>
-        
-    <style destdir="${html.output.dir}"
-    	style="${docbook.fop.xsl}"
-    	processor="trax" 
-    	force="true"
-    	in="${root.filename}.xml"
-    	out="${html.output.dir}/${root.filename}.fop">
-    	<xmlcatalog refid="docbook.catalog"/>
-    </style>
-</target>
-
-    
-<target name="convert-fo-to-pdf" unless="pdf.uptodate">    
-<echo>
-
-Converting Flow Objects to PDF ...
-
-</echo>
-
-	<java classname="org.apache.fop.apps.Fop"
-		fork="true"
-		dir="${html.output.dir}">
-		<classpath>
-			<fileset dir="${fop.dir}">
-				<include name="build/fop.jar"/>
-				<include name="lib/*.jar"/>
-				<include name="lib/*.zip"/>
-			</fileset>
-		</classpath>
-		<arg line="-fo ${root.filename}.fop"/>
-		<arg line="-pdf ${root.filename}.pdf"/>
-	</java>      
-
-</target>
-
-<!-- Invoked using antcall, setting the property root.filename -->
-
-<target name="html" depends="docbook-setup,copy-images">
-    <copy todir="${html.output.dir}" file="../common/Tapestry.css"/>
-   
-   <uptodate property="uptodate.html"
-     targetfile="${html.output.dir}/${root.filename}.html">
-     <srcfiles dir=".">
-       <include name="*.xml"/>
-     </srcfiles>
-    </uptodate>
-    
-    <antcall target="generate-html-chunked"/>
-    
-</target>
-
-<target name="generate-html-chunked" unless="uptodate.html">
-    <echo>
-    
-Generating HTML from ${root.filename}.xml ...
-
-</echo>
-        
-    <style destdir="${html.output.dir}"
-    	style="${docbook.chunked.xsl}"
-    	processor="trax"
-    	force="true"
-    	includes="${root.filename}.xml">
-    	<param name="base.dir" expression="${basedir}/${html.output.dir}/"/>
-    	<param name="root.filename" expression="${root.filename}"/>
-		<param name="use.id.as.filename" expression="1"/>
-    	<xmlcatalog refid="docbook.catalog"/>		
-    </style>
-  
-</target>
-
-
-<target name="install" depends="html,pdf" 
-	description="Build and install documentation.">
-	<mkdir dir="${html.install.dir}"/>
-  	<copy todir="${html.install.dir}">
-  	  <fileset dir="${html.output.dir}">
-  	  	<exclude name="*.fop"/>
-  	  </fileset>
-  	</copy>
-</target>
-
diff --git a/3.0.4/doc/src/common/docbook.cat b/3.0.4/doc/src/common/docbook.cat
deleted file mode 100644
index c24e5df..0000000
--- a/3.0.4/doc/src/common/docbook.cat
+++ /dev/null
@@ -1,59 +0,0 @@
-  -- ...................................................................... --
-  -- Catalog data for DocBook XML V4.1.2 .................................... --
-  -- File docbook.cat ..................................................... --
-
-  -- Please direct all questions, bug reports, or suggestions for
-     changes to the docbook@lists.oasis-open.org mailing list. For more
-     information, see http://www.oasis-open.org/.
-  --
-
-  -- This is the catalog data file for DocBook XML V4.1.2. It is provided as
-     a convenience in building your own catalog files. You need not use
-     the filenames listed here, and need not use the filename method of
-     identifying storage objects at all.  See the documentation for
-     detailed information on the files associated with the DocBook DTD.
-     See SGML Open Technical Resolution 9401 for detailed information
-     on supplying and using catalog data.
-  --
-
-  -- ...................................................................... --
-  -- DocBook driver file .................................................. --
-
-PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "docbookx.dtd"
-
-  -- ...................................................................... --
-  -- DocBook modules ...................................................... --
-
-PUBLIC "-//OASIS//DTD DocBook XML CALS Table Model V4.1.2//EN" "calstblx.dtd"
-PUBLIC "-//OASIS//DTD XML Exchange Table Model 19990315//EN" "soextblx.dtd"
-PUBLIC "-//OASIS//ELEMENTS DocBook XML Information Pool V4.1.2//EN" "dbpoolx.mod"
-PUBLIC "-//OASIS//ELEMENTS DocBook XML Document Hierarchy V4.1.2//EN" "dbhierx.mod"
-PUBLIC "-//OASIS//ENTITIES DocBook XML Additional General Entities V4.1.2//EN" "dbgenent.mod"
-PUBLIC "-//OASIS//ENTITIES DocBook XML Notations V4.1.2//EN" "dbnotnx.mod"
-PUBLIC "-//OASIS//ENTITIES DocBook XML Character Entities V4.1.2//EN" "dbcentx.mod"
-
-  -- ...................................................................... --
-  -- ISO entity sets ...................................................... --
-
-PUBLIC "ISO 8879:1986//ENTITIES Diacritical Marks//EN" "ent/iso-dia.ent"
-PUBLIC "ISO 8879:1986//ENTITIES Numeric and Special Graphic//EN" "ent/iso-num.ent"
-PUBLIC "ISO 8879:1986//ENTITIES Publishing//EN" "ent/iso-pub.ent"
-PUBLIC "ISO 8879:1986//ENTITIES General Technical//EN" "ent/iso-tech.ent"
-PUBLIC "ISO 8879:1986//ENTITIES Added Latin 1//EN" "ent/iso-lat1.ent"
-PUBLIC "ISO 8879:1986//ENTITIES Added Latin 2//EN" "ent/iso-lat2.ent"
-PUBLIC "ISO 8879:1986//ENTITIES Greek Letters//EN" "ent/iso-grk1.ent"
-PUBLIC "ISO 8879:1986//ENTITIES Monotoniko Greek//EN" "ent/iso-grk2.ent"
-PUBLIC "ISO 8879:1986//ENTITIES Greek Symbols//EN" "ent/iso-grk3.ent"
-PUBLIC "ISO 8879:1986//ENTITIES Alternative Greek Symbols//EN" "ent/iso-grk4.ent"
-PUBLIC "ISO 8879:1986//ENTITIES Added Math Symbols: Arrow Relations//EN" "ent/iso-amsa.ent"
-PUBLIC "ISO 8879:1986//ENTITIES Added Math Symbols: Binary Operators//EN" "ent/iso-amsb.ent"
-PUBLIC "ISO 8879:1986//ENTITIES Added Math Symbols: Delimiters//EN" "ent/iso-amsc.ent"
-PUBLIC "ISO 8879:1986//ENTITIES Added Math Symbols: Negated Relations//EN" "ent/iso-amsn.ent"
-PUBLIC "ISO 8879:1986//ENTITIES Added Math Symbols: Ordinary//EN" "ent/iso-amso.ent"
-PUBLIC "ISO 8879:1986//ENTITIES Added Math Symbols: Relations//EN" "ent/iso-amsr.ent"
-PUBLIC "ISO 8879:1986//ENTITIES Box and Line Drawing//EN" "ent/iso-box.ent"
-PUBLIC "ISO 8879:1986//ENTITIES Russian Cyrillic//EN" "ent/iso-cyr1.ent"
-PUBLIC "ISO 8879:1986//ENTITIES Non-Russian Cyrillic//EN" "ent/iso-cyr2.ent"
-
-  -- End of catalog data for DocBook XML V4.1.2 ............................. --
-  -- ...................................................................... --
diff --git a/3.0.4/doc/src/common/docbookx.dtd b/3.0.4/doc/src/common/docbookx.dtd
deleted file mode 100644
index ad0081e..0000000
--- a/3.0.4/doc/src/common/docbookx.dtd
+++ /dev/null
@@ -1,125 +0,0 @@
-<!-- ...................................................................... -->
-<!-- DocBook XML DTD V4.1.2 ................................................. -->
-<!-- File docbookx.dtd .................................................... -->
-
-<!-- Copyright 1992-2000 HaL Computer Systems, Inc.,
-     O'Reilly & Associates, Inc., ArborText, Inc., Fujitsu Software
-     Corporation, Norman Walsh, and the Organization for the Advancement
-     of Structured Information Standards (OASIS).
-
-     $Id: docbookx.dtd,v 1.12 2000/08/27 15:15:26 nwalsh Exp $
-
-     Permission to use, copy, modify and distribute the DocBook XML DTD
-     and its accompanying documentation for any purpose and without fee
-     is hereby granted in perpetuity, provided that the above copyright
-     notice and this paragraph appear in all copies.  The copyright
-     holders make no representation about the suitability of the DTD for
-     any purpose.  It is provided "as is" without expressed or implied
-     warranty.
-
-     If you modify the DocBook DTD in any way, except for declaring and
-     referencing additional sets of general entities and declaring
-     additional notations, label your DTD as a variant of DocBook.  See
-     the maintenance documentation for more information.
-
-     Please direct all questions, bug reports, or suggestions for 
-     changes to the docbook@lists.oasis-open.org mailing list. For more
-     information, see http://www.oasis-open.org/docbook/.
--->
-
-<!-- ...................................................................... -->
-
-<!-- This is the driver file for V4.1.2 of the DocBook DTD.
-     Please use the following formal public identifier to identify it:
-
-     "-//OASIS//DTD DocBook XML V4.1.2//EN"
-
-     For example, if your document's top-level element is Book, and
-     you are using DocBook directly, use the FPI in the DOCTYPE
-     declaration:
-
-     <!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
-                    "http://www.oasis-open.org/docbook/xml/4.0/docbookx.dtd"
-                    [...]>
-
-     Or, if you have a higher-level driver file that customizes DocBook,
-     use the FPI in the parameter entity declaration:
-
-     <!ENTITY % DocBookDTD PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
-                "http://www.oasis-open.org/docbook/xml/4.0/docbookx.dtd">
-     %DocBookDTD;
-
-     See the documentation for detailed information on the parameter
-     entity and module scheme used in DocBook, customizing DocBook and
-     planning for interchange, and changes made since the last release
-     of DocBook.
--->
-
-<!-- ...................................................................... -->
-<!-- Notation declarations ................................................ -->
-
-<!ENTITY % dbnotn.module "INCLUDE">
-<![%dbnotn.module;[
-<!ENTITY % dbnotn PUBLIC 
-"-//OASIS//ENTITIES DocBook XML Notations V4.1.2//EN"
-"dbnotnx.mod">
-%dbnotn;
-]]>
-
-<!-- ...................................................................... -->
-<!-- ISO character entity sets ............................................ -->
-
-<!ENTITY % dbcent.module "INCLUDE">
-<![%dbcent.module;[
-<!ENTITY euro "&#x20AC;"><!-- euro sign, U+20AC NEW -->
-<!ENTITY % dbcent PUBLIC 
-"-//OASIS//ENTITIES DocBook XML Character Entities V4.1.2//EN"
-"dbcentx.mod">
-%dbcent;
-]]>
-
-<!-- ...................................................................... -->
-<!-- DTD modules .......................................................... -->
-
-<!-- Information pool .............. -->
-
-<!ENTITY % dbpool.module "INCLUDE">
-<![ %dbpool.module; [
-<!ENTITY % dbpool PUBLIC 
-"-//OASIS//ELEMENTS DocBook XML Information Pool V4.1.2//EN"
-"dbpoolx.mod">
-%dbpool;
-]]>
-
-<!-- Redeclaration placeholder ..... -->
-
-<!ENTITY % intermod.redecl.module "IGNORE">
-<![%intermod.redecl.module;[
-<!-- Defining rdbmods here makes some buggy XML parsers happy. -->
-<!ENTITY % rdbmods "">
-%rdbmods;
-<!--end of intermod.redecl.module-->]]>
-
-<!-- Document hierarchy ............ -->
-
-<!ENTITY % dbhier.module "INCLUDE">
-<![ %dbhier.module; [
-<!ENTITY % dbhier PUBLIC 
-"-//OASIS//ELEMENTS DocBook XML Document Hierarchy V4.1.2//EN"
-"dbhierx.mod">
-%dbhier;
-]]>
-
-<!-- ...................................................................... -->
-<!-- Other general entities ............................................... -->
-
-<!ENTITY % dbgenent.module "INCLUDE">
-<![ %dbgenent.module; [
-<!ENTITY % dbgenent PUBLIC
-"-//OASIS//ENTITIES DocBook XML Additional General Entities V4.1.2//EN"
-"dbgenent.mod">
-%dbgenent;
-]]>
-
-<!-- End of DocBook XML DTD V4.1.2 .......................................... -->
-<!-- ...................................................................... -->
diff --git a/3.0.4/doc/src/common/ent/iso-amsa.ent b/3.0.4/doc/src/common/ent/iso-amsa.ent
deleted file mode 100644
index 1b64b46..0000000
--- a/3.0.4/doc/src/common/ent/iso-amsa.ent
+++ /dev/null
@@ -1,63 +0,0 @@
-<!-- iso-amsa.ent (initially distributed with DocBook XML DTD V4.1.1beta1) -->
-
-<!-- Derived from the corresponding ISO 8879 standard entity set
-     and the Unicode character mappings provided by Sebastian Rahtz
-     With additional derivations from
-     ftp://ftp.unicode.org/Public/MAPPINGS/VENDORS/MISC/SGML.TXT -->
-
-<!ENTITY cularr	"&#x21B6;"> <!-- ANTICLOCKWISE TOP SEMICIRCLE ARROW -->
-<!ENTITY curarr	"&#x21B7;"> <!-- CLOCKWISE TOP SEMICIRCLE ARROW -->
-<!ENTITY dArr	"&#x21D3;"> <!-- DOWNWARDS DOUBLE ARROW -->
-<!ENTITY darr2	"&#x21CA;"> <!-- DOWNWARDS PAIRED ARROWS -->
-<!ENTITY dharl	"&#x21C3;"> <!-- DOWNWARDS HARPOON WITH BARB LEFTWARDS -->
-<!ENTITY dharr	"&#x21C2;"> <!-- DOWNWARDS HARPOON WITH BARB RIGHTWARDS -->
-<!ENTITY lAarr	"&#x21DA;"> <!-- LEFTWARDS TRIPLE ARROW -->
-<!ENTITY Larr	"&#x219E;"> <!-- LEFTWARDS TWO HEADED ARROW -->
-<!ENTITY larr2	"&#x21C7;"> <!-- LEFTWARDS PAIRED ARROWS -->
-<!ENTITY larrhk	"&#x21A9;"> <!-- LEFTWARDS ARROW WITH HOOK -->
-<!ENTITY larrlp	"&#x21AB;"> <!-- LEFTWARDS ARROW WITH LOOP -->
-<!ENTITY larrtl	"&#x21A2;"> <!-- LEFTWARDS ARROW WITH TAIL -->
-<!ENTITY lhard	"&#x21BD;"> <!-- LEFTWARDS HARPOON WITH BARB DOWNWARDS -->
-<!ENTITY lharu	"&#x21BC;"> <!-- LEFTWARDS HARPOON WITH BARB UPWARDS -->
-<!ENTITY hArr	"&#x21D4;"> <!--  -->
-<!ENTITY harr	"&#x2194;"> <!-- LEFT RIGHT ARROW -->
-<!ENTITY lrarr2	"&#x21C6;"> <!-- LEFTWARDS ARROW OVER RIGHTWARDS ARROW -->
-<!ENTITY rlarr2	"&#x21C4;"> <!-- RIGHTWARDS ARROW OVER LEFTWARDS ARROW -->
-<!ENTITY harrw	"&#x21AD;"> <!-- LEFT RIGHT WAVE ARROW -->
-<!ENTITY rlhar2	"&#x21CC;"> <!-- RIGHTWARDS HARPOON OVER LEFTWARDS HARPOON -->
-<!ENTITY lrhar2	"&#x21CB;"> <!-- LEFTWARDS HARPOON OVER RIGHTWARDS HARPOON -->
-<!ENTITY lsh	"&#x21B0;"> <!-- UPWARDS ARROW WITH TIP LEFTWARDS -->
-<!ENTITY map	"&#x21A6;"> <!-- RIGHTWARDS ARROW FROM BAR -->
-<!ENTITY mumap	"&#x22B8;"> <!-- MULTIMAP -->
-<!ENTITY nearr	"&#x2197;"> <!-- NORTH EAST ARROW -->
-<!ENTITY nlArr	"&#x21CD;"> <!-- LEFTWARDS DOUBLE ARROW WITH STROKE -->
-<!ENTITY nlarr	"&#x219A;"> <!-- LEFTWARDS ARROW WITH STROKE -->
-<!ENTITY nhArr	"&#x21CE;"> <!-- LEFT RIGHT DOUBLE ARROW WITH STROKE -->
-<!ENTITY nharr	"&#x21AE;"> <!-- LEFT RIGHT ARROW WITH STROKE -->
-<!ENTITY nrarr	"&#x219B;"> <!-- RIGHTWARDS ARROW WITH STROKE -->
-<!ENTITY nrArr	"&#x21CF;"> <!-- RIGHTWARDS DOUBLE ARROW WITH STROKE -->
-<!ENTITY nwarr	"&#x2196;"> <!-- NORTH WEST ARROW -->
-<!ENTITY olarr	"&#x21BA;"> <!-- ANTICLOCKWISE OPEN CIRCLE ARROW -->
-<!ENTITY orarr	"&#x21BB;"> <!-- CLOCKWISE OPEN CIRCLE ARROW -->
-<!ENTITY rAarr	"&#x21DB;"> <!-- RIGHTWARDS TRIPLE ARROW -->
-<!ENTITY Rarr	"&#x21A0;"> <!-- RIGHTWARDS TWO HEADED ARROW -->
-<!ENTITY rarr2	"&#x21C9;"> <!-- RIGHTWARDS PAIRED ARROWS -->
-<!ENTITY rarrhk	"&#x21AA;"> <!-- RIGHTWARDS ARROW WITH HOOK -->
-<!ENTITY rarrlp	"&#x21AC;"> <!-- RIGHTWARDS ARROW WITH LOOP -->
-<!ENTITY rarrtl	"&#x21A3;"> <!-- RIGHTWARDS ARROW WITH TAIL -->
-<!ENTITY rarrw	"&#x219D;"> <!-- RIGHTWARDS SQUIGGLE ARROW -->
-<!ENTITY rhard	"&#x21C1;"> <!-- RIGHTWARDS HARPOON WITH BARB DOWNWARDS -->
-<!ENTITY rharu	"&#x21C0;"> <!-- RIGHTWARDS HARPOON WITH BARB UPWARDS -->
-<!ENTITY rsh	"&#x21B1;"> <!-- UPWARDS ARROW WITH TIP RIGHTWARDS -->
-<!ENTITY drarr	"&#x2198;"> <!-- SOUTH EAST ARROW -->
-<!ENTITY dlarr	"&#x2199;"> <!-- SOUTH WEST ARROW -->
-<!ENTITY uArr	"&#x21D1;"> <!-- UPWARDS DOUBLE ARROW -->
-<!ENTITY uarr2	"&#x21C8;"> <!-- UPWARDS PAIRED ARROWS -->
-<!ENTITY vArr	"&#x21D5;"> <!-- UP DOWN DOUBLE ARROW -->
-<!ENTITY varr	"&#x2195;"> <!-- UP DOWN ARROW -->
-<!ENTITY uharl	"&#x21BF;"> <!-- UPWARDS HARPOON WITH BARB LEFTWARDS -->
-<!ENTITY uharr	"&#x21BE;"> <!-- UPWARDS HARPOON WITH BARB RIGHTWARDS -->
-<!ENTITY xlArr	"&#x21D0;"> <!-- LEFTWARDS DOUBLE ARROW -->
-<!ENTITY xhArr	"&#x2194;"> <!-- LEFT RIGHT ARROW -->
-<!ENTITY xharr	"&#x2194;"> <!-- LEFT RIGHT ARROW -->
-<!ENTITY xrArr	"&#x21D2;"> <!-- RIGHTWARDS DOUBLE ARROW -->
diff --git a/3.0.4/doc/src/common/ent/iso-amsb.ent b/3.0.4/doc/src/common/ent/iso-amsb.ent
deleted file mode 100644
index 38bd2e7..0000000
--- a/3.0.4/doc/src/common/ent/iso-amsb.ent
+++ /dev/null
@@ -1,49 +0,0 @@
-<!-- iso-amsb.ent (initially distributed with DocBook XML DTD V4.1.1beta1) -->
-
-<!-- Derived from the corresponding ISO 8879 standard entity set
-     and the Unicode character mappings provided by Sebastian Rahtz.
-     With additional derivations from
-     ftp://ftp.unicode.org/Public/MAPPINGS/VENDORS/MISC/SGML.TXT -->
-
-<!ENTITY amalg	"&#x2210;"> <!-- N-ARY COPRODUCT -->
-<!ENTITY Barwed	"&#x2306;"> <!-- PERSPECTIVE -->
-<!ENTITY barwed	"&#x22BC;"> <!-- NAND -->
-<!ENTITY Cap	"&#x22D2;"> <!-- DOUBLE INTERSECTION -->
-<!ENTITY Cup	"&#x22D3;"> <!-- DOUBLE UNION -->
-<!ENTITY cuvee	"&#x22CE;"> <!-- CURLY LOGICAL OR -->
-<!ENTITY cuwed	"&#x22CF;"> <!-- CURLY LOGICAL AND -->
-<!ENTITY diam	"&#x22C4;"> <!-- DIAMOND OPERATOR -->
-<!ENTITY divonx	"&#x22C7;"> <!-- DIVISION TIMES -->
-<!ENTITY intcal	"&#x22BA;"> <!-- INTERCALATE -->
-<!ENTITY lthree	"&#x22CB;"> <!-- LEFT SEMIDIRECT PRODUCT -->
-<!ENTITY ltimes	"&#x22C9;"> <!-- LEFT NORMAL FACTOR SEMIDIRECT PRODUCT -->
-<!ENTITY minusb	"&#x229F;"> <!-- SQUARED MINUS -->
-<!ENTITY oast	"&#x229B;"> <!-- CIRCLED ASTERISK OPERATOR -->
-<!ENTITY ocir	"&#x229A;"> <!-- CIRCLED RING OPERATOR -->
-<!ENTITY odash	"&#x229D;"> <!-- CIRCLED DASH -->
-<!ENTITY odot	"&#x2299;"> <!-- CIRCLED DOT OPERATOR -->
-<!ENTITY ominus	"&#x2296;"> <!-- CIRCLED MINUS -->
-<!ENTITY oplus	"&#x2295;"> <!-- CIRCLED PLUS -->
-<!ENTITY osol	"&#x2298;"> <!-- CIRCLED DIVISION SLASH -->
-<!ENTITY otimes	"&#x2297;"> <!-- CIRCLED TIMES -->
-<!ENTITY plusb	"&#x229E;"> <!-- SQUARED PLUS -->
-<!ENTITY plusdo	"&#x2214;"> <!-- DOT PLUS -->
-<!ENTITY rthree	"&#x22CC;"> <!-- RIGHT SEMIDIRECT PRODUCT -->
-<!ENTITY rtimes	"&#x22CA;"> <!-- RIGHT NORMAL FACTOR SEMIDIRECT PRODUCT -->
-<!ENTITY sdot	"&#x22C5;"> <!-- DOT OPERATOR -->
-<!ENTITY sdotb	"&#x22A1;"> <!-- SQUARED DOT OPERATOR -->
-<!ENTITY setmn	"&#x2216;"> <!-- SET MINUS -->
-<!ENTITY sqcap	"&#x2293;"> <!-- SQUARE CAP -->
-<!ENTITY sqcup	"&#x2294;"> <!-- SQUARE CUP -->
-<!ENTITY ssetmn	"&#x2216;"> <!-- SET MINUS -->
-<!ENTITY sstarf	"&#x22C6;"> <!-- STAR OPERATOR -->
-<!ENTITY timesb	"&#x22A0;"> <!-- SQUARED TIMES -->
-<!ENTITY top	"&#x22A4;"> <!-- DOWN TACK -->
-<!ENTITY uplus	"&#x228E;"> <!-- MULTISET UNION -->
-<!ENTITY wreath	"&#x2240;"> <!-- WREATH PRODUCT -->
-<!ENTITY xcirc	"&#x25CB;"> <!-- WHITE CIRCLE -->
-<!ENTITY xdtri	"&#x25BD;"> <!-- WHITE DOWN-POINTING TRIANGLE -->
-<!ENTITY xutri	"&#x25B3;"> <!-- WHITE UP-POINTING TRIANGLE -->
-<!ENTITY coprod	"&#x2210;"> <!-- N-ARY COPRODUCT -->
-<!ENTITY prod	"&#x220F;"> <!-- N-ARY PRODUCT -->
-<!ENTITY sum	"&#x2211;"> <!-- N-ARY SUMMATION -->
diff --git a/3.0.4/doc/src/common/ent/iso-amsc.ent b/3.0.4/doc/src/common/ent/iso-amsc.ent
deleted file mode 100644
index 8485fe3..0000000
--- a/3.0.4/doc/src/common/ent/iso-amsc.ent
+++ /dev/null
@@ -1,15 +0,0 @@
-<!-- iso-amsc.ent (initially distributed with DocBook XML DTD V4.1.1beta1) -->
-
-<!-- Derived from the corresponding ISO 8879 standard entity set
-     and the Unicode character mappings provided by Sebastian Rahtz -->
-
-<!ENTITY rceil	"&#x2309;"> <!-- RIGHT CEILING -->
-<!ENTITY rfloor	"&#x230B;"> <!-- RIGHT FLOOR -->
-<!ENTITY rpargt	"&#xE291;"> <!--  -->
-<!ENTITY urcorn	"&#x231D;"> <!-- TOP RIGHT CORNER -->
-<!ENTITY drcorn	"&#x231F;"> <!-- BOTTOM RIGHT CORNER -->
-<!ENTITY lceil	"&#x2308;"> <!-- LEFT CEILING -->
-<!ENTITY lfloor	"&#x230A;"> <!-- LEFT FLOOR -->
-<!--     lpargt	Unknown unicode character -->
-<!ENTITY ulcorn	"&#x231C;"> <!-- TOP LEFT CORNER -->
-<!ENTITY dlcorn	"&#x231E;"> <!-- BOTTOM LEFT CORNER -->
diff --git a/3.0.4/doc/src/common/ent/iso-amsn.ent b/3.0.4/doc/src/common/ent/iso-amsn.ent
deleted file mode 100644
index 7e9d578..0000000
--- a/3.0.4/doc/src/common/ent/iso-amsn.ent
+++ /dev/null
@@ -1,66 +0,0 @@
-<!-- iso-amsn.ent (initially distributed with DocBook XML DTD V4.1.1beta1) -->
-
-<!-- Derived from the corresponding ISO 8879 standard entity set
-     and the Unicode character mappings provided by Sebastian Rahtz
-     With additional derivations from
-     ftp://ftp.unicode.org/Public/MAPPINGS/VENDORS/MISC/SGML.TXT -->
-
-<!ENTITY gnap	"&#xE411;"> <!--  -->
-<!ENTITY gne	"&#x2269;"> <!--  -->
-<!ENTITY gnE	"&#x2269;"> <!--  -->
-<!ENTITY gnsim	"&#x22E7;"> <!-- GREATER-THAN BUT NOT EQUIVALENT TO -->
-<!ENTITY gvnE	"&#x2269;"> <!-- GREATER-THAN BUT NOT EQUAL TO -->
-<!ENTITY lnap	"&#xE2A2;"> <!--  -->
-<!ENTITY lnE	"&#x2268;"> <!--  -->
-<!ENTITY lne	"&#x2268;"> <!--  -->
-<!ENTITY lnsim	"&#x22E6;"> <!--  -->
-<!ENTITY lvnE	"&#x2268;"> <!-- LESS-THAN BUT NOT EQUAL TO -->
-<!ENTITY nap	"&#x2249;"> <!-- NOT ALMOST EQUAL TO -->
-<!ENTITY ncong	"&#x2247;"> <!-- NEITHER APPROXIMATELY NOR ACTUALLY EQUAL TO -->
-<!ENTITY nequiv	"&#x2262;"> <!-- NOT IDENTICAL TO -->
-<!ENTITY ngE	"&#x2271;"> <!--  -->
-<!ENTITY nge	"&#x2271;"> <!-- NEITHER GREATER-THAN NOR EQUAL TO -->
-<!ENTITY nges	"&#x2271;"> <!--  -->
-<!ENTITY ngt	"&#x226F;"> <!-- NOT GREATER-THAN -->
-<!ENTITY nle	"&#x2270;"> <!-- NEITHER LESS-THAN NOR EQUAL TO -->
-<!ENTITY nlE	"&#x2270;"> <!--  -->
-<!ENTITY nles	"&#x2270;"> <!--  -->
-<!ENTITY nlt	"&#x226E;"> <!-- NOT LESS-THAN -->
-<!ENTITY nltri	"&#x22EA;"> <!-- NOT NORMAL SUBGROUP OF -->
-<!ENTITY nltrie	"&#x22EC;"> <!-- NOT NORMAL SUBGROUP OF OR EQUAL TO -->
-<!ENTITY nmid	"&#x2224;"> <!-- DOES NOT DIVIDE -->
-<!ENTITY npar	"&#x2226;"> <!-- NOT PARALLEL TO -->
-<!ENTITY npr	"&#x2280;"> <!-- DOES NOT PRECEDE -->
-<!ENTITY npre	"&#x22E0;"> <!-- DOES NOT PRECEDE OR EQUAL -->
-<!ENTITY nrtri	"&#x22EB;"> <!-- DOES NOT CONTAIN AS NORMAL SUBGROUP -->
-<!ENTITY nrtrie	"&#x22ED;"> <!-- DOES NOT CONTAIN AS NORMAL SUBGROUP OR EQUAL -->
-<!ENTITY nsc	"&#x2281;"> <!-- DOES NOT SUCCEED -->
-<!ENTITY nsce	"&#x22E1;"> <!-- DOES NOT SUCCEED OR EQUAL -->
-<!ENTITY nsim	"&#x2241;"> <!--  -->
-<!ENTITY nsime	"&#x2244;"> <!--  -->
-<!ENTITY nsmid	"&#xE2AA;"> <!--  -->
-<!ENTITY nspar	"&#x2226;"> <!-- NOT PARALLEL TO -->
-<!ENTITY nsub	"&#x2284;"> <!-- NOT A SUBSET OF -->
-<!ENTITY nsube	"&#x2288;"> <!--  -->
-<!ENTITY nsubE	"&#x2288;"> <!--  -->
-<!ENTITY nsup	"&#x2285;"> <!-- NOT A SUPERSET OF -->
-<!ENTITY nsupE	"&#x2289;"> <!--  -->
-<!ENTITY nsupe	"&#x2289;"> <!--  -->
-<!ENTITY nvdash	"&#x22AC;"> <!-- DOES NOT PROVE -->
-<!ENTITY nvDash	"&#x22AD;"> <!-- NOT TRUE -->
-<!ENTITY nVDash	"&#x22AF;"> <!-- NEGATED DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE -->
-<!ENTITY nVdash	"&#x22AE;"> <!-- DOES NOT FORCE -->
-<!ENTITY prnap	"&#x22E8;"> <!--  -->
-<!ENTITY prnE	"&#xE2B3;"> <!--  -->
-<!ENTITY prnsim	"&#x22E8;"> <!--  -->
-<!ENTITY scnap	"&#x22E9;"> <!--  -->
-<!ENTITY scnE	"&#xE2B5;"> <!--  -->
-<!ENTITY scnsim	"&#x22E9;"> <!--  -->
-<!ENTITY subne	"&#x228A;"> <!--  -->
-<!ENTITY subnE	"&#x228A;"> <!-- SUBSET OF WITH NOT EQUAL TO -->
-<!ENTITY supne	"&#x228B;"> <!--  -->
-<!ENTITY supnE	"&#x228B;"> <!--  -->
-<!ENTITY vsubnE	"&#xE2B8;"> <!--  -->
-<!ENTITY vsubne	"&#x228A;"> <!-- SUBSET OF WITH NOT EQUAL TO -->
-<!ENTITY vsupne	"&#x228B;"> <!-- SUPERSET OF WITH NOT EQUAL TO -->
-<!ENTITY vsupnE	"&#x228B;"> <!-- SUPERSET OF WITH NOT EQUAL TO -->
diff --git a/3.0.4/doc/src/common/ent/iso-amso.ent b/3.0.4/doc/src/common/ent/iso-amso.ent
deleted file mode 100644
index 61f5c4d..0000000
--- a/3.0.4/doc/src/common/ent/iso-amso.ent
+++ /dev/null
@@ -1,26 +0,0 @@
-<!-- iso-amso.ent (initially distributed with DocBook XML DTD V4.1.1beta1) -->
-
-<!-- Derived from the corresponding ISO 8879 standard entity set
-     and the Unicode character mappings provided by Sebastian Rahtz
-     With additional derivations from
-     ftp://ftp.unicode.org/Public/MAPPINGS/VENDORS/MISC/SGML.TXT -->
-
-<!ENTITY ang	"&#x2220;"> <!-- ANGLE -->
-<!ENTITY angmsd	"&#x2221;"> <!-- MEASURED ANGLE -->
-<!ENTITY beth	"&#x2136;"> <!-- BET SYMBOL -->
-<!ENTITY bprime	"&#x2035;"> <!-- REVERSED PRIME -->
-<!ENTITY comp	"&#x2201;"> <!-- COMPLEMENT -->
-<!ENTITY daleth	"&#x2138;"> <!-- DALET SYMBOL -->
-<!ENTITY ell	"&#x2113;"> <!-- SCRIPT SMALL L -->
-<!ENTITY empty	"&#x2205;"> <!--  -->
-<!ENTITY gimel	"&#x2137;"> <!-- GIMEL SYMBOL -->
-<!ENTITY image	"&#x2111;"> <!-- BLACK-LETTER CAPITAL I -->
-<!ENTITY inodot	"&#x0131;"> <!-- LATIN SMALL LETTER DOTLESS I -->
-<!--     jnodot	Unknown unicode character -->
-<!ENTITY nexist	"&#x2204;"> <!-- THERE DOES NOT EXIST -->
-<!ENTITY oS	"&#x24C8;"> <!-- CIRCLED LATIN CAPITAL LETTER S -->
-<!ENTITY planck	"&#x210F;"> <!-- PLANCK CONSTANT OVER TWO PI -->
-<!ENTITY real	"&#x211C;"> <!-- BLACK-LETTER CAPITAL R -->
-<!ENTITY sbsol	"&#xFE68;"> <!-- SMALL REVERSE SOLIDUS -->
-<!ENTITY vprime	"&#x2032;"> <!-- PRIME -->
-<!ENTITY weierp	"&#x2118;"> <!-- SCRIPT CAPITAL P -->
diff --git a/3.0.4/doc/src/common/ent/iso-amsr.ent b/3.0.4/doc/src/common/ent/iso-amsr.ent
deleted file mode 100644
index 9ef9da0..0000000
--- a/3.0.4/doc/src/common/ent/iso-amsr.ent
+++ /dev/null
@@ -1,91 +0,0 @@
-<!-- iso-amsr.ent (initially distributed with DocBook XML DTD V4.1.1beta1) -->
-
-<!-- Derived from the corresponding ISO 8879 standard entity set
-     and the Unicode character mappings provided by Sebastian Rahtz.
-     With additional derivations from
-     ftp://ftp.unicode.org/Public/MAPPINGS/VENDORS/MISC/SGML.TXT -->
-
-<!ENTITY ape	"&#x224A;"> <!--  -->
-<!ENTITY asymp	"&#x224D;"> <!-- EQUIVALENT TO -->
-<!ENTITY bcong	"&#x224C;"> <!-- ALL EQUAL TO -->
-<!ENTITY bepsi	"&#x220D;"> <!-- SMALL CONTAINS AS MEMBER -->
-<!ENTITY bowtie	"&#x22C8;"> <!--  -->
-<!ENTITY bsim	"&#x223D;"> <!--  -->
-<!ENTITY bsime	"&#x22CD;"> <!--  -->
-<!ENTITY bump	"&#x224E;"> <!--  -->
-<!ENTITY bumpe	"&#x224F;"> <!--  -->
-<!ENTITY cire	"&#x2257;"> <!--  -->
-<!ENTITY colone	"&#x2254;"> <!--  -->
-<!ENTITY cuepr	"&#x22DE;"> <!--  -->
-<!ENTITY cuesc	"&#x22DF;"> <!--  -->
-<!ENTITY cupre	"&#x227C;"> <!--  -->
-<!ENTITY dashv	"&#x22A3;"> <!--  -->
-<!ENTITY ecir	"&#x2256;"> <!--  -->
-<!ENTITY ecolon	"&#x2255;"> <!--  -->
-<!ENTITY eDot	"&#x2251;"> <!--  -->
-<!ENTITY esdot	"&#x2250;"> <!--  -->
-<!ENTITY efDot	"&#x2252;"> <!--  -->
-<!ENTITY egs	"&#x22DD;"> <!--  -->
-<!ENTITY els	"&#x22DC;"> <!--  -->
-<!ENTITY erDot	"&#x2253;"> <!--  -->
-<!ENTITY fork	"&#x22D4;"> <!--  -->
-<!ENTITY frown	"&#x2322;"> <!--  -->
-<!ENTITY gap	"&#x2273;"> <!-- GREATER-THAN OR EQUIVALENT TO -->
-<!ENTITY gsdot	"&#x22D7;"> <!--  -->
-<!ENTITY gE	"&#x2267;"> <!--  -->
-<!ENTITY gel	"&#x22DB;"> <!--  -->
-<!ENTITY gEl	"&#x22DB;"> <!--  -->
-<!ENTITY ges	"&#x2265;"> <!-- GREATER-THAN OR EQUAL TO -->
-<!ENTITY Gg	"&#x22D9;"> <!-- VERY MUCH GREATER-THAN -->
-<!ENTITY gl	"&#x2277;"> <!--  -->
-<!ENTITY gsim	"&#x2273;"> <!-- GREATER-THAN OR EQUIVALENT TO -->
-<!ENTITY Gt	"&#x226B;"> <!-- MUCH GREATER-THAN -->
-<!ENTITY lap	"&#x2272;"> <!-- LESS-THAN OR EQUIVALENT TO -->
-<!ENTITY ldot	"&#x22D6;"> <!--  -->
-<!ENTITY lE	"&#x2266;"> <!--  -->
-<!ENTITY lEg	"&#x22DA;"> <!--  -->
-<!ENTITY leg	"&#x22DA;"> <!--  -->
-<!ENTITY les	"&#x2264;"> <!-- LESS-THAN OR EQUAL TO -->
-<!ENTITY lg	"&#x2276;"> <!-- LESS-THAN OR GREATER-THAN -->
-<!ENTITY Ll	"&#x22D8;"> <!--  -->
-<!ENTITY lsim	"&#x2272;"> <!-- LESS-THAN OR EQUIVALENT TO -->
-<!ENTITY Lt	"&#x226A;"> <!-- MUCH LESS-THAN -->
-<!ENTITY ltrie	"&#x22B4;"> <!--  -->
-<!ENTITY mid	"&#x2223;"> <!--  -->
-<!ENTITY models	"&#x22A7;"> <!-- MODELS -->
-<!ENTITY pr	"&#x227A;"> <!--  -->
-<!ENTITY prap	"&#x227E;"> <!--  -->
-<!ENTITY pre	"&#x227C;"> <!--  -->
-<!ENTITY prsim	"&#x227E;"> <!--  -->
-<!ENTITY rtrie	"&#x22B5;"> <!--  -->
-<!ENTITY samalg	"&#x2210;"> <!--  -->
-<!ENTITY sc	"&#x227B;"> <!--  -->
-<!ENTITY scap	"&#x227F;"> <!--  -->
-<!ENTITY sccue	"&#x227D;"> <!--  -->
-<!ENTITY sce	"&#x227D;"> <!--  -->
-<!ENTITY scsim	"&#x227F;"> <!--  -->
-<!ENTITY sfrown	"&#x2322;"> <!-- FROWN -->
-<!ENTITY smid	"&#xE301;"> <!--  -->
-<!ENTITY smile	"&#x2323;"> <!--  -->
-<!ENTITY spar	"&#x2225;"> <!-- PARALLEL TO -->
-<!ENTITY sqsub	"&#x228F;"> <!--  -->
-<!ENTITY sqsube	"&#x2291;"> <!--  -->
-<!ENTITY sqsup	"&#x2290;"> <!--  -->
-<!ENTITY sqsupe	"&#x2292;"> <!--  -->
-<!ENTITY ssmile	"&#x2323;"> <!-- SMILE -->
-<!ENTITY Sub	"&#x22D0;"> <!--  -->
-<!ENTITY subE	"&#x2286;"> <!--  -->
-<!ENTITY Sup	"&#x22D1;"> <!--  -->
-<!ENTITY supE	"&#x2287;"> <!--  -->
-<!ENTITY thkap	"&#x2248;"> <!-- ALMOST EQUAL TO -->
-<!ENTITY thksim	"&#x223C;"> <!-- TILDE OPERATOR -->
-<!ENTITY trie	"&#x225C;"> <!--  -->
-<!ENTITY twixt	"&#x226C;"> <!-- BETWEEN -->
-<!ENTITY vdash	"&#x22A2;"> <!--  -->
-<!ENTITY Vdash	"&#x22A9;"> <!--  -->
-<!ENTITY vDash	"&#x22A8;"> <!--  -->
-<!ENTITY veebar	"&#x22BB;"> <!--  -->
-<!ENTITY vltri	"&#x22B2;"> <!--  -->
-<!ENTITY vprop	"&#x221D;"> <!--  -->
-<!ENTITY vrtri	"&#x22B3;"> <!--  -->
-<!ENTITY Vvdash	"&#x22AA;"> <!--  -->
diff --git a/3.0.4/doc/src/common/ent/iso-box.ent b/3.0.4/doc/src/common/ent/iso-box.ent
deleted file mode 100644
index 1f87530..0000000
--- a/3.0.4/doc/src/common/ent/iso-box.ent
+++ /dev/null
@@ -1,45 +0,0 @@
-<!-- iso-box.ent (initially distributed with DocBook XML DTD V4.1.1beta1) -->
-
-<!-- Derived from the corresponding ISO 8879 standard entity set
-     and the Unicode character mappings provided by Sebastian Rahtz -->
-
-<!ENTITY boxh	"&#x2500;"> <!-- BOX DRAWINGS LIGHT HORIZONTAL -->
-<!ENTITY boxv	"&#x2502;"> <!-- BOX DRAWINGS LIGHT VERTICAL -->
-<!ENTITY boxur	"&#x2514;"> <!-- BOX DRAWINGS LIGHT UP AND RIGHT -->
-<!ENTITY boxul	"&#x2518;"> <!-- BOX DRAWINGS LIGHT UP AND LEFT -->
-<!ENTITY boxdl	"&#x2510;"> <!-- BOX DRAWINGS LIGHT DOWN AND LEFT -->
-<!ENTITY boxdr	"&#x250C;"> <!-- BOX DRAWINGS LIGHT DOWN AND RIGHT -->
-<!ENTITY boxvr	"&#x251C;"> <!-- BOX DRAWINGS LIGHT VERTICAL AND RIGHT -->
-<!ENTITY boxhu	"&#x2534;"> <!-- BOX DRAWINGS LIGHT UP AND HORIZONTAL -->
-<!ENTITY boxvl	"&#x2524;"> <!-- BOX DRAWINGS LIGHT VERTICAL AND LEFT -->
-<!ENTITY boxhd	"&#x252C;"> <!-- BOX DRAWINGS LIGHT DOWN AND HORIZONTAL -->
-<!ENTITY boxvh	"&#x253C;"> <!-- BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL -->
-<!ENTITY boxvR	"&#x255E;"> <!-- BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE -->
-<!ENTITY boxhU	"&#x2567;"> <!-- BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE -->
-<!ENTITY boxvL	"&#x2561;"> <!-- BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE -->
-<!ENTITY boxhD	"&#x2564;"> <!-- BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE -->
-<!ENTITY boxvH	"&#x256A;"> <!-- BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE -->
-<!ENTITY boxH	"&#x2550;"> <!-- BOX DRAWINGS DOUBLE HORIZONTAL -->
-<!ENTITY boxV	"&#x2551;"> <!-- BOX DRAWINGS DOUBLE VERTICAL -->
-<!ENTITY boxUR	"&#x2558;"> <!-- BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE -->
-<!ENTITY boxUL	"&#x255B;"> <!-- BOX DRAWINGS UP SINGLE AND LEFT DOUBLE -->
-<!ENTITY boxDL	"&#x2555;"> <!-- BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE -->
-<!ENTITY boxDR	"&#x2552;"> <!-- BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE -->
-<!ENTITY boxVR	"&#x255F;"> <!-- BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE -->
-<!ENTITY boxHU	"&#x2568;"> <!-- BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE -->
-<!ENTITY boxVL	"&#x2562;"> <!-- BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE -->
-<!ENTITY boxHD	"&#x2565;"> <!-- BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE -->
-<!ENTITY boxVH	"&#x256B;"> <!-- BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE -->
-<!ENTITY boxVr	"&#x2560;"> <!-- BOX DRAWINGS DOUBLE VERTICAL AND RIGHT -->
-<!ENTITY boxHu	"&#x2569;"> <!-- BOX DRAWINGS DOUBLE UP AND HORIZONTAL -->
-<!ENTITY boxVl	"&#x2563;"> <!-- BOX DRAWINGS DOUBLE VERTICAL AND LEFT -->
-<!ENTITY boxHd	"&#x2566;"> <!-- BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL -->
-<!ENTITY boxVh	"&#x256C;"> <!-- BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL -->
-<!ENTITY boxuR	"&#x2559;"> <!-- BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE -->
-<!ENTITY boxUl	"&#x255C;"> <!-- BOX DRAWINGS UP DOUBLE AND LEFT SINGLE -->
-<!ENTITY boxdL	"&#x2556;"> <!-- BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE -->
-<!ENTITY boxDr	"&#x2553;"> <!-- BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE -->
-<!ENTITY boxUr	"&#x255A;"> <!-- BOX DRAWINGS DOUBLE UP AND RIGHT -->
-<!ENTITY boxuL	"&#x255D;"> <!-- BOX DRAWINGS DOUBLE UP AND LEFT -->
-<!ENTITY boxDl	"&#x2557;"> <!-- BOX DRAWINGS DOUBLE DOWN AND LEFT -->
-<!ENTITY boxdR	"&#x2554;"> <!-- BOX DRAWINGS DOUBLE DOWN AND RIGHT -->
diff --git a/3.0.4/doc/src/common/ent/iso-cyr1.ent b/3.0.4/doc/src/common/ent/iso-cyr1.ent
deleted file mode 100644
index 2516f8e..0000000
--- a/3.0.4/doc/src/common/ent/iso-cyr1.ent
+++ /dev/null
@@ -1,72 +0,0 @@
-<!-- iso-cyr1.ent (initially distributed with DocBook XML DTD V4.1.1beta1) -->
-
-<!-- Derived from the corresponding ISO 8879 standard entity set
-     and the Unicode character mappings provided by Sebastian Rahtz -->
-
-<!ENTITY acy	"&#x0430;"> <!-- CYRILLIC SMALL LETTER A -->
-<!ENTITY Acy	"&#x0410;"> <!-- CYRILLIC CAPITAL LETTER A -->
-<!ENTITY bcy	"&#x0431;"> <!-- CYRILLIC SMALL LETTER BE -->
-<!ENTITY Bcy	"&#x0411;"> <!-- CYRILLIC CAPITAL LETTER BE -->
-<!ENTITY vcy	"&#x0432;"> <!-- CYRILLIC SMALL LETTER VE -->
-<!ENTITY Vcy	"&#x0412;"> <!-- CYRILLIC CAPITAL LETTER VE -->
-<!ENTITY gcy	"&#x0433;"> <!-- CYRILLIC SMALL LETTER GHE -->
-<!ENTITY Gcy	"&#x0413;"> <!-- CYRILLIC CAPITAL LETTER GHE -->
-<!ENTITY dcy	"&#x0434;"> <!-- CYRILLIC SMALL LETTER DE -->
-<!ENTITY Dcy	"&#x0414;"> <!-- CYRILLIC CAPITAL LETTER DE -->
-<!ENTITY iecy	"&#x0435;"> <!-- CYRILLIC SMALL LETTER IE -->
-<!ENTITY IEcy	"&#x0415;"> <!-- CYRILLIC CAPITAL LETTER IE -->
-<!ENTITY iocy	"&#x0451;"> <!-- CYRILLIC SMALL LETTER IO -->
-<!ENTITY IOcy	"&#x0401;"> <!-- CYRILLIC CAPITAL LETTER IO -->
-<!ENTITY zhcy	"&#x0436;"> <!-- CYRILLIC SMALL LETTER ZHE -->
-<!ENTITY ZHcy	"&#x0416;"> <!-- CYRILLIC CAPITAL LETTER ZHE -->
-<!ENTITY zcy	"&#x0437;"> <!-- CYRILLIC SMALL LETTER ZE -->
-<!ENTITY Zcy	"&#x0417;"> <!-- CYRILLIC CAPITAL LETTER ZE -->
-<!ENTITY icy	"&#x0438;"> <!-- CYRILLIC SMALL LETTER I -->
-<!ENTITY Icy	"&#x0418;"> <!-- CYRILLIC CAPITAL LETTER I -->
-<!ENTITY jcy	"&#x0439;"> <!-- CYRILLIC SMALL LETTER SHORT I -->
-<!ENTITY Jcy	"&#x0419;"> <!-- CYRILLIC CAPITAL LETTER SHORT I -->
-<!ENTITY kcy	"&#x043A;"> <!-- CYRILLIC SMALL LETTER KA -->
-<!ENTITY Kcy	"&#x041A;"> <!-- CYRILLIC CAPITAL LETTER KA -->
-<!ENTITY lcy	"&#x043B;"> <!-- CYRILLIC SMALL LETTER EL -->
-<!ENTITY Lcy	"&#x041B;"> <!-- CYRILLIC CAPITAL LETTER EL -->
-<!ENTITY mcy	"&#x043C;"> <!-- CYRILLIC SMALL LETTER EM -->
-<!ENTITY Mcy	"&#x041C;"> <!-- CYRILLIC CAPITAL LETTER EM -->
-<!ENTITY ncy	"&#x043D;"> <!-- CYRILLIC SMALL LETTER EN -->
-<!ENTITY Ncy	"&#x041D;"> <!-- CYRILLIC CAPITAL LETTER EN -->
-<!ENTITY ocy	"&#x043E;"> <!-- CYRILLIC SMALL LETTER O -->
-<!ENTITY Ocy	"&#x041E;"> <!-- CYRILLIC CAPITAL LETTER O -->
-<!ENTITY pcy	"&#x043F;"> <!-- CYRILLIC SMALL LETTER PE -->
-<!ENTITY Pcy	"&#x041F;"> <!-- CYRILLIC CAPITAL LETTER PE -->
-<!ENTITY rcy	"&#x0440;"> <!-- CYRILLIC SMALL LETTER ER -->
-<!ENTITY Rcy	"&#x0420;"> <!-- CYRILLIC CAPITAL LETTER ER -->
-<!ENTITY scy	"&#x0441;"> <!-- CYRILLIC SMALL LETTER ES -->
-<!ENTITY Scy	"&#x0421;"> <!-- CYRILLIC CAPITAL LETTER ES -->
-<!ENTITY tcy	"&#x0442;"> <!-- CYRILLIC SMALL LETTER TE -->
-<!ENTITY Tcy	"&#x0422;"> <!-- CYRILLIC CAPITAL LETTER TE -->
-<!ENTITY ucy	"&#x0443;"> <!-- CYRILLIC SMALL LETTER U -->
-<!ENTITY Ucy	"&#x0423;"> <!-- CYRILLIC CAPITAL LETTER U -->
-<!ENTITY fcy	"&#x0444;"> <!-- CYRILLIC SMALL LETTER EF -->
-<!ENTITY Fcy	"&#x0424;"> <!-- CYRILLIC CAPITAL LETTER EF -->
-<!ENTITY khcy	"&#x0445;"> <!-- CYRILLIC SMALL LETTER HA -->
-<!ENTITY KHcy	"&#x0425;"> <!-- CYRILLIC CAPITAL LETTER HA -->
-<!ENTITY tscy	"&#x0446;"> <!-- CYRILLIC SMALL LETTER TSE -->
-<!ENTITY TScy	"&#x0426;"> <!-- CYRILLIC CAPITAL LETTER TSE -->
-<!ENTITY chcy	"&#x0447;"> <!-- CYRILLIC SMALL LETTER CHE -->
-<!ENTITY CHcy	"&#x0427;"> <!-- CYRILLIC CAPITAL LETTER CHE -->
-<!ENTITY shcy	"&#x0448;"> <!-- CYRILLIC SMALL LETTER SHA -->
-<!ENTITY SHcy	"&#x0428;"> <!-- CYRILLIC CAPITAL LETTER SHA -->
-<!ENTITY shchcy	"&#x0449;"> <!-- CYRILLIC SMALL LETTER SHCHA -->
-<!ENTITY SHCHcy	"&#x0429;"> <!-- CYRILLIC CAPITAL LETTER SHCHA -->
-<!ENTITY hardcy	"&#x044A;"> <!-- CYRILLIC SMALL LETTER HARD SIGN -->
-<!ENTITY HARDcy	"&#x042A;"> <!-- CYRILLIC CAPITAL LETTER HARD SIGN -->
-<!ENTITY ycy	"&#x044B;"> <!-- CYRILLIC SMALL LETTER YERU -->
-<!ENTITY Ycy	"&#x042B;"> <!-- CYRILLIC CAPITAL LETTER YERU -->
-<!ENTITY softcy	"&#x044C;"> <!-- CYRILLIC SMALL LETTER SOFT SIGN -->
-<!ENTITY SOFTcy	"&#x042C;"> <!-- CYRILLIC CAPITAL LETTER SOFT SIGN -->
-<!ENTITY ecy	"&#x044D;"> <!-- CYRILLIC SMALL LETTER E -->
-<!ENTITY Ecy	"&#x042D;"> <!-- CYRILLIC CAPITAL LETTER E -->
-<!ENTITY yucy	"&#x044E;"> <!-- CYRILLIC SMALL LETTER YU -->
-<!ENTITY YUcy	"&#x042E;"> <!-- CYRILLIC CAPITAL LETTER YU -->
-<!ENTITY yacy	"&#x044F;"> <!-- CYRILLIC SMALL LETTER YA -->
-<!ENTITY YAcy	"&#x042F;"> <!-- CYRILLIC CAPITAL LETTER YA -->
-<!ENTITY numero	"&#x2116;"> <!-- NUMERO SIGN -->
diff --git a/3.0.4/doc/src/common/ent/iso-cyr2.ent b/3.0.4/doc/src/common/ent/iso-cyr2.ent
deleted file mode 100644
index 3edbde0..0000000
--- a/3.0.4/doc/src/common/ent/iso-cyr2.ent
+++ /dev/null
@@ -1,31 +0,0 @@
-<!-- iso-cyr2.ent (initially distributed with DocBook XML DTD V4.1.1beta1) -->
-
-<!-- Derived from the corresponding ISO 8879 standard entity set
-     and the Unicode character mappings provided by Sebastian Rahtz -->
-
-<!ENTITY djcy	"&#x0452;"> <!-- CYRILLIC SMALL LETTER DJE -->
-<!ENTITY DJcy	"&#x0402;"> <!-- CYRILLIC CAPITAL LETTER DJE -->
-<!ENTITY gjcy	"&#x0453;"> <!-- CYRILLIC SMALL LETTER GJE -->
-<!ENTITY GJcy	"&#x0403;"> <!-- CYRILLIC CAPITAL LETTER GJE -->
-<!ENTITY jukcy	"&#x0454;"> <!-- CYRILLIC SMALL LETTER UKRAINIAN IE -->
-<!ENTITY Jukcy	"&#x0404;"> <!-- CYRILLIC CAPITAL LETTER UKRAINIAN IE -->
-<!ENTITY dscy	"&#x0455;"> <!-- CYRILLIC SMALL LETTER DZE -->
-<!ENTITY DScy	"&#x0405;"> <!-- CYRILLIC CAPITAL LETTER DZE -->
-<!ENTITY iukcy	"&#x0456;"> <!-- CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I -->
-<!ENTITY Iukcy	"&#x0406;"> <!-- CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I -->
-<!ENTITY yicy	"&#x0457;"> <!-- CYRILLIC SMALL LETTER YI -->
-<!ENTITY YIcy	"&#x0407;"> <!-- CYRILLIC CAPITAL LETTER YI -->
-<!ENTITY jsercy	"&#x0458;"> <!-- CYRILLIC SMALL LETTER JE -->
-<!ENTITY Jsercy	"&#x0408;"> <!-- CYRILLIC CAPITAL LETTER JE -->
-<!ENTITY ljcy	"&#x0459;"> <!-- CYRILLIC SMALL LETTER LJE -->
-<!ENTITY LJcy	"&#x0409;"> <!-- CYRILLIC CAPITAL LETTER LJE -->
-<!ENTITY njcy	"&#x045A;"> <!-- CYRILLIC SMALL LETTER NJE -->
-<!ENTITY NJcy	"&#x040A;"> <!-- CYRILLIC CAPITAL LETTER NJE -->
-<!ENTITY tshcy	"&#x045B;"> <!-- CYRILLIC SMALL LETTER TSHE -->
-<!ENTITY TSHcy	"&#x040B;"> <!-- CYRILLIC CAPITAL LETTER TSHE -->
-<!ENTITY kjcy	"&#x045C;"> <!-- CYRILLIC SMALL LETTER KJE -->
-<!ENTITY KJcy	"&#x040C;"> <!-- CYRILLIC CAPITAL LETTER KJE -->
-<!ENTITY ubrcy	"&#x045E;"> <!-- CYRILLIC SMALL LETTER SHORT U -->
-<!ENTITY Ubrcy	"&#x040E;"> <!-- CYRILLIC CAPITAL LETTER SHORT U -->
-<!ENTITY dzcy	"&#x045F;"> <!-- CYRILLIC SMALL LETTER DZHE -->
-<!ENTITY DZcy	"&#x040F;"> <!-- CYRILLIC CAPITAL LETTER DZHE -->
diff --git a/3.0.4/doc/src/common/ent/iso-dia.ent b/3.0.4/doc/src/common/ent/iso-dia.ent
deleted file mode 100644
index 3a4b55c..0000000
--- a/3.0.4/doc/src/common/ent/iso-dia.ent
+++ /dev/null
@@ -1,19 +0,0 @@
-<!-- iso-dia.ent (initially distributed with DocBook XML DTD V4.1.1beta1) -->
-
-<!-- Derived from the corresponding ISO 8879 standard entity set
-     and the Unicode character mappings provided by Sebastian Rahtz -->
-
-<!ENTITY acute	"&#x00B4;"> <!-- ACUTE ACCENT -->
-<!ENTITY breve	"&#x02D8;"> <!-- BREVE -->
-<!ENTITY caron	"&#x02C7;"> <!-- CARON -->
-<!ENTITY cedil	"&#x00B8;"> <!-- CEDILLA -->
-<!ENTITY circ	"&#x005E;"> <!-- RING OPERATOR -->
-<!ENTITY dblac	"&#x02DD;"> <!-- DOUBLE ACUTE ACCENT -->
-<!ENTITY die	"&#x00A8;"> <!--  -->
-<!ENTITY dot	"&#x02D9;"> <!-- DOT ABOVE -->
-<!ENTITY grave	"&#x0060;"> <!-- GRAVE ACCENT -->
-<!ENTITY macr	"&#x00AF;"> <!-- MACRON -->
-<!ENTITY ogon	"&#x02DB;"> <!-- OGONEK -->
-<!ENTITY ring	"&#x02DA;"> <!-- RING ABOVE -->
-<!ENTITY tilde	"&#x02DC;"> <!-- TILDE -->
-<!ENTITY uml	"&#x00A8;"> <!--  -->
diff --git a/3.0.4/doc/src/common/ent/iso-grk1.ent b/3.0.4/doc/src/common/ent/iso-grk1.ent
deleted file mode 100644
index b040985..0000000
--- a/3.0.4/doc/src/common/ent/iso-grk1.ent
+++ /dev/null
@@ -1,54 +0,0 @@
-<!-- iso-grk1.ent (initially distributed with DocBook XML DTD V4.1.1beta1) -->
-
-<!-- Derived from the corresponding ISO 8879 standard entity set
-     and the Unicode character mappings provided by Sebastian Rahtz -->
-
-<!ENTITY agr	"&#x03B1;"> <!--  -->
-<!ENTITY Agr	"&#x0391;"> <!-- GREEK CAPITAL LETTER ALPHA -->
-<!ENTITY bgr	"&#x03B2;"> <!-- GREEK SMALL LETTER BETA -->
-<!ENTITY Bgr	"&#x0392;"> <!-- GREEK CAPITAL LETTER BETA -->
-<!ENTITY ggr	"&#x03B3;"> <!-- GREEK SMALL LETTER GAMMA -->
-<!ENTITY Ggr	"&#x0393;"> <!-- GREEK CAPITAL LETTER GAMMA -->
-<!ENTITY dgr	"&#x03B4;"> <!-- GREEK SMALL LETTER DELTA -->
-<!ENTITY Dgr	"&#x0394;"> <!-- GREEK CAPITAL LETTER DELTA -->
-<!ENTITY egr	"&#x03B5;"> <!--  -->
-<!ENTITY Egr	"&#x0395;"> <!-- GREEK CAPITAL LETTER EPSILON -->
-<!ENTITY zgr	"&#x03B6;"> <!-- GREEK SMALL LETTER ZETA -->
-<!ENTITY Zgr	"&#x0396;"> <!-- GREEK CAPITAL LETTER ZETA -->
-<!ENTITY eegr	"&#x03B7;"> <!-- GREEK SMALL LETTER ETA -->
-<!ENTITY EEgr	"&#x0397;"> <!-- GREEK CAPITAL LETTER ETA -->
-<!ENTITY thgr	"&#x03B8;"> <!--  -->
-<!ENTITY THgr	"&#x0398;"> <!-- GREEK CAPITAL LETTER THETA -->
-<!ENTITY igr	"&#x03B9;"> <!-- GREEK SMALL LETTER IOTA -->
-<!ENTITY Igr	"&#x0399;"> <!-- GREEK CAPITAL LETTER IOTA -->
-<!ENTITY kgr	"&#x03BA;"> <!-- GREEK SMALL LETTER KAPPA -->
-<!ENTITY Kgr	"&#x039A;"> <!-- GREEK CAPITAL LETTER KAPPA -->
-<!ENTITY lgr	"&#x03BB;"> <!-- GREEK SMALL LETTER LAMDA -->
-<!ENTITY Lgr	"&#x039B;"> <!-- GREEK CAPITAL LETTER LAMDA -->
-<!ENTITY mgr	"&#x03BC;"> <!-- GREEK SMALL LETTER MU -->
-<!ENTITY Mgr	"&#x039C;"> <!-- GREEK CAPITAL LETTER MU -->
-<!ENTITY ngr	"&#x03BD;"> <!-- GREEK SMALL LETTER NU -->
-<!ENTITY Ngr	"&#x039D;"> <!-- GREEK CAPITAL LETTER NU -->
-<!ENTITY xgr	"&#x03BE;"> <!-- GREEK SMALL LETTER XI -->
-<!ENTITY Xgr	"&#x039E;"> <!-- GREEK CAPITAL LETTER XI -->
-<!ENTITY ogr	"&#x03BF;"> <!-- GREEK SMALL LETTER OMICRON -->
-<!ENTITY Ogr	"&#x039F;"> <!-- GREEK CAPITAL LETTER OMICRON -->
-<!ENTITY pgr	"&#x03C0;"> <!-- GREEK SMALL LETTER PI -->
-<!ENTITY Pgr	"&#x03A0;"> <!-- GREEK CAPITAL LETTER PI -->
-<!ENTITY rgr	"&#x03C1;"> <!-- GREEK SMALL LETTER RHO -->
-<!ENTITY Rgr	"&#x03A1;"> <!-- GREEK CAPITAL LETTER RHO -->
-<!ENTITY sgr	"&#x03C3;"> <!-- GREEK SMALL LETTER SIGMA -->
-<!ENTITY Sgr	"&#x03A3;"> <!-- GREEK CAPITAL LETTER SIGMA -->
-<!ENTITY sfgr	"&#x03C2;"> <!--  -->
-<!ENTITY tgr	"&#x03C4;"> <!-- GREEK SMALL LETTER TAU -->
-<!ENTITY Tgr	"&#x03A4;"> <!-- GREEK CAPITAL LETTER TAU -->
-<!ENTITY ugr	"&#x03C5;"> <!-- GREEK SMALL LETTER UPSILON -->
-<!ENTITY Ugr	"&#x03A5;"> <!--  -->
-<!ENTITY phgr	"&#x03C6;"> <!-- GREEK SMALL LETTER PHI -->
-<!ENTITY PHgr	"&#x03A6;"> <!-- GREEK CAPITAL LETTER PHI -->
-<!ENTITY khgr	"&#x03C7;"> <!-- GREEK SMALL LETTER CHI -->
-<!ENTITY KHgr	"&#x03A7;"> <!-- GREEK CAPITAL LETTER CHI -->
-<!ENTITY psgr	"&#x03C8;"> <!-- GREEK SMALL LETTER PSI -->
-<!ENTITY PSgr	"&#x03A8;"> <!-- GREEK CAPITAL LETTER PSI -->
-<!ENTITY ohgr	"&#x03C9;"> <!-- GREEK SMALL LETTER OMEGA -->
-<!ENTITY OHgr	"&#x03A9;"> <!-- GREEK CAPITAL LETTER OMEGA -->
diff --git a/3.0.4/doc/src/common/ent/iso-grk2.ent b/3.0.4/doc/src/common/ent/iso-grk2.ent
deleted file mode 100644
index 63de411..0000000
--- a/3.0.4/doc/src/common/ent/iso-grk2.ent
+++ /dev/null
@@ -1,25 +0,0 @@
-<!-- iso-grk2.ent (initially distributed with DocBook XML DTD V4.1.1beta1) -->
-
-<!-- Derived from the corresponding ISO 8879 standard entity set
-     and the Unicode character mappings provided by Sebastian Rahtz -->
-
-<!ENTITY aacgr	"&#x03AC;"> <!-- GREEK SMALL LETTER ALPHA WITH TONOS -->
-<!ENTITY Aacgr	"&#x0386;"> <!-- GREEK CAPITAL LETTER ALPHA WITH TONOS -->
-<!ENTITY eacgr	"&#x03AD;"> <!-- GREEK SMALL LETTER EPSILON WITH TONOS -->
-<!ENTITY Eacgr	"&#x0388;"> <!-- GREEK CAPITAL LETTER EPSILON WITH TONOS -->
-<!ENTITY eeacgr	"&#x03AE;"> <!-- GREEK SMALL LETTER ETA WITH TONOS -->
-<!ENTITY EEacgr	"&#x0389;"> <!-- GREEK CAPITAL LETTER ETA WITH TONOS -->
-<!ENTITY idigr	"&#x03CA;"> <!-- GREEK SMALL LETTER IOTA WITH DIALYTIKA -->
-<!ENTITY Idigr	"&#x03AA;"> <!-- GREEK CAPITAL LETTER IOTA WITH DIALYTIKA -->
-<!ENTITY iacgr	"&#x03AF;"> <!-- GREEK SMALL LETTER IOTA WITH TONOS -->
-<!ENTITY Iacgr	"&#x038A;"> <!-- GREEK CAPITAL LETTER IOTA WITH TONOS -->
-<!ENTITY idiagr	"&#x0390;"> <!-- GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS -->
-<!ENTITY oacgr	"&#x03CC;"> <!-- GREEK SMALL LETTER OMICRON WITH TONOS -->
-<!ENTITY Oacgr	"&#x038C;"> <!-- GREEK CAPITAL LETTER OMICRON WITH TONOS -->
-<!ENTITY udigr	"&#x03CB;"> <!-- GREEK SMALL LETTER UPSILON WITH DIALYTIKA -->
-<!ENTITY Udigr	"&#x03AB;"> <!-- GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA -->
-<!ENTITY uacgr	"&#x03CD;"> <!-- GREEK SMALL LETTER UPSILON WITH TONOS -->
-<!ENTITY Uacgr	"&#x038E;"> <!-- GREEK CAPITAL LETTER UPSILON WITH TONOS -->
-<!ENTITY udiagr	"&#x03B0;"> <!-- GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS -->
-<!ENTITY ohacgr	"&#x03CE;"> <!-- GREEK SMALL LETTER OMEGA WITH TONOS -->
-<!ENTITY OHacgr	"&#x038F;"> <!-- GREEK CAPITAL LETTER OMEGA WITH TONOS -->
diff --git a/3.0.4/doc/src/common/ent/iso-grk3.ent b/3.0.4/doc/src/common/ent/iso-grk3.ent
deleted file mode 100644
index b59c53c..0000000
--- a/3.0.4/doc/src/common/ent/iso-grk3.ent
+++ /dev/null
@@ -1,48 +0,0 @@
-<!-- iso-grk3.ent (initially distributed with DocBook XML DTD V4.1.1beta1) -->
-
-<!-- Derived from the corresponding ISO 8879 standard entity set
-     and the Unicode character mappings provided by Sebastian Rahtz -->
-
-<!ENTITY alpha	"&#x03B1;"> <!--  -->
-<!ENTITY beta	"&#x03B2;"> <!-- GREEK SMALL LETTER BETA -->
-<!ENTITY gamma	"&#x03B3;"> <!-- GREEK SMALL LETTER GAMMA -->
-<!ENTITY Gamma	"&#x0393;"> <!-- GREEK CAPITAL LETTER GAMMA -->
-<!ENTITY gammad	"&#x03DC;"> <!-- GREEK LETTER DIGAMMA -->
-<!ENTITY delta	"&#x03B4;"> <!-- GREEK SMALL LETTER DELTA -->
-<!ENTITY Delta	"&#x0394;"> <!-- GREEK CAPITAL LETTER DELTA -->
-<!ENTITY epsi	"&#x220A;"> <!--  -->
-<!ENTITY epsiv	"&#x03B5;"> <!--  -->
-<!ENTITY epsis	"&#x220A;"> <!--  -->
-<!ENTITY zeta	"&#x03B6;"> <!-- GREEK SMALL LETTER ZETA -->
-<!ENTITY eta	"&#x03B7;"> <!-- GREEK SMALL LETTER ETA -->
-<!ENTITY thetas	"&#x03B8;"> <!--  -->
-<!ENTITY Theta	"&#x0398;"> <!-- GREEK CAPITAL LETTER THETA -->
-<!ENTITY thetav	"&#x03D1;"> <!--  -->
-<!ENTITY iota	"&#x03B9;"> <!-- GREEK SMALL LETTER IOTA -->
-<!ENTITY kappa	"&#x03BA;"> <!-- GREEK SMALL LETTER KAPPA -->
-<!ENTITY kappav	"&#x03F0;"> <!-- GREEK KAPPA SYMBOL -->
-<!ENTITY lambda	"&#x03BB;"> <!-- GREEK SMALL LETTER LAMDA -->
-<!ENTITY Lambda	"&#x039B;"> <!-- GREEK CAPITAL LETTER LAMDA -->
-<!ENTITY mu	"&#x03BC;"> <!-- GREEK SMALL LETTER MU -->
-<!ENTITY nu	"&#x03BD;"> <!-- GREEK SMALL LETTER NU -->
-<!ENTITY xi	"&#x03BE;"> <!-- GREEK SMALL LETTER XI -->
-<!ENTITY Xi	"&#x039E;"> <!-- GREEK CAPITAL LETTER XI -->
-<!ENTITY pi	"&#x03C0;"> <!-- GREEK SMALL LETTER PI -->
-<!ENTITY piv	"&#x03D6;"> <!-- GREEK PI SYMBOL -->
-<!ENTITY Pi	"&#x03A0;"> <!-- GREEK CAPITAL LETTER PI -->
-<!ENTITY rho	"&#x03C1;"> <!-- GREEK SMALL LETTER RHO -->
-<!ENTITY rhov	"&#x03F1;"> <!-- GREEK RHO SYMBOL -->
-<!ENTITY sigma	"&#x03C3;"> <!-- GREEK SMALL LETTER SIGMA -->
-<!ENTITY Sigma	"&#x03A3;"> <!-- GREEK CAPITAL LETTER SIGMA -->
-<!ENTITY sigmav	"&#x03C2;"> <!--  -->
-<!ENTITY tau	"&#x03C4;"> <!-- GREEK SMALL LETTER TAU -->
-<!ENTITY upsi	"&#x03C5;"> <!-- GREEK SMALL LETTER UPSILON -->
-<!ENTITY Upsi	"&#x03D2;"> <!--  -->
-<!ENTITY phis	"&#x03C6;"> <!-- GREEK SMALL LETTER PHI -->
-<!ENTITY Phi	"&#x03A6;"> <!-- GREEK CAPITAL LETTER PHI -->
-<!ENTITY phiv	"&#x03D5;"> <!-- GREEK PHI SYMBOL -->
-<!ENTITY chi	"&#x03C7;"> <!-- GREEK SMALL LETTER CHI -->
-<!ENTITY psi	"&#x03C8;"> <!-- GREEK SMALL LETTER PSI -->
-<!ENTITY Psi	"&#x03A8;"> <!-- GREEK CAPITAL LETTER PSI -->
-<!ENTITY omega	"&#x03C9;"> <!-- GREEK SMALL LETTER OMEGA -->
-<!ENTITY Omega	"&#x03A9;"> <!-- GREEK CAPITAL LETTER OMEGA -->
diff --git a/3.0.4/doc/src/common/ent/iso-grk4.ent b/3.0.4/doc/src/common/ent/iso-grk4.ent
deleted file mode 100644
index ace7c81..0000000
--- a/3.0.4/doc/src/common/ent/iso-grk4.ent
+++ /dev/null
@@ -1,48 +0,0 @@
-<!-- iso-grk4.ent (initially distributed with DocBook XML DTD V4.1.1beta1) -->
-
-<!-- Derived from the corresponding ISO 8879 standard entity set
-     and the Unicode character mappings provided by Sebastian Rahtz -->
-
-<!ENTITY b.alpha	"&#x03B1;"> <!--  -->
-<!ENTITY b.beta	"&#x03B2;"> <!-- GREEK SMALL LETTER BETA -->
-<!ENTITY b.gamma	"&#x03B3;"> <!-- GREEK SMALL LETTER GAMMA -->
-<!ENTITY b.Gamma	"&#x0393;"> <!-- GREEK CAPITAL LETTER GAMMA -->
-<!ENTITY b.gammad	"&#x03DC;"> <!-- GREEK LETTER DIGAMMA -->
-<!ENTITY b.delta	"&#x03B4;"> <!-- GREEK SMALL LETTER DELTA -->
-<!ENTITY b.Delta	"&#x0394;"> <!-- GREEK CAPITAL LETTER DELTA -->
-<!ENTITY b.epsi	"&#x03B5;"> <!--  -->
-<!ENTITY b.epsiv	"&#x03B5;"> <!--  -->
-<!ENTITY b.epsis	"&#x03B5;"> <!--  -->
-<!ENTITY b.zeta	"&#x03B6;"> <!-- GREEK SMALL LETTER ZETA -->
-<!ENTITY b.eta	"&#x03B7;"> <!-- GREEK SMALL LETTER ETA -->
-<!ENTITY b.thetas	"&#x03B8;"> <!--  -->
-<!ENTITY b.Theta	"&#x0398;"> <!-- GREEK CAPITAL LETTER THETA -->
-<!ENTITY b.thetav	"&#x03D1;"> <!--  -->
-<!ENTITY b.iota	"&#x03B9;"> <!-- GREEK SMALL LETTER IOTA -->
-<!ENTITY b.kappa	"&#x03BA;"> <!-- GREEK SMALL LETTER KAPPA -->
-<!ENTITY b.kappav	"&#x03F0;"> <!-- GREEK KAPPA SYMBOL -->
-<!ENTITY b.lambda	"&#x03BB;"> <!-- GREEK SMALL LETTER LAMDA -->
-<!ENTITY b.Lambda	"&#x039B;"> <!-- GREEK CAPITAL LETTER LAMDA -->
-<!ENTITY b.mu	"&#x03BC;"> <!-- GREEK SMALL LETTER MU -->
-<!ENTITY b.nu	"&#x03BD;"> <!-- GREEK SMALL LETTER NU -->
-<!ENTITY b.xi	"&#x03BE;"> <!-- GREEK SMALL LETTER XI -->
-<!ENTITY b.Xi	"&#x039E;"> <!-- GREEK CAPITAL LETTER XI -->
-<!ENTITY b.pi	"&#x03C0;"> <!-- GREEK SMALL LETTER PI -->
-<!ENTITY b.Pi	"&#x03A0;"> <!-- GREEK CAPITAL LETTER PI -->
-<!ENTITY b.piv	"&#x03D6;"> <!-- GREEK PI SYMBOL -->
-<!ENTITY b.rho	"&#x03C1;"> <!-- GREEK SMALL LETTER RHO -->
-<!ENTITY b.rhov	"&#x03F1;"> <!-- GREEK RHO SYMBOL -->
-<!ENTITY b.sigma	"&#x03C3;"> <!-- GREEK SMALL LETTER SIGMA -->
-<!ENTITY b.Sigma	"&#x03A3;"> <!-- GREEK CAPITAL LETTER SIGMA -->
-<!ENTITY b.sigmav	"&#x03C2;"> <!--  -->
-<!ENTITY b.tau	"&#x03C4;"> <!-- GREEK SMALL LETTER TAU -->
-<!ENTITY b.upsi	"&#x03C5;"> <!-- GREEK SMALL LETTER UPSILON -->
-<!ENTITY b.Upsi	"&#x03D2;"> <!--  -->
-<!ENTITY b.phis	"&#x03C6;"> <!-- GREEK SMALL LETTER PHI -->
-<!ENTITY b.Phi	"&#x03A6;"> <!-- GREEK CAPITAL LETTER PHI -->
-<!ENTITY b.phiv	"&#x03D5;"> <!-- GREEK PHI SYMBOL -->
-<!ENTITY b.chi	"&#x03C7;"> <!-- GREEK SMALL LETTER CHI -->
-<!ENTITY b.psi	"&#x03C8;"> <!-- GREEK SMALL LETTER PSI -->
-<!ENTITY b.Psi	"&#x03A8;"> <!-- GREEK CAPITAL LETTER PSI -->
-<!ENTITY b.omega	"&#x03C9;"> <!-- GREEK SMALL LETTER OMEGA -->
-<!ENTITY b.Omega	"&#x03A9;"> <!-- GREEK CAPITAL LETTER OMEGA -->
diff --git a/3.0.4/doc/src/common/ent/iso-lat1.ent b/3.0.4/doc/src/common/ent/iso-lat1.ent
deleted file mode 100644
index 2ec16ff..0000000
--- a/3.0.4/doc/src/common/ent/iso-lat1.ent
+++ /dev/null
@@ -1,67 +0,0 @@
-<!-- iso-lat1.ent (initially distributed with DocBook XML DTD V4.1.1beta1) -->
-
-<!-- Derived from the corresponding ISO 8879 standard entity set
-     and the Unicode character mappings provided by Sebastian Rahtz -->
-
-<!ENTITY aacute	"&#x00E1;"> <!-- LATIN SMALL LETTER A WITH ACUTE -->
-<!ENTITY Aacute	"&#x00C1;"> <!-- LATIN CAPITAL LETTER A WITH ACUTE -->
-<!ENTITY acirc	"&#x00E2;"> <!-- LATIN SMALL LETTER A WITH CIRCUMFLEX -->
-<!ENTITY Acirc	"&#x00C2;"> <!-- LATIN CAPITAL LETTER A WITH CIRCUMFLEX -->
-<!ENTITY agrave	"&#x00E0;"> <!-- LATIN SMALL LETTER A WITH GRAVE -->
-<!ENTITY Agrave	"&#x00C0;"> <!-- LATIN CAPITAL LETTER A WITH GRAVE -->
-<!ENTITY aring	"&#x00E5;"> <!-- LATIN SMALL LETTER A WITH RING ABOVE -->
-<!ENTITY Aring	"&#x00C5;"> <!-- LATIN CAPITAL LETTER A WITH RING ABOVE -->
-<!ENTITY atilde	"&#x00E3;"> <!-- LATIN SMALL LETTER A WITH TILDE -->
-<!ENTITY Atilde	"&#x00C3;"> <!-- LATIN CAPITAL LETTER A WITH TILDE -->
-<!ENTITY auml	"&#x00E4;"> <!-- LATIN SMALL LETTER A WITH DIAERESIS -->
-<!ENTITY Auml	"&#x00C4;"> <!-- LATIN CAPITAL LETTER A WITH DIAERESIS -->
-<!ENTITY aelig	"&#x00E6;"> <!-- LATIN SMALL LETTER AE -->
-<!ENTITY AElig	"&#x00C6;"> <!-- LATIN CAPITAL LETTER AE -->
-<!ENTITY ccedil	"&#x00E7;"> <!-- LATIN SMALL LETTER C WITH CEDILLA -->
-<!ENTITY Ccedil	"&#x00C7;"> <!-- LATIN CAPITAL LETTER C WITH CEDILLA -->
-<!ENTITY eth	"&#x00F0;"> <!-- LATIN SMALL LETTER ETH -->
-<!ENTITY ETH	"&#x00D0;"> <!-- LATIN CAPITAL LETTER ETH -->
-<!ENTITY eacute	"&#x00E9;"> <!-- LATIN SMALL LETTER E WITH ACUTE -->
-<!ENTITY Eacute	"&#x00C9;"> <!-- LATIN CAPITAL LETTER E WITH ACUTE -->
-<!ENTITY ecirc	"&#x00EA;"> <!-- LATIN SMALL LETTER E WITH CIRCUMFLEX -->
-<!ENTITY Ecirc	"&#x00CA;"> <!-- LATIN CAPITAL LETTER E WITH CIRCUMFLEX -->
-<!ENTITY egrave	"&#x00E8;"> <!-- LATIN SMALL LETTER E WITH GRAVE -->
-<!ENTITY Egrave	"&#x00C8;"> <!-- LATIN CAPITAL LETTER E WITH GRAVE -->
-<!ENTITY euml	"&#x00EB;"> <!-- LATIN SMALL LETTER E WITH DIAERESIS -->
-<!ENTITY Euml	"&#x00CB;"> <!-- LATIN CAPITAL LETTER E WITH DIAERESIS -->
-<!ENTITY iacute	"&#x00ED;"> <!-- LATIN SMALL LETTER I WITH ACUTE -->
-<!ENTITY Iacute	"&#x00CD;"> <!-- LATIN CAPITAL LETTER I WITH ACUTE -->
-<!ENTITY icirc	"&#x00EE;"> <!-- LATIN SMALL LETTER I WITH CIRCUMFLEX -->
-<!ENTITY Icirc	"&#x00CE;"> <!-- LATIN CAPITAL LETTER I WITH CIRCUMFLEX -->
-<!ENTITY igrave	"&#x00EC;"> <!-- LATIN SMALL LETTER I WITH GRAVE -->
-<!ENTITY Igrave	"&#x00CC;"> <!-- LATIN CAPITAL LETTER I WITH GRAVE -->
-<!ENTITY iuml	"&#x00EF;"> <!-- LATIN SMALL LETTER I WITH DIAERESIS -->
-<!ENTITY Iuml	"&#x00CF;"> <!-- LATIN CAPITAL LETTER I WITH DIAERESIS -->
-<!ENTITY ntilde	"&#x00F1;"> <!-- LATIN SMALL LETTER N WITH TILDE -->
-<!ENTITY Ntilde	"&#x00D1;"> <!-- LATIN CAPITAL LETTER N WITH TILDE -->
-<!ENTITY oacute	"&#x00F3;"> <!-- LATIN SMALL LETTER O WITH ACUTE -->
-<!ENTITY Oacute	"&#x00D3;"> <!-- LATIN CAPITAL LETTER O WITH ACUTE -->
-<!ENTITY ocirc	"&#x00F4;"> <!-- LATIN SMALL LETTER O WITH CIRCUMFLEX -->
-<!ENTITY Ocirc	"&#x00D4;"> <!-- LATIN CAPITAL LETTER O WITH CIRCUMFLEX -->
-<!ENTITY ograve	"&#x00F2;"> <!-- LATIN SMALL LETTER O WITH GRAVE -->
-<!ENTITY Ograve	"&#x00D2;"> <!-- LATIN CAPITAL LETTER O WITH GRAVE -->
-<!ENTITY oslash	"&#x00F8;"> <!-- CIRCLED DIVISION SLASH -->
-<!ENTITY Oslash	"&#x00D8;"> <!-- LATIN CAPITAL LETTER O WITH STROKE -->
-<!ENTITY otilde	"&#x00F5;"> <!-- LATIN SMALL LETTER O WITH TILDE -->
-<!ENTITY Otilde	"&#x00D5;"> <!-- LATIN CAPITAL LETTER O WITH TILDE -->
-<!ENTITY ouml	"&#x00F6;"> <!-- LATIN SMALL LETTER O WITH DIAERESIS -->
-<!ENTITY Ouml	"&#x00D6;"> <!-- LATIN CAPITAL LETTER O WITH DIAERESIS -->
-<!ENTITY szlig	"&#x00DF;"> <!-- LATIN SMALL LETTER SHARP S -->
-<!ENTITY thorn	"&#x00FE;"> <!-- LATIN SMALL LETTER THORN -->
-<!ENTITY THORN	"&#x00DE;"> <!-- LATIN CAPITAL LETTER THORN -->
-<!ENTITY uacute	"&#x00FA;"> <!-- LATIN SMALL LETTER U WITH ACUTE -->
-<!ENTITY Uacute	"&#x00DA;"> <!-- LATIN CAPITAL LETTER U WITH ACUTE -->
-<!ENTITY ucirc	"&#x00FB;"> <!-- LATIN SMALL LETTER U WITH CIRCUMFLEX -->
-<!ENTITY Ucirc	"&#x00DB;"> <!-- LATIN CAPITAL LETTER U WITH CIRCUMFLEX -->
-<!ENTITY ugrave	"&#x00F9;"> <!-- LATIN SMALL LETTER U WITH GRAVE -->
-<!ENTITY Ugrave	"&#x00D9;"> <!-- LATIN CAPITAL LETTER U WITH GRAVE -->
-<!ENTITY uuml	"&#x00FC;"> <!-- LATIN SMALL LETTER U WITH DIAERESIS -->
-<!ENTITY Uuml	"&#x00DC;"> <!-- LATIN CAPITAL LETTER U WITH DIAERESIS -->
-<!ENTITY yacute	"&#x00FD;"> <!-- LATIN SMALL LETTER Y WITH ACUTE -->
-<!ENTITY Yacute	"&#x00DD;"> <!-- LATIN CAPITAL LETTER Y WITH ACUTE -->
-<!ENTITY yuml	"&#x00FF;"> <!-- LATIN SMALL LETTER Y WITH DIAERESIS -->
diff --git a/3.0.4/doc/src/common/ent/iso-lat2.ent b/3.0.4/doc/src/common/ent/iso-lat2.ent
deleted file mode 100644
index e94ec18..0000000
--- a/3.0.4/doc/src/common/ent/iso-lat2.ent
+++ /dev/null
@@ -1,126 +0,0 @@
-<!-- iso-lat2.ent (initially distributed with DocBook XML DTD V4.1.1beta1) -->
-
-<!-- Derived from the corresponding ISO 8879 standard entity set
-     and the Unicode character mappings provided by Sebastian Rahtz -->
-
-<!ENTITY abreve	"&#x0103;"> <!-- LATIN SMALL LETTER A WITH BREVE -->
-<!ENTITY Abreve	"&#x0102;"> <!-- LATIN CAPITAL LETTER A WITH BREVE -->
-<!ENTITY amacr	"&#x0101;"> <!-- LATIN SMALL LETTER A WITH MACRON -->
-<!ENTITY Amacr	"&#x0100;"> <!-- LATIN CAPITAL LETTER A WITH MACRON -->
-<!ENTITY aogon	"&#x0105;"> <!-- LATIN SMALL LETTER A WITH OGONEK -->
-<!ENTITY Aogon	"&#x0104;"> <!-- LATIN CAPITAL LETTER A WITH OGONEK -->
-<!ENTITY cacute	"&#x0107;"> <!-- LATIN SMALL LETTER C WITH ACUTE -->
-<!ENTITY Cacute	"&#x0106;"> <!-- LATIN CAPITAL LETTER C WITH ACUTE -->
-<!ENTITY ccaron	"&#x010D;"> <!-- LATIN SMALL LETTER C WITH CARON -->
-<!ENTITY Ccaron	"&#x010C;"> <!-- LATIN CAPITAL LETTER C WITH CARON -->
-<!ENTITY ccirc	"&#x0109;"> <!-- LATIN SMALL LETTER C WITH CIRCUMFLEX -->
-<!ENTITY Ccirc	"&#x0108;"> <!-- LATIN CAPITAL LETTER C WITH CIRCUMFLEX -->
-<!ENTITY cdot	"&#x010B;"> <!-- DOT OPERATOR -->
-<!ENTITY Cdot	"&#x010A;"> <!-- LATIN CAPITAL LETTER C WITH DOT ABOVE -->
-<!ENTITY dcaron	"&#x010F;"> <!-- LATIN SMALL LETTER D WITH CARON -->
-<!ENTITY Dcaron	"&#x010E;"> <!-- LATIN CAPITAL LETTER D WITH CARON -->
-<!ENTITY dstrok	"&#x0111;"> <!-- LATIN SMALL LETTER D WITH STROKE -->
-<!ENTITY Dstrok	"&#x0110;"> <!-- LATIN CAPITAL LETTER D WITH STROKE -->
-<!ENTITY ecaron	"&#x011B;"> <!-- LATIN SMALL LETTER E WITH CARON -->
-<!ENTITY Ecaron	"&#x011A;"> <!-- LATIN CAPITAL LETTER E WITH CARON -->
-<!ENTITY edot	"&#x0117;"> <!-- LATIN SMALL LETTER E WITH DOT ABOVE -->
-<!ENTITY Edot	"&#x0116;"> <!-- LATIN CAPITAL LETTER E WITH DOT ABOVE -->
-<!ENTITY emacr	"&#x0113;"> <!-- LATIN SMALL LETTER E WITH MACRON -->
-<!ENTITY Emacr	"&#x0112;"> <!-- LATIN CAPITAL LETTER E WITH MACRON -->
-<!ENTITY eogon	"&#x0119;"> <!-- LATIN SMALL LETTER E WITH OGONEK -->
-<!ENTITY Eogon	"&#x0118;"> <!-- LATIN CAPITAL LETTER E WITH OGONEK -->
-<!ENTITY gacute	"&#x01F5;"> <!-- LATIN SMALL LETTER G WITH ACUTE -->
-<!ENTITY gbreve	"&#x011F;"> <!-- LATIN SMALL LETTER G WITH BREVE -->
-<!ENTITY Gbreve	"&#x011E;"> <!-- LATIN CAPITAL LETTER G WITH BREVE -->
-<!ENTITY Gcedil	"&#x0122;"> <!-- LATIN CAPITAL LETTER G WITH CEDILLA -->
-<!ENTITY gcirc	"&#x011D;"> <!-- LATIN SMALL LETTER G WITH CIRCUMFLEX -->
-<!ENTITY Gcirc	"&#x011C;"> <!-- LATIN CAPITAL LETTER G WITH CIRCUMFLEX -->
-<!ENTITY gdot	"&#x0121;"> <!-- LATIN SMALL LETTER G WITH DOT ABOVE -->
-<!ENTITY Gdot	"&#x0120;"> <!-- LATIN CAPITAL LETTER G WITH DOT ABOVE -->
-<!ENTITY hcirc	"&#x0125;"> <!-- LATIN SMALL LETTER H WITH CIRCUMFLEX -->
-<!ENTITY Hcirc	"&#x0124;"> <!-- LATIN CAPITAL LETTER H WITH CIRCUMFLEX -->
-<!ENTITY hstrok	"&#x0127;"> <!-- LATIN SMALL LETTER H WITH STROKE -->
-<!ENTITY Hstrok	"&#x0126;"> <!-- LATIN CAPITAL LETTER H WITH STROKE -->
-<!ENTITY Idot	"&#x0130;"> <!-- LATIN CAPITAL LETTER I WITH DOT ABOVE -->
-<!ENTITY Imacr	"&#x012A;"> <!-- LATIN CAPITAL LETTER I WITH MACRON -->
-<!ENTITY imacr	"&#x012B;"> <!-- LATIN SMALL LETTER I WITH MACRON -->
-<!ENTITY ijlig	"&#x0133;"> <!-- LATIN SMALL LIGATURE IJ -->
-<!ENTITY IJlig	"&#x0132;"> <!-- LATIN CAPITAL LIGATURE IJ -->
-<!ENTITY inodot	"&#x0131;"> <!-- LATIN SMALL LETTER DOTLESS I -->
-<!ENTITY iogon	"&#x012F;"> <!-- LATIN SMALL LETTER I WITH OGONEK -->
-<!ENTITY Iogon	"&#x012E;"> <!-- LATIN CAPITAL LETTER I WITH OGONEK -->
-<!ENTITY itilde	"&#x0129;"> <!-- LATIN SMALL LETTER I WITH TILDE -->
-<!ENTITY Itilde	"&#x0128;"> <!-- LATIN CAPITAL LETTER I WITH TILDE -->
-<!ENTITY jcirc	"&#x0135;"> <!-- LATIN SMALL LETTER J WITH CIRCUMFLEX -->
-<!ENTITY Jcirc	"&#x0134;"> <!-- LATIN CAPITAL LETTER J WITH CIRCUMFLEX -->
-<!ENTITY kcedil	"&#x0137;"> <!-- LATIN SMALL LETTER K WITH CEDILLA -->
-<!ENTITY Kcedil	"&#x0136;"> <!-- LATIN CAPITAL LETTER K WITH CEDILLA -->
-<!ENTITY kgreen	"&#x0138;"> <!-- LATIN SMALL LETTER KRA -->
-<!ENTITY lacute	"&#x013A;"> <!-- LATIN SMALL LETTER L WITH ACUTE -->
-<!ENTITY Lacute	"&#x0139;"> <!-- LATIN CAPITAL LETTER L WITH ACUTE -->
-<!ENTITY lcaron	"&#x013E;"> <!-- LATIN SMALL LETTER L WITH CARON -->
-<!ENTITY Lcaron	"&#x013D;"> <!-- LATIN CAPITAL LETTER L WITH CARON -->
-<!ENTITY lcedil	"&#x013C;"> <!-- LATIN SMALL LETTER L WITH CEDILLA -->
-<!ENTITY Lcedil	"&#x013B;"> <!-- LATIN CAPITAL LETTER L WITH CEDILLA -->
-<!ENTITY lmidot	"&#x0140;"> <!-- LATIN SMALL LETTER L WITH MIDDLE DOT -->
-<!ENTITY Lmidot	"&#x013F;"> <!-- LATIN CAPITAL LETTER L WITH MIDDLE DOT -->
-<!ENTITY lstrok	"&#x0142;"> <!-- LATIN SMALL LETTER L WITH STROKE -->
-<!ENTITY Lstrok	"&#x0141;"> <!-- LATIN CAPITAL LETTER L WITH STROKE -->
-<!ENTITY nacute	"&#x0144;"> <!-- LATIN SMALL LETTER N WITH ACUTE -->
-<!ENTITY Nacute	"&#x0143;"> <!-- LATIN CAPITAL LETTER N WITH ACUTE -->
-<!ENTITY eng	"&#x014B;"> <!-- LATIN SMALL LETTER ENG -->
-<!ENTITY ENG	"&#x014A;"> <!-- LATIN CAPITAL LETTER ENG -->
-<!ENTITY napos	"&#x0149;"> <!-- LATIN SMALL LETTER N PRECEDED BY APOSTROPHE -->
-<!ENTITY ncaron	"&#x0148;"> <!-- LATIN SMALL LETTER N WITH CARON -->
-<!ENTITY Ncaron	"&#x0147;"> <!-- LATIN CAPITAL LETTER N WITH CARON -->
-<!ENTITY ncedil	"&#x0146;"> <!-- LATIN SMALL LETTER N WITH CEDILLA -->
-<!ENTITY Ncedil	"&#x0145;"> <!-- LATIN CAPITAL LETTER N WITH CEDILLA -->
-<!ENTITY odblac	"&#x0151;"> <!-- LATIN SMALL LETTER O WITH DOUBLE ACUTE -->
-<!ENTITY Odblac	"&#x0150;"> <!-- LATIN CAPITAL LETTER O WITH DOUBLE ACUTE -->
-<!ENTITY Omacr	"&#x014C;"> <!-- LATIN CAPITAL LETTER O WITH MACRON -->
-<!ENTITY omacr	"&#x014D;"> <!-- LATIN SMALL LETTER O WITH MACRON -->
-<!ENTITY oelig	"&#x0153;"> <!-- LATIN SMALL LIGATURE OE -->
-<!ENTITY OElig	"&#x0152;"> <!-- LATIN CAPITAL LIGATURE OE -->
-<!ENTITY racute	"&#x0155;"> <!-- LATIN SMALL LETTER R WITH ACUTE -->
-<!ENTITY Racute	"&#x0154;"> <!-- LATIN CAPITAL LETTER R WITH ACUTE -->
-<!ENTITY rcaron	"&#x0159;"> <!-- LATIN SMALL LETTER R WITH CARON -->
-<!ENTITY Rcaron	"&#x0158;"> <!-- LATIN CAPITAL LETTER R WITH CARON -->
-<!ENTITY rcedil	"&#x0157;"> <!-- LATIN SMALL LETTER R WITH CEDILLA -->
-<!ENTITY Rcedil	"&#x0156;"> <!-- LATIN CAPITAL LETTER R WITH CEDILLA -->
-<!ENTITY sacute	"&#x015B;"> <!-- LATIN SMALL LETTER S WITH ACUTE -->
-<!ENTITY Sacute	"&#x015A;"> <!-- LATIN CAPITAL LETTER S WITH ACUTE -->
-<!ENTITY scaron	"&#x0161;"> <!-- LATIN SMALL LETTER S WITH CARON -->
-<!ENTITY Scaron	"&#x0160;"> <!-- LATIN CAPITAL LETTER S WITH CARON -->
-<!ENTITY scedil	"&#x015F;"> <!-- LATIN SMALL LETTER S WITH CEDILLA -->
-<!ENTITY Scedil	"&#x015E;"> <!-- LATIN CAPITAL LETTER S WITH CEDILLA -->
-<!ENTITY scirc	"&#x015D;"> <!-- LATIN SMALL LETTER S WITH CIRCUMFLEX -->
-<!ENTITY Scirc	"&#x015C;"> <!-- LATIN CAPITAL LETTER S WITH CIRCUMFLEX -->
-<!ENTITY tcaron	"&#x0165;"> <!-- LATIN SMALL LETTER T WITH CARON -->
-<!ENTITY Tcaron	"&#x0164;"> <!-- LATIN CAPITAL LETTER T WITH CARON -->
-<!ENTITY tcedil	"&#x0163;"> <!-- LATIN SMALL LETTER T WITH CEDILLA -->
-<!ENTITY Tcedil	"&#x0162;"> <!-- LATIN CAPITAL LETTER T WITH CEDILLA -->
-<!ENTITY tstrok	"&#x0167;"> <!-- LATIN SMALL LETTER T WITH STROKE -->
-<!ENTITY Tstrok	"&#x0166;"> <!-- LATIN CAPITAL LETTER T WITH STROKE -->
-<!ENTITY ubreve	"&#x016D;"> <!-- LATIN SMALL LETTER U WITH BREVE -->
-<!ENTITY Ubreve	"&#x016C;"> <!-- LATIN CAPITAL LETTER U WITH BREVE -->
-<!ENTITY udblac	"&#x0171;"> <!-- LATIN SMALL LETTER U WITH DOUBLE ACUTE -->
-<!ENTITY Udblac	"&#x0170;"> <!-- LATIN CAPITAL LETTER U WITH DOUBLE ACUTE -->
-<!ENTITY umacr	"&#x016B;"> <!-- LATIN SMALL LETTER U WITH MACRON -->
-<!ENTITY Umacr	"&#x016A;"> <!-- LATIN CAPITAL LETTER U WITH MACRON -->
-<!ENTITY uogon	"&#x0173;"> <!-- LATIN SMALL LETTER U WITH OGONEK -->
-<!ENTITY Uogon	"&#x0172;"> <!-- LATIN CAPITAL LETTER U WITH OGONEK -->
-<!ENTITY uring	"&#x016F;"> <!-- LATIN SMALL LETTER U WITH RING ABOVE -->
-<!ENTITY Uring	"&#x016E;"> <!-- LATIN CAPITAL LETTER U WITH RING ABOVE -->
-<!ENTITY utilde	"&#x0169;"> <!-- LATIN SMALL LETTER U WITH TILDE -->
-<!ENTITY Utilde	"&#x0168;"> <!-- LATIN CAPITAL LETTER U WITH TILDE -->
-<!ENTITY wcirc	"&#x0175;"> <!-- LATIN SMALL LETTER W WITH CIRCUMFLEX -->
-<!ENTITY Wcirc	"&#x0174;"> <!-- LATIN CAPITAL LETTER W WITH CIRCUMFLEX -->
-<!ENTITY ycirc	"&#x0177;"> <!-- LATIN SMALL LETTER Y WITH CIRCUMFLEX -->
-<!ENTITY Ycirc	"&#x0176;"> <!-- LATIN CAPITAL LETTER Y WITH CIRCUMFLEX -->
-<!ENTITY Yuml	"&#x0178;"> <!-- LATIN CAPITAL LETTER Y WITH DIAERESIS -->
-<!ENTITY zacute	"&#x017A;"> <!-- LATIN SMALL LETTER Z WITH ACUTE -->
-<!ENTITY Zacute	"&#x0179;"> <!-- LATIN CAPITAL LETTER Z WITH ACUTE -->
-<!ENTITY zcaron	"&#x017E;"> <!-- LATIN SMALL LETTER Z WITH CARON -->
-<!ENTITY Zcaron	"&#x017D;"> <!-- LATIN CAPITAL LETTER Z WITH CARON -->
-<!ENTITY zdot	"&#x017C;"> <!-- LATIN SMALL LETTER Z WITH DOT ABOVE -->
-<!ENTITY Zdot	"&#x017B;"> <!-- LATIN CAPITAL LETTER Z WITH DOT ABOVE -->
diff --git a/3.0.4/doc/src/common/ent/iso-num.ent b/3.0.4/doc/src/common/ent/iso-num.ent
deleted file mode 100644
index 7f4844c..0000000
--- a/3.0.4/doc/src/common/ent/iso-num.ent
+++ /dev/null
@@ -1,81 +0,0 @@
-<!-- iso-num.ent (initially distributed with DocBook XML DTD V4.1.1beta1) -->
-
-<!-- Derived from the corresponding ISO 8879 standard entity set
-     and the Unicode character mappings provided by Sebastian Rahtz -->
-
-<!ENTITY half	"&#x00BD;"> <!-- VULGAR FRACTION ONE HALF -->
-<!ENTITY frac12	"&#x00BD;"> <!-- VULGAR FRACTION ONE HALF -->
-<!ENTITY frac14	"&#x00BC;"> <!-- VULGAR FRACTION ONE QUARTER -->
-<!ENTITY frac34	"&#x00BE;"> <!-- VULGAR FRACTION THREE QUARTERS -->
-<!ENTITY frac18	"&#x215B;"> <!--  -->
-<!ENTITY frac38	"&#x215C;"> <!--  -->
-<!ENTITY frac58	"&#x215D;"> <!--  -->
-<!ENTITY frac78	"&#x215E;"> <!--  -->
-<!ENTITY sup1	"&#x00B9;"> <!-- SUPERSCRIPT ONE -->
-<!ENTITY sup2	"&#x00B2;"> <!-- SUPERSCRIPT TWO -->
-<!ENTITY sup3	"&#x00B3;"> <!-- SUPERSCRIPT THREE -->
-<!ENTITY plus	"&#x002B;"> <!-- PLUS SIGN -->
-<!ENTITY plusmn	"&#x00B1;"> <!-- PLUS-MINUS SIGN -->
-<!ENTITY lt	"&#38;#60;"> <!-- LESS-THAN SIGN -->
-<!ENTITY equals	"&#x003D;"> <!-- EQUALS SIGN -->
-<!ENTITY gt	"&#x003E;"> <!-- GREATER-THAN SIGN -->
-<!ENTITY divide	"&#x00F7;"> <!-- DIVISION SIGN -->
-<!ENTITY times	"&#x00D7;"> <!-- MULTIPLICATION SIGN -->
-<!ENTITY curren	"&#x00A4;"> <!-- CURRENCY SIGN -->
-<!ENTITY pound	"&#x00A3;"> <!-- POUND SIGN -->
-<!ENTITY dollar	"&#x0024;"> <!-- DOLLAR SIGN -->
-<!ENTITY cent	"&#x00A2;"> <!-- CENT SIGN -->
-<!ENTITY yen	"&#x00A5;"> <!-- YEN SIGN -->
-<!ENTITY num	"&#x0023;"> <!-- NUMBER SIGN -->
-<!ENTITY percnt	"&#x0025;"> <!-- PERCENT SIGN -->
-<!ENTITY amp	"&#38;#38;"> <!-- AMPERSAND -->
-<!ENTITY ast	"&#x002A;"> <!-- ASTERISK OPERATOR -->
-<!ENTITY commat	"&#x0040;"> <!-- COMMERCIAL AT -->
-<!ENTITY lsqb	"&#x005B;"> <!-- LEFT SQUARE BRACKET -->
-<!ENTITY bsol	"&#x005C;"> <!-- REVERSE SOLIDUS -->
-<!ENTITY rsqb	"&#x005D;"> <!-- RIGHT SQUARE BRACKET -->
-<!ENTITY lcub	"&#x007B;"> <!-- LEFT CURLY BRACKET -->
-<!ENTITY horbar	"&#x2015;"> <!-- HORIZONTAL BAR -->
-<!ENTITY verbar	"&#x007C;"> <!-- VERTICAL LINE -->
-<!ENTITY rcub	"&#x007D;"> <!-- RIGHT CURLY BRACKET -->
-<!ENTITY micro	"&#x00B5;"> <!-- MICRO SIGN -->
-<!ENTITY ohm	"&#x2126;"> <!-- OHM SIGN -->
-<!ENTITY deg	"&#x00B0;"> <!-- DEGREE SIGN -->
-<!ENTITY ordm	"&#x00BA;"> <!-- MASCULINE ORDINAL INDICATOR -->
-<!ENTITY ordf	"&#x00AA;"> <!-- FEMININE ORDINAL INDICATOR -->
-<!ENTITY sect	"&#x00A7;"> <!-- SECTION SIGN -->
-<!ENTITY para	"&#x00B6;"> <!-- PILCROW SIGN -->
-<!ENTITY middot	"&#x00B7;"> <!-- MIDDLE DOT -->
-<!ENTITY larr	"&#x2190;"> <!-- LEFTWARDS DOUBLE ARROW -->
-<!ENTITY rarr	"&#x2192;"> <!-- RIGHTWARDS DOUBLE ARROW -->
-<!ENTITY uarr	"&#x2191;"> <!-- UPWARDS ARROW -->
-<!ENTITY darr	"&#x2193;"> <!-- DOWNWARDS ARROW -->
-<!ENTITY copy	"&#x00A9;"> <!-- COPYRIGHT SIGN -->
-<!ENTITY reg	"&#x00AE;"> <!-- REG TRADE MARK SIGN -->
-<!ENTITY trade	"&#x2122;"> <!-- TRADE MARK SIGN -->
-<!ENTITY brvbar	"&#x00A6;"> <!-- BROKEN BAR -->
-<!ENTITY not	"&#x00AC;"> <!-- NOT SIGN -->
-<!ENTITY sung	"&#x2669;"> <!--  -->
-<!ENTITY excl	"&#x0021;"> <!-- EXCLAMATION MARK -->
-<!ENTITY iexcl	"&#x00A1;"> <!-- INVERTED EXCLAMATION MARK -->
-<!ENTITY quot	"&#x0022;"> <!-- QUOTATION MARK -->
-<!ENTITY apos	"&#x0027;"> <!-- APOSTROPHE -->
-<!ENTITY lpar	"&#x0028;"> <!-- LEFT PARENTHESIS -->
-<!ENTITY rpar	"&#x0029;"> <!-- RIGHT PARENTHESIS -->
-<!ENTITY comma	"&#x002C;"> <!-- COMMA -->
-<!ENTITY lowbar	"&#x005F;"> <!-- LOW LINE -->
-<!ENTITY hyphen	"&#x002D;"> <!-- HYPHEN-MINUS -->
-<!ENTITY period	"&#x002E;"> <!-- FULL STOP -->
-<!ENTITY sol	"&#x002F;"> <!-- SOLIDUS -->
-<!ENTITY colon	"&#x003A;"> <!-- COLON -->
-<!ENTITY semi	"&#x003B;"> <!-- SEMICOLON -->
-<!ENTITY quest	"&#x003F;"> <!-- QUESTION MARK -->
-<!ENTITY iquest	"&#x00BF;"> <!-- INVERTED QUESTION MARK -->
-<!ENTITY laquo	"&#x00AB;"> <!-- LEFT-POINTING DOUBLE ANGLE QUOTATION MARK -->
-<!ENTITY raquo	"&#x00BB;"> <!-- RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK -->
-<!ENTITY lsquo	"&#x2018;"> <!--  -->
-<!ENTITY rsquo	"&#x2019;"> <!-- RIGHT SINGLE QUOTATION MARK -->
-<!ENTITY ldquo	"&#x201C;"> <!--  -->
-<!ENTITY rdquo	"&#x201D;"> <!-- RIGHT DOUBLE QUOTATION MARK -->
-<!ENTITY nbsp	"&#x00A0;"> <!-- NO-BREAK SPACE -->
-<!ENTITY shy	"&#x00AD;"> <!-- SOFT HYPHEN -->
diff --git a/3.0.4/doc/src/common/ent/iso-pub.ent b/3.0.4/doc/src/common/ent/iso-pub.ent
deleted file mode 100644
index 56ede364..0000000
--- a/3.0.4/doc/src/common/ent/iso-pub.ent
+++ /dev/null
@@ -1,90 +0,0 @@
-<!-- iso-pub.ent (initially distributed with DocBook XML DTD V4.1.1beta1) -->
-
-<!-- Derived from the corresponding ISO 8879 standard entity set
-     and the Unicode character mappings provided by Sebastian Rahtz -->
-
-<!ENTITY emsp	"&#x2003;"> <!-- EM SPACE -->
-<!ENTITY ensp	"&#x2002;"> <!-- EN SPACE -->
-<!ENTITY emsp13	"&#x2004;"> <!-- THREE-PER-EM SPACE -->
-<!ENTITY emsp14	"&#x2005;"> <!-- FOUR-PER-EM SPACE -->
-<!ENTITY numsp	"&#x2007;"> <!-- FIGURE SPACE -->
-<!ENTITY puncsp	"&#x2008;"> <!-- PUNCTUATION SPACE -->
-<!ENTITY thinsp	"&#x2009;"> <!-- THIN SPACE -->
-<!ENTITY hairsp	"&#x200A;"> <!-- HAIR SPACE -->
-<!ENTITY mdash	"&#x2014;"> <!-- EM DASH -->
-<!ENTITY ndash	"&#x2013;"> <!-- EN DASH -->
-<!ENTITY dash	"&#x2010;"> <!-- HYPHEN -->
-<!ENTITY blank	"&#x2423;"> <!-- OPEN BOX -->
-<!ENTITY hellip	"&#x2026;"> <!-- HORIZONTAL ELLIPSIS -->
-<!ENTITY nldr	"&#x2025;"> <!-- TWO DOT LEADER -->
-<!ENTITY frac13	"&#x2153;"> <!-- VULGAR FRACTION ONE THIRD -->
-<!ENTITY frac23	"&#x2154;"> <!-- VULGAR FRACTION TWO THIRDS -->
-<!ENTITY frac15	"&#x2155;"> <!-- VULGAR FRACTION ONE FIFTH -->
-<!ENTITY frac25	"&#x2156;"> <!-- VULGAR FRACTION TWO FIFTHS -->
-<!ENTITY frac35	"&#x2157;"> <!-- VULGAR FRACTION THREE FIFTHS -->
-<!ENTITY frac45	"&#x2158;"> <!-- VULGAR FRACTION FOUR FIFTHS -->
-<!ENTITY frac16	"&#x2159;"> <!-- VULGAR FRACTION ONE SIXTH -->
-<!ENTITY frac56	"&#x215A;"> <!-- VULGAR FRACTION FIVE SIXTHS -->
-<!ENTITY incare	"&#x2105;"> <!-- CARE OF -->
-<!ENTITY block	"&#x2588;"> <!-- FULL BLOCK -->
-<!ENTITY uhblk	"&#x2580;"> <!-- UPPER HALF BLOCK -->
-<!ENTITY lhblk	"&#x2584;"> <!-- LOWER HALF BLOCK -->
-<!ENTITY blk14	"&#x2591;"> <!-- LIGHT SHADE -->
-<!ENTITY blk12	"&#x2592;"> <!-- MEDIUM SHADE -->
-<!ENTITY blk34	"&#x2593;"> <!-- DARK SHADE -->
-<!ENTITY marker	"&#x25AE;"> <!-- BLACK VERTICAL RECTANGLE -->
-<!ENTITY cir	"&#x25CB;"> <!-- WHITE CIRCLE -->
-<!ENTITY squ	"&#x25A1;"> <!-- WHITE SQUARE -->
-<!ENTITY rect	"&#x25AD;"> <!-- WHITE RECTANGLE -->
-<!ENTITY utri	"&#x25B5;"> <!-- WHITE UP-POINTING TRIANGLE -->
-<!ENTITY dtri	"&#x25BF;"> <!-- WHITE DOWN-POINTING TRIANGLE -->
-<!ENTITY star	"&#x22C6;"> <!-- STAR OPERATOR -->
-<!ENTITY bull	"&#x2022;"> <!-- BULLET -->
-<!ENTITY squf	"&#x25AA;"> <!--  -->
-<!ENTITY utrif	"&#x25B4;"> <!-- BLACK UP-POINTING TRIANGLE -->
-<!ENTITY dtrif	"&#x25BE;"> <!-- BLACK DOWN-POINTING TRIANGLE -->
-<!ENTITY ltrif	"&#x25C2;"> <!-- BLACK LEFT-POINTING TRIANGLE -->
-<!ENTITY rtrif	"&#x25B8;"> <!-- BLACK RIGHT-POINTING TRIANGLE -->
-<!ENTITY clubs	"&#x2663;"> <!-- BLACK CLUB SUIT -->
-<!ENTITY diams	"&#x2666;"> <!-- BLACK DIAMOND SUIT -->
-<!ENTITY hearts	"&#x2665;"> <!-- BLACK HEART SUIT -->
-<!ENTITY spades	"&#x2660;"> <!-- BLACK SPADE SUIT -->
-<!ENTITY malt	"&#x2720;"> <!-- MALTESE CROSS -->
-<!ENTITY dagger	"&#x2020;"> <!-- DAGGER -->
-<!ENTITY Dagger	"&#x2021;"> <!-- DOUBLE DAGGER -->
-<!ENTITY check	"&#x2713;"> <!-- CHECK MARK -->
-<!ENTITY cross	"&#x2717;"> <!-- BALLOT X -->
-<!ENTITY sharp	"&#x266F;"> <!-- MUSIC SHARP SIGN -->
-<!ENTITY flat	"&#x266D;"> <!-- MUSIC FLAT SIGN -->
-<!ENTITY male	"&#x2642;"> <!-- MALE SIGN -->
-<!ENTITY female	"&#x2640;"> <!--  -->
-<!ENTITY phone	"&#x260E;"> <!-- TELEPHONE SIGN -->
-<!ENTITY telrec	"&#x2315;"> <!-- TELEPHONE RECORDER -->
-<!ENTITY copysr	"&#x2117;"> <!-- SOUND RECORDING COPYRIGHT -->
-<!ENTITY caret	"&#x2041;"> <!-- CARET -->
-<!ENTITY lsquor	"&#x201A;"> <!-- SINGLE LOW-9 QUOTATION MARK -->
-<!ENTITY ldquor	"&#x201E;"> <!-- DOUBLE LOW-9 QUOTATION MARK -->
-<!ENTITY fflig	"&#xFB00;"> <!--  -->
-<!ENTITY filig	"&#xFB01;"> <!--  -->
-<!--     fjlig	Unknown unicode character -->
-<!ENTITY ffilig	"&#xFB03;"> <!--  -->
-<!ENTITY ffllig	"&#xFB04;"> <!--  -->
-<!ENTITY fllig	"&#xFB02;"> <!--  -->
-<!ENTITY mldr	"&#x2026;"> <!-- HORIZONTAL ELLIPSIS -->
-<!ENTITY rdquor	"&#x201C;"> <!--  -->
-<!ENTITY rsquor	"&#x2018;"> <!--  -->
-<!ENTITY vellip	"&#x22EE;"> <!--  -->
-<!ENTITY hybull	"&#x2043;"> <!-- HYPHEN BULLET -->
-<!ENTITY loz	"&#x25CA;"> <!-- LOZENGE -->
-<!ENTITY lozf	"&#x2726;"> <!--  -->
-<!ENTITY ltri	"&#x25C3;"> <!-- WHITE LEFT-POINTING TRIANGLE -->
-<!ENTITY rtri	"&#x25B9;"> <!-- WHITE RIGHT-POINTING TRIANGLE -->
-<!ENTITY starf	"&#x2605;"> <!-- BLACK STAR -->
-<!ENTITY natur	"&#x266E;"> <!-- MUSIC NATURAL SIGN -->
-<!ENTITY rx	"&#x211E;"> <!-- PRESCRIPTION TAKE -->
-<!ENTITY sext	"&#x2736;"> <!-- SIX POINTED BLACK STAR -->
-<!ENTITY target	"&#x2316;"> <!-- POSITION INDICATOR -->
-<!ENTITY dlcrop	"&#x230D;"> <!-- BOTTOM LEFT CROP -->
-<!ENTITY drcrop	"&#x230C;"> <!-- BOTTOM RIGHT CROP -->
-<!ENTITY ulcrop	"&#x230F;"> <!-- TOP LEFT CROP -->
-<!ENTITY urcrop	"&#x230E;"> <!-- TOP RIGHT CROP -->
diff --git a/3.0.4/doc/src/common/ent/iso-tech.ent b/3.0.4/doc/src/common/ent/iso-tech.ent
deleted file mode 100644
index 7264f6b..0000000
--- a/3.0.4/doc/src/common/ent/iso-tech.ent
+++ /dev/null
@@ -1,69 +0,0 @@
-<!-- iso-tech.ent (initially distributed with DocBook XML DTD V4.1.1beta1) -->
-
-<!-- Derived from the corresponding ISO 8879 standard entity set
-     and the Unicode character mappings provided by Sebastian Rahtz.
-     With additional derivations from
-     ftp://ftp.unicode.org/Public/MAPPINGS/VENDORS/MISC/SGML.TXT -->
-
-<!ENTITY aleph	"&#x2135;"> <!-- ALEF SYMBOL -->
-<!ENTITY and	"&#x2227;"> <!--  -->
-<!ENTITY ang90	"&#x221F;"> <!-- RIGHT ANGLE -->
-<!ENTITY angsph	"&#x2222;"> <!--  -->
-<!ENTITY ap	"&#x2248;"> <!--  -->
-<!ENTITY becaus	"&#x2235;"> <!-- BECAUSE -->
-<!ENTITY bottom	"&#x22A5;"> <!--  -->
-<!ENTITY cap	"&#x2229;"> <!--  -->
-<!ENTITY cong	"&#x2245;"> <!--  -->
-<!ENTITY conint	"&#x222E;"> <!--  -->
-<!ENTITY cup	"&#x222A;"> <!--  -->
-<!ENTITY equiv	"&#x2261;"> <!--  -->
-<!ENTITY exist	"&#x2203;"> <!--  -->
-<!ENTITY forall	"&#x2200;"> <!--  -->
-<!ENTITY fnof	"&#x0192;"> <!-- LATIN SMALL LETTER F WITH HOOK -->
-<!ENTITY ge	"&#x2265;"> <!-- GREATER-THAN OR EQUAL TO -->
-<!ENTITY iff	"&#x21D4;"> <!-- LEFT RIGHT DOUBLE ARROW -->
-<!ENTITY infin	"&#x221E;"> <!--  -->
-<!ENTITY int	"&#x222B;"> <!--  -->
-<!ENTITY isin	"&#x220A;"> <!--  -->
-<!ENTITY lang	"&#x3008;"> <!--  -->
-<!ENTITY lArr	"&#x21D0;"> <!-- LEFTWARDS ARROW -->
-<!ENTITY le	"&#x2264;"> <!--  -->
-<!ENTITY minus	"&#x2212;"> <!-- MINUS SIGN -->
-<!ENTITY mnplus	"&#x2213;"> <!--  -->
-<!ENTITY nabla	"&#x2207;"> <!-- NABLA -->
-<!ENTITY ne	"&#x2260;"> <!--  -->
-<!ENTITY ni	"&#x220D;"> <!--  -->
-<!ENTITY or	"&#x2228;"> <!--  -->
-<!ENTITY par	"&#x2225;"> <!-- PARALLEL TO -->
-<!ENTITY part	"&#x2202;"> <!--  -->
-<!ENTITY permil	"&#x2030;"> <!-- PER MILLE SIGN -->
-<!ENTITY perp	"&#x22A5;"> <!--  -->
-<!ENTITY prime	"&#x2032;"> <!-- PRIME -->
-<!ENTITY Prime	"&#x2033;"> <!-- DOUBLE PRIME -->
-<!ENTITY prop	"&#x221D;"> <!--  -->
-<!ENTITY radic	"&#x221A;"> <!--  -->
-<!ENTITY rang	"&#x3009;"> <!--  -->
-<!ENTITY rArr	"&#x21D2;"> <!-- RIGHTWARDS ARROW -->
-<!ENTITY sim	"&#x223C;"> <!--  -->
-<!ENTITY sime	"&#x2243;"> <!--  -->
-<!ENTITY square	"&#x25A1;"> <!-- WHITE SQUARE -->
-<!ENTITY sub	"&#x2282;"> <!--  -->
-<!ENTITY sube	"&#x2286;"> <!--  -->
-<!ENTITY sup	"&#x2283;"> <!--  -->
-<!ENTITY supe	"&#x2287;"> <!--  -->
-<!ENTITY there4	"&#x2234;"> <!--  -->
-<!ENTITY Verbar	"&#x2016;"> <!-- DOUBLE VERTICAL LINE -->
-<!ENTITY angst	"&#x212B;"> <!-- ANGSTROM SIGN -->
-<!ENTITY bernou	"&#x212C;"> <!-- SCRIPT CAPITAL B -->
-<!ENTITY compfn	"&#x2218;"> <!-- RING OPERATOR -->
-<!ENTITY Dot	"&#x00A8;"> <!--  -->
-<!ENTITY DotDot	"&#x20DC;"> <!-- COMBINING FOUR DOTS ABOVE -->
-<!ENTITY hamilt	"&#x210B;"> <!-- SCRIPT CAPITAL H -->
-<!ENTITY lagran	"&#x2112;"> <!-- SCRIPT CAPITAL L -->
-<!ENTITY lowast	"&#x2217;"> <!-- ASTERISK OPERATOR -->
-<!ENTITY notin	"&#x2209;"> <!--  -->
-<!ENTITY order	"&#x2134;"> <!-- SCRIPT SMALL O -->
-<!ENTITY phmmat	"&#x2133;"> <!-- SCRIPT CAPITAL M -->
-<!ENTITY tdot	"&#x20DB;"> <!-- COMBINING THREE DOTS ABOVE -->
-<!ENTITY tprime	"&#x2034;"> <!-- TRIPLE PRIME -->
-<!ENTITY wedgeq	"&#x2259;"> <!-- ESTIMATES -->
diff --git a/3.0.4/doc/src/common/images/caution.png b/3.0.4/doc/src/common/images/caution.png
deleted file mode 100644
index 775493b..0000000
--- a/3.0.4/doc/src/common/images/caution.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/src/common/images/home.png b/3.0.4/doc/src/common/images/home.png
deleted file mode 100644
index 132b39d..0000000
--- a/3.0.4/doc/src/common/images/home.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/src/common/images/important.png b/3.0.4/doc/src/common/images/important.png
deleted file mode 100644
index 1ed984d..0000000
--- a/3.0.4/doc/src/common/images/important.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/src/common/images/next.png b/3.0.4/doc/src/common/images/next.png
deleted file mode 100644
index 6ec4796..0000000
--- a/3.0.4/doc/src/common/images/next.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/src/common/images/note.png b/3.0.4/doc/src/common/images/note.png
deleted file mode 100644
index 80e6974..0000000
--- a/3.0.4/doc/src/common/images/note.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/src/common/images/prev.png b/3.0.4/doc/src/common/images/prev.png
deleted file mode 100644
index 0eaa26f..0000000
--- a/3.0.4/doc/src/common/images/prev.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/src/common/images/tip.png b/3.0.4/doc/src/common/images/tip.png
deleted file mode 100644
index ed88f82..0000000
--- a/3.0.4/doc/src/common/images/tip.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/src/common/images/up.png b/3.0.4/doc/src/common/images/up.png
deleted file mode 100644
index ef0f46e..0000000
--- a/3.0.4/doc/src/common/images/up.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/src/common/images/warning.png b/3.0.4/doc/src/common/images/warning.png
deleted file mode 100644
index 8e0fb45..0000000
--- a/3.0.4/doc/src/common/images/warning.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/doc/src/common/readme.txt b/3.0.4/doc/src/common/readme.txt
deleted file mode 100644
index 383f7fe..0000000
--- a/3.0.4/doc/src/common/readme.txt
+++ /dev/null
@@ -1,16 +0,0 @@
-README for DocBook XML V4.1.2
-
-This is DocBook XML V4.1.2, released 27 Aug 2000.
-
-See 41chg.txt for information about what has changed since DocBook 4.0.
-
-For more information about DocBook, please see
-
-  http://www.oasis-open.org/docbook/
-
-a partial mirror of the official DocBook site is available at
-
-  http://docbook.org/
-
-Please send all questions, comments, concerns, and bug reports to the
-DocBook mailing list: docbook@lists.oasis-open.org
diff --git a/3.0.4/doc/src/common/soextblx.dtd b/3.0.4/doc/src/common/soextblx.dtd
deleted file mode 100644
index e4ea0ed..0000000
--- a/3.0.4/doc/src/common/soextblx.dtd
+++ /dev/null
@@ -1,308 +0,0 @@
-<!-- XML EXCHANGE TABLE MODEL DECLARATION MODULE -->
-
-<!-- This set of declarations defines the XML version of the Exchange
-     Table Model as of the date shown in the Formal Public Identifier
-     (FPI) for this entity.
-
-     This set of declarations may be referred to using a public external
-     entity declaration and reference as shown in the following three
-     lines:
-
-     <!ENTITY % calstblx
-       PUBLIC "-//OASIS//DTD XML Exchange Table Model 19990315//EN">
-       %calstblx;
-
-     If various parameter entities used within this set of declarations
-     are to be given non-default values, the appropriate declarations
-     should be given before calling in this package (i.e., before the
-     "%calstblx;" reference).
--->
-
-<!-- The motivation for this XML version of the Exchange Table Model
-     is simply to create an XML version of the SGML Exchange Table
-     Model. By design, no effort has been made to "improve" the model.
-
-     This XML version incorporates the logical bare minimum changes
-     necessary to make the Exchange Table Model a valid XML DTD.
--->
-
-<!-- The XML version of the Exchange Table Model differs from
-     the SGML version in the following ways:
-
-     The following parameter entities have been removed:
-
-       - tbl.table.excep, tbl.hdft.excep, tbl.row.excep, tbl.entry.excep
-         There are no exceptions in XML. The following normative statement
-         is made in lieu of exceptions: the exchange table model explicitly
-         forbids a table from occurring within another table. If the
-         content model of an entry includes a table element, then this
-         cannot be enforced by the DTD, but it is a deviation from the
-         exchange table model to include a table within a table.
-
-       - tbl.hdft.name, tbl.hdft.mdl, tbl.hdft.excep, tbl.hdft.att
-         The motivation for these elements was to change the table
-         header/footer elements. Since XML does not allow element declarations
-         to contain name groups, and the exchange table model does not
-         allow a table to contain footers, the continued presence of these
-         attributes seems unnecessary.
-
-     The following parameter entity has been added:
-
-       - tbl.thead.att
-         This entity parameterizes the attributes on thead. It replaces
-         the tbl.hdft.att parameter entity.
-
-     Other miscellaneous changes:
-
-       - Tag ommission indicators have been removed
-       - Comments have been removed from declarations
-       - NUMBER attributes have been changed to NMTOKEN
-       - NUTOKEN attributes have been to changed to NMTOKEN
-       - Removed the grouping characters around the content model
-         parameter entry for the 'entry' element. This is necessary
-         so that an entry can contain #PCDATA and be defined as an
-         optional, repeatable OR group beginning with #PCDATA.
--->
-
-<!-- This entity includes a set of element and attribute declarations
-     that partially defines the Exchange table model.  However, the model
-     is not well-defined without the accompanying natural language
-     description of the semantics (meanings) of these various elements,
-     attributes, and attribute values.  The semantic writeup, also available
-     from SGML Open, should be used in conjunction with this entity.
--->
-
-<!-- In order to use the Exchange table model, various parameter entity
-     declarations are required.  A brief description is as follows:
-
-     ENTITY NAME      WHERE USED              WHAT IT IS
-
-     %yesorno         In ATTLIST of:          An attribute declared value
-                      almost all elements     for a "boolean" attribute
-
-     %paracon         In content model of:    The "text" (logical content)
-                      <entry>                 of the model group for <entry>
-
-     %titles          In content model of:    The "title" part of the model
-                      table element           group for the table element
-
-     %tbl.table.name  In declaration of:      The name of the "table"
-                      table element           element
-
-     %tbl.table-titles.mdl In content model of: The model group for the title
-                      table elements          part of the content model for
-                                              table element
-
-     %tbl.table.mdl   In content model of:    The model group for the content
-                      table elements          model for table element,
-                                              often (and by default) defined
-                                              in terms of %tbl.table-titles.mdl
-                                              and tgroup
-
-     %tbl.table.att   In ATTLIST of:          Additional attributes on the
-                      table element           table element
-
-     %bodyatt         In ATTLIST of:          Additional attributes on the
-                      table element           table element (for backward
-                                              compatibility with the SGML
-                                              model)
-
-     %tbl.tgroup.mdl  In content model of:    The model group for the content
-                      <tgroup>                model for <tgroup>
-
-     %tbl.tgroup.att  In ATTLIST of:          Additional attributes on the
-                      <tgroup>                <tgroup> element
-
-     %tbl.thead.att   In ATTLIST of:          Additional attributes on the
-                      <thead>                 <thead> element
-
-     %tbl.tbody.att   In ATTLIST of:          Additional attributes on the
-                      <tbody>                 <tbody> element
-
-     %tbl.colspec.att In ATTLIST of:          Additional attributes on the
-                      <colspec>               <colspec> element
-
-     %tbl.row.mdl     In content model of:    The model group for the content
-                      <row>                   model for <row>
-
-     %tbl.row.att     In ATTLIST of:          Additional attributes on the
-                      <row>                   <row> element
-
-     %tbl.entry.mdl   In content model of:    The model group for the content
-                      <entry>                 model for <entry>
-
-     %tbl.entry.att   In ATTLIST of:          Additional attributes on the
-                      <entry>                 <entry> element
-
-     This set of declarations will use the default definitions shown below
-     for any of these parameter entities that are not declared before this
-     set of declarations is referenced.
--->
-
-<!-- These definitions are not directly related to the table model, but are
-     used in the default CALS table model and may be defined elsewhere (and
-     prior to the inclusion of this table module) in the referencing DTD. -->
-
-<!ENTITY % yesorno 'NMTOKEN'> <!-- no if zero(s), yes if any other value -->
-<!ENTITY % titles  'title?'>
-<!ENTITY % pcd "#PCDATA">
-<!ENTITY % paracon '%pcd;'> <!-- default for use in entry content -->
-
-<!--
-The parameter entities as defined below change and simplify the CALS table
-model as published (as part of the Example DTD) in MIL-HDBK-28001.  The
-resulting simplified DTD has support from the SGML Open vendors and is
-therefore more interoperable among different systems.
-
-These following declarations provide the Exchange default definitions
-for these entities.  However, these entities can be redefined (by giving
-the appropriate parameter entity declaration(s) prior to the reference
-to this Table Model declaration set entity) to fit the needs of the
-current application.
-
-Note, however, that changes may have significant effect on the ability to
-interchange table information.  These changes may manifest themselves
-in useability, presentation, and possible structure information degradation.
--->
-
-<!ENTITY % tbl.table.name       "table">
-<!ENTITY % tbl.table-titles.mdl "%titles;,">
-<!ENTITY % tbl.table-main.mdl   "tgroup+">
-<!ENTITY % tbl.table.mdl        "%tbl.table-titles.mdl; %tbl.table-main.mdl;">
-<!ENTITY % tbl.table.att        "
-    pgwide      %yesorno;       #IMPLIED ">
-<!ENTITY % bodyatt              "">
-<!ENTITY % tbl.tgroup.mdl       "colspec*,thead?,tbody">
-<!ENTITY % tbl.tgroup.att       "">
-<!ENTITY % tbl.thead.att        "">
-<!ENTITY % tbl.tbody.att        "">
-<!ENTITY % tbl.colspec.att      "">
-<!ENTITY % tbl.row.mdl          "entry+">
-<!ENTITY % tbl.row.att          "">
-<!ENTITY % tbl.entry.mdl        "(%paracon;)*">
-<!ENTITY % tbl.entry.att        "">
-
-<!-- =====  Element and attribute declarations follow. =====  -->
-
-<!--
-     Default declarations previously defined in this entity and
-     referenced below include:
-     ENTITY % tbl.table.name       "table"
-     ENTITY % tbl.table-titles.mdl "%titles;,"
-     ENTITY % tbl.table.mdl        "%tbl.table-titles; tgroup+"
-     ENTITY % tbl.table.att        "
-                        pgwide          %yesorno;       #IMPLIED "
--->
-
-<!ELEMENT %tbl.table.name; (%tbl.table.mdl;)>
-
-<!ATTLIST %tbl.table.name;
-        frame           (top|bottom|topbot|all|sides|none)      #IMPLIED
-        colsep          %yesorno;                               #IMPLIED
-        rowsep          %yesorno;                               #IMPLIED
-        %tbl.table.att;
-        %bodyatt;
->
-
-<!--
-     Default declarations previously defined in this entity and
-     referenced below include:
-     ENTITY % tbl.tgroup.mdl    "colspec*,thead?,tbody"
-     ENTITY % tbl.tgroup.att    ""
--->
-
-<!ELEMENT tgroup (%tbl.tgroup.mdl;) >
-
-<!ATTLIST tgroup
-        cols            NMTOKEN                                 #REQUIRED
-        colsep          %yesorno;                               #IMPLIED
-        rowsep          %yesorno;                               #IMPLIED
-        align           (left|right|center|justify|char)        #IMPLIED
-        %tbl.tgroup.att;
->
-
-<!--
-     Default declarations previously defined in this entity and
-     referenced below include:
-     ENTITY % tbl.colspec.att   ""
--->
-
-<!ELEMENT colspec EMPTY >
-
-<!ATTLIST colspec
-        colnum          NMTOKEN                                 #IMPLIED
-        colname         NMTOKEN                                 #IMPLIED
-        colwidth        CDATA                                   #IMPLIED
-        colsep          %yesorno;                               #IMPLIED
-        rowsep          %yesorno;                               #IMPLIED
-        align           (left|right|center|justify|char)        #IMPLIED
-        char            CDATA                                   #IMPLIED
-        charoff         NMTOKEN                                 #IMPLIED
-        %tbl.colspec.att;
->
-
-<!--
-     Default declarations previously defined in this entity and
-     referenced below include:
-     ENTITY % tbl.thead.att      ""
--->
-
-<!ELEMENT thead (row+)>
-
-<!ATTLIST thead
-        valign          (top|middle|bottom)                     #IMPLIED
-        %tbl.thead.att;
->
-
-<!--
-     Default declarations previously defined in this entity and
-     referenced below include:
-     ENTITY % tbl.tbody.att     ""
--->
-
-<!ELEMENT tbody (row+)>
-
-<!ATTLIST tbody
-        valign          (top|middle|bottom)                     #IMPLIED
-        %tbl.tbody.att;
->
-
-<!--
-     Default declarations previously defined in this entity and
-     referenced below include:
-     ENTITY % tbl.row.mdl       "entry+"
-     ENTITY % tbl.row.att       ""
--->
-
-<!ELEMENT row (%tbl.row.mdl;)>
-
-<!ATTLIST row
-        rowsep          %yesorno;                               #IMPLIED
-        valign          (top|middle|bottom)                     #IMPLIED
-        %tbl.row.att;
->
-
-
-<!--
-     Default declarations previously defined in this entity and
-     referenced below include:
-     ENTITY % paracon           "#PCDATA"
-     ENTITY % tbl.entry.mdl     "(%paracon;)*"
-     ENTITY % tbl.entry.att     ""
--->
-
-<!ELEMENT entry %tbl.entry.mdl;>
-
-<!ATTLIST entry
-        colname         NMTOKEN                                 #IMPLIED
-        namest          NMTOKEN                                 #IMPLIED
-        nameend         NMTOKEN                                 #IMPLIED
-        morerows        NMTOKEN                                 #IMPLIED
-        colsep          %yesorno;                               #IMPLIED
-        rowsep          %yesorno;                               #IMPLIED
-        align           (left|right|center|justify|char)        #IMPLIED
-        char            CDATA                                   #IMPLIED
-        charoff         NMTOKEN                                 #IMPLIED
-        valign          (top|middle|bottom)                     #IMPLIED
-        %tbl.entry.att;
->
diff --git a/3.0.4/eclipse/Tapestry-Basic.launch b/3.0.4/eclipse/Tapestry-Basic.launch
deleted file mode 100644
index 67e8f63..0000000
--- a/3.0.4/eclipse/Tapestry-Basic.launch
+++ /dev/null
@@ -1,119 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<launchConfiguration type="org.eclipse.jdt.junit.launchconfig">
-    <booleanAttribute key="org.eclipse.jdt.junit.KEEPRUNNING_ATTR" value="false"/>
-    <booleanAttribute key="org.eclipse.jdt.launching.DEFAULT_CLASSPATH" value="false"/>
-    <stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="org.apache.tapestry.junit.BasicTestSuite"/>
-    <listAttribute key="org.eclipse.jdt.launching.CLASSPATH">
-        <listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
-&lt;runtimeClasspathEntry containerPath=&quot;JRE_LIB&quot; path=&quot;2&quot;
-    sourceAttachmentPath=&quot;JRE_SRC&quot; sourceRootPath=&quot;JRE_SRCROOT&quot; type=&quot;3&quot;/&gt;
-"/>
-        <listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
-&lt;runtimeClasspathEntry internalArchive=&quot;/jakarta-tapestry/config&quot;
-    path=&quot;3&quot; type=&quot;2&quot;/&gt;
-"/>
-        <listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
-&lt;runtimeClasspathEntry path=&quot;3&quot; projectName=&quot;jakarta-tapestry&quot; type=&quot;1&quot;/&gt;
-"/>
-        <listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
-&lt;runtimeClasspathEntry
-    internalArchive=&quot;/jakarta-tapestry/lib/ext/jakarta-oro-2.0.6.jar&quot;
-    path=&quot;3&quot; type=&quot;2&quot;/&gt;
-"/>
-        <listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
-&lt;runtimeClasspathEntry
-    internalArchive=&quot;/jakarta-tapestry/lib/ext/commons-logging-1.0.2.jar&quot;
-    path=&quot;3&quot; type=&quot;2&quot;/&gt;
-"/>
-        <listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
-&lt;runtimeClasspathEntry containerPath=&quot;JBOSS_DIR/client/jboss-j2ee.jar&quot;
-    path=&quot;3&quot; type=&quot;3&quot;/&gt;
-"/>
-        <listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
-&lt;runtimeClasspathEntry containerPath=&quot;JBOSS_DIR/server/all/lib/mail.jar&quot;
-    path=&quot;3&quot; type=&quot;3&quot;/&gt;
-"/>
-        <listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
-&lt;runtimeClasspathEntry
-    internalArchive=&quot;/jakarta-tapestry/lib/ext/commons-lang-1.0.jar&quot;
-    path=&quot;3&quot; type=&quot;2&quot;/&gt;
-"/>
-        <listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
-&lt;runtimeClasspathEntry
-    internalArchive=&quot;/jakarta-tapestry/lib/ext/ognl-2.6.3.jar&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;
-"/>
-        <listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
-&lt;runtimeClasspathEntry
-    internalArchive=&quot;/jakarta-tapestry/lib/ext/bsf-2.3.0.jar&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;
-"/>
-        <listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
-&lt;runtimeClasspathEntry containerPath=&quot;JETTY_DIR/lib/javax.servlet.jar&quot;
-    path=&quot;3&quot; type=&quot;3&quot;/&gt;
-"/>
-        <listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
-&lt;runtimeClasspathEntry containerPath=&quot;JETTY_DIR/ext/javax.xml.jaxp.jar&quot;
-    path=&quot;3&quot; type=&quot;3&quot;/&gt;
-"/>
-        <listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
-&lt;runtimeClasspathEntry containerPath=&quot;JETTY_DIR/ext/crimson.jar&quot;
-    path=&quot;3&quot; type=&quot;3&quot;/&gt;
-"/>
-        <listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
-&lt;runtimeClasspathEntry
-    internalArchive=&quot;/jakarta-tapestry/ext-dist/jdom-b8.jar&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;
-"/>
-        <listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
-&lt;runtimeClasspathEntry
-    internalArchive=&quot;/jakarta-tapestry/ext-dist/junit.jar&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;
-"/>
-        <listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
-&lt;runtimeClasspathEntry
-    internalArchive=&quot;/jakarta-tapestry/lib/ext/commons-beanutils-1.6.1.jar&quot;
-    path=&quot;3&quot; type=&quot;2&quot;/&gt;
-"/>
-        <listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
-&lt;runtimeClasspathEntry
-    internalArchive=&quot;/jakarta-tapestry/lib/ext/commons-digester-1.5.jar&quot;
-    path=&quot;3&quot; type=&quot;2&quot;/&gt;
-"/>
-        <listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
-&lt;runtimeClasspathEntry
-    internalArchive=&quot;/jakarta-tapestry/examples/Workbench/lib/jCharts-0.6.0.jar&quot;
-    path=&quot;3&quot; type=&quot;2&quot;/&gt;
-"/>
-        <listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
-&lt;runtimeClasspathEntry
-    internalArchive=&quot;/jakarta-tapestry/lib/ext/commons-collections-2.1.jar&quot;
-    path=&quot;3&quot; type=&quot;2&quot;/&gt;
-"/>
-        <listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
-&lt;runtimeClasspathEntry
-    internalArchive=&quot;/jakarta-tapestry/lib/ext/commons-fileupload-1.0.jar&quot;
-    path=&quot;3&quot; type=&quot;2&quot;/&gt;
-"/>
-        <listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
-&lt;runtimeClasspathEntry
-    internalArchive=&quot;/jakarta-tapestry/lib/runtime/log4j-1.2.6.jar&quot;
-    path=&quot;3&quot; type=&quot;2&quot;/&gt;
-"/>
-        <listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
-&lt;runtimeClasspathEntry
-    internalArchive=&quot;/jakarta-tapestry/lib/ext/javassist-2.5.1.jar&quot;
-    path=&quot;3&quot; type=&quot;2&quot;/&gt;
-"/>
-        <listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
-&lt;runtimeClasspathEntry
-    internalArchive=&quot;/jakarta-tapestry/lib/ext/commons-codec-1.2.jar&quot;
-    path=&quot;3&quot; type=&quot;2&quot;/&gt;
-"/>
-    </listAttribute>
-    <stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="jakarta-tapestry"/>
-    <listAttribute key="org.eclipse.debug.ui.favoriteGroups">
-        <listEntry value="org.eclipse.debug.ui.launchGroup.run"/>
-    </listAttribute>
-    <stringAttribute key="org.eclipse.debug.ui.target_debug_perspective" value="perspective_default"/>
-    <stringAttribute key="org.eclipse.jdt.junit.CONTAINER" value=""/>
-    <stringAttribute key="org.eclipse.jdt.launching.WORKING_DIRECTORY" value="jakarta-tapestry/junit"/>
-    <stringAttribute key="org.eclipse.debug.core.source_locator_id" value="org.eclipse.jdt.debug.ui.javaSourceLocator"/>
-    <stringAttribute key="org.eclipse.debug.ui.target_run_perspective" value="perspective_none"/>
-</launchConfiguration>
diff --git a/3.0.4/eclipse/Tapestry-Mock.launch b/3.0.4/eclipse/Tapestry-Mock.launch
deleted file mode 100644
index 1789215..0000000
--- a/3.0.4/eclipse/Tapestry-Mock.launch
+++ /dev/null
@@ -1,41 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<launchConfiguration type="org.eclipse.jdt.junit.launchconfig">
-    <booleanAttribute key="org.eclipse.jdt.junit.KEEPRUNNING_ATTR" value="false"/>
-    <booleanAttribute key="org.eclipse.jdt.launching.DEFAULT_CLASSPATH" value="false"/>
-    <stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="org.apache.tapestry.junit.mock.TestMocks"/>
-    <listAttribute key="org.eclipse.jdt.launching.CLASSPATH">
-        <listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?> &lt;runtimeClasspathEntry containerPath=&quot;JRE_LIB&quot; path=&quot;2&quot;     sourceAttachmentPath=&quot;JRE_SRC&quot; sourceRootPath=&quot;JRE_SRCROOT&quot; type=&quot;3&quot;/> "/>
-        <listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?> &lt;runtimeClasspathEntry internalArchive=&quot;/jakarta-tapestry/config&quot;     path=&quot;3&quot; type=&quot;2&quot;/> "/>
-        <listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?> &lt;runtimeClasspathEntry path=&quot;3&quot; projectName=&quot;jakarta-tapestry&quot; type=&quot;1&quot;/> "/>
-        <listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?> &lt;runtimeClasspathEntry     internalArchive=&quot;/jakarta-tapestry/lib/ext/jakarta-oro-2.0.6.jar&quot;     path=&quot;3&quot; type=&quot;2&quot;/> "/>
-        <listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?> &lt;runtimeClasspathEntry     internalArchive=&quot;/jakarta-tapestry/lib/ext/commons-logging-1.0.2.jar&quot;     path=&quot;3&quot; type=&quot;2&quot;/> "/>
-        <listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?> &lt;runtimeClasspathEntry containerPath=&quot;JBOSS_DIR/client/jboss-j2ee.jar&quot;     path=&quot;3&quot; type=&quot;3&quot;/> "/>
-        <listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?> &lt;runtimeClasspathEntry containerPath=&quot;JBOSS_DIR/server/all/lib/mail.jar&quot;     path=&quot;3&quot; type=&quot;3&quot;/> "/>
-        <listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?> &lt;runtimeClasspathEntry     internalArchive=&quot;/jakarta-tapestry/lib/ext/commons-lang-1.0.jar&quot;     path=&quot;3&quot; type=&quot;2&quot;/> "/>
-        <listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?> &lt;runtimeClasspathEntry     internalArchive=&quot;/jakarta-tapestry/lib/ext/ognl-2.6.3.jar&quot; path=&quot;3&quot; type=&quot;2&quot;/> "/>
-        <listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?> &lt;runtimeClasspathEntry     internalArchive=&quot;/jakarta-tapestry/lib/ext/bsf-2.3.0.jar&quot; path=&quot;3&quot; type=&quot;2&quot;/> "/>
-        <listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?> &lt;runtimeClasspathEntry containerPath=&quot;JETTY_DIR/lib/javax.servlet.jar&quot;     path=&quot;3&quot; type=&quot;3&quot;/> "/>
-        <listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?> &lt;runtimeClasspathEntry containerPath=&quot;JETTY_DIR/ext/javax.xml.jaxp.jar&quot;     path=&quot;3&quot; type=&quot;3&quot;/> "/>
-        <listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?> &lt;runtimeClasspathEntry containerPath=&quot;JETTY_DIR/ext/crimson.jar&quot;     path=&quot;3&quot; type=&quot;3&quot;/> "/>
-        <listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?> &lt;runtimeClasspathEntry     internalArchive=&quot;/jakarta-tapestry/ext-dist/jdom-b8.jar&quot; path=&quot;3&quot; type=&quot;2&quot;/> "/>
-        <listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?> &lt;runtimeClasspathEntry     internalArchive=&quot;/jakarta-tapestry/ext-dist/junit.jar&quot; path=&quot;3&quot; type=&quot;2&quot;/> "/>
-        <listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?> &lt;runtimeClasspathEntry     internalArchive=&quot;/jakarta-tapestry/lib/ext/commons-beanutils-1.6.1.jar&quot;     path=&quot;3&quot; type=&quot;2&quot;/> "/>
-        <listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?> &lt;runtimeClasspathEntry     internalArchive=&quot;/jakarta-tapestry/lib/ext/commons-digester-1.5.jar&quot;     path=&quot;3&quot; type=&quot;2&quot;/> "/>
-        <listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?> &lt;runtimeClasspathEntry     internalArchive=&quot;/jakarta-tapestry/examples/Workbench/lib/jCharts-0.6.0.jar&quot;     path=&quot;3&quot; type=&quot;2&quot;/> "/>
-        <listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?> &lt;runtimeClasspathEntry     internalArchive=&quot;/jakarta-tapestry/lib/runtime/log4j-1.2.6.jar&quot;     path=&quot;3&quot; type=&quot;2&quot;/> "/>
-        <listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?> &lt;runtimeClasspathEntry containerPath=&quot;JYTHON_DIR/jython.jar&quot; path=&quot;3&quot; type=&quot;3&quot;/> "/>
-        <listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?> &lt;runtimeClasspathEntry     internalArchive=&quot;/jakarta-tapestry/lib/ext/commons-collections-2.1.jar&quot;     path=&quot;3&quot; type=&quot;2&quot;/> "/>
-        <listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?> &lt;runtimeClasspathEntry     internalArchive=&quot;/jakarta-tapestry/lib/ext/commons-fileupload-1.0.jar&quot;     path=&quot;3&quot; type=&quot;2&quot;/> "/>
-        <listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?> &lt;runtimeClasspathEntry     internalArchive=&quot;/jakarta-tapestry/lib/ext/javassist-2.5.1.jar&quot;     path=&quot;3&quot; type=&quot;2&quot;/> "/>
-        <listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?> &lt;runtimeClasspathEntry     internalArchive=&quot;/jakarta-tapestry/lib/ext/commons-codec-1.2.jar&quot;     path=&quot;3&quot; type=&quot;2&quot;/> "/>
-    </listAttribute>
-    <stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="jakarta-tapestry"/>
-    <stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Dnet.sf.tapestry.enable-reset-service=true"/>
-    <listAttribute key="org.eclipse.debug.ui.favoriteGroups">
-        <listEntry value="org.eclipse.debug.ui.launchGroup.run"/>
-    </listAttribute>
-    <stringAttribute key="org.eclipse.debug.ui.target_debug_perspective" value="perspective_none"/>
-    <stringAttribute key="org.eclipse.jdt.junit.CONTAINER" value=""/>
-    <stringAttribute key="org.eclipse.jdt.launching.WORKING_DIRECTORY" value="jakarta-tapestry/junit"/>
-    <stringAttribute key="org.eclipse.debug.ui.target_run_perspective" value="perspective_none"/>
-</launchConfiguration>
diff --git a/3.0.4/eclipse/Tapestry-Vlib.launch b/3.0.4/eclipse/Tapestry-Vlib.launch
deleted file mode 100644
index 022a4f7..0000000
--- a/3.0.4/eclipse/Tapestry-Vlib.launch
+++ /dev/null
@@ -1,122 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<launchConfiguration type="org.eclipse.jdt.launching.localJavaApplication">
-    <booleanAttribute key="org.eclipse.jdt.launching.DEFAULT_CLASSPATH" value="false"/>
-    <stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="org.mortbay.jetty.Server"/>
-    <listAttribute key="org.eclipse.jdt.launching.CLASSPATH">
-        <listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
-&lt;runtimeClasspathEntry containerPath=&quot;JRE_LIB&quot; path=&quot;2&quot;
-    sourceAttachmentPath=&quot;JRE_SRC&quot; sourceRootPath=&quot;&quot; type=&quot;3&quot;/&gt;
-"/>
-        <listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
-&lt;runtimeClasspathEntry path=&quot;3&quot; projectName=&quot;jakarta-tapestry&quot; type=&quot;1&quot;/&gt;
-"/>
-        <listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
-&lt;runtimeClasspathEntry internalArchive=&quot;/jakarta-tapestry/config&quot;
-    path=&quot;3&quot; type=&quot;2&quot;/&gt;
-"/>
-        <listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
-&lt;runtimeClasspathEntry
-    internalArchive=&quot;/jakarta-tapestry/lib/ext/jakarta-oro-2.0.6.jar&quot;
-    path=&quot;3&quot; type=&quot;2&quot;/&gt;
-"/>
-        <listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
-&lt;runtimeClasspathEntry
-    internalArchive=&quot;/jakarta-tapestry/lib/ext/commons-logging-1.0.2.jar&quot;
-    path=&quot;3&quot; type=&quot;2&quot;/&gt;
-"/>
-        <listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
-&lt;runtimeClasspathEntry containerPath=&quot;JBOSS_DIR/client/jboss-j2ee.jar&quot;
-    path=&quot;3&quot; type=&quot;3&quot;/&gt;
-"/>
-        <listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
-&lt;runtimeClasspathEntry containerPath=&quot;JBOSS_DIR/server/all/lib/mail.jar&quot;
-    path=&quot;3&quot; type=&quot;3&quot;/&gt;
-"/>
-        <listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
-&lt;runtimeClasspathEntry
-    containerPath=&quot;JBOSS_DIR/client/jbossall-client.jar&quot; path=&quot;3&quot; type=&quot;3&quot;/&gt;
-"/>
-        <listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
-&lt;runtimeClasspathEntry containerPath=&quot;JETTY_DIR/lib/javax.servlet.jar&quot;
-    path=&quot;3&quot; type=&quot;3&quot;/&gt;
-"/>
-        <listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
-&lt;runtimeClasspathEntry containerPath=&quot;JETTY_DIR/ext/javax.xml.jaxp.jar&quot;
-    path=&quot;3&quot; type=&quot;3&quot;/&gt;
-"/>
-        <listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
-&lt;runtimeClasspathEntry containerPath=&quot;JETTY_DIR/ext/crimson.jar&quot;
-    path=&quot;3&quot; type=&quot;3&quot;/&gt;
-"/>
-        <listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
-&lt;runtimeClasspathEntry
-    containerPath=&quot;JETTY_DIR/lib/org.mortbay.jetty-jdk1.2.jar&quot; path=&quot;3&quot; type=&quot;3&quot;/&gt;
-"/>
-        <listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
-&lt;runtimeClasspathEntry containerPath=&quot;JETTY_DIR/ext/ant.jar&quot; path=&quot;3&quot; type=&quot;3&quot;/&gt;
-"/>
-        <listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
-&lt;runtimeClasspathEntry containerPath=&quot;JETTY_DIR/ext/jasper-compiler.jar&quot;
-    path=&quot;3&quot; type=&quot;3&quot;/&gt;
-"/>
-        <listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
-&lt;runtimeClasspathEntry containerPath=&quot;JETTY_DIR/ext/jasper-runtime.jar&quot;
-    path=&quot;3&quot; type=&quot;3&quot;/&gt;
-"/>
-        <listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
-&lt;runtimeClasspathEntry
-    internalArchive=&quot;/jakarta-tapestry/lib/ext/commons-lang-1.0.jar&quot;
-    path=&quot;3&quot; type=&quot;2&quot;/&gt;
-"/>
-        <listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
-&lt;runtimeClasspathEntry
-    internalArchive=&quot;/jakarta-tapestry/lib/ext/bsf-2.3.0.jar&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;
-"/>
-        <listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
-&lt;runtimeClasspathEntry
-    internalArchive=&quot;/jakarta-tapestry/lib/ext/commons-beanutils-1.6.1.jar&quot;
-    path=&quot;3&quot; type=&quot;2&quot;/&gt;
-"/>
-        <listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
-&lt;runtimeClasspathEntry
-    internalArchive=&quot;/jakarta-tapestry/lib/ext/commons-digester-1.5.jar&quot;
-    path=&quot;3&quot; type=&quot;2&quot;/&gt;
-"/>
-        <listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
-&lt;runtimeClasspathEntry
-    internalArchive=&quot;/jakarta-tapestry/lib/ext/commons-collections-2.1.jar&quot;
-    path=&quot;3&quot; type=&quot;2&quot;/&gt;
-"/>
-        <listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
-&lt;runtimeClasspathEntry
-    internalArchive=&quot;/jakarta-tapestry/lib/ext/commons-fileupload-1.0.jar&quot;
-    path=&quot;3&quot; type=&quot;2&quot;/&gt;
-"/>
-        <listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
-&lt;runtimeClasspathEntry
-    internalArchive=&quot;/jakarta-tapestry/lib/ext/ognl-2.6.3.jar&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;
-"/>
-        <listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
-&lt;runtimeClasspathEntry
-    internalArchive=&quot;/jakarta-tapestry/lib/runtime/log4j-1.2.6.jar&quot;
-    path=&quot;3&quot; type=&quot;2&quot;/&gt;
-"/>
-        <listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
-&lt;runtimeClasspathEntry
-    internalArchive=&quot;/jakarta-tapestry/lib/ext/javassist-2.5.1.jar&quot;
-    path=&quot;3&quot; type=&quot;2&quot;/&gt;
-"/>
-        <listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
-&lt;runtimeClasspathEntry
-    internalArchive=&quot;/jakarta-tapestry/lib/ext/commons-codec-1.2.jar&quot;
-    path=&quot;3&quot; type=&quot;2&quot;/&gt;
-"/>
-    </listAttribute>
-    <stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="jakarta-tapestry"/>
-    <stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="jetty.xml"/>
-    <stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Dorg.apache.tapestry.disable-caching=true  -Dorg.mortbay.util.FileResource.checkAliases=false   -Dorg.apache.tapestry.vlib.debug-enabled=true -Djava.naming.factory.initial=org.jnp.interfaces.NamingContextFactory -Djava.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces -Djava.naming.provider.url=localhost:1099"/>
-    <stringAttribute key="org.eclipse.debug.ui.target_debug_perspective" value="perspective_none"/>
-    <stringAttribute key="org.eclipse.jdt.launching.WORKING_DIRECTORY" value="jakarta-tapestry/examples/Vlib"/>
-    <stringAttribute key="org.eclipse.debug.ui.target_run_perspective" value="perspective_none"/>
-    <stringAttribute key="org.eclipse.debug.core.source_locator_id" value="org.eclipse.jdt.debug.ui.javaSourceLocator"/>
-</launchConfiguration>
diff --git a/3.0.4/eclipse/Tapestry-Workbench.launch b/3.0.4/eclipse/Tapestry-Workbench.launch
deleted file mode 100644
index 557d822..0000000
--- a/3.0.4/eclipse/Tapestry-Workbench.launch
+++ /dev/null
@@ -1,77 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<launchConfiguration type="org.eclipse.jdt.launching.localJavaApplication">
-    <booleanAttribute key="org.eclipse.jdt.launching.DEFAULT_CLASSPATH" value="false"/>
-    <stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="org.mortbay.jetty.Server"/>
-    <stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="jetty.xml"/>
-    <listAttribute key="org.eclipse.jdt.launching.SOURCE_PATH">
-        <listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt; &lt;runtimeClasspathEntry containerPath=&quot;JRE_LIB&quot; path=&quot;2&quot;     sourceAttachmentPath=&quot;JRE_SRC&quot; sourceRootPath=&quot;JRE_SRCROOT&quot; type=&quot;3&quot;/&gt; "/>
-        <listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt; &lt;runtimeClasspathEntry internalArchive=&quot;/jakarta-tapestry/config&quot;     path=&quot;3&quot; type=&quot;2&quot;/&gt; "/>
-        <listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt; &lt;runtimeClasspathEntry path=&quot;3&quot; projectName=&quot;jakarta-tapestry&quot; type=&quot;1&quot;/&gt; "/>
-        <listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt; &lt;runtimeClasspathEntry     internalArchive=&quot;/jakarta-tapestry/lib/ext/jakarta-oro-2.0.6.jar&quot;     path=&quot;3&quot; type=&quot;2&quot;/&gt; "/>
-        <listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt; &lt;runtimeClasspathEntry     internalArchive=&quot;/jakarta-tapestry/lib/ext/commons-logging-1.0.2.jar&quot;     path=&quot;3&quot; type=&quot;2&quot;/&gt; "/>
-        <listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt; &lt;runtimeClasspathEntry containerPath=&quot;JBOSS_DIR/client/jboss-j2ee.jar&quot;     path=&quot;3&quot; type=&quot;3&quot;/&gt; "/>
-        <listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt; &lt;runtimeClasspathEntry containerPath=&quot;JBOSS_DIR/lib/jboss-jmx.jar&quot;     path=&quot;3&quot; type=&quot;3&quot;/&gt; "/>
-        <listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt; &lt;runtimeClasspathEntry containerPath=&quot;JBOSS_DIR/server/all/lib/mail.jar&quot;     path=&quot;3&quot; type=&quot;3&quot;/&gt; "/>
-        <listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt; &lt;runtimeClasspathEntry containerPath=&quot;JBOSS_DIR/lib/jboss-system.jar&quot;     path=&quot;3&quot; type=&quot;3&quot;/&gt; "/>
-        <listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt; &lt;runtimeClasspathEntry containerPath=&quot;JBOSS_DIR/lib/jboss-common.jar&quot;     path=&quot;3&quot; type=&quot;3&quot;/&gt; "/>
-        <listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt; &lt;runtimeClasspathEntry     internalArchive=&quot;/jakarta-tapestry/lib/ext/commons-lang-1.0.jar&quot;     path=&quot;3&quot; type=&quot;2&quot;/&gt; "/>
-        <listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt; &lt;runtimeClasspathEntry internalArchive=&quot;/jakarta-tapestry/lib/ext&quot;     path=&quot;3&quot; type=&quot;2&quot;/&gt; "/>
-        <listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt; &lt;runtimeClasspathEntry     internalArchive=&quot;/jakarta-tapestry/lib/ext/bsf-2.3.0.jar&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt; "/>
-        <listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt; &lt;runtimeClasspathEntry containerPath=&quot;JETTY_DIR/lib/javax.servlet.jar&quot;     path=&quot;3&quot; type=&quot;3&quot;/&gt; "/>
-        <listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt; &lt;runtimeClasspathEntry containerPath=&quot;JETTY_DIR/ext/javax.xml.jaxp.jar&quot;     path=&quot;3&quot; type=&quot;3&quot;/&gt; "/>
-        <listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt; &lt;runtimeClasspathEntry containerPath=&quot;JETTY_DIR/ext/crimson.jar&quot;     path=&quot;3&quot; type=&quot;3&quot;/&gt; "/>
-        <listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt; &lt;runtimeClasspathEntry     containerPath=&quot;TAPESTRY_EXT_DIR/jcommon-0.6.4.jar&quot; path=&quot;3&quot; type=&quot;3&quot;/&gt; "/>
-        <listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt; &lt;runtimeClasspathEntry     containerPath=&quot;TAPESTRY_EXT_DIR/jfreechart-0.9.2.jar&quot; path=&quot;3&quot; type=&quot;3&quot;/&gt; "/>
-        <listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt; &lt;runtimeClasspathEntry     containerPath=&quot;TAPESTRY_EXT_DIR/mckoidb-0.94h.jar&quot; path=&quot;3&quot; type=&quot;3&quot;/&gt; "/>
-        <listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt; &lt;runtimeClasspathEntry containerPath=&quot;TAPESTRY_EXT_DIR/jdom-b8.jar&quot;     path=&quot;3&quot; type=&quot;3&quot;/&gt; "/>
-        <listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt; &lt;runtimeClasspathEntry containerPath=&quot;TAPESTRY_EXT_DIR/junit.jar&quot;     path=&quot;3&quot; type=&quot;3&quot;/&gt; "/>
-        <listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt; &lt;runtimeClasspathEntry     internalArchive=&quot;/jakarta-tapestry/lib/runtime/log4j-1.2.6.jar&quot;     path=&quot;3&quot; type=&quot;2&quot;/&gt; "/>
-        <listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt; &lt;runtimeClasspathEntry     containerPath=&quot;JETTY_DIR/lib/org.mortbay.jetty-jdk1.2.jar&quot; path=&quot;3&quot;     sourceAttachmentPath=&quot;DOWNLOADS/Jetty/Jetty-4.2.8.zip&quot;     sourceRootPath=&quot;&quot; type=&quot;3&quot;/&gt; "/>
-        <listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt; &lt;runtimeClasspathEntry containerPath=&quot;JETTY_DIR/ext/jasper-compiler.jar&quot;     path=&quot;3&quot; type=&quot;3&quot;/&gt; "/>
-        <listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt; &lt;runtimeClasspathEntry containerPath=&quot;JETTY_DIR/ext/jasper-runtime.jar&quot;     path=&quot;3&quot; type=&quot;3&quot;/&gt; "/>
-        <listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt; &lt;runtimeClasspathEntry containerPath=&quot;JDK_DIR/lib/tools.jar&quot; path=&quot;3&quot; type=&quot;3&quot;/&gt; "/>
-        <listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt; &lt;runtimeClasspathEntry containerPath=&quot;JETTY_DIR/ext/ant.jar&quot; path=&quot;3&quot; type=&quot;3&quot;/&gt; "/>
-    </listAttribute>
-    <stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Dorg.apache.tapestry.disable-caching=true"/>
-    <listAttribute key="org.eclipse.debug.ui.favoriteGroups">
-        <listEntry value="org.eclipse.debug.ui.launchGroup.debug"/>
-        <listEntry value="org.eclipse.debug.ui.launchGroup.run"/>
-    </listAttribute>
-    <stringAttribute key="org.eclipse.jdt.launching.WORKING_DIRECTORY" value="jakarta-tapestry/examples/Workbench"/>
-    <stringAttribute key="org.eclipse.debug.ui.target_run_perspective" value="perspective_default"/>
-    <booleanAttribute
-        key="org.eclipse.jdt.launching.DEFAULT_SOURCE_PATH" value="false"/>
-    <stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="jakarta-tapestry"/>
-    <listAttribute key="org.eclipse.jdt.launching.CLASSPATH">
-        <listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt; &lt;runtimeClasspathEntry containerPath=&quot;JRE_LIB&quot; path=&quot;2&quot;     sourceAttachmentPath=&quot;JRE_SRC&quot; sourceRootPath=&quot;JRE_SRCROOT&quot; type=&quot;3&quot;/&gt; "/>
-        <listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt; &lt;runtimeClasspathEntry internalArchive=&quot;/jakarta-tapestry/config&quot;     path=&quot;3&quot; type=&quot;2&quot;/&gt; "/>
-        <listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt; &lt;runtimeClasspathEntry path=&quot;3&quot; projectName=&quot;jakarta-tapestry&quot; type=&quot;1&quot;/&gt; "/>
-        <listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt; &lt;runtimeClasspathEntry     internalArchive=&quot;/jakarta-tapestry/lib/ext/jakarta-oro-2.0.6.jar&quot;     path=&quot;3&quot; type=&quot;2&quot;/&gt; "/>
-        <listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt; &lt;runtimeClasspathEntry     internalArchive=&quot;/jakarta-tapestry/lib/ext/commons-logging-1.0.2.jar&quot;     path=&quot;3&quot; type=&quot;2&quot;/&gt; "/>
-        <listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt; &lt;runtimeClasspathEntry containerPath=&quot;JBOSS_DIR/client/jboss-j2ee.jar&quot;     path=&quot;3&quot; type=&quot;3&quot;/&gt; "/>
-        <listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt; &lt;runtimeClasspathEntry containerPath=&quot;JBOSS_DIR/server/all/lib/mail.jar&quot;     path=&quot;3&quot; type=&quot;3&quot;/&gt; "/>
-        <listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt; &lt;runtimeClasspathEntry     internalArchive=&quot;/jakarta-tapestry/lib/ext/commons-lang-1.0.jar&quot;     path=&quot;3&quot; type=&quot;2&quot;/&gt; "/>
-        <listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt; &lt;runtimeClasspathEntry     internalArchive=&quot;/jakarta-tapestry/lib/ext/ognl-2.6.3.jar&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt; "/>
-        <listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt; &lt;runtimeClasspathEntry     internalArchive=&quot;/jakarta-tapestry/lib/ext/bsf-2.3.0.jar&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt; "/>
-        <listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt; &lt;runtimeClasspathEntry containerPath=&quot;JETTY_DIR/lib/javax.servlet.jar&quot;     path=&quot;3&quot; type=&quot;3&quot;/&gt; "/>
-        <listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt; &lt;runtimeClasspathEntry containerPath=&quot;JETTY_DIR/ext/javax.xml.jaxp.jar&quot;     path=&quot;3&quot; type=&quot;3&quot;/&gt; "/>
-        <listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt; &lt;runtimeClasspathEntry containerPath=&quot;JETTY_DIR/ext/crimson.jar&quot;     path=&quot;3&quot; type=&quot;3&quot;/&gt; "/>
-        <listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt; &lt;runtimeClasspathEntry     internalArchive=&quot;/jakarta-tapestry/ext-dist/jdom-b8.jar&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt; "/>
-        <listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt; &lt;runtimeClasspathEntry     internalArchive=&quot;/jakarta-tapestry/ext-dist/junit.jar&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt; "/>
-        <listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt; &lt;runtimeClasspathEntry     internalArchive=&quot;/jakarta-tapestry/lib/ext/commons-beanutils-1.6.1.jar&quot;     path=&quot;3&quot; type=&quot;2&quot;/&gt; "/>
-        <listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt; &lt;runtimeClasspathEntry     internalArchive=&quot;/jakarta-tapestry/lib/ext/commons-digester-1.5.jar&quot;     path=&quot;3&quot; type=&quot;2&quot;/&gt; "/>
-        <listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt; &lt;runtimeClasspathEntry     internalArchive=&quot;/jakarta-tapestry/examples/Workbench/lib/jCharts-0.6.0.jar&quot;     path=&quot;3&quot; type=&quot;2&quot;/&gt; "/>
-        <listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt; &lt;runtimeClasspathEntry     internalArchive=&quot;/jakarta-tapestry/lib/ext/commons-collections-2.1.jar&quot;     path=&quot;3&quot; type=&quot;2&quot;/&gt; "/>
-        <listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt; &lt;runtimeClasspathEntry     internalArchive=&quot;/jakarta-tapestry/lib/runtime/log4j-1.2.6.jar&quot;     path=&quot;3&quot; type=&quot;2&quot;/&gt; "/>
-        <listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt; &lt;runtimeClasspathEntry     containerPath=&quot;JETTY_DIR/lib/org.mortbay.jetty-jdk1.2.jar&quot; path=&quot;3&quot; type=&quot;3&quot;/&gt; "/>
-        <listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt; &lt;runtimeClasspathEntry containerPath=&quot;JETTY_DIR/ext/jasper-compiler.jar&quot;     path=&quot;3&quot; type=&quot;3&quot;/&gt; "/>
-        <listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt; &lt;runtimeClasspathEntry containerPath=&quot;JETTY_DIR/ext/jasper-runtime.jar&quot;     path=&quot;3&quot; type=&quot;3&quot;/&gt; "/>
-        <listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt; &lt;runtimeClasspathEntry containerPath=&quot;JETTY_DIR/ext/ant.jar&quot; path=&quot;3&quot; type=&quot;3&quot;/&gt; "/>
-        <listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt; &lt;runtimeClasspathEntry containerPath=&quot;JDK_DIR/lib/tools.jar&quot; path=&quot;3&quot; type=&quot;3&quot;/&gt; "/>
-        <listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt; &lt;runtimeClasspathEntry     internalArchive=&quot;/jakarta-tapestry/lib/ext/commons-fileupload-1.0.jar&quot;     path=&quot;3&quot; type=&quot;2&quot;/&gt; "/>
-        <listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt; &lt;runtimeClasspathEntry     internalArchive=&quot;/jakarta-tapestry/lib/ext/javassist-2.5.1.jar&quot;     path=&quot;3&quot; type=&quot;2&quot;/&gt; "/>
-        <listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt; &lt;runtimeClasspathEntry     internalArchive=&quot;/jakarta-tapestry/lib/ext/commons-codec-1.2.jar&quot;     path=&quot;3&quot; type=&quot;2&quot;/&gt; "/>
-    </listAttribute>
-    <stringAttribute key="org.eclipse.debug.ui.target_debug_perspective" value="perspective_default"/>
-    <stringAttribute key="org.eclipse.debug.core.source_locator_id" value="org.eclipse.jdt.debug.ui.javaSourceLocator"/>
-</launchConfiguration>
diff --git a/3.0.4/examples/DevelopmentEnvironment/build.xml b/3.0.4/examples/DevelopmentEnvironment/build.xml
deleted file mode 100644
index d2bfc3e..0000000
--- a/3.0.4/examples/DevelopmentEnvironment/build.xml
+++ /dev/null
@@ -1,119 +0,0 @@
-<?xml version="1.0"?>
-
-<project name="Simple Dev Environment" default="compile">
-
-  <!-- This should point to where you have Tapestry installed -->
-  <property name="tapestry.install.dir" value="../../"/>
-
-  <!-- This property is only required if you wish to deploy to -->
-  <!-- your favorite web container. Ignore otherwise -->
-  <property name="deployment.dir" value="./deploy"/>
-
-
-  <!-- NO NEED TO CHANGE ANYTHING FROM HERE DOWN -->
-
-  <property name="classes.dir" value="./web/WEB-INF/classes"/>
-  <property name="src.dir" value="./src"/>
-  <property name="war.dir" value="./webapps"/>
-  <property name="war.name" value="learn-tapestry.war"/>
-
-  <property name="root.dir" value="${tapestry.install.dir}"/>
-  <property file="${root.dir}/config/Version.properties"/>
-  <property file="${root.dir}/config/build.properties"/>
-  <property file="${root.dir}/config/common.properties"/>
-  <property name="private.dir" value="private"/>
-
-  <path id="tutorial.classpath">
-    <pathelement location="${lib.ext.dir}/javax.servlet.jar"/>
-    <pathelement location="${lib.ext.dir}/${log4j.jar}"/>
-    <pathelement location="${lib.ext.dir}/javax.xml.jaxp.jar"/>
-    <pathelement location="${lib.ext.dir}/org.apache.crimson.jar"/>
-    <pathelement location="${lib.ext.dir}/org.mortbay.jetty.jar"/>
-    <pathelement location="${lib.ext.dir}/${jakarta-oro.jar}"/>
-    <pathelement location="${lib.ext.dir}/${ognl.jar}"/>
-    <pathelement location="config"/>
-  </path>
-
-  <path id="libs">
-    <fileset dir="${tapestry.install.dir}/lib">
-      <include name="net.sf.*.jar"/>
-    </fileset>
-    <fileset dir="${tapestry.install.dir}/lib/ext">
-      <include name="*.jar"/>
-    </fileset>
-  </path>
-
-  <target name="prepare">
-    <mkdir dir="${deployment.dir}"/>
-    <mkdir dir="${war.dir}"/>
-    <mkdir dir="${src.dir}"/>
-    <mkdir dir="${classes.dir}"/>
-    <mkdir dir="web/WEB-INF/lib"/>
-
-    <copy todir="${classes.dir}">
-        <fileset dir="${src.dir}">
-	  <include name="**/*.page"/>
-	  <include name="**/*.html"/>
-	  <include name="**/*.application"/>
-	</fileset>
-    </copy>
-
-    <copy todir="web/WEB-INF/lib">
-     <fileset dir="${tapestry.install.dir}/lib">
-      <include name="net.sf.*"/>
-     </fileset>
-    </copy>
-  </target>
-
-  <target name="compile" depends="prepare">
-    <javac srcdir="${src.dir}"
-	   destdir="${classes.dir}" target="1.1" source="1.3">
-      <classpath refid="libs"/>
-    </javac>
-  </target>
-
-  <!-- Run your code within the standard Jetty Web Container -->
-  <target name="run" depends="war">
-    <delete dir="${private.dir}" quiet="true"/>
-    <mkdir dir="${private.dir}"/>
-
-    <echo>Running you example code on port 8081 ...</echo>
-    <java
-	  classname="org.mortbay.jetty.Server"
-	  classpathref="tutorial.classpath"
-	  fork="true"
-	  maxmemory="128MB">
-
-      <arg value="config/jetty-dev-env.xml"/>
-
-      <!-- Enable debugging when running the tutorial -->
-      <jvmarg line="-showversion -Xdebug -Xnoagent"/>
-      <jvmarg line="-Xrunjdwp:transport=dt_socket,suspend=n,server=y,address=20150"/>
-
-      <!-- Jetty can get easily confused (under NT) unless this is turned off. -->
-      <sysproperty key="org.mortbay.util.FileResource.checkAliases" value="false"/>
-
-      <sysproperty key="net.sf.tapestry.asset.dir" value="${private.dir}"/>
-      <sysproperty key="net.sf.tapestry.asset.URL" value="/private"/>
-    </java>
-  </target>
-
-  <target name="war" depends="compile">
-    <jar destfile="${war.dir}/${war.name}"
-	 basedir="./web"/>
-  </target>
-
-  <target name="deploy" depends="war">
-    <copy todir="${deployment.dir}">
-      <fileset dir="${war.dir}"/>
-    </copy>
-  </target>
-
-  <target name="clean">
-    <delete dir="${war.dir}"/>
-		<delete dir="${classes.dir}"/>
-		<delete dir="${private.dir}"/>
-		<delete dir="${deployment.dir}"/>
-  </target>
-
-</project>
diff --git a/3.0.4/examples/DevelopmentEnvironment/config/jetty-dev-env.xml b/3.0.4/examples/DevelopmentEnvironment/config/jetty-dev-env.xml
deleted file mode 100644
index fe44249..0000000
--- a/3.0.4/examples/DevelopmentEnvironment/config/jetty-dev-env.xml
+++ /dev/null
@@ -1,34 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!-- $Id$ -->
-<!DOCTYPE Configure PUBLIC
-	"-//Mort Bay Consulting//DTD Configure 1.2//EN"
-	"http://jetty.mortbay.org/configure_1_2.dtd">
-<!--
-  This configuration file is used to allow the Tutorial to be run directly from
-  the main distribution directory (i.e., without having to build the frameworks).
-  -->
-<Configure class="org.mortbay.http.HttpServer">
-  <Call name="addListener">
-    <Arg>
-      <New class="org.mortbay.http.SocketListener">
-        <Set name="Port">8081</Set>
-        <Set name="MinThreads">1</Set>
-        <Set name="MaxThreads">10</Set>
-        <Set name="MaxIdleTimeMs">50000</Set>
-      </New>
-    </Arg>
-  </Call>
-  
-  <Call name="addWebApplication">
-    <Arg>/learn-tapestry</Arg>
-    <Arg>webapps/learn-tapestry.war</Arg>
-    <Arg>config/webdefault.xml</Arg>
-    <Arg type="boolean">false</Arg>
-  </Call>
-  
-  <Call name="addContext">
-    <Arg>/private/*</Arg>
-    <Set name="ResourceBase">private</Set>
-    <Set name="ServingResources">TRUE</Set>
-  </Call>
-</Configure>
diff --git a/3.0.4/examples/DevelopmentEnvironment/config/webdefault.xml b/3.0.4/examples/DevelopmentEnvironment/config/webdefault.xml
deleted file mode 100644
index a019a41..0000000
--- a/3.0.4/examples/DevelopmentEnvironment/config/webdefault.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">   
-<!-- $Id$ -->
-<!-- This file contains the default settings for webapplications -->
-
-<web-app>
-  <description>
-    Default web.xml file.  
-    This file is applied to a Web application before it's own WEB_INF/web.xml file
-  </description>
- 
-  <session-config>
-    <session-timeout>60</session-timeout>
-  </session-config>
-
-  <welcome-file-list>
-    <welcome-file>index.html</welcome-file>
-  </welcome-file-list>
-
-</web-app>
diff --git a/3.0.4/examples/DevelopmentEnvironment/web/WEB-INF/web.xml b/3.0.4/examples/DevelopmentEnvironment/web/WEB-INF/web.xml
deleted file mode 100644
index 0b1f6a5..0000000
--- a/3.0.4/examples/DevelopmentEnvironment/web/WEB-INF/web.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0"?>
-<!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>
-  <display-name>Tapestry Tutorial</display-name>
-  
-  <!-- A typical Tapestry WAR will have exactly one servlet.  The Tutorial is actually
-       several seperate Tapestry application bundled together.  The framework allows for
-       this (you'll notice that each object stored in the ServletContext has a unique
-       name to avoid collisions between sibling Tapestry applications.
-
-       It's a good idea to load the servlet on startup; this helps get the large
-       number of Tapestry classes loaded.
-
-       -->
-
-	<!-- Since this is the demo build environment, no Tapestry Applications are defined -->
-
-  <session-config>
-  	<session-timeout>15</session-timeout>
-  </session-config>
-  
-  <welcome-file-list>
-    <welcome-file>index.html</welcome-file>
-  </welcome-file-list>
-</web-app>
diff --git a/3.0.4/examples/DevelopmentEnvironment/web/index.html b/3.0.4/examples/DevelopmentEnvironment/web/index.html
deleted file mode 100644
index e117f14..0000000
--- a/3.0.4/examples/DevelopmentEnvironment/web/index.html
+++ /dev/null
@@ -1,9 +0,0 @@
-<html>
-    <head>
-      <title>Tapestry Tutorial Web Application</title>
-    </head>
-    <body>
-      <h1>Tapestry Tutorial Web Application</h1>
-      Your build environment is setup correctly!
-    </body>
-</html>
\ No newline at end of file
diff --git a/3.0.4/examples/Vlib/.cvsignore b/3.0.4/examples/Vlib/.cvsignore
deleted file mode 100644
index 5590792..0000000
--- a/3.0.4/examples/Vlib/.cvsignore
+++ /dev/null
@@ -1,2 +0,0 @@
-classes

-private

diff --git a/3.0.4/examples/Vlib/build.xml b/3.0.4/examples/Vlib/build.xml
deleted file mode 100644
index 2a8b823..0000000
--- a/3.0.4/examples/Vlib/build.xml
+++ /dev/null
@@ -1,105 +0,0 @@
-<?xml version="1.0"?>
-<!-- $Id$ -->
-<project name="Virtual Library Example" default="install">
-	<property name="root.dir" value="../.."/>
-	<property file="${root.dir}/config/Version.properties"/>
-	<property file="${root.dir}/config/build.properties"/>
-	<property file="${root.dir}/config/common.properties"/>
-	<path id="jetty.classpath">
-		<fileset dir="${jetty.dir}">
-			<include name="**/javax.*.jar"/>
-		</fileset>
-	</path>
-	<path id="compile.classpath">
-		<fileset dir="${root.lib.dir}">
-			<include name="*.jar"/>
-			<include name="examples/${vlibbeans.jar}"/>
-			<include name="${ext.dir}/*.jar"/>
-			<include name="${j2ee.dir}/*.jar"/>
-		</fileset>
-	</path>
-	<property name="private.dir" value="private"/>
-	<target name="init">
-		<mkdir dir="${classes.dir}"/>
-	</target>
-	<target name="clean">
-		<delete dir="${classes.dir}" quiet="true"/>
-		<delete dir="${private.dir}" quiet="true"/>
-	</target>
-	<target name="compile" depends="init"
-		description="Compile all classes in the framework.">
-		<javac srcdir="${src.dir}" destdir="${classes.dir}" debug="on"
-			target="1.1" source="1.3">
-			<classpath refid="compile.classpath"/>
-		</javac>
-	</target>
-	<target name="install" depends="compile"
-		description="Compile all classes and build the installed WAR including all package resources."
-		>
-		<war warfile="${examples.dir}/${vlib.war}" webxml="context/WEB-INF/web.xml">
-			<fileset dir="context">
-				<exclude name="**/Thumbs.db"/>
-				<exclude name="**/*.jbf"/>
-				<exclude name="WEB-INF/web.xml"/>
-			</fileset>
-			<classes dir="${classes.dir}"/>
-			<!-- Pick up a few non-class resources from source directory.
-      	   This includes a few specifications, scripts, and such.  -->
-			<classes dir="${src.dir}">
-				<exclude name="**/*.java"/>
-				<exclude name="**/package.html"/>
-			</classes>
-		</war>
-	</target>
-	<target name="run" description="Run the Vlib application." depends="install">
-		<delete dir="${private.dir}" quiet="true"/>
-		<mkdir dir="${private.dir}"/>
-		<java classname="org.mortbay.jetty.Server" fork="true">
-			<classpath>
-				<!-- Favor files in src over copies in classes -->
-				<pathelement location="${src.dir}"/>
-				<pathelement location="${classes.dir}"/>
-				<pathelement
-					location="${jetty.dir}/lib/org.mortbay.jetty-jdk12.jar"/>
-				<fileset dir="${root.lib.dir}">
-					<include name="${runtime.dir}/*.jar"/>
-				</fileset>
-				<!-- Runtime client libraries -->
-				<pathelement location="${jboss.lib.dir}/jboss-common.jar"/>
-				<pathelement location="${jboss.lib.dir}/jboss-system.jar"/>
-				<pathelement location="${jboss.client.dir}/jboss-client.jar"/>
-				<pathelement location="${jboss.client.dir}/jbosssx-client.jar"/>
-				<pathelement location="${jboss.client.dir}/jnp-client.jar"/>
-				<pathelement location="${jboss.client.dir}/jnet.jar"/>
-				<path refid="compile.classpath"/>
-				<pathelement location="${root.dir}/config"/>
-			</classpath>
-			<arg value="jetty.xml"/>
-
-			<sysproperty key="org.apache.tapestry.vlib.debug-enabled" value="true"/>
-			<!-- Enable debugging on port 20150 -->
-			<jvmarg line="-showversion -Xdebug -Xnoagent"/>
-			<jvmarg
-				line="-Xrunjdwp:transport=dt_socket,suspend=n,server=y,address=20150"
-				/>
-			<sysproperty key="java.compiler" value="NONE"/>
-			
-			<sysproperty key="org.apache.tapestry.disable-caching" value="true"/>
-			<sysproperty key="org.apache.tapestry.enable-reset-service" value="true"
-				/>
-			<sysproperty key="org.apache.tapestry.asset.dir" value="${private.dir}"
-				/>
-			<sysproperty key="org.apache.tapestry.asset.URL" value="/${private.dir}"
-				/>
-				
-			<!-- JNDI Configuration for JBoss -->
-			<sysproperty key="java.naming.factory.initial"
-				value="org.jnp.interfaces.NamingContextFactory"/>
-			<sysproperty key="java.naming.factory.url.pkgs"
-				value="org.jboss.naming:org.jnp.interfaces"/>
-			<sysproperty key="java.naming.provider.url" value="localhost:1099"/>
-			<sysproperty key="org.mortbay.util.FileResource.checkAliases"
-				value="false"/>
-		</java>
-	</target>
-</project>
diff --git a/3.0.4/examples/Vlib/context/ApplicationUnavailable.html b/3.0.4/examples/Vlib/context/ApplicationUnavailable.html
deleted file mode 100644
index a879259..0000000
--- a/3.0.4/examples/Vlib/context/ApplicationUnavailable.html
+++ /dev/null
@@ -1,52 +0,0 @@
-<!-- $Id$ -->
-<html>
-<head>
-<title>Virtual Library: Search for Books</title>
-<link rel="stylesheet" type="text/css" href="scripts/style_virtlib_pcIE55.css">
-</head>
-<span jwcid="$content$">
-	
-<span jwcid="@Shell" title="Virtual Library: Application Unavailable" 
-	stylesheets="ognl:{ assets.stylesheet, assets.exception_stylesheet }">
-<body jwcid="@Body" leftmargin="0" topmargin="0" marginwidth="0" marginheight="0">
-	
-<table border="0" cellpadding="0" cellspacing="0" width="691" height="110">
-  <tr>
-    <td rowspan="1" colspan="3" width="691" height="58"><img src="images/title/title_1x1.png" width="691" height="58" border="0"/></td>
-  </tr>
-  <tr>
-    <td rowspan="1" colspan="1" width="91" height="40"><img src="images/title/title_2x1.png" width="91" height="40" border="0"/></td>
-    <td rowspan="1" colspan="1" width="345" height="40"><img src="images/title/blank.png" width="345" height="40" border="0"/></td>
-    <td rowspan="1" colspan="1" width="255" height="40"><img src="images/title/title_2x3.png" width="255" height="40" border="0"/></td>
-  </tr>
-  <tr>
-    <td rowspan="1" colspan="3" width="691" height="12"><img src="images/title/title_3x1.png" width="691" height="12" border="0"/></td>
-  </tr>
-</table>
-
-<table style="{ padding-left: 4px }">
-	
-<tr>
-	<td>
-<span jwcid="@ShowError"/>
-
-<p>The Virtual Library application is temporarily unavailable due to
-system errors.  You may attempt to 
-<a jwcid="@ServiceLink" service="restart" href="#">restart the application</a>.
-</p>
-
-<span jwcid="@Conditional" condition="ognl:engine.debugEnabled">
-
-<span jwcid="@ExceptionDisplay" exceptions="ognl:exceptions"/>
-<span jwcid="@Delegator" delegate="ognl:requestCycle.requestContext"/>
-<span jwcid="@contrib:InspectorButton"/>
-</span>
-
-</td>
-</tr>
-</table>
-
-</body>
-</span>
-</span>
-</html>
diff --git a/3.0.4/examples/Vlib/context/BookMatches.html b/3.0.4/examples/Vlib/context/BookMatches.html
deleted file mode 100644
index e72a542..0000000
--- a/3.0.4/examples/Vlib/context/BookMatches.html
+++ /dev/null
@@ -1,31 +0,0 @@
-<!-- $Id$ -->
-<html jwcid="$content$">
-<body jwcid="@Border" title="Matching Books" browser="ognl:components.browser">
-
-<table class="data">
-  <tr>
-    <th><span jwcid="sortTitle">Title</span></th>
-    <th><span jwcid="sortAuthor">Author</span></th>
-    <th><span jwcid="sortPublisher">Publisher</span></th>
-    <th><span jwcid="sortOwner">Owner</span></th>
-    <th><span jwcid="sortBorrower">Borrowed&nbsp;By</span></th>
-    <th>Borrow</th>
-  </tr>
-    <tr jwcid="browser@Browser" query="ognl:bookQuery" value="ognl:currentMatch" listener="ognl:listeners.requery">
-      <td><a href="#" jwcid="@BookLink" book="ognl:currentMatch">Swing Second Edition</a>
-      </td>
-      <td><span jwcid="@Insert" value="ognl:currentMatch.author">Robinson and Vorobiev</span>
-      </td>
-      <td><span jwcid="@Insert" value="ognl:currentMatch.publisherName">Manning</span>
-      </td>
-      <td><a jwcid="ownerLink" href="#">Jim Moran</a>
-      </td>
-      <td><a jwcid="holderLink" href="#">Howard Lewis Ship</a>
-      </td>
-      <td class="icon"><a jwcid="@Borrow" book="ognl:currentMatch" href="#"><img src="images/checkout.png" alt="Borrow" border="0" vspace="2"></a>
-      </td>
-    </tr>
-</table>
-
-</body>
-</html>
diff --git a/3.0.4/examples/Vlib/context/BorrowedBooks.html b/3.0.4/examples/Vlib/context/BorrowedBooks.html
deleted file mode 100644
index ad86442..0000000
--- a/3.0.4/examples/Vlib/context/BorrowedBooks.html
+++ /dev/null
@@ -1,41 +0,0 @@
-<!-- $Id$ -->
-<html jwcid="$content$">
-<body jwcid="@Border" browser="ognl:components.browser">
-<span jwcid="@ShowError"/>
-<span jwcid="@ShowMessage"/>
-
-<span jwcid="@Conditional" condition="ognl:components.browser.resultCount == 0">
-	
-<span jwcid="@Information">
-	You have no borrowed books.
-</span>
-	
-</span>
-
-<span jwcid="@Conditional" condition="ognl:components.browser.resultCount != 0">
-
-<table class="data">
-  <tr>
-    <th><span jwcid="sortTitle">Title</span></th>
-    <th><span jwcid="sortAuthor">Author</span></th>
-    <th><span jwcid="sortPublisher">Publisher</span></th>
-    <th><span jwcid="sortOwner">Owner</span></th>
-    <th>Return</th>
-  </tr>
-  <tr jwcid="browser@Browser" query="ognl:borrowedQuery" value="ognl:currentBook" listener="ognl:listeners.requery">
-    <td><a jwcid="@BookLink" book="ognl:currentBook" href="#" class="clsDataBlue">DocBook:The Definitive Guide</a>
-    </td>
-    <td><span jwcid="@Insert" value="ognl:currentBook.author">Walsh &#38; Muellner</span>
-    </td>
-    <td><span jwcid="@Insert" value="ognl:currentBook.publisherName">O'Reilly</span>
-    </td>
-    <td><a jwcid="@PersonLink" name="ognl:currentBook.ownerName" id="ognl:currentBook.ownerId" href="#">Jim Moran</a>
-    </td>
-    <td class="icon"><a jwcid="@DirectLink" parameters="ognl:currentBook.id" listener="ognl:listeners.returnBook" href="#"><img jwcid="returnRollover" src="images/return.png" alt="Return" width="25" height="26" border="0"/></a>
-    </td>
-  </tr>
-</table>
-</span>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/3.0.4/examples/Vlib/context/ConfirmBookDelete.html b/3.0.4/examples/Vlib/context/ConfirmBookDelete.html
deleted file mode 100644
index e9128b5..0000000
--- a/3.0.4/examples/Vlib/context/ConfirmBookDelete.html
+++ /dev/null
@@ -1,20 +0,0 @@
-<!-- $Id$ -->
-<html jwcid="$content$">
-<body jwcid="@Border">
-	
-<span jwcid="@Question">
-Really delete book 
-	"<span jwcid="@Insert" value="ognl:bookTitle">Greyhounds</span>"?	
-</span>
-	
-<p>
-Deleting a book occurs immediately and is irrevocable.	
-</p>
-
-	
-<a jwcid="confirm" href="#"><img jwcid="confirmRollover" src="images/delete-confirm.png" height="38" width="89" border="0" alt="Delete"/></a>
-&nbsp;&nbsp;
-<a jwcid="@PageLink" page="MyLibrary"><img jwcid="cancelRollover" src="images/delete-cancel.png" height="38" width="89" border="0" alt="Cancel"/></a>
-
-</body>
-</html>
diff --git a/3.0.4/examples/Vlib/context/EditBook.html b/3.0.4/examples/Vlib/context/EditBook.html
deleted file mode 100644
index fbc3d98..0000000
--- a/3.0.4/examples/Vlib/context/EditBook.html
+++ /dev/null
@@ -1,82 +0,0 @@
-<!-- $Id$ -->
-<html jwcid="$content$">
-<body jwcid="@Border">
-	
-	<p>
-	Make your changes to the book using the form below. Fields marked with
-	<span class="required-field">*</span> are required.
-</p>
-
-<span jwcid="@ShowError"/>
-<span jwcid="@ShowValidationError" delegate="ognl:validationDelegate"/>
-
-<form jwcid="@Form" listener="ognl:listeners.formSubmit" delegate="ognl:validationDelegate">
-<span jwcid="@Hidden" value="ognl:bookId"/>
-  <table class="form">
-    <tr>
-      <th><span jwcid="@FieldLabel" field="ognl:components.inputTitle">Title</span></th>
-      <td><span class="required-field">*</span></td>
-      <td width="420"><input jwcid="inputTitle" type="text" size="50" maxlength="100"/>
-      </td>
-    </tr>
-    <tr>
-      <th><span jwcid="@FieldLabel" field="ognl:components.inputAuthor">Author</span></th>
-      	
-          <td><span class="required-field">*</span></td>
-      <td><input jwcid="inputAuthor" type="text" size="30" maxlength="60"/>
-      </td>
-    </tr>
-    <tr>
-      <th>ISBN</th>
-      <td></td>
-      <td><input jwcid="@TextField" type="text" value="ognl:attributes.ISBN" size="20" maxlength="20"/>
-      </td>
-    </tr>
-    <tr>
-      <th><span jwcid="@FieldLabel" field="ognl:components.inputPublisherName">Publisher</span></th>
-      <td><span class="required-field">*</span></td>
-      <td><select jwcid="inputPublisher@PropertySelection" value="ognl:attributes.publisherId" model="ognl:engine.publisherModel"/>
-<input jwcid="inputPublisherName" type="text" size="20" maxlength="40"/>
-      </td>
-    </tr>
-    <tr>
-      <td colspan="2">
-      </td>
-      <td>Note: If the Publisher is not listed, leave the option blank and type the name of the publisher in the field to the right.
-      	<span jwcid="@Script" script="Publisher.script" select="ognl:components.inputPublisher" field="ognl:components.inputPublisherName"/>
-      </td>
-    </tr>
-    <tr>
-      <th>Description</th>
-      <td></td>
-      <td><textarea jwcid="@TextArea" value="ognl:attributes.description" cols="35" rows="8"></textarea>
-      </td>
-    </tr>
-    <tr>
-      <th>Borrowed By</th>
-      <td><span class="required-field">*</span></td>
-      <td><select jwcid="@PropertySelection" value="ognl:attributes.holderId" model="ognl:engine.personModel"/>
-      </td>
-    </tr>
-    <tr>
-      <th>Hidden</th>
-      <td></td>
-      <td><input jwcid="@Checkbox" selected="ognl:attributes.hidden" type="checkbox"/>Check to prevent this book from appearing in searches.
-      </td>
-    </tr>
-    <tr>
-      <th>Lendable</th>
-      <td></td>
-      <td><input jwcid="@Checkbox" selected="ognl:attributes.lendable" type="checkbox"/>Leave checked to allow this book to be borrowed by others.
-      </td>
-    </tr>
-    <tr>
-      <td colspan="2">
-      </td>
-      <td><input type="image" src="images/update.png" height="20" width="52" border="0" alt="Update"/>
-      </td>
-    </tr>
-  </table>
-</form>
-</body>
-</html>
diff --git a/3.0.4/examples/Vlib/context/EditProfile.html b/3.0.4/examples/Vlib/context/EditProfile.html
deleted file mode 100644
index 11a97c7..0000000
--- a/3.0.4/examples/Vlib/context/EditProfile.html
+++ /dev/null
@@ -1,52 +0,0 @@
-<!-- $Id$ -->
-<html jwcid="$content$">
-<body jwcid="@Border">
-
-<p>
-	Update your registration information using the form below. Fields marked with
-	<span class="required-field">*</span> are required.
-</p>
-
-<span jwcid="@ShowError"/>
-<span jwcid="@ShowValidationError" delegate="ognl:validationDelegate"/>
-
-<form jwcid="@Form" listener="ognl:listeners.updateProfile" delegate="ognl:validationDelegate">
-  <table class="form">
-    <tr>
-      <th>First Name</th>
-      <td></td>
-      <td width="390"><input jwcid="@TextField" value="ognl:attributes.firstName" size="30" maxlength="30" type="text"/>
-      </td>
-    </tr>
-    <tr>
-      <th><span jwcid="@FieldLabel" field="ognl:components.inputLastName">Last Name</span></th>
-    <td><span class="required-field">*</span></td>
-      <td><input jwcid="inputLastName" size="30" maxlength="30" type="text"/>
-      </td>
-    </tr>
-    <tr>
-      <th><span jwcid="@FieldLabel" field="ognl:components.inputEmail">E-mail</span></th>
-      <td><span class="required-field">*</span></td>
-      <td><input jwcid="inputEmail" type="text" size="30" maxlength="60"/>
-      </td>
-    </tr>
-    <tr>
-      <th><span jwcid="@FieldLabel" field="ognl:components.inputPassword1">Password</span></th>
-      <td></td>
-      <td><input jwcid="inputPassword1" type="password" size="20" maxlength="20"/>
-      </td>
-    </tr>
-    <tr>
-      <th><span jwcid="@FieldLabel" field="ognl:components.inputPassword2">Password (again)</span></th>
-      <td></td>
-      <td><input jwcid="inputPassword2" type="password" size="20" maxlength="20"/>
-      </td>
-    </tr>
-    <tr>
-      <td colspan="2"></td>
-      <td><input type="image" src="images/update.png" height="20" width="52" border="0" alt="Update"></td>
-    </tr>
-  </table>
-</form>
-</body>
-</html>
diff --git a/3.0.4/examples/Vlib/context/EditPublishers.html b/3.0.4/examples/Vlib/context/EditPublishers.html
deleted file mode 100644
index 78d7ff7..0000000
--- a/3.0.4/examples/Vlib/context/EditPublishers.html
+++ /dev/null
@@ -1,27 +0,0 @@
-<!-- $Id$ -->
-<html jwcid="$content$">
-<body jwcid="@Border">
-<span jwcid="@ShowMessage"/>
-<span jwcid="@ShowError"/>
-<form jwcid="@Form" listener="ognl:listeners.processForm">
-  <p>This page allows you to rename and delete publishers.
-  </p>
-  <table class="data">
-    <tr>
-      <th>Publisher</th>
-      <th>Delete</th>
-    </tr>
-    <tr jwcid="listEdit">
-      <td class="control"><input jwcid="inputName@TextField" value="ognl:publisher.name" size="40" maxlength="40"/>
-      </td>
-      <td class="checkbox"><input type="checkbox" jwcid="delete@Checkbox" selected="ognl:listEditMap.deleted"/>
-      </td>
-    </tr>
-    <tr>
-    <td class="control"><input type="image" src="images/update.png" width="52" height="20" alt="Update"/>
-    </td>	
-    </tr>
-  </table>
-</form>
-</body>
-</html>
diff --git a/3.0.4/examples/Vlib/context/EditUsers.html b/3.0.4/examples/Vlib/context/EditUsers.html
deleted file mode 100644
index c2cb40e..0000000
--- a/3.0.4/examples/Vlib/context/EditUsers.html
+++ /dev/null
@@ -1,61 +0,0 @@
-<!-- $Id$ -->
-<html jwcid="$content$">
-<body jwcid="@Border">
-<p>This page is used to edit the roster of users on the system.</p>
-<ul>
-	<li>Admin: If checked, the user is an administrator.</li>
-	<li>Locked Out: If checked, the user will not be allowed to login.</li>
-	<li>Change Password:  If checked, the a new password will be assigned to the user.</li>
-	<li>Delete:  If checked, the user will be irrevocably removed from the Virtual Library database.
-Any books owned by the user will be transferred to the current user.</li>
-</ul>
-
-<span jwcid="@ShowMessage"/>
-<span jwcid="@ShowError"/>
-<span jwcid="@ShowValidationError" delegate="ognl:validationDelegate"/>
-
-<form jwcid="@Form" listener="ognl:listeners.updateUsers" delegate="ognl:validationDelegate">
-	
-  <table width="100%" class="data">
-    <tr>
-      <th>User / E-Mail
-      </th>
-      <th>Admin
-      </th>
-      <th>Locked&nbsp;Out
-      </th>
-      <th>Change&nbsp;Password
-      </th>
-      <th>Delete
-      </th>
-    </tr>
-    <tr jwcid="listEdit">
-      <td><span jwcid="@Insert" value="ognl:user.naturalName">Joe User</span>
-<br>
-<span jwcid="@Insert" value="ognl:user.email">foo@bar.com</span>
-      </td>
-      <td class="checkbox"><input type="checkbox" jwcid="inputAdmin@Checkbox" selected="ognl:user.admin"/>
-      </td>
-      <td class="checkbox"><input type="checkbox" jwcid="inputLockedOut@Checkbox" selected="ognl:user.lockedOut"/>
-      </td>
-      <td class="checkbox"><input type="checkbox" jwcid="inputResetPassword@Checkbox" selected="ognl:listEditMap.resetPassword"/>
-      </td>
-      <td class="checkbox"><input type="checkbox" jwcid="inputDelete@Checkbox" selected="ognl:listEditMap.deleted"/>
-      </td>
-    </tr>
-  </table>
-  
-  <table class="form">
-  <tr>
-  	<th><span jwcid="@FieldLabel" field="ognl:components.inputPassword"/></th>	
-  	<td><input type="text" jwcid="inputPassword" size="20" maxlength="20"/></td>
-  </tr>
-  <tr>
-  	<td></td>	
-  	<td><input type="image" src="images/update.png" width="52" height="20" alt="Update"/></td>
-  </tr>
-  
-  </table>
-</form>
-</body>
-</html>
diff --git a/3.0.4/examples/Vlib/context/GiveAwayBooks.html b/3.0.4/examples/Vlib/context/GiveAwayBooks.html
deleted file mode 100644
index 7541f1f..0000000
--- a/3.0.4/examples/Vlib/context/GiveAwayBooks.html
+++ /dev/null
@@ -1,29 +0,0 @@
-<!-- $Id$ -->
-<html jwcid="$content$">
-<body jwcid="@Border">
-
-<span jwcid="@ShowError"/>
-
-This page is used to transfer ownership of one or more books to
-another user.
- 
-<form jwcid="@Form" listener="ognl:listeners.formSubmit">
-
-<select jwcid="selectBooks"/>
-
-<span jwcid="availableTitleBlock@Block">
-Books you currently own.	
-</span>
-
-<span jwcid="selectedTitleBlock@Block">
-Books to transfer to <select jwcid="selectTarget"/>
-</span>
-
-<br clear="left"/>
-
-<input type="image" src="images/transfer.png" width="56" height="20" alt="Transfer"/>
-
-</form>
-	
-</body>
-</html>
diff --git a/3.0.4/examples/Vlib/context/Home.html b/3.0.4/examples/Vlib/context/Home.html
deleted file mode 100644
index ec287ec..0000000
--- a/3.0.4/examples/Vlib/context/Home.html
+++ /dev/null
@@ -1,49 +0,0 @@
-<!-- $Id$ -->
-<html jwcid="$content$">
-<body jwcid="@Border">
-
-<p>
-Use this form to locate books stored in the Virtual Library.
-When you find a book you want,
-<a href="#" jwcid="@PageLink" page="Login">login</a> and borrow it &#151; just don't forget to
-give it back eventually!
-	</p>	
-	
-<span jwcid="@ShowError"/>
-<span jwcid="@ShowMessage"/>
-
-<form jwcid="@Form" listener="ognl:listeners.search" stateful="ognl:false">
-  <table class="form">
-    <tr>
-      <th>Title</th>
-      <td><input type="text" jwcid="inputTitle@TextField" value="ognl:title" size="30" maxlength="100"/>
-      </td>
-    </tr>
-    <tr>
-      <th>Author</th>
-      <td><input type="text" jwcid="inputAuthor@TextField" value="ognl:author" size="30" maxlength="100"/>
-      </td>
-    </tr>
-    <tr>
-    	<th>Book Owner</th>	
-    	<td><select jwcid="inputOwner@PropertySelection" value="ognl:ownerId" model="ognl:engine.buildPersonModel(true)"/></td>
-    </tr>
-    <tr>
-      <th>Publisher</th>
-      <td><select jwcid="inputPublisher@PropertySelection" value="ognl:publisherId" model="ognl:engine.publisherModel"/>
-		</td>
-	</tr>
-	<tr>
-		<td></td>
-		<td>
-	<input type="image" src="images/search.png" width="46" height="20" border="0" alt="Search"/>
-      </td>
-    </tr>
-  </table>
-</form>
-
-</body>
-
-
-
-</html>
diff --git a/3.0.4/examples/Vlib/context/Login.html b/3.0.4/examples/Vlib/context/Login.html
deleted file mode 100644
index b8b85e6..0000000
--- a/3.0.4/examples/Vlib/context/Login.html
+++ /dev/null
@@ -1,29 +0,0 @@
-<!-- $Id$ -->
-<html jwcid="$content$">
-<body jwcid="@Border">
-<span jwcid="@ShowError"/><span jwcid="@ShowValidationError" delegate="ognl:beans.delegate"/>
-<form jwcid="@Form" listener="ognl:listeners.attemptLogin" delegate="ognl:beans.delegate" stateful="ognl:false">
-  <table class="form">
-    <tr>
-      <th><span jwcid="@FieldLabel" field="ognl:components.inputEmail">Email Address</span>
-      </th>
-      <td><input jwcid="inputEmail" type="text" name="email" size="30" maxlength="60"/>
-      </td>
-    </tr>
-    <tr>
-      <th><span jwcid="@FieldLabel" field="ognl:components.inputPassword">Password</span>
-      </th>
-      <td valign="bottom"><input jwcid="inputPassword" type="text" name="password" size="10" maxlength="20"/>
-	   </td>
-	</tr>
-	<tr>
-		<td></td>
-	  	<td>
-	  	<input type="image" src="images/login.png" width="35" height="20" border="0" alt="Login"/>
-	  	</td>
-    </tr>
-  </table>
-</form>
-<p>Not registered yet?  <a href="#" jwcid="register">Register now</a>.</p>
-</body>
-</html>
diff --git a/3.0.4/examples/Vlib/context/MyLibrary.html b/3.0.4/examples/Vlib/context/MyLibrary.html
deleted file mode 100644
index 51f442e..0000000
--- a/3.0.4/examples/Vlib/context/MyLibrary.html
+++ /dev/null
@@ -1,46 +0,0 @@
-<!-- $Id$ -->
-<html jwcid="$content$">
-<body jwcid="@Border" browser="ognl:components.browser">
-<span jwcid="@ShowError"/>
-<span jwcid="@ShowMessage"/>
-<span jwcid="@Conditional" condition="ognl:components.browser.resultCount == 0">
-
-<span jwcid="@Information">
-You have not yet entered any of your books.  
-
-<p>Use the
-<a href="#" jwcid="@PageLink" page="NewBook">Add New Book</a> link to add books you own
-to the Virtual Library database, so that they may be borrowed by others.
-</p>
-</span>
-</span>
-	
-<span jwcid="@Conditional" condition="ognl:components.browser.resultCount != 0">
-
-<table class="data">
-
-  <tr>
-    <th><span jwcid="sortTitle">Title</span></th>
-    <th><span jwcid="sortAuthor">Author</span></th>
-    <th><span jwcid="sortPublisher">Publisher</span></th>
-    <th><span jwcid="sortBorrower">Borrowed By</span></th>
-    <th>Edit/Delete</th>
-  </tr>
-  <tr jwcid="browser@Browser" query="ognl:ownedQuery" value="ognl:currentBook" listener="ognl:listeners.requery">
-    <td><span jwcid="@Insert" value="ognl:currentBook.title">DocBook:The Definitive Guide</span>
-    </td>
-    <td><span jwcid="@Insert" value="ognl:currentBook.author">Walsh &#38; Muellner</span>
-    </td>
-    <td><span jwcid="@Insert" value="ognl:currentBook.publisherName">O'Reilly</span>
-    </td>
-    <td><a jwcid="holderLink" href="#">Jim Moran</a>
-    </td>
-    <td class="icon"><a jwcid="edit"><img jwcid="editRollover" src="images/edit.png" width="25" height="25" alt="Edit" border="0"/></a>&nbsp;<a jwcid="delete"><img jwcid="deleteRollover" src="images/delete.png" width="25" height="25" alt="Delete" border="0"/></a>
-    </td>
-  </tr>
- </table>
-
-</span>
-
-</body>
-</html>
diff --git a/3.0.4/examples/Vlib/context/NewBook.html b/3.0.4/examples/Vlib/context/NewBook.html
deleted file mode 100644
index 56faca3..0000000
--- a/3.0.4/examples/Vlib/context/NewBook.html
+++ /dev/null
@@ -1,76 +0,0 @@
-<!-- $Id$ -->
-<html jwcid="$content$">
-<body jwcid="@Border">
-
-<form jwcid="@Form" listener="ognl:listeners.addBook" delegate="ognl:validationDelegate">
-	
-<p>
-	Enter information about the book into the form below. Fields marked with
-	<span class="required-field">*</span> are required.
-</p>
-
-<span jwcid="@ShowError"/>
-<span jwcid="@ShowValidationError" delegate="ognl:validationDelegate"/>
-
-  <table class="form">
-    <tr>
-      <th width="80" height="30"><span jwcid="@FieldLabel" field="ognl:components.inputTitle">Title</span></th>
-      <td><span class="required-field">*</span></td>
-      <td width="420"><input jwcid="inputTitle" type="text" size="50" maxlength="100"/>
-      </td>
-    </tr>
-    <tr>
-      <th><span jwcid="@FieldLabel" field="ognl:components.inputAuthor">Author</span>
-      	 <td><span class="required-field">*</span></td>
-      </th>
-      <td><input jwcid="inputAuthor" type="text" size="30" maxlength="60"/>
-      </td>
-    </tr>
-    <tr>
-      <th>ISBN</th>
-      <td></td>
-      <td><input jwcid="inputISBN@TextField" value="ognl:attributes.ISBN" type="text" maxlength="20" size="20"/>
-      </td>
-    </tr>
-    <tr>
-      <th><span jwcid="@FieldLabel" field="ognl:components.inputPublisherName">Publisher</span></th>
-       <td><span class="required-field">*</span></td>
-      <td><select jwcid="inputPublisher@PropertySelection" value="ognl:attributes.publisherId" model="ognl:engine.publisherModel"/>
-<input jwcid="inputPublisherName" type="text" size="20" maxlength="40"/>
-      </td>
-    </tr>
-    <tr>
-      <td colspan="2"></td>
-      <td>
-	Note: If the Publisher is not listed, leave the option blank and type the name of the publisher in the field to the right.
-      </td>
-    </tr>
-    <tr>
-      <th>Description</th>
-      <td></td>
-      <td><textarea jwcid="inputDescription@TextArea" value="ognl:attributes.description" cols="35" rows="8"></textarea>
-      </td>
-    </tr>
-    <tr>
-      <th>Hidden</th>
-      <td></td>
-      <td><input jwcid="inputHidden@Checkbox" selected="ognl:attributes.hidden" type="checkbox"/>Check to prevent this book from appearing in searches.
-      </td>
-    </tr>
-    <tr>
-      <th>Lendable</th>
-      <td></td>
-      <td><input jwcid="inputLendable@Checkbox" selected="ognl:attributes.lendable" type="checkbox"/>Leave checked to allow this book to be borrowed by others.
-      </td>
-    </tr>
-    <tr>
-      <td colspan="2">
-      </td>
-      <td><input type="image" src="images/add.png" height="20" width="28" border="0"/>
-      </td>
-    </tr>
-  </table>
-<span jwcid="@Script" script="Publisher.script" select="ognl:components.inputPublisher" field="ognl:components.inputPublisherName"/>
-</form>
-</body>
-</html>
diff --git a/3.0.4/examples/Vlib/context/Register.html b/3.0.4/examples/Vlib/context/Register.html
deleted file mode 100644
index 84393b9..0000000
--- a/3.0.4/examples/Vlib/context/Register.html
+++ /dev/null
@@ -1,57 +0,0 @@
-<!-- $Id$ -->
-<html jwcid="$content$">
-<body jwcid="@Border">
-
-<form jwcid="@Form" listener="ognl:listeners.attemptRegister" delegate="ognl:beans.delegate">
-	
-<p>
-	Please enter your registration information here; this will allow you to access the Virtual Library.
-	Your e-mail address is used as your login id.  Fields marked with
-	<span class="required-field">*</span> are required.
-</p>
-
-<span jwcid="@ShowError"/>
-<span jwcid="@ShowValidationError" delegate="ognl:beans.delegate"/>
-
-  <table class="form">
-    <tr>
-      <th>First Name</th>
-      <td></td>
-      <td><input jwcid="inputFirstName@TextField" value="ognl:firstName" type="text" size="30" maxlength="30"/>
-      </td>
-    </tr>
-    <tr>
-      <th><span jwcid="@FieldLabel" field="ognl:components.inputLastName">Last Name</span>
-      </th>
-      <td><span class="required-field">*</span></td>
-      <td><input jwcid="inputLastName" type="text" size="30" maxlength="30"/>
-      </td>
-    </tr>
-    <tr>
-      <th><span jwcid="@FieldLabel" field="ognl:components.inputEmail">E-mail</span>      </th>
-      <td><span class="required-field">*</span></td>
-      <td><input jwcid="inputEmail" type="text" size="30" maxlength="60"/>
-      </td>
-    </tr>
-    <tr>
-      <th><span jwcid="@FieldLabel" field="ognl:components.inputPassword1">Password</span>      </th>
-      <td><span class="required-field">*</span></td>
-      <td><input jwcid="inputPassword1" type="password" size="20" maxlength="20"/>
-      </td>
-    </tr>
-    <tr>
-      <th><span jwcid="@FieldLabel" field="ognl:components.inputPassword2">Password (again)</span>      </th>
-      <td><span class="required-field">*</span></td>
-      <td><input jwcid="inputPassword2" type="password" size="20" maxlength="20"/>
-      </td>
-    </tr>
-   	<tr>
-   		<td colspan="2"></td>
-   	<td>
-      		<input type="image" src="images/register.png" width="56" height="20" border="0" alt="Register"/>
-      </td>
-    </tr>
-  </table>
-</form>
-</body>
-</html>
diff --git a/3.0.4/examples/Vlib/context/TransferBooksSelect.html b/3.0.4/examples/Vlib/context/TransferBooksSelect.html
deleted file mode 100644
index 0fa30e0..0000000
--- a/3.0.4/examples/Vlib/context/TransferBooksSelect.html
+++ /dev/null
@@ -1,46 +0,0 @@
-<!-- $Id$ -->
-<html jwcid="$content$">
-<body jwcid="@Border">
-	
-<p>This form allows you to transfer ownership of books from one user to another.  It consists of a two-part
-	wizard.</p>
-	
-<p>
-<img src="images/step1.png" width="47" height="48" align="left" border="0" hspace="4" alt="Step 1"/>
-<span class="directions">
-Select the two users to transfer books between.
-</span>	
-</p>
-	
-<br clear="left"/>
-
-<span jwcid="@ShowMessage"/>
-<span jwcid="@ShowError"/>
-
-<form jwcid="@Form" listener="ognl:listeners.formSubmit">
-  <table class="form">
-    <tr>
-      <th>Move from:
-      </th>
-      <td>
-        <select jwcid="from@PropertySelection" value="ognl:fromUserId" model="ognl:engine.personModel"/>
-      </td>
-    </tr>
-    <tr>
-      <th>Move to:
-      </th>
-      <td>
-        <select jwcid="to@PropertySelection" value="ognl:toUserId" model="ognl:engine.personModel"/>
-      </td>
-    </tr>
-    <tr>
-      <td>
-      </td>
-      <td><input type="image" src="images/continue.png" alt="Continue" height="20" width="58" border="0"/>
-      </td>
-    </tr>
-  </table>
-</form>
-
-</body>
-</html>
diff --git a/3.0.4/examples/Vlib/context/TransferBooksTransfer.html b/3.0.4/examples/Vlib/context/TransferBooksTransfer.html
deleted file mode 100644
index d6fc54a..0000000
--- a/3.0.4/examples/Vlib/context/TransferBooksTransfer.html
+++ /dev/null
@@ -1,45 +0,0 @@
-<!-- $Id$ -->
-<html jwcid="$content$">
-<body jwcid="@Border">
-	
-<p>This form allows you to transfer ownership of books from one user to another.  It consists of a two-part
-	wizard.</p>
-	
-<p>
-<img src="images/step2.png" width="47" height="48" align="left" border="0" hspace="4" alt="Step 2"/>
-<span class="directions">
-Select the books to transfer from
-<span jwcid="@Insert" value="ognl:fromUser.naturalName">Suzy Source</span>
-to
-<span jwcid="@Insert" value="ognl:toUser.naturalName">Terry Target</span>.
-</span>	
-</p>
-	
-<br clear="left"/>
-
-<span jwcid="@ShowError"/>
-
-<form jwcid="@Form" listener="ognl:listeners.formSubmit">
-
-<select jwcid="selectBooks"/>
-
-<span jwcid="availableTitle@Block">
-Books owned by 
-<span jwcid="@Insert" value="ognl:fromUser.naturalName">Suzy Source</span>
-</span>
-
-<span jwcid="selectedTitle@Block">
-Books to transfer to
-<span jwcid="@Insert" value="ognl:toUser.naturalName">Terry Target</span>
-</span>
-
-<br/>
-
-<input type="image" src="images/transfer.png" width="56" height="20" border="0" alt="Transfer"/>&nbsp;
-<a href="#" jwcid="@PageLink" page="TransferBooksSelect"><img src="images/cancel.png" height="20" width="51" border="0" alt="Cancel"/></a>
-
-
-</form>
-
-</body>
-</html>
diff --git a/3.0.4/examples/Vlib/context/ViewBook.html b/3.0.4/examples/Vlib/context/ViewBook.html
deleted file mode 100644
index 93a3323..0000000
--- a/3.0.4/examples/Vlib/context/ViewBook.html
+++ /dev/null
@@ -1,68 +0,0 @@
-<!-- $Id$ -->
-<html jwcid="$content$">
-<body jwcid="@Border" subtitle="ognl:book.title">
-<table class="form">
-  <tr>
-    <th>Title</th>
-    <td><span jwcid="@Insert" value="ognl:book.title">HTML: The Definitive Guide</span>
-    </td>
-  </tr>
-  <tr>
-    <th>Author</th>
-    <td><span jwcid="@Insert" value="ognl:book.author">Musicano &#38; Kennedy</span>
-    </td>
-  </tr>
-  <tr>
-    <th>Publisher</th>
-    <td><span jwcid="@Insert" value="ognl:book.publisherName">O'Reilly</span>
-    </td>
-  </tr>
-  <tr>
-    <th>ISBN</th>
-    <td><span jwcid="@Insert" value="ognl:book.ISBN">1-56592-492-4</span>
-    </td>
-  </tr>
-  <tr>
-    <th>Owner</th>
-    <td><a jwcid="ownerLink" href="#">Howard Lewis Ship</a>
-    </td>
-  </tr>
-  <tr>
-    <th>Date Added</th>
-    <td><span jwcid="@Insert" value="ognl:book.dateAdded" format="ognl:dateFormat">Dec 24 1966</span>
-    </td>
-  </tr>
-<span jwcid="@Conditional" condition="ognl:! @org.apache.commons.lang.StringUtils@isEmpty(book.description)">
-  <tr>
-    <th>Description</th>
-    <td><span jwcid="@InsertText" value="ognl:book.description">
-	A bit of light reading ideal for curling up with by the fire on a cold 
-	winters night while sipping hot, sweet tea and nibbiling a freaki'n crumpet.
-	</span>
-    </td>
-  </tr>
-</span>
-<span jwcid="@Conditional" condition="book.ownerPrimaryKey != book.holderPrimaryKey">
-  <tr>
-    <th>Held By</th>
-    <td><a jwcid="holderLink" href="#">Howard Lewis Ship</a>
-    </td>
-  </tr>
-</span>
-						
-<span jwcid="@Conditional" condition="ognl:!book.lendable">
-  <tr>
-    <td>
-    </td>
-    <td>The book may not be lent out.
-    </td>
-  </tr>
-</span>
-  <tr>
-    <th>Borrow</th>
-    <td><a jwcid="@Borrow" book="ognl:book" href="#">Borrow</a>
-    </td>
-  </tr>
-</table>
-</body>
-</html>
diff --git a/3.0.4/examples/Vlib/context/ViewPerson.html b/3.0.4/examples/Vlib/context/ViewPerson.html
deleted file mode 100644
index 3d49291..0000000
--- a/3.0.4/examples/Vlib/context/ViewPerson.html
+++ /dev/null
@@ -1,53 +0,0 @@
-<!-- $Id$ -->
-<html jwcid="$content$">
-<body jwcid="@Border" subtitle="ognl:person.naturalName" browser="ognl:components.browser">
-	
-<table class="form">
-  <tr>
-    <th>User</th>
-    <td><span jwcid="@Insert" value="ognl:person.naturalName">Jim Moran</span></td>
-  </tr>
-  <tr>
-    <th>E-Mail</th>
-    <td><a jwcid="mailLink" href="#"><span jwcid="@Insert" value="ognl:person.email">foo@bar.com</span></a></td>
-  </tr>
-</table>
-
-
-<span jwcid="@Conditional" condition="ognl:components.browser.resultCount  == 0">
-
-<span jwcid="@Information">
-<span jwcid="@Insert" value="ognl:person.naturalName">Jim Moran</span>
-has no books available for lending.
-</span>
-</span>
-
-<span jwcid="@Conditional" condition="ognl:components.browser.resultCount != 0">
-
-						 
-<table class="data">
-  <tr>
-    <th><span jwcid="sortTitle">Title</span></th>
-    <th><span jwcid="sortAuthor">Author</span></th>
-    <th><span jwcid="sortPublisher">Publisher</span></th>
-    <th><span jwcid="sortBorrower">Borrowed&nbsp;By</span></th>
-    <th>Borrow</th>
-  </tr>
-  <tr jwcid="browser@Browser" query="ognl:query" value="ognl:currentMatch" listener="ognl:listeners.requery">
-    <td><a href="#" jwcid="@BookLink" book="ognl:currentMatch">DocBook:The Definitive Guide</a>
-    </td>
-    <td><span jwcid="@Insert" value="ognl:currentMatch.author">Walsh &#38; Muellner</span>
-    </td>
-    <td><span jwcid="@Insert" value="ognl:currentMatch.publisherName">O'Reilly</span>
-    </td>
-    <td><a jwcid="holderLink" href="#">Jim Moran</a>
-    </td>
-    <td class="icon"><a jwcid="@Borrow" book="ognl:currentMatch" href="#"><img src="images/checkout.png" width="25" height="26" border="0"></a>
-    </td>
-  </tr>
-</table>
-
-
-</span>
-</body>
-</html>
diff --git a/3.0.4/examples/Vlib/context/WEB-INF/ApplicationUnavailable.page b/3.0.4/examples/Vlib/context/WEB-INF/ApplicationUnavailable.page
deleted file mode 100644
index 0a1795c..0000000
--- a/3.0.4/examples/Vlib/context/WEB-INF/ApplicationUnavailable.page
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<page-specification class="org.apache.tapestry.vlib.pages.ApplicationUnavailable">
-
-  <property-specification name="error" type="java.lang.String"/>
-  
-  <context-asset name="stylesheet" path="css/vlib.css"/>
-  <private-asset name="exception_stylesheet" resource-path="/org/apache/tapestry/pages/Exception.css"/>
-  
-</page-specification>
diff --git a/3.0.4/examples/Vlib/context/WEB-INF/BookLink.html b/3.0.4/examples/Vlib/context/WEB-INF/BookLink.html
deleted file mode 100644
index 9a2a94d..0000000
--- a/3.0.4/examples/Vlib/context/WEB-INF/BookLink.html
+++ /dev/null
@@ -1,5 +0,0 @@
-<!-- $Id$ -->
-<span jwcid="$content$">
-<a href="#" jwcid="link"><span jwcid="@Insert" value="ognl:book.title"/></a>
-<span jwcid="@Conditional" condition="ognl:newlyAdded"><img src="images/new.png" width="27" height="12" border="0" alt="New"></span>
-</span>
diff --git a/3.0.4/examples/Vlib/context/WEB-INF/BookLink.jwc b/3.0.4/examples/Vlib/context/WEB-INF/BookLink.jwc
deleted file mode 100644
index 5063f8c..0000000
--- a/3.0.4/examples/Vlib/context/WEB-INF/BookLink.jwc
+++ /dev/null
@@ -1,33 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE component-specification PUBLIC
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<component-specification class="org.apache.tapestry.vlib.components.BookLink"
-	allow-body="no" 
-	allow-informal-parameters="no">
-  
-  <parameter name="book" type="org.apache.tapestry.vlib.ejb.Book" required="yes" direction="in"/>
-  
-  <component id="link" type="ExternalLink">
-    <static-binding name="page" value="ViewBook"/>
-    <binding name="parameters" expression="book.id"/>
-  </component>
-   
-</component-specification>
diff --git a/3.0.4/examples/Vlib/context/WEB-INF/BookMatches.page b/3.0.4/examples/Vlib/context/WEB-INF/BookMatches.page
deleted file mode 100644
index 7daaa0b..0000000
--- a/3.0.4/examples/Vlib/context/WEB-INF/BookMatches.page
+++ /dev/null
@@ -1,82 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<page-specification class="org.apache.tapestry.vlib.pages.BookMatches">
-
-  <property name="page-type" value="Search"/>
-  
-  <property-specification name="bookQuery" type="org.apache.tapestry.vlib.ejb.IBookQuery" persistent="yes"/>
-  <property-specification name="currentMatch" type="org.apache.tapestry.vlib.ejb.Book"/>
-   
-  <property-specification name="queryParameters" 
-  	 type="org.apache.tapestry.vlib.ejb.MasterQueryParameters"
-  	 persistent="yes"/>
-  
-  <property-specification name="sortColumn" type="org.apache.tapestry.vlib.ejb.SortColumn" persistent="yes">
-  	@org.apache.tapestry.vlib.ejb.SortColumn@TITLE
-  </property-specification>
-  <property-specification name="descending" type="boolean" persistent="yes"/>
-   
-  <component id="sortTitle" type="ColumnSorter">
-    <binding name="selected" expression="sortColumn"/>
-    <binding name="sortColumn">
-      @org.apache.tapestry.vlib.ejb.SortColumn@TITLE
-    </binding> 
-    <binding name="descending" expression="descending"/>
-    <binding name="listener" expression="listeners.requery"/>
-  </component> 
-  
-  <component id="sortAuthor" copy-of="sortTitle">
-    <binding name="sortColumn">
-      @org.apache.tapestry.vlib.ejb.SortColumn@AUTHOR
-    </binding>
-  </component>
-  
-  <component id="sortPublisher" copy-of="sortTitle">
-    <binding name="sortColumn">
-    	@org.apache.tapestry.vlib.ejb.SortColumn@PUBLISHER
-    </binding>	
-  </component>
-  
-  <component id="sortOwner" copy-of="sortTitle">
-    <binding name="sortColumn">
-    	@org.apache.tapestry.vlib.ejb.SortColumn@OWNER
-    </binding>
-  </component>
- 
-  <component id="sortBorrower" copy-of="sortTitle">
-    <binding name="sortColumn">
-    	@org.apache.tapestry.vlib.ejb.SortColumn@HOLDER
-    </binding>
-  </component>
-  
-  <component id="ownerLink" type="PersonLink">
-    <binding name="id" expression="currentMatch.ownerId"/>
-    <binding name="name" expression="currentMatch.ownerName"/>
-  </component>
-  
-  <component id="holderLink" type="PersonLink">
-    <binding name="id" expression="currentMatch.holderId"/>
-    <binding name="name" expression="currentMatch.holderName"/>
-    <binding name="omit" expression="! currentMatch.borrowed"/>
-  </component>
-
-</page-specification>
diff --git a/3.0.4/examples/Vlib/context/WEB-INF/BookMatches.properties b/3.0.4/examples/Vlib/context/WEB-INF/BookMatches.properties
deleted file mode 100644
index babdece..0000000
--- a/3.0.4/examples/Vlib/context/WEB-INF/BookMatches.properties
+++ /dev/null
@@ -1,3 +0,0 @@
-# $Id$
-
-no-matches=No books match your search criteria.
diff --git a/3.0.4/examples/Vlib/context/WEB-INF/Border.html b/3.0.4/examples/Vlib/context/WEB-INF/Border.html
deleted file mode 100644
index aab148d..0000000
--- a/3.0.4/examples/Vlib/context/WEB-INF/Border.html
+++ /dev/null
@@ -1,121 +0,0 @@
-<!-- $Id$ -->
-
-<span jwcid="$content$">
-<html jwcid="@Shell" title="ognl:windowTitle" stylesheet="ognl:assets.stylesheet">
-<body jwcid="@Body" leftmargin="0" topmargin="0" marginwidth="0" marginheight="0">
-<table border="0" cellpadding="0" cellspacing="0" width="691" height="110">
-  <tr>
-    <td rowspan="1" colspan="3" width="691" height="58"><img src="images/title/title_1x1.png" width="691" height="58" border="0"/></td>
-  </tr>
-  <tr>
-    <td rowspan="1" colspan="1" width="91" height="40"><img src="images/title/title_2x1.png" width="91" height="40" border="0"/></td>
-    <td rowspan="1" colspan="1" width="345" height="40"><img jwcid="@Image" image="ognl:titleImage" src="title/title_2x2.png" width="345" height="40" border="0"/></td>
-    <td rowspan="1" colspan="1" width="255" height="40"><img src="images/title/title_2x3.png" width="255" height="40" border="0"/></td>
-  </tr>
-  <tr>
-    <td rowspan="1" colspan="3" width="691" height="12"><img src="images/title/title_3x1.png" width="691" height="12" border="0"/></td>
-  </tr>
-</table>
-<table border="0">
-  <tr valign="top">
-    <td>
-    <table border="0" cellpadding="0" cellspacing="0" width="178">
-      <tr>
-        <td rowspan="1" colspan="1" width="178" height="29"><a href="#" jwcid="search"><img jwcid="searchRollover" src="images/nav/nav_1x1.png" width="178" height="29" border="0" alt="Search"/></a></td>
-      </tr>
-      <tr>
-        <td rowspan="1" colspan="1" width="178" height="22"><a href="#" jwcid="myLibrary"><img jwcid="myLibraryRollover" src="images/nav/nav_2x1.png" width="178" height="22" border="0" alt="My Library"/></a></td>
-      </tr>
-<span jwcid="@Conditional" condition="ognl:loggedIn">
-      <tr>
-        <td rowspan="1" colspan="1" width="178" height="18"><a href="#" jwcid="borrowedBooks"><img jwcid="borrowedBooksRollover" src="images/nav/nav_3x1.png" width="178" height="18" border="0" alt="Borrowed Books"/></a></td>
-      </tr>
-      <tr>
-        <td rowspan="1" colspan="1" width="178" height="20"><a href="#" jwcid="newBook"><img jwcid="newBookRollover" src="images/nav/nav_4x1.png" width="178" height="20" border="0" alt="Add New Book"/></a></td>
-      </tr>
-      <tr>
-        <td rowspan="1" colspan="1" width="178" height="22"><a href="#" jwcid="editProfile"><img jwcid="editProfileRollover" src="images/nav/nav_5x1_editprofile.png" width="178" height="22" border="0" alt="Edit Profile"/></a></td>
-      </tr>
-      <tr>
-        <td rowspan="1" colspan="1" width="178" height="22"><a href="#" jwcid="giveAway"><img jwcid="giveAwayRollover" src="images/nav/nav_5x1.png" width="178" height="22" border="0" alt="Give Away Books"/></a></td>
-      </tr>
-</span>
-
-<span jwcid="@Conditional" condition="ognl:admin">
-      <tr>
-        <td rowspan="1" colspan="1" width="178" height="19"><img src="images/nav/nav_6x1.png" width="178" height="19" border="0" alt="Admin"></td>
-      </tr>
-      <tr>
-        <td rowspan="1" colspan="1" width="178" height="20"><a href="#" jwcid="editUsers"><img jwcid="editUsersRollover" src="images/nav/nav_7x1.png" width="178" height="20" border="0" alt="Edit Users"/></a></td>
-      </tr>
-      <tr>
-        <td rowspan="1" colspan="1" width="178" height="20"><a href="#" jwcid="editPublishers"><img jwcid="editPublishersRollover" src="images/nav/nav_8x1.png" width="178" height="20" border="0" alt="Edit Publishers"/></a></td>
-      </tr>
-      <tr>
-        <td rowspan="1" colspan="1" width="178" height="21"><a href="#" jwcid="transferBooks"><img jwcid="transferBooksRollover" src="images/nav/nav_9x1.png" width="178" height="21" border="0" alt="Transfer Books"/></a></td>
-      </tr>
-</span>
-	
-<span jwcid="@Conditional" condition="ognl:loggedIn">
-      <tr>
-        <td rowspan="1" colspan="1" width="178" height="29"><a href="#" jwcid="logout"><img jwcid="logoutRollover" src="images/nav/nav_10x1.png" width="178" height="29" border="0" alt="Logout"/></a></td>
-      </tr>
-</span>
-
-<span jwcid="@Conditional" condition="ognl:!loggedIn">
-      <tr>
-        <td rowspan="1" colspan="1" width="178" height="29"><a href="#" jwcid="login"><img jwcid="loginRollover" src="images/nav/nav_10x1.png" width="178" height="29" border="0" alt="Login"/></a></td>
-      </tr>
-</span>
-    </table>
-<span jwcid="@Conditional" condition="ognl:browser != null && browser.resultCount != 0">
-<br clear="left"/>
-    <table border="0" cellpadding="0" cellspacing="0" width="178">
-      <tr>
-        <td rowspan="1" colspan="9" width="178" height="8"><img src="images/browser/browser_1x1.png" width="178" height="8" border="0"></td>
-      </tr>
-      <tr>
-        <td rowspan="1" colspan="1" width="7" height="60"><img src="images/browser/browser_2x1.png" width="7" height="60" border="0"></td>
-        <td valign="top" class="browser-summary" rowspan="1" colspan="7" width="162" height="60"><span jwcid="@Insert" value="ognl:browser.resultCount">67</span> books
-<br/>
-Showing
-<br/>
-<span jwcid="@Insert" value="ognl:browser.range">1 - 10</span></td>
-        <td rowspan="1" colspan="1" width="9" height="60"><img src="images/browser/browser_2x3.png" width="9" height="60" border="0"></td>
-      </tr>
-      <tr>
-        <td rowspan="1" colspan="2" width="25" height="33"><img src="images/browser/browser_4x1.png" width="25" height="33" border="0"/></td>
-        <td rowspan="1" colspan="1" width="35" height="33"><a href="#" jwcid="first"><img jwcid="firstRollover" src="images/browser/browser_4x2.png" width="35" height="33" border="0" alt="First"/></a></td>
-        <td rowspan="1" colspan="1" width="22" height="33"><a href="#" jwcid="previous"><img jwcid="previousRollover" src="images/browser/browser_4x3.png" width="22" height="33" border="0" alt="Previous"/></a></td>
-        <td rowspan="1" colspan="1" width="12" height="33"><img src="images/browser/browser_4x4.png" width="12" height="33" border="0"/></td>
-        <td rowspan="1" colspan="1" width="24" height="33"><a href="#" jwcid="next"><img jwcid="nextRollover" src="images/browser/browser_4x5.png" width="24" height="33" border="0" alt="Next"/></a></td>
-        <td rowspan="1" colspan="1" width="35" height="33"><a href="#" jwcid="last"><img jwcid="lastRollover" src="images/browser/browser_4x6.png" width="35" height="33" border="0" alt="Last"/></a></td>
-        <td rowspan="1" colspan="2" width="25" height="33"><img src="images/browser/browser_4x7.png" width="25" height="33" border="0"></td>
-      </tr>
-      <tr>
-        <td rowspan="1" colspan="9" width="178" height="26"><img src="images/browser/browser_5x1.png" width="178" height="26" border="0"></td>
-      </tr>
-      <tr>
-        <td width="7" height="1"><img name="blank" src="images/spacer.png" width="7" height="1" border="0"></td>
-        <td width="18" height="1"><img name="blank" src="images/spacer.png" width="18" height="1" border="0"></td>
-        <td width="35" height="1"><img name="blank" src="images/spacer.png" width="35" height="1" border="0"></td>
-        <td width="22" height="1"><img name="blank" src="images/spacer.png" width="22" height="1" border="0"></td>
-        <td width="12" height="1"><img name="blank" src="images/spacer.png" width="12" height="1" border="0"></td>
-        <td width="24" height="1"><img name="blank" src="images/spacer.png" width="24" height="1" border="0"></td>
-        <td width="35" height="1"><img name="blank" src="images/spacer.png" width="35" height="1" border="0"></td>
-        <td width="16" height="1"><img name="blank" src="images/spacer.png" width="16" height="1" border="0"></td>
-        <td width="9" height="1"><img name="blank" src="images/spacer.png" width="9" height="1" border="0"></td>
-      </tr> 
-    </table>
-</span></td>
-    <td><span jwcid="@RenderBody">
-	
-	Body content goes here.
-	
-</span></td>
-  </tr>
-</table>
-<span jwcid="@contrib:InspectorButton" disabled="ognl:! page.engine.debugEnabled"/>
-</body>
-</html>
-</span>
\ No newline at end of file
diff --git a/3.0.4/examples/Vlib/context/WEB-INF/Border.jwc b/3.0.4/examples/Vlib/context/WEB-INF/Border.jwc
deleted file mode 100644
index fd366c4..0000000
--- a/3.0.4/examples/Vlib/context/WEB-INF/Border.jwc
+++ /dev/null
@@ -1,277 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-  
-<component-specification 
-	class="org.apache.tapestry.vlib.components.Border"
-	allow-informal-parameters="no">
-
-  <parameter name="subtitle" type="java.lang.String" direction="in"/>
-  
-  <parameter name="browser" type="org.apache.tapestry.vlib.components.Browser" direction="in"/>
-           
-  <component id="search" type="PageLink">
-    <static-binding name="page" value="Home"/>	
-  </component>
-  
-  <component id="searchRollover" type="Rollover">
-    <binding name="image" expression="searchImage"/>
-    <binding name="focus" expression="searchRolloverImage"/>	
-  </component>
-       
-  <component id="myLibrary" type="DirectLink">
-    <binding name="listener" expression="listeners.viewMyLibrary"/>	
-    <binding name="stateful" expression="false"/>
-  </component>    
-  
-  <component id="myLibraryRollover" type="Rollover">
-    <binding name="image" expression="myLibraryImage"/>
-    <binding name="focus" expression="myLibraryRolloverImage"/>
-  </component>
-  
-  <component id="borrowedBooks" type="DirectLink">
-  	<binding name="listener" expression="listeners.viewBorrowedBooks"/>	
-    <binding name="stateful" expression="false"/>  	
-  </component>
-  
-  <component id="borrowedBooksRollover" type="Rollover">
-    <binding name="image" expression="borrowedBooksImage"/>
-    <binding name="focus" expression="borrowedBooksRolloverImage"/>	
-  </component>
-  
-  <component id="newBook" type="PageLink">
-    <static-binding name="page" value="NewBook"/>	
-  </component>
-  
-  <component id="newBookRollover" type="Rollover">
-    <binding name="image" expression="newBookImage"/>
-    <binding name="focus" expression="newBookRolloverImage"/>
-  </component>
-  
-  <component id="editProfile" type="DirectLink">
-  	<binding name="listener" expression="listeners.editProfile"/>	
-    <binding name="stateful" expression="false"/>
-  </component>
-  
-  <component id="editProfileRollover" type="Rollover">
-    <binding name="image" expression="editProfileImage"/>
-    <binding name="focus" expression="editProfileRolloverImage"/>	
-  </component>
-  
-  <component id="giveAway" type="PageLink">
-	<static-binding name="page" value="GiveAwayBooks"/>	
-  </component>
-   
-  <component id="giveAwayRollover" type="Rollover">
-    <binding name="image" expression="giveAwayImage"/>
-    <binding name="focus" expression="giveAwayRolloverImage"/>	
-  </component>  
-   
-  <component id="editUsers" type="PageLink">
-    <static-binding name="page" value="EditUsers"/>
-  </component>
-  
-  <component id="editUsersRollover" type="Rollover">
-    <binding name="image" expression="editUsersImage"/>
-    <binding name="focus" expression="editUsersRolloverImage"/>
-  </component>
-  
-  <component id="editPublishers" type="PageLink">
-    <static-binding name="page" value="EditPublishers"/>	
-  </component>
-  
-  <component id="editPublishersRollover" type="Rollover">
-    <binding name="image" expression="editPublishersImage"/>
-    <binding name="focus" expression="editPublishersRolloverImage"/>	
-  </component>
-  
-  <component id="transferBooks" type="PageLink">
-    <static-binding name="page" value="TransferBooksSelect"/>	
-  </component>
-  
-  <component id="transferBooksRollover" type="Rollover">
-    <binding name="image" expression="transferBooksImage"/>
-    <binding name="focus" expression="transferBooksRolloverImage"/>
-  </component>
-   
-  <component id="logout" type="DirectLink">
-    <binding name="listener" expression="listeners.logout"/>
-    <binding name="stateful" expression="false"/>
-  </component>
-  
-  <!-- Since there is no "Logout" page, the images for the Logout
-  	   link are invariant. -->
-  	   
-  <component id="logoutRollover" type="Rollover">
-    <binding name="image" expression="assets.logout"/>
-    <binding name="focus" expression="assets.logout_h"/>	
-  </component>
-  
-  <component id="login" type="DirectLink">
-    <binding name="listener" expression="listeners.login"/>
-    <binding name="stateful" expression="false"/>
-  </component>
-  
-  <component id="loginRollover" type="Rollover">
-    <binding name="image" expression="loginImage"/>
-    <binding name="focus" expression="loginRolloverImage"/>	
-  </component>
-   
-  <component id="first" type="DirectLink">
-    <binding name="listener" expression="listeners.selectBrowserPage"/>
-    <binding name="parameters" expression="1"/>
-    <binding name="disabled" expression="browser.disableBack"/>	
-  </component>
-  
-  <component id="firstRollover" type="Rollover">
-    <binding name="image" expression="assets.first"/>
-    <binding name="focus" expression="assets.first_h"/>
-    <binding name="disabled" expression="assets.first_d"/>	
-  </component>
-  
-  <component id="previous" type="DirectLink">
-    <binding name="listener" expression="listeners.selectBrowserPage"/>
-    <binding name="parameters">
-      @@max(browser.currentPage - 1, 1)	
-    </binding>	
-    <binding name="disabled" expression="browser.disableBack"/>
-  </component>
-  
-  <component id="previousRollover" type="Rollover">
-    <binding name="image" expression="assets.previous"/>
-    <binding name="focus" expression="assets.previous_h"/>
-    <binding name="disabled" expression="assets.previous_d"/>
-  </component>
-  
-  <component id="next" type="DirectLink">
-    <binding name="listener" expression="listeners.selectBrowserPage"/>
-    <binding name="parameters">
-    @@min(browser.currentPage + 1, browser.pageCount)	
-    </binding>	
-    <binding name="disabled" expression="browser.disableNext"/>
-  </component>
-  
-  <component id="nextRollover" type="Rollover">
-    <binding name="image" expression="assets.next"/>
-    <binding name="focus" expression="assets.next_h"/>
-    <binding name="disabled" expression="assets.next_d"/>	
-  </component>
-  
-  <component id="last" type="DirectLink">
-    <binding name="listener" expression="listeners.selectBrowserPage"/>
-    <binding name="parameters" expression="browser.pageCount"/>
-    <binding name="disabled" expression="browser.disableNext"/>	
-  </component>
-  
-  <component id="lastRollover" type="Rollover">
-    <binding name="image" expression="assets.last"/>
-    <binding name="focus" expression="assets.last_h"/>
-    <binding name="disabled" expression="assets.last_d"/>	
-  </component>
-   
-  <context-asset name="stylesheet" path="css/vlib.css"/>
-
-  <context-asset name="title_BookMatches" path="images/title/BookMatches.png"/>
-  <context-asset name="title_BorrowedBooks" path="images/title/BorrowedBooks.png"/>
-  <context-asset name="title_ConfirmBookDelete" path="images/title/DeleteBook.png"/> 
-  <context-asset name="title_EditBook" path="images/title/EditBook.png"/>
-  <context-asset name="title_EditProfile" path="images/title/EditProfile.png"/>
-  <context-asset name="title_EditPublishers" path="images/title/EditPublishers.png"/>
-  <context-asset name="title_EditUsers" path="images/title/EditUsers.png"/>
-  <context-asset name="title_GiveAwayBooks" path="images/title/GiveAwayBooks.png"/>
-  <context-asset name="title_Home" path="images/title/Search.png"/>
-  <context-asset name="title_Login" path="images/title/Login.png"/>
-  <context-asset name="title_MyLibrary" path="images/title/MyLibrary.png"/>
-  <context-asset name="title_NewBook" path="images/title/AddNewBook.png"/>
-  <context-asset name="title_Register" path="images/title/Register.png"/>
-  <context-asset name="title_TransferBooks" path="images/title/TransferBooks.png"/>
-  <context-asset name="title_ViewBook" path="images/title/ViewBook.png"/>
-  <context-asset name="title_ViewPerson" path="images/title/ViewPerson.png"/>
-  
-  <context-asset name="search" path="images/nav/nav_1x1.png"/>
-  <context-asset name="search_h" path="images/nav-h/nav_1x1.png"/>
-  <context-asset name="search_s" path="images/nav-selected/nav_1x1.png"/>
-  <context-asset name="search_h_s" path="images/nav-selected-h/nav_1x1.png"/>
-  
-  <context-asset name="mylibrary" path="images/nav/nav_2x1.png"/>
-  <context-asset name="mylibrary_h" path="images/nav-h/nav_2x1.png"/>
-  <context-asset name="mylibrary_s" path="images/nav-selected/nav_2x1.png"/>
-  <context-asset name="mylibrary_h_s" path="images/nav-selected-h/nav_2x1.png"/>
-  
-  <context-asset name="borrowedbooks" path="images/nav/nav_3x1.png"/>
-  <context-asset name="borrowedbooks_h" path="images/nav-h/nav_3x1.png"/>
-  <context-asset name="borrowedbooks_s" path="images/nav-selected/nav_3x1.png"/>
-  <context-asset name="borrowedbooks_h_s" path="images/nav-selected-h/nav_3x1.png"/>
-  
-  <context-asset name="newbook" path="images/nav/nav_4x1.png"/>
-  <context-asset name="newbook_h" path="images/nav-h/nav_4x1.png"/>
-  <context-asset name="newbook_s" path="images/nav-selected/nav_4x1.png"/>
-  <context-asset name="newbook_h_s" path="images/nav-selected-h/nav_4x1.png"/>
-  
-  <context-asset name="editprofile" path="images/nav/nav_5x1_editprofile.png"/>
-  <context-asset name="editprofile_h" path="images/nav-h/nav_5x1_editprofile.png"/>
-  <context-asset name="editprofile_s" path="images/nav-selected/nav_5x1_editprofile.png"/>
-  <context-asset name="editprofile_h_s" path="images/nav-selected-h/nav_5x1_editprofile.png"/>
-  
-  <context-asset name="giveaway" path="images/nav/nav_5x1.png"/>
-  <context-asset name="giveaway_h" path="images/nav-h/nav_5x1.png"/>
-  <context-asset name="giveaway_s" path="images/nav-selected/nav_5x1.png"/>
-  <context-asset name="giveaway_h_s" path="images/nav-selected-h/nav_5x1.png"/>
-  
-  <context-asset name="editusers" path="images/nav/nav_7x1.png"/>
-  <context-asset name="editusers_h" path="images/nav-h/nav_7x1.png"/>
-  <context-asset name="editusers_s" path="images/nav-selected/nav_7x1.png"/>
-  <context-asset name="editusers_h_s" path="images/nav-selected-h/nav_7x1.png"/>  
-  
-  <context-asset name="editpublishers" path="images/nav/nav_8x1.png"/>
-  <context-asset name="editpublishers_h" path="images/nav-h/nav_8x1.png"/>
-  <context-asset name="editpublishers_s" path="images/nav-selected/nav_8x1.png"/>
-  <context-asset name="editpublishers_h_s" path="images/nav-selected-h/nav_8x1.png"/>  
-  
-  <context-asset name="transferbooks" path="images/nav/nav_9x1.png"/>
-  <context-asset name="transferbooks_h" path="images/nav-h/nav_9x1.png"/>
-  <context-asset name="transferbooks_s" path="images/nav-selected/nav_9x1.png"/>
-  <context-asset name="transferbooks_h_s" path="images/nav-selected-h/nav_9x1.png"/>  
-  
-  <context-asset name="login" path="images/nav/nav_10x1_login.png"/>
-  <context-asset name="login_h" path="images/nav-h/nav_10x1_login.png"/>
-  <context-asset name="login_s" path="images/nav-selected/nav_10x1_login.png"/>
-  <context-asset name="login_h_s" path="images/nav-selected-h/nav_10x1_login.png"/>
-  
-  <context-asset name="logout" path="images/nav/nav_10x1.png"/>
-  <context-asset name="logout_h" path="images/nav-h/nav_10x1.png"/>
-  
-  <context-asset name="first" path="images/browser/browser_4x2.png"/>
-  <context-asset name="first_h" path="images/browser_h/browser_4x2.png"/>
-  <context-asset name="first_d" path="images/browser_d/browser_4x2.png"/>
-  
-  <context-asset name="previous" path="images/browser/browser_4x3.png"/>
-  <context-asset name="previous_h" path="images/browser_h/browser_4x3.png"/>
-  <context-asset name="previous_d" path="images/browser_d/browser_4x3.png"/>
-  
-  <context-asset name="next" path="images/browser/browser_4x5.png"/>
-  <context-asset name="next_h" path="images/browser_h/browser_4x5.png"/>
-  <context-asset name="next_d" path="images/browser_d/browser_4x5.png"/>
-  
-  <context-asset name="last" path="images/browser/browser_4x6.png"/>
-  <context-asset name="last_h" path="images/browser_h/browser_4x6.png"/>
-  <context-asset name="last_d" path="images/browser_d/browser_4x6.png"/>
-  
-</component-specification>
diff --git a/3.0.4/examples/Vlib/context/WEB-INF/Border.properties b/3.0.4/examples/Vlib/context/WEB-INF/Border.properties
deleted file mode 100644
index 6a35ed2..0000000
--- a/3.0.4/examples/Vlib/context/WEB-INF/Border.properties
+++ /dev/null
@@ -1,3 +0,0 @@
-# $Id$
-
-goodbye=You have been logged out.  Click the Login or My Library link to log back in.
\ No newline at end of file
diff --git a/3.0.4/examples/Vlib/context/WEB-INF/Borrow.html b/3.0.4/examples/Vlib/context/WEB-INF/Borrow.html
deleted file mode 100644
index 9baf450..0000000
--- a/3.0.4/examples/Vlib/context/WEB-INF/Borrow.html
+++ /dev/null
@@ -1,5 +0,0 @@
-<!-- $Id$ -->
-
-<span jwcid="$content$">
-<a jwcid="link"><img jwcid="rollover" src="images/icon_borrow.gif" width="25" height="26" alt="Borrow" border="0"/></a>
-</span>
diff --git a/3.0.4/examples/Vlib/context/WEB-INF/Borrow.jwc b/3.0.4/examples/Vlib/context/WEB-INF/Borrow.jwc
deleted file mode 100644
index f0168cd..0000000
--- a/3.0.4/examples/Vlib/context/WEB-INF/Borrow.jwc
+++ /dev/null
@@ -1,44 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<component-specification class="org.apache.tapestry.vlib.components.Borrow"
-	allow-body="no" 
-	allow-informal-parameters="no">
-	
-  <parameter name="book" type="org.apache.tapestry.vlib.ejb.Book" required="yes" direction="in"/>
-    
-  <component id="link" type="DirectLink">
-    <binding name="parameters" expression="book.id"/>
-    <binding name="listener" expression="listeners.borrow"/>
-    <binding name="disabled" expression="linkDisabled"/>
-  </component>
-  
-  <component id="rollover" type="Rollover">
-  	<binding name="image" expression="assets.enabled"/>
-  	<binding name="disabled" expression="assets.disabled"/>
-  	<binding name="focus" expression="assets.focus"/>
-  </component>
-  
-  <context-asset name="enabled" path="images/checkout.png"/>
-  <context-asset name="focus" path="images/checkout_h.png"/>
-  <context-asset name="disabled" path="images/spacer.png"/>
-  
-</component-specification>
diff --git a/3.0.4/examples/Vlib/context/WEB-INF/BorrowedBooks.page b/3.0.4/examples/Vlib/context/WEB-INF/BorrowedBooks.page
deleted file mode 100644
index 2e047fd..0000000
--- a/3.0.4/examples/Vlib/context/WEB-INF/BorrowedBooks.page
+++ /dev/null
@@ -1,61 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<page-specification class="org.apache.tapestry.vlib.pages.BorrowedBooks">
-
-  <property-specification name="error" type="java.lang.String"/>
-  <property-specification name="message" type="java.lang.String"/>
-  <property-specification name="currentBook" type="org.apache.tapestry.vlib.ejb.Book"/>
-  <property-specification name="borrowedQuery" type="org.apache.tapestry.vlib.ejb.IBookQuery" persistent="yes"/>
-
-  <property-specification name="sortColumn" type="org.apache.tapestry.vlib.ejb.SortColumn" persistent="yes">
-  	@org.apache.tapestry.vlib.ejb.SortColumn@TITLE
-  </property-specification>
-  <property-specification name="descending" type="boolean" persistent="yes"/>
-  
-  <component id="sortTitle" type="ColumnSorter">
-    <binding name="selected" expression="sortColumn"/>
-    <binding name="sortColumn" expression="@org.apache.tapestry.vlib.ejb.SortColumn@TITLE"/>
-    <binding name="descending" expression="descending"/>
-    <binding name="listener" expression="listeners.requery"/>
-  </component>   
-    
-  <component id="sortAuthor" copy-of="sortTitle">
-    <binding name="sortColumn" expression="@org.apache.tapestry.vlib.ejb.SortColumn@AUTHOR"/>
-  </component>
-  
-  <component id="sortPublisher" copy-of="sortTitle">
-    <binding name="sortColumn" expression="@org.apache.tapestry.vlib.ejb.SortColumn@PUBLISHER"/>	
-  </component>
-  
-  <component id="sortOwner" copy-of="sortTitle">
-    <binding name="sortColumn" expression="@org.apache.tapestry.vlib.ejb.SortColumn@OWNER"/>
-  </component>
-  
-  <component id="returnRollover" type="Rollover">
-    <binding name="image" expression="assets.return"/>
-    <binding name="focus" expression="assets.return_h"/>
-  </component>
-  
-  <context-asset name="return" path="images/return.png"/>
-  <context-asset name="return_h" path="images/return_h.png"/>
-     
-</page-specification>
diff --git a/3.0.4/examples/Vlib/context/WEB-INF/BorrowedBooks.properties b/3.0.4/examples/Vlib/context/WEB-INF/BorrowedBooks.properties
deleted file mode 100644
index 69d18fe..0000000
--- a/3.0.4/examples/Vlib/context/WEB-INF/BorrowedBooks.properties
+++ /dev/null
@@ -1,4 +0,0 @@
-# $Id$
-
-returned-book=Returned book ''{0}''.
-unable-to-return-book=Unable to return book: {0}
\ No newline at end of file
diff --git a/3.0.4/examples/Vlib/context/WEB-INF/Browser.jwc b/3.0.4/examples/Vlib/context/WEB-INF/Browser.jwc
deleted file mode 100644
index 3414ed0..0000000
--- a/3.0.4/examples/Vlib/context/WEB-INF/Browser.jwc
+++ /dev/null
@@ -1,40 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<component-specification 
-	allow-informal-parameters="yes" 
-	class="org.apache.tapestry.vlib.components.Browser">
-
-  <parameter name="query" required="yes" type="org.apache.tapestry.vlib.ejb.IBookQuery" direction="auto"/>
-  
-  <parameter name="value" type="java.lang.Object" required="yes" direction="auto"/>
-  
-  <parameter name="element" type="java.lang.String" direction="in"/>
-  
-  <parameter name="listener" type="org.apache.tapestry.IActionListener" required="yes" direction="auto"/>
-  
-  <property-specification name="resultCount" type="int" persistent="yes"/>
-  <property-specification name="currentPage" type="int" persistent="yes"/>
-  <property-specification name="pageCount" type="int" persistent="yes"/>
-  <property-specification name="pageResults" type="java.lang.Object[]"/>
- 
-</component-specification>
-
diff --git a/3.0.4/examples/Vlib/context/WEB-INF/ColumnSorter.html b/3.0.4/examples/Vlib/context/WEB-INF/ColumnSorter.html
deleted file mode 100644
index 80215d8..0000000
--- a/3.0.4/examples/Vlib/context/WEB-INF/ColumnSorter.html
+++ /dev/null
@@ -1,8 +0,0 @@
-<!-- $Id$ -->
-
-<span jwcid="$content$">
-<a jwcid="link"><span jwcid="@RenderBody"/></a>
-<span jwcid="@Conditional" condition="ognl:sortColumn == selected">
-<a jwcid="iconLink"><img jwcid="rollover" width="17" height="16" alt="Re-sort Column"/></a>
-</span>
-</span>
\ No newline at end of file
diff --git a/3.0.4/examples/Vlib/context/WEB-INF/ColumnSorter.jwc b/3.0.4/examples/Vlib/context/WEB-INF/ColumnSorter.jwc
deleted file mode 100644
index 56d8446..0000000
--- a/3.0.4/examples/Vlib/context/WEB-INF/ColumnSorter.jwc
+++ /dev/null
@@ -1,51 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<component-specification
-	class="org.apache.tapestry.vlib.components.ColumnSorter"
-  allow-body="yes" allow-informal-parameters="no">
-
-  <parameter name="selected" type="org.apache.tapestry.vlib.ejb.SortColumn" required="yes" direction="auto"/>
-  <parameter name="descending" type="boolean" required="yes" direction="auto"/>
-  <parameter name="sortColumn" type="org.apache.tapestry.vlib.ejb.SortColumn" required="yes" direction="auto"/>
-  <parameter name="listener" type="org.apache.tapestry.IActionListener" required="yes" direction="auto"/>
-  
-  <component id="link" type="DirectLink">
-  	<binding name="listener" expression="listeners.handleClick"/>	
-  </component>
-  
-  <component id="iconLink" copy-of="link"/>
-  
-  <component id="rollover" type="Rollover">
-  		<binding name="image">
-  			descending ? assets.down : assets.up	
-  		</binding>
-  		<binding name="focus">
-  			descending ? assets.down_h : assets.up_h
-  		</binding>
-  </component>
-  
-  <context-asset name="up" path="images/sort-up.png"/>
-  <context-asset name="up_h" path="images/sort-up_h.png"/>
-  <context-asset name="down" path="images/sort-down.png"/>
-  <context-asset name="down_h" path="images/sort-down_h.png"/>
-  
-</component-specification>
\ No newline at end of file
diff --git a/3.0.4/examples/Vlib/context/WEB-INF/ConfirmBookDelete.page b/3.0.4/examples/Vlib/context/WEB-INF/ConfirmBookDelete.page
deleted file mode 100644
index 8a634af..0000000
--- a/3.0.4/examples/Vlib/context/WEB-INF/ConfirmBookDelete.page
+++ /dev/null
@@ -1,49 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-  
-<page-specification class="org.apache.tapestry.vlib.pages.ConfirmBookDelete">
- 
-  <property name="page-type" value="MyLibrary"/>
-  
-  <property-specification name="bookId" type="java.lang.Integer"/>
-  <property-specification name="bookTitle" type="java.lang.String"/>
-  
-  <component id="confirm" type="DirectLink">
-    <binding name="listener" expression="listeners.deleteBook"/>
-    <binding name="parameters" expression="bookId"/>
-  </component>
-  
-  <component id="confirmRollover" type="Rollover">
-    <binding name="image" expression="assets.confirm"/>
-    <binding name="focus" expression="assets.confirm_h"/>	
-  </component>
-  
-  <component id="cancelRollover" type="Rollover">
-    <binding name="image" expression="assets.cancel"/>
-    <binding name="focus" expression="assets.cancel_h"/>	
-  </component>
-  
-  <context-asset name="confirm" path="images/delete-confirm.png"/>
-  <context-asset name="confirm_h" path="images/delete-confirm_h.png"/>
-  <context-asset name="cancel" path="images/delete-cancel.png"/>
-  <context-asset name="cancel_h" path="images/delete-cancel_h.png"/>
-  
-</page-specification>
diff --git a/3.0.4/examples/Vlib/context/WEB-INF/ConfirmBookDelete.properties b/3.0.4/examples/Vlib/context/WEB-INF/ConfirmBookDelete.properties
deleted file mode 100644
index 4b92f6b..0000000
--- a/3.0.4/examples/Vlib/context/WEB-INF/ConfirmBookDelete.properties
+++ /dev/null
@@ -1,3 +0,0 @@
-# $Id$
-
-book-deleted=Deleted book ''{0}''.
diff --git a/3.0.4/examples/Vlib/context/WEB-INF/EditBook.page b/3.0.4/examples/Vlib/context/WEB-INF/EditBook.page
deleted file mode 100644
index b71f49b..0000000
--- a/3.0.4/examples/Vlib/context/WEB-INF/EditBook.page
+++ /dev/null
@@ -1,64 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE page-specification PUBLIC
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-  
-<page-specification class="org.apache.tapestry.vlib.pages.EditBook">
-	
-	<property name="page-type" value="MyLibrary"/>
-  
-  <property-specification name="error" type="java.lang.String"/>
-  <property-specification name="attributes" type="java.util.Map"/>
-  <property-specification name="bookId" type="java.lang.Integer"/>
-  <property-specification name="publisherName" type="java.lang.String"/>
-  
-  <bean name="required" class="org.apache.tapestry.valid.StringValidator" lifecycle="page">
-  	<set-property name="required" expression="true"/>
-  	<set-property name="clientScriptingEnabled" expression="true"/>
-  </bean>
-  
-	<bean name="optional" class="org.apache.tapestry.valid.StringValidator" lifecycle="page">
-	  <set-property name="required" expression="true"/>
-	</bean>
-  
-  <component id="inputTitle" type="ValidField">
-    <binding name="value" expression="attributes.title"/>
-    <static-binding name="displayName" value="Title"/>
-    <binding name="validator" expression="beans.required"/>
-  </component>
- 
-  <component id="inputAuthor" type="ValidField">
-    <binding name="value" expression="attributes.author"/>
-    <static-binding name="displayName" value="Author"/>
-    <binding name="validator" expression="beans.required"/>
-  </component>
-  
-  <component id="inputPublisher" type="PropertySelection">
-    <binding name="value" expression="attributes.publisherId"/>
-    <binding name="model" expression="engine.publisherModel"/>
-  </component>
-  
-  <component id="inputPublisherName" type="ValidField">
-    <binding name="value" expression="publisherName"/>
-    <static-binding name="displayName" value="Publisher"/>
-    <binding name="validator" expression="beans.optional"/>
-  </component>
-
-
-</page-specification>
diff --git a/3.0.4/examples/Vlib/context/WEB-INF/EditBook.properties b/3.0.4/examples/Vlib/context/WEB-INF/EditBook.properties
deleted file mode 100644
index 80ef547..0000000
--- a/3.0.4/examples/Vlib/context/WEB-INF/EditBook.properties
+++ /dev/null
@@ -1,5 +0,0 @@
-# $Id$
-
-need-publisher-name=You must provide a publisher name if the publisher option is left empty.
-leave-publisher-name-empty=You may not enter a publisher name if you select a publisher from the list.
-updated-book=Updated book ''{0}''.
diff --git a/3.0.4/examples/Vlib/context/WEB-INF/EditProfile.page b/3.0.4/examples/Vlib/context/WEB-INF/EditProfile.page
deleted file mode 100644
index 3c8f330..0000000
--- a/3.0.4/examples/Vlib/context/WEB-INF/EditProfile.page
+++ /dev/null
@@ -1,62 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE page-specification PUBLIC
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<page-specification class="org.apache.tapestry.vlib.pages.EditProfile">
-
-  <property-specification name="error" type="java.lang.String"/>
-  <property-specification name="password1" type="java.lang.String"/>
-  <property-specification name="password2" type="java.lang.String"/>
-  <property-specification name="attributes" type="java.util.Map"/>
- 
-  <bean name="required" class="org.apache.tapestry.valid.StringValidator" lifecycle="page">
-  	<set-property name="required" expression="true"/>
-  	<set-property name="clientScriptingEnabled" expression="true"/>
-  </bean>
-  
-  <bean name="optional" class="org.apache.tapestry.valid.StringValidator" lifecycle="page"/>
-
-  <component id="inputLastName" type="ValidField">
-    <binding name="value" expression="attributes.lastName"/>
-    <static-binding name="displayName" value="Last Name"/>   
-    <binding name="validator" expression="beans.required"/>
-  </component>
-
-  <component id="inputEmail" type="ValidField">
-    <binding name="value" expression="attributes.email"/>
-    <static-binding name="displayName" value="E-Mail"/>
-    <binding name="validator" expression="beans.required"/>
-  </component>
-
-  <component id="inputPassword1" type="ValidField">
-    <binding name="value" expression="password1"/>
-    <static-binding name="displayName" value="Password"/> 
-    <binding name="validator" expression="beans.optional"/>
-    <binding name="hidden" expression="true"/>
-  </component>
-
-  <component id="inputPassword2" type="ValidField">
-    <binding name="value" expression="password2"/>
-    <static-binding name="displayName" value="Password (again)"/>  
-    <binding name="validator" expression="beans.optional"/>
-    <binding name="hidden" expression="true"/>
-  </component>
-  
-</page-specification>
diff --git a/3.0.4/examples/Vlib/context/WEB-INF/EditProfile.properties b/3.0.4/examples/Vlib/context/WEB-INF/EditProfile.properties
deleted file mode 100644
index 1f86b90..0000000
--- a/3.0.4/examples/Vlib/context/WEB-INF/EditProfile.properties
+++ /dev/null
@@ -1,4 +0,0 @@
-# $Id$
-
-enter-password-twice=Enter the new password, then re-enter it to confirm.
-password-must-match=Enter the same password in both fields.
\ No newline at end of file
diff --git a/3.0.4/examples/Vlib/context/WEB-INF/EditPublishers.page b/3.0.4/examples/Vlib/context/WEB-INF/EditPublishers.page
deleted file mode 100644
index a7b672d..0000000
--- a/3.0.4/examples/Vlib/context/WEB-INF/EditPublishers.page
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<page-specification class="org.apache.tapestry.vlib.pages.admin.EditPublishers">
-
-  <property-specification name="listEditMap" type="org.apache.tapestry.form.ListEditMap"/>
-  <property-specification name="message" type="java.lang.String"/>
-  <property-specification name="error" type="java.lang.String"/>
-  
-  <property-specification name="publisher" type="org.apache.tapestry.vlib.ejb.Publisher"/>
-  
-  <component id="listEdit" type="ListEdit">
-  	<binding name="source" expression="listEditMap.keys"/>
-  	<binding name="value" expression="listEditMap.key"/>
-  	<static-binding name="element" value="tr"/>
-  	<binding name="listener" expression="listeners.synchronizePublisher"/>
-  </component>
-  
-</page-specification>
diff --git a/3.0.4/examples/Vlib/context/WEB-INF/EditPublishers.properties b/3.0.4/examples/Vlib/context/WEB-INF/EditPublishers.properties
deleted file mode 100644
index 3fdda36..0000000
--- a/3.0.4/examples/Vlib/context/WEB-INF/EditPublishers.properties
+++ /dev/null
@@ -1,5 +0,0 @@
-# $Id$
-
-out-of-date=The data submitted in the form is out of date.  Please try again.
-read-failure=Unable to read the list of publishers.
-update-failure=Unable to update publishers.
\ No newline at end of file
diff --git a/3.0.4/examples/Vlib/context/WEB-INF/EditUsers.page b/3.0.4/examples/Vlib/context/WEB-INF/EditUsers.page
deleted file mode 100644
index 5fc4b9b..0000000
--- a/3.0.4/examples/Vlib/context/WEB-INF/EditUsers.page
+++ /dev/null
@@ -1,46 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-  
-<page-specification class="org.apache.tapestry.vlib.pages.admin.EditUsers">
-
-  <property-specification name="message" type="java.lang.String"/>
-  <property-specification name="error" type="java.lang.String"/>
-  <property-specification name="user" type="org.apache.tapestry.vlib.ejb.Person"/>
-  <property-specification name="listEditMap" type="org.apache.tapestry.vlib.pages.admin.UserListEditMap"/>
-  <property-specification name="password" type="java.lang.String"/>
-  
-  <bean name="optional" class="org.apache.tapestry.valid.StringValidator" lifecycle="page"/>
-
-  
-  <component id="listEdit" type="ListEdit">
-  	<binding name="source" expression="listEditMap.keys"/>
-  	<binding name="value" expression="listEditMap.key"/>
-  	<binding name="listener" expression="listeners.synchronizeUser"/>
-  	<static-binding name="element" value="tr"/>
-  </component>
-  
-  <component id="inputPassword" type="ValidField">
-    <binding name="value" expression="password"/>
-    <binding name="validator" expression="beans.optional"/>
-    <static-binding name="displayName" value="New Password"/>	
-  </component>
-
-</page-specification>
diff --git a/3.0.4/examples/Vlib/context/WEB-INF/EditUsers.properties b/3.0.4/examples/Vlib/context/WEB-INF/EditUsers.properties
deleted file mode 100644
index f83e3bd..0000000
--- a/3.0.4/examples/Vlib/context/WEB-INF/EditUsers.properties
+++ /dev/null
@@ -1,7 +0,0 @@
-# $Id$
-
-users-updated=Users updated.
-update-failure=Unable to update users.
-read-failure=Unable to read users.
-out-of-date=The data submitted in the form is out of date.  Please try again.
-need-password=You must enter the new password for users who are having their password changed.
\ No newline at end of file
diff --git a/3.0.4/examples/Vlib/context/WEB-INF/GiveAwayBooks.page b/3.0.4/examples/Vlib/context/WEB-INF/GiveAwayBooks.page
deleted file mode 100644
index 930244a..0000000
--- a/3.0.4/examples/Vlib/context/WEB-INF/GiveAwayBooks.page
+++ /dev/null
@@ -1,46 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<page-specification class="org.apache.tapestry.vlib.pages.GiveAwayBooks">
-
-  <property-specification name="error" type="java.lang.String"/>
-	<property-specification name="booksModel" type="org.apache.tapestry.form.IPropertySelectionModel"/>
-	<property-specification name="personModel" type="org.apache.tapestry.form.IPropertySelectionModel"/>
-	<property-specification name="selectedBooks" type="java.util.List"/>
-
-	<property-specification name="targetUserId" type="java.lang.Integer"/>
-
-    <component id="selectBooks" type="contrib:Palette">
-      <binding name="sort">
-        @org.apache.tapestry.contrib.palette.SortMode@LABEL
-     	</binding>
-      <binding name="model" expression="booksModel"/>
-      <binding name="selected" expression="selectedBooks"/>
-      <binding name="selectedTitleBlock" expression="components.selectedTitleBlock"/>
-      <binding name="availableTitleBlock" expression="components.availableTitleBlock"/>
-    </component>
-    
-    <component id="selectTarget" type="PropertySelection">
-      <binding name="value" expression="targetUserId"/>
-      <binding name="model" expression="personModel"/>
-    </component>
-
-</page-specification>
diff --git a/3.0.4/examples/Vlib/context/WEB-INF/GiveAwayBooks.properties b/3.0.4/examples/Vlib/context/WEB-INF/GiveAwayBooks.properties
deleted file mode 100644
index ebe5628..0000000
--- a/3.0.4/examples/Vlib/context/WEB-INF/GiveAwayBooks.properties
+++ /dev/null
@@ -1,8 +0,0 @@
-# $Id$
-
-select-at-least-one-book=You must select at least one book to transfer to {0}.
-update-failure=Unable to transfer book(s).
-read-users-failure=Unable to obtain list of users.
-read-books-failure=Unable to retrieve list of books.
-transfered-books=Transfered {0} book(s) to {1}.
-no-books-to-transfer=You own no books that you could give away.
\ No newline at end of file
diff --git a/3.0.4/examples/Vlib/context/WEB-INF/Home.page b/3.0.4/examples/Vlib/context/WEB-INF/Home.page
deleted file mode 100644
index 0d7f859..0000000
--- a/3.0.4/examples/Vlib/context/WEB-INF/Home.page
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE page-specification PUBLIC
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-  
-<page-specification class="org.apache.tapestry.vlib.pages.Home">
-  
-  <property name="page-type" value="Search"/>
-  
-  <property-specification name="error" type="java.lang.String"/>
-  <property-specification name="message" type="java.lang.String"/>
-  
-  <property-specification name="title" type="java.lang.String"/>
-  <property-specification name="author" type="java.lang.String"/>
-  <property-specification name="ownerId" type="java.lang.Integer"/>	
-  <property-specification name="publisherId" type="java.lang.Integer"/>
-  
-</page-specification>
-
diff --git a/3.0.4/examples/Vlib/context/WEB-INF/Information.html b/3.0.4/examples/Vlib/context/WEB-INF/Information.html
deleted file mode 100644
index 2ad110f..0000000
--- a/3.0.4/examples/Vlib/context/WEB-INF/Information.html
+++ /dev/null
@@ -1,23 +0,0 @@
-<!-- $Id$ -->
-
-<span jwcid="$content$">
-
-<div class="message">
-	<table>
-		<tr> <td>
-    <img src="images/info-icon.png" width="50" height="50" alt="Info" border="0" vspace="10">
-    	</td>
-	<td>
-    <span class="message">
-    	<span jwcid="@RenderBody">
-    	Info Message
-    	</span>
-    </span>
-</td>
-</tr>
-</table>
-
-</div>
-
-
-</span>
diff --git a/3.0.4/examples/Vlib/context/WEB-INF/Information.jwc b/3.0.4/examples/Vlib/context/WEB-INF/Information.jwc
deleted file mode 100644
index 8382c85..0000000
--- a/3.0.4/examples/Vlib/context/WEB-INF/Information.jwc
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>

-<!--

-   Copyright 2004 The Apache Software Foundation

-  

-   Licensed under the Apache License, Version 2.0 (the "License");

-   you may not use this file except in compliance with the License.

-   You may obtain a copy of the License at

-  

-       http://www.apache.org/licenses/LICENSE-2.0

-  

-   Unless required by applicable law or agreed to in writing, software

-   distributed under the License is distributed on an "AS IS" BASIS,

-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-   See the License for the specific language governing permissions and

-   limitations under the License.

--->

-<!-- $Id: Question.jwc,v 1.1 2003/03/29 18:49:07 hlship Exp $ -->

-<!DOCTYPE component-specification PUBLIC

-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 

-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">

-  

-<component-specification 

-	allow-body="yes" 

-	allow-informal-parameters="no">

-  

-</component-specification>

diff --git a/3.0.4/examples/Vlib/context/WEB-INF/Login.page b/3.0.4/examples/Vlib/context/WEB-INF/Login.page
deleted file mode 100644
index 8cc624c..0000000
--- a/3.0.4/examples/Vlib/context/WEB-INF/Login.page
+++ /dev/null
@@ -1,53 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<page-specification class="org.apache.tapestry.vlib.pages.Login">
-
-  <property-specification name="email" type="java.lang.String"/>
-  <property-specification name="password" type="java.lang.String"/>
-  <property-specification name="error" type="java.lang.String"/>
-  <property-specification name="callback" type="org.apache.tapestry.callback.ICallback" persistent="yes"/>
-  
-  <bean name="delegate" class="org.apache.tapestry.vlib.VirtualLibraryDelegate"/>
-
-  <bean name="validator" class="org.apache.tapestry.valid.StringValidator" lifecycle="page">
-  	<set-property name="required" expression="true"/>
-  	<set-property name="clientScriptingEnabled" expression="true"/>
-  </bean>
-
-  <component id="inputEmail" type="ValidField">
-    <static-binding name="displayName" value="Email Address"/>
-    <binding name="value" expression="email"/>
-    <binding name="validator" expression="beans.validator"/>
-  </component>
-  
-  <component id="inputPassword" type="ValidField">
-    <binding name="value" expression="password"/>
-    <binding name="validator" expression="beans.validator"/>
-    <static-binding name="displayName" value="Password"/>
-    <binding name="hidden" expression="true"/>
-  </component>
-  
-  <component id="register" type="PageLink">
-    <static-binding name="page">Register</static-binding>
-  </component>
-
-</page-specification>
diff --git a/3.0.4/examples/Vlib/context/WEB-INF/MyLibrary.page b/3.0.4/examples/Vlib/context/WEB-INF/MyLibrary.page
deleted file mode 100644
index 8b86b41..0000000
--- a/3.0.4/examples/Vlib/context/WEB-INF/MyLibrary.page
+++ /dev/null
@@ -1,84 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<page-specification class="org.apache.tapestry.vlib.pages.MyLibrary">
-
-  <property-specification name="message" type="java.lang.String"/>
-  <property-specification name="error" type="java.lang.String"/>
-  <property-specification name="currentBook" type="org.apache.tapestry.vlib.ejb.Book"/>
-  <property-specification name="ownedQuery" type="org.apache.tapestry.vlib.ejb.IBookQuery" persistent="yes"/>
-  
-  <property-specification name="sortColumn" type="org.apache.tapestry.vlib.ejb.SortColumn" persistent="yes">
-  	@org.apache.tapestry.vlib.ejb.SortColumn@TITLE
-  </property-specification>
-  <property-specification name="descending" type="boolean" persistent="yes"/>
-
-  <component id="sortTitle" type="ColumnSorter">
-    <binding name="selected" expression="sortColumn"/>
-    <binding name="sortColumn" expression="@org.apache.tapestry.vlib.ejb.SortColumn@TITLE"/>
-    <binding name="descending" expression="descending"/>
-    <binding name="listener" expression="listeners.requery"/>
-  </component>   
-    
-  <component id="sortAuthor" copy-of="sortTitle">
-    <binding name="sortColumn" expression="@org.apache.tapestry.vlib.ejb.SortColumn@AUTHOR"/>
-  </component>
-  
-  <component id="sortPublisher" copy-of="sortTitle">
-    <binding name="sortColumn" expression="@org.apache.tapestry.vlib.ejb.SortColumn@PUBLISHER"/>	
-  </component>
-  
-  <component id="sortBorrower" copy-of="sortTitle">
-    <binding name="sortColumn" expression="@org.apache.tapestry.vlib.ejb.SortColumn@HOLDER"/>
-  </component>
-  
-  <component id="holderLink" type="PersonLink">
-    <binding name="id" expression="currentBook.holderId"/>
-    <binding name="name" expression="currentBook.holderName"/>
-    <binding name="omit" expression="! currentBook.borrowed"/>
-  </component>
-
-  <component id="edit" type="DirectLink">
-    <binding name="listener" expression="listeners.editBook"/>
-    <binding name="parameters" expression="currentBook.id"/>
-  </component>
-
-  <component id="editRollover" type="Rollover">
-    <binding name="image" expression="assets.edit"/>
-    <binding name="focus" expression="assets.edit_h"/>	
-  </component>
-
-  <component id="delete" type="DirectLink">
-    <binding name="listener" expression="listeners.deleteBook"/>
-    <binding name="parameters" expression="currentBook.id"/>
-  </component>
-  
-  <component id="deleteRollover" type="Rollover">
-    <binding name="image" expression="assets.delete"/>
-    <binding name="focus" expression="assets.delete_h"/>	
-  </component>
-  
-  <context-asset name="edit" path="images/edit.png"/>
-  <context-asset name="edit_h" path="images/edit_h.png"/>
-  <context-asset name="delete" path="images/delete.png"/>
-  <context-asset name="delete_h" path="images/delete_h.png"/>
- 
-</page-specification>
diff --git a/3.0.4/examples/Vlib/context/WEB-INF/MyLibrary.properties b/3.0.4/examples/Vlib/context/WEB-INF/MyLibrary.properties
deleted file mode 100644
index 657a46b..0000000
--- a/3.0.4/examples/Vlib/context/WEB-INF/MyLibrary.properties
+++ /dev/null
@@ -1,4 +0,0 @@
-# $Id$
-
-returned-book=Returned book ''{0}''
-unable-to-return-book=Unable to return book: {0}
diff --git a/3.0.4/examples/Vlib/context/WEB-INF/NewBook.page b/3.0.4/examples/Vlib/context/WEB-INF/NewBook.page
deleted file mode 100644
index 19e1b2c..0000000
--- a/3.0.4/examples/Vlib/context/WEB-INF/NewBook.page
+++ /dev/null
@@ -1,54 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<page-specification class="org.apache.tapestry.vlib.pages.NewBook">
-
-  <property-specification name="error" type="java.lang.String"/>
-  <property-specification name="publisherName" type="java.lang.String"/>
-  <property-specification name="attributes" type="java.util.Map"/>
-  
-  <bean name="required" class="org.apache.tapestry.valid.StringValidator" lifecycle="page">
-    <set-property name="required" expression="true"/>
-    <set-property name="clientScriptingEnabled" expression="true"/>
-  </bean>
-  
-  <bean name="optional" class="org.apache.tapestry.valid.StringValidator" lifecycle="page"/>
-    
-  <component id="inputTitle" type="ValidField">
-    <binding name="value" expression="attributes.title"/>
-    <static-binding name="displayName" value="Title"/>
-    <binding name="validator" expression="beans.required"/>
-  </component>
-  
-  <component id="inputAuthor" type="ValidField">
-    <binding name="value" expression="attributes.author"/>
-    <binding name="validator" expression="beans.required"/>
-    <static-binding name="displayName" value="Author"/>
-  </component>
-
-  
-  <component id="inputPublisherName" type="ValidField">
-    <binding name="value" expression="publisherName"/>
-    <binding name="validator" expression="beans.optional"/>
-    <static-binding name="displayName" value="Publisher"/>
-  </component>
-    
-</page-specification>
diff --git a/3.0.4/examples/Vlib/context/WEB-INF/NewBook.properties b/3.0.4/examples/Vlib/context/WEB-INF/NewBook.properties
deleted file mode 100644
index 1c60e81..0000000
--- a/3.0.4/examples/Vlib/context/WEB-INF/NewBook.properties
+++ /dev/null
@@ -1,5 +0,0 @@
-# $Id$
-
-need-publisher-name=You must provide a publisher name if the publisher option is left empty.
-leave-publisher-name-empty=You may not enter a publisher name if you select a publisher from the list.
-added-book=Added ''{0}''.
diff --git a/3.0.4/examples/Vlib/context/WEB-INF/PersonLink.html b/3.0.4/examples/Vlib/context/WEB-INF/PersonLink.html
deleted file mode 100644
index 4400cb4..0000000
--- a/3.0.4/examples/Vlib/context/WEB-INF/PersonLink.html
+++ /dev/null
@@ -1,13 +0,0 @@
-<!-- $Id$ -->
-
-<span jwcid="$content$">
-
-<span jwcid="@Conditional" condition="ognl:! omit">
-<a jwcid="link"><span jwcid="@Insert" value="ognl:name">Joe User</span></a>
-</span>
-
-<span jwcid="@Conditional" condition="ognl:omit">
-&nbsp;
-</span>
-
-</span>
diff --git a/3.0.4/examples/Vlib/context/WEB-INF/PersonLink.jwc b/3.0.4/examples/Vlib/context/WEB-INF/PersonLink.jwc
deleted file mode 100644
index 0837da5..0000000
--- a/3.0.4/examples/Vlib/context/WEB-INF/PersonLink.jwc
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE component-specification PUBLIC
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-  
-<component-specification 
-	allow-body="no" 
-	allow-informal-parameters="no">
-  
-  <parameter name="name" type="java.lang.String" required="yes" direction="in"/>
-  
-  <parameter name="id" type="java.lang.Integer" required="yes" direction="in" property-name="personId"/>
-  
-  <parameter name="omit" type="boolean" direction="in"/>
-   
-  <component id="link" type="ExternalLink">
-    <static-binding name="page" value="ViewPerson"/>
-    <binding name="parameters" expression="personId"/>
-  </component>  
-  
-</component-specification>
diff --git a/3.0.4/examples/Vlib/context/WEB-INF/Publisher.script b/3.0.4/examples/Vlib/context/WEB-INF/Publisher.script
deleted file mode 100644
index fd7d024..0000000
--- a/3.0.4/examples/Vlib/context/WEB-INF/Publisher.script
+++ /dev/null
@@ -1,77 +0,0 @@
-<?xml version="1.0"?>
-<!-- $Id$ -->
-<!DOCTYPE script PUBLIC
-  "-//Apache Software Foundation//Tapestry Script Specification 3.0//EN"
-	"http://jakarta.apache.org/tapestry/dtd/Script_3_0.dtd">
-
-<script>
-<!-- 
-
-input symbols:
-
-  select: The PropertySelection component
-  field: The matching TextField component
-  
-Both are assumed to be in the same form.
-
--->
-
-<input-symbol key="select" class="org.apache.tapestry.form.PropertySelection" required="yes"/>
-<input-symbol key="field" class="org.apache.tapestry.form.AbstractTextField" required="yes"/>
-
-<let key="formObject">
-	document.${select.form.name}
-</let>
-
-<let key="selectObject">
-	${formObject}.${select.name}
-</let>
-
-<let key="fieldObject">
-	${formObject}.${field.name}
-</let>
-
-<let key="functionName" unique="yes">
-	onChange_${select.name}
-</let>
-
-<body>
-
-function ${functionName}()
-{
-  var select = ${selectObject};
-  var field = ${fieldObject};
-	
-	// Index 0 is the null value option, meaning enable the text field
-	
-  if (select.selectedIndex == 0)
-  {
-    field.disabled = false;
-    field.focus();
-    field.select();
-  }
-  else
-  {
-	// disabled only works with IE, not NN
-    field.disabled = true;
-    field.blur();
-    field.value = "";
-  }
-}
-
-</body>
-
-<initialization>
-<!-- Navigator is not documented to respond to the onChange event, but this works,
-	 so my documentation must be wrong. -->
-	 
-${selectObject}.onchange = ${functionName};
-
-<!-- Disable the text field unless the select is set for index 0 (the null value). -->
-
-if (${selectObject}.selectedIndex != 0)
-  ${fieldObject}.disabled = true;
-
-</initialization>
-
-</script>
diff --git a/3.0.4/examples/Vlib/context/WEB-INF/Question.html b/3.0.4/examples/Vlib/context/WEB-INF/Question.html
deleted file mode 100644
index 46901d6..0000000
--- a/3.0.4/examples/Vlib/context/WEB-INF/Question.html
+++ /dev/null
@@ -1,21 +0,0 @@
-<!-- $Id$ -->
-
-<span jwcid="$content$">
-
-<div class="message">
-	<table>
-		<tr> <td>
-    <img src="images/question-icon.png" width="50" height="50" alt="Question" border="0" vspace="10">
-    	</td>
-	<td>
-    <span class="message">
-    	<span jwcid="@RenderBody">The Question</span>
-    </span>
-</td>
-</tr>
-</table>
-
-</div>
-
-
-</span>
diff --git a/3.0.4/examples/Vlib/context/WEB-INF/Question.jwc b/3.0.4/examples/Vlib/context/WEB-INF/Question.jwc
deleted file mode 100644
index 9c91ae5..0000000
--- a/3.0.4/examples/Vlib/context/WEB-INF/Question.jwc
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE component-specification PUBLIC
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-  
-<component-specification 
-	allow-body="yes" 
-	allow-informal-parameters="no">
-  
-</component-specification>
diff --git a/3.0.4/examples/Vlib/context/WEB-INF/Register.page b/3.0.4/examples/Vlib/context/WEB-INF/Register.page
deleted file mode 100644
index 1f4bb1d..0000000
--- a/3.0.4/examples/Vlib/context/WEB-INF/Register.page
+++ /dev/null
@@ -1,67 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<page-specification class="org.apache.tapestry.vlib.pages.Register">
-
-  <property name="page-type" value="Login"/>
-
-  <property-specification name="error" type="java.lang.String"/>
-  <property-specification name="firstName" type="java.lang.String"/>
-  <property-specification name="lastName" type="java.lang.String"/>
-  <property-specification name="email" type="java.lang.String"/>
-  <property-specification name="password1" type="java.lang.String"/>
-  <property-specification name="password2" type="java.lang.String"/>
-  
-   <bean name="delegate" class="org.apache.tapestry.vlib.VirtualLibraryDelegate"/>
-  
-  <bean name="validator" class="org.apache.tapestry.valid.StringValidator" lifecycle="page">
-  	<set-property name="required" expression="true"/>
-  	<set-property name="clientScriptingEnabled" expression="true"/>
-  </bean>
-  
-  <component id="inputLastName" type="ValidField">
-    <binding name="value" expression="lastName"/>
-    <static-binding name="displayName" value="Last Name"/>
-    <binding name="validator" expression="beans.validator"/>
-  </component>
-  
-  <component id="inputEmail" type="ValidField">
-    <binding name="value" expression="email"/>
-    <binding name="validator" expression="beans.validator"/>
-    <static-binding name="displayName" value="E-Mail"/>
-  </component>
-  
-  <component id="inputPassword1" type="ValidField">
-    <binding name="value" expression="password1"/>
-    <static-binding name="displayName" value="Password"/>
-    <binding name="validator" expression="beans.validator"/>
-    <binding name="hidden" expression="true"/>
-  </component>
-  
-  
-  <component id="inputPassword2" type="ValidField">
-    <binding name="value" expression="password2"/>
-    <static-binding name="displayName" value="Password (again)"/>
-    <binding name="validator" expression="beans.validator"/>
-    <binding name="hidden" expression="true"/>
-  </component>
-
-</page-specification>
diff --git a/3.0.4/examples/Vlib/context/WEB-INF/Register.properties b/3.0.4/examples/Vlib/context/WEB-INF/Register.properties
deleted file mode 100644
index 764ef94..0000000
--- a/3.0.4/examples/Vlib/context/WEB-INF/Register.properties
+++ /dev/null
@@ -1,3 +0,0 @@
-# $Id$
-
-password-must-match=Enter the same password in both fields.
\ No newline at end of file
diff --git a/3.0.4/examples/Vlib/context/WEB-INF/ShowError.html b/3.0.4/examples/Vlib/context/WEB-INF/ShowError.html
deleted file mode 100644
index 5aaeb2d..0000000
--- a/3.0.4/examples/Vlib/context/WEB-INF/ShowError.html
+++ /dev/null
@@ -1,20 +0,0 @@
-<!-- $Id$ -->
-<span jwcid="$content$">
-	<span jwcid="@Conditional" condition="ognl:page.error">
-		<div class="error">
-			<table>
-				<tr>
-					<td>
-						<img src="images/error-icon.png" width="50" height="50"
-							alt="Error" border="0" vspace="10"
-							align="absmiddle"/>
-					</td>
-					<td>
-						<span class="error" jwcid="@Insert" value="ognl:page.error">Error
-							Message</span>
-					</td>
-				</tr>
-			</table>
-		</div>
-	</span>
-</span>
diff --git a/3.0.4/examples/Vlib/context/WEB-INF/ShowError.jwc b/3.0.4/examples/Vlib/context/WEB-INF/ShowError.jwc
deleted file mode 100644
index d1f85e4..0000000
--- a/3.0.4/examples/Vlib/context/WEB-INF/ShowError.jwc
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<component-specification allow-informal-parameters="no"/>
-
diff --git a/3.0.4/examples/Vlib/context/WEB-INF/ShowMessage.html b/3.0.4/examples/Vlib/context/WEB-INF/ShowMessage.html
deleted file mode 100644
index 1907aa1..0000000
--- a/3.0.4/examples/Vlib/context/WEB-INF/ShowMessage.html
+++ /dev/null
@@ -1,12 +0,0 @@
-<!-- $Id$ -->
-
-<span jwcid="$content$">
-
-<span jwcid="@Conditional" condition="ognl:page.message">
-
-<span jwcid="@Information">
-    <span class="message" jwcid="@Insert" value="ognl:page.message">Info Message</span>
-</span>
-
-</span>
-</span>
diff --git a/3.0.4/examples/Vlib/context/WEB-INF/ShowMessage.jwc b/3.0.4/examples/Vlib/context/WEB-INF/ShowMessage.jwc
deleted file mode 100644
index df19278..0000000
--- a/3.0.4/examples/Vlib/context/WEB-INF/ShowMessage.jwc
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<component-specification allow-informal-parameters="no"/>
diff --git a/3.0.4/examples/Vlib/context/WEB-INF/ShowValidationError.html b/3.0.4/examples/Vlib/context/WEB-INF/ShowValidationError.html
deleted file mode 100644
index 2ab3dac..0000000
--- a/3.0.4/examples/Vlib/context/WEB-INF/ShowValidationError.html
+++ /dev/null
@@ -1,21 +0,0 @@
-<!-- $Id$ -->
-<span jwcid="$content$">
-	<span jwcid="@Conditional" condition="ognl:delegate.hasErrors">
-		<div class="error">
-			<table>
-				<tr>
-					<td>
-						<img src="images/error-icon.png" width="50" height="50"
-							alt="Error" border="0" vspace="10"/>
-					</td>
-					<td>
-						<span class="error">
-						<span jwcid="@Delegator"
-							delegate="ognl:delegate.firstError">Error Message</span>
-						</span>
-					</td>
-				</tr>
-			</table>
-		</div>
-	</span>
-</span>
diff --git a/3.0.4/examples/Vlib/context/WEB-INF/ShowValidationError.jwc b/3.0.4/examples/Vlib/context/WEB-INF/ShowValidationError.jwc
deleted file mode 100644
index df4535e..0000000
--- a/3.0.4/examples/Vlib/context/WEB-INF/ShowValidationError.jwc
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<component-specification class="org.apache.tapestry.BaseComponent" 
-	allow-informal-parameters="no">
-
-  <parameter name="delegate" type="org.apache.tapestry.valid.IValidationDelegate" required="yes" direction="in"/>
-  
-</component-specification>
diff --git a/3.0.4/examples/Vlib/context/WEB-INF/TransferBooksSelect.page b/3.0.4/examples/Vlib/context/WEB-INF/TransferBooksSelect.page
deleted file mode 100644
index e5af09a..0000000
--- a/3.0.4/examples/Vlib/context/WEB-INF/TransferBooksSelect.page
+++ /dev/null
@@ -1,33 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<page-specification class="org.apache.tapestry.vlib.pages.admin.TransferBooksSelect">
-
-  <property name="page-type" value="TransferBooks"/>
-  
-  <property-specification name="message" type="java.lang.String"/>
-  <property-specification name="error" type="java.lang.String"/>
-  
-  <property-specification name="fromUserId" type="java.lang.Integer" persistent="yes"/>
-  <property-specification name="toUserId" type="java.lang.Integer" persistent="yes"/>
-  
-</page-specification>
-
diff --git a/3.0.4/examples/Vlib/context/WEB-INF/TransferBooksSelect.properties b/3.0.4/examples/Vlib/context/WEB-INF/TransferBooksSelect.properties
deleted file mode 100644
index 5f57474..0000000
--- a/3.0.4/examples/Vlib/context/WEB-INF/TransferBooksSelect.properties
+++ /dev/null
@@ -1,3 +0,0 @@
-# $Id$
-
-select-different-users=Select two different users.
\ No newline at end of file
diff --git a/3.0.4/examples/Vlib/context/WEB-INF/TransferBooksTransfer.page b/3.0.4/examples/Vlib/context/WEB-INF/TransferBooksTransfer.page
deleted file mode 100644
index 3c19884..0000000
--- a/3.0.4/examples/Vlib/context/WEB-INF/TransferBooksTransfer.page
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<page-specification class="org.apache.tapestry.vlib.pages.admin.TransferBooksTransfer">
-
-  <property name="page-type" value="TransferBooks"/>
-  
-  <property-specification name="message" type="java.lang.String"/>
-  <property-specification name="error" type="java.lang.String"/>
-  
-  <property-specification name="fromUserId" type="java.lang.Integer" persistent="yes"/>
-  <property-specification name="fromUser" type="org.apache.tapestry.vlib.ejb.Person"/>
-  <property-specification name="toUserId" type="java.lang.Integer" persistent="yes"/>
-  <property-specification name="toUser" type="org.apache.tapestry.vlib.ejb.Person"/>
-  <property-specification name="userBookModel" type="org.apache.tapestry.form.IPropertySelectionModel"/>
-  <property-specification name="selectedBooks" type="java.util.List"/>
-    
-  <component id="selectBooks" type="contrib:Palette">
-    <binding name="model" expression="userBookModel"/>
-    <binding name="sort" expression="@org.apache.tapestry.contrib.palette.SortMode@LABEL"/>
-    <binding name="selected" expression="selectedBooks"/>
-    <binding name="selectedTitleBlock" expression="components.selectedTitle"/>
-    <binding name="availableTitleBlock" expression="components.availableTitle"/>
-  </component>
-  
-</page-specification>
-
diff --git a/3.0.4/examples/Vlib/context/WEB-INF/TransferBooksTransfer.properties b/3.0.4/examples/Vlib/context/WEB-INF/TransferBooksTransfer.properties
deleted file mode 100644
index 2467e91..0000000
--- a/3.0.4/examples/Vlib/context/WEB-INF/TransferBooksTransfer.properties
+++ /dev/null
@@ -1,5 +0,0 @@
-# $Id$
-
-user-has-no-books=User {0} owns no books to transfer.
-no-books-selected=You must select at least one book to transfer.
-transfered-books=Transfered {0} books from {1} to {2}.
\ No newline at end of file
diff --git a/3.0.4/examples/Vlib/context/WEB-INF/ViewBook.page b/3.0.4/examples/Vlib/context/WEB-INF/ViewBook.page
deleted file mode 100644
index b73f822..0000000
--- a/3.0.4/examples/Vlib/context/WEB-INF/ViewBook.page
+++ /dev/null
@@ -1,40 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<page-specification class="org.apache.tapestry.vlib.pages.ViewBook">
-  
-  <property name="page-type" value="Search"/>
-  
-  <property-specification name="bookId" type="java.lang.Integer" persistent="yes"/>
-  <property-specification name="book" type="org.apache.tapestry.vlib.ejb.Book"/>
-  
-  <component id="ownerLink" type="PersonLink">
-    <binding name="id" expression="book.ownerId"/>
-    <binding name="name" expression="book.ownerName"/>
-  </component>
-
-  
-  <component id="holderLink" type="PersonLink">
-    <binding name="id" expression="book.holderId"/>
-    <binding name="name" expression="book.holderName"/>
-  </component>
-
-</page-specification>
diff --git a/3.0.4/examples/Vlib/context/WEB-INF/ViewPerson.page b/3.0.4/examples/Vlib/context/WEB-INF/ViewPerson.page
deleted file mode 100644
index af65612..0000000
--- a/3.0.4/examples/Vlib/context/WEB-INF/ViewPerson.page
+++ /dev/null
@@ -1,69 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<page-specification class="org.apache.tapestry.vlib.pages.ViewPerson">
-
-  <property name="page-type" value="Search"/>
-
-  <property-specification name="personId" type="java.lang.Integer" persistent="yes"/>
-  <property-specification name="person" type="org.apache.tapestry.vlib.ejb.Person"/>
-  
-  <property-specification name="query" type="org.apache.tapestry.vlib.ejb.IBookQuery" persistent="yes"/>
-  <property-specification name="currentMatch" type="org.apache.tapestry.vlib.ejb.Book"/>
-
-  <property-specification name="sortColumn" type="org.apache.tapestry.vlib.ejb.SortColumn" persistent="yes">
-  	@org.apache.tapestry.vlib.ejb.SortColumn@TITLE
-  </property-specification>
-  <property-specification name="descending" type="boolean" persistent="yes"/>
-
-  <component id="sortTitle" type="ColumnSorter">
-    <binding name="selected" expression="sortColumn"/>
-    <binding name="sortColumn" expression="@org.apache.tapestry.vlib.ejb.SortColumn@TITLE"/>
-    <binding name="descending" expression="descending"/>
-    <binding name="listener" expression="listeners.requery"/>
-  </component>   
-    
-  <component id="sortAuthor" copy-of="sortTitle">
-    <binding name="sortColumn" expression="@org.apache.tapestry.vlib.ejb.SortColumn@AUTHOR"/>
-  </component>
-  
-  <component id="sortPublisher" copy-of="sortTitle">
-    <binding name="sortColumn" expression="@org.apache.tapestry.vlib.ejb.SortColumn@PUBLISHER"/>	
-  </component>
-  
-  <component id="sortBorrower" copy-of="sortTitle">
-    <binding name="sortColumn" expression="@org.apache.tapestry.vlib.ejb.SortColumn@HOLDER"/>
-  </component>
-  
-  <component id="mailLink" type="Any">
-    <binding name="href">
-    	"mailto:" + person.email
-    </binding>
-    <static-binding name="element" value="a"/>
-  </component>
-
-  <component id="holderLink" type="PersonLink">
-    <binding name="id" expression="currentMatch.holderId"/>
-    <binding name="name" expression="currentMatch.holderName"/>
-    <binding name="omit" expression="! currentMatch.borrowed"/>
-  </component>
- 
-</page-specification>
diff --git a/3.0.4/examples/Vlib/context/WEB-INF/vlib.application b/3.0.4/examples/Vlib/context/WEB-INF/vlib.application
deleted file mode 100644
index 92013eb..0000000
--- a/3.0.4/examples/Vlib/context/WEB-INF/vlib.application
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-    Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!--$Id$-->
-<!DOCTYPE application PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<application
-	name="Virtual Library" 
-	engine-class="org.apache.tapestry.vlib.VirtualLibraryEngine">
-   
-  <property name="org.apache.tapestry.visit-class" value="org.apache.tapestry.vlib.Visit"/>
-  <property name="org.apache.tapestry.global-class" value="org.apache.tapestry.vlib.Global"/>
-   
-  <library id="contrib" specification-path="/org/apache/tapestry/contrib/Contrib.library"/>
-  	
-</application>
diff --git a/3.0.4/examples/Vlib/context/WEB-INF/web.xml b/3.0.4/examples/Vlib/context/WEB-INF/web.xml
deleted file mode 100644
index c128047..0000000
--- a/3.0.4/examples/Vlib/context/WEB-INF/web.xml
+++ /dev/null
@@ -1,38 +0,0 @@
-<?xml version="1.0"?>
-<!-- $Id$ -->
-<!DOCTYPE web-app PUBLIC 
-  "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
-  "http://java.sun.com/dtd/web-app_2_3.dtd">
-<web-app>
-  <display-name>Tapestry Virtual Library Demo</display-name>
-  
-  <!--  distributable/ -->
-  
-	<filter>
-		<filter-name>redirect</filter-name>
-		<filter-class>org.apache.tapestry.RedirectFilter</filter-class>
-	</filter>
-	
-	<filter-mapping>
-		<filter-name>redirect</filter-name>
-		<url-pattern>/</url-pattern>
-	</filter-mapping>
-	  
-  <servlet>
-    <servlet-name>vlib</servlet-name>
-    <servlet-class>org.apache.tapestry.ApplicationServlet</servlet-class>
-  	<load-on-startup>0</load-on-startup>
-  </servlet>
-  
-  <!-- The single mapping used for the Virtual Library application -->
-
-  <servlet-mapping>
-    <servlet-name>vlib</servlet-name>
-    <url-pattern>/app</url-pattern>
-  </servlet-mapping>
-  
-  <session-config>
-  	<session-timeout>15</session-timeout>
-  </session-config>
-  
-</web-app>
diff --git a/3.0.4/examples/Vlib/context/css/vlib.css b/3.0.4/examples/Vlib/context/css/vlib.css
deleted file mode 100644
index f0c7140..0000000
--- a/3.0.4/examples/Vlib/context/css/vlib.css
+++ /dev/null
@@ -1,137 +0,0 @@
-/* $Id$*/

-

-BODY, TABLE, TD, P  {

-	font-family : Trebuchet MS, verdana, arial, helvetica, sans-serif;

-}

-

-DIV.error  {

-	font-weight : bold;

-	color : Red;

-	border-color : Red;

-	border-style : solid;

-	padding : 4px;

-	width : 500px;

-	text-align : left;

-	border-width : 2px;

-}

-

-SPAN.invalid-field {

-  color: Red;

-}

-

-INPUT.error {

-  color: White;

-  background-color: Red;

-  font-weight: Bold;

-}

-

-DIV.message  {

-	font-weight : bold;

-	color : Blue;

-	border-width : 1;

-	border-color : Blue;

-	border-style : solid;

-	padding : 4px;

-	width : 500px;

-}

-

-SPAN.message  {

-	font-weight : bold;

-	color : Blue;

-}

-

-SPAN.error  {

-	font-weight : bold;

-	color : Red;

-}

-

-SPAN.directions {

-  font-wieght: bold;

-  color: Blue;

-}

-

-TABLE.form TH

-{

-  text-align: right;

-  font-weight: bold;

-  padding-right: 8px;

-}

-

-

-

-

-TABLE.form TD, TABLE.form TH {

-  border-width: 1px;

-  border-color: #c0c0c0;

-  border-style: none; // Change to solid to debug form layout

-}

-

-SPAN.required-field

-{

-  font-weight: bold;

-  color: Blue;

-}

-

-TABLE.data TD {

-  border-width: 1px;

-  border-color: #c0c0c0;

-  border-style: solid;

-}

-

-TABLE.data TD.icon, TABLE.data TD.checkbox

-{

-  text-align: center;

-}

-

-TABLE.data TD.control

-{

-  border-style: none;

-}

-

-TABLE.data TH

-{

-  font-weight: bold;

-  text-align: center;

-  background-color: Blue;

-  color: White;

-}

-

-TABLE.data TH A

-{

-	color: white;

-}

-

-TABLE.data TH A:hover

-{

-  color: #e6ae19;

-}

-

-

-TABLE.tapestry-palette TH

-{

-  color: white;

-  background-color: Blue;

-  text-align: center;

-  width: 200px;

-  font-size: smaller;

-}

-

-TABLE.tapestry-palette SELECT

-{

-  width: 200px;

-}

-

-TABLE.tapestry-palette TD.controls

-{

-   text-align: center;

-   vertical-align: middle;

-   width: 60px;

-}

-

-TD.browser-summary {

-  text-align: center;

-  background-color: blue;

-  color: white;

-  font-size: 14;

-  font-weight: bold;

-}

diff --git a/3.0.4/examples/Vlib/context/images/.cvsignore b/3.0.4/examples/Vlib/context/images/.cvsignore
deleted file mode 100644
index cdf09e9..0000000
--- a/3.0.4/examples/Vlib/context/images/.cvsignore
+++ /dev/null
@@ -1 +0,0 @@
-*.jbf
diff --git a/3.0.4/examples/Vlib/context/images/add.png b/3.0.4/examples/Vlib/context/images/add.png
deleted file mode 100644
index fb25f25..0000000
--- a/3.0.4/examples/Vlib/context/images/add.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/Vlib/context/images/browser/browser_1x1.png b/3.0.4/examples/Vlib/context/images/browser/browser_1x1.png
deleted file mode 100644
index da66bb4..0000000
--- a/3.0.4/examples/Vlib/context/images/browser/browser_1x1.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/Vlib/context/images/browser/browser_2x1.png b/3.0.4/examples/Vlib/context/images/browser/browser_2x1.png
deleted file mode 100644
index c9fd878..0000000
--- a/3.0.4/examples/Vlib/context/images/browser/browser_2x1.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/Vlib/context/images/browser/browser_2x3.png b/3.0.4/examples/Vlib/context/images/browser/browser_2x3.png
deleted file mode 100644
index 9002065..0000000
--- a/3.0.4/examples/Vlib/context/images/browser/browser_2x3.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/Vlib/context/images/browser/browser_3x1.png b/3.0.4/examples/Vlib/context/images/browser/browser_3x1.png
deleted file mode 100644
index 7c89e9d..0000000
--- a/3.0.4/examples/Vlib/context/images/browser/browser_3x1.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/Vlib/context/images/browser/browser_4x1.png b/3.0.4/examples/Vlib/context/images/browser/browser_4x1.png
deleted file mode 100644
index 0f1cd4c..0000000
--- a/3.0.4/examples/Vlib/context/images/browser/browser_4x1.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/Vlib/context/images/browser/browser_4x2.png b/3.0.4/examples/Vlib/context/images/browser/browser_4x2.png
deleted file mode 100644
index a8bd63d..0000000
--- a/3.0.4/examples/Vlib/context/images/browser/browser_4x2.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/Vlib/context/images/browser/browser_4x3.png b/3.0.4/examples/Vlib/context/images/browser/browser_4x3.png
deleted file mode 100644
index e978c22..0000000
--- a/3.0.4/examples/Vlib/context/images/browser/browser_4x3.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/Vlib/context/images/browser/browser_4x4.png b/3.0.4/examples/Vlib/context/images/browser/browser_4x4.png
deleted file mode 100644
index 3982e5f..0000000
--- a/3.0.4/examples/Vlib/context/images/browser/browser_4x4.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/Vlib/context/images/browser/browser_4x5.png b/3.0.4/examples/Vlib/context/images/browser/browser_4x5.png
deleted file mode 100644
index b40b3b3..0000000
--- a/3.0.4/examples/Vlib/context/images/browser/browser_4x5.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/Vlib/context/images/browser/browser_4x6.png b/3.0.4/examples/Vlib/context/images/browser/browser_4x6.png
deleted file mode 100644
index 893a071..0000000
--- a/3.0.4/examples/Vlib/context/images/browser/browser_4x6.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/Vlib/context/images/browser/browser_4x7.png b/3.0.4/examples/Vlib/context/images/browser/browser_4x7.png
deleted file mode 100644
index 0a60ec7..0000000
--- a/3.0.4/examples/Vlib/context/images/browser/browser_4x7.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/Vlib/context/images/browser/browser_5x1.png b/3.0.4/examples/Vlib/context/images/browser/browser_5x1.png
deleted file mode 100644
index 89a4a6c..0000000
--- a/3.0.4/examples/Vlib/context/images/browser/browser_5x1.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/Vlib/context/images/browser_d/browser_4x2.png b/3.0.4/examples/Vlib/context/images/browser_d/browser_4x2.png
deleted file mode 100644
index a9b76d7..0000000
--- a/3.0.4/examples/Vlib/context/images/browser_d/browser_4x2.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/Vlib/context/images/browser_d/browser_4x3.png b/3.0.4/examples/Vlib/context/images/browser_d/browser_4x3.png
deleted file mode 100644
index be6fb1a..0000000
--- a/3.0.4/examples/Vlib/context/images/browser_d/browser_4x3.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/Vlib/context/images/browser_d/browser_4x5.png b/3.0.4/examples/Vlib/context/images/browser_d/browser_4x5.png
deleted file mode 100644
index 51ce02e..0000000
--- a/3.0.4/examples/Vlib/context/images/browser_d/browser_4x5.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/Vlib/context/images/browser_d/browser_4x6.png b/3.0.4/examples/Vlib/context/images/browser_d/browser_4x6.png
deleted file mode 100644
index 2d60d26..0000000
--- a/3.0.4/examples/Vlib/context/images/browser_d/browser_4x6.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/Vlib/context/images/browser_e/browser_4x2.png b/3.0.4/examples/Vlib/context/images/browser_e/browser_4x2.png
deleted file mode 100644
index a8bd63d..0000000
--- a/3.0.4/examples/Vlib/context/images/browser_e/browser_4x2.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/Vlib/context/images/browser_e/browser_4x3.png b/3.0.4/examples/Vlib/context/images/browser_e/browser_4x3.png
deleted file mode 100644
index e978c22..0000000
--- a/3.0.4/examples/Vlib/context/images/browser_e/browser_4x3.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/Vlib/context/images/browser_e/browser_4x5.png b/3.0.4/examples/Vlib/context/images/browser_e/browser_4x5.png
deleted file mode 100644
index b40b3b3..0000000
--- a/3.0.4/examples/Vlib/context/images/browser_e/browser_4x5.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/Vlib/context/images/browser_e/browser_4x6.png b/3.0.4/examples/Vlib/context/images/browser_e/browser_4x6.png
deleted file mode 100644
index 893a071..0000000
--- a/3.0.4/examples/Vlib/context/images/browser_e/browser_4x6.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/Vlib/context/images/browser_h/browser_4x2.png b/3.0.4/examples/Vlib/context/images/browser_h/browser_4x2.png
deleted file mode 100644
index d7d6c46..0000000
--- a/3.0.4/examples/Vlib/context/images/browser_h/browser_4x2.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/Vlib/context/images/browser_h/browser_4x3.png b/3.0.4/examples/Vlib/context/images/browser_h/browser_4x3.png
deleted file mode 100644
index d0f0419..0000000
--- a/3.0.4/examples/Vlib/context/images/browser_h/browser_4x3.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/Vlib/context/images/browser_h/browser_4x5.png b/3.0.4/examples/Vlib/context/images/browser_h/browser_4x5.png
deleted file mode 100644
index 44f4da2..0000000
--- a/3.0.4/examples/Vlib/context/images/browser_h/browser_4x5.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/Vlib/context/images/browser_h/browser_4x6.png b/3.0.4/examples/Vlib/context/images/browser_h/browser_4x6.png
deleted file mode 100644
index f84e67e..0000000
--- a/3.0.4/examples/Vlib/context/images/browser_h/browser_4x6.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/Vlib/context/images/cancel.png b/3.0.4/examples/Vlib/context/images/cancel.png
deleted file mode 100644
index bbbc5bd..0000000
--- a/3.0.4/examples/Vlib/context/images/cancel.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/Vlib/context/images/checkout.png b/3.0.4/examples/Vlib/context/images/checkout.png
deleted file mode 100644
index 0027fc5..0000000
--- a/3.0.4/examples/Vlib/context/images/checkout.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/Vlib/context/images/checkout_h.png b/3.0.4/examples/Vlib/context/images/checkout_h.png
deleted file mode 100644
index 5373e9e..0000000
--- a/3.0.4/examples/Vlib/context/images/checkout_h.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/Vlib/context/images/continue.png b/3.0.4/examples/Vlib/context/images/continue.png
deleted file mode 100644
index a6be497..0000000
--- a/3.0.4/examples/Vlib/context/images/continue.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/Vlib/context/images/delete-cancel.png b/3.0.4/examples/Vlib/context/images/delete-cancel.png
deleted file mode 100644
index ee75313..0000000
--- a/3.0.4/examples/Vlib/context/images/delete-cancel.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/Vlib/context/images/delete-cancel_h.png b/3.0.4/examples/Vlib/context/images/delete-cancel_h.png
deleted file mode 100644
index 703ef2f..0000000
--- a/3.0.4/examples/Vlib/context/images/delete-cancel_h.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/Vlib/context/images/delete-confirm.png b/3.0.4/examples/Vlib/context/images/delete-confirm.png
deleted file mode 100644
index 5d39c49..0000000
--- a/3.0.4/examples/Vlib/context/images/delete-confirm.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/Vlib/context/images/delete-confirm_h.png b/3.0.4/examples/Vlib/context/images/delete-confirm_h.png
deleted file mode 100644
index ed620e0..0000000
--- a/3.0.4/examples/Vlib/context/images/delete-confirm_h.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/Vlib/context/images/delete.png b/3.0.4/examples/Vlib/context/images/delete.png
deleted file mode 100644
index 3403220..0000000
--- a/3.0.4/examples/Vlib/context/images/delete.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/Vlib/context/images/delete_h.png b/3.0.4/examples/Vlib/context/images/delete_h.png
deleted file mode 100644
index 9a1e22d..0000000
--- a/3.0.4/examples/Vlib/context/images/delete_h.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/Vlib/context/images/edit.png b/3.0.4/examples/Vlib/context/images/edit.png
deleted file mode 100644
index fedd0cf..0000000
--- a/3.0.4/examples/Vlib/context/images/edit.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/Vlib/context/images/edit_h.png b/3.0.4/examples/Vlib/context/images/edit_h.png
deleted file mode 100644
index a3ff752..0000000
--- a/3.0.4/examples/Vlib/context/images/edit_h.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/Vlib/context/images/error-icon.png b/3.0.4/examples/Vlib/context/images/error-icon.png
deleted file mode 100644
index 401ea31..0000000
--- a/3.0.4/examples/Vlib/context/images/error-icon.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/Vlib/context/images/info-icon.png b/3.0.4/examples/Vlib/context/images/info-icon.png
deleted file mode 100644
index 8751ac9..0000000
--- a/3.0.4/examples/Vlib/context/images/info-icon.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/Vlib/context/images/login.png b/3.0.4/examples/Vlib/context/images/login.png
deleted file mode 100644
index f8d88d1..0000000
--- a/3.0.4/examples/Vlib/context/images/login.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/Vlib/context/images/nav-h/nav_10x1.png b/3.0.4/examples/Vlib/context/images/nav-h/nav_10x1.png
deleted file mode 100644
index 40ec645..0000000
--- a/3.0.4/examples/Vlib/context/images/nav-h/nav_10x1.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/Vlib/context/images/nav-h/nav_10x1_login.png b/3.0.4/examples/Vlib/context/images/nav-h/nav_10x1_login.png
deleted file mode 100644
index 02ed162..0000000
--- a/3.0.4/examples/Vlib/context/images/nav-h/nav_10x1_login.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/Vlib/context/images/nav-h/nav_1x1.png b/3.0.4/examples/Vlib/context/images/nav-h/nav_1x1.png
deleted file mode 100644
index f4ddca1..0000000
--- a/3.0.4/examples/Vlib/context/images/nav-h/nav_1x1.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/Vlib/context/images/nav-h/nav_2x1.png b/3.0.4/examples/Vlib/context/images/nav-h/nav_2x1.png
deleted file mode 100644
index 27d2c83..0000000
--- a/3.0.4/examples/Vlib/context/images/nav-h/nav_2x1.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/Vlib/context/images/nav-h/nav_3x1.png b/3.0.4/examples/Vlib/context/images/nav-h/nav_3x1.png
deleted file mode 100644
index 2f79926..0000000
--- a/3.0.4/examples/Vlib/context/images/nav-h/nav_3x1.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/Vlib/context/images/nav-h/nav_4x1.png b/3.0.4/examples/Vlib/context/images/nav-h/nav_4x1.png
deleted file mode 100644
index 1539952..0000000
--- a/3.0.4/examples/Vlib/context/images/nav-h/nav_4x1.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/Vlib/context/images/nav-h/nav_5x1.png b/3.0.4/examples/Vlib/context/images/nav-h/nav_5x1.png
deleted file mode 100644
index f30b093..0000000
--- a/3.0.4/examples/Vlib/context/images/nav-h/nav_5x1.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/Vlib/context/images/nav-h/nav_5x1_editprofile.png b/3.0.4/examples/Vlib/context/images/nav-h/nav_5x1_editprofile.png
deleted file mode 100644
index 85ba4d7..0000000
--- a/3.0.4/examples/Vlib/context/images/nav-h/nav_5x1_editprofile.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/Vlib/context/images/nav-h/nav_7x1.png b/3.0.4/examples/Vlib/context/images/nav-h/nav_7x1.png
deleted file mode 100644
index 9e7d568..0000000
--- a/3.0.4/examples/Vlib/context/images/nav-h/nav_7x1.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/Vlib/context/images/nav-h/nav_8x1.png b/3.0.4/examples/Vlib/context/images/nav-h/nav_8x1.png
deleted file mode 100644
index ea021a6..0000000
--- a/3.0.4/examples/Vlib/context/images/nav-h/nav_8x1.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/Vlib/context/images/nav-h/nav_9x1.png b/3.0.4/examples/Vlib/context/images/nav-h/nav_9x1.png
deleted file mode 100644
index 21cdbc7..0000000
--- a/3.0.4/examples/Vlib/context/images/nav-h/nav_9x1.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/Vlib/context/images/nav-selected-h/nav_10x1_login.png b/3.0.4/examples/Vlib/context/images/nav-selected-h/nav_10x1_login.png
deleted file mode 100644
index 4cf5138..0000000
--- a/3.0.4/examples/Vlib/context/images/nav-selected-h/nav_10x1_login.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/Vlib/context/images/nav-selected-h/nav_1x1.png b/3.0.4/examples/Vlib/context/images/nav-selected-h/nav_1x1.png
deleted file mode 100644
index c618b38..0000000
--- a/3.0.4/examples/Vlib/context/images/nav-selected-h/nav_1x1.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/Vlib/context/images/nav-selected-h/nav_2x1.png b/3.0.4/examples/Vlib/context/images/nav-selected-h/nav_2x1.png
deleted file mode 100644
index 9fe4b0e..0000000
--- a/3.0.4/examples/Vlib/context/images/nav-selected-h/nav_2x1.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/Vlib/context/images/nav-selected-h/nav_3x1.png b/3.0.4/examples/Vlib/context/images/nav-selected-h/nav_3x1.png
deleted file mode 100644
index 510c8ce..0000000
--- a/3.0.4/examples/Vlib/context/images/nav-selected-h/nav_3x1.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/Vlib/context/images/nav-selected-h/nav_4x1.png b/3.0.4/examples/Vlib/context/images/nav-selected-h/nav_4x1.png
deleted file mode 100644
index 67e931b..0000000
--- a/3.0.4/examples/Vlib/context/images/nav-selected-h/nav_4x1.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/Vlib/context/images/nav-selected-h/nav_5x1.png b/3.0.4/examples/Vlib/context/images/nav-selected-h/nav_5x1.png
deleted file mode 100644
index bc700ed..0000000
--- a/3.0.4/examples/Vlib/context/images/nav-selected-h/nav_5x1.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/Vlib/context/images/nav-selected-h/nav_5x1_editprofile.png b/3.0.4/examples/Vlib/context/images/nav-selected-h/nav_5x1_editprofile.png
deleted file mode 100644
index 0f19fb6..0000000
--- a/3.0.4/examples/Vlib/context/images/nav-selected-h/nav_5x1_editprofile.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/Vlib/context/images/nav-selected-h/nav_7x1.png b/3.0.4/examples/Vlib/context/images/nav-selected-h/nav_7x1.png
deleted file mode 100644
index 5a6c9fe..0000000
--- a/3.0.4/examples/Vlib/context/images/nav-selected-h/nav_7x1.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/Vlib/context/images/nav-selected-h/nav_8x1.png b/3.0.4/examples/Vlib/context/images/nav-selected-h/nav_8x1.png
deleted file mode 100644
index 2babeac..0000000
--- a/3.0.4/examples/Vlib/context/images/nav-selected-h/nav_8x1.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/Vlib/context/images/nav-selected-h/nav_9x1.png b/3.0.4/examples/Vlib/context/images/nav-selected-h/nav_9x1.png
deleted file mode 100644
index 90a3d07..0000000
--- a/3.0.4/examples/Vlib/context/images/nav-selected-h/nav_9x1.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/Vlib/context/images/nav-selected/nav_10x1_login.png b/3.0.4/examples/Vlib/context/images/nav-selected/nav_10x1_login.png
deleted file mode 100644
index d9ac5a3..0000000
--- a/3.0.4/examples/Vlib/context/images/nav-selected/nav_10x1_login.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/Vlib/context/images/nav-selected/nav_1x1.png b/3.0.4/examples/Vlib/context/images/nav-selected/nav_1x1.png
deleted file mode 100644
index b9e4b22..0000000
--- a/3.0.4/examples/Vlib/context/images/nav-selected/nav_1x1.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/Vlib/context/images/nav-selected/nav_2x1.png b/3.0.4/examples/Vlib/context/images/nav-selected/nav_2x1.png
deleted file mode 100644
index d363f31..0000000
--- a/3.0.4/examples/Vlib/context/images/nav-selected/nav_2x1.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/Vlib/context/images/nav-selected/nav_3x1.png b/3.0.4/examples/Vlib/context/images/nav-selected/nav_3x1.png
deleted file mode 100644
index 23eb04d..0000000
--- a/3.0.4/examples/Vlib/context/images/nav-selected/nav_3x1.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/Vlib/context/images/nav-selected/nav_4x1.png b/3.0.4/examples/Vlib/context/images/nav-selected/nav_4x1.png
deleted file mode 100644
index 6336d82..0000000
--- a/3.0.4/examples/Vlib/context/images/nav-selected/nav_4x1.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/Vlib/context/images/nav-selected/nav_5x1.png b/3.0.4/examples/Vlib/context/images/nav-selected/nav_5x1.png
deleted file mode 100644
index f6c47b4..0000000
--- a/3.0.4/examples/Vlib/context/images/nav-selected/nav_5x1.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/Vlib/context/images/nav-selected/nav_5x1_editprofile.png b/3.0.4/examples/Vlib/context/images/nav-selected/nav_5x1_editprofile.png
deleted file mode 100644
index e6f813d..0000000
--- a/3.0.4/examples/Vlib/context/images/nav-selected/nav_5x1_editprofile.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/Vlib/context/images/nav-selected/nav_7x1.png b/3.0.4/examples/Vlib/context/images/nav-selected/nav_7x1.png
deleted file mode 100644
index dec930f..0000000
--- a/3.0.4/examples/Vlib/context/images/nav-selected/nav_7x1.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/Vlib/context/images/nav-selected/nav_8x1.png b/3.0.4/examples/Vlib/context/images/nav-selected/nav_8x1.png
deleted file mode 100644
index c03a1c9..0000000
--- a/3.0.4/examples/Vlib/context/images/nav-selected/nav_8x1.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/Vlib/context/images/nav-selected/nav_9x1.png b/3.0.4/examples/Vlib/context/images/nav-selected/nav_9x1.png
deleted file mode 100644
index 32e3fc4..0000000
--- a/3.0.4/examples/Vlib/context/images/nav-selected/nav_9x1.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/Vlib/context/images/nav/nav_10x1.png b/3.0.4/examples/Vlib/context/images/nav/nav_10x1.png
deleted file mode 100644
index be65286..0000000
--- a/3.0.4/examples/Vlib/context/images/nav/nav_10x1.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/Vlib/context/images/nav/nav_10x1_login.png b/3.0.4/examples/Vlib/context/images/nav/nav_10x1_login.png
deleted file mode 100644
index 0da9d26..0000000
--- a/3.0.4/examples/Vlib/context/images/nav/nav_10x1_login.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/Vlib/context/images/nav/nav_1x1.png b/3.0.4/examples/Vlib/context/images/nav/nav_1x1.png
deleted file mode 100644
index 0efc990..0000000
--- a/3.0.4/examples/Vlib/context/images/nav/nav_1x1.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/Vlib/context/images/nav/nav_2x1.png b/3.0.4/examples/Vlib/context/images/nav/nav_2x1.png
deleted file mode 100644
index aa15f24..0000000
--- a/3.0.4/examples/Vlib/context/images/nav/nav_2x1.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/Vlib/context/images/nav/nav_3x1.png b/3.0.4/examples/Vlib/context/images/nav/nav_3x1.png
deleted file mode 100644
index a3b9cb2..0000000
--- a/3.0.4/examples/Vlib/context/images/nav/nav_3x1.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/Vlib/context/images/nav/nav_4x1.png b/3.0.4/examples/Vlib/context/images/nav/nav_4x1.png
deleted file mode 100644
index 3028a91..0000000
--- a/3.0.4/examples/Vlib/context/images/nav/nav_4x1.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/Vlib/context/images/nav/nav_5x1.png b/3.0.4/examples/Vlib/context/images/nav/nav_5x1.png
deleted file mode 100644
index 6dacb81..0000000
--- a/3.0.4/examples/Vlib/context/images/nav/nav_5x1.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/Vlib/context/images/nav/nav_5x1_editprofile.png b/3.0.4/examples/Vlib/context/images/nav/nav_5x1_editprofile.png
deleted file mode 100644
index eae5154..0000000
--- a/3.0.4/examples/Vlib/context/images/nav/nav_5x1_editprofile.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/Vlib/context/images/nav/nav_6x1.png b/3.0.4/examples/Vlib/context/images/nav/nav_6x1.png
deleted file mode 100644
index a17c24d..0000000
--- a/3.0.4/examples/Vlib/context/images/nav/nav_6x1.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/Vlib/context/images/nav/nav_7x1.png b/3.0.4/examples/Vlib/context/images/nav/nav_7x1.png
deleted file mode 100644
index b674783..0000000
--- a/3.0.4/examples/Vlib/context/images/nav/nav_7x1.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/Vlib/context/images/nav/nav_8x1.png b/3.0.4/examples/Vlib/context/images/nav/nav_8x1.png
deleted file mode 100644
index 89288e3..0000000
--- a/3.0.4/examples/Vlib/context/images/nav/nav_8x1.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/Vlib/context/images/nav/nav_9x1.png b/3.0.4/examples/Vlib/context/images/nav/nav_9x1.png
deleted file mode 100644
index 041a71b..0000000
--- a/3.0.4/examples/Vlib/context/images/nav/nav_9x1.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/Vlib/context/images/new.png b/3.0.4/examples/Vlib/context/images/new.png
deleted file mode 100644
index 04e0f4d..0000000
--- a/3.0.4/examples/Vlib/context/images/new.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/Vlib/context/images/question-icon.png b/3.0.4/examples/Vlib/context/images/question-icon.png
deleted file mode 100644
index 47f8994..0000000
--- a/3.0.4/examples/Vlib/context/images/question-icon.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/Vlib/context/images/register.png b/3.0.4/examples/Vlib/context/images/register.png
deleted file mode 100644
index f125c15..0000000
--- a/3.0.4/examples/Vlib/context/images/register.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/Vlib/context/images/return.png b/3.0.4/examples/Vlib/context/images/return.png
deleted file mode 100644
index b39a19e..0000000
--- a/3.0.4/examples/Vlib/context/images/return.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/Vlib/context/images/return_h.png b/3.0.4/examples/Vlib/context/images/return_h.png
deleted file mode 100644
index 7aace19..0000000
--- a/3.0.4/examples/Vlib/context/images/return_h.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/Vlib/context/images/search.png b/3.0.4/examples/Vlib/context/images/search.png
deleted file mode 100644
index 7017290..0000000
--- a/3.0.4/examples/Vlib/context/images/search.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/Vlib/context/images/sort-down.png b/3.0.4/examples/Vlib/context/images/sort-down.png
deleted file mode 100644
index 24edefd..0000000
--- a/3.0.4/examples/Vlib/context/images/sort-down.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/Vlib/context/images/sort-down_h.png b/3.0.4/examples/Vlib/context/images/sort-down_h.png
deleted file mode 100644
index 961d109..0000000
--- a/3.0.4/examples/Vlib/context/images/sort-down_h.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/Vlib/context/images/sort-up.png b/3.0.4/examples/Vlib/context/images/sort-up.png
deleted file mode 100644
index 202b8a8..0000000
--- a/3.0.4/examples/Vlib/context/images/sort-up.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/Vlib/context/images/sort-up_h.png b/3.0.4/examples/Vlib/context/images/sort-up_h.png
deleted file mode 100644
index 81e25ba..0000000
--- a/3.0.4/examples/Vlib/context/images/sort-up_h.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/Vlib/context/images/spacer.png b/3.0.4/examples/Vlib/context/images/spacer.png
deleted file mode 100644
index b58f8a1..0000000
--- a/3.0.4/examples/Vlib/context/images/spacer.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/Vlib/context/images/step1.png b/3.0.4/examples/Vlib/context/images/step1.png
deleted file mode 100644
index c51cae7..0000000
--- a/3.0.4/examples/Vlib/context/images/step1.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/Vlib/context/images/step2.png b/3.0.4/examples/Vlib/context/images/step2.png
deleted file mode 100644
index 749b394..0000000
--- a/3.0.4/examples/Vlib/context/images/step2.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/Vlib/context/images/title/AddNewBook.png b/3.0.4/examples/Vlib/context/images/title/AddNewBook.png
deleted file mode 100644
index 76fcf4d..0000000
--- a/3.0.4/examples/Vlib/context/images/title/AddNewBook.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/Vlib/context/images/title/BookMatches.png b/3.0.4/examples/Vlib/context/images/title/BookMatches.png
deleted file mode 100644
index 08bdbb3..0000000
--- a/3.0.4/examples/Vlib/context/images/title/BookMatches.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/Vlib/context/images/title/BorrowedBooks.png b/3.0.4/examples/Vlib/context/images/title/BorrowedBooks.png
deleted file mode 100644
index 4207dd3..0000000
--- a/3.0.4/examples/Vlib/context/images/title/BorrowedBooks.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/Vlib/context/images/title/DeleteBook.png b/3.0.4/examples/Vlib/context/images/title/DeleteBook.png
deleted file mode 100644
index 102f4fa..0000000
--- a/3.0.4/examples/Vlib/context/images/title/DeleteBook.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/Vlib/context/images/title/EditBook.png b/3.0.4/examples/Vlib/context/images/title/EditBook.png
deleted file mode 100644
index c06c1c0..0000000
--- a/3.0.4/examples/Vlib/context/images/title/EditBook.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/Vlib/context/images/title/EditProfile.png b/3.0.4/examples/Vlib/context/images/title/EditProfile.png
deleted file mode 100644
index 3f345af..0000000
--- a/3.0.4/examples/Vlib/context/images/title/EditProfile.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/Vlib/context/images/title/EditPublishers.png b/3.0.4/examples/Vlib/context/images/title/EditPublishers.png
deleted file mode 100644
index 57e6d3e..0000000
--- a/3.0.4/examples/Vlib/context/images/title/EditPublishers.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/Vlib/context/images/title/EditUsers.png b/3.0.4/examples/Vlib/context/images/title/EditUsers.png
deleted file mode 100644
index 1d0bc17..0000000
--- a/3.0.4/examples/Vlib/context/images/title/EditUsers.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/Vlib/context/images/title/GiveAwayBooks.png b/3.0.4/examples/Vlib/context/images/title/GiveAwayBooks.png
deleted file mode 100644
index 1ec2494..0000000
--- a/3.0.4/examples/Vlib/context/images/title/GiveAwayBooks.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/Vlib/context/images/title/Login.png b/3.0.4/examples/Vlib/context/images/title/Login.png
deleted file mode 100644
index f68460b..0000000
--- a/3.0.4/examples/Vlib/context/images/title/Login.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/Vlib/context/images/title/MyLibrary.png b/3.0.4/examples/Vlib/context/images/title/MyLibrary.png
deleted file mode 100644
index 751ad45..0000000
--- a/3.0.4/examples/Vlib/context/images/title/MyLibrary.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/Vlib/context/images/title/Register.png b/3.0.4/examples/Vlib/context/images/title/Register.png
deleted file mode 100644
index 1d82def..0000000
--- a/3.0.4/examples/Vlib/context/images/title/Register.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/Vlib/context/images/title/Search.png b/3.0.4/examples/Vlib/context/images/title/Search.png
deleted file mode 100644
index d8a1957..0000000
--- a/3.0.4/examples/Vlib/context/images/title/Search.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/Vlib/context/images/title/TransferBooks.png b/3.0.4/examples/Vlib/context/images/title/TransferBooks.png
deleted file mode 100644
index 70df52f..0000000
--- a/3.0.4/examples/Vlib/context/images/title/TransferBooks.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/Vlib/context/images/title/ViewBook.png b/3.0.4/examples/Vlib/context/images/title/ViewBook.png
deleted file mode 100644
index 7c3ea31..0000000
--- a/3.0.4/examples/Vlib/context/images/title/ViewBook.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/Vlib/context/images/title/ViewPerson.png b/3.0.4/examples/Vlib/context/images/title/ViewPerson.png
deleted file mode 100644
index af943f4..0000000
--- a/3.0.4/examples/Vlib/context/images/title/ViewPerson.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/Vlib/context/images/title/blank.png b/3.0.4/examples/Vlib/context/images/title/blank.png
deleted file mode 100644
index 6199e23..0000000
--- a/3.0.4/examples/Vlib/context/images/title/blank.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/Vlib/context/images/title/title_1x1.png b/3.0.4/examples/Vlib/context/images/title/title_1x1.png
deleted file mode 100644
index 885b929..0000000
--- a/3.0.4/examples/Vlib/context/images/title/title_1x1.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/Vlib/context/images/title/title_2x1.png b/3.0.4/examples/Vlib/context/images/title/title_2x1.png
deleted file mode 100644
index c5b4637..0000000
--- a/3.0.4/examples/Vlib/context/images/title/title_2x1.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/Vlib/context/images/title/title_2x3.png b/3.0.4/examples/Vlib/context/images/title/title_2x3.png
deleted file mode 100644
index e97e51d..0000000
--- a/3.0.4/examples/Vlib/context/images/title/title_2x3.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/Vlib/context/images/title/title_3x1.png b/3.0.4/examples/Vlib/context/images/title/title_3x1.png
deleted file mode 100644
index 0285430..0000000
--- a/3.0.4/examples/Vlib/context/images/title/title_3x1.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/Vlib/context/images/transfer.png b/3.0.4/examples/Vlib/context/images/transfer.png
deleted file mode 100644
index 8d777d4..0000000
--- a/3.0.4/examples/Vlib/context/images/transfer.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/Vlib/context/images/update.png b/3.0.4/examples/Vlib/context/images/update.png
deleted file mode 100644
index 5153e10..0000000
--- a/3.0.4/examples/Vlib/context/images/update.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/Vlib/jetty.xml b/3.0.4/examples/Vlib/jetty.xml
deleted file mode 100644
index 2742fbf..0000000
--- a/3.0.4/examples/Vlib/jetty.xml
+++ /dev/null
@@ -1,54 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!-- $Id$ -->
-<!DOCTYPE Configure PUBLIC
-	"-//Mort Bay Consulting//DTD Configure 1.2//EN"
-	"http://jetty.mortbay.org/configure_1_2.dtd">
-
-<Configure class="org.mortbay.jetty.Server">
-
-  <Call name="addListener">
-    <Arg>
-      <New class="org.mortbay.http.SocketListener">
-        <Set name="Port">8080</Set>
-        <Set name="MinThreads">1</Set>
-        <Set name="MaxThreads">10</Set>
-        <Set name="MaxIdleTimeMs">50000</Set>
-      </New>
-    </Arg>
-  </Call>
-  	
-  <Call name="addWebApplication">
-    <Arg>/vlib</Arg>
-    <Arg>context</Arg>
-    <Set name="DefaultsDescriptor">../../config/webdefault.xml</Set>
-  </Call>
-	
-  <Call name="addContext">
-    <Arg>/private/*</Arg>
-    <Set name="ResourceBase">private</Set>
-    
-    <Call name="addHandler">
-      <Arg><New class="org.mortbay.http.handler.ResourceHandler"/></Arg>
-    </Call>
-    
-    <Call name="addHandler">
-    	<Arg><New class="org.mortbay.http.handler.NotFoundHandler"/></Arg>
-    </Call>
-  </Call>
-  
-  <Call name="addContext">
-    <Arg>/</Arg>   
-    <Set name="realmName">Jetty Demo Realm</Set>
-   
-    <Call name="addServlet">
-      <Arg>Admin</Arg>
-      <Arg>/</Arg>
-      <Arg>org.mortbay.servlet.AdminServlet</Arg>
-    </Call>
-    
-    <Call name="setAttribute">
-      <Arg>org.mortbay.http.HttpServer</Arg>
-      <Arg><Call name="getHttpServer"/></Arg>
-    </Call>
-  </Call>    
-</Configure>
diff --git a/3.0.4/examples/Vlib/src/org/apache/tapestry/vlib/ActivateCallback.java b/3.0.4/examples/Vlib/src/org/apache/tapestry/vlib/ActivateCallback.java
deleted file mode 100644
index 4615a44..0000000
--- a/3.0.4/examples/Vlib/src/org/apache/tapestry/vlib/ActivateCallback.java
+++ /dev/null
@@ -1,52 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.vlib;
-
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.callback.ICallback;
-
-/**
- *  Callback implementation for pages which implement
- *  the {@link org.apache.tapestry.vlib.IActivate}
- *  interface.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 3.0
- *
- **/
-
-public class ActivateCallback implements ICallback
-{
-    private String _pageName;
-
-    public ActivateCallback(IActivate page)
-    {
-        this(page.getPageName());
-    }
-
-    public ActivateCallback(String pageName)
-    {
-        _pageName = pageName;
-    }
-
-    public void performCallback(IRequestCycle cycle)
-    {
-        IActivate page = (IActivate) cycle.getPage(_pageName);
-
-		page.validate(cycle);
-        page.activate(cycle);
-    }
-}
\ No newline at end of file
diff --git a/3.0.4/examples/Vlib/src/org/apache/tapestry/vlib/ActivatePage.java b/3.0.4/examples/Vlib/src/org/apache/tapestry/vlib/ActivatePage.java
deleted file mode 100644
index c5c679b..0000000
--- a/3.0.4/examples/Vlib/src/org/apache/tapestry/vlib/ActivatePage.java
+++ /dev/null
@@ -1,50 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.vlib;
-
-import org.apache.tapestry.PageRedirectException;
-import org.apache.tapestry.event.PageEvent;
-import org.apache.tapestry.event.PageValidateListener;
-import org.apache.tapestry.vlib.pages.Login;
-
-/**
- *  Subclass of {@link org.apache.tapestry.vlib.Protected} that
- *  implements {@link org.apache.tapestry.vlib.IActivate}.  Overrides
- *  {@link #validate(org.apache.tapestry.IRequestCycle)}.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 3.0
- *
- **/
-
-public abstract class ActivatePage extends Protected implements IActivate, PageValidateListener
-{
-    public void pageValidate(PageEvent event)
-    {
-        Visit visit = (Visit) getVisit();
-
-        if (visit != null && visit.isUserLoggedIn())
-            return;
-
-        // User not logged in ... redirect through the Login page.
-
-        Login login = (Login) getRequestCycle().getPage("Login");
-
-        login.setCallback(new ActivateCallback(this));
-
-        throw new PageRedirectException(login);
-    }
-}
diff --git a/3.0.4/examples/Vlib/src/org/apache/tapestry/vlib/AdminPage.java b/3.0.4/examples/Vlib/src/org/apache/tapestry/vlib/AdminPage.java
deleted file mode 100644
index 923b621..0000000
--- a/3.0.4/examples/Vlib/src/org/apache/tapestry/vlib/AdminPage.java
+++ /dev/null
@@ -1,57 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.vlib;
-
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.PageRedirectException;
-import org.apache.tapestry.callback.PageCallback;
-import org.apache.tapestry.event.PageEvent;
-import org.apache.tapestry.vlib.pages.Login;
-
-/**
- *  Base page for any pages restricted to administrators.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- * 
- **/
-
-public abstract class AdminPage extends Protected implements IMessageProperty
-{
-
-    public void pageValidate(PageEvent event)
-    {
-        IRequestCycle cycle = event.getRequestCycle();
-        Visit visit = (Visit) getEngine().getVisit();
-
-        if (visit == null || !visit.isUserLoggedIn())
-        {
-            Login login = (Login) cycle.getPage("Login");
-
-            login.setCallback(new PageCallback(this));
-
-            throw new PageRedirectException(login);
-        }
-
-        if (!visit.getUser(cycle).isAdmin())
-        {
-            VirtualLibraryEngine vengine = (VirtualLibraryEngine) getEngine();
-
-            vengine.presentError("That function is restricted to adminstrators.", cycle);
-
-            throw new PageRedirectException(cycle.getPage());
-        }
-    }
-}
\ No newline at end of file
diff --git a/3.0.4/examples/Vlib/src/org/apache/tapestry/vlib/EntitySelectionModel.java b/3.0.4/examples/Vlib/src/org/apache/tapestry/vlib/EntitySelectionModel.java
deleted file mode 100644
index fccca70..0000000
--- a/3.0.4/examples/Vlib/src/org/apache/tapestry/vlib/EntitySelectionModel.java
+++ /dev/null
@@ -1,106 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.vlib;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.apache.tapestry.ApplicationRuntimeException;
-import org.apache.tapestry.form.IPropertySelectionModel;
-
-/**
- *  This class is used as a property selection model to select a primary key.
- *  We assume that the primary keys are integers, which makes it easy to
- *  translate between the various representations.
- *
- *  @version $Id$
- *  @author Howard Lewis Ship
- *
- **/
-
-public class EntitySelectionModel implements IPropertySelectionModel
-{
-    private static class Entry
-    {
-        Integer primaryKey;
-        String label;
-
-        Entry(Integer primaryKey, String label)
-        {
-            this.primaryKey = primaryKey;
-            this.label = label;
-        }
-
-    }
-
-    private static final int LIST_SIZE = 20;
-
-    private List entries = new ArrayList(LIST_SIZE);
-
-    public void add(Integer key, String label)
-    {
-        Entry entry;
-
-        entry = new Entry(key, label);
-        entries.add(entry);
-    }
-
-    public int getOptionCount()
-    {
-        return entries.size();
-    }
-
-    private Entry get(int index)
-    {
-        return (Entry) entries.get(index);
-    }
-
-    public Object getOption(int index)
-    {
-        return get(index).primaryKey;
-    }
-
-    public String getLabel(int index)
-    {
-        return get(index).label;
-    }
-
-    public String getValue(int index)
-    {
-        Integer primaryKey;
-
-        primaryKey = get(index).primaryKey;
-
-        if (primaryKey == null)
-            return "";
-
-        return primaryKey.toString();
-    }
-
-    public Object translateValue(String value)
-    {
-        if (value.equals(""))
-            return null;
-
-        try
-        {
-            return new Integer(value);
-        }
-        catch (NumberFormatException e)
-        {
-            throw new ApplicationRuntimeException("Could not convert '" + value + "' to an Integer.", e);
-        }
-    }
-}
\ No newline at end of file
diff --git a/3.0.4/examples/Vlib/src/org/apache/tapestry/vlib/Global.java b/3.0.4/examples/Vlib/src/org/apache/tapestry/vlib/Global.java
deleted file mode 100644
index a1f0f85..0000000
--- a/3.0.4/examples/Vlib/src/org/apache/tapestry/vlib/Global.java
+++ /dev/null
@@ -1,169 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.vlib;
-
-import javax.naming.Context;
-import javax.naming.InitialContext;
-import javax.naming.NamingException;
-import javax.rmi.PortableRemoteObject;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.tapestry.ApplicationRuntimeException;
-import org.apache.tapestry.vlib.ejb.IBookQueryHome;
-import org.apache.tapestry.vlib.ejb.IOperationsHome;
-
-/**
- *  The Global object is shared by all instances of the engine. It is used
- *  to centralize all JNDI lookups.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 3.0
- *
- **/
-
-public class Global
-{
-    private static final Log LOG = LogFactory.getLog(Global.class);
-
-    // Home interfaces are static, such that they are only
-    // looked up once (JNDI lookup is very expensive).
-
-    private IBookQueryHome _bookQueryHome;
-    private IOperationsHome _operationsHome;
-
-    private Context _rootNamingContext;
-
-    public synchronized IBookQueryHome getBookQueryHome()
-    {
-        if (_bookQueryHome == null)
-            _bookQueryHome =
-                (IBookQueryHome) findNamedObject("vlib/BookQuery", IBookQueryHome.class);
-
-        return _bookQueryHome;
-    }
-
-    public synchronized IOperationsHome getOperationsHome()
-    {
-        if (_operationsHome == null)
-            _operationsHome =
-                (IOperationsHome) findNamedObject("vlib/Operations", IOperationsHome.class);
-
-        return _operationsHome;
-    }
-
-    public synchronized Object findNamedObject(String name, Class expectedClass)
-    {
-        Object result = null;
-
-        int i = 0;
-        while (true)
-        {
-            try
-            {
-                Object raw = getRootNamingContext().lookup(name);
-
-                if (raw == null)
-                {
-                    String message =
-                        "JNDI lookup of "
-                            + name
-                            + " yielded null; expected instance of "
-                            + expectedClass.getName()
-                            + ".";
-
-                    LOG.error(message);
-
-                    if (i++ == 0)
-                    {
-                        clear();
-                        continue;
-                    }
-
-                    throw new ApplicationRuntimeException(message);
-                }
-
-                result = PortableRemoteObject.narrow(raw, expectedClass);
-
-                break;
-            }
-            catch (ClassCastException ex)
-            {
-                throw new ApplicationRuntimeException(
-                    "Object " + name + " is not type " + expectedClass.getName() + ".",
-                    ex);
-            }
-            catch (NamingException ex)
-            {
-                String message = "Unable to resolve object " + name + ".";
-
-                if (i++ == 0)
-                {
-                    LOG.error(message, ex);
-                    clear();
-                }
-                else
-                    throw new ApplicationRuntimeException(message, ex);
-            }
-        }
-
-        return result;
-    }
-
-    public synchronized Context getRootNamingContext()
-    {
-        if (_rootNamingContext == null)
-        {
-            int i = 0;
-            while (true)
-            {
-                try
-                {
-                    _rootNamingContext = new InitialContext();
-
-                    break;
-                }
-                catch (NamingException ex)
-                {
-                    String message = "Unable to locate root naming context.";
-
-                    if (i++ == 0)
-                    {
-                        LOG.error(message, ex);
-                        clear();
-                    }
-                    else
-                        throw new ApplicationRuntimeException(message, ex);
-                }
-            }
-        }
-
-        return _rootNamingContext;
-    }
-
-    /**
-     *  Invoked after any kind of naming or remote exception.  Cached
-     *  naming contexts and interfaces are discarded.
-     *  
-     **/
-
-    public synchronized void clear()
-    {
-        _rootNamingContext = null;
-        _bookQueryHome = null;
-        _operationsHome = null;
-    }
-}
diff --git a/3.0.4/examples/Vlib/src/org/apache/tapestry/vlib/IActivate.java b/3.0.4/examples/Vlib/src/org/apache/tapestry/vlib/IActivate.java
deleted file mode 100644
index 54a6924..0000000
--- a/3.0.4/examples/Vlib/src/org/apache/tapestry/vlib/IActivate.java
+++ /dev/null
@@ -1,32 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.vlib;
-
-import org.apache.tapestry.IPage;
-import org.apache.tapestry.IRequestCycle;
-
-/**
- *  Interface used for pages that may be activated by the Border component.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 3.0
- *
- **/
-
-public interface IActivate extends IPage
-{
-	public void activate(IRequestCycle cycle);
-}
diff --git a/3.0.4/examples/Vlib/src/org/apache/tapestry/vlib/IErrorProperty.java b/3.0.4/examples/Vlib/src/org/apache/tapestry/vlib/IErrorProperty.java
deleted file mode 100644
index dc8d70f..0000000
--- a/3.0.4/examples/Vlib/src/org/apache/tapestry/vlib/IErrorProperty.java
+++ /dev/null
@@ -1,34 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.vlib;
-
-import org.apache.tapestry.IPage;
-
-/**
- *  Marks pages that have an error property (of type String).
- *
- *  @see VirtualLibraryDelegate
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- * 
- **/
-
-public interface IErrorProperty extends IPage
-{
-    public String getError();
-
-    public void setError(String value);
-}
\ No newline at end of file
diff --git a/3.0.4/examples/Vlib/src/org/apache/tapestry/vlib/IMessageProperty.java b/3.0.4/examples/Vlib/src/org/apache/tapestry/vlib/IMessageProperty.java
deleted file mode 100644
index 73275be..0000000
--- a/3.0.4/examples/Vlib/src/org/apache/tapestry/vlib/IMessageProperty.java
+++ /dev/null
@@ -1,32 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.vlib;
-
-import org.apache.tapestry.IPage;
-
-/**
- *  String message property, for many pages that can display an informational message.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 3.0
- *
- **/
-
-public interface IMessageProperty extends IPage
-{
-    public String getMessage();
-    public void setMessage(String message);
-}
diff --git a/3.0.4/examples/Vlib/src/org/apache/tapestry/vlib/Protected.java b/3.0.4/examples/Vlib/src/org/apache/tapestry/vlib/Protected.java
deleted file mode 100644
index 5ded8d1..0000000
--- a/3.0.4/examples/Vlib/src/org/apache/tapestry/vlib/Protected.java
+++ /dev/null
@@ -1,95 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.vlib;
-
-import org.apache.tapestry.PageRedirectException;
-import org.apache.tapestry.callback.PageCallback;
-import org.apache.tapestry.event.PageEvent;
-import org.apache.tapestry.event.PageValidateListener;
-import org.apache.tapestry.form.IFormComponent;
-import org.apache.tapestry.html.BasePage;
-import org.apache.tapestry.valid.IValidationDelegate;
-import org.apache.tapestry.vlib.pages.Login;
-
-/**
- *  Base page used for pages that should be protected by the {@link Login} page.
- *  If the user is not logged in, they are redirected to the Login page first.
- *  Also, implements an error property and a validationDelegate.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- * 
- **/
-
-public abstract class Protected extends BasePage implements IErrorProperty, PageValidateListener
-{
-    private IValidationDelegate _validationDelegate;
-
-    public void initialize()
-    {
-        _validationDelegate = null;
-    }
-
-    public IValidationDelegate getValidationDelegate()
-    {
-        if (_validationDelegate == null)
-            _validationDelegate = new VirtualLibraryDelegate();
-
-        return _validationDelegate;
-    }
-
-    protected void setErrorField(String componentId, String message)
-    {
-        IFormComponent component = (IFormComponent) getComponent(componentId);
-
-        IValidationDelegate delegate = getValidationDelegate();
-
-        delegate.setFormComponent(component);
-        delegate.record(message, null);
-    }
-
-    /**
-     *  Returns true if the delegate indicates an error, or the error property is not null.
-     *
-     **/
-
-    protected boolean isInError()
-    {
-        return getError() != null || getValidationDelegate().getHasErrors();
-    }
-
-    /**
-     *  Checks if the user is logged in.  If not, they are sent
-     *  to the {@link Login} page before coming back to whatever this
-     *  page is.
-     *
-     **/
-
-	public void pageValidate(PageEvent event)
-    {
-        Visit visit = (Visit) getVisit();
-
-        if (visit != null && visit.isUserLoggedIn())
-            return;
-
-        // User not logged in ... redirect through the Login page.
-
-        Login login = (Login) getRequestCycle().getPage("Login");
-
-        login.setCallback(new PageCallback(this));
-
-        throw new PageRedirectException(login);
-    }
-}
\ No newline at end of file
diff --git a/3.0.4/examples/Vlib/src/org/apache/tapestry/vlib/VirtualLibraryDelegate.java b/3.0.4/examples/Vlib/src/org/apache/tapestry/vlib/VirtualLibraryDelegate.java
deleted file mode 100644
index 2ea47c2..0000000
--- a/3.0.4/examples/Vlib/src/org/apache/tapestry/vlib/VirtualLibraryDelegate.java
+++ /dev/null
@@ -1,75 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.vlib;
-
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.form.IFormComponent;
-import org.apache.tapestry.valid.IValidator;
-import org.apache.tapestry.valid.ValidationDelegate;
-
-/**
- *  Implementation of {@link org.apache.tapestry.valid.IValidationDelegate} 
- *  which uses the
- *  correct CSS class when rendering errors.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- * 
- **/
-
-public class VirtualLibraryDelegate extends ValidationDelegate
-{
-    public void writeLabelPrefix(
-        IFormComponent component,
-        IMarkupWriter writer,
-        IRequestCycle cycle)
-    {
-        if (isInError(component))
-        {
-            writer.begin("span");
-            writer.attribute("class", "invalid-field");
-        }
-    }
-
-    public void writeLabelSuffix(
-        IFormComponent component,
-        IMarkupWriter writer,
-        IRequestCycle cycle)
-    {
-        if (isInError(component))
-            writer.end();
-    }
-
-    public void writeAttributes(
-        IMarkupWriter writer,
-        IRequestCycle cycle,
-        IFormComponent component,
-        IValidator validator)
-    {
-        if (isInError())
-            writer.attribute("class", "error");
-    }
-
-
-    public void writeSuffix(
-        IMarkupWriter writer,
-        IRequestCycle cycle,
-        IFormComponent component,
-        IValidator validator)
-    {
-    }
-
-}
\ No newline at end of file
diff --git a/3.0.4/examples/Vlib/src/org/apache/tapestry/vlib/VirtualLibraryEngine.java b/3.0.4/examples/Vlib/src/org/apache/tapestry/vlib/VirtualLibraryEngine.java
deleted file mode 100644
index 6aaa07f..0000000
--- a/3.0.4/examples/Vlib/src/org/apache/tapestry/vlib/VirtualLibraryEngine.java
+++ /dev/null
@@ -1,463 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.vlib;
-
-import java.io.IOException;
-import java.rmi.RemoteException;
-
-import javax.ejb.CreateException;
-import javax.ejb.FinderException;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpSession;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.tapestry.ApplicationRuntimeException;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.StaleSessionException;
-import org.apache.tapestry.engine.BaseEngine;
-import org.apache.tapestry.form.IPropertySelectionModel;
-import org.apache.tapestry.request.ResponseOutputStream;
-import org.apache.tapestry.vlib.ejb.IBookQuery;
-import org.apache.tapestry.vlib.ejb.IBookQueryHome;
-import org.apache.tapestry.vlib.ejb.IOperations;
-import org.apache.tapestry.vlib.ejb.IOperationsHome;
-import org.apache.tapestry.vlib.ejb.Person;
-import org.apache.tapestry.vlib.ejb.Publisher;
-import org.apache.tapestry.vlib.pages.ApplicationUnavailable;
-
-/**
- *
- *  The engine for the Virtual Library.  
- *  This exists to implement the external 
- *  service, which allows the {@link org.apache.tapestry.vlib.pages.ViewBook}
- *  and {@link org.apache.tapestry.vlib.pages.ViewPerson}
- *  pages to be bookmarked, and to provide
- *  a way for shutting down the application when the user logs out.
- *
- *
- *  @version $Id$
- *  @author Howard Lewis Ship
- *
- **/
-
-public class VirtualLibraryEngine extends BaseEngine
-{
-    public static final Log LOG = LogFactory.getLog(VirtualLibraryEngine.class);
-
-    private static final boolean DEBUG_ENABLED =
-        Boolean.getBoolean("org.apache.tapestry.vlib.debug-enabled");
-
-    private transient boolean _killSession;
-
-    private transient IOperations _operations;
-    private transient IPropertySelectionModel _publisherModel;
-    private transient IPropertySelectionModel _personModel;
-
-    private transient String _applicationUnavailableMessage;
-
-    /**
-     *  Removes the operations bean instance, if accessed this request cycle.
-     *
-     *  <p>May invalidate the {@link HttpSession} (see {@link #logout()}).
-     **/
-
-    protected void cleanupAfterRequest(IRequestCycle cycle)
-    {
-        clearCache();
-
-        _applicationUnavailableMessage = null;
-
-        if (_killSession)
-        {
-            try
-            {
-                HttpSession session = cycle.getRequestContext().getSession();
-
-                if (session != null)
-                    session.invalidate();
-            }
-            catch (IllegalStateException ex)
-            {
-                // Ignore.
-            }
-        }
-    }
-
-    /**
-     *  Sets the visit property to null, and sets a flag that
-     *  invalidates the {@link HttpSession} at the end of the request cycle.
-     *
-     **/
-
-    public void logout()
-    {
-        Visit visit = (Visit) getVisit();
-
-        if (visit != null)
-            visit.setUser(null);
-
-        _killSession = true;
-    }
-
-    public boolean isDebugEnabled()
-    {
-        return DEBUG_ENABLED;
-    }
-
-    /**
-     *  Returns an instance of the Vlib Operations beans, which is a stateless
-     *  session bean for performing certain operations.
-     *
-     *  <p>The bean is automatically removed at the end of the request cycle.
-     *
-     **/
-
-    public IOperations getOperations()
-    {
-        Global global = (Global) getGlobal();
-
-        if (_operations == null)
-        {
-            int i = 0;
-            while (true)
-            {
-                try
-                {
-                    IOperationsHome home = global.getOperationsHome();
-
-                    _operations = home.create();
-
-                    break;
-                }
-                catch (CreateException ex)
-                {
-                    throw new ApplicationRuntimeException("Error creating operations bean.", ex);
-                }
-                catch (RemoteException ex)
-                {
-                    rmiFailure("Remote exception creating operations bean.", ex, i++);
-                }
-            }
-        }
-
-        return _operations;
-    }
-
-    /**
-     *  Builds a model for entering in a publisher name, including an intial
-     *  blank option.
-     *
-     **/
-
-    public IPropertySelectionModel getPublisherModel()
-    {
-        if (_publisherModel == null)
-            _publisherModel = buildPublisherModel();
-
-        return _publisherModel;
-    }
-
-    private IPropertySelectionModel buildPublisherModel()
-    {
-        Publisher[] publishers = null;
-
-        EntitySelectionModel model = new EntitySelectionModel();
-
-        // Add in a default null value, such that the user can
-        // not select a specific Publisher.
-
-        model.add(null, "");
-
-        int i = 0;
-        while (true)
-        {
-            IOperations operations = getOperations();
-
-            try
-            {
-                publishers = operations.getPublishers();
-
-                // Exit the retry loop
-
-                break;
-            }
-            catch (RemoteException ex)
-            {
-                rmiFailure("Unable to obtain list of publishers.", ex, i++);
-            }
-        }
-
-        // Add in the actual publishers.  They are sorted by name.
-
-        for (i = 0; i < publishers.length; i++)
-            model.add(publishers[i].getId(), publishers[i].getName());
-
-        return model;
-    }
-
-    /**
-     *  Invoked from {@link Visit#clearCache()} (and at the end of the request
-     *  cycle) to clear the publisher and person
-     *  {@link IPropertySelectionModel} models.
-     *
-     **/
-
-    public void clearCache()
-    {
-        _publisherModel = null;
-        _personModel = null;
-
-        Visit visit = (Visit) getVisit();
-
-        if (visit != null)
-            visit.clearCache();
-    }
-
-    /**
-     *  Returns a model that contains all the known Person's, sorted by last name,
-     *  then first.  The label for the model matches the user's natural name.
-     *
-     **/
-
-    public IPropertySelectionModel getPersonModel()
-    {
-        if (_personModel == null)
-            _personModel = buildPersonModel(false);
-
-        return _personModel;
-    }
-
-    public IPropertySelectionModel buildPersonModel(boolean includeEmpty)
-    {
-        Person[] persons = null;
-
-        int i = 0;
-        while (true)
-        {
-            IOperations operations = getOperations();
-
-            try
-            {
-                persons = operations.getPersons();
-
-                break;
-            }
-            catch (RemoteException ex)
-            {
-                rmiFailure("Unable to obtain list of persons.", ex, i++);
-            }
-        }
-
-        EntitySelectionModel model = new EntitySelectionModel();
-
-        if (includeEmpty)
-            model.add(null, "");
-
-        for (i = 0; i < persons.length; i++)
-            model.add(persons[i].getId(), persons[i].getNaturalName());
-
-        return model;
-
-    }
-
-    /**
-     *  Creates a new {@link IBookQuery} EJB instance.
-     *
-     **/
-
-    public IBookQuery createNewQuery()
-    {
-        Global global = (Global) getGlobal();
-
-        IBookQuery result = null;
-
-        int i = 0;
-        while (true)
-        {
-            IBookQueryHome home = global.getBookQueryHome();
-
-            try
-            {
-                result = home.create();
-
-                break;
-            }
-            catch (CreateException ex)
-            {
-                throw new ApplicationRuntimeException("Could not create BookQuery bean.", ex);
-            }
-            catch (RemoteException ex)
-            {
-                rmiFailure("Remote exception creating BookQuery bean.", ex, i++);
-            }
-        }
-
-        return result;
-    }
-
-    /**
-     *  Invoked in various places to present an error message to the user.
-     *  This sets the error property of either the 
-     *  {@link org.apache.tapestry.vlib.pages.Home} or
-     *  {@link org.apache.tapestry.vlib.pages.MyLibrary} page 
-     *  (the latter only if the user is logged in),
-     *  and sets the selected page for rendering the response.
-     *
-     **/
-
-    public void presentError(String error, IRequestCycle cycle)
-    {
-        String pageName = "Home";
-        // Get, but don't create, the visit.
-        Visit visit = (Visit) getVisit();
-
-        if (visit != null && visit.isUserLoggedIn())
-            pageName = "MyLibrary";
-
-        IErrorProperty page = (IErrorProperty) cycle.getPage(pageName);
-
-        page.setError(error);
-
-        cycle.activate(page);
-    }
-
-    /**
-     *  Invoked after an operation on a home or remote interface
-     *  throws a RemoteException; this clears any cache of
-     *  home and remote interfaces.  
-     *
-     * @param message the message for the exception, or for the log message
-     * @param ex the exception thrown
-     * @param attempt the attempt number.  Attempt #0 simply clears the EJBs,
-     *  attempt #1 is the real failure.
-     *
-     **/
-
-    public void rmiFailure(String message, RemoteException ex, int attempt)
-    {
-        LOG.error(message, ex);
-
-        clearEJBs();
-
-        if (attempt > 0)
-            punt(message, ex);
-
-    }
-
-    private void punt(String message, Throwable ex)
-    {
-        _applicationUnavailableMessage = message;
-
-        throw new ApplicationRuntimeException(message, ex);
-    }
-
-    private void clearEJBs()
-    {
-        Global global = (Global) getGlobal();
-
-        global.clear();
-
-        _operations = null;
-    }
-
-    /**
-     *  Invoked when any kind of runtime exception percolates up to the
-     *  top level service method.  Normally, the standard Exception
-     *  page is displayed; we logout and setup our own version of the page
-     *  instead.
-     * 
-     **/
-
-    protected void activateExceptionPage(
-        IRequestCycle cycle,
-        ResponseOutputStream output,
-        Throwable cause)
-        throws ServletException
-    {
-        try
-        {
-            logout();
-
-            ApplicationUnavailable page =
-                (ApplicationUnavailable) cycle.getPage("ApplicationUnavailable");
-
-            String message = _applicationUnavailableMessage;
-
-            if (message == null)
-                message = cause.getMessage();
-
-            if (message == null)
-                message = cause.getClass().getName();
-
-            page.activate(message, cause);
-
-            cycle.activate(page);
-
-            renderResponse(cycle, output);
-        }
-        catch (Throwable t)
-        {
-            super.activateExceptionPage(cycle, output, cause);
-        }
-    }
-
-    /**
-     *  Reads a person by id.
-     * 
-     **/
-
-    public Person readPerson(Integer personId)
-    {
-        Person result = null;
-
-        int i = 0;
-        while (true)
-        {
-            IOperations operations = getOperations();
-
-            try
-            {
-                result = operations.getPerson(personId);
-
-                break;
-            }
-            catch (FinderException ex)
-            {
-                throw new ApplicationRuntimeException("No such Person #" + personId + ".", ex);
-            }
-            catch (RemoteException ex)
-            {
-                rmiFailure("Unable to read Person #" + personId + ".", ex, i++);
-            }
-        }
-
-        return result;
-    }
-
-    protected void handleStaleSessionException(
-        StaleSessionException ex,
-        IRequestCycle cycle,
-        ResponseOutputStream output)
-        throws IOException, ServletException
-    {
-		IMessageProperty home = (IMessageProperty)cycle.getPage("Home");
-		
-		home.setMessage("You have been logged out due to inactivity.");
-		
-		redirect("Home", cycle, output, ex);
-    }
-
-}
\ No newline at end of file
diff --git a/3.0.4/examples/Vlib/src/org/apache/tapestry/vlib/Visit.java b/3.0.4/examples/Vlib/src/org/apache/tapestry/vlib/Visit.java
deleted file mode 100644
index 9f663f0..0000000
--- a/3.0.4/examples/Vlib/src/org/apache/tapestry/vlib/Visit.java
+++ /dev/null
@@ -1,158 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.vlib;
-
-import java.io.Serializable;
-import java.sql.Timestamp;
-
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.vlib.ejb.Person;
-
-/**
- *  The visit object for the {@link VirtualLibraryEngine}.
- *
- *  Primarily, this is used to access the home interfaces and EJB instances, and
- *  to identify who the logged in user is.
- *
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *
- **/
-
-public class Visit implements Serializable
-{
-	private static final long serialVersionUID = 8589862098677603655L;
-	
-    /**
-     *  Used to identify the logged in user.
-     *
-     **/
-
-    private transient Person _user;
-    private Integer _userId;
-
-    /**
-     *  Set when the user first logs in.  This is the time of their previous
-     *  login (logging in returns the old value then updates the value
-     *  for subsequent logins).
-     *
-     **/
-
-    private Timestamp _lastAccess;
-
-    /**
-     *  Returns the time the user last accessed the database, which may
-     *  be null if the user hasn't logged in yet.
-     *
-     **/
-
-    public Timestamp getLastAccess()
-    {
-        return _lastAccess;
-    }
-
-    /**
-     *  Gets the logged-in user, or null if the user is not logged in.
-     *
-     **/
-
-    public Person getUser(IRequestCycle cycle)
-    {
-        if (_user != null)
-            return _user;
-
-        if (_userId == null)
-            return null;
-
-        VirtualLibraryEngine vengine = (VirtualLibraryEngine) cycle.getEngine();
-
-        _user = vengine.readPerson(_userId);
-
-        return _user;
-    }
-
-    /**
-     *  Returns the id of the logged in user, or null if the
-     *  user is not logged in.
-     *
-     **/
-
-    public Integer getUserId()
-    {
-        return _userId;
-    }
-
-    /**
-     *  Changes the logged in user. This is only invoked from the 
-     *  {@link org.apache.tapestry.vlib.pages.Login} page.
-     *
-     **/
-
-    public void setUser(Person value)
-    {
-        _lastAccess = null;
-        _user = value;
-        _userId = null;
-
-        if (_user == null)
-            return;
-
-        _userId = _user.getId();
-
-        _lastAccess = _user.getLastAccess();
-    }
-
-    /**
-     *  Returns true if the user is logged in.
-     *
-     **/
-
-    public boolean isUserLoggedIn()
-    {
-        return _userId != null;
-    }
-
-    /**
-     *  Returns true if the user has not been identified (has not
-     *  logged in).
-     *
-     **/
-
-    public boolean isUserLoggedOut()
-    {
-        return _userId == null;
-    }
-
-    public boolean isLoggedInUser(Integer id)
-    {
-        if (_userId == null)
-            return false;
-
-        return _userId.equals(id);
-    }
-
-    /**
-     *  Invoked by pages after they perform an operation that changes the backend
-     *  database in such a way that cached data is no longer valid. 
-     *
-     **/
-
-    public void clearCache()
-    {
-        _user = null;
-    }
-
-}
\ No newline at end of file
diff --git a/3.0.4/examples/Vlib/src/org/apache/tapestry/vlib/components/BookLink.java b/3.0.4/examples/Vlib/src/org/apache/tapestry/vlib/components/BookLink.java
deleted file mode 100644
index 7f4979e..0000000
--- a/3.0.4/examples/Vlib/src/org/apache/tapestry/vlib/components/BookLink.java
+++ /dev/null
@@ -1,102 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.vlib.components;
-
-import java.sql.Timestamp;
-
-import org.apache.tapestry.BaseComponent;
-import org.apache.tapestry.IEngine;
-import org.apache.tapestry.vlib.Visit;
-import org.apache.tapestry.vlib.ejb.Book;
-
-/**
- *  Creates a link to the {@link org.apache.tapestry.vlib.pages.ViewBook} 
- *  page using the external service.
- *
- *
- *  <table border=1>
- *  <tr> <th>Parameter</th> 
- *  <th>Type</th> 
- *  <th>Direction</th> 
- *  <th>Required</th> 
- *  <th>Default</th> 
- *  <th>Description</th>
- *  </tr>
- * 
- * <tr>
- *  <td>book</td> 
- *  <td>{@link Book}</td>
- *  <td>in</td>
- *  <td>yes</td> 
- *  <td>&nbsp;</td>
- *  <td>The {@link Book} to create a link to.</td>
- * </tr>
- *
- * </table>
- *
- *  <p>Informal parameters are allowed.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- * 
- **/
-
-public abstract class BookLink extends BaseComponent
-{
-    /**
-     *  One week, in milliseconds (1/1000 second).  Books that have been added in the last
-     *  week are marked new, until the user logs in, at which point, its books
-     *  added since the user last logged in.
-     * 
-     **/
-
-    private static final long ONE_WEEK_MILLIS = 1000l * 60l * 60l * 24l * 7l;
-
-    public boolean isNewlyAdded()
-    {
-        IEngine engine = getPage().getEngine();
-        Visit visit = (Visit) engine.getVisit();
-        Timestamp lastAccess = null;
-
-        if (visit != null)
-            lastAccess = visit.getLastAccess();
-
-		Book book = getBook();
-
-        Timestamp dateAdded = book.getDateAdded();
-
-        // Some old records may not contain a value for dateAdded
-
-        if (dateAdded == null)
-            return false;
-
-        // If don't know the last access time (because the user
-        // hasn't logged in yet), then show anything newer
-        // than a week.
-
-        if (lastAccess == null)
-        {
-            long now = System.currentTimeMillis();
-
-            return (now - dateAdded.getTime()) <= ONE_WEEK_MILLIS;
-        }
-
-        // Return true if lastAccess is earlier than date added.
-
-        return lastAccess.compareTo(dateAdded) <= 0;
-    }
-
-    public abstract Book getBook();
-}
\ No newline at end of file
diff --git a/3.0.4/examples/Vlib/src/org/apache/tapestry/vlib/components/Border.java b/3.0.4/examples/Vlib/src/org/apache/tapestry/vlib/components/Border.java
deleted file mode 100644
index c94fbe7..0000000
--- a/3.0.4/examples/Vlib/src/org/apache/tapestry/vlib/components/Border.java
+++ /dev/null
@@ -1,351 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.vlib.components;
-
-import org.apache.tapestry.ApplicationRuntimeException;
-import org.apache.tapestry.BaseComponent;
-import org.apache.tapestry.IAsset;
-import org.apache.tapestry.IBinding;
-import org.apache.tapestry.IEngine;
-import org.apache.tapestry.IPage;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.callback.ICallback;
-import org.apache.tapestry.callback.PageCallback;
-import org.apache.tapestry.vlib.IActivate;
-import org.apache.tapestry.vlib.IMessageProperty;
-import org.apache.tapestry.vlib.VirtualLibraryEngine;
-import org.apache.tapestry.vlib.Visit;
-import org.apache.tapestry.vlib.pages.Login;
-
-/**
- *  The standard Border component, which provides the title of the page,
- *  the link to {@link org.apache.tapestry.vlib.pages.MyLibrary}, 
- *  the {@link org.apache.tapestry.vlib.pages.Login} page and the 
- *  Logout page.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- * 
- **/
-
-public abstract class Border extends BaseComponent
-{
-    public static final String WINDOW_TITLE = "Tapestry Virtual Library";
-
-    // Determined by finishLoad(), static threafter.
-
-    private String _pageType;
-    private IAsset _titleImage;
-    private IAsset _searchImage;
-    private IAsset _searchRolloverImage;
-    private IAsset _myLibraryImage;
-    private IAsset _myLibraryRolloverImage;
-    private IAsset _borrowedBooksImage;
-    private IAsset _borrowedBooksRolloverImage;
-    private IAsset _loginImage;
-    private IAsset _loginRolloverImage;
-    private IAsset _newBookImage;
-    private IAsset _newBookRolloverImage;
-    private IAsset _editProfileImage;
-    private IAsset _editProfileRolloverImage;
-    private IAsset _giveAwayImage;
-    private IAsset _giveAwayRolloverImage;
-    private IAsset _editUsersImage;
-    private IAsset _editUsersRolloverImage;
-    private IAsset _editPublishersImage;
-    private IAsset _editPublishersRolloverImage;
-    private IAsset _transferBooksImage;
-    private IAsset _transferBooksRolloverImage;
-
-    public abstract String getSubtitle();
-
-    public abstract IBinding getBrowserBinding();
-
-    public void finishLoad()
-    {
-        IPage page = getPage();
-
-        String pageName = page.getPageName();
-
-        _pageType = page.getSpecification().getProperty("page-type");
-
-        if (_pageType == null)
-            _pageType = pageName;
-
-        _titleImage = getAsset("title_" + pageName);
-
-        if (_titleImage == null)
-            _titleImage = getAsset("title_" + _pageType);
-
-        if (_titleImage == null)
-            throw new ApplicationRuntimeException(
-                "Cannot find title image for " + pageName + " or " + _pageType + ".",
-                this,
-                null,
-                null);
-
-        // Based on the type, select the images to use on this instance of Border
-        // in this particular page.
-
-        _searchImage = selectImage("Search", "search");
-        _searchRolloverImage = selectImage("Search", "search_h");
-
-        _myLibraryImage = selectImage("MyLibrary", "mylibrary");
-        _myLibraryRolloverImage = selectImage("MyLibrary", "mylibrary_h");
-
-        _borrowedBooksImage = selectImage("BorrowedBooks", "borrowedbooks");
-        _borrowedBooksRolloverImage = selectImage("BorrowedBooks", "borrowedbooks_h");
-
-        _newBookImage = selectImage("NewBook", "newbook");
-        _newBookRolloverImage = selectImage("NewBook", "newbook_h");
-
-        _editProfileImage = selectImage("EditProfile", "editprofile");
-        _editProfileRolloverImage = selectImage("EditProfile", "editprofile_h");
-
-        _giveAwayImage = selectImage("GiveAwayBooks", "giveaway");
-        _giveAwayRolloverImage = selectImage("GiveAwayBooks", "giveaway_h");
-
-        _editUsersImage = selectImage("EditUsers", "editusers");
-        _editUsersRolloverImage = selectImage("EditUsers", "editusers_h");
-
-        _editPublishersImage = selectImage("EditPublishers", "editpublishers");
-        _editPublishersRolloverImage = selectImage("EditPublishers", "editpublishers_h");
-
-        _transferBooksImage = selectImage("TransferBooks", "transferbooks");
-        _transferBooksRolloverImage = selectImage("TransferBooks", "transferbooks_h");
-
-        _loginImage = selectImage("Login", "login");
-        _loginRolloverImage = selectImage("Login", "login_h");
-    }
-
-    private IAsset selectImage(String type, String baseName)
-    {
-        String key = _pageType.equals(type) ? baseName + "_s" : baseName;
-
-        return getAsset(key);
-    }
-
-    public String getWindowTitle()
-    {
-        String subtitle = getSubtitle();
-
-        if (subtitle == null)
-            return WINDOW_TITLE;
-
-        return WINDOW_TITLE + ": " + subtitle;
-    }
-
-    public boolean isLoggedIn()
-    {
-        IEngine engine = getPage().getEngine();
-        Visit visit = (Visit) engine.getVisit();
-
-        if (visit == null)
-            return false;
-
-        return visit.isUserLoggedIn();
-    }
-
-    public boolean isAdmin()
-    {
-        IEngine engine = getPage().getEngine();
-        Visit visit = (Visit) engine.getVisit();
-
-        if (visit == null)
-            return false;
-
-        IRequestCycle cycle = getPage().getRequestCycle();
-
-        return visit.isUserLoggedIn() && visit.getUser(cycle).isAdmin();
-    }
-
-    public void editProfile(IRequestCycle cycle)
-    {
-        activate("EditProfile", cycle);
-    }
-
-    public void viewBorrowedBooks(IRequestCycle cycle)
-    {
-        activate("BorrowedBooks", cycle);
-    }
-
-    public void viewMyLibrary(IRequestCycle cycle)
-    {
-        activate("MyLibrary", cycle);
-    }
-
-    private void activate(String pageName, IRequestCycle cycle)
-    {
-        IActivate page = (IActivate) cycle.getPage(pageName);
-
-        page.validate(cycle);
-
-        page.activate(cycle);
-    }
-
-    public void login(IRequestCycle cycle)
-    {
-        Visit visit = (Visit) cycle.getEngine().getVisit();
-
-        if (visit != null && visit.isUserLoggedIn())
-            return;
-
-        ICallback callback = new PageCallback(getPage().getPageName());
-        Login loginPage = (Login) cycle.getPage("Login");
-        loginPage.setCallback(callback);
-        cycle.activate(loginPage);
-    }
-
-    public void logout(IRequestCycle cycle)
-    {
-        VirtualLibraryEngine vengine = (VirtualLibraryEngine) getPage().getEngine();
-
-        vengine.logout();
-
-        IMessageProperty home = (IMessageProperty) cycle.getPage("Home");
-
-        home.setMessage(getMessage("goodbye"));
-
-        cycle.activate(home);
-    }
-
-    public void selectBrowserPage(IRequestCycle cycle)
-    {
-        Integer page = (Integer) cycle.getServiceParameters()[0];
-
-        // Not rendering, so have to access the browser the hard way.
-
-        IBinding browserBinding = getBrowserBinding();
-
-        Browser browser = (Browser) browserBinding.getObject("browser", Browser.class);
-
-        if (browser == null)
-            throw Tapestry.createRequiredParameterException(this, "browser");
-
-        browser.jump(page.intValue());
-    }
-
-    public IAsset getBorrowedBooksImage()
-    {
-        return _borrowedBooksImage;
-    }
-
-    public IAsset getBorrowedBooksRolloverImage()
-    {
-        return _borrowedBooksRolloverImage;
-    }
-
-    public IAsset getTitleImage()
-    {
-        return _titleImage;
-    }
-
-    public IAsset getSearchImage()
-    {
-        return _searchImage;
-    }
-
-    public IAsset getSearchRolloverImage()
-    {
-        return _searchRolloverImage;
-    }
-
-    public IAsset getMyLibraryImage()
-    {
-        return _myLibraryImage;
-    }
-
-    public IAsset getMyLibraryRolloverImage()
-    {
-        return _myLibraryRolloverImage;
-    }
-
-    public IAsset getLoginImage()
-    {
-        return _loginImage;
-    }
-
-    public IAsset getLoginRolloverImage()
-    {
-        return _loginRolloverImage;
-    }
-
-    public String getPageType()
-    {
-        return _pageType;
-    }
-
-    public IAsset getNewBookImage()
-    {
-        return _newBookImage;
-    }
-
-    public IAsset getNewBookRolloverImage()
-    {
-        return _newBookRolloverImage;
-    }
-
-    public IAsset getEditProfileImage()
-    {
-        return _editProfileImage;
-    }
-
-    public IAsset getEditProfileRolloverImage()
-    {
-        return _editProfileRolloverImage;
-    }
-
-    public IAsset getGiveAwayImage()
-    {
-        return _giveAwayImage;
-    }
-
-    public IAsset getGiveAwayRolloverImage()
-    {
-        return _giveAwayRolloverImage;
-    }
-
-    public IAsset getEditPublishersImage()
-    {
-        return _editPublishersImage;
-    }
-
-    public IAsset getEditPublishersRolloverImage()
-    {
-        return _editPublishersRolloverImage;
-    }
-
-    public IAsset getEditUsersImage()
-    {
-        return _editUsersImage;
-    }
-
-    public IAsset getEditUsersRolloverImage()
-    {
-        return _editUsersRolloverImage;
-    }
-
-    public IAsset getTransferBooksImage()
-    {
-        return _transferBooksImage;
-    }
-
-    public IAsset getTransferBooksRolloverImage()
-    {
-        return _transferBooksRolloverImage;
-    }
-
-}
\ No newline at end of file
diff --git a/3.0.4/examples/Vlib/src/org/apache/tapestry/vlib/components/Borrow.java b/3.0.4/examples/Vlib/src/org/apache/tapestry/vlib/components/Borrow.java
deleted file mode 100644
index 5f7b0a1..0000000
--- a/3.0.4/examples/Vlib/src/org/apache/tapestry/vlib/components/Borrow.java
+++ /dev/null
@@ -1,122 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.vlib.components;
-
-import java.rmi.RemoteException;
-
-import javax.ejb.FinderException;
-
-import org.apache.tapestry.ApplicationRuntimeException;
-import org.apache.tapestry.BaseComponent;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.vlib.VirtualLibraryEngine;
-import org.apache.tapestry.vlib.Visit;
-import org.apache.tapestry.vlib.ejb.Book;
-import org.apache.tapestry.vlib.ejb.BorrowException;
-import org.apache.tapestry.vlib.ejb.IOperations;
-import org.apache.tapestry.vlib.pages.Home;
-
-/**
- *  Implements the Borrow link that appears on many pages.
- *
- *  <table border=1>
- *  <tr> <th>Parameter</th> <th>Type</th> <th>Read / Write </th> <th>Required</th> <th>Default</th> <th>Description</th>
- *  </tr>
- *
- *  <tr>
- *      <td>book</td>
- *      <td>{@link Book}</td>
- *      <td>R</td>
- *      <td>yes</td>
- *      <td>&nbsp;</td>
- *      <td>The book to create a link to.
- *      </td>
- *  </tr>
- *
- *  </table>
- *
- *  <p>Informal parameters are not allowed.  A body is not allowed.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *
- **/
-
-public abstract class Borrow extends BaseComponent
-{
-    public abstract Book getBook();
-
-    public boolean isLinkDisabled()
-    {
-        Visit visit = (Visit) getPage().getVisit();
-
-        if (!visit.isUserLoggedIn())
-            return true;
-
-        // If the user is logged in, they can borrow it if they are
-        // not already holding it and aren't the owner.
-
-        Book book = getBook();
-
-        // If the book is not lendable, then disable the link.
-
-        if (!book.isLendable())
-            return true;
-
-        // Otherwise, disabled the link if already holding it.
-
-        return visit.isLoggedInUser(book.getHolderId());
-    }
-
-    public void borrow(IRequestCycle cycle)
-    {
-        Object[] parameters = cycle.getServiceParameters();
-        Integer bookPK = (Integer) parameters[0];
-
-        Visit visit = (Visit) getPage().getVisit();
-        Home home = (Home) cycle.getPage("Home");
-        VirtualLibraryEngine vengine = (VirtualLibraryEngine)cycle.getEngine();
-
-        int i = 0;
-        while (true)
-        {
-            try
-            {
-                IOperations bean = vengine.getOperations();
-                Book book = bean.borrowBook(bookPK, visit.getUserId());
-
-                home.setMessage("Borrowed: " + book.getTitle());
-
-                break;
-            }
-            catch (BorrowException ex)
-            {
-                vengine.presentError(ex.getMessage(), cycle);
-                return;
-            }
-            catch (FinderException ex)
-            {
-                throw new ApplicationRuntimeException("Unable to find book or user. ", ex);
-            }
-            catch (RemoteException ex)
-            {
-                vengine.rmiFailure("Remote exception borrowing book.", ex, i++);
-            }
-        }
-
-        cycle.activate(home);
-    }
-
-}
\ No newline at end of file
diff --git a/3.0.4/examples/Vlib/src/org/apache/tapestry/vlib/components/Browser.java b/3.0.4/examples/Vlib/src/org/apache/tapestry/vlib/components/Browser.java
deleted file mode 100644
index e59a3f4..0000000
--- a/3.0.4/examples/Vlib/src/org/apache/tapestry/vlib/components/Browser.java
+++ /dev/null
@@ -1,234 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.vlib.components;
-
-import java.rmi.RemoteException;
-
-import org.apache.tapestry.AbstractComponent;
-import org.apache.tapestry.IActionListener;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IPage;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.event.PageEvent;
-import org.apache.tapestry.event.PageRenderListener;
-import org.apache.tapestry.vlib.VirtualLibraryEngine;
-import org.apache.tapestry.vlib.ejb.Book;
-import org.apache.tapestry.vlib.ejb.IBookQuery;
-
-/**
- *  Implements a paging browser for the results of a {@link IBookQuery}.
- *
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *
- **/
-
-public abstract class Browser extends AbstractComponent implements PageRenderListener
-{
-    public abstract IBookQuery getQuery();
-
-    /**
-     *  Default for the page size; the number of results viewed on each page.
-     *
-     **/
-
-    public static final int DEFAULT_PAGE_SIZE = 15;
-
-    /**
-     *  The maximum number of items to display on a page.
-     * 
-     **/
-
-    private int _pageSize = DEFAULT_PAGE_SIZE;
-
-    public abstract int getResultCount();
-
-    public abstract void setResultCount(int resultCount);
-
-    public abstract int getCurrentPage();
-
-    public abstract void setCurrentPage(int currentPage);
-
-    public abstract void setElement(String element);
-
-    public abstract String getElement();
-
-    public abstract void setValue(Object value);
-
-    public abstract IActionListener getListener();
-
-    public abstract Object[] getPageResults();
-
-    public abstract void setPageResults(Object[] pageResults);
-
-    /**
-     *  Invoked by the container when the query (otherwise accessed via the query
-     *  parameter) changes.  Re-caches the number of results and sets the current page
-     *  back to 1.
-     *
-     **/
-
-    public void initializeForResultCount(int resultCount)
-    {
-        setResultCount(resultCount);
-        setCurrentPage(1);
-        setPageCount(computePageCount());
-    }
-
-    public abstract int getPageCount();
-
-    public abstract void setPageCount(int pageCount);
-
-    private int computePageCount()
-    {
-        // For 0 ... pageSize  elements, its just one page.
-
-        int resultCount = getResultCount();
-
-        if (resultCount <= _pageSize)
-            return 1;
-
-        // We need the number of results divided by the results per page.
-
-        int result = resultCount / _pageSize;
-
-        // If there's any left-over, then we need an additional page.
-
-        if (resultCount % _pageSize > 0)
-            result++;
-
-        return result;
-    }
-
-	/**
-	 *  Invoked to change the displayed page number.
-	 * 
-	 *  @param page page to display, numbered from one.  The currentPage property will be
-	 *  updated.  The value is constrained to fit in the valid range of pages
-	 *  for the component.
-	 * 
-	 **/
-	
-    public void jump(int page)
-    {
-        if (page < 2)
-        {
-            setCurrentPage(1);
-            return;
-        }
-
-        int pageCount = getPageCount();
-        if (page > getPageCount())
-        {
-            setCurrentPage(pageCount);
-            return;
-        }
-
-        setCurrentPage(page);
-    }
-
-    public boolean getDisableBack()
-    {
-        return getCurrentPage() <= 1;
-    }
-
-    public boolean getDisableNext()
-    {
-        return getCurrentPage() >= getPageCount();
-    }
-
-    public String getRange()
-    {
-        int currentPage = getCurrentPage();
-        int resultCount = getResultCount();
-
-        int low = (currentPage - 1) * _pageSize + 1;
-        int high = Math.min(currentPage * _pageSize, resultCount);
-
-        return low + " - " + high;
-    }
-
-    protected void renderComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        Object[] books = getPageResults();
-        int count = Tapestry.size(books);
-		String element = getElement();
-		
-        for (int i = 0; i < count; i++)
-        {
-            setValue(books[i]);
-
-            if (element != null)
-            {
-                writer.begin(element);
-                renderInformalParameters(writer, cycle);
-            }
-
-            renderBody(writer, cycle);
-
-            if (element != null)
-                writer.end();
-        }
-    }
-
-    protected void finishLoad()
-    {
-        setElement("tr");
-    }
-
-    public void pageBeginRender(PageEvent event)
-    {
-        int resultCount = getResultCount();
-        int currentPage = getCurrentPage();
-
-        int low = (currentPage - 1) * _pageSize;
-        int high = Math.min(currentPage * _pageSize, resultCount) - 1;
-
-        if (low > high)
-            return;
-
-        Book[] pageResults = null;
-        
-        int i = 0;
-        while (true)
-        {
-
-            try
-            {
-                pageResults = getQuery().get(low, high - low + 1);
-
-                break;
-            }
-            catch (RemoteException ex)
-            {
-                IPage page = getPage();
-
-                if (i++ == 0)
-                    getListener().actionTriggered(this, page.getRequestCycle());
-                else
-                {
-                    VirtualLibraryEngine vengine = (VirtualLibraryEngine) page.getEngine();
-                    vengine.rmiFailure("Unable to retrieve query results.", ex, i);
-                }
-
-            }
-        }
-
-        setPageResults(pageResults);
-    }
-
-}
\ No newline at end of file
diff --git a/3.0.4/examples/Vlib/src/org/apache/tapestry/vlib/components/ColumnSorter.java b/3.0.4/examples/Vlib/src/org/apache/tapestry/vlib/components/ColumnSorter.java
deleted file mode 100644
index 6c962f2..0000000
--- a/3.0.4/examples/Vlib/src/org/apache/tapestry/vlib/components/ColumnSorter.java
+++ /dev/null
@@ -1,66 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.vlib.components;
-
-import org.apache.tapestry.BaseComponent;
-import org.apache.tapestry.IActionListener;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.vlib.ejb.SortColumn;
-
-/**
- *  Comopnent for allowing a column to be sorted.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 3.0
- *
- **/
-
-public abstract class ColumnSorter extends BaseComponent
-{
-    public abstract SortColumn getSortColumn();
-
-    public abstract SortColumn getSelected();
-    public abstract void setSelected(SortColumn selected);
-
-    public abstract boolean isDescending();
-    public abstract void setDescending(boolean descending);
-
-    public abstract IActionListener getListener();
-
-    public void handleClick(IRequestCycle cycle)
-    {
-        SortColumn selected = getSelected();
-        SortColumn sortColumn = getSortColumn();
-
-        if (selected != sortColumn)
-        {
-            setSelected(sortColumn);
-            setDescending(false);
-        }
-        else
-        {
-            boolean current = isDescending();
-            setDescending(!current);
-        }
-
-        IActionListener listener = getListener();
-        if (listener == null)
-            throw Tapestry.createRequiredParameterException(this, "listener");
-
-        listener.actionTriggered(this, cycle);
-    }
-}
diff --git a/3.0.4/examples/Vlib/src/org/apache/tapestry/vlib/pages/ApplicationUnavailable.java b/3.0.4/examples/Vlib/src/org/apache/tapestry/vlib/pages/ApplicationUnavailable.java
deleted file mode 100644
index 3b66ee6..0000000
--- a/3.0.4/examples/Vlib/src/org/apache/tapestry/vlib/pages/ApplicationUnavailable.java
+++ /dev/null
@@ -1,44 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.vlib.pages;
-
-import org.apache.tapestry.pages.Exception;
-import org.apache.tapestry.vlib.IErrorProperty;
-
-/**
- *  A page only displayed when the application is unavailable
- *  (typically because of repeated {@link java.rmi.RemoteException}s
- *  or {@link javax.naming.NamingException}s accessing EJBs.
- * 
- *  @see org.apache.tapestry.vlib.VirtualLibraryEngine#rmiFailure(String, java.rmi.RemoteException, int)
- *
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 2.2
- *
- **/
-
-public abstract class ApplicationUnavailable extends Exception
-implements IErrorProperty
-{
-	
-    public void activate(String message, Throwable ex)
-    {
-        setError(message);
-        
-        setException(ex);
-    }
-}
diff --git a/3.0.4/examples/Vlib/src/org/apache/tapestry/vlib/pages/BookMatches.java b/3.0.4/examples/Vlib/src/org/apache/tapestry/vlib/pages/BookMatches.java
deleted file mode 100644
index a8d064d..0000000
--- a/3.0.4/examples/Vlib/src/org/apache/tapestry/vlib/pages/BookMatches.java
+++ /dev/null
@@ -1,120 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.vlib.pages;
-
-import java.rmi.RemoteException;
-
-	import org.apache.tapestry.IRequestCycle;
-	import org.apache.tapestry.html.BasePage;
-	import org.apache.tapestry.vlib.IMessageProperty;
-	import org.apache.tapestry.vlib.VirtualLibraryEngine;
-	import org.apache.tapestry.vlib.components.Browser;
-	import org.apache.tapestry.vlib.ejb.IBookQuery;
-	import org.apache.tapestry.vlib.ejb.MasterQueryParameters;
-	import org.apache.tapestry.vlib.ejb.SortColumn;
-	import org.apache.tapestry.vlib.ejb.SortOrdering;
-
-/**
- *  Runs queries and displays matches.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- **/
-
-public abstract class BookMatches extends BasePage
-{
-    private Browser _browser;
-
-    public void finishLoad()
-    {
-        _browser = (Browser) getComponent("browser");
-    }
-
-    public abstract IBookQuery getBookQuery();
-
-    public abstract void setBookQuery(IBookQuery bookQuery);
-
-    public abstract SortColumn getSortColumn();
-
-    public abstract boolean isDescending();
-
-    public abstract MasterQueryParameters getQueryParameters();
-
-    public abstract void setQueryParameters(MasterQueryParameters queryParameters);
-
-    /**
-     *  Invoked by the {@link Home} page to perform a query.
-     *
-     **/
-
-    public void performQuery(MasterQueryParameters parameters, IRequestCycle cycle)
-    {
-        setQueryParameters(parameters);
-
-        int count = executeQuery();
-
-        if (count == 0)
-        {
-            IMessageProperty page = (IMessageProperty) cycle.getPage();
-			page.setMessage(getMessage("no-matches"));
-            return;
-        }
-
-        _browser.initializeForResultCount(count);
-        cycle.activate(this);
-    }
-
-    public void requery(IRequestCycle cycle)
-    {
-        int count = executeQuery();
-
-        if (count != _browser.getResultCount())
-            _browser.initializeForResultCount(count);
-    }
-
-    private int executeQuery()
-    {
-        VirtualLibraryEngine vengine = (VirtualLibraryEngine) getEngine();
-
-        MasterQueryParameters parameters = getQueryParameters();
-
-        SortOrdering ordering = new SortOrdering(getSortColumn(), isDescending());
-
-        int i = 0;
-        while (true)
-        {
-            try
-            {
-                IBookQuery query = getBookQuery();
-
-                if (query == null)
-                {
-                    query = vengine.createNewQuery();
-                    setBookQuery(query);
-                }
-                
-                return query.masterQuery(parameters, ordering);
-            }
-            catch (RemoteException ex)
-            {
-                vengine.rmiFailure("Remote exception processing query.", ex, i++);
-                
-                setBookQuery(null);
-            }
-
-        }
-    }
-
-}
\ No newline at end of file
diff --git a/3.0.4/examples/Vlib/src/org/apache/tapestry/vlib/pages/BorrowedBooks.java b/3.0.4/examples/Vlib/src/org/apache/tapestry/vlib/pages/BorrowedBooks.java
deleted file mode 100644
index 51609eb..0000000
--- a/3.0.4/examples/Vlib/src/org/apache/tapestry/vlib/pages/BorrowedBooks.java
+++ /dev/null
@@ -1,151 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.vlib.pages;
-
-import java.rmi.RemoteException;
-
-import javax.ejb.FinderException;
-
-import org.apache.tapestry.ApplicationRuntimeException;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.vlib.ActivatePage;
-import org.apache.tapestry.vlib.IMessageProperty;
-import org.apache.tapestry.vlib.VirtualLibraryEngine;
-import org.apache.tapestry.vlib.Visit;
-import org.apache.tapestry.vlib.components.Browser;
-import org.apache.tapestry.vlib.ejb.Book;
-import org.apache.tapestry.vlib.ejb.IBookQuery;
-import org.apache.tapestry.vlib.ejb.IOperations;
-import org.apache.tapestry.vlib.ejb.SortColumn;
-import org.apache.tapestry.vlib.ejb.SortOrdering;
-
-/**
- *  Shows a list of books the user has borrowed.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- * 
- **/
-
-public abstract class BorrowedBooks extends ActivatePage implements IMessageProperty
-{
-    private Browser _browser;
-
-    public abstract void setBorrowedQuery(IBookQuery value);
-
-    public abstract IBookQuery getBorrowedQuery();
-
-    public abstract SortColumn getSortColumn();
-
-    public abstract boolean isDescending();
-
-    public void finishLoad()
-    {
-        _browser = (Browser) getComponent("browser");
-    }
-
-    public void activate(IRequestCycle cycle)
-    {
-        runQuery();
-
-        cycle.activate(this);
-    }
-
-    /**
-     *  Invoked as listener method after the sortColumn or
-     *  descending properties are changed.
-     * 
-     *  @param cycle
-     *  @since 3.0
-     * 
-     *
-     **/
-
-    public void requery(IRequestCycle cycle)
-    {
-        runQuery();
-    }
-
-    private void runQuery()
-    {
-        Visit visit = (Visit) getVisit();
-        Integer userPK = visit.getUserId();
-
-        VirtualLibraryEngine vengine = (VirtualLibraryEngine) getEngine();
-
-        SortOrdering ordering = new SortOrdering(getSortColumn(), isDescending());
-
-        int i = 0;
-        while (true)
-        {
-            try
-            {
-                IBookQuery query = getBorrowedQuery();
-
-                if (query == null)
-                {
-                    query = vengine.createNewQuery();
-                    setBorrowedQuery(query);
-                }
-
-                int count = query.borrowerQuery(userPK, ordering);
-
-                if (count != _browser.getResultCount())
-                    _browser.initializeForResultCount(count);
-
-                break;
-            }
-            catch (RemoteException ex)
-            {
-                vengine.rmiFailure("Remote exception finding borrowed books.", ex, i++);
-
-                setBorrowedQuery(null);
-            }
-        }
-    }
-
-    /**
-     *  Listener used to return a book.
-     *
-     **/
-
-    public void returnBook(IRequestCycle cycle)
-    {
-        Object[] parameters = cycle.getServiceParameters();
-        Integer bookPK = (Integer) parameters[0];
-
-        VirtualLibraryEngine vengine = (VirtualLibraryEngine) getEngine();
-        IOperations operations = vengine.getOperations();
-
-        try
-        {
-            Book book = operations.returnBook(bookPK);
-
-            setMessage(format("returned-book", book.getTitle()));
-
-            runQuery();
-        }
-        catch (FinderException ex)
-        {
-            setError(format("unable-to-return-book", ex.getMessage()));
-            return;
-        }
-        catch (RemoteException ex)
-        {
-            throw new ApplicationRuntimeException(ex);
-        }
-    }
-
-}
\ No newline at end of file
diff --git a/3.0.4/examples/Vlib/src/org/apache/tapestry/vlib/pages/ConfirmBookDelete.java b/3.0.4/examples/Vlib/src/org/apache/tapestry/vlib/pages/ConfirmBookDelete.java
deleted file mode 100644
index 07ec0e2..0000000
--- a/3.0.4/examples/Vlib/src/org/apache/tapestry/vlib/pages/ConfirmBookDelete.java
+++ /dev/null
@@ -1,123 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.vlib.pages;
-
-import java.rmi.RemoteException;
-
-import javax.ejb.FinderException;
-import javax.ejb.RemoveException;
-
-import org.apache.tapestry.ApplicationRuntimeException;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.html.BasePage;
-import org.apache.tapestry.vlib.VirtualLibraryEngine;
-import org.apache.tapestry.vlib.ejb.Book;
-import org.apache.tapestry.vlib.ejb.IOperations;
-
-/**
- *  Presents a confirmation page before deleting a book.  If the user
- *  selects "yes", the book is deleted; otherwise the user is returned
- *  to the {@link MyLibrary} page.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- * 
- **/
-
-public abstract class ConfirmBookDelete extends BasePage
-{
-    public abstract void setBookId(Integer bookId);
-
-    public abstract void setBookTitle(String title);
-
-    /** 
-     * Invoked (by {@link MyLibrary}) to select a book to be
-     * deleted.  This method sets the temporary page properties
-     * (bookPrimaryKey and bookTitle) and invoked {@link IRequestCycle#setPage(IPage)}.
-     *
-     **/
-
-    public void selectBook(Integer bookId, IRequestCycle cycle)
-    {
-        setBookId(bookId);
-
-        VirtualLibraryEngine vengine = (VirtualLibraryEngine) getEngine();
-
-        int i = 0;
-        while (true)
-        {
-            try
-            {
-                IOperations operations = vengine.getOperations();
-                Book book = operations.getBook(bookId);
-
-                setBookTitle(book.getTitle());
-
-                break;
-            }
-            catch (FinderException ex)
-            {
-                throw new ApplicationRuntimeException(ex);
-            }
-            catch (RemoteException ex)
-            {
-                vengine.rmiFailure("Remote exception reading read book #" + bookId + ".", ex, i++);
-            }
-        }
-
-        cycle.activate(this);
-    }
-
-    /**
-     *  Hooked up to the yes component, this actually deletes the book.
-     *
-     **/
-
-    public void deleteBook(IRequestCycle cycle)
-    {
-        Object[] parameters = cycle.getServiceParameters();
-        Integer bookPK = (Integer) parameters[0];
-
-        VirtualLibraryEngine vengine = (VirtualLibraryEngine) getEngine();
-        Book book = null;
-
-        int i = 0;
-        while (true)
-        {
-            try
-            {
-                IOperations operations = vengine.getOperations();
-
-                book = operations.deleteBook(bookPK);
-
-                break;
-            }
-            catch (RemoveException ex)
-            {
-                throw new ApplicationRuntimeException(ex);
-            }
-            catch (RemoteException ex)
-            {
-                vengine.rmiFailure("Remote exception deleting book #" + bookPK + ".", ex, i++);
-            }
-        }
-
-        MyLibrary myLibrary = (MyLibrary) cycle.getPage("MyLibrary");
-
-        myLibrary.setMessage(format("book-deleted", book.getTitle()));
-
-       	myLibrary.activate(cycle);
-    }
-}
\ No newline at end of file
diff --git a/3.0.4/examples/Vlib/src/org/apache/tapestry/vlib/pages/EditBook.java b/3.0.4/examples/Vlib/src/org/apache/tapestry/vlib/pages/EditBook.java
deleted file mode 100644
index 7e6ab86..0000000
--- a/3.0.4/examples/Vlib/src/org/apache/tapestry/vlib/pages/EditBook.java
+++ /dev/null
@@ -1,173 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.vlib.pages;
-
-import java.rmi.RemoteException;
-import java.util.HashMap;
-import java.util.Map;
-
-import javax.ejb.CreateException;
-import javax.ejb.FinderException;
-
-import org.apache.tapestry.ApplicationRuntimeException;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.event.PageEvent;
-import org.apache.tapestry.event.PageRenderListener;
-import org.apache.tapestry.vlib.Protected;
-import org.apache.tapestry.vlib.VirtualLibraryEngine;
-import org.apache.tapestry.vlib.ejb.IOperations;
-
-/**
- *  Edits the properties of at book.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- **/
-
-public abstract class EditBook extends Protected implements PageRenderListener
-{
-    public abstract Map getAttributes();
-
-    public abstract void setAttributes(Map attributes);
-
-    public abstract String getPublisherName();
-
-    public abstract Integer getBookId();
-
-    public abstract void setBookId(Integer bookId);
-
-    /**
-     *  Invoked (from {@link MyLibrary}) to begin editting a book.
-     *  Gets the attributes from the {@link org.apache.tapestry.vlib.ejb.IBook} 
-     *  and updates the request cycle to render this page,
-     *
-     **/
-
-    public void beginEdit(IRequestCycle cycle, Integer bookId)
-    {
-        setBookId(bookId);
-
-        VirtualLibraryEngine vengine = (VirtualLibraryEngine) getEngine();
-
-        int i = 0;
-        while (true)
-        {
-            try
-            {
-                // Get the attributes as a source for our input fields.
-
-                IOperations operations = vengine.getOperations();
-
-                setAttributes(operations.getBookAttributes(bookId));
-
-                break;
-            }
-            catch (FinderException ex)
-            {
-                throw new ApplicationRuntimeException(ex);
-            }
-            catch (RemoteException ex)
-            {
-                vengine.rmiFailure(
-                    "Remote exception setting up page for book #" + bookId + ".",
-                    ex,
-                    i++);
-            }
-        }
-
-        cycle.activate(this);
-    }
-
-    /**
-     *  Used to update the book when the form is submitted.
-     *
-     **/
-
-    public void formSubmit(IRequestCycle cycle)
-    {
-        Map attributes = getAttributes();
-
-        Integer publisherId = (Integer) attributes.get("publisherId");
-        String publisherName = getPublisherName();
-
-        if (publisherId == null && Tapestry.isBlank(publisherName))
-        {
-            setErrorField("inputPublisherName", getMessage("need-publisher-name"));
-            return;
-        }
-
-        if (publisherId != null && Tapestry.isNonBlank(publisherName))
-        {
-            setErrorField("inputPublisherName", getMessage("leave-publisher-name-empty"));
-            return;
-        }
-
-        // Check for an error from a validation field
-
-        if (isInError())
-            return;
-
-        // OK, do the update.
-
-        VirtualLibraryEngine vengine = (VirtualLibraryEngine)cycle.getEngine();
-        Integer bookId = getBookId();
-
-        int i = 0;
-        while (true)
-        {
-            IOperations bean = vengine.getOperations();
-
-            try
-            {
-                if (publisherId != null)
-                    bean.updateBook(bookId, attributes);
-                else
-                {
-                    bean.updateBook(bookId, attributes, publisherName);
-					vengine.clearCache();
-                }
-
-                break;
-            }
-            catch (FinderException ex)
-            {
-                throw new ApplicationRuntimeException(ex);
-            }
-            catch (CreateException ex)
-            {
-                throw new ApplicationRuntimeException(ex);
-            }
-            catch (RemoteException ex)
-            {
-                vengine.rmiFailure("Remote exception updating book #" + bookId + ".", ex, i++);
-
-                continue;
-            }
-        }
-
-        MyLibrary page = (MyLibrary) cycle.getPage("MyLibrary");
-        page.setMessage(format("updated-book", attributes.get("title")));
-		page.activate(cycle);
-      
-    }
-
-    public void pageBeginRender(PageEvent event)
-    {
-        if (getAttributes() == null)
-            setAttributes(new HashMap());
-    }
-
-}
\ No newline at end of file
diff --git a/3.0.4/examples/Vlib/src/org/apache/tapestry/vlib/pages/EditProfile.java b/3.0.4/examples/Vlib/src/org/apache/tapestry/vlib/pages/EditProfile.java
deleted file mode 100644
index 0babfa0..0000000
--- a/3.0.4/examples/Vlib/src/org/apache/tapestry/vlib/pages/EditProfile.java
+++ /dev/null
@@ -1,184 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.vlib.pages;
-
-import java.rmi.RemoteException;
-import java.util.HashMap;
-import java.util.Map;
-
-import javax.ejb.FinderException;
-
-import org.apache.tapestry.ApplicationRuntimeException;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.event.PageEvent;
-import org.apache.tapestry.event.PageRenderListener;
-import org.apache.tapestry.form.IFormComponent;
-import org.apache.tapestry.valid.IValidationDelegate;
-import org.apache.tapestry.vlib.ActivatePage;
-import org.apache.tapestry.vlib.VirtualLibraryEngine;
-import org.apache.tapestry.vlib.Visit;
-import org.apache.tapestry.vlib.ejb.IOperations;
-
-/**
- *  Edit's a user's profile:  names, email and password.  
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- * 
- **/
-
-public abstract class EditProfile extends ActivatePage implements PageRenderListener
-{
-    public abstract String getPassword1();
-
-    public abstract void setPassword1(String value);
-
-    public abstract String getPassword2();
-
-    public abstract void setPassword2(String value);
-
-    public abstract Map getAttributes();
-
-    public abstract void setAttributes(Map attributes);
-
-    /**
-     *  Invoked (from {@link MyLibrary}) to begin editting the user's
-     *  profile.  We get the entity attributes from the 
-     *  {@link org.apache.tapestry.vlib.ejb.IPerson},
-     *  and store them in the attributes page property, ready to provide
-     *  default values to the {@link org.apache.tapestry.valid.ValidField} 
-     *  components.
-     *
-     **/
-
-    public void activate(IRequestCycle cycle)
-    {
-        Visit visit = (Visit) getVisit();
-        VirtualLibraryEngine vengine = (VirtualLibraryEngine) cycle.getEngine();
-
-        Integer userId = visit.getUserId();
-        Map attributes = null;
-
-        int i = 0;
-        while (true)
-        {
-            try
-            {
-                IOperations operations = vengine.getOperations();
-
-                attributes = operations.getPersonAttributes(userId);
-
-                break;
-            }
-            catch (FinderException ex)
-            {
-                throw new ApplicationRuntimeException(ex);
-            }
-            catch (RemoteException ex)
-            {
-                vengine.rmiFailure("Remote exception reading user.", ex, i++);
-            }
-        }
-
-        attributes.remove("password");
-        setAttributes(attributes);
-
-        cycle.activate(this);
-    }
-
-    public void updateProfile(IRequestCycle cycle)
-    {
-        String password1 = getPassword1();
-        String password2 = getPassword2();
-
-        setPassword1(null);
-        setPassword2(null);
-
-        IValidationDelegate delegate = getValidationDelegate();
-
-        delegate.setFormComponent((IFormComponent) getComponent("inputPassword1"));
-        delegate.recordFieldInputValue(null);
-
-        delegate.setFormComponent((IFormComponent) getComponent("inputPassword2"));
-        delegate.recordFieldInputValue(null);
-
-        if (delegate.getHasErrors())
-            return;
-
-        Map attributes = getAttributes();
-
-        if (Tapestry.isBlank(password1) != Tapestry.isBlank(password2))
-        {
-            setErrorField("inputPassword1", getMessage("enter-password-twice"));
-
-            return;
-        }
-
-        if (Tapestry.isNonBlank(password1))
-        {
-            if (!password1.equals(password2))
-            {
-                setErrorField("inputPassword1", getMessage("password-must-match"));
-                return;
-            }
-
-            attributes.put("password", password1);
-        }
-
-        Visit visit = (Visit) getVisit();
-        VirtualLibraryEngine vengine = (VirtualLibraryEngine) cycle.getEngine();
-        Integer userId = visit.getUserId();
-
-        int i = 0;
-        while (true)
-        {
-            try
-            {
-                /**
-                 *  Note:  this allows the user to change thier e-mail
-                 *  such that it conflicts with another user!  Need yet-another
-                 *  IOperations method to perform the update!
-                 *
-                 **/
-
-                IOperations operations = vengine.getOperations();
-
-                operations.updatePerson(userId, attributes);
-                break;
-            }
-            catch (FinderException ex)
-            {
-                throw new ApplicationRuntimeException(ex);
-            }
-            catch (RemoteException ex)
-            {
-                vengine.rmiFailure("Remote exception updating user attributes.", ex, i++);
-            }
-        }
-
-        vengine.clearCache();
-
-        MyLibrary myLibrary = (MyLibrary) cycle.getPage("MyLibrary");
-        myLibrary.activate(cycle);
-    }
-
-    public void pageBeginRender(PageEvent event)
-    {
-        if (getAttributes() == null)
-            setAttributes(new HashMap());
-    }
-
-}
\ No newline at end of file
diff --git a/3.0.4/examples/Vlib/src/org/apache/tapestry/vlib/pages/GiveAwayBooks.java b/3.0.4/examples/Vlib/src/org/apache/tapestry/vlib/pages/GiveAwayBooks.java
deleted file mode 100644
index 6d44f9a..0000000
--- a/3.0.4/examples/Vlib/src/org/apache/tapestry/vlib/pages/GiveAwayBooks.java
+++ /dev/null
@@ -1,229 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.vlib.pages;
-
-import java.rmi.RemoteException;
-import java.util.List;
-
-import javax.ejb.FinderException;
-
-import org.apache.tapestry.ApplicationRuntimeException;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.PageRedirectException;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.event.PageEvent;
-import org.apache.tapestry.event.PageRenderListener;
-import org.apache.tapestry.form.IPropertySelectionModel;
-import org.apache.tapestry.vlib.EntitySelectionModel;
-import org.apache.tapestry.vlib.IActivate;
-import org.apache.tapestry.vlib.Protected;
-import org.apache.tapestry.vlib.VirtualLibraryEngine;
-import org.apache.tapestry.vlib.Visit;
-import org.apache.tapestry.vlib.ejb.Book;
-import org.apache.tapestry.vlib.ejb.IBookQuery;
-import org.apache.tapestry.vlib.ejb.IOperations;
-import org.apache.tapestry.vlib.ejb.Person;
-
-/**
- *  Used to manage giving away of books to other users.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 3.0
- *
- **/
-
-public abstract class GiveAwayBooks extends Protected implements PageRenderListener
-{
-    public abstract IPropertySelectionModel getBooksModel();
-
-    public abstract void setBooksModel(IPropertySelectionModel booksModel);
-
-    public abstract IPropertySelectionModel getPersonModel();
-
-    public abstract void setPersonModel(IPropertySelectionModel personModel);
-
-    public abstract List getSelectedBooks();
-
-    public abstract Integer getTargetUserId();
-
-    public void formSubmit(IRequestCycle cycle)
-    {
-        VirtualLibraryEngine vengine = (VirtualLibraryEngine) getEngine();
-
-        Integer targetUserId = getTargetUserId();
-
-        Person target = vengine.readPerson(targetUserId);
-
-        List selectedBooks = getSelectedBooks();
-
-        int count = Tapestry.size(selectedBooks);
-
-        if (count == 0)
-        {
-            setError(format("select-at-least-one-book", target.getNaturalName()));
-            return;
-        }
-
-        Integer[] bookIds = (Integer[]) selectedBooks.toArray(new Integer[count]);
-
-        int i = 0;
-        while (true)
-        {
-            IOperations operations = vengine.getOperations();
-
-            try
-            {
-                operations.transferBooks(targetUserId, bookIds);
-
-                break;
-            }
-            catch (FinderException ex)
-            {
-                throw new ApplicationRuntimeException(ex);
-            }
-            catch (RemoteException ex)
-            {
-                vengine.rmiFailure(getMessage("update-failure"), ex, i++);
-            }
-        }
-
-        MyLibrary myLibrary = (MyLibrary) cycle.getPage("MyLibrary");
-
-        myLibrary.setMessage(
-            format("transfered-books", Integer.toString(count), target.getNaturalName()));
-
-        myLibrary.activate(cycle);
-    }
-
-    private IPropertySelectionModel buildPersonModel()
-    {
-        VirtualLibraryEngine vengine = (VirtualLibraryEngine) getEngine();
-        Visit visit = (Visit) vengine.getVisit();
-        Integer userPK = visit.getUserId();
-
-        Person[] persons = null;
-
-        int i = 0;
-        while (true)
-        {
-            IOperations operations = vengine.getOperations();
-
-            try
-            {
-                persons = operations.getPersons();
-
-                break;
-            }
-            catch (RemoteException ex)
-            {
-                vengine.rmiFailure(getMessage("read-users-failure"), ex, i++);
-            }
-        }
-
-        EntitySelectionModel result = new EntitySelectionModel();
-
-        for (i = 0; i < persons.length; i++)
-        {
-
-            Person p = persons[i];
-            Integer pk = p.getId();
-
-            if (pk.equals(userPK))
-                continue;
-
-            result.add(pk, p.getNaturalName());
-        }
-
-        return result;
-    }
-
-    public void pageBeginRender(PageEvent event)
-    {
-        IPropertySelectionModel model = getBooksModel();
-
-        if (model == null)
-        {
-            model = buildBooksModel();
-            setBooksModel(model);
-        }
-
-        model = getPersonModel();
-        if (model == null)
-        {
-            model = buildPersonModel();
-            setPersonModel(model);
-        }
-    }
-
-    private IPropertySelectionModel buildBooksModel()
-    {
-        VirtualLibraryEngine vengine = (VirtualLibraryEngine) getEngine();
-        Visit visit = (Visit) vengine.getVisit();
-        Integer userPK = visit.getUserId();
-        Book[] books = null;
-
-        int i = 0;
-        while (true)
-        {
-            books = null;
-
-            try
-            {
-                IBookQuery query = vengine.createNewQuery();
-
-                int count = query.ownerQuery(userPK, null);
-
-                if (count > 0)
-                    books = query.get(0, count);
-
-                break;
-            }
-            catch (RemoteException ex)
-            {
-                vengine.rmiFailure(getMessage("read-books-failure"), ex, i++);
-            }
-        }
-
-        EntitySelectionModel result = new EntitySelectionModel();
-
-        if (books != null)
-            for (i = 0; i < books.length; i++)
-                result.add(books[i].getId(), books[i].getTitle());
-
-        return result;
-
-    }
-
-    public void pageValidate(PageEvent event)
-    {
-        super.pageValidate(event);
-
-        IPropertySelectionModel model = buildBooksModel();
-
-        if (model.getOptionCount() == 0)
-        {
-            IRequestCycle cycle = getRequestCycle();
-            IActivate page = (IActivate) cycle.getPage("MyLibrary");
-
-            page.activate(cycle);
-
-            throw new PageRedirectException(page);
-        }
-
-        setBooksModel(model);
-    }
-
-}
diff --git a/3.0.4/examples/Vlib/src/org/apache/tapestry/vlib/pages/Home.java b/3.0.4/examples/Vlib/src/org/apache/tapestry/vlib/pages/Home.java
deleted file mode 100644
index 9986291..0000000
--- a/3.0.4/examples/Vlib/src/org/apache/tapestry/vlib/pages/Home.java
+++ /dev/null
@@ -1,57 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.vlib.pages;
-
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.html.BasePage;
-import org.apache.tapestry.vlib.IErrorProperty;
-import org.apache.tapestry.vlib.IMessageProperty;
-import org.apache.tapestry.vlib.ejb.MasterQueryParameters;
-
-/**
- *  The home page for the application, it's primary purpose is
- *  to provide a book search form.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- **/
-
-public abstract class Home extends BasePage implements IErrorProperty, IMessageProperty
-{
-
-    public abstract String getTitle();
-
-    public abstract String getAuthor();
-
-    public abstract Integer getPublisherId();
-
-    public abstract Integer getOwnerId();
-
-    /**
-     *  Invokes {@link BookMatches#performQuery(MasterQueryParameters, IRequestCycle)}.
-     * 
-     **/
-
-    public void search(IRequestCycle cycle)
-    {
-        BookMatches matches = (BookMatches) cycle.getPage("BookMatches");
-
-        MasterQueryParameters parameters =
-            new MasterQueryParameters(getTitle(), getAuthor(), getOwnerId(), getPublisherId());
-
-        matches.performQuery(parameters, cycle);
-    }
-
-}
\ No newline at end of file
diff --git a/3.0.4/examples/Vlib/src/org/apache/tapestry/vlib/pages/Login.java b/3.0.4/examples/Vlib/src/org/apache/tapestry/vlib/pages/Login.java
deleted file mode 100644
index 3c49e85..0000000
--- a/3.0.4/examples/Vlib/src/org/apache/tapestry/vlib/pages/Login.java
+++ /dev/null
@@ -1,190 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.vlib.pages;
-
-import java.rmi.RemoteException;
-
-import javax.servlet.http.Cookie;
-
-import org.apache.tapestry.IEngine;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.callback.ICallback;
-import org.apache.tapestry.event.PageEvent;
-import org.apache.tapestry.event.PageRenderListener;
-import org.apache.tapestry.form.IFormComponent;
-import org.apache.tapestry.html.BasePage;
-import org.apache.tapestry.valid.IValidationDelegate;
-import org.apache.tapestry.valid.ValidatorException;
-import org.apache.tapestry.vlib.IErrorProperty;
-import org.apache.tapestry.vlib.VirtualLibraryEngine;
-import org.apache.tapestry.vlib.Visit;
-import org.apache.tapestry.vlib.ejb.IOperations;
-import org.apache.tapestry.vlib.ejb.LoginException;
-import org.apache.tapestry.vlib.ejb.Person;
-
-/**
- *  Allows the user to login, by providing email address and password.
- *  After succesfully logging in, a cookie is placed on the client browser
- *  that provides the default email address for future logins (the cookie
- *  persists for a week).
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- * 
- **/
-
-public abstract class Login extends BasePage implements IErrorProperty, PageRenderListener
-{
-    /**
-     *  The name of a cookie to store on the user's machine that will identify
-     *  them next time they log in.
-     *
-     **/
-
-    private static final String COOKIE_NAME = "org.apache.tapestry.vlib.Login.email";
-
-    private final static int ONE_WEEK = 7 * 24 * 60 * 60;
-
-    public abstract void setEmail(String value);
-
-    public abstract String getEmail();
-
-    public abstract String getPassword();
-
-    public abstract void setPassword(String password);
-
-    protected IValidationDelegate getValidationDelegate()
-    {
-        return (IValidationDelegate) getBeans().getBean("delegate");
-    }
-
-    protected void setErrorField(String componentId, String message)
-    {
-        IFormComponent field = (IFormComponent) getComponent(componentId);
-
-        IValidationDelegate delegate = getValidationDelegate();
-        delegate.setFormComponent(field);
-        delegate.record(new ValidatorException(message));
-    }
-
-    public abstract void setCallback(ICallback value);
-
-    public abstract ICallback getCallback();
-
-    /**
-     *  Attempts to login. 
-     *
-     *  <p>If the user name is not known, or the password is invalid, then an error
-     *  message is displayed.
-     *
-     **/
-
-    public void attemptLogin(IRequestCycle cycle)
-    {
-        String password = getPassword();
-
-        // Do a little extra work to clear out the password.
-
-        setPassword(null);
-        IValidationDelegate delegate = getValidationDelegate();
-
-        delegate.setFormComponent((IFormComponent) getComponent("inputPassword"));
-        delegate.recordFieldInputValue(null);
-
-        // An error, from a validation field, may already have occured.
-
-        if (delegate.getHasErrors())
-            return;
-
-        VirtualLibraryEngine vengine = (VirtualLibraryEngine) getEngine();
-
-        int i = 0;
-        while (true)
-        {
-            try
-            {
-                IOperations operations = vengine.getOperations();
-
-                Person person = operations.login(getEmail(), password);
-
-                loginUser(person, cycle);
-
-                break;
-
-            }
-            catch (LoginException ex)
-            {
-                String fieldName = ex.isPasswordError() ? "inputPassword" : "inputEmail";
-
-                setErrorField(fieldName, ex.getMessage());
-                return;
-            }
-            catch (RemoteException ex)
-            {
-                vengine.rmiFailure("Remote exception validating user.", ex, i++);
-            }
-        }
-    }
-
-    /**
-     *  Sets up the {@link Person} as the logged in user, creates
-     *  a cookie for thier email address (for subsequent logins),
-     *  and redirects to the appropriate page ({@link MyLibrary}, or
-     *  a specified page).
-     *
-     **/
-
-    public void loginUser(Person person, IRequestCycle cycle) throws RemoteException
-    {
-        String email = person.getEmail();
-
-        // Get the visit object; this will likely force the
-        // creation of the visit object and an HttpSession.
-
-        Visit visit = (Visit) getVisit();
-        visit.setUser(person);
-
-        // After logging in, go to the MyLibrary page, unless otherwise
-        // specified.
-
-        ICallback callback = getCallback();
-
-        if (callback == null)
-            cycle.activate("Home");
-        else
-            callback.performCallback(cycle);
-
-        // I've found that failing to set a maximum age and a path means that
-        // the browser (IE 5.0 anyway) quietly drops the cookie.
-
-        IEngine engine = getEngine();
-        Cookie cookie = new Cookie(COOKIE_NAME, email);
-        cookie.setPath(engine.getServletPath());
-        cookie.setMaxAge(ONE_WEEK);
-
-        // Record the user's email address in a cookie
-
-        cycle.getRequestContext().addCookie(cookie);
-
-        engine.forgetPage(getPageName());
-    }
-
-    public void pageBeginRender(PageEvent event)
-    {
-        if (getEmail() == null)
-            setEmail(getRequestCycle().getRequestContext().getCookieValue(COOKIE_NAME));
-    }
-
-}
\ No newline at end of file
diff --git a/3.0.4/examples/Vlib/src/org/apache/tapestry/vlib/pages/MyLibrary.java b/3.0.4/examples/Vlib/src/org/apache/tapestry/vlib/pages/MyLibrary.java
deleted file mode 100644
index 047937a..0000000
--- a/3.0.4/examples/Vlib/src/org/apache/tapestry/vlib/pages/MyLibrary.java
+++ /dev/null
@@ -1,175 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.vlib.pages;
-
-import java.rmi.RemoteException;
-
-import javax.ejb.FinderException;
-
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.vlib.ActivatePage;
-import org.apache.tapestry.vlib.IMessageProperty;
-import org.apache.tapestry.vlib.VirtualLibraryEngine;
-import org.apache.tapestry.vlib.Visit;
-import org.apache.tapestry.vlib.components.Browser;
-import org.apache.tapestry.vlib.ejb.Book;
-import org.apache.tapestry.vlib.ejb.IBookQuery;
-import org.apache.tapestry.vlib.ejb.IOperations;
-import org.apache.tapestry.vlib.ejb.SortColumn;
-import org.apache.tapestry.vlib.ejb.SortOrdering;
-
-/**
- *  Shows a list of the user's books, allowing books to be editted or
- *  even deleted.
- *
- *  <p>Note that, unlike elsewhere, book titles do not link to the
- *  {@link ViewBook} page.  It seems to me there would be a conflict between
- *  that behavior and the edit behavior; making the book titles not be links
- *  removes the ambiguity over what happens when the book title is clicked
- *  (view vs. edit).
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- * 
- **/
-
-public abstract class MyLibrary
-    extends ActivatePage
-    implements IMessageProperty
-{
-    public abstract void setOwnedQuery(IBookQuery value);
-
-    public abstract IBookQuery getOwnedQuery();
-
-    public abstract SortColumn getSortColumn();
-
-    public abstract boolean isDescending();
-
-    private Browser _browser;
-
-    public void finishLoad()
-    {
-        _browser = (Browser) getComponent("browser");
-    }
-
-    public void activate(IRequestCycle cycle)
-    {
-        runQuery();
-
-        cycle.activate(this);
-    }
-
-    public void requery(IRequestCycle cycle)
-    {
-        runQuery();
-    }
-
-    private void runQuery()
-    {
-        Visit visit = (Visit) getVisit();
-        Integer userId = visit.getUserId();
-
-        VirtualLibraryEngine vengine = (VirtualLibraryEngine) getEngine();
-
-        SortOrdering ordering = new SortOrdering(getSortColumn(), isDescending());
-
-        int i = 0;
-        while (true)
-        {
-            try
-            {
-                IBookQuery query = getOwnedQuery();
-
-                if (query == null)
-                {
-                    query = vengine.createNewQuery();
-                    setOwnedQuery(query);
-                }
-
-                int count = query.ownerQuery(userId, ordering);
-
-                if (count != _browser.getResultCount())
-                    _browser.initializeForResultCount(count);
-
-                break;
-            }
-            catch (RemoteException ex)
-            {
-                vengine.rmiFailure("Remote exception accessing owned books.", ex, i++);
-
-                setOwnedQuery(null);
-            }
-        }
-    }
-
-    /**
-     *  Listener invoked to allow a user to edit a book.
-     *
-     **/
-
-    public void editBook(IRequestCycle cycle)
-    {
-        Object[] parameters = cycle.getServiceParameters();
-        Integer bookId = (Integer) parameters[0];
-        EditBook page = (EditBook) cycle.getPage("EditBook");
-
-        page.beginEdit(cycle, bookId);
-    }
-
-    /**
-     *  Listener invoked to allow a user to delete a book.
-     *
-     **/
-
-    public void deleteBook(IRequestCycle cycle)
-    {
-        Object[] parameters = cycle.getServiceParameters();
-        Integer bookId = (Integer) parameters[0];
-
-        ConfirmBookDelete page = (ConfirmBookDelete) cycle.getPage("ConfirmBookDelete");
-        page.selectBook(bookId, cycle);
-    }
-
-    private void returnBook(Integer bookId)
-    {
-        VirtualLibraryEngine vengine = (VirtualLibraryEngine) getEngine();
-
-        int i = 0;
-        while (true)
-        {
-            try
-            {
-                IOperations operations = vengine.getOperations();
-                Book book = operations.returnBook(bookId);
-
-                setMessage(format("returned-book", book.getTitle()));
-
-                break;
-            }
-            catch (FinderException ex)
-            {
-                setError(format("unable-to-return-book", ex.getMessage()));
-                return;
-            }
-            catch (RemoteException ex)
-            {
-                vengine.rmiFailure("Remote exception returning book.", ex, i++);
-            }
-        }
-
-        runQuery();
-    }
-
-}
\ No newline at end of file
diff --git a/3.0.4/examples/Vlib/src/org/apache/tapestry/vlib/pages/NewBook.java b/3.0.4/examples/Vlib/src/org/apache/tapestry/vlib/pages/NewBook.java
deleted file mode 100644
index 4d5a258..0000000
--- a/3.0.4/examples/Vlib/src/org/apache/tapestry/vlib/pages/NewBook.java
+++ /dev/null
@@ -1,133 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.vlib.pages;
-
-import java.rmi.RemoteException;
-import java.util.HashMap;
-import java.util.Map;
-
-import javax.ejb.CreateException;
-
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.event.PageEvent;
-import org.apache.tapestry.event.PageRenderListener;
-import org.apache.tapestry.vlib.Protected;
-import org.apache.tapestry.vlib.VirtualLibraryEngine;
-import org.apache.tapestry.vlib.Visit;
-import org.apache.tapestry.vlib.ejb.IOperations;
-
-/**
- *  Collects information for a new book.  
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- * 
- **/
-
-public abstract class NewBook extends Protected implements PageRenderListener
-{
-
-    public abstract Map getAttributes();
-
-    public abstract void setAttributes(Map attributes);
-
-    public abstract String getPublisherName();
-
-    public void addBook(IRequestCycle cycle)
-    {
-        Map attributes = getAttributes();
-
-        Integer publisherId = (Integer) attributes.get("publisherId");
-        String publisherName = getPublisherName();
-
-        if (publisherId == null && Tapestry.isBlank(publisherName))
-        {
-            setErrorField("inputPublisherName", getMessage("need-publisher-name"));
-            return;
-        }
-
-        if (publisherId != null && Tapestry.isNonBlank(publisherName))
-        {
-            setErrorField("inputPublisherName", getMessage("leave-publisher-name-empty"));
-            return;
-        }
-
-        if (isInError())
-            return;
-
-        Visit visit = (Visit) getVisit();
-        Integer userId = visit.getUserId();
-        VirtualLibraryEngine vengine = (VirtualLibraryEngine) cycle.getEngine();
-
-        attributes.put("ownerId", userId);
-        attributes.put("holderId", userId);
-
-        int i = 0;
-        while (true)
-        {
-            try
-            {
-
-                IOperations operations = vengine.getOperations();
-
-                if (publisherId != null)
-                    operations.addBook(attributes);
-                else
-                {
-                    operations.addBook(attributes, publisherName);
-
-                    // Clear the app's cache of info; in this case, known publishers.
-
-                    vengine.clearCache();
-                }
-
-                break;
-            }
-            catch (CreateException ex)
-            {
-                setError("Error adding book: " + ex.getMessage());
-                return;
-            }
-            catch (RemoteException ex)
-            {
-                vengine.rmiFailure("Remote exception adding new book.", ex, i++);
-            }
-        }
-
-        // Success.  First, update the message property of the return page.
-
-        MyLibrary myLibrary = (MyLibrary) cycle.getPage("MyLibrary");
-
-        myLibrary.setMessage(format("added-book", attributes.get("title")));
-
-        myLibrary.activate(cycle);
-    }
-
-    public void pageBeginRender(PageEvent event)
-    {
-        if (getAttributes() == null)
-        {
-            Map attributes = new HashMap();
-
-            // Setup defaults for the new book.
-
-            attributes.put("lendable", Boolean.TRUE);
-
-            setAttributes(attributes);
-        }
-    }
-
-}
\ No newline at end of file
diff --git a/3.0.4/examples/Vlib/src/org/apache/tapestry/vlib/pages/Register.java b/3.0.4/examples/Vlib/src/org/apache/tapestry/vlib/pages/Register.java
deleted file mode 100644
index 534187e..0000000
--- a/3.0.4/examples/Vlib/src/org/apache/tapestry/vlib/pages/Register.java
+++ /dev/null
@@ -1,139 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.vlib.pages;
-
-import java.rmi.RemoteException;
-
-import javax.ejb.CreateException;
-
-import org.apache.tapestry.ApplicationRuntimeException;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.form.IFormComponent;
-import org.apache.tapestry.html.BasePage;
-import org.apache.tapestry.valid.IValidationDelegate;
-import org.apache.tapestry.vlib.IErrorProperty;
-import org.apache.tapestry.vlib.VirtualLibraryEngine;
-import org.apache.tapestry.vlib.ejb.IOperations;
-import org.apache.tapestry.vlib.ejb.Person;
-import org.apache.tapestry.vlib.ejb.RegistrationException;
-
-/**
- *  Invoked from the {@link Login} page, to allow a user to register
- *  into the system on-the-fly.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- * 
- **/
-
-public abstract class Register extends BasePage implements IErrorProperty
-{
-
-    public abstract String getFirstName();
-
-    public abstract String getLastName();
-
-    public abstract String getEmail();
-
-    public abstract String getPassword1();
-
-    public abstract String getPassword2();
-
-    public abstract void setPassword1(String value);
-
-    public abstract void setPassword2(String value);
-
-    private IValidationDelegate getValidationDelegate()
-    {
-        return (IValidationDelegate) getBeans().getBean("delegate");
-    }
-
-    private void setErrorField(String componentId, String message)
-    {
-        IValidationDelegate delegate = getValidationDelegate();
-        IFormComponent field = (IFormComponent) getComponent(componentId);
-
-        delegate.setFormComponent(field);
-        delegate.record(message, null);
-    }
-
-    private void clear(String componentId)
-    {
-        IValidationDelegate delegate = getValidationDelegate();
-        IFormComponent component = (IFormComponent) getComponent(componentId);
-
-        delegate.setFormComponent(component);
-        delegate.recordFieldInputValue(null);
-    }
-
-    public void attemptRegister(IRequestCycle cycle)
-    {
-        IValidationDelegate delegate = getValidationDelegate();
-
-        String password1 = getPassword1();
-        String password2 = getPassword2();
-
-        setPassword1(null);
-        setPassword2(null);
-
-        clear("inputPassword1");
-        clear("inputPassword2");
-
-        if (delegate.getHasErrors())
-            return;
-        // Note: we know password1 and password2 are not null
-        // because they are required fields.
-
-        if (!password1.equals(password2))
-        {
-            setErrorField("inputPassword1", getMessage("password-must-match"));
-            return;
-        }
-
-        VirtualLibraryEngine vengine = (VirtualLibraryEngine) getEngine();
-        Login login = (Login) cycle.getPage("Login");
-
-        int i = 0;
-        while (true)
-        {
-            try
-            {
-                IOperations bean = vengine.getOperations();
-                Person user =
-                    bean.registerNewUser(getFirstName(), getLastName(), getEmail(), password1);
-
-                // Ask the login page to return us to the proper place, as well
-                // as set a cookie identifying the user for next time.
-
-                login.loginUser(user, cycle);
-
-                break;
-            }
-            catch (RegistrationException ex)
-            {
-                setError(ex.getMessage());
-                return;
-            }
-            catch (CreateException ex)
-            {
-                throw new ApplicationRuntimeException(ex);
-            }
-            catch (RemoteException ex)
-            {
-                vengine.rmiFailure("Remote exception registering new user.", ex, i++);
-            }
-        }
-    }
-}
\ No newline at end of file
diff --git a/3.0.4/examples/Vlib/src/org/apache/tapestry/vlib/pages/ViewBook.java b/3.0.4/examples/Vlib/src/org/apache/tapestry/vlib/pages/ViewBook.java
deleted file mode 100644
index db58151..0000000
--- a/3.0.4/examples/Vlib/src/org/apache/tapestry/vlib/pages/ViewBook.java
+++ /dev/null
@@ -1,105 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.vlib.pages;
-
-import java.rmi.RemoteException;
-import java.text.DateFormat;
-
-import javax.ejb.FinderException;
-
-import org.apache.tapestry.IExternalPage;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.event.PageEvent;
-import org.apache.tapestry.event.PageRenderListener;
-import org.apache.tapestry.html.BasePage;
-import org.apache.tapestry.vlib.VirtualLibraryEngine;
-import org.apache.tapestry.vlib.ejb.Book;
-import org.apache.tapestry.vlib.ejb.IOperations;
-
-/**
- *  Shows the details of a book, and allows the user to borrow it.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- * 
- **/
-
-public abstract class ViewBook extends BasePage implements IExternalPage, PageRenderListener
-{
-    private DateFormat _dateFormat;
-
-    public abstract Integer getBookId();
-
-    public abstract void setBookId(Integer bookId);
-
-    public abstract Book getBook();
-
-    public abstract void setBook(Book value);
-
-    public void activateExternalPage(Object[] parameters, IRequestCycle cycle)
-    {
-        Integer bookId = (Integer) parameters[0];
-
-        setBookId(bookId);
-    }
-
-    private void readBook()
-    {
-        VirtualLibraryEngine vengine = (VirtualLibraryEngine) getEngine();
-        Integer bookId = getBookId();
-
-        int i = 0;
-        while (true)
-        {
-            IOperations bean = vengine.getOperations();
-
-            try
-            {
-                setBook(bean.getBook(bookId));
-
-                return;
-            }
-            catch (FinderException ex)
-            {
-                vengine.presentError("Book not found in database.", getRequestCycle());
-                return;
-            }
-            catch (RemoteException ex)
-            {
-                vengine.rmiFailure(
-                    "Remote exception obtaining information for book #" + bookId + ".",
-                    ex,
-                    i++);
-            }
-        }
-
-    }
-
-    public DateFormat getDateFormat()
-    {
-        if (_dateFormat == null)
-            _dateFormat =
-                DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.SHORT, getLocale());
-
-        return _dateFormat;
-    }
-
-    public void pageBeginRender(PageEvent event)
-    {
-        if (getBook() == null)
-            readBook();
-    }
-
-}
\ No newline at end of file
diff --git a/3.0.4/examples/Vlib/src/org/apache/tapestry/vlib/pages/ViewPerson.java b/3.0.4/examples/Vlib/src/org/apache/tapestry/vlib/pages/ViewPerson.java
deleted file mode 100644
index c653e2b..0000000
--- a/3.0.4/examples/Vlib/src/org/apache/tapestry/vlib/pages/ViewPerson.java
+++ /dev/null
@@ -1,140 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.vlib.pages;
-
-import java.rmi.RemoteException;
-
-import org.apache.tapestry.IExternalPage;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.event.PageEvent;
-import org.apache.tapestry.event.PageRenderListener;
-import org.apache.tapestry.html.BasePage;
-import org.apache.tapestry.vlib.VirtualLibraryEngine;
-import org.apache.tapestry.vlib.components.Browser;
-import org.apache.tapestry.vlib.ejb.IBookQuery;
-import org.apache.tapestry.vlib.ejb.Person;
-import org.apache.tapestry.vlib.ejb.SortColumn;
-import org.apache.tapestry.vlib.ejb.SortOrdering;
-
-/**
- *  Displays the book inventory list for a single {@link org.apache.tapestry.vlib.ejb.IPerson}, showing
- *  what books are owned by the person, who has them borrowed, etc.  If the
- *  user is logged in, then books can be borrowed from this page as well.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- * 
- **/
-
-public abstract class ViewPerson extends BasePage implements IExternalPage, PageRenderListener
-{
-    public abstract Integer getPersonId();
-
-    public abstract void setPersonId(Integer personId);
-
-    public abstract void setPerson(Person value);
-
-    public abstract Person getPerson();
-
-    public abstract IBookQuery getQuery();
-
-    public abstract void setQuery(IBookQuery value);
-
-    public abstract SortColumn getSortColumn();
-
-    public abstract boolean isDescending();
-
-    private Browser _browser;
-
-    public void finishLoad()
-    {
-        _browser = (Browser) getComponent("browser");
-    }
-
-    /**
-     *  Invoked by the external service to being viewing the
-     *  identified person.
-     *
-     **/
-
-    public void activateExternalPage(Object[] parameters, IRequestCycle cycle)
-    {
-        Integer personId = (Integer) parameters[0];
-
-        setPersonId(personId);
-
-        // Force the query to be re-run when the person changes.
-
-        int count = runQuery();
-        
-        _browser.initializeForResultCount(count);
-    }
-
-    public void requery(IRequestCycle cycle)
-    {
-        int count = runQuery();
-        
-        if (_browser.getResultCount() != count)
-        	_browser.setResultCount(count);
-    }
-
-    private int runQuery()
-    {
-        VirtualLibraryEngine vengine = (VirtualLibraryEngine) getEngine();
-        Integer personId = getPersonId();
-
-        SortOrdering ordering = new SortOrdering(getSortColumn(), isDescending());
-
-        int i = 0;
-        while (true)
-        {
-            IBookQuery query = getQuery();
-
-            if (query == null)
-            {
-                query = vengine.createNewQuery();
-
-                setQuery(query);
-            }
-
-            try
-            {
-                return query.ownerQuery(personId, ordering);
-            }
-            catch (RemoteException ex)
-            {
-                vengine.rmiFailure("Remote exception for owner query.", ex, i++);
-
-                setQuery(null);
-            }
-        }
-
-    }
-
-    public void pageBeginRender(PageEvent event)
-    {
-        Person person = getPerson();
-
-        if (person == null)
-        {
-            VirtualLibraryEngine vengine = (VirtualLibraryEngine) getEngine();
-
-            person = vengine.readPerson(getPersonId());
-
-            setPerson(person);
-        }
-    }
-
-}
\ No newline at end of file
diff --git a/3.0.4/examples/Vlib/src/org/apache/tapestry/vlib/pages/admin/EditPublishers.java b/3.0.4/examples/Vlib/src/org/apache/tapestry/vlib/pages/admin/EditPublishers.java
deleted file mode 100644
index 07d0934..0000000
--- a/3.0.4/examples/Vlib/src/org/apache/tapestry/vlib/pages/admin/EditPublishers.java
+++ /dev/null
@@ -1,163 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.vlib.pages.admin;
-
-import java.rmi.RemoteException;
-import java.util.List;
-
-import javax.ejb.FinderException;
-import javax.ejb.RemoveException;
-
-import org.apache.tapestry.ApplicationRuntimeException;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.PageRedirectException;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.event.PageEvent;
-import org.apache.tapestry.event.PageRenderListener;
-import org.apache.tapestry.form.ListEditMap;
-import org.apache.tapestry.vlib.AdminPage;
-import org.apache.tapestry.vlib.VirtualLibraryEngine;
-import org.apache.tapestry.vlib.ejb.IOperations;
-import org.apache.tapestry.vlib.ejb.Publisher;
-
-/**
- *  Allows editting of the publishers in the database, including deleting
- *  publishers (which can be dangerous if any books are linked to the publisher).
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- * 
- **/
-
-public abstract class EditPublishers extends AdminPage implements PageRenderListener
-{
-    public abstract ListEditMap getListEditMap();
-
-    public abstract void setListEditMap(ListEditMap listEditMap);
-
-    public abstract Publisher getPublisher();
-
-    public abstract void setPublisher(Publisher publisher);
-
-    public void synchronizePublisher(IRequestCycle cycle)
-    {
-        ListEditMap map = getListEditMap();
-
-        Publisher publisher = (Publisher) map.getValue();
-
-        if (publisher == null)
-        {
-            setError(getMessage("out-of-date"));
-            throw new PageRedirectException(this);
-        }
-
-        setPublisher(publisher);
-    }
-
-    /**
-     *  Reads all publishers from the database, building the list
-     *  of publisher ids, and the map from id to Publisher.
-     *  Also, sets the deletedPublisherIds property to an empty set.
-     * 
-     **/
-
-    private void readPublishers()
-    {
-        VirtualLibraryEngine vengine = (VirtualLibraryEngine) getEngine();
-        Publisher[] publishers = null;
-
-        int i = 0;
-        while (true)
-        {
-            try
-            {
-                IOperations operations = vengine.getOperations();
-
-                publishers = operations.getPublishers();
-
-                break;
-            }
-            catch (RemoteException ex)
-            {
-                vengine.rmiFailure(getMessage("read-failure"), ex, i++);
-            }
-        }
-
-        ListEditMap map = new ListEditMap();
-
-        int count = Tapestry.size(publishers);
-
-        for (i = 0; i < count; i++)
-            map.add(publishers[i].getId(), publishers[i]);
-
-        setListEditMap(map);
-    }
-
-    public void processForm(IRequestCycle cycle)
-    {
-        if (isInError())
-            return;
-
-        ListEditMap map = getListEditMap();
-        List updateList = map.getValues();
-        List deletedIds = map.getDeletedKeys();
-
-        Publisher[] updated = (Publisher[]) updateList.toArray(new Publisher[updateList.size()]);
-
-        Integer[] deleted =
-            deletedIds == null
-                ? null
-                : (Integer[]) deletedIds.toArray(new Integer[deletedIds.size()]);
-
-        // Now, push the updates through to the database
-
-        VirtualLibraryEngine vengine = (VirtualLibraryEngine) getEngine();
-
-        int i = 0;
-        while (true)
-        {
-            try
-            {
-                IOperations operations = vengine.getOperations();
-
-                operations.updatePublishers(updated, deleted);
-
-                break;
-            }
-            catch (FinderException ex)
-            {
-                throw new ApplicationRuntimeException(ex);
-            }
-            catch (RemoveException ex)
-            {
-                throw new ApplicationRuntimeException(ex);
-            }
-            catch (RemoteException ex)
-            {
-                vengine.rmiFailure(getMessage("update-failure"), ex, i++);
-            }
-        }
-
-        // Clear any cached info about publishers.
-
-        vengine.clearCache();
-    }
-
-    public void pageBeginRender(PageEvent event)
-    {
-        readPublishers();
-    }
-
-}
\ No newline at end of file
diff --git a/3.0.4/examples/Vlib/src/org/apache/tapestry/vlib/pages/admin/EditUsers.java b/3.0.4/examples/Vlib/src/org/apache/tapestry/vlib/pages/admin/EditUsers.java
deleted file mode 100644
index d6636f9..0000000
--- a/3.0.4/examples/Vlib/src/org/apache/tapestry/vlib/pages/admin/EditUsers.java
+++ /dev/null
@@ -1,194 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.vlib.pages.admin;
-
-import java.rmi.RemoteException;
-import java.util.Collection;
-import java.util.List;
-
-import javax.ejb.FinderException;
-import javax.ejb.RemoveException;
-
-import org.apache.tapestry.ApplicationRuntimeException;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.PageRedirectException;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.event.PageEvent;
-import org.apache.tapestry.event.PageRenderListener;
-import org.apache.tapestry.vlib.AdminPage;
-import org.apache.tapestry.vlib.VirtualLibraryEngine;
-import org.apache.tapestry.vlib.Visit;
-import org.apache.tapestry.vlib.ejb.IOperations;
-import org.apache.tapestry.vlib.ejb.Person;
-
-/**
- *  Allows editting of the users.  Simple flags about the
- *  user can be changed; additionally, the user can have their
- *  password reset (to a random value, which is mailed to them),
- *  or the user can be out-right deleted.
- *
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- * 
- **/
-
-public abstract class EditUsers extends AdminPage implements PageRenderListener
-{
-    public abstract String getPassword();
-    
-    public abstract void setPassword(String password);
-
-    public abstract UserListEditMap getListEditMap();
-
-    public abstract void setListEditMap(UserListEditMap listEditMap);
-
-    public abstract void setUser(Person person);
-
-    public void synchronizeUser(IRequestCycle cycle)
-    {
-        UserListEditMap map = getListEditMap();
-
-        Person user = (Person) map.getValue();
-
-        if (user == null)
-        {
-            setError(getMessage("out-of-date"));
-            throw new PageRedirectException(this);
-        }
-
-        setUser(user);
-    }
-
-    public void pageBeginRender(PageEvent event)
-    {
-        setupListEditMap();
-    }
-
-    private void setupListEditMap()
-    {
-        VirtualLibraryEngine vengine = (VirtualLibraryEngine) getEngine();
-        Visit visit = (Visit) vengine.getVisit();
-
-        Integer userId = visit.getUserId();
-        Person[] users = null;
-
-        int i = 0;
-        while (true)
-        {
-            try
-            {
-                IOperations operations = vengine.getOperations();
-
-                users = operations.getPersons();
-
-                break;
-            }
-            catch (RemoteException ex)
-            {
-                vengine.rmiFailure(getMessage("read-failure"), ex, i++);
-            }
-        }
-
-        UserListEditMap map = new UserListEditMap();
-
-        for (i = 0; i < users.length; i++)
-        {
-            Integer id = users[i].getId();
-
-            if (id.equals(userId))
-                continue;
-
-            map.add(id, users[i]);
-        }
-
-        setListEditMap(map);
-    }
-
-    /**
-     *  Invoked when the form is submitted.
-     *
-     **/
-
-    public void updateUsers(IRequestCycle cycle)
-    {
-        if (isInError())
-            return;
-
-        Visit visit = (Visit) getVisit();
-        VirtualLibraryEngine vengine = (VirtualLibraryEngine) cycle.getEngine();
-
-        UserListEditMap map = getListEditMap();
-
-        List updatedUsers = map.getValues();
-
-        Person[] updates = (Person[]) updatedUsers.toArray(new Person[updatedUsers.size()]);
-
-        Integer[] resetPasswordUserIds = toArray(map.getResetPasswordKeys());
-        Integer[] deletedUserIds = toArray(map.getDeletedKeys());
-
-        String password = getPassword();
-        setPassword(null);
-
-        if (Tapestry.isBlank(password) && Tapestry.size(resetPasswordUserIds) != 0)
-        {
-            setErrorField("inputPassword", getMessage("need-password"));
-            return;
-        }
-
-        Integer adminId = visit.getUserId();
-
-        int i = 0;
-        while (true)
-        {
-            try
-            {
-                IOperations operations = vengine.getOperations();
-
-                operations.updatePersons(
-                    updates,
-                    resetPasswordUserIds,
-                    password,
-                    deletedUserIds,
-                    adminId);
-                break;
-            }
-            catch (RemoteException ex)
-            {
-                vengine.rmiFailure(getMessage("update-failure"), ex, i++);
-            }
-            catch (RemoveException ex)
-            {
-                throw new ApplicationRuntimeException(ex);
-            }
-            catch (FinderException ex)
-            {
-                throw new ApplicationRuntimeException(ex);
-            }
-        }
-
-        setMessage(getMessage("users-updated"));
-    }
-
-    private Integer[] toArray(Collection c)
-    {
-        int count = Tapestry.size(c);
-
-        if (count == 0)
-            return null;
-
-        return (Integer[]) c.toArray(new Integer[count]);
-    }
-}
\ No newline at end of file
diff --git a/3.0.4/examples/Vlib/src/org/apache/tapestry/vlib/pages/admin/TransferBooksSelect.java b/3.0.4/examples/Vlib/src/org/apache/tapestry/vlib/pages/admin/TransferBooksSelect.java
deleted file mode 100644
index 9deab0c..0000000
--- a/3.0.4/examples/Vlib/src/org/apache/tapestry/vlib/pages/admin/TransferBooksSelect.java
+++ /dev/null
@@ -1,49 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.vlib.pages.admin;
-
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.vlib.AdminPage;
-
-/**
- *  First page in Transfer Books wizard; allows the two users to be selected.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- * 
- **/
-
-public abstract class TransferBooksSelect extends AdminPage
-{
-    public abstract Integer getFromUserId();
-    public abstract Integer getToUserId();
-
-    public void formSubmit(IRequestCycle cycle)
-    {
-        Integer fromUserId = getFromUserId();
-        Integer toUserId = getToUserId();
-
-        if (fromUserId.equals(toUserId))
-        {
-            setError(getMessage("select-different-users"));
-            return;
-        }
-
-        TransferBooksTransfer next = (TransferBooksTransfer) cycle.getPage("TransferBooksTransfer");
-
-        next.activate(cycle, fromUserId, toUserId);
-    }
-
-}
\ No newline at end of file
diff --git a/3.0.4/examples/Vlib/src/org/apache/tapestry/vlib/pages/admin/TransferBooksTransfer.java b/3.0.4/examples/Vlib/src/org/apache/tapestry/vlib/pages/admin/TransferBooksTransfer.java
deleted file mode 100644
index 783dd41..0000000
--- a/3.0.4/examples/Vlib/src/org/apache/tapestry/vlib/pages/admin/TransferBooksTransfer.java
+++ /dev/null
@@ -1,217 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.vlib.pages.admin;
-
-import java.rmi.RemoteException;
-import java.util.List;
-
-import javax.ejb.FinderException;
-
-import org.apache.tapestry.ApplicationRuntimeException;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.event.PageEvent;
-import org.apache.tapestry.event.PageRenderListener;
-import org.apache.tapestry.form.IPropertySelectionModel;
-import org.apache.tapestry.vlib.AdminPage;
-import org.apache.tapestry.vlib.EntitySelectionModel;
-import org.apache.tapestry.vlib.IErrorProperty;
-import org.apache.tapestry.vlib.IMessageProperty;
-import org.apache.tapestry.vlib.VirtualLibraryEngine;
-import org.apache.tapestry.vlib.ejb.Book;
-import org.apache.tapestry.vlib.ejb.IBookQuery;
-import org.apache.tapestry.vlib.ejb.IOperations;
-import org.apache.tapestry.vlib.ejb.Person;
-
-/**
- *  Second page in Transfer Books wizard; allows the books owned by the
- *  from user to be selected and transfered to the target user.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 3.0
- *
- **/
-
-public abstract class TransferBooksTransfer extends AdminPage implements PageRenderListener
-{
-    public abstract Person getFromUser();
-
-    public abstract void setFromUser(Person fromUser);
-
-    public abstract Integer getFromUserId();
-
-    public abstract void setFromUserId(Integer fromUserId);
-
-    public abstract Integer getToUserId();
-
-    public abstract void setToUserId(Integer toUserId);
-
-    public abstract Person getToUser();
-
-    public abstract void setToUser(Person toUser);
-
-    public abstract List getSelectedBooks();
-
-    public abstract IPropertySelectionModel getUserBookModel();
-
-    public abstract void setUserBookModel(IPropertySelectionModel userBookModel);
-
-    public void activate(IRequestCycle cycle, Integer fromUserId, Integer toUserId)
-    {
-        Person fromUser = readPerson(fromUserId);
-
-        IPropertySelectionModel model = buildUserBookModel(fromUser);
-
-        if (model.getOptionCount() == 0)
-        {
-            IErrorProperty page = (IErrorProperty) cycle.getPage();
-            page.setError(format("user-has-no-books", fromUser.getNaturalName()));
-            return;
-        }
-
-        setFromUserId(fromUserId);
-        setFromUser(fromUser);
-
-        setToUserId(toUserId);
-
-        setUserBookModel(model);
-
-        cycle.activate(this);
-    }
-
-    /**
-     *  Only properties toUserPK and fromUserPK are persistent.  We need to refresh
-     *  the fromUser, toUser and userBookModel properties at the start
-     *  of each request cycle.
-     * 
-     **/
-
-    public void pageBeginRender(PageEvent event)
-    {
-        Person fromUser = getFromUser();
-
-        if (fromUser == null)
-        {
-            fromUser = readPerson(getFromUserId());
-            setFromUser(fromUser);
-        }
-
-        if (getUserBookModel() == null)
-            setUserBookModel(buildUserBookModel(fromUser));
-
-        Person toUser = getToUser();
-        if (toUser == null)
-        {
-            toUser = readPerson(getToUserId());
-            setToUser(toUser);
-        }
-    }
-
-    public void formSubmit(IRequestCycle cycle)
-    {
-        List selectedBooks = getSelectedBooks();
-
-        int count = Tapestry.size(selectedBooks);
-
-        if (count == 0)
-        {
-            setError(getMessage("no-books-selected"));
-            return;
-        }
-
-        Integer[] keys = (Integer[]) selectedBooks.toArray(new Integer[count]);
-        Person toUser = getToUser();
-
-        VirtualLibraryEngine vengine = (VirtualLibraryEngine) getEngine();
-
-        int i = 0;
-        while (true)
-        {
-            try
-            {
-                IOperations operations = vengine.getOperations();
-
-                operations.transferBooks(toUser.getId(), keys);
-
-                break;
-            }
-            catch (FinderException ex)
-            {
-                throw new ApplicationRuntimeException(ex);
-            }
-            catch (RemoteException ex)
-            {
-                vengine.rmiFailure("Unable to transfer ownership of books.", ex, i++);
-            }
-        }
-
-        Person fromUser = getFromUser();
-        IMessageProperty selectPage = (TransferBooksSelect) cycle.getPage("TransferBooksSelect");
-        selectPage.setMessage(
-            format(
-                "transfered-books",
-                Integer.toString(count),
-                fromUser.getNaturalName(),
-                toUser.getNaturalName()));
-        cycle.activate(selectPage);
-    }
-
-    private IPropertySelectionModel buildUserBookModel(Person user)
-    {
-        VirtualLibraryEngine vengine = (VirtualLibraryEngine) getEngine();
-        Book[] books = null;
-
-        int i = 0;
-        while (true)
-        {
-            books = null;
-
-            try
-            {
-                IBookQuery query = vengine.createNewQuery();
-
-                int count = query.ownerQuery(user.getId(), null);
-
-                if (count > 0)
-                    books = query.get(0, count);
-
-                break;
-            }
-            catch (RemoteException ex)
-            {
-                vengine.rmiFailure(
-                    "Unable to retrieve books owned by " + user.getNaturalName() + ".",
-                    ex,
-                    i++);
-            }
-        }
-
-        EntitySelectionModel model = new EntitySelectionModel();
-
-        if (books != null)
-            for (i = 0; i < books.length; i++)
-                model.add(books[i].getId(), books[i].getTitle());
-
-        return model;
-    }
-
-    private Person readPerson(Integer personId)
-    {
-        VirtualLibraryEngine vengine = (VirtualLibraryEngine) getEngine();
-
-        return vengine.readPerson(personId);
-    }
-}
diff --git a/3.0.4/examples/Vlib/src/org/apache/tapestry/vlib/pages/admin/UserListEditMap.java b/3.0.4/examples/Vlib/src/org/apache/tapestry/vlib/pages/admin/UserListEditMap.java
deleted file mode 100644
index bd4e58d..0000000
--- a/3.0.4/examples/Vlib/src/org/apache/tapestry/vlib/pages/admin/UserListEditMap.java
+++ /dev/null
@@ -1,52 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.vlib.pages.admin;
-
-import java.util.List;
-import java.util.Set;
-
-import org.apache.tapestry.form.ListEditMap;
-
-/**
- *  Subclass of {@link org.apache.tapestry.form.ListEditMap}
- *  that tracks an additional boolean property, resetPassword,
- *  for each value.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 3.0
- *
- **/
-
-public class UserListEditMap extends ListEditMap
-{
-    private Set _resetPasswordKeys;
-
-    public List getResetPasswordKeys()
-    {
-        return convertSetToList(_resetPasswordKeys);
-    }
-
-    public boolean getResetPassword()
-    {
-        return checkSet(_resetPasswordKeys);
-    }
-
-    public void setResetPassword(boolean resetPassword)
-    {
-        _resetPasswordKeys = updateSet(_resetPasswordKeys, resetPassword);
-    }
-
-}
diff --git a/3.0.4/examples/VlibBeans/.cvsignore b/3.0.4/examples/VlibBeans/.cvsignore
deleted file mode 100644
index d366d2e..0000000
--- a/3.0.4/examples/VlibBeans/.cvsignore
+++ /dev/null
@@ -1 +0,0 @@
-classes
\ No newline at end of file
diff --git a/3.0.4/examples/VlibBeans/build.xml b/3.0.4/examples/VlibBeans/build.xml
deleted file mode 100644
index 9227648..0000000
--- a/3.0.4/examples/VlibBeans/build.xml
+++ /dev/null
@@ -1,48 +0,0 @@
-<?xml version="1.0"?>
-<!-- $Id$ -->
-<project name="Tapestry VlibBeans Example" default="install">
-	<property name="root.dir" value="../.."/>
-	<property file="${root.dir}/config/Version.properties"/>
-	<property file="${root.dir}/config/build.properties"/>
-	<property file="${root.dir}/config/common.properties"/>
-	<path id="jetty.classpath">
-		<fileset dir="${jetty.dir}">
-			<include name="**/javax.*.jar"/>
-		</fileset>
-	</path>
-	<path id="compile.classpath">
-		<fileset dir="${root.lib.dir}">
-			<include name="${ext.dir}/*.jar"/>
-			<include name="${j2ee.dir}/*.jar"/>
-			<include name="*.jar"/>
-		</fileset>
-	</path>
-	<target name="init">
-		<mkdir dir="${classes.dir}"/>
-	</target>
-	<target name="clean">
-		<delete dir="${classes.dir}"/>
-	</target>
-	<target name="compile" depends="init"
-		description="Compile all classes in the JAR.">
-		<javac srcdir="${src.dir}" destdir="${classes.dir}" debug="on"
-			target="1.1" source="1.3">
-			<classpath refid="compile.classpath"/>
-		</javac>
-	</target>
-	<!-- No particular need to use the ejbjar task here, this project isolates all the
-       VlibBeans related code into one place, so there's no need to "reconstruct" what's
-       needed from the deployment descriptors. -->
-	<target name="install" depends="compile"
-		description="Compile all classes and build the installed JAR including all package resources."
-		>
-		<mkdir dir="${examples.dir}"/>		
-		<jar jarfile="${examples.dir}/${vlibbeans.jar}">
-			<fileset dir="${classes.dir}"/>
-			<metainf dir=".">
-				<include name="*.xml"/>
-				<exclude name="build.xml"/>
-			</metainf>
-		</jar>
-	</target>
-</project>
diff --git a/3.0.4/examples/VlibBeans/createDb.sql b/3.0.4/examples/VlibBeans/createDb.sql
deleted file mode 100644
index 15735ea..0000000
--- a/3.0.4/examples/VlibBeans/createDb.sql
+++ /dev/null
@@ -1,67 +0,0 @@
-CREATE TABLE PROP

-(

-  NAME VARCHAR(32) NOT NULL,

-  PROP_VALUE INTEGER NOT NULL,

-

-  CONSTRAINT PROP_PK PRIMARY KEY(NAME)

-)

-

-CREATE TABLE PERSON

-(

-  PERSON_ID INTEGER NOT NULL,

-  LAST_NAME VARCHAR(30) NOT NULL,

-  FIRST_NAME VARCHAR(30),

-  EMAIL VARCHAR(60) NOT NULL,

-  PASSWD VARCHAR(20) NOT NULL,

-  VERIFIED BIT NOT NULL,

-  ADMIN BIT NOT NULL,

-  LOCKED_OUT BIT NOT NULL,

-  AUTH_CODE VARCHAR(30),

-  LAST_ACCESS TIMESTAMP,

-

-  CONSTRAINT PERSON_PK PRIMARY KEY (PERSON_ID)

-)

-

-CREATE TABLE PUBLISHER

-(

-  PUBLISHER_ID INTEGER NOT NULL,

-  NAME VARCHAR(40) NOT NULL,

-

-  CONSTRAINT PUBLISHER_PK PRIMARY KEY (PUBLISHER_ID),

-  UNIQUE (NAME)

-)

-

-ALTER TABLE PERSON ADD CONSTRAINT UNIQUE_EMAIL UNIQUE(EMAIL)

-

-CREATE TABLE BOOK

-(

-  BOOK_ID INTEGER NOT NULL,

-  AUTHOR VARCHAR(60) NOT NULL,

-  HOLDER_ID INTEGER NOT NULL INDEX_BLIST,

-  OWNER_ID INTEGER NOT NULL INDEX_BLIST,

-  TITLE VARCHAR(100) NOT NULL,

-  DESCRIPTION VARCHAR(2000),

-  ISBN VARCHAR(20),

-  PUBLISHER_ID INTEGER NOT NULL INDEX_BLIST,

-  LENDABLE BIT NOT NULL,

-  HIDDEN BIT NOT NULL,

-  DATE_ADDED TIMESTAMP NOT NULL,

-

-  CONSTRAINT BOOK_PK PRIMARY KEY (BOOK_ID),

-  CONSTRAINT HOLDER_FK FOREIGN KEY (HOLDER_ID) REFERENCES PERSON (PERSON_ID),

-  CONSTRAINT OWNER_FK FOREIGN KEY (OWNER_ID) REFERENCES PERSON (PERSON_ID),

-  CONSTRAINT PUBLISHER_FK FOREIGN KEY (PUBLISHER_ID) REFERENCES PUBLISHER (PUBLISHER_ID)

-)

-

-INSERT INTO PROP (NAME, PROP_VALUE) VALUES ("next-key", 5000)

-

-INSERT INTO PERSON (PERSON_ID, LAST_NAME, FIRST_NAME, EMAIL, PASSWD, VERIFIED, ADMIN, LOCKED_OUT, AUTH_CODE, LAST_ACCESS)

-VALUES (1000, 'Lewis Ship', 'Howard', 'hship@primix.com', 'secret', 1, 1, 0, NULL, DATEOB())

-

-INSERT INTO PERSON (PERSON_ID, LAST_NAME, FIRST_NAME, EMAIL, PASSWD, VERIFIED, ADMIN, LOCKED_OUT, AUTH_CODE, LAST_ACCESS)

-VALUES (1001, 'Queue', 'Suzy', 'squeue@bug.org', 'secret', 1, 0, 0, NULL, DATEOB())

-

-INSERT INTO PERSON (PERSON_ID, LAST_NAME, FIRST_NAME, EMAIL, PASSWD, VERIFIED, ADMIN, LOCKED_OUT, AUTH_CODE, LAST_ACCESS)

-VALUES (1002, 'CubeDweller', 'Dilbert', 'dilbert@bigco.com', 'secret', 1, 0, 0, NULL, DATEOB())

-

-

diff --git a/3.0.4/examples/VlibBeans/ejb-jar.xml b/3.0.4/examples/VlibBeans/ejb-jar.xml
deleted file mode 100644
index b383424..0000000
--- a/3.0.4/examples/VlibBeans/ejb-jar.xml
+++ /dev/null
@@ -1,324 +0,0 @@
-<?xml version="1.0"?>
-<!--$Id$-->
-<!DOCTYPE ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN" 
- "http://java.sun.com/dtd/ejb-jar_2_0.dtd">
- 
-<ejb-jar>
-  <enterprise-beans>
-    <session>
-      <display-name>KeyAllocator</display-name>
-      <ejb-name>KeyAllocator</ejb-name>
-      <home>org.apache.tapestry.vlib.ejb.IKeyAllocatorHome</home>
-      <remote>org.apache.tapestry.vlib.ejb.IKeyAllocator</remote>
-      <ejb-class>org.apache.tapestry.vlib.ejb.impl.KeyAllocatorBean</ejb-class>
-      <session-type>Stateless</session-type>
-      <transaction-type>Container</transaction-type>
-      <env-entry>
-        <description>The number of keys to allocate in one database transaction</description>
-        <env-entry-name>blockSize</env-entry-name>
-        <env-entry-type>java.lang.Integer</env-entry-type>
-        <env-entry-value>50</env-entry-value>
-      </env-entry>
-      <resource-ref>
-        <description>DataSource connected to the vlib database.</description>
-        <res-ref-name>jdbc/dataSource</res-ref-name>
-        <res-type>javax.sql.DataSource</res-type>
-        <res-auth>Container</res-auth>
-      </resource-ref>
-    </session>
-    <session>
-      <display-name>BookQuery</display-name>
-      <ejb-name>BookQuery</ejb-name>
-      <home>org.apache.tapestry.vlib.ejb.IBookQueryHome</home>
-      <remote>org.apache.tapestry.vlib.ejb.IBookQuery</remote>
-      <ejb-class>org.apache.tapestry.vlib.ejb.impl.BookQueryBean</ejb-class>
-      <session-type>Stateful</session-type>
-      <transaction-type>Container</transaction-type>
-      <resource-ref>
-        <description>DataSource connected to the vlib database.</description>
-        <res-ref-name>jdbc/dataSource</res-ref-name>
-        <res-type>javax.sql.DataSource</res-type>
-        <res-auth>Container</res-auth>
-      </resource-ref>
-    </session>
-    <session>
-      <ejb-name>Operations</ejb-name>
-      <home>org.apache.tapestry.vlib.ejb.IOperationsHome</home>
-      <remote>org.apache.tapestry.vlib.ejb.IOperations</remote>
-      <ejb-class>org.apache.tapestry.vlib.ejb.impl.OperationsBean</ejb-class>
-      <session-type>Stateless</session-type>
-      <transaction-type>Container</transaction-type>
-      <ejb-ref>
-        <ejb-ref-name>ejb/Book</ejb-ref-name>
-        <ejb-ref-type>Entity</ejb-ref-type>
-        <home>org.apache.tapestry.vlib.ejb.IBookHome</home>
-        <remote>org.apache.tapestry.vlib.ejb.IBook</remote>
-      </ejb-ref>
-      <ejb-ref>
-        <ejb-ref-name>ejb/Person</ejb-ref-name>
-        <ejb-ref-type>Entity</ejb-ref-type>
-        <home>org.apache.tapestry.vlib.ejb.IPersonHome</home>
-        <remote>org.apache.tapestry.vlib.ejb.IPerson</remote>
-      </ejb-ref>
-      <ejb-ref>
-        <ejb-ref-name>ejb/Publisher</ejb-ref-name>
-        <ejb-ref-type>Entity</ejb-ref-type>
-        <home>org.apache.tapestry.vlib.ejb.IPublisherHome</home>
-        <remote>org.apache.tapestry.vlib.ejb.IPublisher</remote>
-      </ejb-ref>
-      <resource-ref>
-        <description>DataSource connected to the vlib database.</description>
-        <res-ref-name>jdbc/dataSource</res-ref-name>
-        <res-type>javax.sql.DataSource</res-type>
-        <res-auth>Container</res-auth>
-      </resource-ref>
-    </session>
-     
-    <entity>
-      <display-name>Person</display-name>
-      <ejb-name>Person</ejb-name>
-      <home>org.apache.tapestry.vlib.ejb.IPersonHome</home>
-      <remote>org.apache.tapestry.vlib.ejb.IPerson</remote>
-      <ejb-class>org.apache.tapestry.vlib.ejb.impl.PersonBean</ejb-class>
-      <persistence-type>Container</persistence-type>
-      <prim-key-class>java.lang.Integer</prim-key-class>
-      <reentrant>False</reentrant>
-      
-      <abstract-schema-name>Person</abstract-schema-name>
-      
-      <cmp-field>
-        <description>email address; must be unique, used as login identifier</description>
-        <field-name>email</field-name>
-      </cmp-field>
-      <cmp-field>
-        <description>secret password</description>
-        <field-name>password</field-name>
-      </cmp-field>
-      <cmp-field>
-        <description>first (individual) name</description>
-        <field-name>firstName</field-name>
-      </cmp-field>
-      <cmp-field>
-        <description>primary key</description>
-        <field-name>personId</field-name>
-      </cmp-field>
-      <cmp-field>
-        <description>last (family) name</description>
-        <field-name>lastName</field-name>
-      </cmp-field>
-      <cmp-field>
-        <description>If true, the user has been locked out of the system (for misconduct, or excessive invalid passwords).</description>
-        <field-name>lockedOut</field-name>
-      </cmp-field>
-      <cmp-field>
-        <description>If true, the user is an administrator, who has priviledged access to adminstrate books and users.</description>
-        <field-name>admin</field-name>
-      </cmp-field>
-      <cmp-field>
-      	<description>The time of last access to the system by the user; this is set when the user logs in.</description>
-      	<field-name>lastAccess</field-name>
-      </cmp-field>
-      <primkey-field>personId</primkey-field>
-      
-      <query>
-      	<query-method>
-      		<method-name>findByEmail</method-name>
-      		<method-params>
-      			<method-param>java.lang.String</method-param>
-      		</method-params>
-      	</query-method>
-      		
-      	<ejb-ql>
-<![CDATA[
-			select object(p)
-			from Person p
-			where p.email = ?1
-]]>      	
-		</ejb-ql>
-	   </query>
-	   	
-      <ejb-ref>
-        <description/>
-        <ejb-ref-name>ejb/KeyAllocator</ejb-ref-name>
-        <ejb-ref-type>Session</ejb-ref-type>
-        <home>org.apache.tapestry.vlib.ejb.IKeyAllocatorHome</home>
-        <remote>org.apache.tapestry.vlib.ejb.IKeyAllocator</remote>
-      </ejb-ref>
-    </entity>
-    
-    <entity>
-      <display-name>Book</display-name>
-      <ejb-name>Book</ejb-name>
-      <home>org.apache.tapestry.vlib.ejb.IBookHome</home>
-      <remote>org.apache.tapestry.vlib.ejb.IBook</remote>
-      <ejb-class>org.apache.tapestry.vlib.ejb.impl.BookBean</ejb-class>
-      <persistence-type>Container</persistence-type>
-      <prim-key-class>java.lang.Integer</prim-key-class>
-      <reentrant>False</reentrant>
-      <abstract-schema-name>Book</abstract-schema-name>
-      <cmp-field>
-        <description>Long description of book.</description>
-        <field-name>description</field-name>
-      </cmp-field>
-      <cmp-field>
-        <description>Relationship to Publisher entity.</description>
-        <field-name>publisherId</field-name>
-      </cmp-field>
-      <cmp-field>
-        <description>Relationship to Person entity (holder of book).</description>
-        <field-name>holderId</field-name>
-      </cmp-field>
-      <cmp-field>
-        <description>ISBN of book.</description>
-        <field-name>ISBN</field-name>
-      </cmp-field>
-      <cmp-field>
-        <description>Primary key.</description>
-        <field-name>bookId</field-name>
-      </cmp-field>
-      <cmp-field>
-        <description>Relationship to Person entity (owner of book).</description>
-        <field-name>ownerId</field-name>
-      </cmp-field>
-      <cmp-field>
-        <description>Title of book.</description>
-        <field-name>title</field-name>
-      </cmp-field>
-      <cmp-field>
-        <description>Name of book author</description>
-        <field-name>author</field-name>
-      </cmp-field>
-      <cmp-field>
-        <description>If true, the book is not visible except to the owner.</description>
-        <field-name>hidden</field-name>
-      </cmp-field>
-      <cmp-field>
-        <description>If true (the default), the book may be lent out.</description>
-        <field-name>lendable</field-name>
-      </cmp-field>
-      <cmp-field>
-      	<description>The time at which the book was initially added to the database.</description>
-      	<field-name>dateAdded</field-name>
-      </cmp-field>
-      <primkey-field>bookId</primkey-field>
-      <ejb-ref>
-        <description/>
-        <ejb-ref-name>ejb/KeyAllocator</ejb-ref-name>
-        <ejb-ref-type>Session</ejb-ref-type>
-        <home>org.apache.tapestry.vlib.ejb.IKeyAllocatorHome</home>
-        <remote>org.apache.tapestry.vlib.ejb.IKeyAllocator</remote>
-      </ejb-ref>
-    </entity>
-
-    <entity>
-      <display-name>Publisher</display-name>
-      <ejb-name>Publisher</ejb-name>
-      <home>org.apache.tapestry.vlib.ejb.IPublisherHome</home>
-      <remote>org.apache.tapestry.vlib.ejb.IPublisher</remote>
-      <ejb-class>org.apache.tapestry.vlib.ejb.impl.PublisherBean</ejb-class>
-      <persistence-type>Container</persistence-type>
-      <prim-key-class>java.lang.Integer</prim-key-class>
-      <reentrant>False</reentrant>
-      <abstract-schema-name>Publisher</abstract-schema-name>
-      <cmp-field>
-        <field-name>name</field-name>
-      </cmp-field>
-      <cmp-field>
-        <field-name>publisherId</field-name>
-      </cmp-field>
-      <primkey-field>publisherId</primkey-field>
-      
-      
-      <query>
-      	<query-method>
-      		<method-name>findByName</method-name>
-      		<method-params>
-      			<method-param>java.lang.String</method-param>
-      		</method-params>
-      	</query-method>
-      		
-      	<ejb-ql>
-<![CDATA[
-			select object(p)
-			from Publisher p
-			where p.name = ?1
-]]>      	
-		</ejb-ql>
-	   </query>
-	         
-      <ejb-ref>
-        <description/>
-        <ejb-ref-name>ejb/KeyAllocator</ejb-ref-name>
-        <ejb-ref-type>Session</ejb-ref-type>
-        <home>org.apache.tapestry.vlib.ejb.IKeyAllocatorHome</home>
-        <remote>org.apache.tapestry.vlib.ejb.IKeyAllocator</remote>
-      </ejb-ref>
-    </entity>
-    
-    <!-- Temporarily removed 
-    
-    <message-driven>
-      <ejb-name>MailQueue</ejb-name>
-      <ejb-class>org.apache.tapestry.vlib.ejb.impl.MailQueueBean</ejb-class>
-      <transaction-type>Bean</transaction-type>
-      <message-selector/>
-      <acknowledge-mode>AUTO_ACKNOWLEDGE</acknowledge-mode>
-      <message-driven-destination>
-        <destination-type>javax.jms.Queue</destination-type>
-        <subscription-durability>NonDurable</subscription-durability>
-      </message-driven-destination>
-      <ejb-ref>
-        <ejb-ref-name>ejb/MailSender</ejb-ref-name>
-        <ejb-ref-type>Session</ejb-ref-type>
-        <home>org.apache.tapestry.vlib.ejb.IMailSenderHome</home>
-        <remote>org.apache.tapestry.vlib.ejb.IMailSender</remote>
-      </ejb-ref>
-    </message-driven>
-    
-    -->
-    
-  </enterprise-beans>
-  <assembly-descriptor>
-    <container-transaction>
-      <method>
-        <ejb-name>KeyAllocator</ejb-name>
-        <method-name>*</method-name>
-      </method>
-      <method>
-        <ejb-name>Person</ejb-name>
-        <method-name>*</method-name>
-      </method>
-      <method>
-        <ejb-name>Book</ejb-name>
-        <method-name>*</method-name>
-      </method>
-      <method>
-        <ejb-name>Publisher</ejb-name>
-        <method-name>*</method-name>
-      </method>
-      <method>
-        <ejb-name>BookQuery</ejb-name>
-        <method-name>*</method-name>
-      </method>
-      <method>
-        <ejb-name>Operations</ejb-name>
-        <method-name>*</method-name>
-      </method>
-      
-      <!--
-      
-      <method>
-        <ejb-name>MailQueue</ejb-name>
-        <method-name>*</method-name>
-      </method>
-      <method>
-        <ejb-name>MailSender</ejb-name>
-        <method-name>*</method-name>
-      </method>
-      
-      -->
-      
-      <trans-attribute>Required</trans-attribute>
-    </container-transaction>
-  </assembly-descriptor>
-</ejb-jar>
diff --git a/3.0.4/examples/VlibBeans/jboss.xml b/3.0.4/examples/VlibBeans/jboss.xml
deleted file mode 100644
index fa275d0..0000000
--- a/3.0.4/examples/VlibBeans/jboss.xml
+++ /dev/null
@@ -1,77 +0,0 @@
-<?xml version="1.0"?>
-<jboss>
-  <secure>true</secure>
-  <resource-managers>
-    <resource-manager res-class="org.jboss.ejb.deployment.JDBCResource">
-      <res-name>jdbc/dataSource</res-name>
-      <res-jndi-name>java:/McKoiDB</res-jndi-name>
-    </resource-manager>
-    
-  </resource-managers>
-  <enterprise-beans>
-    <session>
-      <ejb-name>BookQuery</ejb-name>
-      <jndi-name>vlib/BookQuery</jndi-name>
-      <resource-ref>
-        <res-ref-name>jdbc/dataSource</res-ref-name>
-        <resource-name>jdbc/dataSource</resource-name>
-      </resource-ref>
-    </session>
-    <session>
-      <ejb-name>Operations</ejb-name>
-      <jndi-name>vlib/Operations</jndi-name>
-      <ejb-ref>
-        <ejb-ref-name>ejb/Book</ejb-ref-name>
-        <jndi-name>vlib/Book</jndi-name>
-      </ejb-ref>
-      <ejb-ref>
-        <ejb-ref-name>ejb/Person</ejb-ref-name>
-        <jndi-name>vlib/Person</jndi-name>
-      </ejb-ref>
-      <ejb-ref>
-        <ejb-ref-name>ejb/Publisher</ejb-ref-name>
-        <jndi-name>vlib/Publisher</jndi-name>
-      </ejb-ref>
-      <resource-ref>
-        <res-ref-name>jdbc/dataSource</res-ref-name>
-        <resource-name>jdbc/dataSource</resource-name>
-      </resource-ref>
-    </session>
-    <session>
-      <ejb-name>KeyAllocator</ejb-name>
-      <jndi-name>vlib/KeyAllocator</jndi-name>
-      <resource-ref>
-        <res-ref-name>jdbc/dataSource</res-ref-name>
-        <resource-name>jdbc/dataSource</resource-name>
-      </resource-ref>
-    </session>
-    
-    
-    <entity>
-      <ejb-name>Book</ejb-name>
-      <jndi-name>vlib/Book</jndi-name>
-      <ejb-ref>
-        <ejb-ref-name>ejb/KeyAllocator</ejb-ref-name>
-        <jndi-name>vlib/KeyAllocator</jndi-name>
-      </ejb-ref>
-    </entity>
-    <entity>
-      <ejb-name>Publisher</ejb-name>
-      <jndi-name>vlib/Publisher</jndi-name>
-      <ejb-ref>
-        <ejb-ref-name>ejb/KeyAllocator</ejb-ref-name>
-        <jndi-name>vlib/KeyAllocator</jndi-name>
-      </ejb-ref>
-    </entity>
-    <entity>
-      <ejb-name>Person</ejb-name>
-      <jndi-name>vlib/Person</jndi-name>
-      <ejb-ref>
-        <ejb-ref-name>ejb/KeyAllocator</ejb-ref-name>
-        <jndi-name>vlib/KeyAllocator</jndi-name>
-      </ejb-ref>
-    </entity>
-   
-    
-  </enterprise-beans>
-</jboss>
diff --git a/3.0.4/examples/VlibBeans/jbosscmp-jdbc.xml b/3.0.4/examples/VlibBeans/jbosscmp-jdbc.xml
deleted file mode 100644
index 6ad6338..0000000
--- a/3.0.4/examples/VlibBeans/jbosscmp-jdbc.xml
+++ /dev/null
@@ -1,157 +0,0 @@
-<?xml version="1.0"?>
-
-  <!DOCTYPE jbosscmp-jdbc PUBLIC
-      "-//JBoss//DTD JBOSSCMP-JDBC 3.0//EN"
-      "http://www.jboss.org/j2ee/dtd/jbosscmp-jdbc_3_0.dtd">
-      
-      
-<jbosscmp-jdbc>
-	<defaults>
-  		<datasource>java:/McKoiDB</datasource>       
-  		<datasource-mapping>McKoi</datasource-mapping>
-  	</defaults>
-  
-  <enterprise-beans>
-    <entity>
-      <ejb-name>Book</ejb-name>
-      <table-name>BOOK</table-name>
-	  
-      <cmp-field>
-        <field-name>author</field-name>
-        <column-name>AUTHOR</column-name>
-        <jdbc-type>VARCHAR</jdbc-type>
-        <sql-type>VARCHAR(100)</sql-type>
-      </cmp-field>
-      <cmp-field>
-        <field-name>holderId</field-name>
-        <column-name>HOLDER_ID</column-name>
-        <jdbc-type>INTEGER</jdbc-type>
-        <sql-type>INTEGER</sql-type>
-      </cmp-field>
-      <cmp-field>
-        <field-name>publisherId</field-name>
-        <column-name>PUBLISHER_ID</column-name>
-        <jdbc-type>INTEGER</jdbc-type>
-        <sql-type>INTEGER</sql-type>
-      </cmp-field>
-      <cmp-field>
-        <field-name>ownerId</field-name>
-        <column-name>OWNER_ID</column-name>
-        <jdbc-type>INTEGER</jdbc-type>
-        <sql-type>INTEGER</sql-type>
-      </cmp-field>
-      <cmp-field>
-        <field-name>title</field-name>
-        <column-name>TITLE</column-name>
-        <jdbc-type>VARCHAR</jdbc-type>
-        <sql-type>VARCHAR(100)</sql-type>
-      </cmp-field>
-      <cmp-field>
-        <field-name>description</field-name>
-        <column-name>DESCRIPTION</column-name>
-        <jdbc-type>VARCHAR</jdbc-type>
-        <sql-type>VARCHAR(2000)</sql-type>
-      </cmp-field>
-      <cmp-field>
-        <field-name>ISBN</field-name>
-        <column-name>ISBN</column-name>
-        <jdbc-type>VARCHAR</jdbc-type>
-       <sql-type>VARCHAR(20)</sql-type>
-      </cmp-field>
-      <cmp-field>
-        <field-name>bookId</field-name>
-        <column-name>BOOK_ID</column-name>
-        <jdbc-type>INTEGER</jdbc-type>
-        <sql-type>INTEGER</sql-type>
-      </cmp-field>
-      <cmp-field>
-        <field-name>hidden</field-name>
-        <column-name>HIDDEN</column-name>
-        <jdbc-type>BIT</jdbc-type>
-        <sql-type>BIT</sql-type>
-      </cmp-field>
-      <cmp-field>
-        <field-name>lendable</field-name>
-        <column-name>LENDABLE</column-name>
-        <jdbc-type>BIT</jdbc-type>
-        <sql-type>BIT</sql-type>
-      </cmp-field>
-      <cmp-field>
-        <field-name>dateAdded</field-name>
-        <column-name>DATE_ADDED</column-name>
-        <jdbc-type>TIMESTAMP</jdbc-type>
-        <sql-type>TIMESTAMP</sql-type>
-      </cmp-field>
-    </entity>
-    <entity>
-      <ejb-name>Person</ejb-name>
-      <table-name>PERSON</table-name>
-
-      <cmp-field>
-        <field-name>email</field-name>
-        <column-name>EMAIL</column-name>
-        <jdbc-type>VARCHAR</jdbc-type>
-        <sql-type>VARCHAR(60)</sql-type>
-      </cmp-field>
-      <cmp-field>
-        <field-name>firstName</field-name>
-        <column-name>FIRST_NAME</column-name>
-        <jdbc-type>VARCHAR</jdbc-type>
-        <sql-type>VARCHAR(30)</sql-type>
-      </cmp-field>
-      <cmp-field>
-        <field-name>password</field-name>
-        <column-name>PASSWD</column-name>
-        <jdbc-type>VARCHAR</jdbc-type>
-        <sql-type>VARCHAR(20)</sql-type>
-      </cmp-field>
-      <cmp-field>
-        <field-name>personId</field-name>
-        <column-name>PERSON_ID</column-name>
-        <jdbc-type>INTEGER</jdbc-type>
-        <sql-type>INTEGER</sql-type>
-      </cmp-field>
-      <cmp-field>
-        <field-name>lastName</field-name>
-        <column-name>LAST_NAME</column-name>
-        <jdbc-type>VARCHAR</jdbc-type>
-        <sql-type>VARCHAR(30)</sql-type>
-      </cmp-field>
-      <cmp-field>
-        <field-name>lockedOut</field-name>
-        <column-name>LOCKED_OUT</column-name>
-        <jdbc-type>BIT</jdbc-type>
-        <sql-type>BIT</sql-type>
-      </cmp-field>
-      <cmp-field>
-        <field-name>admin</field-name>
-        <column-name>ADMIN</column-name>
-        <jdbc-type>BIT</jdbc-type>
-        <sql-type>BIT</sql-type>
-      </cmp-field>
-      <cmp-field>
-        <field-name>lastAccess</field-name>
-        <column-name>LAST_ACCESS</column-name>
-        <jdbc-type>TIMESTAMP</jdbc-type>
-        <sql-type>TIMESTAMP</sql-type>
-      </cmp-field>
-    </entity>
-    <entity>
-      <ejb-name>Publisher</ejb-name>
-      <table-name>PUBLISHER</table-name>
-      
-      <cmp-field>
-        <field-name>publisherId</field-name>
-        <column-name>PUBLISHER_ID</column-name>
-        <jdbc-type>INTEGER</jdbc-type>
-        <sql-type>INTEGER</sql-type>
-      </cmp-field>
-      <cmp-field>
-        <field-name>name</field-name>
-        <column-name>NAME</column-name>
-        <jdbc-type>VARCHAR</jdbc-type>
-        <sql-type>VARCHAR(40)</sql-type>
-      </cmp-field>
-    </entity>
-  </enterprise-beans>
-</jbosscmp-jdbc>
diff --git a/3.0.4/examples/VlibBeans/src/org/apache/tapestry/vlib/ejb/Book.java b/3.0.4/examples/VlibBeans/src/org/apache/tapestry/vlib/ejb/Book.java
deleted file mode 100644
index 8c90710..0000000
--- a/3.0.4/examples/VlibBeans/src/org/apache/tapestry/vlib/ejb/Book.java
+++ /dev/null
@@ -1,205 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.vlib.ejb;
-
-import java.io.Serializable;
-import java.sql.Timestamp;
-
-/**
- *  Represents a single result row from a {@link IBookQuery}.  In effect,
- *  this is a light-wieght, serializable, read-only version of an {@link IBook}
- *  bean, plus it contains the owner and holder name (which means we don't
- *  have to go find the correct {@link IPerson} to dig out the name).
- *
- *  <p>This is provided for efficient access when doing various queries.
- *
- *  @version $Id$
- *  @author Howard Lewis Ship
- *
- **/
-
-public class Book implements Serializable
-{
-    private static final long serialVersionUID = -3423550323411938995L;
-    
-    /**
-     *  Column index for the Book's primary key.
-     *
-     **/
-
-    public static final int ID_COLUMN = 0;
-
-    /**
-     *  Column index for the book title.
-     *
-     **/
-
-    public static final int TITLE_COLUMN = 1;
-
-    public static final int DESCRIPTION_COLUMN = 2;
-    public static final int ISBN_COLUMN = 3;
-    public static final int OWNER_ID_COLUMN = 4;
-
-    /**
-     *  Column index for a presentable version of the holder's name.
-     *
-     *  @see IPerson#getNaturalName()
-     *
-     **/
-
-    public static final int OWNER_NAME_COLUMN = 5;
-
-    public static final int HOLDER_ID_COLUMN = 6;
-    public static final int HOLDER_NAME_COLUMN = 7;
-    public static final int PUBLISHER_ID_COLUMN = 8;
-    public static final int PUBLISHER_NAME_COLUMN = 9;
-    public static final int AUTHOR_COLUMN = 10;
-
-    public static final int HIDDEN_COLUMN = 11;
-    public static final int LENDABLE_COLUMN = 12;
-    public static final int DATE_ADDED_COLUMN = 13;
-
-    /**
-     *  Number of columns in the result.
-     *
-     **/
-
-    public static final int N_COLUMNS = 14;
-
-    private Object[] columns;
-
-    /**
-     *  Constructs a new BookQueryResult, making an internal copy of the columns passed.
-     *
-     **/
-
-    public Book(Object[] columns)
-    {
-        if (columns == null)
-            throw new IllegalArgumentException("Must provide a non-null columns.");
-
-        if (columns.length != N_COLUMNS)
-            throw new IllegalArgumentException("Wrong number of columns for a Book.");
-
-        this.columns = new Object[N_COLUMNS];
-        System.arraycopy(columns, 0, this.columns, 0, N_COLUMNS);
-    }
-
-    private Object get(int index)
-    {
-        return columns[index];
-    }
-
-    public Integer getId()
-    {
-        return (Integer) get(ID_COLUMN);
-    }
-
-    public String getTitle()
-    {
-        return (String) get(TITLE_COLUMN);
-    }
-
-    public String getDescription()
-    {
-        return (String) get(DESCRIPTION_COLUMN);
-    }
-
-    public String getISBN()
-    {
-        return (String) get(ISBN_COLUMN);
-    }
-
-    public Integer getOwnerId()
-    {
-        return (Integer) get(OWNER_ID_COLUMN);
-    }
-
-    public String getOwnerName()
-    {
-        return (String) get(OWNER_NAME_COLUMN);
-    }
-
-    public Integer getHolderId()
-    {
-        return (Integer) get(HOLDER_ID_COLUMN);
-    }
-
-    public String getHolderName()
-    {
-        return (String) get(HOLDER_NAME_COLUMN);
-    }
-
-    public Integer getPublisherId()
-    {
-        return (Integer) get(PUBLISHER_ID_COLUMN);
-    }
-
-    public String getPublisherName()
-    {
-        return (String) get(PUBLISHER_NAME_COLUMN);
-    }
-
-    public String getAuthor()
-    {
-        return (String) get(AUTHOR_COLUMN);
-    }
-
-    public Timestamp getDateAdded()
-    {
-        return (Timestamp) get(DATE_ADDED_COLUMN);
-    }
-
-    public String toString()
-    {
-        StringBuffer buffer;
-
-        buffer = new StringBuffer("Book[");
-        buffer.append(get(ID_COLUMN));
-        buffer.append(' ');
-        buffer.append(get(TITLE_COLUMN));
-        buffer.append(']');
-
-        return buffer.toString();
-    }
-
-    /**
-     *  Returns true if the book is borrowed; that is, if its holder doesn't
-     *  match its owner.
-     *
-     **/
-
-    public boolean isBorrowed()
-    {
-        return !get(HOLDER_ID_COLUMN).equals(get(OWNER_ID_COLUMN));
-    }
-
-    public boolean isHidden()
-    {
-        return getBit(HIDDEN_COLUMN);
-    }
-
-    public boolean isLendable()
-    {
-        return getBit(LENDABLE_COLUMN);
-    }
-
-    private boolean getBit(int column)
-    {
-        Boolean b = (Boolean) get(column);
-
-        return b.booleanValue();
-    }
-}
\ No newline at end of file
diff --git a/3.0.4/examples/VlibBeans/src/org/apache/tapestry/vlib/ejb/BorrowException.java b/3.0.4/examples/VlibBeans/src/org/apache/tapestry/vlib/ejb/BorrowException.java
deleted file mode 100644
index 9b777a4..0000000
--- a/3.0.4/examples/VlibBeans/src/org/apache/tapestry/vlib/ejb/BorrowException.java
+++ /dev/null
@@ -1,33 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.vlib.ejb;
-
-/**
- *  Throws when a book may not be borrowed.
- *
- *  @see IOperations#borrowBook(Integer,Integer)
- *
- *  @version $Id$
- *  @author Howard Lewis Ship
- * 
- **/
-
-public class BorrowException extends Exception
-{
-    public BorrowException(String message)
-    {
-        super(message);
-    }
-}
\ No newline at end of file
diff --git a/3.0.4/examples/VlibBeans/src/org/apache/tapestry/vlib/ejb/IBook.java b/3.0.4/examples/VlibBeans/src/org/apache/tapestry/vlib/ejb/IBook.java
deleted file mode 100644
index 5fab421..0000000
--- a/3.0.4/examples/VlibBeans/src/org/apache/tapestry/vlib/ejb/IBook.java
+++ /dev/null
@@ -1,69 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.vlib.ejb;
-
-import java.rmi.RemoteException;
-import java.sql.Timestamp;
-
-/**
- *  Remote interface for the Book entity bean.
- *
- *  @version $Id$
- *  @author Howard Lewis Ship
- *
- **/
-
-public interface IBook extends IEntityBean
-{
-    public void setAuthor(String value) throws RemoteException;
-
-    public String getAuthor() throws RemoteException;
-
-    public void setTitle(String value) throws RemoteException;
-
-    public String getTitle() throws RemoteException;
-
-    public void setDescription(String value) throws RemoteException;
-
-    public String getDescription() throws RemoteException;
-
-    public void setISBN(String value) throws RemoteException;
-
-    public String getISBN() throws RemoteException;
-
-    public void setOwnerId(Integer value) throws RemoteException;
-
-    public Integer getOwnerId() throws RemoteException;
-
-    public void setHolderId(Integer value) throws RemoteException;
-
-    public Integer getHolderId() throws RemoteException;
-
-    public void setPublisherId(Integer value) throws RemoteException;
-    
-    public Integer getPublisherId() throws RemoteException;
-
-    public boolean getHidden() throws RemoteException;
-
-    public void setHidden(boolean value) throws RemoteException;
-
-    public boolean getLendable() throws RemoteException;
-
-    public void setLendable(boolean value) throws RemoteException;
-
-    public Timestamp getDateAdded() throws RemoteException;
-
-    public void setDateAdded(Timestamp value) throws RemoteException;
-}
\ No newline at end of file
diff --git a/3.0.4/examples/VlibBeans/src/org/apache/tapestry/vlib/ejb/IBookHome.java b/3.0.4/examples/VlibBeans/src/org/apache/tapestry/vlib/ejb/IBookHome.java
deleted file mode 100644
index fbccea9..0000000
--- a/3.0.4/examples/VlibBeans/src/org/apache/tapestry/vlib/ejb/IBookHome.java
+++ /dev/null
@@ -1,37 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.vlib.ejb;
-
-import java.rmi.RemoteException;
-import java.util.Map;
-
-import javax.ejb.CreateException;
-import javax.ejb.EJBHome;
-import javax.ejb.FinderException;
-
-/**
- *  Home interface for the {@link IBook} entity bean.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *
- **/
-
-public interface IBookHome extends EJBHome
-{
-    public IBook create(Map attributes) throws CreateException, RemoteException;
-
-    public IBook findByPrimaryKey(Integer key) throws FinderException, RemoteException;
-}
\ No newline at end of file
diff --git a/3.0.4/examples/VlibBeans/src/org/apache/tapestry/vlib/ejb/IBookQuery.java b/3.0.4/examples/VlibBeans/src/org/apache/tapestry/vlib/ejb/IBookQuery.java
deleted file mode 100644
index 6a8d167..0000000
--- a/3.0.4/examples/VlibBeans/src/org/apache/tapestry/vlib/ejb/IBookQuery.java
+++ /dev/null
@@ -1,75 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.vlib.ejb;
-
-import java.rmi.RemoteException;
-
-import javax.ejb.EJBObject;
-
-/**
- *  Remote interface for the BookQuery stateless session bean.
- *
- *  @version $Id$
- *  @author Howard Lewis Ship
- *
- **/
-
-public interface IBookQuery extends EJBObject
-{
-    /**
-     *  Returns the total number of results rows in the query.
-     *
-     **/
-
-    public int getResultCount() throws RemoteException;
-
-    /**
-     *  Returns a selected subset of the results.
-     *
-     **/
-
-    public Book[] get(int offset, int length) throws RemoteException;
-
-    /**
-     *  Performs a query of books with the matching title and (optionally) publisher.
-     *
-     *  @param parameters defines subset of books to return.
-     *  @param sortOrdering order of items in result set.
-     *
-     **/
-
-    public int masterQuery(MasterQueryParameters parameters, SortOrdering sortOrdering) throws RemoteException;
-
-    /**
-     *  Queries on books owned by a given person.
-     *
-     **/
-
-    public int ownerQuery(Integer ownerPK, SortOrdering sortOrdering) throws RemoteException;
-
-    /**
-     *  Queries on books held by a given person.
-     *
-     **/
-
-    public int holderQuery(Integer holderPK, SortOrdering sortOrdering) throws RemoteException;
-
-    /**
-     *  Queries the list of books held by the borrower but not owned by the borrower.
-     *
-     **/
-
-    public int borrowerQuery(Integer borrowerPK, SortOrdering sortOrdering) throws RemoteException;
-}
\ No newline at end of file
diff --git a/3.0.4/examples/VlibBeans/src/org/apache/tapestry/vlib/ejb/IBookQueryHome.java b/3.0.4/examples/VlibBeans/src/org/apache/tapestry/vlib/ejb/IBookQueryHome.java
deleted file mode 100644
index ab7c7fe..0000000
--- a/3.0.4/examples/VlibBeans/src/org/apache/tapestry/vlib/ejb/IBookQueryHome.java
+++ /dev/null
@@ -1,33 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.vlib.ejb;
-
-import java.rmi.RemoteException;
-
-import javax.ejb.CreateException;
-import javax.ejb.EJBHome;
-
-/**
- *  Home interface for the {@link IBookQuery} session bean.
- *
- *  @version $Id$
- *  @author Howard Lewis Ship
- *
- **/
-
-public interface IBookQueryHome extends EJBHome
-{
-    public IBookQuery create() throws CreateException, RemoteException;
-}
\ No newline at end of file
diff --git a/3.0.4/examples/VlibBeans/src/org/apache/tapestry/vlib/ejb/IEntityBean.java b/3.0.4/examples/VlibBeans/src/org/apache/tapestry/vlib/ejb/IEntityBean.java
deleted file mode 100644
index caf1b43..0000000
--- a/3.0.4/examples/VlibBeans/src/org/apache/tapestry/vlib/ejb/IEntityBean.java
+++ /dev/null
@@ -1,46 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.vlib.ejb;
-
-import java.rmi.RemoteException;
-import java.util.Map;
-
-import javax.ejb.EJBObject;
-
-/** 
- *  Defines the remove interface for an entity which can download and upload
- *  a subset of its properties as a {@link Map}.
- *
- *  @version $Id$
- *  @author Howard Lewis Ship
- *
- **/
-
-public interface IEntityBean extends EJBObject
-{
-	/**
-	 *  Returns the simple attributes of the entity as a Map.
-	 *
-	 **/
-
-	public Map getEntityAttributes() throws RemoteException;
-
-	/**
-	 *  Updates some or all of the properties of the entity.
-	 *
-	 **/
-
-	public void updateEntityAttributes(Map data) throws RemoteException;
-}
\ No newline at end of file
diff --git a/3.0.4/examples/VlibBeans/src/org/apache/tapestry/vlib/ejb/IKeyAllocator.java b/3.0.4/examples/VlibBeans/src/org/apache/tapestry/vlib/ejb/IKeyAllocator.java
deleted file mode 100644
index c90f6a7..0000000
--- a/3.0.4/examples/VlibBeans/src/org/apache/tapestry/vlib/ejb/IKeyAllocator.java
+++ /dev/null
@@ -1,50 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.vlib.ejb;
-
-import java.rmi.RemoteException;
-
-import javax.ejb.EJBObject;
-
-/**
- *  Remote interface to the KeyAllocator stateless
- *  session bean.
- *  
- *  @version $Id$
- *  @author Howard Lewis Ship
- *
- */
-
-public interface IKeyAllocator extends EJBObject
-{
-    /**
-     *  Allocates a new key, possibling reserving it from
-     *  the database.  The value returned is guarenteed to
-     *  not have been previously returned by any instance.
-     *
-     */
-
-    public Integer allocateKey() throws RemoteException;
-
-    /**
-     * Allocates several keys, as if invoking {@link #allocateKey}
-     * multiple times.  No guarentees are made that the
-     * values are sequential or in any order, just that they
-     * are unique.
-     *
-     */
-
-    public Integer[] allocateKeys(int count) throws RemoteException;
-}
\ No newline at end of file
diff --git a/3.0.4/examples/VlibBeans/src/org/apache/tapestry/vlib/ejb/IKeyAllocatorHome.java b/3.0.4/examples/VlibBeans/src/org/apache/tapestry/vlib/ejb/IKeyAllocatorHome.java
deleted file mode 100644
index d1d504e..0000000
--- a/3.0.4/examples/VlibBeans/src/org/apache/tapestry/vlib/ejb/IKeyAllocatorHome.java
+++ /dev/null
@@ -1,34 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.vlib.ejb;
-
-import java.rmi.RemoteException;
-
-import javax.ejb.CreateException;
-import javax.ejb.EJBHome;
-
-/**
- *  Home interface to the {@link IKeyAllocator} stateless
- *  session bean.
- *  
- *  @version $Id$
- *  @author Howard Lewis Ship
- *
- **/
-
-public interface IKeyAllocatorHome extends EJBHome
-{
-	public IKeyAllocator create() throws CreateException, RemoteException;
-}
\ No newline at end of file
diff --git a/3.0.4/examples/VlibBeans/src/org/apache/tapestry/vlib/ejb/IOperations.java b/3.0.4/examples/VlibBeans/src/org/apache/tapestry/vlib/ejb/IOperations.java
deleted file mode 100644
index e2b8c47..0000000
--- a/3.0.4/examples/VlibBeans/src/org/apache/tapestry/vlib/ejb/IOperations.java
+++ /dev/null
@@ -1,230 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.vlib.ejb;
-
-import java.rmi.RemoteException;
-import java.util.Map;
-
-import javax.ejb.CreateException;
-import javax.ejb.EJBObject;
-import javax.ejb.FinderException;
-import javax.ejb.RemoveException;
-
-/**
- *  Remote interface to the Operations stateless
- *  session bean.  A repository for simple operations such as
- *  adding a new book or borrowing an existing book.
- *  
- *  @version $Id$
- *  @author Howard Lewis Ship
- *
- **/
-
-public interface IOperations extends EJBObject
-{
-    /**
-     *  Locates the book and the borrower, then sets the holder of the book
-     *  to the borrower and increments the lend count on the book.
-     *
-     **/
-
-    public Book borrowBook(Integer bookdId, Integer borrowerId)
-        throws BorrowException, FinderException, RemoteException;
-
-    /**
-     *  Adds a book which will be owned and held by the specified owner.
-     *
-     *  <p>Returns the primary key of the newly created book.
-     **/
-
-    public Integer addBook(Map attributes) throws CreateException, RemoteException;
-
-    /**
-     *  Adds a book, which will be owned and help by the specified owner.
-     *
-     *  <p>The publisherName may either be the name of a known publisher, or
-     *  a new name.  A new {@link IPublisher} will be created as necessary.
-     *
-     *  <p>Returns the primary key of the newly created book.
-     *
-     **/
-
-    public Integer addBook(Map attributes, String publisherName)
-        throws CreateException, RemoteException;
-
-    /**
-     *  Updates a book to an existing publisher.
-     *
-     **/
-
-    public void updateBook(Integer bookId, Map attributes) throws FinderException, RemoteException;
-
-    /**
-     *  Updates a book for a unknown publisher.
-     *
-     **/
-
-    public void updateBook(Integer bookId, Map attributes, String publisherName)
-        throws CreateException, FinderException, RemoteException;
-
-    /**
-     *  Updates a Person.  Returns the attributes of the update person.
-     *
-     **/
-
-    public void updatePerson(Integer personId, Map attributes) throws FinderException, RemoteException;
-
-    /**
-     *  Retrieves the light-weight version of all {@link IPublisher} beans, sorted by name.
-     *
-     **/
-
-    public Publisher[] getPublishers() throws RemoteException;
-
-    /**
-     *  Retrieves the light-weight version of all the {@link IPerson} beans, sorted
-     *  by last name, then by first name.
-     *
-     **/
-
-    public Person[] getPersons() throws RemoteException;
-
-    /**
-     *  Retrieves a single {@link Person} by its primary key.
-     *
-     *  @throws FinderException if the Person does not exist.
-     *
-     **/
-
-    public Person getPerson(Integer personId) throws FinderException, RemoteException;
-
-    /**
-     *  Attempts to login the user in.
-     *
-     *  @return the user
-     *  @throws LoginException if the email address is invalid, the password
-     *  is invalid, or the user may not log in for other reasons.
-     *
-     **/
-
-    public Person login(String email, String password) throws LoginException, RemoteException;
-
-    /**
-     *  Retrieves the attributes of a {@link IPerson} as a {@link Map}.
-     *
-     **/
-
-    public Map getPersonAttributes(Integer personId) throws FinderException, RemoteException;
-
-    /**
-     *  Retrieves a single {@link Book} by its primary key.  Returns the
-     *  book's attributes as a {@link Map}.
-     *
-     *  @throws FinderException if the Book does not exist.
-     *
-     **/
-
-    public Book getBook(Integer bookId) throws FinderException, RemoteException;
-
-    /**
-     *  Retrieves the attributes of a {@link IBook} as a {@link Map}.
-     *
-     **/
-
-    public Map getBookAttributes(Integer bookId) throws FinderException, RemoteException;
-
-    /**
-     *  Attempts to register a new user, first checking that the
-     *  e-mail and names are unique.  Returns the primary key of
-     *  the new {@link IPerson}.
-     *
-     **/
-
-    public Person registerNewUser(String firstName, String lastName, String email, String password)
-        throws RegistrationException, CreateException, RemoteException;
-
-    /**
-     *  Returns a book to its owner.
-     *
-     *  @throws FinderException if the book is not known.
-     *
-     **/
-
-    public Book returnBook(Integer bookId) throws RemoteException, FinderException;
-
-    /**
-     *  Deletes a Book.
-     *
-     *  @return the Book as it was before being deleted.
-     **/
-
-    public Book deleteBook(Integer bookId) throws RemoveException, RemoteException;
-
-    /**
-     *  Transfers a number of books to a new owner.
-     *
-     **/
-
-    public void transferBooks(Integer newOwnerId, Integer[] bookIds)
-        throws FinderException, RemoteException;
-
-    /**
-     *  Updates the list of Publishers in the database.
-     *
-     *
-     *  @param updated an array of {@link Publisher} used to update
-     *  existing publishers (used to change their names).  May be null or
-     *  empty.
-     *  @param deleted an array of {@link Integer}, the primary key
-     *  of any publisher to be deleted.  No check is made that 
-     *  existing books aren't tied to this Publisher.  May be null or
-     *  empty.
-     **/
-
-    public void updatePublishers(Publisher[] updated, Integer[] deleted)
-        throws FinderException, RemoveException, RemoteException;
-
-    /**
-     *  Updates a list of Persons.  Main functionality is to allow 
-     *  an administrator to edit the following attributes of a Person:
-     *  <ul>
-     *	<li>admin
-     *	<li>lockedOut
-     *	</ul>
-     *
-     * <p>Explicitly, names and email addresses may not be changed.
-     *
-     * <p>In addition, users may be deleted entirely, or may have their password reset.
-     *
-     *  @param updated a list of persons to update.  May be null or empty.
-     *  @param resetPassword  a list of primary keys; corresponding Persons will
-     *  have thier password reset.  May be null or empty.
-     *  @param newPassword the password to be set for each user in resetPassword 
-     *  @param deleted a list of persons to delete.  Books owned by any of these persons
-     *  are transfered to the administrator.  May be null or empty.
-     *  @param adminId the administrator performing the operation; books may be transferred
-     *  to this person.
-     *
-     **/
-
-    public void updatePersons(
-        Person[] updated,
-        Integer[] resetPassword,
-        String newPassword,
-        Integer[] deleted,
-        Integer adminId)
-        throws FinderException, RemoveException, RemoteException;
-
-}
\ No newline at end of file
diff --git a/3.0.4/examples/VlibBeans/src/org/apache/tapestry/vlib/ejb/IOperationsHome.java b/3.0.4/examples/VlibBeans/src/org/apache/tapestry/vlib/ejb/IOperationsHome.java
deleted file mode 100644
index 6392c83..0000000
--- a/3.0.4/examples/VlibBeans/src/org/apache/tapestry/vlib/ejb/IOperationsHome.java
+++ /dev/null
@@ -1,34 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.vlib.ejb;
-
-import java.rmi.RemoteException;
-
-import javax.ejb.CreateException;
-import javax.ejb.EJBHome;
-
-/**
- *  Home interface to the {@link IOperations} stateless
- *  session bean.
- *  
- *  @version $Id$
- *  @author Howard Lewis Ship
- *
- **/
-
-public interface IOperationsHome extends EJBHome
-{
-    public IOperations create() throws CreateException, RemoteException;
-}
\ No newline at end of file
diff --git a/3.0.4/examples/VlibBeans/src/org/apache/tapestry/vlib/ejb/IPerson.java b/3.0.4/examples/VlibBeans/src/org/apache/tapestry/vlib/ejb/IPerson.java
deleted file mode 100644
index 21e0e18..0000000
--- a/3.0.4/examples/VlibBeans/src/org/apache/tapestry/vlib/ejb/IPerson.java
+++ /dev/null
@@ -1,57 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.vlib.ejb;
-
-import java.rmi.RemoteException;
-import java.sql.Timestamp;
-
-/** 
- *  Remote interface for the Person entity bean.
- *
- *  @version $Id$
- *  @author Howard Lewis Ship
- *
- **/
-
-public interface IPerson extends IEntityBean
-{
-	public void setLastName(String value) throws RemoteException;
-
-	public String getLastName() throws RemoteException;
-
-	public void setFirstName(String value) throws RemoteException;
-
-	public String getFirstName() throws RemoteException;
-
-	public void setPassword(String value) throws RemoteException;
-
-	public String getPassword() throws RemoteException;
-
-	public void setEmail(String value) throws RemoteException;
-
-	public String getEmail() throws RemoteException;
-
-	public boolean getAdmin() throws RemoteException;
-
-	public void setAdmin(boolean value) throws RemoteException;
-
-	public boolean getLockedOut() throws RemoteException;
-
-	public void setLockedOut(boolean value) throws RemoteException;
-
-	public void setLastAccess(Timestamp value) throws RemoteException;
-
-	public Timestamp getLastAccess() throws RemoteException;
-}
\ No newline at end of file
diff --git a/3.0.4/examples/VlibBeans/src/org/apache/tapestry/vlib/ejb/IPersonHome.java b/3.0.4/examples/VlibBeans/src/org/apache/tapestry/vlib/ejb/IPersonHome.java
deleted file mode 100644
index f75e8e5..0000000
--- a/3.0.4/examples/VlibBeans/src/org/apache/tapestry/vlib/ejb/IPersonHome.java
+++ /dev/null
@@ -1,46 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.vlib.ejb;
-
-import java.rmi.RemoteException;
-import java.util.Map;
-
-import javax.ejb.CreateException;
-import javax.ejb.EJBHome;
-import javax.ejb.FinderException;
-
-/**
- *  Home interface for the {@link IPerson} entity bean.
- *
- *  @version $Id$
- *  @author Howard Lewis Ship
- *
- **/
-
-public interface IPersonHome extends EJBHome
-{
-    public IPerson create(Map attributes) throws CreateException, RemoteException;
-
-    public IPerson findByPrimaryKey(Integer key) throws FinderException, RemoteException;
-
-    /**
-     *  Finds by exact match on email (which is how users are identified for
-     *  login purposes).  Note:  need to figure out how to do a caseless
-     *  search instead.
-     *
-     **/
-
-    public IPerson findByEmail(String email) throws FinderException, RemoteException;
-}
\ No newline at end of file
diff --git a/3.0.4/examples/VlibBeans/src/org/apache/tapestry/vlib/ejb/IPublisher.java b/3.0.4/examples/VlibBeans/src/org/apache/tapestry/vlib/ejb/IPublisher.java
deleted file mode 100644
index 032ab02..0000000
--- a/3.0.4/examples/VlibBeans/src/org/apache/tapestry/vlib/ejb/IPublisher.java
+++ /dev/null
@@ -1,32 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.vlib.ejb;
-
-import java.rmi.RemoteException;
-
-/**
- *  Remote interface for the Publisher entity bean.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *
- **/
-
-public interface IPublisher extends IEntityBean
-{
-    public void setName(String value) throws RemoteException;
-
-    public String getName() throws RemoteException;
-}
\ No newline at end of file
diff --git a/3.0.4/examples/VlibBeans/src/org/apache/tapestry/vlib/ejb/IPublisherHome.java b/3.0.4/examples/VlibBeans/src/org/apache/tapestry/vlib/ejb/IPublisherHome.java
deleted file mode 100644
index 3f8e12d..0000000
--- a/3.0.4/examples/VlibBeans/src/org/apache/tapestry/vlib/ejb/IPublisherHome.java
+++ /dev/null
@@ -1,44 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.vlib.ejb;
-
-import java.rmi.RemoteException;
-
-import javax.ejb.CreateException;
-import javax.ejb.EJBHome;
-import javax.ejb.FinderException;
-
-/**
- *  Home interface for the {@link IPublisher} entity bean.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *
- **/
-
-public interface IPublisherHome extends EJBHome
-{
-    public IPublisher create(String name) throws CreateException, RemoteException;
-
-    public IPublisher findByPrimaryKey(Integer key) throws FinderException, RemoteException;
-
-    /**
-     *  Finds Publisher with exact match on name.
-     *
-     **/
-
-    public IPublisher findByName(String name) throws FinderException, RemoteException;
-
-}
\ No newline at end of file
diff --git a/3.0.4/examples/VlibBeans/src/org/apache/tapestry/vlib/ejb/LoginException.java b/3.0.4/examples/VlibBeans/src/org/apache/tapestry/vlib/ejb/LoginException.java
deleted file mode 100644
index dd0a852..0000000
--- a/3.0.4/examples/VlibBeans/src/org/apache/tapestry/vlib/ejb/LoginException.java
+++ /dev/null
@@ -1,47 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.vlib.ejb;
-
-/**
- *  Exception thrown on a login failure.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- **/
-
-public class LoginException extends Exception
-{
-    private boolean _passwordError;
-
-    public LoginException(String message, boolean passwordError)
-    {
-        super(message);
-
-        _passwordError = passwordError;
-    }
-
-    /**
-     *  Returns true if the error is related to the password.  Otherwise,
-     *  the error is related to the email address (either not found,
-     *  or the user has been invalidated or otherwise locked out).
-     *
-     **/
-
-    public boolean isPasswordError()
-    {
-        return _passwordError;
-    }
-
-}
\ No newline at end of file
diff --git a/3.0.4/examples/VlibBeans/src/org/apache/tapestry/vlib/ejb/MasterQueryParameters.java b/3.0.4/examples/VlibBeans/src/org/apache/tapestry/vlib/ejb/MasterQueryParameters.java
deleted file mode 100644
index b863d8c..0000000
--- a/3.0.4/examples/VlibBeans/src/org/apache/tapestry/vlib/ejb/MasterQueryParameters.java
+++ /dev/null
@@ -1,96 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.vlib.ejb;
-
-import java.io.Serializable;
-
-import org.apache.commons.lang.builder.ToStringBuilder;
-
-/**
- *  Bundles up the parameters for the
- *  {@link org.apache.tapestry.vlib.ejb.IBookQuery#masterQuery(MasterQueryParameters, SortOrdering)}.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 3.0
- *
- **/
-
-public class MasterQueryParameters implements Serializable
-{
-	private static final long serialVersionUID = 557672936915184047L;
-	
-	private String _title;
-	private String _author;
-	private Integer _ownerId;
-	private Integer _publisherId;
-	
-	public MasterQueryParameters(String title, String author, Integer ownerId, Integer publisherId)
-	{
-		_title = title;
-		_author = author;
-		_ownerId = ownerId;
-		_publisherId = publisherId;
-	}
-
-	/** 
-	 *  Returns a substring to match (caselessly) against
-	 *  {@link IBook#getAuthor()}.
-	 * 
-	 **/
-	
-    public String getAuthor()
-    {
-        return _author;
-    }
-
-	/**
-	 *  Returns a publisher Id to match, or null
-	 *  for no publisher constraint.
-	 * 
-	 **/
-
-    public Integer getPublisherId()
-    {
-        return _publisherId;
-    }
-
-	/**
-	 *  Returns a substring to match
-	 *  caselessly against the book title.
-     *
-     **/
-	 
-    public String getTitle()
-    {
-        return _title;
-    }
-    
-    public Integer getOwnerId()
-    {
-    	return _ownerId;
-    }
-
-	public String toString()
-	{
-		ToStringBuilder builder = new ToStringBuilder(this);
-		builder.append("title", _title);
-		builder.append("author", _author);
-		builder.append("ownerId", _ownerId);
-		builder.append("publisherId", _publisherId);
-		
-		return builder.toString();
-	}
-}
diff --git a/3.0.4/examples/VlibBeans/src/org/apache/tapestry/vlib/ejb/Person.java b/3.0.4/examples/VlibBeans/src/org/apache/tapestry/vlib/ejb/Person.java
deleted file mode 100644
index e14e388..0000000
--- a/3.0.4/examples/VlibBeans/src/org/apache/tapestry/vlib/ejb/Person.java
+++ /dev/null
@@ -1,139 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.vlib.ejb;
-
-import java.io.Serializable;
-import java.sql.Timestamp;
-
-/**
- *  A light-weight version of the {@link IPerson} bean.
- *
- *  @version $Id$
- *  @author Howard Lewis Ship
- *
- **/
-
-public class Person implements Serializable
-{
-    private static final long serialVersionUID = 37148852625594728L;
-
-    private Object[] columns;
-
-    public static final int ID_COLUMN = 0;
-    public static final int FIRST_NAME_COLUMN = 1;
-    public static final int LAST_NAME_COLUMN = 2;
-    public static final int EMAIL_COLUMN = 3;
-    public static final int LOCKED_OUT_COLUMN = 4;
-    public static final int ADMIN_COLUMN = 5;
-    public static final int LAST_ACCESS_COLUMN = 6;
-
-    public static final int N_COLUMNS = 7;
-
-    public Person(Object[] columns)
-    {
-        if (columns == null)
-            throw new IllegalArgumentException("Must provide a non-null columns.");
-
-        if (columns.length != N_COLUMNS)
-            throw new IllegalArgumentException("Wrong number of columns for a Person.");
-
-        this.columns = new Object[N_COLUMNS];
-        System.arraycopy(columns, 0, this.columns, 0, N_COLUMNS);
-    }
-
-    public Integer getId()
-    {
-        return (Integer) columns[ID_COLUMN];
-    }
-
-    public String getFirstName()
-    {
-        return (String) columns[FIRST_NAME_COLUMN];
-    }
-
-    public String getLastName()
-    {
-        return (String) columns[LAST_NAME_COLUMN];
-    }
-
-    public String getEmail()
-    {
-        return (String) columns[EMAIL_COLUMN];
-    }
-
-    public String getNaturalName()
-    {
-        if (columns[FIRST_NAME_COLUMN] == null)
-            return (String) columns[LAST_NAME_COLUMN];
-
-        return (String) columns[FIRST_NAME_COLUMN] + " " + (String) columns[LAST_NAME_COLUMN];
-    }
-
-    public Timestamp getLastAccess()
-    {
-        return (Timestamp) columns[LAST_ACCESS_COLUMN];
-    }
-
-    public String toString()
-    {
-        StringBuffer buffer;
-
-        buffer = new StringBuffer("Person[");
-
-        if (columns[FIRST_NAME_COLUMN] != null)
-        {
-            buffer.append((String) columns[FIRST_NAME_COLUMN]);
-            buffer.append(' ');
-        }
-
-        buffer.append((String) columns[LAST_NAME_COLUMN]);
-        buffer.append(']');
-
-        return buffer.toString();
-    }
-
-    public boolean isAdmin()
-    {
-        return getBit(ADMIN_COLUMN);
-    }
-
-    public void setAdmin(boolean value)
-    {
-        setBit(ADMIN_COLUMN, value);
-    }
-
-    public boolean isLockedOut()
-    {
-        return getBit(LOCKED_OUT_COLUMN);
-    }
-
-    public void setLockedOut(boolean value)
-    {
-        setBit(LOCKED_OUT_COLUMN, value);
-    }
-
-    private void setBit(int column, boolean value)
-    {
-        columns[column] = value ? Boolean.TRUE : Boolean.FALSE;
-    }
-
-    private boolean getBit(int column)
-    {
-        Boolean b = (Boolean) columns[column];
-
-        return b.booleanValue();
-    }
-
-}
\ No newline at end of file
diff --git a/3.0.4/examples/VlibBeans/src/org/apache/tapestry/vlib/ejb/Publisher.java b/3.0.4/examples/VlibBeans/src/org/apache/tapestry/vlib/ejb/Publisher.java
deleted file mode 100644
index 9ffa4e5..0000000
--- a/3.0.4/examples/VlibBeans/src/org/apache/tapestry/vlib/ejb/Publisher.java
+++ /dev/null
@@ -1,75 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.vlib.ejb;
-
-import java.io.Serializable;
-
-/**
- *  A light-weight, read-only version of the {@link IPublisher} bean.
- *
- *  @version $Id$
- *  @author Howard Lewis Ship
- *
- **/
-
-public class Publisher implements Serializable
-{
-    private static final long serialVersionUID = -2843992788128325821L;
-    
-    private Integer _id;
-    private String _name;
-
-    public Publisher(Integer id, String name)
-    {
-        _id = id;
-        _name = name;
-    }
-
-    public Integer getId()
-    {
-        return _id;
-    }
-
-    public String getName()
-    {
-        return _name;
-    }
-
-    /**
-     *  Name is a writable property of this bean, to support the
-     *  applications' EditPublisher's page.
-     *
-     *  @see IOperations#updatePublishers(Publisher[],Integer[])
-     *
-     **/
-
-    public void setName(String value)
-    {
-        _name = value;
-    }
-
-    public String toString()
-    {
-        StringBuffer buffer;
-
-        buffer = new StringBuffer("Publisher[");
-        buffer.append(_id);
-        buffer.append(' ');
-        buffer.append(_name);
-        buffer.append(']');
-
-        return buffer.toString();
-    }
-}
\ No newline at end of file
diff --git a/3.0.4/examples/VlibBeans/src/org/apache/tapestry/vlib/ejb/RegistrationException.java b/3.0.4/examples/VlibBeans/src/org/apache/tapestry/vlib/ejb/RegistrationException.java
deleted file mode 100644
index ba56f27..0000000
--- a/3.0.4/examples/VlibBeans/src/org/apache/tapestry/vlib/ejb/RegistrationException.java
+++ /dev/null
@@ -1,54 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.vlib.ejb;
-
-/**
- *  Exception thrown by {@link IOperations#registerNewUser(String, String, String, String)}
- *  if the registration is not allowed (usually, because of a duplicate email or
- *  name).
- *
- *  @version $Id$
- *  @author Howard Lewis Ship
- * 
- **/
-
-public class RegistrationException extends Exception
-{
-    private Throwable rootCause;
-
-    public RegistrationException(Throwable rootCause)
-    {
-        super(rootCause.getMessage());
-
-        this.rootCause = rootCause;
-    }
-
-    public RegistrationException(String message, Throwable rootCause)
-    {
-        super(message);
-
-        this.rootCause = rootCause;
-    }
-
-    public RegistrationException(String message)
-    {
-        super(message);
-    }
-
-    public Throwable getRootCause()
-    {
-        return rootCause;
-    }
-}
\ No newline at end of file
diff --git a/3.0.4/examples/VlibBeans/src/org/apache/tapestry/vlib/ejb/SortColumn.java b/3.0.4/examples/VlibBeans/src/org/apache/tapestry/vlib/ejb/SortColumn.java
deleted file mode 100644
index 68012c7..0000000
--- a/3.0.4/examples/VlibBeans/src/org/apache/tapestry/vlib/ejb/SortColumn.java
+++ /dev/null
@@ -1,74 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.vlib.ejb;
-
-import org.apache.commons.lang.enum.Enum;
-
-/**
- *  Represents the different columns which may be sorted.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 3.0
- *
- **/
-
-public class SortColumn extends Enum
-{
-	private static final long serialVersionUID = -9111154890216180024L;
-	
-	/**
-	 *  Sort by book title.
-	 * 
-	 **/
-	
-	public static final SortColumn TITLE = new SortColumn("TITLE");
-	
-	/**
-	 *  Sort by author name.
-	 *  
-	 **/
-	
-	public static final SortColumn AUTHOR = new SortColumn("AUTHOR");
-
-	/**
-	 *  Sort by publisher name.
-	 * 
-	 **/
-	
-	public static final SortColumn PUBLISHER = new SortColumn("PUBLISHER");
-	
-	/**
-	 *  Sort by holder name (last name, then first).  Not applicable
-	 *  to all queries.
-	 * 
-	 **/
-	
-	public static final SortColumn HOLDER = new SortColumn("HOLDER");
-
-	/**
-	 *  Sort by book owner (last name, then first).  Not applicable
-	 *  to all queries.
-	 * 
-	 **/
-	
-	public static final SortColumn OWNER = new SortColumn("OWNER");
-	
-    private SortColumn(String name)
-    {
-        super(name);
-    }
-
-}
diff --git a/3.0.4/examples/VlibBeans/src/org/apache/tapestry/vlib/ejb/SortOrdering.java b/3.0.4/examples/VlibBeans/src/org/apache/tapestry/vlib/ejb/SortOrdering.java
deleted file mode 100644
index d909399..0000000
--- a/3.0.4/examples/VlibBeans/src/org/apache/tapestry/vlib/ejb/SortOrdering.java
+++ /dev/null
@@ -1,69 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.vlib.ejb;
-
-import java.io.Serializable;
-
-import org.apache.commons.lang.builder.ToStringBuilder;
-
-/**
- *  Used with {@link org.apache.tapestry.vlib.ejb.IBookQuery} to represent
- *  the order in which columns are sorted in the result set.  SortOrdering
- *  is immutable.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 3.0
- *
- **/
-
-public class SortOrdering implements Serializable
-{
-	private static final long serialVersionUID = -1621923918904975133L;
-	
-    private SortColumn _column;
-    private boolean _descending;
-
-    public SortOrdering(SortColumn column)
-    {
-        this(column, false);
-    }
-
-    public SortOrdering(SortColumn column, boolean descending)
-    {
-        _column = column;
-        _descending = descending;
-    }
-
-    public boolean isDescending()
-    {
-        return _descending;
-    }
-
-    public SortColumn getColumn()
-    {
-        return _column;
-    }
-
-    public String toString()
-    {
-        ToStringBuilder builder = new ToStringBuilder(this);
-        builder.append("column", _column);
-        builder.append("descending", _descending);
-
-        return builder.toString();
-    }
-
-}
diff --git a/3.0.4/examples/VlibBeans/src/org/apache/tapestry/vlib/ejb/impl/AbstractEntityBean.java b/3.0.4/examples/VlibBeans/src/org/apache/tapestry/vlib/ejb/impl/AbstractEntityBean.java
deleted file mode 100644
index b8f6f02..0000000
--- a/3.0.4/examples/VlibBeans/src/org/apache/tapestry/vlib/ejb/impl/AbstractEntityBean.java
+++ /dev/null
@@ -1,291 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.vlib.ejb.impl;
-
-import java.rmi.RemoteException;
-import java.util.HashMap;
-import java.util.Map;
-
-import javax.ejb.CreateException;
-import javax.ejb.EJBException;
-import javax.ejb.EntityBean;
-import javax.ejb.EntityContext;
-import javax.naming.Context;
-import javax.naming.InitialContext;
-import javax.naming.NamingException;
-import javax.rmi.PortableRemoteObject;
-
-import org.apache.tapestry.contrib.ejb.XEJBException;
-import org.apache.tapestry.vlib.ejb.IKeyAllocator;
-import org.apache.tapestry.vlib.ejb.IKeyAllocatorHome;
-import ognl.Ognl;
-import ognl.OgnlException;
-
-/**
- *  Provides basic support for the entity context, empty or minimal
- *  implementations of the required methods, and some utilties.
- *  
- *  @version $Id$
- *  @author Howard Lewis Ship
- *
- **/
-
-public abstract class AbstractEntityBean implements EntityBean
-{
-    /**
-     *  The EntityContext provided by the application server.
-     *
-     **/
-
-    private EntityContext _context;
-
-    private transient String[] _attributePropertyNames;
-
-    private transient IKeyAllocatorHome _keyAllocatorHome;
-
-    /**
-     *  The environment naming context, which is configured for this bean
-     *  in the deployment descriptor.
-     *
-     **/
-
-    private transient Context _environment;
-
-    public void setEntityContext(EntityContext context)
-    {
-        _context = context;
-    }
-
-    public void unsetEntityContext()
-    {
-        _context = null;
-    }
-
-    /**
-     *  Gets a named object from the bean's environment naming context.
-     *
-     **/
-
-    protected Object getEnvironmentObject(String name, Class objectClass)
-        throws RemoteException, NamingException
-    {
-        Object result = null;
-
-        if (_environment == null)
-        {
-            Context initial = new InitialContext();
-            _environment = (Context) initial.lookup("java:comp/env");
-        }
-
-        Object raw = _environment.lookup(name);
-
-        try
-        {
-            result = PortableRemoteObject.narrow(raw, objectClass);
-        }
-        catch (ClassCastException ex)
-        {
-            throw new RemoteException(
-                "Could not narrow " + raw + " (" + name + ") to class " + objectClass + ".");
-        }
-
-        return result;
-    }
-
-    /**
-     *  Empty implementation; subclasses may override.
-     *
-     **/
-
-    public void ejbActivate() throws EJBException, RemoteException
-    {
-        // does nothing
-    }
-
-    /**
-     *  Empty implementation; subclasses may override.
-     *
-     **/
-
-    public void ejbPassivate() throws EJBException, RemoteException
-    {
-        // does nothing
-    }
-
-    /**
-     *  Empty implementation; subclasses may override.
-     *
-     **/
-
-    public void ejbRemove() throws EJBException, RemoteException
-    {
-        // does nothing
-    }
-
-    /**
-     *  Does nothing.
-     *
-     **/
-
-    public void ejbLoad() throws EJBException, RemoteException
-    {
-    }
-
-    /**
-     *  Does nothing.
-     *
-     **/
-
-    public void ejbStore() throws EJBException, RemoteException
-    {
-    }
-
-    /**
-     *  Uses the KeyAllocator session bean to allocate a necessary key.
-     *
-     **/
-
-    protected Integer allocateKey() throws RemoteException
-    {
-        IKeyAllocator allocator;
-
-        if (_keyAllocatorHome == null)
-        {
-            try
-            {
-                Context initial = new InitialContext();
-                Context environment = (Context) initial.lookup("java:comp/env");
-
-                Object raw = environment.lookup("ejb/KeyAllocator");
-                _keyAllocatorHome =
-                    (IKeyAllocatorHome) PortableRemoteObject.narrow(raw, IKeyAllocatorHome.class);
-            }
-            catch (NamingException ex)
-            {
-                throw new XEJBException("Unable to locate IKeyAllocatorHome.", ex);
-            }
-        }
-
-        // Get a reference to *some* KeyAllocator bean ... it may be fresh,
-        // or one reused from a pool.
-
-        try
-        {
-            allocator = _keyAllocatorHome.create();
-        }
-        catch (CreateException ex)
-        {
-            throw new RemoteException(
-                "Unable to create a KeyAllocator from " + _keyAllocatorHome + ".",
-                ex);
-        }
-
-        // Finally, invoke the method that gets a key.
-
-        return allocator.allocateKey();
-    }
-
-    /**
-     *  Implemented in subclasses to provide a list of property names to be included
-     *  in the entity attributes map.
-     *
-     **/
-
-    protected abstract String[] getAttributePropertyNames();
-
-    /**
-     *  Returns a {@link Map} of the properties of the bean.  This Map is
-     *  returned to the client, where it can be modified and then used to update
-     *  the entity bean in a single method
-     *
-     *  <p>The properties included in the Map are defined by the
-     *  {@link #getAttributePropertyNames()} method, which is implemented
-     *  by concrete subclasses.
-     *
-     **/
-
-    public Map getEntityAttributes()
-    {
-        Map result = new HashMap();
-
-        if (_attributePropertyNames == null)
-            _attributePropertyNames = getAttributePropertyNames();
-
-        for (int i = 0; i < _attributePropertyNames.length; i++)
-        {
-            String key = _attributePropertyNames[i];
-
-            try
-            {
-                Object value = Ognl.getValue(key, this);
-
-                result.put(key, value);
-            }
-            catch (OgnlException ex)
-            {
-            }
-        }
-
-        return result;
-    }
-
-    /**
-     *  Updates the bean with property changes from the update {@link Map}.
-     *  Only the keys defined by {@link #getAttributePropertyNames()} will be
-     *  accessed (keys and values that are not in that list are ignored). 
-     *
-     *  <p>The corresponding bean property will only be updated
-     *  if the key is present ... this means that the update may contain just
-     *  the <em>changed</em> keys.  Remember that a Map may store null values.
-     *
-     **/
-
-    public void updateEntityAttributes(Map update)
-    {
-        if (_attributePropertyNames == null)
-            _attributePropertyNames = getAttributePropertyNames();
-
-        for (int i = 0; i < _attributePropertyNames.length; i++)
-        {
-            String key = _attributePropertyNames[i];
-
-            if (update.containsKey(key))
-            {
-                Object value = update.get(key);
-
-                try
-                {
-                    Ognl.setValue(key, this, value);
-                }
-                catch (OgnlException ex)
-                {
-                }
-
-            }
-
-        }
-
-    }
-
-    protected void setContext(EntityContext context)
-    {
-        _context = context;
-    }
-
-    protected EntityContext geEntityContext()
-    {
-        return _context;
-    }
-}
\ No newline at end of file
diff --git a/3.0.4/examples/VlibBeans/src/org/apache/tapestry/vlib/ejb/impl/BookBean.java b/3.0.4/examples/VlibBeans/src/org/apache/tapestry/vlib/ejb/impl/BookBean.java
deleted file mode 100644
index bf75d8c..0000000
--- a/3.0.4/examples/VlibBeans/src/org/apache/tapestry/vlib/ejb/impl/BookBean.java
+++ /dev/null
@@ -1,115 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.vlib.ejb.impl;
-
-import java.rmi.RemoteException;
-import java.sql.Timestamp;
-import java.util.Map;
-
-import javax.ejb.CreateException;
-
-/**
- *  Implementation of the Book entity.
- *
- *  <p>We're using container managed persistance.
- *
- *  @see org.apache.tapestry.vlib.ejb.IBook
- *  @see org.apache.tapestry.vlib.ejb.IBookHome
- *
- *  @version $Id$
- *  @author Howard Lewis Ship
- *
- **/
-
-public abstract class BookBean extends AbstractEntityBean
-{
-    protected String[] getAttributePropertyNames()
-    {
-        return new String[] {
-            "title",
-            "description",
-            "ISBN",
-            "holderId",
-            "ownerId",
-            "publisherId",
-            "author",
-            "hidden",
-            "lendable",
-            "dateAdded" };
-    }
-
-    public abstract void setBookId(Integer value);
-    
-    public abstract Integer getBookId();
-
-    public abstract String getAuthor();
-
-    public abstract void setAuthor(String value);
-
-    public abstract String getDescription();
-
-    public abstract void setDescription(String value);
-
-    public abstract String getISBN();
-
-    public abstract void setISBN(String value);
-    
-    public abstract String getTitle();
-
-    public abstract void setTitle(String value);
-
-    public abstract Integer getHolderId();
-
-    public abstract void setHolderId(Integer value);
-    
-    public abstract Integer getOwnerId() throws RemoteException;
-
-    public abstract void setOwnerId(Integer value);
-
-    public abstract void setPublisherId(Integer value);
-
-    public abstract Integer getPublisherId();
-
-    public abstract boolean getHidden();
-
-    public abstract void setHidden(boolean value);
-
-    public abstract boolean getLendable();
-
-    public abstract void setLendable(boolean value);
-
-    public abstract Timestamp getDateAdded();
-    
-    public abstract void setDateAdded(Timestamp value);
-
-    // Create methods
-
-    public Integer ejbCreate(Map attributes) throws CreateException, RemoteException
-    {
-        setLendable(true);
- 
-        updateEntityAttributes(attributes);
-
-        setBookId(allocateKey());
-        
-        return null;
-    }
-
-    public void ejbPostCreate(Map attributes)
-    {
-        // No post create work needed but the method must be implemented
-    }
-
-}
\ No newline at end of file
diff --git a/3.0.4/examples/VlibBeans/src/org/apache/tapestry/vlib/ejb/impl/BookQueryBean.java b/3.0.4/examples/VlibBeans/src/org/apache/tapestry/vlib/ejb/impl/BookQueryBean.java
deleted file mode 100644
index 3c617a8..0000000
--- a/3.0.4/examples/VlibBeans/src/org/apache/tapestry/vlib/ejb/impl/BookQueryBean.java
+++ /dev/null
@@ -1,382 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.vlib.ejb.impl;
-
-import java.sql.Connection;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.util.ArrayList;
-import java.util.List;
-
-import org.apache.tapestry.contrib.ejb.XEJBException;
-import org.apache.tapestry.contrib.jdbc.IStatement;
-import org.apache.tapestry.contrib.jdbc.StatementAssembly;
-import org.apache.tapestry.vlib.ejb.Book;
-import org.apache.tapestry.vlib.ejb.MasterQueryParameters;
-import org.apache.tapestry.vlib.ejb.SortOrdering;
-
-/**
- *  Implementation of a stateful session bean used to query the 
- *  {@link org.apache.tapestry.vlib.ejb.IBook}
- *  entity and cache the results.  It can then download the results, in chunks,
- *  to the client ... this is used to support clients that which to display
- *  the results a page at a time (with random access to the pages of results).
- *
- *  <p>To avoid a lot of duplicate code for things like finding the JDBC {@link
- *  Connection} and querying the IBook entity, we subclass from
- *  {@link OperationsBean}.
- *
- *  @see org.apache.tapestry.vlib.ejb.IBookQuery
- *  @see org.apache.tapestry.vlib.ejb.IBookQueryHome
- *
- *  @version $Id$
- *  @author Howard Lewis Ship
- *
- **/
-
-public class BookQueryBean extends OperationsBean
-{
-
-    /**
-     *  Stores the results from the most recent query.
-     *
-     **/
-
-    private Book[] _results;
-
-    /**
-     *  Releases any results.
-     *
-     **/
-
-    public void ejbRemove()
-    {
-        _results = null;
-    }
-
-    // Business methods
-
-    /**
-     *  Returns the number of results from the most recent query.
-     *
-     **/
-
-    public int getResultCount()
-    {
-        if (_results == null)
-            return 0;
-
-        return _results.length;
-    }
-
-    /**
-     *  Gets a subset of the results from the query.
-     *
-     **/
-
-    public Book[] get(int offset, int length)
-    {
-        Book[] result;
-
-        if (offset < 0)
-            return null;
-
-        int finalLength = Math.min(length, _results.length - offset);
-
-        if (finalLength < 0)
-            return null;
-
-        // Create a new array and copy the requested
-        // results into it.
-
-        result = new Book[finalLength];
-        System.arraycopy(_results, offset, result, 0, finalLength);
-
-        return result;
-    }
-
-    /**
-     *  The master query is for querying by some mixture of title, author
-     *  and publisher.
-     *
-     **/
-
-    public int masterQuery(MasterQueryParameters parameters, SortOrdering sortOrdering)
-    {
-        IStatement statement = null;
-        Connection connection = null;
-
-        // Forget any current results.
-
-        _results = null;
-
-        try
-        {
-            connection = getConnection();
-
-            try
-            {
-                statement = buildMasterQuery(connection, parameters, sortOrdering);
-            }
-            catch (SQLException ex)
-            {
-                throw new XEJBException("Unable to create query statement.", ex);
-            }
-
-            processQuery(statement);
-
-        }
-        finally
-        {
-            close(connection, statement, null);
-        }
-
-        return getResultCount();
-    }
-
-    /**
-     *  Queries on books owned by a given person, sorted by title.
-     *
-     **/
-
-    public int ownerQuery(Integer ownerId, SortOrdering sortOrdering)
-    {
-        IStatement statement = null;
-        Connection connection = null;
-
-        // Forget any current results.
-
-        _results = null;
-
-        try
-        {
-            connection = getConnection();
-
-            try
-            {
-                statement = buildPersonQuery(connection, "owner.PERSON_ID", ownerId, sortOrdering);
-            }
-            catch (SQLException ex)
-            {
-                throw new XEJBException("Unable to create query statement.", ex);
-            }
-
-            processQuery(statement);
-
-        }
-        finally
-        {
-            close(connection, statement, null);
-        }
-
-        return getResultCount();
-    }
-
-    /**
-     *  Queries on books held (borrowed) by a given person, sorted by title.
-     *
-     **/
-
-    public int holderQuery(Integer holderId, SortOrdering sortOrdering)
-    {
-        IStatement statement = null;
-        Connection connection = null;
-
-        // Forget any current results.
-
-        _results = null;
-
-        try
-        {
-            connection = getConnection();
-
-            try
-            {
-                statement =
-                    buildPersonQuery(connection, "holder.PERSON_ID", holderId, sortOrdering);
-            }
-            catch (SQLException ex)
-            {
-                throw new XEJBException("Unable to create query statement.", ex);
-            }
-
-            processQuery(statement);
-
-        }
-        finally
-        {
-            close(connection, statement, null);
-        }
-
-        return getResultCount();
-    }
-
-    public int borrowerQuery(Integer borrowerId, SortOrdering sortOrdering)
-    {
-        IStatement statement = null;
-        Connection connection = null;
-
-        // Forget any current results.
-
-        _results = null;
-
-        try
-        {
-            connection = getConnection();
-
-            try
-            {
-                statement = buildBorrowerQuery(connection, borrowerId, sortOrdering);
-            }
-            catch (SQLException ex)
-            {
-                throw new XEJBException("Unable to create query statement.", ex);
-            }
-
-            processQuery(statement);
-
-        }
-        finally
-        {
-            close(connection, statement, null);
-        }
-
-        return getResultCount();
-    }
-
-    private void processQuery(IStatement statement)
-    {
-        ResultSet set = null;
-
-        try
-        {
-            set = statement.executeQuery();
-        }
-        catch (SQLException ex)
-        {
-            throw new XEJBException("Unable to execute query.", ex);
-        }
-
-        try
-        {
-            processQueryResults(set);
-        }
-        catch (SQLException ex)
-        {
-            throw new XEJBException("Unable to process query results.", ex);
-        }
-        finally
-        {
-            close(null, null, set);
-        }
-    }
-
-    private void processQueryResults(ResultSet set) throws SQLException
-    {
-        List list = new ArrayList();
-        Object[] columns = new Object[Book.N_COLUMNS];
-
-        while (set.next())
-        {
-            Book book = convertRowToBook(set, columns);
-
-            list.add(book);
-        }
-
-        _results = new Book[list.size()];
-        _results = (Book[]) list.toArray(_results);
-    }
-
-    private IStatement buildMasterQuery(
-        Connection connection,
-        MasterQueryParameters parameters,
-        SortOrdering ordering)
-        throws SQLException
-    {
-        String title = parameters.getTitle();
-        String author = parameters.getAuthor();
-        Integer publisherId = parameters.getPublisherId();
-        Integer ownerId = parameters.getOwnerId();
-	
-        StatementAssembly assembly = buildBaseBookQuery();
-
-        addSubstringSearch(assembly, "book.TITLE", title);
-        addSubstringSearch(assembly, "book.AUTHOR", author);
-
-        // Hide books that are not visible to the master query.
-
-        assembly.addSep(" AND ");
-        assembly.add("book.HIDDEN = 0");
-
-        if (publisherId != null)
-        {
-            assembly.addSep(" AND ");
-            assembly.add("book.PUBLISHER_ID = ");
-            assembly.addParameter(publisherId);
-        }
-        
-        if (ownerId != null)
-        {
-        	assembly.addSep(" AND ");
-        	assembly.add("book.OWNER_ID = ");
-        	assembly.addParameter(ownerId);
-        }
-
-        addSortOrdering(assembly, ordering);
-
-        return assembly.createStatement(connection);
-    }
-
-    private IStatement buildPersonQuery(
-        Connection connection,
-        String personColumn,
-        Integer personId,
-        SortOrdering sortOrdering)
-        throws SQLException
-    {
-        StatementAssembly assembly = buildBaseBookQuery();
-
-        assembly.addSep(" AND ");
-        assembly.add(personColumn);
-        assembly.add(" = ");
-        assembly.addParameter(personId);
-
-        addSortOrdering(assembly, sortOrdering);
-
-        return assembly.createStatement(connection);
-    }
-
-    private IStatement buildBorrowerQuery(
-        Connection connection,
-        Integer borrowerId,
-        SortOrdering sortOrdering)
-        throws SQLException
-    {
-        StatementAssembly assembly = buildBaseBookQuery();
-
-        // Get books held by the borrower but not owned by the borrower.
-
-        assembly.addSep(" AND ");
-        assembly.add("book.HOLDER_ID = ");
-        assembly.addParameter(borrowerId);
-        assembly.addSep(" AND ");
-        assembly.add("book.HOLDER_ID <> book.OWNER_ID");
-
-        addSortOrdering(assembly, sortOrdering);
-
-        return assembly.createStatement(connection);
-    }
-
-}
\ No newline at end of file
diff --git a/3.0.4/examples/VlibBeans/src/org/apache/tapestry/vlib/ejb/impl/KeyAllocatorBean.java b/3.0.4/examples/VlibBeans/src/org/apache/tapestry/vlib/ejb/impl/KeyAllocatorBean.java
deleted file mode 100644
index 31964be..0000000
--- a/3.0.4/examples/VlibBeans/src/org/apache/tapestry/vlib/ejb/impl/KeyAllocatorBean.java
+++ /dev/null
@@ -1,324 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.vlib.ejb.impl;
-
-import java.sql.Connection;
-import java.sql.PreparedStatement;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.util.LinkedList;
-
-import javax.ejb.SessionBean;
-import javax.ejb.SessionContext;
-import javax.naming.Context;
-import javax.naming.InitialContext;
-import javax.naming.NamingException;
-import javax.sql.DataSource;
-
-import org.apache.tapestry.contrib.ejb.XEJBException;
-
-/**
- *  Implementation of the {@link org.apache.tapestry.vlib.ejb.IKeyAllocator}
- *  stateless session bean.
- *
- *  <p>We're cheating a little; they KeyAllocator does have
- *  state, it just doesn't get persisted ever.  Since the
- *  operation on it is atomic ("gimme a key") it doesn't
- *  need to have conversational state with its clients.
- *
- *  <p>The KeyAllocator records in the database the "next key
- *  to allocate".  When it needs a key, it allocates a block
- *  of keys (by advancing the next key by a some number).
- *
- *  <p>If the KeyAllocator instance is purged from the pool,
- *  then some number of keys that it has allocated will
- *  be lost.  Big deal.
- *
- *  @version $Id$
- *  @author Howard Lewis Ship
- *
- **/
-
-public class KeyAllocatorBean implements SessionBean
-{
-    private static final String PROPERTY_NAME = "next-key";
-
-    private SessionContext context;
-
-    /**
-     *  List of Integer instances; these are keys
-     *  acquired from the database.
-     *
-     **/
-
-    private LinkedList keys;
-
-    /**
-     *  Number of keys to allocate from the database
-     *  at a time.  Set from the ENC property "blockSize".
-     *
-     **/
-
-    private int blockSize = 0;
-
-    /**
-     *  Data source, retrieved from the ENC property 
-     *  "jdbc/dataSource".
-     *
-     **/
-
-    private DataSource dataSource;
-
-    /**
-     *  Activates the bean.  Gets the block size
-     *  and DataSource from the environment.
-     *
-     **/
-
-    public void ejbCreate()
-    {
-        Context initial;
-        Context environment;
-        Integer blockSizeProperty;
-
-        try
-        {
-            initial = new InitialContext();
-            environment = (Context) initial.lookup("java:comp/env");
-        }
-        catch (NamingException ex)
-        {
-            throw new XEJBException("Could not lookup environment.", ex);
-        }
-
-        try
-        {
-            blockSizeProperty = (Integer) environment.lookup("blockSize");
-        }
-        catch (NamingException ex)
-        {
-            throw new XEJBException("Could not lookup blockSize property.", ex);
-        }
-
-        blockSize = blockSizeProperty.intValue();
-
-        try
-        {
-            dataSource = (DataSource) environment.lookup("jdbc/dataSource");
-        }
-        catch (NamingException ex)
-        {
-            throw new XEJBException("Could not lookup data source.", ex);
-        }
-
-        if (keys == null)
-            keys = new LinkedList();
-    }
-
-    /**
-     *  Does nothing, not invoked in stateless session beans.
-     **/
-
-    public void ejbPassivate()
-    {
-    }
-
-    public void setSessionContext(SessionContext value)
-    {
-        context = value;
-    }
-
-    /**
-     *  Does nothing, not invoked in stateless session beans.
-     *
-     **/
-
-    public void ejbActivate()
-    {
-    }
-
-    /**
-     *  Does nothing.  This is invoked when the bean moves from
-     *  the method ready pool to the "does not exist" state.
-     *  The EJB container will lost its reference to the
-     *  bean, and the garbage collector will take it
-     *  (including any keys it has cached from the database).
-     *
-     **/
-
-    public void ejbRemove()
-    {
-        // Does nothing.
-    }
-
-    /**
-     *  Allocates a single key, going to the database
-     *  only if it has no keys in its internal cache.
-     *
-     **/
-
-    public Integer allocateKey()
-    {
-        if (keys.isEmpty())
-            allocateBlock(1);
-
-        return (Integer) keys.removeFirst();
-    }
-
-    /**
-     *  Allocates a block of keys, going to the database
-     *  if there are insufficient keys in its internal
-     *  cache.
-     *
-     **/
-
-    public Integer[] allocateKeys(int count)
-    {
-        Integer[] result;
-        int i;
-
-        if (keys.size() < count)
-            allocateBlock(count);
-
-        result = new Integer[count];
-
-        for (i = 0; i < count; i++)
-        {
-            result[i] = (Integer) keys.removeFirst();
-        }
-
-        return result;
-    }
-
-    /**
-     *  Allocates a block of keys from the database.
-     *  Allocates count keys, or the configured block size,
-     *  whichever is greater.
-     *
-     *  <p>It is assumed that this operation takes place
-     *  within a transaction.
-     *
-     **/
-
-    protected void allocateBlock(int count)
-    {
-        Connection connection = null;
-        PreparedStatement statement = null;
-        ResultSet set = null;
-        int nextKey;
-        int allocationCount;
-        int i;
-
-        allocationCount = Math.max(count, blockSize);
-
-        try
-        {
-            connection = getConnection();
-
-            statement = connection.prepareStatement("select PROP_VALUE from PROP where NAME = ?");
-            statement.setString(1, PROPERTY_NAME);
-
-            set = statement.executeQuery();
-
-            // Advance to the first row.
-
-            set.next();
-
-            nextKey = set.getInt(1);
-
-            set.close();
-            set = null;
-
-            statement.close();
-            statement = null;
-
-            // Now, take those keys and advance nextKey
-
-            for (i = 0; i < allocationCount; i++)
-                keys.add(new Integer(nextKey++));
-
-            // Update nextKey back to the database.
-
-            statement =
-                connection.prepareStatement("update PROP\n" + "set PROP_VALUE = ?\n" + "where NAME	 = ?");
-            statement.setInt(1, nextKey);
-            statement.setString(2, PROPERTY_NAME);
-
-            statement.executeUpdate();
-        }
-        catch (SQLException ex)
-        {
-            ex.printStackTrace();
-
-            throw new XEJBException("Unable to allocate keys from the database.", ex);
-        }
-        finally
-        {
-            if (set != null)
-            {
-                try
-                {
-                    set.close();
-                }
-                catch (SQLException ex)
-                {
-                }
-            }
-
-            if (statement != null)
-            {
-                try
-                {
-                    statement.close();
-                }
-                catch (SQLException ex)
-                {
-                }
-            }
-
-            if (connection != null)
-            {
-                try
-                {
-                    connection.close();
-                }
-                catch (SQLException ex)
-                {
-                }
-            }
-        }
-
-    }
-
-    /**
-     *  Gets a database connection from the pool.
-     *
-     *  @throws EJBException if a {@link SQLException}
-     *  is thrown.
-     *
-     **/
-
-    protected Connection getConnection()
-    {
-        try
-        {
-            return dataSource.getConnection();
-        }
-        catch (SQLException ex)
-        {
-            throw new XEJBException("Unable to get database connection from pool.", ex);
-        }
-    }
-}
\ No newline at end of file
diff --git a/3.0.4/examples/VlibBeans/src/org/apache/tapestry/vlib/ejb/impl/OperationsBean.java b/3.0.4/examples/VlibBeans/src/org/apache/tapestry/vlib/ejb/impl/OperationsBean.java
deleted file mode 100644
index 90bbe29..0000000
--- a/3.0.4/examples/VlibBeans/src/org/apache/tapestry/vlib/ejb/impl/OperationsBean.java
+++ /dev/null
@@ -1,1155 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.vlib.ejb.impl;
-
-import java.rmi.RemoteException;
-import java.sql.Connection;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.sql.Timestamp;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import javax.ejb.CreateException;
-import javax.ejb.FinderException;
-import javax.ejb.RemoveException;
-import javax.ejb.SessionBean;
-import javax.ejb.SessionContext;
-import javax.naming.Context;
-import javax.naming.InitialContext;
-import javax.naming.NamingException;
-import javax.rmi.PortableRemoteObject;
-import javax.sql.DataSource;
-
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.contrib.ejb.XCreateException;
-import org.apache.tapestry.contrib.ejb.XEJBException;
-import org.apache.tapestry.contrib.ejb.XRemoveException;
-import org.apache.tapestry.contrib.jdbc.IStatement;
-import org.apache.tapestry.contrib.jdbc.StatementAssembly;
-import org.apache.tapestry.vlib.ejb.Book;
-import org.apache.tapestry.vlib.ejb.BorrowException;
-import org.apache.tapestry.vlib.ejb.IBook;
-import org.apache.tapestry.vlib.ejb.IBookHome;
-import org.apache.tapestry.vlib.ejb.IPerson;
-import org.apache.tapestry.vlib.ejb.IPersonHome;
-import org.apache.tapestry.vlib.ejb.IPublisher;
-import org.apache.tapestry.vlib.ejb.IPublisherHome;
-import org.apache.tapestry.vlib.ejb.LoginException;
-import org.apache.tapestry.vlib.ejb.Person;
-import org.apache.tapestry.vlib.ejb.Publisher;
-import org.apache.tapestry.vlib.ejb.RegistrationException;
-import org.apache.tapestry.vlib.ejb.SortColumn;
-import org.apache.tapestry.vlib.ejb.SortOrdering;
-
-/**
- *  Implementation of the {@link org.apache.tapestry.vlib.ejb.IOperations} 
- *  stateless session bean.
- *
- *  <p>Implenents a number of stateless operations for the front end.
- *
- *  @version $Id$
- *  @author Howard Lewis Ship
- *
- **/
-
-public class OperationsBean implements SessionBean
-{
-    private SessionContext _context;
-    private transient Context _environment;
-    private transient IBookHome _bookHome;
-    private transient IPersonHome _personHome;
-    private transient IPublisherHome _publisherHome;
-
-    /**
-     *  Data source, retrieved from the ENC property 
-     *  "jdbc/dataSource".
-     *
-     **/
-
-    private transient DataSource _dataSource;
-
-    /**
-     *  Sets up the bean.  Locates the {@link DataSource} for the bean
-     *  as <code>jdbc/dataSource</code> within the ENC; this data source is
-     *  later used by {@link #getConnection()}.
-     *
-     **/
-
-    public void ejbCreate()
-    {
-        Context initial;
-
-        try
-        {
-            initial = new InitialContext();
-            _environment = (Context) initial.lookup("java:comp/env");
-        }
-        catch (NamingException e)
-        {
-            throw new XEJBException("Could not lookup environment.", e);
-        }
-
-        try
-        {
-            _dataSource = (DataSource) _environment.lookup("jdbc/dataSource");
-        }
-        catch (NamingException e)
-        {
-            e.printStackTrace();
-            throw new XEJBException("Could not lookup data source.", e);
-        }
-    }
-
-    public void ejbRemove()
-    {
-    }
-
-    /**
-     *  Does nothing, not invoked in stateless session beans.
-     **/
-
-    public void ejbPassivate()
-    {
-    }
-
-    public void setSessionContext(SessionContext value)
-    {
-        _context = value;
-    }
-
-    /**
-     *  Does nothing, not invoked in stateless session beans.
-     *
-     **/
-
-    public void ejbActivate()
-    {
-    }
-
-    /**
-     *  Finds the book and borrower (by thier primary keys) and updates the book.
-     *
-     *  <p>The {@link Book} value object is returned.
-     *
-     **/
-
-    public Book borrowBook(Integer bookId, Integer borrowerId)
-        throws FinderException, RemoteException, BorrowException
-    {
-        IBookHome bookHome = getBookHome();
-        IPersonHome personHome = getPersonHome();
-
-        IBook book = bookHome.findByPrimaryKey(bookId);
-
-        if (!book.getLendable())
-            throw new BorrowException("Book may not be borrowed.");
-
-        // Verify that the borrower exists.
-
-        personHome.findByPrimaryKey(borrowerId);
-
-        // TBD: Check that borrower has authenticated
-
-        // findByPrimaryKey() throws an exception if the EJB doesn't exist,
-        // so we're safe.
-
-        personHome.findByPrimaryKey(book.getOwnerId());
-
-        // Here's the real work; just setting the holder of the book
-        // to be the borrower.
-
-        book.setHolderId(borrowerId);
-
-        return getBook(bookId);
-    }
-
-    /**
-     *  Adds a new book, verifying that the publisher and holder actually exist.
-     *
-     **/
-
-    public Integer addBook(Map attributes) throws CreateException, RemoteException
-    {
-        IBookHome home = getBookHome();
-
-        attributes.put("dateAdded", new Timestamp(System.currentTimeMillis()));
-
-        IBook book = home.create(attributes);
-
-        return (Integer) book.getPrimaryKey();
-    }
-
-    /**
-     *  Adds a book, which will be owned and held by the specified owner.
-     *
-     * <p>The publisherName may either be the name of a known publisher, or
-     * a new name.  A new {@link IPublisher} will be created as necessary.
-     *
-     * <p>Returns the newly created book, as a {@link Map} of attributes.
-     *
-     **/
-
-    public Integer addBook(Map attributes, String publisherName)
-        throws CreateException, RemoteException
-    {
-        IPublisher publisher = null;
-        IPublisherHome publisherHome = getPublisherHome();
-
-        // Find or create the publisher.
-
-        try
-        {
-            publisher = publisherHome.findByName(publisherName);
-        }
-        catch (FinderException e)
-        {
-            // Ignore, means that no publisher with the given name already exists.
-        }
-
-        if (publisher == null)
-            publisher = publisherHome.create(publisherName);
-
-        attributes.put("publisherId", publisher.getPrimaryKey());
-
-        return addBook(attributes);
-    }
-
-    /**
-     *  Updates a book.
-     *
-     *  <p>Returns the updated book.
-     *
-     *  @param bookId The primary key of the book to update.
-     *  
-     **/
-
-    public void updateBook(Integer bookId, Map attributes) throws FinderException, RemoteException
-    {
-        IBookHome bookHome = getBookHome();
-
-        IBook book = bookHome.findByPrimaryKey(bookId);
-
-        book.updateEntityAttributes(attributes);
-    }
-
-    /**
-     *  Updates a book, adding a new Publisher at the same time.
-     *
-     *
-     *  @param bookPK The primary key of the book to update.
-     *  @param attributes attributes to change
-     *  @param publisherName The name of the new publisher.
-     *  @throws FinderException if the book, holder or publisher can not be located.
-     *  @throws CreateException if the {@link IPublisher} can not be created.
-     **/
-
-    public void updateBook(Integer bookId, Map attributes, String publisherName)
-        throws CreateException, FinderException, RemoteException
-    {
-        IPublisher publisher = null;
-
-        IPublisherHome publisherHome = getPublisherHome();
-
-        try
-        {
-            publisher = publisherHome.findByName(publisherName);
-        }
-        catch (FinderException e)
-        {
-            // Ignore, means we need to create the Publisher
-        }
-
-        if (publisher == null)
-            publisher = publisherHome.create(publisherName);
-
-        // Don't duplicate all that other code!
-
-        attributes.put("publisherId", publisher.getPrimaryKey());
-
-        updateBook(bookId, attributes);
-    }
-
-    public void updatePerson(Integer personId, Map attributes)
-        throws FinderException, RemoteException
-    {
-        IPersonHome home = getPersonHome();
-
-        IPerson person = home.findByPrimaryKey(personId);
-
-        person.updateEntityAttributes(attributes);
-    }
-
-    public Publisher[] getPublishers()
-    {
-        Connection connection = null;
-        IStatement statement = null;
-        ResultSet set = null;
-
-        List list = new ArrayList();
-
-        try
-        {
-            connection = getConnection();
-
-            StatementAssembly assembly = new StatementAssembly();
-
-            assembly.newLine("SELECT PUBLISHER_ID, NAME");
-            assembly.newLine("FROM PUBLISHER");
-            assembly.newLine("ORDER BY NAME");
-
-            statement = assembly.createStatement(connection);
-
-            set = statement.executeQuery();
-
-            while (set.next())
-            {
-                Integer primaryKey = (Integer) set.getObject(1);
-                String name = set.getString(2);
-
-                list.add(new Publisher(primaryKey, name));
-            }
-        }
-        catch (SQLException ex)
-        {
-            ex.printStackTrace();
-            throw new XEJBException("Could not fetch all Publishers.", ex);
-        }
-        finally
-        {
-            close(connection, statement, set);
-        }
-
-        // Convert from List to Publisher[]
-
-        return (Publisher[]) list.toArray(new Publisher[list.size()]);
-    }
-
-    /**
-     * Fetchs all {@link IPerson} beans in the database and converts them
-     * to {@link Person} objects.
-     *
-     * Returns the {@link Person}s sorted by last name, then first.
-     **/
-
-    public Person[] getPersons()
-    {
-        Connection connection = null;
-        IStatement statement = null;
-        ResultSet set = null;
-
-        List list = new ArrayList();
-
-        try
-        {
-            connection = getConnection();
-
-            StatementAssembly assembly = buildBasePersonQuery();
-            assembly.newLine("ORDER BY LAST_NAME, FIRST_NAME");
-
-            statement = assembly.createStatement(connection);
-
-            set = statement.executeQuery();
-
-            Object[] columns = new Object[Person.N_COLUMNS];
-
-            while (set.next())
-            {
-                list.add(convertRowToPerson(set, columns));
-            }
-        }
-        catch (SQLException ex)
-        {
-            throw new XEJBException("Could not fetch all Persons.", ex);
-        }
-        finally
-        {
-            close(connection, statement, set);
-        }
-
-        return (Person[]) list.toArray(new Person[list.size()]);
-    }
-
-    /**
-     *  Gets the {@link Person} for primary key.
-     *
-     *  @throws FinderException if the Person does not exist.
-     **/
-
-    public Person getPerson(Integer personId) throws FinderException
-    {
-        Connection connection = null;
-        IStatement statement = null;
-        ResultSet set = null;
-
-        Person result = null;
-
-        try
-        {
-            connection = getConnection();
-
-            StatementAssembly assembly = buildBasePersonQuery();
-            assembly.newLine("WHERE ");
-            assembly.add("PERSON_ID = ");
-            assembly.addParameter(personId);
-            assembly.newLine("ORDER BY LAST_NAME, FIRST_NAME");
-
-            statement = assembly.createStatement(connection);
-
-            set = statement.executeQuery();
-
-            if (!set.next())
-                throw new FinderException("Person #" + personId + " does not exist.");
-
-            Object[] columns = new Object[Person.N_COLUMNS];
-            result = convertRowToPerson(set, columns);
-
-        }
-        catch (SQLException ex)
-        {
-            throw new XEJBException("Unable to perform database query.", ex);
-        }
-        finally
-        {
-            close(connection, statement, set);
-        }
-
-        return result;
-    }
-
-    public Person login(String email, String password) throws RemoteException, LoginException
-    {
-        IPersonHome home = getPersonHome();
-        IPerson person = null;
-        Person result = null;
-
-        try
-        {
-            person = home.findByEmail(email);
-        }
-        catch (FinderException ex)
-        {
-            throw new LoginException("Unknown e-mail address.", false);
-        }
-
-        if (!person.getPassword().equals(password))
-            throw new LoginException("Invalid password.", true);
-
-        try
-        {
-            result = getPerson((Integer) person.getPrimaryKey());
-        }
-        catch (FinderException ex)
-        {
-            throw new LoginException("Could not read person.", false);
-        }
-
-        if (result.isLockedOut())
-            throw new LoginException("You have been locked out of the Virtual Library.", false);
-
-        // Set the last access time for any subsequent login.
-
-        person.setLastAccess(new Timestamp(System.currentTimeMillis()));
-
-        return result;
-    }
-
-    public Map getPersonAttributes(Integer personId) throws FinderException, RemoteException
-    {
-        IPersonHome home = getPersonHome();
-
-        IPerson person = home.findByPrimaryKey(personId);
-
-        return person.getEntityAttributes();
-    }
-
-    /**
-     *  Retrieves a single {@link Book} by its primary key.
-     *
-     *  @throws FinderException if the Book does not exist.
-     *
-     **/
-
-    public Book getBook(Integer bookId) throws FinderException
-    {
-        Connection connection = null;
-        IStatement statement = null;
-        ResultSet set = null;
-
-        Book result = null;
-
-        try
-        {
-            connection = getConnection();
-
-            StatementAssembly assembly = buildBaseBookQuery();
-            assembly.addSep(" AND ");
-            assembly.add("book.BOOK_ID = ");
-            assembly.addParameter(bookId);
-
-            statement = assembly.createStatement(connection);
-
-            set = statement.executeQuery();
-
-            if (!set.next())
-                throw new FinderException("Book " + bookId + " does not exist.");
-
-            Object[] columns = new Object[Book.N_COLUMNS];
-            result = convertRowToBook(set, columns);
-
-        }
-        catch (SQLException ex)
-        {
-            throw new XEJBException("Unable to perform database query.", ex);
-        }
-        finally
-        {
-            close(connection, statement, set);
-        }
-
-        return result;
-    }
-
-    public Map getBookAttributes(Integer bookId) throws FinderException, RemoteException
-    {
-        IBookHome home = getBookHome();
-
-        IBook book = home.findByPrimaryKey(bookId);
-
-        return book.getEntityAttributes();
-    }
-
-    /**
-     *  Attempts to register a new user, first checking that the
-     *  e-mail and names are unique.  Returns the primary key of the
-     *  new {@link IPerson}.
-     *
-     **/
-
-    public Person registerNewUser(String firstName, String lastName, String email, String password)
-        throws RegistrationException, CreateException, RemoteException
-    {
-        IPersonHome home;
-
-        if (password == null || password.trim().length() == 0)
-            throw new RegistrationException("Must specify a password.");
-
-        validateUniquePerson(firstName, lastName, email);
-
-        home = getPersonHome();
-
-        Map attributes = new HashMap();
-
-        attributes.put("lastName", lastName.trim());
-        attributes.put("firstName", firstName.trim());
-        attributes.put("email", email.trim());
-        attributes.put("password", password.trim());
-        attributes.put("lastAccess", new Timestamp(System.currentTimeMillis()));
-
-        IPerson person = home.create(attributes);
-
-        Integer personId = (Integer) person.getPrimaryKey();
-
-        try
-        {
-            return getPerson(personId);
-        }
-        catch (FinderException ex)
-        {
-            throw new XCreateException("Unable to find newly created Person.", ex);
-        }
-    }
-
-    public Book deleteBook(Integer bookId) throws RemoveException, RemoteException
-    {
-        IBookHome home = getBookHome();
-        Book result = null;
-
-        try
-        {
-            result = getBook(bookId);
-        }
-        catch (FinderException ex)
-        {
-            throw new XRemoveException(ex);
-        }
-
-        home.remove(bookId);
-
-        return result;
-
-    }
-
-    /**
-     *  Transfers a number of books to a new owner.
-     *
-     **/
-
-    public void transferBooks(Integer newOwnerId, Integer[] bookIds)
-        throws FinderException, RemoteException
-    {
-        if (bookIds == null)
-            throw new RemoteException("Must supply non-null list of books to transfer.");
-
-        if (newOwnerId == null)
-            throw new RemoteException("Must provide an owner for the books.");
-
-        // Verify that the new owner exists.
-
-        IPersonHome personHome = getPersonHome();
-        personHome.findByPrimaryKey(newOwnerId);
-
-        // Direct SQL would be more efficient, but this'll probably do.
-
-        IBookHome home = getBookHome();
-
-        for (int i = 0; i < bookIds.length; i++)
-        {
-            IBook book = home.findByPrimaryKey(bookIds[i]);
-
-            book.setOwnerId(newOwnerId);
-        }
-    }
-
-    public void updatePublishers(Publisher[] updated, Integer[] deleted)
-        throws FinderException, RemoveException, RemoteException
-    {
-        IPublisherHome home = getPublisherHome();
-
-        if (updated != null)
-        {
-            for (int i = 0; i < updated.length; i++)
-            {
-                IPublisher publisher = home.findByPrimaryKey(updated[i].getId());
-                publisher.setName(updated[i].getName());
-            }
-        }
-
-        if (deleted != null)
-        {
-            for (int i = 0; i < deleted.length; i++)
-            {
-                home.remove(deleted[i]);
-            }
-        }
-    }
-
-    public void updatePersons(
-        Person[] updated,
-        Integer[] resetPassword,
-        String newPassword,
-        Integer[] deleted,
-        Integer adminId)
-        throws FinderException, RemoveException, RemoteException
-    {
-        IPersonHome home = getPersonHome();
-
-        int count = Tapestry.size(updated);
-
-        for (int i = 0; i < count; i++)
-        {
-            Person u = updated[i];
-            IPerson person = home.findByPrimaryKey(u.getId());
-
-            person.setAdmin(u.isAdmin());
-            person.setLockedOut(u.isLockedOut());
-        }
-
-        count = Tapestry.size(resetPassword);
-
-        for (int i = 0; i < count; i++)
-        {
-            IPerson person = home.findByPrimaryKey(resetPassword[i]);
-
-            person.setPassword(newPassword);
-        }
-
-        count = Tapestry.size(deleted);
-
-        if (count > 0)
-        {
-            returnBooksFromDeletedPersons(deleted);
-            moveBooksFromDeletedPersons(deleted, adminId);
-        }
-
-        for (int i = 0; i < count; i++)
-            home.remove(deleted[i]);
-    }
-
-    /**
-     *  Invoked to update all books owned by people about to be deleted, to 
-     *  reassign the books holder back to the owner.
-     * 
-     **/
-
-    private void returnBooksFromDeletedPersons(Integer deletedPersonIds[]) throws RemoveException
-    {
-        StatementAssembly assembly = new StatementAssembly();
-
-        assembly.add("UPDATE BOOK");
-        assembly.newLine("SET HOLDER_ID = OWNER_ID");
-        assembly.newLine("WHERE HOLDER_ID IN (");
-        assembly.addParameterList(deletedPersonIds, ", ");
-        assembly.add(")");
-
-        executeUpdate(assembly);
-    }
-
-    /**
-     *  Invoked to execute a bulk update that moves books to the new admin.
-     *
-     **/
-
-    private void moveBooksFromDeletedPersons(Integer deletedPersonIds[], Integer adminId)
-        throws RemoveException
-    {
-        StatementAssembly assembly = new StatementAssembly();
-
-        assembly.add("UPDATE BOOK");
-        assembly.newLine("SET OWNER_ID = ");
-        assembly.addParameter(adminId);
-        assembly.newLine("WHERE OWNER_ID IN (");
-        assembly.addParameterList(deletedPersonIds, ", ");
-        assembly.add(")");
-
-        executeUpdate(assembly);
-
-    }
-
-    private void executeUpdate(StatementAssembly assembly) throws XRemoveException
-    {
-        Connection connection = null;
-        IStatement statement = null;
-
-        try
-        {
-            connection = getConnection();
-
-            statement = assembly.createStatement(connection);
-
-            statement.executeUpdate();
-
-            statement.close();
-            statement = null;
-
-            connection.close();
-            connection = null;
-        }
-        catch (SQLException ex)
-        {
-            throw new XRemoveException(
-                "Unable to execute " + assembly + ": " + ex.getMessage(),
-                ex);
-        }
-        finally
-        {
-            close(connection, statement, null);
-        }
-    }
-
-    /**
-     *  Translates the next row from the result set into a {@link Book}.
-     *
-     *  <p>This works with queries generated by {@link #buildBaseBookQuery()}.
-     *
-     **/
-
-    protected Book convertRowToBook(ResultSet set, Object[] columns) throws SQLException
-    {
-        int column = 1;
-
-        columns[Book.ID_COLUMN] = set.getObject(column++);
-        columns[Book.TITLE_COLUMN] = set.getString(column++);
-        columns[Book.DESCRIPTION_COLUMN] = set.getString(column++);
-        columns[Book.ISBN_COLUMN] = set.getString(column++);
-        columns[Book.OWNER_ID_COLUMN] = set.getObject(column++);
-        columns[Book.OWNER_NAME_COLUMN] =
-            buildName(set.getString(column++), set.getString(column++));
-        columns[Book.HOLDER_ID_COLUMN] = set.getObject(column++);
-        columns[Book.HOLDER_NAME_COLUMN] =
-            buildName(set.getString(column++), set.getString(column++));
-        columns[Book.PUBLISHER_ID_COLUMN] = set.getObject(column++);
-        columns[Book.PUBLISHER_NAME_COLUMN] = set.getString(column++);
-        columns[Book.AUTHOR_COLUMN] = set.getString(column++);
-        columns[Book.HIDDEN_COLUMN] = getBoolean(set, column++);
-        columns[Book.LENDABLE_COLUMN] = getBoolean(set, column++);
-        columns[Book.DATE_ADDED_COLUMN] = set.getTimestamp(column++);
-
-        return new Book(columns);
-    }
-
-    private String buildName(String firstName, String lastName)
-    {
-        if (firstName == null)
-            return lastName;
-
-        return firstName + " " + lastName;
-    }
-
-    /**
-     *  All queries must use this exact set of select columns, so that
-     *  {@link #convertRow(ResultSet, Object[])} can build
-     *  the correct {@link Book} from each row.
-     *
-     **/
-
-    private static final String[] BOOK_SELECT_COLUMNS =
-        {
-            "book.BOOK_ID",
-            "book.TITLE",
-            "book.DESCRIPTION",
-            "book.ISBN",
-            "owner.PERSON_ID",
-            "owner.FIRST_NAME",
-            "owner.LAST_NAME",
-            "holder.PERSON_ID",
-            "holder.FIRST_NAME",
-            "holder.LAST_NAME",
-            "publisher.PUBLISHER_ID",
-            "publisher.NAME",
-            "book.AUTHOR",
-            "book.HIDDEN",
-            "book.LENDABLE",
-            "book.DATE_ADDED" };
-
-    private static final String[] BOOK_ALIAS_COLUMNS =
-        { "BOOK book", "PERSON owner", "PERSON holder", "PUBLISHER publisher" };
-
-    private static final String[] BOOK_JOINS =
-        {
-            "book.OWNER_ID = owner.PERSON_ID",
-            "book.HOLDER_ID = holder.PERSON_ID",
-            "book.PUBLISHER_ID = publisher.PUBLISHER_ID" };
-
-    private static final Map BOOK_SORT_ASCENDING = new HashMap();
-    private static final Map BOOK_SORT_DESCENDING = new HashMap();
-
-    static {
-        BOOK_SORT_ASCENDING.put(SortColumn.TITLE, "book.TITLE");
-        BOOK_SORT_ASCENDING.put(SortColumn.HOLDER, "holder.LAST_NAME, holder.FIRST_NAME");
-        BOOK_SORT_ASCENDING.put(SortColumn.OWNER, "owner.FIRST_NAME, owner.LAST_NAME");
-        BOOK_SORT_ASCENDING.put(SortColumn.PUBLISHER, "publisher.NAME");
-        BOOK_SORT_ASCENDING.put(SortColumn.AUTHOR, "book.AUTHOR");
-
-        BOOK_SORT_DESCENDING.put(SortColumn.TITLE, "book.TITLE DESC");
-        BOOK_SORT_DESCENDING.put(
-            SortColumn.HOLDER,
-            "holder.LAST_NAME DESC, holder.FIRST_NAME DESC");
-        BOOK_SORT_DESCENDING.put(SortColumn.OWNER, "owner.FIRST_NAME DESC, owner.LAST_NAME DESC");
-        BOOK_SORT_DESCENDING.put(SortColumn.PUBLISHER, "publisher.NAME DESC");
-        BOOK_SORT_DESCENDING.put(SortColumn.AUTHOR, "book.AUTHOR DESC");
-    }
-
-    protected StatementAssembly buildBaseBookQuery()
-    {
-        StatementAssembly result = new StatementAssembly();
-
-        result.newLine("SELECT ");
-        result.addList(BOOK_SELECT_COLUMNS, ", ");
-
-        result.newLine("FROM ");
-        result.addList(BOOK_ALIAS_COLUMNS, ", ");
-
-        result.newLine("WHERE ");
-        result.addList(BOOK_JOINS, " AND ");
-
-        return result;
-    }
-
-    /**
-     *  Adds a sort ordering clause to the statement.  If ordering is null,
-     *  orders by book title.
-     * 
-     *  @param assembly to update
-     *  @param ordering defines the column to sort on, and the order (ascending or descending)
-     *  @since 3.0
-     * 
-     *
-     **/
-
-    protected void addSortOrdering(StatementAssembly assembly, SortOrdering ordering)
-    {
-        if (ordering == null)
-        {
-            assembly.newLine("ORDER BY book.TITLE");
-            return;
-        }
-
-        Map sorts = ordering.isDescending() ? BOOK_SORT_DESCENDING : BOOK_SORT_ASCENDING;
-
-        String term = (String) sorts.get(ordering.getColumn());
-
-        assembly.newLine("ORDER BY ");
-        assembly.add(term);
-    }
-
-    protected void addSubstringSearch(StatementAssembly assembly, String column, String value)
-    {
-        if (value == null)
-            return;
-
-        String trimmed = value.trim();
-        if (trimmed.length() == 0)
-            return;
-
-        // Here's the McKoi dependency: LOWER() is a database-specific
-        // SQL function.
-
-        assembly.addSep(" AND LOWER(");
-        assembly.add(column);
-        assembly.add(") LIKE");
-        assembly.addParameter("%" + trimmed.toLowerCase() + "%");
-    }
-
-    /**
-     *  Closes the resultSet (if not null), then the statement (if not null), 
-     *  then the Connection (if not null).  Exceptions are written to System.out.
-     *
-     **/
-
-    protected void close(Connection connection, IStatement statement, ResultSet resultSet)
-    {
-        if (resultSet != null)
-        {
-            try
-            {
-                resultSet.close();
-            }
-            catch (SQLException ex)
-            {
-                System.out.println("Exception closing result set.");
-                ex.printStackTrace();
-            }
-        }
-
-        if (statement != null)
-        {
-            try
-            {
-                statement.close();
-            }
-            catch (SQLException ex)
-            {
-                System.out.println("Exception closing statement.");
-                ex.printStackTrace();
-            }
-        }
-
-        if (connection != null)
-        {
-            try
-            {
-                connection.close();
-            }
-            catch (SQLException ex)
-            {
-                System.out.println("Exception closing connection.");
-                ex.printStackTrace();
-            }
-        }
-    }
-
-    private IPersonHome getPersonHome()
-    {
-        if (_personHome == null)
-        {
-            try
-            {
-                Object raw = _environment.lookup("ejb/Person");
-
-                _personHome = (IPersonHome) PortableRemoteObject.narrow(raw, IPersonHome.class);
-            }
-            catch (NamingException ex)
-            {
-                throw new XEJBException("Could not lookup Person home interface.", ex);
-            }
-
-        }
-
-        return _personHome;
-    }
-
-    private IPublisherHome getPublisherHome()
-    {
-        if (_publisherHome == null)
-        {
-            try
-            {
-                Object raw = _environment.lookup("ejb/Publisher");
-
-                _publisherHome =
-                    (IPublisherHome) PortableRemoteObject.narrow(raw, IPublisherHome.class);
-            }
-            catch (NamingException e)
-            {
-                throw new XEJBException("Could not lookup Publisher home interface.", e);
-            }
-
-        }
-
-        return _publisherHome;
-    }
-
-    private IBookHome getBookHome()
-    {
-        if (_bookHome == null)
-        {
-            try
-            {
-                Object raw = _environment.lookup("ejb/Book");
-
-                _bookHome = (IBookHome) PortableRemoteObject.narrow(raw, IBookHome.class);
-            }
-            catch (NamingException e)
-            {
-                throw new XEJBException("Could not lookup Book home interface.", e);
-            }
-
-        }
-
-        return _bookHome;
-    }
-
-    /**
-     *  Gets a new connection from the data source.
-     *
-     **/
-
-    protected Connection getConnection()
-    {
-        try
-        {
-            return _dataSource.getConnection();
-        }
-        catch (SQLException e)
-        {
-            throw new XEJBException("Unable to get database connection from pool.", e);
-        }
-    }
-
-    protected StatementAssembly buildBasePersonQuery()
-    {
-        StatementAssembly result;
-
-        result = new StatementAssembly();
-
-        result.newLine("SELECT PERSON_ID, FIRST_NAME, LAST_NAME, EMAIL, ");
-        result.newLine("   LOCKED_OUT, ADMIN, LAST_ACCESS");
-        result.newLine("FROM PERSON");
-
-        return result;
-    }
-
-    /**
-     *  Translates the next row from the result set into a {@link Person}.
-     *
-     *  <p>This works with queries generated by {@link #buildBasePersonQuery()}.
-     *
-     **/
-
-    protected Person convertRowToPerson(ResultSet set, Object[] columns) throws SQLException
-    {
-        int column = 1;
-
-        columns[Person.ID_COLUMN] = set.getObject(column++);
-        columns[Person.FIRST_NAME_COLUMN] = set.getString(column++);
-        columns[Person.LAST_NAME_COLUMN] = set.getString(column++);
-        columns[Person.EMAIL_COLUMN] = set.getString(column++);
-        columns[Person.LOCKED_OUT_COLUMN] = getBoolean(set, column++);
-        columns[Person.ADMIN_COLUMN] = getBoolean(set, column++);
-        columns[Person.LAST_ACCESS_COLUMN] = set.getTimestamp(column++);
-
-        return new Person(columns);
-    }
-
-    private Boolean getBoolean(ResultSet set, int index) throws SQLException
-    {
-        return set.getBoolean(index) ? Boolean.TRUE : Boolean.FALSE;
-    }
-
-    private void validateUniquePerson(String firstName, String lastName, String email)
-        throws RegistrationException
-    {
-        Connection connection = null;
-        IStatement statement = null;
-        ResultSet set = null;
-
-        String trimmedEmail = email.trim().toLowerCase();
-        String trimmedLastName = lastName.trim().toLowerCase();
-        String trimmedFirstName = firstName.trim().toLowerCase();
-
-        try
-        {
-            connection = getConnection();
-
-            StatementAssembly assembly = new StatementAssembly();
-            assembly.newLine("SELECT PERSON_ID");
-            assembly.newLine("FROM PERSON");
-            assembly.newLine("WHERE ");
-
-            assembly.add("LOWER(EMAIL) = ");
-            assembly.addParameter(trimmedEmail);
-
-            statement = assembly.createStatement(connection);
-            set = statement.executeQuery();
-
-            if (set.next())
-                throw new RegistrationException("Email address is already in use by another user.");
-
-            close(null, statement, set);
-
-            assembly = new StatementAssembly();
-            assembly.newLine("SELECT PERSON_ID");
-            assembly.newLine("FROM PERSON");
-            assembly.newLine("WHERE ");
-
-            assembly.add("LOWER(FIRST_NAME) = ");
-            assembly.addParameter(trimmedFirstName);
-            assembly.addSep(" AND ");
-            assembly.add("LOWER(LAST_NAME) = ");
-            assembly.addParameter(trimmedLastName);
-
-            statement = assembly.createStatement(connection);
-            set = statement.executeQuery();
-
-            if (set.next())
-                throw new RegistrationException("Name provided is already in use by another user.");
-
-        }
-        catch (SQLException e)
-        {
-            throw new RegistrationException("Could not access database: " + e.getMessage(), e);
-        }
-        finally
-        {
-            close(connection, statement, set);
-        }
-    }
-
-    public Book returnBook(Integer bookId) throws RemoteException, FinderException
-    {
-        IBookHome bookHome = getBookHome();
-        IBook book = bookHome.findByPrimaryKey(bookId);
-
-        Integer ownerPK = book.getOwnerId();
-
-        book.setHolderId(ownerPK);
-
-        return getBook(bookId);
-    }
-
-}
\ No newline at end of file
diff --git a/3.0.4/examples/VlibBeans/src/org/apache/tapestry/vlib/ejb/impl/PersonBean.java b/3.0.4/examples/VlibBeans/src/org/apache/tapestry/vlib/ejb/impl/PersonBean.java
deleted file mode 100644
index d3e9bc8..0000000
--- a/3.0.4/examples/VlibBeans/src/org/apache/tapestry/vlib/ejb/impl/PersonBean.java
+++ /dev/null
@@ -1,96 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.vlib.ejb.impl;
-
-import java.rmi.RemoteException;
-import java.sql.Timestamp;
-import java.util.Map;
-
-import javax.ejb.CreateException;
-
-/**
- *  Implementation of the Person entity.
- *
- *  <p>We're using container managed persistance.
- *
- *  @see org.apache.tapestry.vlib.ejb.IPerson
- *  @see org.apache.tapestry.vlib.ejb.IPersonHome
- *
- *  @version $Id$
- *  @author Howard Lewis Ship
- *
- **/
-
-public abstract class PersonBean extends AbstractEntityBean
-{
-
-	protected String[] getAttributePropertyNames()
-	{
-		return new String[] {
-			"firstName",
-			"lastName",
-			"email",
-			"password",
-			"lockedOut",
-			"admin",
-			"lastAccess" };
-	}
-
-    public abstract void setPersonId(Integer value);
-    
-    public abstract Integer getPersonId();
-
-	public abstract void setEmail(String value);
-
-	public abstract String getEmail();
-
-	public abstract void setFirstName(String value);
-
-	public abstract String getFirstName();
-
-	public abstract void setLastName(String value);
-
-	public abstract String getLastName();
-
-	public abstract void setPassword(String value);
-
-	public abstract String getPassword();
-
-	public abstract void setLockedOut(boolean value);
-
-	public abstract boolean getLockedOut();
-
-	public abstract void setAdmin(boolean value);
-
-	public abstract boolean getAdmin();
-
-	public abstract void setLastAccess(Timestamp value);
-
-	public abstract Timestamp getLastAccess();
-
-	public Integer ejbCreate(Map attributes) throws CreateException, RemoteException
-	{
-        updateEntityAttributes(attributes);
-        
-        setPersonId(allocateKey());
-        
-        return null;
-	}
-
-	public void ejbPostCreate(Map attributes)
-	{
-		// Do nothing
-	}
-}
\ No newline at end of file
diff --git a/3.0.4/examples/VlibBeans/src/org/apache/tapestry/vlib/ejb/impl/PublisherBean.java b/3.0.4/examples/VlibBeans/src/org/apache/tapestry/vlib/ejb/impl/PublisherBean.java
deleted file mode 100644
index 955ff95..0000000
--- a/3.0.4/examples/VlibBeans/src/org/apache/tapestry/vlib/ejb/impl/PublisherBean.java
+++ /dev/null
@@ -1,61 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.vlib.ejb.impl;
-
-import java.rmi.RemoteException;
-
-import javax.ejb.CreateException;
-
-/**
- *  Implementation of the Publisher entity.
- *
- *  <p>We're using container managed persistance.
- *
- *  @see org.apache.tapestry.vlib.ejb.IPublisher
- *  @see org.apache.tapestry.vlib.ejb.IPublisherHome
- *
- *  @version $Id$
- *  @author Howard Lewis Ship
- *
- **/
-
-public abstract class PublisherBean extends AbstractEntityBean
-{
-    public abstract void setPublisherId(Integer value);
-    
-    public abstract Integer getPublisherId();
-    
-	public abstract String getName();
-    
-	public abstract void setName(String value);
-
-	protected String[] getAttributePropertyNames()
-	{
-		return new String[] { "name" };
-	}
-
-	public Integer ejbCreate(String name) throws CreateException, RemoteException
-	{
-		setPublisherId(allocateKey());
-		setName(name);
-		
-		return null;
-	}
-
-	public void ejbPostCreate(String name)
-	{
-		// Do nothing
-	}
-}
\ No newline at end of file
diff --git a/3.0.4/examples/VlibEAR/META-INF/application.xml b/3.0.4/examples/VlibEAR/META-INF/application.xml
deleted file mode 100644
index 473226d..0000000
--- a/3.0.4/examples/VlibEAR/META-INF/application.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- $Id$ -->
-<!DOCTYPE application PUBLIC 
-  "-//Sun Microsystems, Inc.//DTD J2EE Application 1.2//EN" 
-  "http://java.sun.com/j2ee/dtds/application_1_2.dtd">
-<application>
-	<display-name>Virtual Library Application</display-name>
-	<module>
-		<ejb>vlibbeans.jar</ejb>
-	</module>
-	<module>
-		<web>
-			<web-uri>vlib.war</web-uri>
-			<context-root>/</context-root>
-		</web>
-	</module>
-</application>
diff --git a/3.0.4/examples/VlibEAR/build.xml b/3.0.4/examples/VlibEAR/build.xml
deleted file mode 100644
index d869851..0000000
--- a/3.0.4/examples/VlibEAR/build.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0"?>
-<!-- $Id$ -->
-
-<project name="Virtual Library - Enterprise Application Archive" default="install">
-
-  <property name="root.dir" value="../.."/>
-  <property file="${root.dir}/config/Version.properties"/>
-  <property file="${root.dir}/config/build.properties"/>
-  <property file="${root.dir}/config/common.properties"/>
-  
-  <target name="install">
-  
-  	<jar jarfile="${examples.dir}/${vlib.ear}">
-  	  <fileset dir=".">
-  	    <include name="META-INF/*"/>
-  	  </fileset>
-  	  <fileset dir="${examples.dir}">
-  	  	<include name="${vlib.war}"/>
-  	  	<include name="${vlibbeans.jar}"/>
-  	  </fileset>
-  	</jar>
-  
-  </target>
-
-</project>
\ No newline at end of file
diff --git a/3.0.4/examples/Workbench/.cvsignore b/3.0.4/examples/Workbench/.cvsignore
deleted file mode 100644
index c7f2d7a..0000000
--- a/3.0.4/examples/Workbench/.cvsignore
+++ /dev/null
@@ -1,2 +0,0 @@
-classes
-*.build
diff --git a/3.0.4/examples/Workbench/build.xml b/3.0.4/examples/Workbench/build.xml
deleted file mode 100644
index d213cd9..0000000
--- a/3.0.4/examples/Workbench/build.xml
+++ /dev/null
@@ -1,76 +0,0 @@
-<?xml version="1.0"?>
-<!-- $Id$ -->
-<project name="Tapestry Workbench Example" default="install">
-	<property name="root.dir" value="../.."/>
-	<property file="${root.dir}/config/Version.properties"/>
-	<property file="${root.dir}/config/build.properties"/>
-	<property file="${root.dir}/config/common.properties"/>
-	
-	<property name="config.dir" value="config"/>
-	<property name="build.dir" value=".build"/>
-	
-	<path id="compile.classpath">
-		<fileset dir="${root.lib.dir}">
-			<include name="*.jar"/>
-			<include name="${ext.dir}/*.jar"/>
-			<include name="${j2ee.dir}/*.jar"/>
-		</fileset>
-		<fileset dir="${lib.dir}">
-			<include name="*.jar"/>	
-		</fileset>
-	</path>
-	<target name="init">
-		<mkdir dir="${classes.dir}"/>
-	</target>
-	<target name="clean">
-		<delete dir="${classes.dir}" quiet="true"/>
-		<delete dir="${build.dir}" quiet="true"/>
-	</target>
-	<target name="compile" depends="init"
-		description="Compile all classes in the tutorial.">
-		<javac srcdir="${src.dir}" destdir="${classes.dir}" debug="on"
-			target="1.1" source="1.3">
-			<classpath refid="compile.classpath"/>
-		</javac>
-	</target>
-	<target name="install" depends="compile"
-		description="Compile all classes and build the installed WAR.">
-		
-		<mkdir dir="${build.dir}"/>
-		<mkdir dir="${examples.dir}"/>
-		
-		<copy file="${config.dir}/web.xml" todir="${build.dir}">
-			<filterset>
-				<filter token="TAPESTRY_JAR" value="${framework.jar}"/>
-			</filterset>
-		</copy>
-		
-		<war warfile="${examples.dir}/${workbench.war}"
-			webxml="${build.dir}/web.xml">
-			
-			<fileset dir="context"/>
-						
-			<classes dir="${classes.dir}"/>
-			<classes dir="${src.dir}">
-				<exclude name="**/*.java"/>
-				<exclude name="**/package.html"/>
-			</classes>
-			<classes dir="${root.config.dir}">
-			  <include name="log4j.properties"/>
-			</classes>
-			<lib dir="${lib.dir}">
-				<include name="*.jar"/>
-			</lib>
-			<lib dir="${root.lib.dir}">
-				<include name="*.jar"/>
-			</lib>			
-			<lib dir="${root.lib.dir}/${ext.dir}">
-			  <include name="*.jar"/>
-			</lib>
-			<lib dir="${root.lib.dir}/${runtime.dir}">
-			  <include name="*.jar"/>
-			</lib>
-		</war>
-	</target>
-	
-</project>
diff --git a/3.0.4/examples/Workbench/config/web.xml b/3.0.4/examples/Workbench/config/web.xml
deleted file mode 100644
index 48004f0..0000000
--- a/3.0.4/examples/Workbench/config/web.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0"?>
-<!--$Id$ -->
-<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
- "http://java.sun.com/dtd/web-app_2_3.dtd">
-<web-app>
-  <display-name>Tapestry Workbench Example</display-name>
-  
-	<filter>
-		<filter-name>redirect</filter-name>
-		<filter-class>org.apache.tapestry.RedirectFilter</filter-class>
-	</filter>
-	
-	<filter-mapping>
-		<filter-name>redirect</filter-name>
-		<url-pattern>/</url-pattern>
-	</filter-mapping>
-  
-  <servlet>
-  	<servlet-name>workbench</servlet-name>
-    <servlet-class>org.apache.tapestry.ApplicationServlet</servlet-class>
-  	<load-on-startup>0</load-on-startup>
-  </servlet>
-     
-  <servlet-mapping>
-  	<servlet-name>workbench</servlet-name>
-  	<url-pattern>/app</url-pattern>
-  </servlet-mapping>  
-
-  <session-config>
-  	<session-timeout>15</session-timeout>
-  </session-config>
-  
-  <taglib>
-  	<taglib-uri>http://jakarta.apache.org/tapestry/tld/tapestry_1_0.tld</taglib-uri>
-  	<taglib-location>/WEB-INF/lib/@TAPESTRY_JAR@</taglib-location>
-  </taglib>
-</web-app>
diff --git a/3.0.4/examples/Workbench/context/Chart.html b/3.0.4/examples/Workbench/context/Chart.html
deleted file mode 100644
index 690989f..0000000
--- a/3.0.4/examples/Workbench/context/Chart.html
+++ /dev/null
@@ -1,42 +0,0 @@
-<!-- $Id$ -->
-
-<span jwcid="@Border">
-
-<p>This page demonstrates using a form to drive the dynamic generation of a
-chart (courtesy of <a href="http://jcharts.sourceforge.net/">jCharts</a>).
-Enter names and values in the form and see them in the pie chart at the bottom.
-
-
-<span jwcid="showError"/>
-
-<form jwcid="form">
-
-<table class="form">
-	<tr class="column-header">
-		<th>Category</th>
-		<th>Value</th>
-	</tr>
-	
-	<tr jwcid="plotValues">
-		<td><input jwcid="inputName" size="40" maxlength="40"/></td>
-		<td><input jwcid="inputValue" size="20" maxlength="20"/></td>
-		<td><input jwcid="inputMarked"/></td>
-	</tr>
-
-	<tr>
-		<td colspan="2">
-			<input jwcid="add"/>
-			<input type="submit" value="Update">
-		</td>
-		<td>
-		<input jwcid="delete"/>
-		</td>
-	</tr>
-
-</table>
-
-</form>
-
-<img jwcid="@Image" image="ognl:chartImageAsset"/>
-
-</span>
\ No newline at end of file
diff --git a/3.0.4/examples/Workbench/context/Dates.html b/3.0.4/examples/Workbench/context/Dates.html
deleted file mode 100644
index ee6553a..0000000
--- a/3.0.4/examples/Workbench/context/Dates.html
+++ /dev/null
@@ -1,46 +0,0 @@
-<!-- $Id$ -->
-
-<span jwcid="@Border">
-
-This page is used to demonstrate the DatePicker component.
-
-<form jwcid="@Form">
-
-<table valign="middle">
- <tr>
- 	<td></td>
- 	<td><input type="checkbox" jwcid="@Checkbox" selected="ognl:includeWeek"
- 		onclick="javascript:this.form.submit();"/>
- 		Include weeks in DatePicker UI.
- 		</td>
- 	</tr>
- <tr>
-  <td>Start Date:</td>
-  <td><input jwcid="@DatePicker" includeWeek="ognl:includeWeek" value="ognl:startDate"/></td> <td>&nbsp;<a href="" jwcid="helpLink">PopupLink Help</a></td>
- </tr>
- <tr>
-  <td>End Date:</td>
-  <td><input jwcid="@DatePicker" includeWeek="ognl:includeWeek" value="ognl:endDate"/></td>
- </tr>
- <tr>
-  <td></td>
-  <td><input type="submit" value="Submit"/></td>
- </tr>
-</table>
-
-</form>
-
-<u>Submitted Dates</u><br/>
-
-<table valign="middle">
-	<tr>
-<th>Start date:</th>
-<td> <span jwcid="@Insert" value="ognl:startDate"/></td>
-</tr>
-	<tr>
-<th>End date:</th> 
-	<td>
-		<span jwcid="@Insert" value="ognl:endDate"/>
-		</td></tr>
-</table>
-</span>
\ No newline at end of file
diff --git a/3.0.4/examples/Workbench/context/ExceptionTab.html b/3.0.4/examples/Workbench/context/ExceptionTab.html
deleted file mode 100644
index dc91b92..0000000
--- a/3.0.4/examples/Workbench/context/ExceptionTab.html
+++ /dev/null
@@ -1,21 +0,0 @@
-<span jwcid="@Border">
-
-<p>Tapestry has sophisticated exception reporting for when things go wrong in development.
-Exception reporting is very smart, using reflection to work backwards through
-the chain of exceptions, displaying JavaBeans properties of each exception and
-a stack trace of the <em>deepest</em> exception.
-
-<p>In addition, a wealth of detail about the servlet, application, request, servlet context and JVM is displayed.
-The goal is to save developers debugging time by producing a complete report
-when exceptions do occur.
-
-<p>
-The look and feel of the exception reporting page can be customized by applications.
-
-<p>
-Click <a jwcid="@PageLink" href="#" page="ErrorFest">this link</a> for 
-a demonstration.  The specification of the target page
-has deliberate errors.
-
-
-</span>
diff --git a/3.0.4/examples/Workbench/context/Fields.html b/3.0.4/examples/Workbench/context/Fields.html
deleted file mode 100644
index ca6c783..0000000
--- a/3.0.4/examples/Workbench/context/Fields.html
+++ /dev/null
@@ -1,67 +0,0 @@
-<!-- $Id$ -->
-
-<span jwcid="@Border">
-
-Tapestry includes a number of form-related components.  Tapestry components are
-responsible for reading properties when a page is rendered, to supply default values,
-and writing properties when the form is submitted; it is never necesssary to write
-code to directly read HTTP parameters.
-
-<p>
-In addition, Tapestry includes the ValidField component which
-is part of a framework that allows for complex validation of user input
-as well as presentation of errors.
-
-<p>
-<form jwcid="@Form" listener="ognl:listeners.clientValidationChanged">
-<input jwcid="inputEnabled"/> Enable Client Side Validation
-</form>
-
-<p>ValidField components can perform validations on the client-side, triggered
-by the user submitting the form.  The checkbox above enables or disables
-this feature.  Input is always rechecked on the server-side (in case the client
-doesn't support JavaScript).
-
-<span jwcid="showError"/>
-
-<form jwcid="@Form" listener="ognl:listeners.formSubmit" delegate="ognl:beans.delegate">
-
-<table class="form">
-	<tr>
-		<th><span jwcid="@FieldLabel" field="ognl:components.inputDate"/></th>
-		<td><input jwcid="inputDate"/></td>
-	</tr>
-  <tr>
-  	<th><span jwcid="@FieldLabel" field="ognl:components.inputInt"/></th>
-  	<td><input jwcid="inputInt"/></td>
-  </tr>
-  <tr>
-  	<th><span jwcid="@FieldLabel" field="ognl:components.inputDouble"/></th>
-  	<td><input jwcid="inputDouble"/></td>
-  </tr>
-  <tr>
-  	<th><span jwcid="@FieldLabel" field="ognl:components.inputBigDecimal"/></th>
-  	<td><input jwcid="inputBigDecimal"/></td>
-  </tr>
-  <tr>
- 	<th><span jwcid="@FieldLabel" field="ognl:components.inputLong"/></th>
- 	<td><input jwcid="inputLong"/></td>
-  </tr>
-
-  <tr>
-  	<th><span jwcid="@FieldLabel" field="ognl:components.inputString"/></th>
-  	<td><input jwcid="inputString"/></td>
-  </tr>
-
-  <tr>
-  	<th><span jwcid="@FieldLabel" field="ognl:components.inputEmail""/></th>
-  	<td><input jwcid="inputEmail"/></td>
-  </tr>
-
-  <tr>
-  	<td></td>
-  	<td><input jwcid="@ImageSubmit" image="ognl:assets.continue"/> <a jwcid="@LinkSubmit">continue -&gt;</a></td>
-</table>
-
-</form>
-</span>
\ No newline at end of file
diff --git a/3.0.4/examples/Workbench/context/FieldsResults.html b/3.0.4/examples/Workbench/context/FieldsResults.html
deleted file mode 100644
index ce90a29..0000000
--- a/3.0.4/examples/Workbench/context/FieldsResults.html
+++ /dev/null
@@ -1,47 +0,0 @@
-<!-- $Id$-->
-
-<span jwcid="@Border">
-
-<table>
-	<tr>
-		<th>Date Value</th>
-		<td><span jwcid="@Insert" value="ognl:visit.dateValue"/></td>
-	</tr>
-
-	<tr>
-		<th>Integer Value</th>
-		<td><span jwcid="@Insert" value="ognl:visit.intValue"/></td>
-	</tr>
-
-	<tr>
-		<th>Double Value</th>
-		<td><span jwcid="@Insert" value="ognl:visit.doubleValue"/></td>
-	</tr>
-
-	<tr>
-		<th>Big Decimal Value</th>
-		<td><span jwcid="@Insert" value="ognl:visit.bigDecimalValue"/></td>
-	</tr>
-
-	<tr>
-		<th>Long Value</th>
-		<td><span jwcid="@Insert" value="ognl:visit.longValue"/></td>
-	</tr>
-
-	<tr>
-		<th>String Value</th>
-		<td><span jwcid="@Insert" value="ognl:visit.stringValue"/></td>
-	</tr>
-
-	<tr>
-		<th>Email Value</th>
-		<td><span jwcid="@Insert" value="ognl:visit.emailValue"/></td>
-	</tr>
-
-</table>
-
-<p>
-
-<a jwcid="@PageLink" page="Fields"><img jwcid="backRollover" alt="[Back]"/></a>
-
-</span>
diff --git a/3.0.4/examples/Workbench/context/FileSystemTableTree.html b/3.0.4/examples/Workbench/context/FileSystemTableTree.html
deleted file mode 100644
index a844880..0000000
--- a/3.0.4/examples/Workbench/context/FileSystemTableTree.html
+++ /dev/null
@@ -1,52 +0,0 @@
-<!-- generated by Spindle, http://spindle.sourceforge.net -->
-
-<span jwcid="@Border">
-
-<style>
-.tree .selectedNodeViewClass A:visited .fsNodeValue, .tree .selectedNodeViewClass A:active .fsNodeValue, .tree .selectedNodeViewClass A:link .fsNodeValue {
-	color:				white;
-	background-color: 	#3163CE;
-	text-decoration:	none
-}
-
-.tree .selectedNodeViewClass A:hover .fsNodeValue{
-	color:				white;
-	background-color: 	#3163CE;
-	text-decoration: 	underline;
-}
-
-tree .selectedNodeViewClass A:link, .tree .selectedNodeViewClass A:visited, .tree .selectedNodeViewClass A:active, .tree .selectedNodeViewClass A:hover  {
-	text-decoration: none;
-}
-
-
-
-.tree .notSelectedNodeViewClass A:visited .fsNodeValue, .tree .notSelectedNodeViewClass A:active .fsNodeValue, .tree .notSelectedNodeViewClass A:link .fsNodeValue{
-	color:				black;
-	background-color: 	white;
-	text-decoration:	none
-}
-
-.tree .notSelectedNodeViewClass A:hover .fsNodeValue{
-	color:				black;
-	background-color: 	white;
-	text-decoration: 	underline;
-}
-
-.tree .notSelectedNodeViewClass A:link, .tree .notSelectedNodeViewClass A:visited, .tree .notSelectedNodeViewClass A:active, .tree .notSelectedNodeViewClass A:hover  {
-	text-decoration: none;
-}
-
-.odd { background-color: #cccccc; }
-
-</style>
-    <h1>File System TreeTable Example</h1>
-    <address><a href="mailto:tsvetelin.saykov@rushmore-digital.com">developed by Tsvetelin</a></address>
-    <hr>
-    	<table border="1">
-    		<tr>
-    			<td valign="top"><span jwcid="tree"/></td>
-    			<td valign="top"><span jwcid="directoryTableView"/></td>
-    		</tr>
-    	</table>
-</span>
\ No newline at end of file
diff --git a/3.0.4/examples/Workbench/context/FileSystemTree.html b/3.0.4/examples/Workbench/context/FileSystemTree.html
deleted file mode 100644
index 9e52744..0000000
--- a/3.0.4/examples/Workbench/context/FileSystemTree.html
+++ /dev/null
@@ -1,53 +0,0 @@
-<!-- generated by Spindle, http://spindle.sourceforge.net -->
-
-<span jwcid="@Border">
-<style>
-.tree .selectedNodeViewClass A:visited .fsNodeValue, .tree .selectedNodeViewClass A:active .fsNodeValue, .tree .selectedNodeViewClass A:link .fsNodeValue {
-	color:				white;
-	background-color: 	#3163CE;
-	text-decoration:	none
-}
-
-.tree .selectedNodeViewClass A:hover .fsNodeValue{
-	color:				white;
-	background-color: 	#3163CE;
-	text-decoration: 	underline;
-}
-
-tree .selectedNodeViewClass A:link, .tree .selectedNodeViewClass A:visited, .tree .selectedNodeViewClass A:active, .tree .selectedNodeViewClass A:hover  {
-	text-decoration: none;
-}
-
-
-
-.tree .notSelectedNodeViewClass A:visited .fsNodeValue, .tree .notSelectedNodeViewClass A:active .fsNodeValue, .tree .notSelectedNodeViewClass A:link .fsNodeValue{
-	color:				black;
-	text-decoration:	none
-}
-
-.tree .notSelectedNodeViewClass A:hover .fsNodeValue{
-	color:				black;
-	text-decoration: 	underline;
-}
-
-.tree .notSelectedNodeViewClass A:link, .tree .notSelectedNodeViewClass A:visited, .tree .notSelectedNodeViewClass A:active, .tree .notSelectedNodeViewClass A:hover  {
-	text-decoration: none;
-}
-
-</style>
-    <h1>File System Tree Example</h1>
-    <address><a href="mailto:tsvetelin.saykov@rushmore-digital.com">developed by Tsvetelin</a></address>
-    <hr>
-    
-    	<table border="1">
-    		<tr>
-    			<td valign="top"><span class="tree" jwcid="treeView">
-						<span jwcid="treeData">
-							<span jwcid="treeNodeView"/>
-						</span>
-					</span>		
-				</td>
-				<td valign="top" height="100%"><span jwcid="directoryTableView"/></td>
-    		</tr>
-    	</table>
-</span>
\ No newline at end of file
diff --git a/3.0.4/examples/Workbench/context/Home.html b/3.0.4/examples/Workbench/context/Home.html
deleted file mode 100644
index c071812..0000000
--- a/3.0.4/examples/Workbench/context/Home.html
+++ /dev/null
@@ -1,15 +0,0 @@
-<span jwcid="@Border">
-
-<p>This is the Tapestry Workbench.  It is a testing ground for Tapestry.
-Each tab above links to a new page, or set of pages, that demonstrate Tapestry components and
-features.
-
-<p>The check box control below is used to enable or disable the display of request information.  This is
-a detailed description of incoming request and session data, the same as provided by
-the Tapestry Inspector.  This is very useful when trying to understand or debug a form component.
-
-<p>The Tapestry icon in the lower right corner raises the Tapestry Inspector in a new window.
-The Inspector is a mini-application used
-to explore a running Tapestry application.
-
-</span>
diff --git a/3.0.4/examples/Workbench/context/JSP.html b/3.0.4/examples/Workbench/context/JSP.html
deleted file mode 100644
index 0534375..0000000
--- a/3.0.4/examples/Workbench/context/JSP.html
+++ /dev/null
@@ -1,14 +0,0 @@
-<span jwcid="@Border">
-
-<p>This page demonstrates the Tapestry JSP tag library, which allows JSPs to call into
-	Tapestry applications.</p>
-	
-<p>Click <a href="#" jwcid="@DirectLink" listener="ognl:listeners.launch">this link</a>
-	to view the JSP page.
-</p>
-
-
-<p>
-You may want to turn on "Display Request Debug Information" below.	
-</p>
-</span>
diff --git a/3.0.4/examples/Workbench/context/JSPResults.html b/3.0.4/examples/Workbench/context/JSPResults.html
deleted file mode 100644
index a12d9a0..0000000
--- a/3.0.4/examples/Workbench/context/JSPResults.html
+++ /dev/null
@@ -1,23 +0,0 @@
-<span jwcid="@Border">
-
-<p>
-This page was invoked from a JSP.	
-</p>
-
-<span jwcid="@Conditional" condition="ognl:parameters">
-	
-<p>Parameters:
-<ul>
-<li jwcid="@Foreach" element="li" source="ognl:parameters" value="ognl:parameter">
-(<span jwcid="@Insert" value="ognl:parameter.class.getName()">java.lang.Object</span>)
-<span jwcid="@Insert" value="ognl:parameter"/>	
-</li>	
-</ul>	
-</p>	
-
-</span>
-	
-<p><a href="#" jwcid="@DirectLink" listener="ognl:listeners.launch">Return to the JSP page.</a>
-</p>
-
-</span>
diff --git a/3.0.4/examples/Workbench/context/Localization.html b/3.0.4/examples/Workbench/context/Localization.html
deleted file mode 100644
index 4375d2f..0000000
--- a/3.0.4/examples/Workbench/context/Localization.html
+++ /dev/null
@@ -1,25 +0,0 @@
-<!-- $Id$ -->
-
-<span jwcid="$content$">
-<span jwcid="@Border">
-
-<p>
-This page allows the locale to be changed.  Localization is used to select
-the HTML template used by the page (and any components on the page).  Likewise,
-assets, such as the change button, may also be localized and automatically
-selected.
-
-<p>
-Translation by 
-<a href="http://world.altavista.com">Babelfish</a> (and it's probably quite funny if you speak the
-language).
-
-<p>
-Select a new locale:
-
-<form jwcid="form">
-	<input jwcid="inputLocale"/>
-	<input jwcid="changeButton"/>
-</form>
-</span>
-</span>
diff --git a/3.0.4/examples/Workbench/context/LocalizationChange.html b/3.0.4/examples/Workbench/context/LocalizationChange.html
deleted file mode 100644
index ae65b1a..0000000
--- a/3.0.4/examples/Workbench/context/LocalizationChange.html
+++ /dev/null
@@ -1,7 +0,0 @@
-<span jwcid="@Border">
-
-Congratulations, you've changed the locale to <span jwcid="insertLocaleName"/>.
-
-<p><a jwcid="back"><img jwcid="chooseAgainImage"/></a>
-
-</span>
\ No newline at end of file
diff --git a/3.0.4/examples/Workbench/context/LocalizationChange_de.html b/3.0.4/examples/Workbench/context/LocalizationChange_de.html
deleted file mode 100644
index 1700e07..0000000
--- a/3.0.4/examples/Workbench/context/LocalizationChange_de.html
+++ /dev/null
@@ -1,8 +0,0 @@
-<span jwcid="@Border">
-
-
-Gl&#252;ckw&#252;nsche, haben Sie ge&#228;ndert das locale zu <span jwcid="insertLocaleName"/>.
-
-<p><a jwcid="back"><img jwcid="chooseAgainImage"/></a>
-
-</span>
\ No newline at end of file
diff --git a/3.0.4/examples/Workbench/context/LocalizationChange_fr.html b/3.0.4/examples/Workbench/context/LocalizationChange_fr.html
deleted file mode 100644
index ddb48e2..0000000
--- a/3.0.4/examples/Workbench/context/LocalizationChange_fr.html
+++ /dev/null
@@ -1,7 +0,0 @@
-<span jwcid="@Border">
-
-Des f&#233;licitations, vous avez chang&#233; le locale en <span jwcid="insertLocaleName"/>.
-
-<p><a jwcid="back"><img jwcid="chooseAgainImage"/></a>
-
-</span>
\ No newline at end of file
diff --git a/3.0.4/examples/Workbench/context/LocalizationChange_it.html b/3.0.4/examples/Workbench/context/LocalizationChange_it.html
deleted file mode 100644
index f12bf0c..0000000
--- a/3.0.4/examples/Workbench/context/LocalizationChange_it.html
+++ /dev/null
@@ -1,7 +0,0 @@
-<span jwcid="@Border">
-
-Congratulazioni, avete cambiato il locale a <span jwcid="insertLocaleName"/>.
-
-<p><a jwcid="back"><img jwcid="chooseAgainImage"/></a>
-
-</span>
\ No newline at end of file
diff --git a/3.0.4/examples/Workbench/context/Localization_de.html b/3.0.4/examples/Workbench/context/Localization_de.html
deleted file mode 100644
index 425aa6f..0000000
--- a/3.0.4/examples/Workbench/context/Localization_de.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<span jwcid="@Border">
-
-Diese Seite erlaubt, da&szlig; das locale ge&auml;ndert wird. 
-Lokalisation wird verwendet, um die HTML Schablone vorzuw&auml;hlen, die 
-durch die Seite benutzt wird (und irgendwelche Bestandteile auf der Seite). Ebenso k&ouml;nnen Werte, wie 
-die &Auml;nderung Taste, auch beschr&auml;nkt werden und automatisch vorgew&auml;hlt werden. 
-
-<p>&Uuml;bersetzung durch 
-<a href="http://world.altavista.com">Babelfish</a>
-(und sie ist vermutlich ziemlich lustig, wenn Sie die Sprache sprechen). 
-
-<p>W&#228;hlen Sie ein neues locale aus:
-
-<form jwcid="form">
-	<input jwcid="inputLocale"/>
-	<input jwcid="changeButton"/>
-</form>
-
-</span>
\ No newline at end of file
diff --git a/3.0.4/examples/Workbench/context/Localization_fr.html b/3.0.4/examples/Workbench/context/Localization_fr.html
deleted file mode 100644
index 46bc106..0000000
--- a/3.0.4/examples/Workbench/context/Localization_fr.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<span jwcid="@Border">
-
-Cette page permet au locale d'&eacute;tre chang&eacute;.
-La localisation est employ&eacute;e pour choisir le calibre de HTML employ&eacute; par la page 
-(et tous composants &agrave; la page). De m&ecirc;me, des capitaux, tels que le bouton de changement, 
-peuvent &eacute;galement &ecirc;tre localis&eacute;s et automatiquement choisis. 
-
-<p>Traduction par 
-<a href="http://world.altavista.com">Babelfish</a> 
-(et elle est probablement tout &agrave; fait dr&ocirc;le si vous parlez la langue).
-
-<p>Choisissez un nouveau locale: 
-
-<form jwcid="form">
-	<input jwcid="inputLocale"/>
-	<input jwcid="changeButton"/>
-</form>
-
-</span>
\ No newline at end of file
diff --git a/3.0.4/examples/Workbench/context/Localization_it.html b/3.0.4/examples/Workbench/context/Localization_it.html
deleted file mode 100644
index f1fd770..0000000
--- a/3.0.4/examples/Workbench/context/Localization_it.html
+++ /dev/null
@@ -1,21 +0,0 @@
-<span jwcid="@Border">
-
-Questa pagina permette che il locale sia cambiato. 
-La localizzazione &egrave; usata per selezionare la mascherina del HTML usata dalla pagina 
-(e da qualsiasi componenti alla pagina). 
-
-Inoltre, i beni, quale il tasto del cambiamento, possono anche essere localizzati 
-ed essere selezionati automaticamente. 
-
-<p>Traduzione da 
-<a href="http://world.altavista.com">Babelfish</a>
-(e da esso &egrave; probabilmente abbastanza divertente se parlate la lingua). 
-
-<p>Selezioni un nuovo locale: 
-
-<form jwcid="form">
-	<input jwcid="inputLocale"/>
-	<input jwcid="changeButton"/>
-</form>
-
-</span>
diff --git a/3.0.4/examples/Workbench/context/Palette.html b/3.0.4/examples/Workbench/context/Palette.html
deleted file mode 100644
index e982688..0000000
--- a/3.0.4/examples/Workbench/context/Palette.html
+++ /dev/null
@@ -1,38 +0,0 @@
-<span jwcid="@Border">
-
-<p>The Palette component is used to collect multiple selections, items are selected
-in the left column (available) and moved to the right column (selected).  The component
-can be configured to keep the items sorted by their visible label, their
-hidden value, or manually sorted.  Items are moved between columns using the buttons,
-or by double clicking.
-
-<form jwcid="@Form" listener="ognl:listeners.formSubmit">
-
-<table class="form">
-	<tr>
-		<th>Sort Mode:</th>
-		<td><input jwcid="inputColorSort"/></td>
-	</tr>
-	<tr>
-		<th>Colors:</th>
-		<td><input jwcid="inputColor"/></td>
-	</tr>
-	<tr>
-		<td></td>
-		<td><input jwcid="update"/>
-			<input jwcid="continue"/></td>
-	</tr>
-</table>
-
-</form>
-
-<p>
-Obviously, there's a whole lot of JavaScript running on the client side.  However, there
-are no arbitrary limits; you can have as many Palettes in a form as you want, or have multiple
-forms and multiple Palettes.  Tapestry uses a sophisticated method of generating custom JavaScript
-from a template.
-
-<p>You can also customize the images used for the buttons and the titles above the
-two selection columns.
-
-</span>
diff --git a/3.0.4/examples/Workbench/context/PaletteResults.html b/3.0.4/examples/Workbench/context/PaletteResults.html
deleted file mode 100644
index 48799dc..0000000
--- a/3.0.4/examples/Workbench/context/PaletteResults.html
+++ /dev/null
@@ -1,17 +0,0 @@
-<span jwcid="@Border">
-
-<p>Here are your selections.  If the Palette was set for manual sorting, then the order
-is significant.
-
-<ul>
-<li jwcid="loop"><span jwcid="@Insert" value="ognl:components.loop.value"/></li>
-</ul>
-
-<span jwcid="@Conditional" condition="ognl:! selectedColors">
-<p>You made no selections.
-</span>
-
-<p>
-<a jwcid="@PageLink" page="Palette"><img jwcid="backRollover" alt="[Back]"/></a>
-
-</span>
diff --git a/3.0.4/examples/Workbench/context/Redirect.html b/3.0.4/examples/Workbench/context/Redirect.html
deleted file mode 100644
index 052def3..0000000
--- a/3.0.4/examples/Workbench/context/Redirect.html
+++ /dev/null
@@ -1,32 +0,0 @@
-<span jwcid="@Border">
-
-<p>This page demonstrates that Tapestry can interoperate with
-traditional web applications.  A listener method may redirect
-to either an internal resource within the same
-web application, or to an external URL.
-
-<p>
-Examples:
-
-<ul>
-<li><a href="#" jwcid="@DirectLink" listener="ognl:listeners.redirectInternal">Forward to internal resource</a>  (redirect-target.html)
-<li><a href="#" jwcid="@DirectLink" listener="ognl:listeners.redirectExternal">Redirect to external URL</a>  (http://jakarta.apache.org/tapestry)
-</ul>
-
-<p>
-
-The code for both these cases is very simple:
-<pre>
-    public void redirectInternal(IRequestCycle cycle)
-    throws RequestCycleException
-    {
-        throw new RedirectException("redirect-target.html");
-    }
-
-    public void redirectExternal(IRequestCycle cycle)
-    throws RequestCycleException
-    {
-        throw new RedirectException("http://jakarta.apache.org/tapestry");
-    }
-</pre>
-</span>
diff --git a/3.0.4/examples/Workbench/context/Table.html b/3.0.4/examples/Workbench/context/Table.html
deleted file mode 100644
index b2b76b0..0000000
--- a/3.0.4/examples/Workbench/context/Table.html
+++ /dev/null
@@ -1,13 +0,0 @@
-<!-- $Id$ -->
-
-<span jwcid="$content$">
-
-<span jwcid="@Border">
-
-	<span jwcid="localeList"/>
-
-	<span jwcid="localeSelection"/>
-
-</span>
-
-</span>
diff --git a/3.0.4/examples/Workbench/context/TapestryTags.jsp b/3.0.4/examples/Workbench/context/TapestryTags.jsp
deleted file mode 100644
index 1b8e6d3..0000000
--- a/3.0.4/examples/Workbench/context/TapestryTags.jsp
+++ /dev/null
@@ -1,85 +0,0 @@
-<%@ taglib uri="http://jakarta.apache.org/tapestry/tld/tapestry_1_0.tld" prefix="tapestry" %>

-	

-		<html>

-<head>

-<title>Tapestry JSP Tags</title>

-<link rel="stylesheet" type="text/css" href="css/workbench.css">

-</head>

-<body>

-

-<!-- This is where the tabs would go.  Alas, used private assets for

-     the tabs. -->

-     

-<table class="tabs" cellspacing="0" border="0">

-<tr height="20">

-<td>&nbsp;</td>

-</tr>

-</table>

-

-<table class="content" width="100%">

-<tr>

-<td>

-

-<p>This page demostrates the use of the Tapestry JSP tag library.  It uses JSP tags to call into the Tapestry application.</p>

-

-

-<h3>page tag</h3>

-

-<blockquote>

-	&lt;tapestry:page page="JSP"&gt;View Result&lt;/tapestry:page&gt;

-</blockquote>

-

-<tapestry:page page="JSP">View Result</tapestry:page>

-

-

-<h3>page-url tag</h3>

-

-<blockquote>

-&lt;a href="&lt;tapestry:page-url page="JSP"/&gt;"&gt;View Result&lt;/a&gt;	

-</blockquote>

-

-

-<a href="<tapestry:page-url page="JSP"/>">View Result</a>

-

-

-

-<h3>external tag (string parameter)</h3>

-

-<blockquote>

-&lt;tapestry:external page="JSPResults" parameters="literal string"&gt;View Result&lt;/tapestry:external&gt;

-</blockquote>

-

-<tapestry:external page="JSPResults" parameters="literal string">View Result</tapestry:external>

-

-<h3>external tag (expression parameter)</h3>

-

-<blockquote>

-&lt;tapestry:external page="JSPResults" parameters="ognl: { new java.util.Date(), 21239495L, \"foo!\" }"&gt;View Result&lt;/tapestry:external&gt;

-</blockquote>

-

-<tapestry:external page="JSPResults" parameters="ognl: { new java.util.Date(), 21239495L, \"foo!\" }">View Result</tapestry:external>

-

-<h3>external-url tag</h3>

-

-

-<blockquote>

-&lt;form method="post" action="&lt;tapestry:external-url page="JSPResults"/&gt;"&gt;	

-</blockquote>

-

-<form method="post" action="<tapestry:external-url page="JSPResults"/>">

-<p>Enter your name:

-<input type="text" name="userName" size="40"/>

-</p>

-</form>

-

-<p>

-You may <a href="app">return to the Workbench</a>.

-

-</td>

-</tr>

-</table>

-<p>

-

-

-</body>

-</html>

diff --git a/3.0.4/examples/Workbench/context/TreeHome.html b/3.0.4/examples/Workbench/context/TreeHome.html
deleted file mode 100644
index e4cce1b..0000000
--- a/3.0.4/examples/Workbench/context/TreeHome.html
+++ /dev/null
@@ -1,24 +0,0 @@
-<!-- generated by Spindle, http://spindle.sourceforge.net -->
-
-<span jwcid="@Border">
-
-<h2>Contrib Tree Component Examples</h2>
-<p>
-<font color="red">NOTE: The Tree currently displays your full file system.<br>
-	You can change the root of the displayed folders by setting the TreeRootDir parameter in the web.xml file.
-	<br>Example:
-	<br>
-    &lt;init-param&gt;
-      <br>&nbsp;&nbsp; &lt;param-name&gt;TreeRootDir&lt;/param-name&gt;
-      <br>&nbsp;&nbsp; &lt;param-value&gt;/var/www/virtual/webapps/workbench&lt;/param-value&gt;
-   <br>&lt;/init-param&gt;
-</font>
-<p>
-There are 2 major components in the tree package.
-<p>The first one is called just a Tree. This components render the node views and divided the rows by inserting the HTML tag BR.
-<br><a jwcid="@PageLink" page="FileSystemTree">Here</a> you can test the simple file system demo - file explorer.
-<p>The second one is called TreeTable. It use Contrib:Table to render the rows with expanded tree nodes. 
-You could pass additional table columns to the TreeTable as parameters.
-<br><a jwcid="@PageLink" page="FileSystemTableTree">Here</a> you can test the simple file system demo - file explorer.
-
-</span>
\ No newline at end of file
diff --git a/3.0.4/examples/Workbench/context/Upload.html b/3.0.4/examples/Workbench/context/Upload.html
deleted file mode 100644
index 17cc5b7..0000000
--- a/3.0.4/examples/Workbench/context/Upload.html
+++ /dev/null
@@ -1,46 +0,0 @@
-<!-- $Id$ -->
-
-<span jwcid="$content$">
-
-<span jwcid="@Border">
-
-<p>The Upload component is used as a form element and allows files to be uploaded to Tapestry.  It can
-be freely mixed with other components in a form.
-
-<p>The following form allows you to upload a file and see a hexadecimal dump of it.
-
-<span jwcid="@ShowError" delegate="ognl:beans.delegate"/>
-
-<form jwcid="@Form" listener="ognl:listeners.formSubmit">
-
-<table class="form">
-	<tr>
-		<th>File:</th>
-		<td><input jwcid="inputFile@Upload" file="ognl:file" size="30"/></td>
-	</tr>
-	<tr>
-		<th>Options:</th>
-		<td>
-			<table class="form">
-				<tr>
-					<th><input jwcid="@Checkbox" selected="ognl:showAscii"/></th>
-					<td>Display ASCII</td>
-				</tr>
-				<tr>
-					<th><select jwcid="inputWidth"/></th>
-					<td>bytes per line</td>
-				</tr>
-			</table>
-	</tr>
-	
-	<tr>
-		<td></td>
-		<td><input jwcid="@ImageSubmit" image="ognl:assets.continue"/></td>
-	</tr>
-	
-</table>
-</form>
-
-</span>
-
-</span>
\ No newline at end of file
diff --git a/3.0.4/examples/Workbench/context/UploadResults.html b/3.0.4/examples/Workbench/context/UploadResults.html
deleted file mode 100644
index b6e51bf..0000000
--- a/3.0.4/examples/Workbench/context/UploadResults.html
+++ /dev/null
@@ -1,28 +0,0 @@
-<span jwcid="@Border">
-
-<table border=0>
-	<tr><th>Upload Path:</th>
-		<td><span jwcid="@Insert" value="ognl:file.filePath">File path</span></td>
-	</tr>
-	<tr><th>Upload File:</th>
-		<td><span jwcid="@Insert" value="ognl:file.fileName">File name</span></td>
-	</tr>
-	<tr><th>Content Type:</th>
-		<td><span jwcid="@Insert" value="ognl:file.contentType">text/plain</span></td>
-	</tr>	
-	<tr>
-		<th>Size:</th>	
-		<td><span jwcid="@Insert" value="ognl:file.size">1000</span> (bytes)
-			
-		<span jwcid="@Conditional" condition="ognl:file.inMemory">(in memory)</span>	
-		</td>
-	</tr>
-</table>
-
-<p>
-<pre><span jwcid="@Insert" value="ognl:fileDump"/></pre>
-
-<p>
-<a jwcid="@PageLink" page="Upload"><img jwcid="backRollover" alt="[Back]"/></a>
-
-</span>
diff --git a/3.0.4/examples/Workbench/context/WEB-INF/Border.html b/3.0.4/examples/Workbench/context/WEB-INF/Border.html
deleted file mode 100644
index ee4d120..0000000
--- a/3.0.4/examples/Workbench/context/WEB-INF/Border.html
+++ /dev/null
@@ -1,56 +0,0 @@
-<html jwcid="@Shell" stylesheet="ognl:assets.stylesheet" title="message:window.title">
-<body jwcid="@Body">
-
-<table class="tabs" cellspacing="0" border="0">
-<tr>
-<span jwcid="@Foreach" source="ognl:pageTabNames" value="ognl:pageName">
-<td><img jwcid="@Image" image="ognl:leftTabAsset" width="2" height="20"/></td>
-<td jwcid="tabCell" align="middle"><a class="nav" jwcid="pageLink"><span jwcid="@Insert" value="ognl:pageTitle">Page Title</span></a></td>
-<td><img jwcid="@Image" image="ognl:rightTabAsset" width="13" height="20"/></td>
-</span>
-</tr>
-</table>
-
-<table class="content">
-<tr>
-<td>
-
-<span jwcid="@RenderBody">Page content goes here.</span>
-
-</td>
-</tr>
-</table>
-
-<br>
-
-<form jwcid="@Form">
-      
-<table class="requestDebug" cellspacing="0">
-  <tr class="control">
-    <td>
-
-        <input type="checkbox" jwcid="inputRequestDebug"/>
-        <span key="prompt.display-request-debug">Display Request Debug Information</span>
-  
-    </td>
-    
-    <td align="right">
-    <input type="checkbox" jwcid="inputDisableInspector"/> Disable Inspector
-    </td>
-    
-  </tr>
-  <tr class="data">
-    <td colspan="2">
-      <span jwcid="@Conditional" condition="ognl:page.visit.requestDebug">
-        <span jwcid="@Delegator" delegate="ognl:page.requestCycle.requestContext"/>
-      </span>
-    </td>
-  </tr>
-</table>
-
-</form>
-    
-<span jwcid="@contrib:InspectorButton" disabled="ognl:page.visit.disableInspector"/>
-
-</body>
-</html>
diff --git a/3.0.4/examples/Workbench/context/WEB-INF/Border.jwc b/3.0.4/examples/Workbench/context/WEB-INF/Border.jwc
deleted file mode 100644
index 6184a19..0000000
--- a/3.0.4/examples/Workbench/context/WEB-INF/Border.jwc
+++ /dev/null
@@ -1,64 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE component-specification PUBLIC
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN"
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<component-specification
-  class="org.apache.tapestry.workbench.components.Border"
-  allow-informal-parameters="no">
-
-   <property-specification name="pageName" type="java.lang.String"/>
-   <property-specification name="activePageName" type="java.lang.String"/>
-
-  <component id="tabCell" type="Any">
-  	<static-binding name="element" value="td"/>
-  	<binding name="background" expression="midTabAsset"/>
-  </component>
-
-
-  <component id="pageLink" type="DirectLink">
-    <binding name="listener" expression="listeners.selectPage"/>
-    <binding name="parameters" expression="pageName"/>
-    <binding name="stateful" expression="false"/>
-  </component>
-
-  <component id="inputRequestDebug" type="Checkbox">
-    <binding name="selected" expression="page.visit.requestDebug"/>
-    <static-binding name="onclick">
-    	javascript:this.form.submit();
-    </static-binding>
-  </component>
-
-  <component id="inputDisableInspector" type="Checkbox">
-    <binding name="selected" expression="page.visit.disableInspector"/>
-    <static-binding name="onclick">
-    	javascript:this.form.submit();
-    </static-binding>
-  </component>
-
-  <context-asset name="activeLeft" path="images/tab-active-left.gif"/>
-  <context-asset name="activeMid" path="images/tab-active-mid.gif"/>
-  <context-asset name="activeRight" path="images/tab-active-right.gif"/>
-
-  <context-asset name="inactiveLeft" path="images/tab-inactive-left.gif"/>
-  <context-asset name="inactiveMid" path="images/tab-inactive-mid.gif"/>
-  <context-asset name="inactiveRight" path="images/tab-inactive-right.gif"/>
-
-  <context-asset name="stylesheet" path="css/workbench.css"/>  
- </component-specification>
diff --git a/3.0.4/examples/Workbench/context/WEB-INF/Border.properties b/3.0.4/examples/Workbench/context/WEB-INF/Border.properties
deleted file mode 100644
index a40f14f..0000000
--- a/3.0.4/examples/Workbench/context/WEB-INF/Border.properties
+++ /dev/null
@@ -1,26 +0,0 @@
-# $Id$
-#
-# Contains strings used by the Border component.
-
-# Page titles for each page:
-
-Home=Home
-Localization=L10N
-Fields=Fields
-Palette=Palette
-Upload=Upload
-Chart=Chart
-Redirect=Redirect
-ExceptionTab=Exception
-Dates=Dates
-Table=Table
-JSP=JSP
-TreeHome=Tree
-
-# Order of tabs across the top, space separated
-# These are the page names.
-
-tabOrder=Home Localization Fields Dates Chart Palette Upload Redirect JSP ExceptionTab Table TreeHome
-
-window.title=Tapestry Component Workbench
-prompt.display-request-debug=Display Request Debug Information
diff --git a/3.0.4/examples/Workbench/context/WEB-INF/Border_de.properties b/3.0.4/examples/Workbench/context/WEB-INF/Border_de.properties
deleted file mode 100644
index 28c3658..0000000
--- a/3.0.4/examples/Workbench/context/WEB-INF/Border_de.properties
+++ /dev/null
@@ -1,12 +0,0 @@
-# $Id$
-
-Home=Haupt
-Fields=Felder
-Palette=Anwählungen
-Upload=Antriebskraft
-Chart=Diagramm
-Redirect=Umadressieren
-ExceptionTab=Ausnahme
-
-window.title=Tapisserie Bestandteil Werktisch
-prompt.display-request-debug=Anzeige Antrag Prüfen Informationen Aus
diff --git a/3.0.4/examples/Workbench/context/WEB-INF/Border_fr.properties b/3.0.4/examples/Workbench/context/WEB-INF/Border_fr.properties
deleted file mode 100644
index f2d9956..0000000
--- a/3.0.4/examples/Workbench/context/WEB-INF/Border_fr.properties
+++ /dev/null
@@ -1,11 +0,0 @@
-# $Id$
-
-Home=Maison
-Fields=Zones
-Palette=Sélections
-Redirect=Réorientent
-Chart=Diagramme
-Upload=Téléchargement
-
-window.title=Établi De Composant De Tapisserie
-prompt.display-request-debug=La Demande D'Affichage Corrigent L'Information
diff --git a/3.0.4/examples/Workbench/context/WEB-INF/Border_it.properties b/3.0.4/examples/Workbench/context/WEB-INF/Border_it.properties
deleted file mode 100644
index d9a6c2d..0000000
--- a/3.0.4/examples/Workbench/context/WEB-INF/Border_it.properties
+++ /dev/null
@@ -1,11 +0,0 @@
-# $Id$
-
-Home=Domestico
-Fields=Campi
-Palette=Selezioni
-Chart=Tabella
-Redirect=Riorientano
-ExceptionTab=Eccezione
-
-window.title=Banco da lavoro Del Componente Della Tappezzeria
-prompt.display-request-debug=La Richiesta Dell'Esposizione Mette a punto Le Informazioni
diff --git a/3.0.4/examples/Workbench/context/WEB-INF/Chart.page b/3.0.4/examples/Workbench/context/WEB-INF/Chart.page
deleted file mode 100644
index 419c2c1..0000000
--- a/3.0.4/examples/Workbench/context/WEB-INF/Chart.page
+++ /dev/null
@@ -1,78 +0,0 @@
-<?xml version="1.0"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE page-specification PUBLIC
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<page-specification class="org.apache.tapestry.workbench.chart.ChartPage">
-
-  <bean name="delegate" class="org.apache.tapestry.workbench.WorkbenchValidationDelegate"/>
-  
-	<bean name="required" class="org.apache.tapestry.valid.StringValidator" lifecycle="page">
-	  <set-property name="required" expression="true"/>
-	</bean>
-
-  <bean name="intValidator" class="org.apache.tapestry.valid.NumberValidator" lifecycle="page">
-  	<set-property name="required" expression="true"/>
-  	<set-property name="minimum" expression="0"/>
-  </bean>
-
-  <component id="showError" type="ShowError">
-     <binding name="delegate" expression="beans.delegate"/>
-  </component>
-
-  <component id="form" type="Form">
-    <binding name="listener" expression="listeners.submit"/>
-    <binding name="delegate" expression="beans.delegate"/>
-  </component>
-
-  <component id="plotValues" type="Foreach">
-    <binding name="source" expression="plotValues"/>
-    <binding name="value" expression="plotValue"/>
-    <static-binding name="element" value="tr"/>
-  </component>
-
-  <component id="inputName" type="ValidField">
-  	<static-binding name="displayName" value="Name"/>
-  	<binding name="value" expression="plotValue.name"/>
-  	<binding name="validator" expression="beans.required"/>
-  </component>
-
-  <component id="inputValue" type="ValidField">	
-  	<static-binding name="displayName" value="Value"/>
-  	<binding name="value" expression="plotValue.value"/>
-  	<binding name="validator" expression="beans.intValidator"/>
-  	<static-binding name="type" value="int"/>
-  </component>
-  
-  <component id="inputMarked" type="Checkbox">
-    <binding name="selected" expression="markedForDeletion"/>
-  </component>
-  
-  <component id="add" type="Submit">
-  	<binding name="listener" expression="listeners.add"/>
-  	<static-binding name="label" value="Update and Add"/>
-  </component>
-  
-  <component id="delete" type="Submit">	
-  	<binding name="listener" expression="listeners.delete"/>
-  	<static-binding name="label" value="Delete Selected"/>
-  </component>
-
-</page-specification>
-
diff --git a/3.0.4/examples/Workbench/context/WEB-INF/Dates.page b/3.0.4/examples/Workbench/context/WEB-INF/Dates.page
deleted file mode 100644
index f526da7..0000000
--- a/3.0.4/examples/Workbench/context/WEB-INF/Dates.page
+++ /dev/null
@@ -1,34 +0,0 @@
-<?xml version="1.0"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- Forms.page,v 1.1 2002/08/23 22:18:31 hship Exp -->
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<page-specification class="org.apache.tapestry.workbench.fields.Dates">
-
-	<component id="helpLink" type="contrib:PopupLink">
-		<binding name="href" expression='"popuplink-help.html"'/>
-		<binding name="height" expression="400"/>
-		<binding name="width" expression="850"/>
-		<binding name="features" expression='"top=200,left=100,resizable=yes,scrollbars=yes"'/>
-	</component>
-	
-	<property-specification name="includeWeek" type="boolean" persistent="yes"/>
-	
-</page-specification>
-
diff --git a/3.0.4/examples/Workbench/context/WEB-INF/DirectoryTableView.html b/3.0.4/examples/Workbench/context/WEB-INF/DirectoryTableView.html
deleted file mode 100644
index 8fa49b2..0000000
--- a/3.0.4/examples/Workbench/context/WEB-INF/DirectoryTableView.html
+++ /dev/null
@@ -1,9 +0,0 @@
-<span jwcid="$content$">
-<table height="100%">
-	<tr>
-		<td valign="top">Table View Of Folder : <span jwcid="@Insert" value="ognl:selectedNodeName"/></td>
-	</tr>
-	<tr>
-		<td valign="top"><span jwcid="table"/></td>
-	</tr>
-</span>		
diff --git a/3.0.4/examples/Workbench/context/WEB-INF/DirectoryTableView.jwc b/3.0.4/examples/Workbench/context/WEB-INF/DirectoryTableView.jwc
deleted file mode 100644
index 42ff1b9..0000000
--- a/3.0.4/examples/Workbench/context/WEB-INF/DirectoryTableView.jwc
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!--  $Id$ -->
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<component-specification class="org.apache.tapestry.workbench.tree.examples.DirectoryTableView"
-    allow-body="yes" allow-informal-parameters="yes">
-    
-	<component id="table" type="contrib:Table">
-		<binding name="tableModel" expression="tableModel"/>
-		<!--binding name="tableSessionStateManager" expression="tableSessionStateManager"/-->
-	</component>
-
-
-</component-specification>
\ No newline at end of file
diff --git a/3.0.4/examples/Workbench/context/WEB-INF/ErrorFest.page b/3.0.4/examples/Workbench/context/WEB-INF/ErrorFest.page
deleted file mode 100644
index c4b3e2e..0000000
--- a/3.0.4/examples/Workbench/context/WEB-INF/ErrorFest.page
+++ /dev/null
@@ -1,83 +0,0 @@
-<?xml version="1.0"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<page-specification class="org.apache.tapestry.workbench.fields.Fields">
-	<component id="border" type="Border"/>
-	<component id="showError" type="ShowError">
-		<binding name="delegate" expression="beans.delegate"/>
-	</component>
-	<component id="form" type="Form">
-		<binding name="listener" expression="listeners.formSubmit"/>
-		<binding name="delegate" expression="beans.delegate"/>
-	</component>
-	<component id="dateLabel" type="FieldLabel">
-		<binding name="field" expression="components.inputDate"/>
-	</component>
-	<component id="inputDate" type="ValidField">
-		<binding name="validator" expression="beans.dateValidator"/>
-		<binding name="value" expression="visit.dateValue"/>
-		<static-binding name="displayName">Date Field</static-binding>
-	</component>
-	<component id="intLabel" type="FieldLabel">
-		<binding name="field" expression="components.inputInt"/>
-	</component>
-	<component id="inputInt" type="ValidField">
-		<binding name="validator" expression="beans.intValidator"/>
-		<binding name="value" expression="visit.intValue"/>
-		<static-binding name="displayName">Integer Field</static-binding>
-	</component>
-	<component id="doubleLabel" type="FieldLabel">
-		<binding name="field" expression="components.inputDouble"/>
-	</component>
-	<component id="inputDouble" type="ValidField">
-		<binding name="validator" expression="beans.doubleValidator"/>
-		<binding name="value" expression="visit.doubleValue"/>
-		<static-binding name="displayName">Double Field</static-binding>
-	</component>
-	<component id="bigDecimalLabel" type="FieldLabel">
-		<binding name="field" expression="components.inputBigDecimal"/>
-	</component>
-	<component id="inputBigDecimal" type="ValidField">
-		<binding name="value" expression="visit.bigDecimalValue"/>
-		<binding name="validator" expression="beans.bigDecimalValidator"/>
-		<static-binding name="displayName">Big Decimal Field</static-binding>
-	</component>
-	<component id="longLabel" type="FieldLabel">
-		<binding name="field" expression="components.inputLong"/>
-	</component>
-	<component id="inputLong" type="ValidField">
-		<binding name="value" expression="visit.longValue"/>
-		<binding name="validator" expression="beans.longValidator"/>
-		<static-binding name="displayName">Long Field</static-binding>
-	</component>
-	<component id="stringLabel" type="FieldLabel">
-		<binding name="field" expression="components.inputString"/>
-	</component>
-	<component id="inputString" type="ValidField">
-		<binding name="value" expression="visit.stringValue"/>
-		<binding name="validator" expression="beans.stringValidator"/>
-		<static-binding name="displayName">String Field</static-binding>
-	</component>
-	<component id="continue" type="ImageSubmit">
-		<binding name="image" propertypath="assets.continue"/>
-	</component>
-	<context-asset name="continue" path="/images/workbench/Continue.gif"/>
-</page-specification>
diff --git a/3.0.4/examples/Workbench/context/WEB-INF/Fields.page b/3.0.4/examples/Workbench/context/WEB-INF/Fields.page
deleted file mode 100644
index 3ad8ca0..0000000
--- a/3.0.4/examples/Workbench/context/WEB-INF/Fields.page
+++ /dev/null
@@ -1,132 +0,0 @@
-<?xml version="1.0"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<page-specification class="org.apache.tapestry.workbench.fields.Fields">
-
-  <bean name="delegate" class="org.apache.tapestry.workbench.WorkbenchValidationDelegate"/>
-
-  <bean name="dateValidator" lifecycle="render" class="org.apache.tapestry.valid.DateValidator">
-  	<set-property name="required" expression="true"/>
-  	<set-property name="clientScriptingEnabled" expression="clientValidationEnabled"/>
-  </bean>
-
-  <bean name="intValidator" lifecycle="render" class="org.apache.tapestry.valid.NumberValidator">
-  	<set-property name="required" expression="true"/>
-  	<set-property name="minimum" expression="@org.apache.tapestry.workbench.fields.Fields@INT_MIN"/>
-  	<set-property name="maximum" expression="@org.apache.tapestry.workbench.fields.Fields@INT_MAX"/>
-  	<set-property name="clientScriptingEnabled" expression="clientValidationEnabled"/>
-  	<set-property name="valueType">"int"</set-property>
-  </bean>
-
-  <bean name="doubleValidator" lifecycle="render" class="org.apache.tapestry.valid.NumberValidator">
-  	<set-property name="required" expression="true"/>
-  	<set-property name="minimum" expression="@org.apache.tapestry.workbench.fields.Fields@DOUBLE_MIN"/>
-  	<set-property name="maximum" expression="@org.apache.tapestry.workbench.fields.Fields@DOUBLE_MAX"/>
-  	<set-property name="clientScriptingEnabled" expression="clientValidationEnabled"/>
-  	<set-property name="valueType">"double"</set-property>
-  </bean>
-
-
-  <bean name="bigDecimalValidator" lifecycle="render" class="org.apache.tapestry.valid.NumberValidator">
-  	<set-property name="required" expression="true"/>
-  	<set-property name="minimum" expression="@org.apache.tapestry.workbench.fields.Fields@DECIMAL_MIN"/>
-  	<set-property name="maximum" expression="@org.apache.tapestry.workbench.fields.Fields@DECIMAL_MAX"/>
-  	<set-property name="clientScriptingEnabled" expression="clientValidationEnabled"/>
-  	<set-property name="valueType">"java.math.BigDecimal"</set-property>
-  </bean>
-
-  <bean name="longValidator" lifecycle="render" class="org.apache.tapestry.valid.NumberValidator">
-  	<set-property name="required" expression="true"/>
-  	<set-property name="minimum" expression="@org.apache.tapestry.workbench.fields.Fields@LONG_MIN"/>
-  	<set-property name="maximum" expression="@org.apache.tapestry.workbench.fields.Fields@LONG_MAX"/>
-  	<set-property name="clientScriptingEnabled" expression="clientValidationEnabled"/>
-  	<set-property name="valueType">"long"</set-property>
-  </bean>
-
-  <bean name="stringValidator" lifecycle="render" class="org.apache.tapestry.valid.StringValidator">
-  	<set-property name="required" expression="true"/>
-  	<set-property name="minimumLength" expression="@org.apache.tapestry.workbench.fields.Fields@STRING_MIN_LENGTH"/>
-  	<set-property name="clientScriptingEnabled" expression="clientValidationEnabled"/>
-  </bean>
-
-  <bean name="emailValidator" lifecycle="render" class="org.apache.tapestry.valid.EmailValidator">
-  	<set-property name="required" expression="true"/>
-  	<set-property name="minimumLength" expression='6'/>
-  	<set-property name="clientScriptingEnabled" expression="clientValidationEnabled"/>
-  </bean>
-  
-  <component id="inputEnabled" type="Checkbox">
-    <binding name="selected" expression="clientValidationEnabled"/> 
-    <static-binding name="onclick">
-    	javascript:this.form.submit();
-    </static-binding>    
-  </component>
-  
-  <component id="showError" type="ShowError">
-     <binding name="delegate" expression="beans.delegate"/>
-  </component>
-
-  <component id="inputDate" type="ValidField">
-    <binding name="validator" expression="beans.dateValidator"/>
-    <binding name="value" expression="visit.dateValue"/>
-    <static-binding name="displayName" value="Date Field"/>
-  </component>
-
-  <component id="inputInt" type="ValidField">
-    <binding name="validator" expression="beans.intValidator"/>
-    <binding name="value" expression="visit.intValue"/>
-    <static-binding name="displayName" value="Integer Field"/>
-  </component>
-
-  <component id="inputDouble" type="ValidField">
-    <binding name="validator" expression="beans.doubleValidator"/>
-    <binding name="value" expression="visit.doubleValue"/>
-    <static-binding name="displayName" value="Double Field"/>
-  </component>
-
-  <component id="inputBigDecimal" type="ValidField">
-   <binding name="value" expression="visit.bigDecimalValue"/>
-    <binding name="validator" expression="beans.bigDecimalValidator"/>
-    <static-binding name="displayName" value="Big Decimal Field"/>
-  </component>
-
-  <component id="inputLong" type="ValidField">
-    <binding name="value" expression="visit.longValue"/>
-    <binding name="validator" expression="beans.longValidator"/>
-    <static-binding name="displayName" value="Long Field"/>
-  </component>
-
-  <component id="inputString" type="ValidField">
-    <binding name="value" expression="visit.stringValue"/>
-    <binding name="validator" expression="beans.stringValidator"/>
-    <static-binding name="displayName" value="String Field"/>
-  </component>
-
-  <component id="inputEmail" type="ValidField">
-    <binding name="value" expression="visit.emailValue"/>
-    <binding name="validator" expression="beans.emailValidator"/>
-    <static-binding name="displayName" value="Email Field"/>
-  </component>
-
-  <context-asset name="continue" path="images/Continue.gif"/>
-
-</page-specification>
-
diff --git a/3.0.4/examples/Workbench/context/WEB-INF/FieldsResults.page b/3.0.4/examples/Workbench/context/WEB-INF/FieldsResults.page
deleted file mode 100644
index 41c0cb9..0000000
--- a/3.0.4/examples/Workbench/context/WEB-INF/FieldsResults.page
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0"?>
-<!--
-    Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<page-specification>
-
-  <component id="backRollover" type="Rollover">
-    <binding name="image" expression="assets.back"/>
-    <binding name="focus" expression="assets.backFocus"/>
-  </component>
-
-  <context-asset name="back" path="images/Back.gif"/>
-  <context-asset name="backFocus" path="images/Back-focus.gif"/>
-
-</page-specification>
-
-
-
diff --git a/3.0.4/examples/Workbench/context/WEB-INF/FileSystemTableTree.page b/3.0.4/examples/Workbench/context/WEB-INF/FileSystemTableTree.page
deleted file mode 100644
index c3011b3..0000000
--- a/3.0.4/examples/Workbench/context/WEB-INF/FileSystemTableTree.page
+++ /dev/null
@@ -1,49 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-
-<page-specification class="org.apache.tapestry.workbench.tree.examples.FileSystemTreeTable">
-
-
-    <component id="body" type="Body"/>
-
-    <component id="currentTime" type="Insert">
-        <binding name="value" expression='currentTime'/>
-    </component>
-
-    <component id="shell" type="Shell">
-        <binding name="stylesheet" expression='assets.stylesheet'/>
-        <static-binding name="title">Home</static-binding>
-    </component>
-
-    <component id="tree" type="contrib:TreeTable">
-        <binding name="nodeRenderFactory" expression='renderFactory'/>
-        <binding name="sessionStateManager" expression='sessionStateManager'/>
-        <binding name="treeModel" expression='treeModel'/>
-        <static-binding name="entriesPerTablePage">40</static-binding>
-        <binding name="tableColunms" expression='tableColumns'/>
-        <binding name="treeStateListener" expression='treeStateListener'/>
-    </component>
-
-    <component id="directoryTableView" type="DirectoryTableView">
-        <binding name="selectedFolderSource" expression='selectedFolderSource'/>
-    </component>
-</page-specification>
diff --git a/3.0.4/examples/Workbench/context/WEB-INF/FileSystemTree.page b/3.0.4/examples/Workbench/context/WEB-INF/FileSystemTree.page
deleted file mode 100644
index 7b6bc6b..0000000
--- a/3.0.4/examples/Workbench/context/WEB-INF/FileSystemTree.page
+++ /dev/null
@@ -1,57 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-
-<page-specification class="org.apache.tapestry.workbench.tree.examples.FileSystemTree">
-
-    <component id="currentTime" type="Insert">
-        <binding name="value" expression='currentTime'/>
-    </component>
-
-    <component id="shell" type="Shell">
-        <binding name="stylesheet" expression='assets.stylesheet'/>
-        <static-binding name="title">Home</static-binding>
-    </component>
-
-    <component id="treeData" type="contrib:TreeDataView">
-        <binding name="treeView" expression='components.treeView'/>
-        <binding name="value" expression='value'/>
-    </component>
-
-    <component id="treeNodeView" type="contrib:TreeNodeView">
-        <binding name="makeNodeDirect" expression="true"/>
-        <binding name="nodeRenderFactory" expression='renderFactory'/>
-        <binding name="showNodeImages" expression="false"/>
-        <binding name="treeDataView" expression='components.treeData'/>
-    </component>
-
-    <component id="treeView" type="contrib:TreeView">
-        <binding name="sessionStateManager" expression='sessionStateManager'/>
-        <binding name="treeModel" expression='treeModel'/>
-        <binding name="treeStateListener" expression='treeStateListener'/>
-    </component>
-
-    <component id="directoryTableView" type="DirectoryTableView">
-        <binding name="selectedFolderSource" expression='selectedFolderSource'/>
-    </component>
-
-    <!--component id="showInspector" type="contrib:InspectorButton"/-->
-</page-specification>
diff --git a/3.0.4/examples/Workbench/context/WEB-INF/JSP.page b/3.0.4/examples/Workbench/context/WEB-INF/JSP.page
deleted file mode 100644
index 11b6c51..0000000
--- a/3.0.4/examples/Workbench/context/WEB-INF/JSP.page
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- Forms.page,v 1.1 2002/08/23 22:18:31 hship Exp -->
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<page-specification class="org.apache.tapestry.workbench.jsp.JSP"/>
diff --git a/3.0.4/examples/Workbench/context/WEB-INF/JSPResults.page b/3.0.4/examples/Workbench/context/WEB-INF/JSPResults.page
deleted file mode 100644
index 198914f..0000000
--- a/3.0.4/examples/Workbench/context/WEB-INF/JSPResults.page
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- Forms.page,v 1.1 2002/08/23 22:18:31 hship Exp -->
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<page-specification class="org.apache.tapestry.workbench.jsp.JSPResults">
-
-  <property-specification name="parameters" type="java.lang.Object[]"/>
-  <property-specification name="parameter"/>
-	
-</page-specification>
diff --git a/3.0.4/examples/Workbench/context/WEB-INF/LocaleList.html b/3.0.4/examples/Workbench/context/WEB-INF/LocaleList.html
deleted file mode 100644
index 881bea0..0000000
--- a/3.0.4/examples/Workbench/context/WEB-INF/LocaleList.html
+++ /dev/null
@@ -1,46 +0,0 @@
-<!-- $Id$ -->
-
-<span jwcid="$content$">
-
-<form jwcid="form">
-
-	<!-- This component could be implemented using the FormTable component
-		 in the following way:
-		 
-	     <table jwcid="@contrib:FormTable" width="100%"
-    		source="ognl:@java.util.Locale@getAvailableLocales()"
-    		columns="!checkbox, Locale:toString(), Language:displayLanguage, Country:displayCountry, 
-            	Variant:displayVariant, ISO Language:ISO3Language, ISO Country:ISO3Country"
-	    	row="ognl:currentLocale"
-     		rowsClass="ognl:beans.rowClass.next"/>
-    	 <span jwcid="checkboxColumnHeader@Block"></span>
-	     <span jwcid="checkboxColumnValue@Block"><span jwcid="checkbox"/></span>
-		 
-		 Instead, in this example we use a custom layout for the table (usually done 
-	     for greater flexibility), rather than the standard one provided 
-	     by the FormTable component. We use the lower level Table components instead 
-	     and lay them out in our own way. -->
-
-	<table jwcid="tableView" width="100%">
-		<tr>
-            <td colspan="7">
-        		<span jwcid="tablePages@contrib:TableFormPages"/>
-            </td>
-        </tr>
-		
-		<tr>
-			<td></td>
-			<td jwcid="tableColumns"/>
-		</tr>
-		
-		<tr jwcid="tableFormRows">
-			<td><span jwcid="checkbox"/></td>
-			<td jwcid="tableValues" align="center"/>
-		</tr>
-	</table>
-    
-	<span jwcid="submitButton"/>
-
-</form>
-
-</span>
diff --git a/3.0.4/examples/Workbench/context/WEB-INF/LocaleList.jwc b/3.0.4/examples/Workbench/context/WEB-INF/LocaleList.jwc
deleted file mode 100644
index c632264..0000000
--- a/3.0.4/examples/Workbench/context/WEB-INF/LocaleList.jwc
+++ /dev/null
@@ -1,68 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!--  $Id$ -->
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<component-specification class="org.apache.tapestry.workbench.table.LocaleList" 
-	allow-body="no" allow-informal-parameters="yes">
-
-	<parameter name="localeSelectionListener" 
-		type="org.apache.tapestry.workbench.table.ILocaleSelectionListener" 
-		required="yes"
-		direction="custom"/>
-
-    <bean name="rowClass" class="org.apache.tapestry.bean.EvenOdd"/>
-
-	<property-specification name="currentLocale" type="java.util.Locale"/>
-	
-	<property-specification name="selectedLocales" type="java.util.Set" 
-		persistent="yes" initial-value="new java.util.HashSet()"/>
-
-	<component id="form" type="Form">
-		<!--binding name="listener" expression="listeners.formSubmit"/-->
-	</component>
-
-	<component id="checkbox" type="Checkbox">
-		<binding name="selected" expression="checkboxSelected"/>
-	</component>
-
-	<component id="submitButton" type="Submit">
-		<static-binding name="label" value="Select locales"/>
-		<binding name="listener" expression="listeners.selectLocales"/>
-	</component>
-
-	<component id="tableView" type="contrib:TableView">
-        <binding name="source" expression="@java.util.Locale@getAvailableLocales()"/>
-        <binding name="columns">
-            '* Locale:toString(), Language:displayLanguage, Country:displayCountry, ' +
-            'Variant:displayVariant, ISO Language:ISO3Language, ISO Country:ISO3Country'
-        </binding>
-	</component>
-
-	<component id="tableColumns" type="contrib:TableColumns"/>
-
-	<component id="tableFormRows" type="contrib:TableFormRows">
-		<binding name="row" expression="currentLocale"/>
-        <binding name="convertor" expression="localeConvertor"/>
-		<binding name="class" expression="beans.rowClass.next"/>
-	</component>
-
-	<component id="tableValues" type="contrib:TableValues"/>
-
-</component-specification>
\ No newline at end of file
diff --git a/3.0.4/examples/Workbench/context/WEB-INF/LocaleSelection.html b/3.0.4/examples/Workbench/context/WEB-INF/LocaleSelection.html
deleted file mode 100644
index e588e4a..0000000
--- a/3.0.4/examples/Workbench/context/WEB-INF/LocaleSelection.html
+++ /dev/null
@@ -1,37 +0,0 @@
-<!-- $Id$ -->
-
-<span jwcid="$content$">
-
-<style>
-	.tableRowsClass { text-align: center }
-</style>
-
-
-<span jwcid="condTable">
-	<hr>
-
-	<!-- This is the simplest way to insert a table - a single line in the template.
-    	 Unlike the LocaleList component, the rendering of the table itself is left 
-    	 to the Table component -->
-	<table jwcid="table" width="100%"/>
-
-</span>
-
-
-<!-- This is a block defining how the verbosity column should look like -->
-<span jwcid="verbosityColumnValue@Block">
-	<table style="border: 1px black solid; width: 100px; height: 15px;">
-		<tr style="border: 1px black solid; width: 100px; height: 15px;">
-			<td jwcid="verbosity"></td>
-			<td></td>
-		</tr>
-	</table>
-</span>
-
-
-<!-- This is a block defining how the remove column should look like -->
-<span jwcid="deleteColumnValue@Block">
-	<a jwcid="directDelete">remove</a>
-</span>
-
-</span>
diff --git a/3.0.4/examples/Workbench/context/WEB-INF/LocaleSelection.jwc b/3.0.4/examples/Workbench/context/WEB-INF/LocaleSelection.jwc
deleted file mode 100644
index 15f7dec..0000000
--- a/3.0.4/examples/Workbench/context/WEB-INF/LocaleSelection.jwc
+++ /dev/null
@@ -1,83 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!--  $Id$ -->
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-<component-specification class="org.apache.tapestry.workbench.table.LocaleSelection"
-	allow-body="no" allow-informal-parameters="yes">
-	
-    <component id="condTable" type="Conditional">
-		<binding name="condition" expression="localeSet.size > 0"/>
-	</component>
-	
-    <!-- Define the Table component that will be used. 
-         This example demonstrates various techniques for configuring the component. -->
-    <component id="table" type="contrib:Table">
-        
-        <!-- The source of the data for the table will be the localeSet property
-             defined further down in this file -->
-        <binding name="source" expression="localeSet"/>
-        
-        <!-- The columns of the table -->
-        <binding name="columns">
-            <!-- The first column is the representation of the locale returned when invoking toString() on it.
-                 Its name will be displayed according to the translation value
-                 of this component with key 'locale' (see LocaleSelection.properties) -->
-            'locale:toString(), ' +
-            
-            <!-- The next two columns are returned by the Java code as ITableColumn objects -->
-            '=currencyColumn, =dateFormatColumn, ' +
-            
-            <!-- The next column is named 'verbosity' and thus will use the 
-                 verbosityValueRenderer block in this component to render the row values. 
-                 If no translation key 'verbosity' is found, the column will be displayed as 'Verbosity' -->
-            'verbosity:Verbosity:@org.apache.tapestry.workbench.table.VerbosityRating@calculateVerbosity(#this), ' +
-            
-            <!-- The last column is named 'delete' and is not sortable. Please see the 
-                 deleteValueRenderer block for the definition of how it should look --> 
-            '!delete'
-        </binding>
-
-        <!-- The row object (locale) that is currently being rendered 
-             will be stored in the currentLocale property (defined further down) -->
-        <binding name="row" expression="currentLocale"/>
-        
-        <!-- Each rendered row will be given the CSS class of 'tableRowsClass' -->
-		<static-binding name="rowsClass" value="tableRowsClass"/>
-        
-	</component>
-	
-    <component id="directDelete" type="DirectLink">
-		<binding name="listener" expression="listeners.deleteLocale"/>
-		<binding name="parameters" expression="deleteLocaleContext"/>
-	</component>
-	
-    <component id="verbosity" type="Any">
-		<static-binding name="element" value="td"/>
-		<binding name="style">
-			"background-color:blue; width:"
-			+ (currentLocaleVerbosity / 2) + "px"
-		</binding>
-	</component>
-    
-    <property-specification name="localeSet" type="java.util.Set" persistent="yes" 
-    	initial-value="new java.util.HashSet()"/>
-
-    <property-specification name="currentLocale" type="java.util.Locale"/>
-    
-</component-specification>
diff --git a/3.0.4/examples/Workbench/context/WEB-INF/LocaleSelection.properties b/3.0.4/examples/Workbench/context/WEB-INF/LocaleSelection.properties
deleted file mode 100644
index ba4ca23..0000000
--- a/3.0.4/examples/Workbench/context/WEB-INF/LocaleSelection.properties
+++ /dev/null
@@ -1,6 +0,0 @@
-# $Id$
-
-# Column display names
-locale=Locale
-verbosity=Verbosity
-delete=
diff --git a/3.0.4/examples/Workbench/context/WEB-INF/Localization.page b/3.0.4/examples/Workbench/context/WEB-INF/Localization.page
deleted file mode 100644
index 0e13224..0000000
--- a/3.0.4/examples/Workbench/context/WEB-INF/Localization.page
+++ /dev/null
@@ -1,40 +0,0 @@
-<?xml version="1.0"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<page-specification class="org.apache.tapestry.workbench.localization.Localization">
-
-  <component id="form" type="Form">
-    <binding name="listener" expression="listeners.formSubmit"/>
-    <binding name="stateful" expression="false"/>
-  </component>
-  
-  <component id="inputLocale" type="PropertySelection">
-    <binding name="value" expression="page.engine.locale"/>
-    <binding name="model" expression="localeModel"/>
-  </component>
-  
-  <component id="changeButton" type="ImageSubmit">
-    <binding name="image" expression="assets.changeButton"/>
-  </component>
-  
-  <context-asset name="changeButton" path="images/Change.gif"/>
-  
-</page-specification>
diff --git a/3.0.4/examples/Workbench/context/WEB-INF/LocalizationChange.page b/3.0.4/examples/Workbench/context/WEB-INF/LocalizationChange.page
deleted file mode 100644
index 2c00f6e..0000000
--- a/3.0.4/examples/Workbench/context/WEB-INF/LocalizationChange.page
+++ /dev/null
@@ -1,40 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<page-specification class="org.apache.tapestry.workbench.localization.LocalizationChange">
-
-  <component id="insertLocaleName" type="Insert">
-    <binding name="value" expression="localeName"/>
-  </component>
-  
-  <component id="back" type="PageLink">
-    <static-binding name="page">Localization</static-binding>
-  </component>
-  
-  <component id="chooseAgainImage" type="Rollover">
-    <binding name="image" expression="assets.back"/>
-    <binding name="focus" expression="assets.backFocus"/>
-  </component>
-  
-  <context-asset name="back" path="images/Back.gif"/>
-  <context-asset name="backFocus" path="images/Back-focus.gif"/>
-  
-</page-specification>
diff --git a/3.0.4/examples/Workbench/context/WEB-INF/Palette.page b/3.0.4/examples/Workbench/context/WEB-INF/Palette.page
deleted file mode 100644
index 17a89d1..0000000
--- a/3.0.4/examples/Workbench/context/WEB-INF/Palette.page
+++ /dev/null
@@ -1,48 +0,0 @@
-<?xml version="1.0"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<page-specification class="org.apache.tapestry.workbench.palette.Palette">
-  
-  <component id="inputColorSort" type="PropertySelection">
-  	<binding name="value" expression="sort"/>
-  	<binding name="model" expression="sortModel"/>
-  </component>
-  
-  <component id="inputColor" type="contrib:Palette">
-    <binding name="model" expression="colorModel"/>
-    <binding name="selected" expression="selectedColors"/>
-    <binding name="sort" expression="sort"/>
-    <static-binding name="tableClass" value="palette"/>
-  </component>
-  
-  <component id="update" type="ImageSubmit">
-    <binding name="image" expression="assets.update"/>
-  </component>
-  
-  <component id="continue" type="ImageSubmit">
-  	<binding name="image" expression="assets.continue"/>
-  	<binding name="listener" expression="listeners.advance"/>
-  </component>
- 
-   <context-asset name="continue" path="images/Continue.gif"/>
-   <context-asset name="update" path="images/Update.gif"/>
-  
-</page-specification>
diff --git a/3.0.4/examples/Workbench/context/WEB-INF/PaletteResults.page b/3.0.4/examples/Workbench/context/WEB-INF/PaletteResults.page
deleted file mode 100644
index bc428f3..0000000
--- a/3.0.4/examples/Workbench/context/WEB-INF/PaletteResults.page
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<page-specification class="org.apache.tapestry.workbench.palette.PaletteResults">
-  
-  <component id="loop" type="Foreach">
-  	<static-binding name="element" value="li"/>
-  	<binding name="source" expression="selectedColors"/>
-  </component>
-     
-  <component id="backRollover" type="Rollover">
-    <binding name="image" expression="assets.back"/>
-    <binding name="focus" expression="assets.backFocus"/>
-  </component>
-  
-  <context-asset name="back" path="images/Back.gif"/>
-  <context-asset name="backFocus" path="images/Back-focus.gif"/>
-  
-</page-specification>
diff --git a/3.0.4/examples/Workbench/context/WEB-INF/Redirect.page b/3.0.4/examples/Workbench/context/WEB-INF/Redirect.page
deleted file mode 100644
index 38de6e7..0000000
--- a/3.0.4/examples/Workbench/context/WEB-INF/Redirect.page
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<page-specification class="org.apache.tapestry.workbench.Redirect"/>
-  
diff --git a/3.0.4/examples/Workbench/context/WEB-INF/ShowError.html b/3.0.4/examples/Workbench/context/WEB-INF/ShowError.html
deleted file mode 100644
index 5ebdfb5..0000000
--- a/3.0.4/examples/Workbench/context/WEB-INF/ShowError.html
+++ /dev/null
@@ -1,14 +0,0 @@
-<!-- $Id$ -->
-
-<span jwcid="@Conditional" condition="ognl:bindings.delegate.object.hasErrors">
-
-<table class="inputerror">
-<tr valign=top>
- <td><img src="images/Warning.gif" width="42" height="41"/></td>
- <td class="message">
-  <span jwcid="@Delegator" delegate="ognl:bindings.delegate.object.firstError">Error message goes here.</span>
-  </td>
-</tr>
-</table>
-
-</span>
diff --git a/3.0.4/examples/Workbench/context/WEB-INF/ShowError.jwc b/3.0.4/examples/Workbench/context/WEB-INF/ShowError.jwc
deleted file mode 100644
index c0041b0..0000000
--- a/3.0.4/examples/Workbench/context/WEB-INF/ShowError.jwc
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<component-specification 
-  allow-informal-parameters="no" allow-body="no">
-  
-  <parameter name="delegate" type="org.apache.tapestry.valid.IValidationDelegate" 
-  	required="yes"/>    
-  
-</component-specification>
diff --git a/3.0.4/examples/Workbench/context/WEB-INF/Table.page b/3.0.4/examples/Workbench/context/WEB-INF/Table.page
deleted file mode 100644
index dd62374..0000000
--- a/3.0.4/examples/Workbench/context/WEB-INF/Table.page
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0"?>
-<!--
-    Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<page-specification>
-  
-  <component id="localeList" type="LocaleList">
-  	<binding name="localeSelectionListener" expression="components.localeSelection"/>
-  </component>
-  
-  <component id="localeSelection" type="LocaleSelection"/>
-  
-</page-specification>
diff --git a/3.0.4/examples/Workbench/context/WEB-INF/Upload.page b/3.0.4/examples/Workbench/context/WEB-INF/Upload.page
deleted file mode 100644
index 7ad89cc..0000000
--- a/3.0.4/examples/Workbench/context/WEB-INF/Upload.page
+++ /dev/null
@@ -1,33 +0,0 @@
-<?xml version="1.0"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-  
-<page-specification class="org.apache.tapestry.workbench.upload.Upload">
-
-  <bean name="delegate" class="org.apache.tapestry.workbench.WorkbenchValidationDelegate"/>
-  
-  <component id="inputWidth" type="PropertySelection">
-  	<binding name="value" expression="bytesPerLine"/>
-  	<binding name="model" expression="bytesPerLineModel"/>
-  </component>
-   
-  <context-asset name="continue" path="images/Continue.gif"/>
-
-</page-specification>
\ No newline at end of file
diff --git a/3.0.4/examples/Workbench/context/WEB-INF/UploadResults.page b/3.0.4/examples/Workbench/context/WEB-INF/UploadResults.page
deleted file mode 100644
index 504d71a..0000000
--- a/3.0.4/examples/Workbench/context/WEB-INF/UploadResults.page
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<page-specification class="org.apache.tapestry.workbench.upload.UploadResults">
-  
-  <component id="backRollover" type="Rollover">
-    <binding name="image" expression="assets.back"/>
-    <binding name="focus" expression="assets.backFocus"/>
-  </component>
-  
-  <context-asset name="back" path="images/Back.gif"/>
-  <context-asset name="backFocus" path="images/Back-focus.gif"/>
-  
-</page-specification>
diff --git a/3.0.4/examples/Workbench/context/WEB-INF/workbench.application b/3.0.4/examples/Workbench/context/WEB-INF/workbench.application
deleted file mode 100644
index 468d05e..0000000
--- a/3.0.4/examples/Workbench/context/WEB-INF/workbench.application
+++ /dev/null
@@ -1,33 +0,0 @@
-<?xml version="1.0"?>
-<!--
-    Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!--$Id$-->
-<!DOCTYPE application PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<application name="Tapestry Component Workbench">
-  <property name="org.apache.tapestry.visit-class" value="org.apache.tapestry.workbench.Visit"/>
-  <property name="org.apache.tapestry.template-encoding" value="ISO-8859-1"/>
-  
-  <extension name="org.apache.tapestry.request-decoder" class="org.apache.tapestry.workbench.RequestDecoder"/>
-  
-  <service name="home" class="org.apache.tapestry.workbench.WorkbenchHomeService"/>
-  <service name="chart" class="org.apache.tapestry.workbench.chart.ChartService"/>
-         
-  <library id="contrib" specification-path="/org/apache/tapestry/contrib/Contrib.library"/>
-  
-</application>
diff --git a/3.0.4/examples/Workbench/context/css/workbench.css b/3.0.4/examples/Workbench/context/css/workbench.css
deleted file mode 100644
index 5683e65..0000000
--- a/3.0.4/examples/Workbench/context/css/workbench.css
+++ /dev/null
@@ -1,199 +0,0 @@
-/*  $Id: workbench.css,v 1.1.2.1 2003/01/02 03:15:33 hship Exp $ */

-

-SPAN.label-error

-{

-  color: Red;

-}

-

-

-INPUT.field-error

-{

-  color: White;

-  background-color: Red;

-}

-

-TABLE.inputError TD.message

-{

-  font-weight: bold;

-  font-size: smaller;

-}

-

-TABLE.content

-{

-	background-color: #ffffcc;

-  	border-color : Black;

-	border-style : solid;

-	border-width : thin;

-	border-top-width : 0px;

-	border-bottom-width : 2px;

-	border-right-width : 2px;

-	border-left-width : 0px;

-	font-size : smaller;

-	clear: all;

-	width: 700px;

-}

-

-

-TABLE.tabs TD

-{

-  padding: 0;

-}

-

-BODY

-{

-  background-color: #808080;

-  margin: 2px;

-  font-family : Trebuchet MS, serif;

-}

-

-TABLE.requestDebug

-{

-	width: 700;

-  	border-color : Black;

-	border-style : solid;

-	border-width : thin;

-	border-top-width : 0px;

-	border-bottom-width : 2px;

-	border-right-width : 2px;

-	border-left-width : 0px;

-	background-color: #839cd1;

-	padding: 0;

-

-}

-

-TABLE.requestDebug TR.control

-{

-    font-weight: bold;

-    font-size: 9pt;

-	color : White;

-	background-color : #330066;

-}

-

-TABLE.requestDebug FORM

-{

-  margin: 0;

-}

-

-TABLE.request-context-border  {

-	border-width : 1;

-	border-color : Black;

-

-}

-

-SPAN.request-context-object  {

-	font-weight : bold;

-	text-align : left;

-	font-size: 12pt;

-}

-

-TR.request-context-section TH  {

-	text-align : center;

-	color : White;

-	background-color : #330066;

-}

-

-TR.request-context-header TH  {

-	text-align : center;

-	color : White;

-	background-color : #330066;

-}

-

-TABLE.request-context-object TR.odd TD  {

-	text-align : left;

-	color : Black;

-	background-color : Silver;

-}

-

-TABLE.request-context-object TR.odd TH  {

-	color : Black;

-	background-color : Silver;

-	text-align : right;

-}

-

-TABLE.request-context-object TR.even TD  {

-	text-align : left;

-}

-

-TABLE.request-context-object TR.even TH  {

-	text-align : right;

-}

-

-TABLE.request-context-object  {

-	width : 100%;

-	font-size: 9pt;

-}

-

-TABLE.request-context-object TR  {

-	vertical-align : text-top;

-}

-

-TABLE.form TR

-{

-   vertical-align: top;

-}

-

-TABLE.form TH

-{

-   font-weight: bold;

-   text-align: right;

-}

-

-TABLE.form TR.column-header TH

-{

-	font-weight: bold;

-	text-align: center;

-}

-

-TABLE.palette TH

-{

-  font-size: 9pt;

-  font-weight: bold;

-  color: white;

-  background-color: #330066;

-  text-align: center;

-}

-

-TABLE.palette SELECT

-{

-  font-weight: bold;

-  background-color: #839cd1;

-  width: 200px;

-}

-

-TABLE.palette TD.controls

-{

-   text-align: center;

-   vertical-align: middle;

-   width: 60px;

-}

-

-TABLE.form

-{

-  font-size: 9pt;

-}

-

-A.nav

-{

-  font-family: Trebuchet MS,sans-serif;

-  text-decoration:none;

-  font-size: 10pt;

-  font-weight: bold;

-  color: black;

-}

-

-A.nav:hover

-{

-  text-decoration:underline;

-}

-

-PRE

-{

-  font-size: 12pt;

-}

-

-UL 

-{

-	margin-top: 0px;

-	margin-bottom: 0px;

-	margin-left: 20px;

-}

diff --git a/3.0.4/examples/Workbench/context/images/.cvsignore b/3.0.4/examples/Workbench/context/images/.cvsignore
deleted file mode 100644
index cdf09e9..0000000
--- a/3.0.4/examples/Workbench/context/images/.cvsignore
+++ /dev/null
@@ -1 +0,0 @@
-*.jbf
diff --git a/3.0.4/examples/Workbench/context/images/Back-focus.gif b/3.0.4/examples/Workbench/context/images/Back-focus.gif
deleted file mode 100644
index 4eef063..0000000
--- a/3.0.4/examples/Workbench/context/images/Back-focus.gif
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/Workbench/context/images/Back-focus_de.gif b/3.0.4/examples/Workbench/context/images/Back-focus_de.gif
deleted file mode 100644
index a4b59d8..0000000
--- a/3.0.4/examples/Workbench/context/images/Back-focus_de.gif
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/Workbench/context/images/Back-focus_fr.gif b/3.0.4/examples/Workbench/context/images/Back-focus_fr.gif
deleted file mode 100644
index 37e098f..0000000
--- a/3.0.4/examples/Workbench/context/images/Back-focus_fr.gif
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/Workbench/context/images/Back-focus_it.gif b/3.0.4/examples/Workbench/context/images/Back-focus_it.gif
deleted file mode 100644
index a129197..0000000
--- a/3.0.4/examples/Workbench/context/images/Back-focus_it.gif
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/Workbench/context/images/Back.gif b/3.0.4/examples/Workbench/context/images/Back.gif
deleted file mode 100644
index 19dcd53..0000000
--- a/3.0.4/examples/Workbench/context/images/Back.gif
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/Workbench/context/images/Back_de.gif b/3.0.4/examples/Workbench/context/images/Back_de.gif
deleted file mode 100644
index 6d8258a..0000000
--- a/3.0.4/examples/Workbench/context/images/Back_de.gif
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/Workbench/context/images/Back_fr.gif b/3.0.4/examples/Workbench/context/images/Back_fr.gif
deleted file mode 100644
index f166a6f..0000000
--- a/3.0.4/examples/Workbench/context/images/Back_fr.gif
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/Workbench/context/images/Back_it.gif b/3.0.4/examples/Workbench/context/images/Back_it.gif
deleted file mode 100644
index f0b746f..0000000
--- a/3.0.4/examples/Workbench/context/images/Back_it.gif
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/Workbench/context/images/Change.gif b/3.0.4/examples/Workbench/context/images/Change.gif
deleted file mode 100644
index 62ec7b1..0000000
--- a/3.0.4/examples/Workbench/context/images/Change.gif
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/Workbench/context/images/Change_de.gif b/3.0.4/examples/Workbench/context/images/Change_de.gif
deleted file mode 100644
index 2326fdb..0000000
--- a/3.0.4/examples/Workbench/context/images/Change_de.gif
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/Workbench/context/images/Change_fr.gif b/3.0.4/examples/Workbench/context/images/Change_fr.gif
deleted file mode 100644
index 522b3ef..0000000
--- a/3.0.4/examples/Workbench/context/images/Change_fr.gif
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/Workbench/context/images/Change_it.gif b/3.0.4/examples/Workbench/context/images/Change_it.gif
deleted file mode 100644
index 32716cc..0000000
--- a/3.0.4/examples/Workbench/context/images/Change_it.gif
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/Workbench/context/images/Continue.gif b/3.0.4/examples/Workbench/context/images/Continue.gif
deleted file mode 100644
index 83f7f71..0000000
--- a/3.0.4/examples/Workbench/context/images/Continue.gif
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/Workbench/context/images/Update.gif b/3.0.4/examples/Workbench/context/images/Update.gif
deleted file mode 100644
index 5a48ca7..0000000
--- a/3.0.4/examples/Workbench/context/images/Update.gif
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/Workbench/context/images/Warning-small.gif b/3.0.4/examples/Workbench/context/images/Warning-small.gif
deleted file mode 100644
index 06b2eb3..0000000
--- a/3.0.4/examples/Workbench/context/images/Warning-small.gif
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/Workbench/context/images/Warning.gif b/3.0.4/examples/Workbench/context/images/Warning.gif
deleted file mode 100644
index 8435f98..0000000
--- a/3.0.4/examples/Workbench/context/images/Warning.gif
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/Workbench/context/images/minus.gif b/3.0.4/examples/Workbench/context/images/minus.gif
deleted file mode 100644
index 9c0ef5f..0000000
--- a/3.0.4/examples/Workbench/context/images/minus.gif
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/Workbench/context/images/nodeimage.gif b/3.0.4/examples/Workbench/context/images/nodeimage.gif
deleted file mode 100644
index 06b2eb3..0000000
--- a/3.0.4/examples/Workbench/context/images/nodeimage.gif
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/Workbench/context/images/plus.gif b/3.0.4/examples/Workbench/context/images/plus.gif
deleted file mode 100644
index 07364bf..0000000
--- a/3.0.4/examples/Workbench/context/images/plus.gif
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/Workbench/context/images/tab-active-left.gif b/3.0.4/examples/Workbench/context/images/tab-active-left.gif
deleted file mode 100644
index 04ea77f..0000000
--- a/3.0.4/examples/Workbench/context/images/tab-active-left.gif
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/Workbench/context/images/tab-active-mid.gif b/3.0.4/examples/Workbench/context/images/tab-active-mid.gif
deleted file mode 100644
index 754739e..0000000
--- a/3.0.4/examples/Workbench/context/images/tab-active-mid.gif
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/Workbench/context/images/tab-active-right.gif b/3.0.4/examples/Workbench/context/images/tab-active-right.gif
deleted file mode 100644
index 8623a81..0000000
--- a/3.0.4/examples/Workbench/context/images/tab-active-right.gif
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/Workbench/context/images/tab-inactive-left.gif b/3.0.4/examples/Workbench/context/images/tab-inactive-left.gif
deleted file mode 100644
index 21f94a4..0000000
--- a/3.0.4/examples/Workbench/context/images/tab-inactive-left.gif
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/Workbench/context/images/tab-inactive-mid.gif b/3.0.4/examples/Workbench/context/images/tab-inactive-mid.gif
deleted file mode 100644
index 3d86c62..0000000
--- a/3.0.4/examples/Workbench/context/images/tab-inactive-mid.gif
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/Workbench/context/images/tab-inactive-right.gif b/3.0.4/examples/Workbench/context/images/tab-inactive-right.gif
deleted file mode 100644
index e25d610..0000000
--- a/3.0.4/examples/Workbench/context/images/tab-inactive-right.gif
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/Workbench/context/popuplink-help.html b/3.0.4/examples/Workbench/context/popuplink-help.html
deleted file mode 100644
index 9ccb3b2..0000000
--- a/3.0.4/examples/Workbench/context/popuplink-help.html
+++ /dev/null
@@ -1,42 +0,0 @@
-<html>
-<!-- $Id$ -->
-<head>
-<title>PopupLink Help</title>
-</head>
-
-<body>
-<font face="helvetica">
-<b>Help Page</b>
-<hr/>
-This static Help page is accessed via the 
-<tt><font color="blue">contrib:PopupLink</font></tt> component.
-<p/>
-HTML file
-<blockquote>
-<pre>
-&lt;a jwcid="helpLink"&gt;PopupLink Help&lt;/a&gt;
-</pre>
-</blockquote>
-<p/>
-Page file
-<blockquote>
-<pre>
-&lt;component id="helpLink" type="contrib:PopupLink"&gt;
-   &lt;binding name="url" expression='"popuplink-help.html"'/&gt;
-   &lt;binding name="height" expression="400"/&gt;
-   &lt;binding name="width" expression="850"/&gt;
-   &lt;binding name="features" expression='"top=200,left=100,resizable=yes,scrollbars=yes"'/&gt;
-&lt;/component&gt;
-</pre>
-</blockquote>
-<font>
-<table width="100%">
-<tr>
-<td align="right">
-<input type="button" value=" Close " onclick="javascript:window.close();"/>
-&nbsp;&nbsp;&nbsp;
-</td>
-</tr>
-<table>
-</body>
-</html>
diff --git a/3.0.4/examples/Workbench/context/redirect-target.html b/3.0.4/examples/Workbench/context/redirect-target.html
deleted file mode 100644
index dc72c84..0000000
--- a/3.0.4/examples/Workbench/context/redirect-target.html
+++ /dev/null
@@ -1,39 +0,0 @@
-<html>
-<head>
-<title>Redirect Target</title>
-<link rel="stylesheet" type="text/css" href="css/workbench.css">
-</head>
-<body>
-
-<!-- This is where the tabs would go.  Alas, used private assets for
-     the tabs. -->
-     
-<table class="tabs" cellspacing=0 border=0>
-<tr height="20">
-<td>&nbsp;</td>
-</tr>
-</table>
-
-<table class="content">
-<tr>
-<td>
-
-This is a static page, forwarded to from a Tapestry listener method.
-
-<p>
-Note that internal resources are <em>forwarded to</em>, not
-<em>redirected to</em>.  Tapestry uses 
-<code>RequestDispatcher.forward(ServletRequest, ServletResponse)</code>
-for internal resources (this is the same way an ordinary servlet would
-forward to a JSP to render a response).
-
-<p>
-You may <a href="app">return to the Workbench</a>.
-
-</td>
-</tr>
-</table>
-
-
-</body>
-</html>
diff --git a/3.0.4/examples/Workbench/image-src/.cvsignore b/3.0.4/examples/Workbench/image-src/.cvsignore
deleted file mode 100644
index cdf09e9..0000000
--- a/3.0.4/examples/Workbench/image-src/.cvsignore
+++ /dev/null
@@ -1 +0,0 @@
-*.jbf
diff --git a/3.0.4/examples/Workbench/image-src/ActiveBlank.psp b/3.0.4/examples/Workbench/image-src/ActiveBlank.psp
deleted file mode 100644
index f677e9f..0000000
--- a/3.0.4/examples/Workbench/image-src/ActiveBlank.psp
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/Workbench/image-src/Back.psp b/3.0.4/examples/Workbench/image-src/Back.psp
deleted file mode 100644
index fd47f92..0000000
--- a/3.0.4/examples/Workbench/image-src/Back.psp
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/Workbench/image-src/BlankFlat.psp b/3.0.4/examples/Workbench/image-src/BlankFlat.psp
deleted file mode 100644
index 9d8dbf4..0000000
--- a/3.0.4/examples/Workbench/image-src/BlankFlat.psp
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/Workbench/image-src/Change.psp b/3.0.4/examples/Workbench/image-src/Change.psp
deleted file mode 100644
index 6d955a1..0000000
--- a/3.0.4/examples/Workbench/image-src/Change.psp
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/Workbench/image-src/InactiveBlank.psp b/3.0.4/examples/Workbench/image-src/InactiveBlank.psp
deleted file mode 100644
index 51ba801..0000000
--- a/3.0.4/examples/Workbench/image-src/InactiveBlank.psp
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/Workbench/jetty.xml b/3.0.4/examples/Workbench/jetty.xml
deleted file mode 100644
index 8a18b3d..0000000
--- a/3.0.4/examples/Workbench/jetty.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!-- $Id$ -->
-<!DOCTYPE Configure PUBLIC "-//Mort Bay Consulting//DTD Configure 1.2//EN"
-	"http://jetty.mortbay.org/configure_1_2.dtd">
-<Configure class="org.mortbay.jetty.Server">
-	<Call name="addListener">
-		<Arg>
-			<New class="org.mortbay.http.SocketListener">
-				<Set name="Port">8080</Set>
-				<Set name="MinThreads">1</Set>
-				<Set name="MaxThreads">10</Set>
-				<Set name="MaxIdleTimeMs">50000</Set>
-			</New>
-		</Arg>
-	</Call>
-	<Call name="addWebApplication">
-		<Arg>/workbench</Arg>
-		<Arg>context</Arg>
-		<Set name="DefaultsDescriptor">../../config/webdefault.xml</Set>
-	</Call>
-	<Call name="addContext">
-		<Arg>/</Arg>
-		<Set name="realmName">Jetty Demo Realm</Set>
-		<Call name="addServlet">
-			<Arg>Admin</Arg>
-			<Arg>/</Arg>
-			<Arg>org.mortbay.servlet.AdminServlet</Arg>
-		</Call>
-		<Call name="setAttribute">
-			<Arg>org.mortbay.http.HttpServer</Arg>
-			<Arg>
-				<Call name="getHttpServer"/>
-			</Arg>
-		</Call>
-	</Call>
-</Configure>
diff --git a/3.0.4/examples/Workbench/lib/LICENSE.jCharts.txt b/3.0.4/examples/Workbench/lib/LICENSE.jCharts.txt
deleted file mode 100644
index 4fdb3ba..0000000
--- a/3.0.4/examples/Workbench/lib/LICENSE.jCharts.txt
+++ /dev/null
@@ -1,47 +0,0 @@
-
-CVS Info: $Id$
-
-
-jCharts License
-----------------------------------------------------------------------------------------
-
-* Copyright 2002 (C) Nathaniel G. Auvil. All Rights Reserved.
-*
-* Redistribution and use of this software and associated documentation
-* ("Software"), with or without modification, are permitted provided
-* that the following conditions are met:
-*
-* 1. Redistributions of source code must retain copyright
-*    statements and notices.  Redistributions must also contain a
-*    copy of this document.
-*
-* 2. Redistributions in binary form must reproduce the
-*    above copyright notice, this list of conditions and the
-*    following disclaimer in the documentation and/or other
-*    materials provided with the distribution.
-*
-* 3. The name "jCharts" or "Nathaniel G. Auvil" must not be used to
-* 	  endorse or promote products derived from this Software without
-* 	  prior written permission of Nathaniel G. Auvil.  For written
-*    permission, please contact nathaniel_auvil@users.sourceforge.net
-*
-* 4. Products derived from this Software may not be called "jCharts"
-*    nor may "jCharts" appear in their names without prior written
-*    permission of Nathaniel G. Auvil. jCharts is a registered
-*    trademark of Nathaniel G. Auvil.
-*
-* 5. Due credit should be given to the jCharts Project
-*    (http://jcharts.sourceforge.net/).
-*
-* THIS SOFTWARE IS PROVIDED BY Nathaniel G. Auvil AND CONTRIBUTORS
-* ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT
-* NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
-* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL
-* jCharts OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
-* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
-* STRICT LIABILITY, OR TORT (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/3.0.4/examples/Workbench/lib/jCharts-0.6.0.jar b/3.0.4/examples/Workbench/lib/jCharts-0.6.0.jar
deleted file mode 100644
index 11fbeb0..0000000
--- a/3.0.4/examples/Workbench/lib/jCharts-0.6.0.jar
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/Workbench/src/org/apache/tapestry/workbench/Redirect.java b/3.0.4/examples/Workbench/src/org/apache/tapestry/workbench/Redirect.java
deleted file mode 100644
index 4668f73..0000000
--- a/3.0.4/examples/Workbench/src/org/apache/tapestry/workbench/Redirect.java
+++ /dev/null
@@ -1,40 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.workbench;
-
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.RedirectException;
-import org.apache.tapestry.html.BasePage;
-
-/**
- *  PageLink to demonstrate redirect from a listener method.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *
- **/
-
-public class Redirect extends BasePage
-{
-    public void redirectInternal(IRequestCycle cycle)
-    {
-        throw new RedirectException("redirect-target.html");
-    }
-
-    public void redirectExternal(IRequestCycle cycle)
-    {
-        throw new RedirectException("http://jakarta.apache.org/tapestry");
-    }
-}
diff --git a/3.0.4/examples/Workbench/src/org/apache/tapestry/workbench/RequestDecoder.java b/3.0.4/examples/Workbench/src/org/apache/tapestry/workbench/RequestDecoder.java
deleted file mode 100644
index 7245841..0000000
--- a/3.0.4/examples/Workbench/src/org/apache/tapestry/workbench/RequestDecoder.java
+++ /dev/null
@@ -1,60 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.workbench;
-
-import javax.servlet.http.HttpServletRequest;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-import org.apache.tapestry.request.DecodedRequest;
-import org.apache.tapestry.request.IRequestDecoder;
-
-/**
- *  A useless request decoder (does the same as the default), used to test that
- *  a user-supplied extension is actually used.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 2.2
- * 
- **/
-
-public class RequestDecoder implements IRequestDecoder
-{
-    private static final Log LOG = LogFactory.getLog(RequestDecoder.class);
-
-    public RequestDecoder()
-    {
-        LOG.debug("<init>");
-    }
-
-    public DecodedRequest decodeRequest(HttpServletRequest request)
-    {
-        if (LOG.isDebugEnabled())
-            LOG.debug("Decoding: " + request);
-
-        DecodedRequest result = new DecodedRequest();
-
-        result.setRequestURI(request.getRequestURI());
-        result.setScheme(request.getScheme());
-        result.setServerName(request.getServerName());
-        result.setServerPort(request.getServerPort());
-
-        return result;
-
-    }
-
-}
diff --git a/3.0.4/examples/Workbench/src/org/apache/tapestry/workbench/Visit.java b/3.0.4/examples/Workbench/src/org/apache/tapestry/workbench/Visit.java
deleted file mode 100644
index 242c018..0000000
--- a/3.0.4/examples/Workbench/src/org/apache/tapestry/workbench/Visit.java
+++ /dev/null
@@ -1,163 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.workbench;
-
-import java.io.Serializable;
-import java.math.BigDecimal;
-import java.util.Date;
-
-/**
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 1.0.7
- *
- **/
-
-public class Visit implements Serializable
-{
-    /**
-     *  The name of the page for which the corresponding tab
-     *  should be visibly active.
-     *
-     **/
-
-    private String _activeTabName = "Home";
-
-    /**
-     *  If true, then a detailed report about the request is appended
-     *  to the bottom of each page.
-     *
-     **/
-
-    private boolean _requestDebug;
-
-
-    private boolean _disableInspector;
-
-    /**
-     *  Used by the Fields demo page.
-     *
-     **/
-
-    private Integer _intValue;
-    private Double _doubleValue;
-    private BigDecimal _bigDecimalValue;
-    private Long _longValue;
-    private Date _dateValue;
-    private String _stringValue;
-    private String _emailValue;
-
-    public String getActiveTabName()
-    {
-        return _activeTabName;
-    }
-
-    public void setActiveTabName(String value)
-    {
-        _activeTabName = value;
-    }
-
-    public void setRequestDebug(boolean value)
-    {
-        _requestDebug = value;
-    }
-
-    public boolean getRequestDebug()
-    {
-        return _requestDebug;
-    }
-
-    public void setIntValue(Integer value)
-    {
-        _intValue = value;
-    }
-
-    public Integer getIntValue()
-    {
-        return _intValue;
-    }
-
-    public BigDecimal getBigDecimalValue()
-    {
-        return _bigDecimalValue;
-    }
-
-    public void setBigDecimalValue(BigDecimal value)
-    {
-        _bigDecimalValue = value;
-    }
-
-    public Double getDoubleValue()
-    {
-        return _doubleValue;
-    }
-
-    public void setDoubleValue(Double value)
-    {
-        _doubleValue = value;
-    }
-
-    public Long getLongValue()
-    {
-        return _longValue;
-    }
-
-    public void setLongValue(Long value)
-    {
-        _longValue = value;
-    }
-
-    public Date getDateValue()
-    {
-        return _dateValue;
-    }
-
-    public void setDateValue(Date value)
-    {
-        _dateValue = value;
-    }
-
-    public String getStringValue()
-    {
-        return _stringValue;
-    }
-
-    public void setStringValue(String value)
-    {
-        _stringValue = value;
-    }
-    
-    public String getEmailValue()
-    {
-        return _emailValue;
-    }
-
-    public void setEmailValue(String value)
-    {
-        _emailValue = value;
-    }
-    
-    public boolean getDisableInspector()
-    {
-        return _disableInspector;
-    }
-
-    public void setDisableInspector(boolean disableInspector)
-    {
-        _disableInspector = disableInspector;
-    }
-
-}
\ No newline at end of file
diff --git a/3.0.4/examples/Workbench/src/org/apache/tapestry/workbench/WorkbenchHomeService.java b/3.0.4/examples/Workbench/src/org/apache/tapestry/workbench/WorkbenchHomeService.java
deleted file mode 100644
index c7dcc86..0000000
--- a/3.0.4/examples/Workbench/src/org/apache/tapestry/workbench/WorkbenchHomeService.java
+++ /dev/null
@@ -1,50 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.workbench;
-
-import java.io.IOException;
-
-import javax.servlet.ServletException;
-
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.engine.HomeService;
-import org.apache.tapestry.engine.IEngineServiceView;
-import org.apache.tapestry.request.ResponseOutputStream;
-
-/**
- *  Special version of the home service used to reset the visit tab when re-entering
- *  the Tapestry application from a static HTML page.  
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @see Redirect
- * 
- **/
-
-public class WorkbenchHomeService extends HomeService
-{
-
-    public void service(IEngineServiceView engine, IRequestCycle cycle, ResponseOutputStream output)
-        throws ServletException, IOException
-    {
-        Visit visit = (Visit) engine.getVisit();
-
-        if (visit != null)
-            visit.setActiveTabName("Home");
-
-        super.service(engine, cycle, output);
-    }
-
-}
\ No newline at end of file
diff --git a/3.0.4/examples/Workbench/src/org/apache/tapestry/workbench/WorkbenchValidationDelegate.java b/3.0.4/examples/Workbench/src/org/apache/tapestry/workbench/WorkbenchValidationDelegate.java
deleted file mode 100644
index 365a41f..0000000
--- a/3.0.4/examples/Workbench/src/org/apache/tapestry/workbench/WorkbenchValidationDelegate.java
+++ /dev/null
@@ -1,79 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.workbench;
-
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.form.IFormComponent;
-import org.apache.tapestry.valid.IValidator;
-import org.apache.tapestry.valid.ValidationDelegate;
-
-/**
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 1.0.6
- *
- **/
-
-public class WorkbenchValidationDelegate extends ValidationDelegate
-{
-    public void writeAttributes(
-        IMarkupWriter writer,
-        IRequestCycle cycle,
-        IFormComponent component,
-        IValidator validator)
-    {
-        if (isInError())
-            writer.attribute("class", "field-error");
-    }
-
-    public void writeSuffix(
-        IMarkupWriter writer,
-        IRequestCycle cycle,
-        IFormComponent component,
-        IValidator validator)
-    {
-        if (isInError())
-        {
-            writer.print(" ");
-            writer.beginEmpty("img");
-            writer.attribute("src", "images/Warning-small.gif");
-            writer.attribute("height", 20);
-            writer.attribute("width", 20);
-        }
-    }
-
-    public void writeLabelPrefix(
-        IFormComponent component,
-        IMarkupWriter writer,
-        IRequestCycle cycle)
-    {
-        if (isInError(component))
-        {
-            writer.begin("span");
-            writer.attribute("class", "label-error");
-        }
-    }
-
-    public void writeLabelSuffix(
-        IFormComponent component,
-        IMarkupWriter writer,
-        IRequestCycle cycle)
-    {
-        if (isInError(component))
-            writer.end(); // <span>
-    }
-}
\ No newline at end of file
diff --git a/3.0.4/examples/Workbench/src/org/apache/tapestry/workbench/chart/ChartAsset.java b/3.0.4/examples/Workbench/src/org/apache/tapestry/workbench/chart/ChartAsset.java
deleted file mode 100644
index cd4be7c..0000000
--- a/3.0.4/examples/Workbench/src/org/apache/tapestry/workbench/chart/ChartAsset.java
+++ /dev/null
@@ -1,68 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.workbench.chart;
-
-import java.io.InputStream;
-import java.util.Locale;
-
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.IEngine;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.asset.AbstractAsset;
-import org.apache.tapestry.engine.IEngineService;
-import org.apache.tapestry.engine.ILink;
-
-/**
- *  An asset used with the {@link ChartService}.  
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 1.0.10
- * 
- **/
-
-public class ChartAsset extends AbstractAsset
-{
-    private IEngineService _chartService;
-    private IComponent _chartProvider;
-
-    public ChartAsset(IRequestCycle cycle, IComponent chartProvider)
-    {
-    	super(null, null);
-    	
-        IEngine engine = cycle.getEngine();
-
-        _chartService = engine.getService(ChartService.SERVICE_NAME);
-        _chartProvider = chartProvider;
-    }
-
-    public String buildURL(IRequestCycle cycle)
-    {
-        ILink l = _chartService.getLink(cycle, _chartProvider, null);
-
-        return l.getURL();
-    }
-
-    public InputStream getResourceAsStream(IRequestCycle cycle) 
-    {
-        return null;
-    }
-
-    public InputStream getResourceAsStream(IRequestCycle cycle, Locale locale)
-    {
-        return null;
-    }
-
-}
\ No newline at end of file
diff --git a/3.0.4/examples/Workbench/src/org/apache/tapestry/workbench/chart/ChartPage.java b/3.0.4/examples/Workbench/src/org/apache/tapestry/workbench/chart/ChartPage.java
deleted file mode 100644
index 0c8f608..0000000
--- a/3.0.4/examples/Workbench/src/org/apache/tapestry/workbench/chart/ChartPage.java
+++ /dev/null
@@ -1,247 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.workbench.chart;
-
-import java.awt.Color;
-import java.awt.Paint;
-import java.util.ArrayList;
-import java.util.List;
-
-import org.apache.tapestry.IAsset;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.html.BasePage;
-import org.apache.tapestry.valid.IValidationDelegate;
-import org.jCharts.Chart;
-import org.jCharts.chartData.ChartDataException;
-import org.jCharts.chartData.PieChartDataSet;
-import org.jCharts.nonAxisChart.PieChart2D;
-import org.jCharts.properties.ChartProperties;
-import org.jCharts.properties.LegendProperties;
-import org.jCharts.properties.PieChart2DProperties;
-import org.jCharts.test.TestDataGenerator;
-
-/**
- *  Demonstrates more complex form handling (including loops and dynamic addition/deletion of
- *  rows) as well as dynamic image generation using JCharts.
- * 
- *  @author Howard Lewis Ship, Luis Neves
- *  @version $Id$
- *  @since 1.0.10
- * 
- **/
-
-public class ChartPage extends BasePage implements IChartProvider
-{
-    private List _plotValues;
-    private List _removeValues;
-    private PlotValue _plotValue;
-
-    public void initialize()
-    {
-        _plotValues = null;
-        _removeValues = null;
-        _plotValue = null;
-    }
-
-    /**
-     *  Invokes {@link #getPlotValues()}, which ensures that (on the very first request cycle),
-     *  the persistent values property is set <em>before</em> the page recorder is locked.
-     * 
-     **/
-
-    public void beginResponse(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        getPlotValues();
-    }
-
-    public List getPlotValues()
-    {
-        if (_plotValues == null)
-        {
-            _plotValues = new ArrayList();
-
-            _plotValues.add(new PlotValue("Fred", 10));
-            _plotValues.add(new PlotValue("Barney", 15));
-            _plotValues.add(new PlotValue("Dino", 7));
-
-            fireObservedChange("plotValues", _plotValues);
-        }
-
-        return _plotValues;
-    }
-
-    public void setPlotValues(List plotValues)
-    {
-        _plotValues = plotValues;
-
-        fireObservedChange("plotValues", plotValues);
-    }
-
-    public PlotValue getPlotValue()
-    {
-        return _plotValue;
-    }
-
-    public void setPlotValue(PlotValue plotValue)
-    {
-        _plotValue = plotValue;
-    }
-
-    /**
-     *  Invoked during the render; always returns false.
-     * 
-     **/
-
-    public boolean isMarkedForDeletion()
-    {
-        return false;
-    }
-
-    /**
-     *  Invoked by the deleted checkbox (for each plotValue).  If true,
-     *  the the current plotValue is added to the list of plotValues to
-     *  remove (though the actual removing is done inside {@link #delete(IRequestCycle)},
-     *  after the loop.
-     *
-     **/
-
-    public void setMarkedForDeletion(boolean value)
-    {
-        if (value)
-        {
-            if (_removeValues == null)
-                _removeValues = new ArrayList();
-
-            _removeValues.add(_plotValue);
-
-            // Deleting things screws up the validation delegate.
-            // That's because the errors are associated with the form name
-            // (not the component id), and deleting elements causes
-            // all the names to shift.
-
-            IValidationDelegate delegate = (IValidationDelegate) getBeans().getBean("delegate");
-
-            delegate.clear();
-        }
-    }
-
-    /**
-     *  Form listener method; does nothing since we want to stay on this page.
-     * 
-     **/
-
-    public void submit(IRequestCycle cycle)
-    {
-    }
-
-    /**
-     *  Listener method for the add button, adds an additional (blank) plot value.
-     * 
-     **/
-
-    public void add(IRequestCycle cycle)
-    {
-        List plotValues = getPlotValues();
-
-        plotValues.add(new PlotValue());
-
-        setPlotValues(plotValues);
-    }
-
-    /**
-     *  Listener method for the remove button, removes any checked plot values.
-     * 
-     *  @see #setMarkedForDeletion(boolean)
-     * 
-     **/
-
-    public void delete(IRequestCycle cycle)
-    {
-        if (_removeValues != null)
-        {
-            List plotValues = getPlotValues();
-
-            plotValues.removeAll(_removeValues);
-
-            setPlotValues(plotValues);
-        }
-    }
-
-    private IAsset chartImageAsset;
-
-    public IAsset getChartImageAsset()
-    {
-        if (chartImageAsset == null)
-            chartImageAsset = new ChartAsset(getRequestCycle(), this);
-
-        return chartImageAsset;
-    }
-
-    /**
-     *  This method is invoked by the service (in a seperate request cycle from all the form handling stuff).
-     *  The {@link #getChartImageAsset()} method provides an {@link IAsset} that is handled by the 
-     *  {@link ChartService}, and the asset encodes the identity of this page.
-     * 
-     **/
-
-    public Chart getChart()
-    {
-        LegendProperties legendProperties = new LegendProperties();
-        legendProperties.setNumColumns(2);
-        legendProperties.setPlacement(LegendProperties.RIGHT);
-        ChartProperties chartProperties = new ChartProperties();
-        chartProperties.setBackgroundPaint(Color.decode("#ffffcc"));
-
-        Chart result = new PieChart2D(getData(), legendProperties, chartProperties, 400, 350);
-
-        return result;
-    }
-
-    private PieChartDataSet getData()
-    {
-        List plotValues = getPlotValues();
-        int count = plotValues.size();
-        double[] data = new double[count];
-        String[] labels = new String[count];
-        PieChart2DProperties properties = new PieChart2DProperties();
-
-        for (int i = 0; i < count; i++)
-        {
-            PlotValue pv = (PlotValue) plotValues.get(i);
-
-            String name = pv.getName();
-
-            if (Tapestry.isBlank(name))
-                name = "<New>";
-
-            data[i] = new Double(pv.getValue()).doubleValue();
-            labels[i] = new String(name);
-        }
-
-        Paint[] paints = TestDataGenerator.getRandomPaints(count);
-        
-        try
-        {
-            return new PieChartDataSet("Pie Chart", data, labels, paints, properties);
-        }
-        catch (ChartDataException e)
-        {
-            return null;
-        }
-    }
-
-}
\ No newline at end of file
diff --git a/3.0.4/examples/Workbench/src/org/apache/tapestry/workbench/chart/ChartService.java b/3.0.4/examples/Workbench/src/org/apache/tapestry/workbench/chart/ChartService.java
deleted file mode 100644
index b0e8df3..0000000
--- a/3.0.4/examples/Workbench/src/org/apache/tapestry/workbench/chart/ChartService.java
+++ /dev/null
@@ -1,120 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.workbench.chart;
-
-import java.io.IOException;
-
-import javax.servlet.ServletException;
-
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.IPage;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.engine.AbstractService;
-import org.apache.tapestry.engine.IEngineServiceView;
-import org.apache.tapestry.engine.ILink;
-import org.apache.tapestry.request.ResponseOutputStream;
-import org.jCharts.Chart;
-import org.jCharts.encoders.JPEGEncoder13;
-
-/**
- *  ServiceLink that works with a {@link Chart} to dynamically render
- *  a chart as a JPEG.  This is a very limited implementation; a full version
- *  would include features such as setting the size of the image, and more flexibility
- *  in defining where the {@link Chart} instance is obtained from.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 1.0.10
- * 
- **/
-
-public class ChartService extends AbstractService
-{
-    public static final String SERVICE_NAME = "chart";
-
-    public ILink getLink(IRequestCycle cycle, IComponent component, Object[] parameters)
-    {
-        String[] context;
-        String pageName = component.getPage().getPageName();
-        String idPath = component.getIdPath();
-
-        if (idPath != null)
-        {
-            context = new String[2];
-            context[1] = idPath;
-        }
-        else
-            context = new String[1];
-
-        context[0] = pageName;
-
-        return constructLink(cycle, SERVICE_NAME, context, null, true);
-    }
-
-    public void service(
-        IEngineServiceView engine,
-        IRequestCycle cycle,
-        ResponseOutputStream output)
-        throws ServletException, IOException
-    {
-        String context[] = getServiceContext(cycle.getRequestContext());
-
-        String pageName = context[0];
-        String idPath = (context.length == 1) ? null : context[1];
-
-        IPage page = cycle.getPage(pageName);
-        IComponent component = (idPath == null) ? page : page.getNestedComponent(idPath);
-
-        try
-        {
-            IChartProvider provider = (IChartProvider) component;
-
-            Chart chart = provider.getChart();
-
-            output.setContentType("image/jpeg");
-
-            // I've seen a few bits of wierdness (including a JVM crash) inside this code.
-            // Hopefully, its a multi-threading problem that can be resolved
-            // by synchronizing.
-
-            synchronized (this)
-            {
-                JPEGEncoder13.encode(chart, 1.0f, output);
-            }
-        }
-        catch (ClassCastException ex)
-        {
-            engine.reportException(
-                "Component " + component.getExtendedId() + " does not implement IChartProvider.",
-                ex);
-
-            return;
-        }
-        catch (Throwable ex)
-        {
-            engine.reportException("Error creating JPEG stream.", ex);
-
-            return;
-        }
-
-        return;
-    }
-
-    public String getName()
-    {
-        return SERVICE_NAME;
-    }
-
-}
\ No newline at end of file
diff --git a/3.0.4/examples/Workbench/src/org/apache/tapestry/workbench/chart/IChartProvider.java b/3.0.4/examples/Workbench/src/org/apache/tapestry/workbench/chart/IChartProvider.java
deleted file mode 100644
index 068a3c8..0000000
--- a/3.0.4/examples/Workbench/src/org/apache/tapestry/workbench/chart/IChartProvider.java
+++ /dev/null
@@ -1,31 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.workbench.chart;
-
-import org.jCharts.Chart;
-
-/**
- *  An object which can provide a {@link Chart} (to the {@link ChartService}).
- * 
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 1.0.10
- * 
- **/
-
-public interface IChartProvider
-{
-    public Chart getChart();
-}
\ No newline at end of file
diff --git a/3.0.4/examples/Workbench/src/org/apache/tapestry/workbench/chart/PlotValue.java b/3.0.4/examples/Workbench/src/org/apache/tapestry/workbench/chart/PlotValue.java
deleted file mode 100644
index 9d75e98..0000000
--- a/3.0.4/examples/Workbench/src/org/apache/tapestry/workbench/chart/PlotValue.java
+++ /dev/null
@@ -1,74 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.workbench.chart;
-
-import java.io.Serializable;
-
-/**
- *  An single point of data in the plot.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 1.0.10
- *
- **/
-
-public class PlotValue implements Serializable
-{
-    private String name;
-    private int value;
-
-    public PlotValue()
-    {
-    }
-
-    public PlotValue(String name, int value)
-    {
-        this.name = name;
-        this.value = value;
-    }
-    public String getName()
-    {
-        return name;
-    }
-
-    public void setName(String name)
-    {
-        this.name = name;
-    }
-
-    public int getValue()
-    {
-        return value;
-    }
-
-    public void setValue(int value)
-    {
-        this.value = value;
-    }
-
-    public String toString()
-    {
-        StringBuffer buffer = new StringBuffer("PlotValue@");
-        buffer.append(Integer.toHexString(hashCode()));
-        buffer.append('[');
-        buffer.append(name);
-        buffer.append(' ');
-        buffer.append(value);
-        buffer.append(']');
-
-        return buffer.toString();
-    }
-}
\ No newline at end of file
diff --git a/3.0.4/examples/Workbench/src/org/apache/tapestry/workbench/components/.cvsignore b/3.0.4/examples/Workbench/src/org/apache/tapestry/workbench/components/.cvsignore
deleted file mode 100644
index cdf09e9..0000000
--- a/3.0.4/examples/Workbench/src/org/apache/tapestry/workbench/components/.cvsignore
+++ /dev/null
@@ -1 +0,0 @@
-*.jbf
diff --git a/3.0.4/examples/Workbench/src/org/apache/tapestry/workbench/components/Border.java b/3.0.4/examples/Workbench/src/org/apache/tapestry/workbench/components/Border.java
deleted file mode 100644
index b5ba5e0..0000000
--- a/3.0.4/examples/Workbench/src/org/apache/tapestry/workbench/components/Border.java
+++ /dev/null
@@ -1,125 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.workbench.components;
-
-import org.apache.tapestry.BaseComponent;
-import org.apache.tapestry.IAsset;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.event.PageEvent;
-import org.apache.tapestry.event.PageRenderListener;
-import org.apache.tapestry.util.StringSplitter;
-import org.apache.tapestry.workbench.Visit;
-
-/**
- *  Common navigational border for the Workbench tutorial.
- * 
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 1.0.7
- *
- **/
-
-public abstract class Border extends BaseComponent implements PageRenderListener
-{
-
-    /**
-     * Array of page names, read from the Strings file; this is the same
-     * regardless of localization, so it is static (shared by all).
-     * 
-     **/
-
-    private static String[] _tabOrder;
-
-    public void pageBeginRender(PageEvent event)
-    {
-        Visit visit = (Visit) getPage().getEngine().getVisit(event.getRequestCycle());
-
-        setActivePageName(visit.getActiveTabName());
-
-        if (_tabOrder == null)
-        {
-            String tabOrderValue = getMessage("tabOrder");
-
-            StringSplitter splitter = new StringSplitter(' ');
-
-            _tabOrder = splitter.splitToArray(tabOrderValue);
-        }
-    }
-
-    /**
-     *  Returns the logical names of the pages accessible via the
-     *  navigation bar, in appopriate order.
-     *
-     **/
-
-    public String[] getPageTabNames()
-    {
-        return _tabOrder;
-    }
-
-    public abstract void setPageName(String value);
-    
-    public abstract String getPageName();
-
-	public abstract void setActivePageName(String activePageName);
-	
-	public abstract String getActivePageName();
-	
-	public boolean isActivePage()
-	{
-		return getPageName().equals(getActivePageName());
-	}
-
-    public String getPageTitle()
-    {
-        // Need to check for synchronization issues, but I think
-        // ResourceBundle is safe.
-
-        return getMessage(getPageName());
-    }
-
-    public IAsset getLeftTabAsset()
-    {
-        String name = isActivePage() ? "activeLeft" : "inactiveLeft";
-
-        return getAsset(name);
-    }
-
-    public IAsset getMidTabAsset()
-    {
-        String name = isActivePage() ? "activeMid" : "inactiveMid";
-
-        return getAsset(name);
-    }
-
-    public IAsset getRightTabAsset()
-    {
-        String name = isActivePage() ? "activeRight" : "inactiveRight";
-
-        return getAsset(name);
-    }
-
-    public void selectPage(IRequestCycle cycle)
-    {
-        Object[] parameters = cycle.getServiceParameters();
-        String newPageName = (String) parameters[0];
-
-        Visit visit = (Visit) getPage().getEngine().getVisit(cycle);
-
-        visit.setActiveTabName(newPageName);
-
-        cycle.activate(newPageName);
-    }
-}
\ No newline at end of file
diff --git a/3.0.4/examples/Workbench/src/org/apache/tapestry/workbench/fields/Dates.java b/3.0.4/examples/Workbench/src/org/apache/tapestry/workbench/fields/Dates.java
deleted file mode 100644
index 19be5de..0000000
--- a/3.0.4/examples/Workbench/src/org/apache/tapestry/workbench/fields/Dates.java
+++ /dev/null
@@ -1,61 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.workbench.fields;
-
-import java.util.Date;
-
-import org.apache.tapestry.html.BasePage;
-
-/**
- *  Page to demonstrate DateEdit form component.
- *
- *  @author Malcolm Edgar
- *  @version $Id$
- *  @since 2.2
- * 
- **/
-
-public class Dates extends BasePage
-{
-    private Date _startDate;
-    private Date _endDate;
- 
-    public void detach()
-    {
-        _startDate = null;
-        _endDate = null;       
-        super.detach();
-    }   
-    
-    public Date getStartDate()
-    {
-        return _startDate;
-    }
-
-    public void setStartDate(Date date)
-    {
-        _startDate = date;
-    }
-    
-    public Date getEndDate()
-    {
-        return _endDate;
-    }
-
-    public void setEndDate(Date date)
-    {
-        _endDate = date;
-    }   
-}
diff --git a/3.0.4/examples/Workbench/src/org/apache/tapestry/workbench/fields/Fields.java b/3.0.4/examples/Workbench/src/org/apache/tapestry/workbench/fields/Fields.java
deleted file mode 100644
index 893d372..0000000
--- a/3.0.4/examples/Workbench/src/org/apache/tapestry/workbench/fields/Fields.java
+++ /dev/null
@@ -1,88 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.workbench.fields;
-
-import java.math.BigDecimal;
-
-import org.apache.tapestry.workbench.WorkbenchValidationDelegate;
-
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.html.BasePage;
-
-/**
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 1.0.7
- *
- **/
-
-public class Fields extends BasePage
-{
-    public static final int INT_MIN = 5;
-    public static final int INT_MAX = 20;
-    public static final double DOUBLE_MIN = 3.14;
-    public static final double DOUBLE_MAX = 27.5;
-    public static final BigDecimal DECIMAL_MIN = new BigDecimal("2");
-
-    public static final BigDecimal DECIMAL_MAX =
-        new BigDecimal("100.123456234563456734563456356734567456784567456784567845675678456785678");
-
-    public static final long LONG_MIN = 6;
-    public static final long LONG_MAX = 21;
-
-    public static final int STRING_MIN_LENGTH = 3;
-
-    private boolean _clientValidationEnabled = true;
-    
-    public void detach()
-    {
-        _clientValidationEnabled = true;
-        
-        super.detach();
-    }
-       
-    
-    public void clientValidationChanged(IRequestCycle cycle)
-    {
-        // Do nothing.
-    }
-
-    public void formSubmit(IRequestCycle cycle)
-    {
-
-        WorkbenchValidationDelegate delegate = (WorkbenchValidationDelegate) getBeans().getBean("delegate");
-
-        // If no error message, advance to the Results page,
-
-        // otherwise, stay here and show the error message.
-
-        if (!delegate.getHasErrors())
-            cycle.activate("FieldsResults");
-    }
-
-    public boolean isClientValidationEnabled()
-    {
-        return _clientValidationEnabled;
-    }
-
-    public void setClientValidationEnabled(boolean clientValidationEnabled)
-    {
-        _clientValidationEnabled = clientValidationEnabled;
-        
-        fireObservedChange("clientValidationEnabled", _clientValidationEnabled);
-    }
-
-}
\ No newline at end of file
diff --git a/3.0.4/examples/Workbench/src/org/apache/tapestry/workbench/jsp/JSP.java b/3.0.4/examples/Workbench/src/org/apache/tapestry/workbench/jsp/JSP.java
deleted file mode 100644
index 533c62b..0000000
--- a/3.0.4/examples/Workbench/src/org/apache/tapestry/workbench/jsp/JSP.java
+++ /dev/null
@@ -1,37 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.workbench.jsp;
-
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.RedirectException;
-import org.apache.tapestry.html.BasePage;
-
-/**
- *  Used to redirect to the TapestryTags.jsp page.
- * 
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 3.0
- *
- **/
-
-public class JSP extends BasePage
-{
-    public void launch(IRequestCycle cycle)
-    {
-        throw new RedirectException("TapestryTags.jsp");
-    }
-}
diff --git a/3.0.4/examples/Workbench/src/org/apache/tapestry/workbench/jsp/JSPResults.java b/3.0.4/examples/Workbench/src/org/apache/tapestry/workbench/jsp/JSPResults.java
deleted file mode 100644
index 41940e8..0000000
--- a/3.0.4/examples/Workbench/src/org/apache/tapestry/workbench/jsp/JSPResults.java
+++ /dev/null
@@ -1,38 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.workbench.jsp;
-
-import org.apache.tapestry.IExternalPage;
-import org.apache.tapestry.IRequestCycle;
-
-/**
- *  Page accessible via the external link.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 3.0
- *
- **/
-
-public abstract class JSPResults extends JSP implements IExternalPage
-{
-	public abstract void setParameters(Object[] parameters);
-
-    public void activateExternalPage(Object[] parameters, IRequestCycle cycle)
-    {
-    	setParameters(parameters);
-    }
-
-}
diff --git a/3.0.4/examples/Workbench/src/org/apache/tapestry/workbench/localization/LocaleModel.java b/3.0.4/examples/Workbench/src/org/apache/tapestry/workbench/localization/LocaleModel.java
deleted file mode 100644
index c66d796..0000000
--- a/3.0.4/examples/Workbench/src/org/apache/tapestry/workbench/localization/LocaleModel.java
+++ /dev/null
@@ -1,81 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.workbench.localization;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Locale;
-
-import org.apache.tapestry.form.IPropertySelectionModel;
-
-/**
- *
- *  @version $Id$
- *  @author Howard Lewis Ship
- *
- **/
-
-public class LocaleModel implements IPropertySelectionModel
-{
-    private Locale locale;
-    private List locales = new ArrayList();
-
-    public LocaleModel(Locale locale)
-    {
-        this.locale = locale;
-    }
-
-    public void add(Locale locale)
-    {
-        locales.add(locale);
-    }
-
-    private Locale get(int index)
-    {
-        return (Locale) locales.get(index);
-    }
-
-    public String getLabel(int index)
-    {
-        return get(index).getDisplayName(locale);
-    }
-
-    public int getOptionCount()
-    {
-        return locales.size();
-    }
-
-    public Object getOption(int index)
-    {
-        return locales.get(index);
-    }
-
-    /**
-     *  Returns the String version of the integer index.
-     *
-     **/
-
-    public String getValue(int index)
-    {
-        return Integer.toString(index);
-    }
-
-    public Object translateValue(String value)
-    {
-        int index = Integer.parseInt(value);
-
-        return locales.get(index);
-    }
-}
\ No newline at end of file
diff --git a/3.0.4/examples/Workbench/src/org/apache/tapestry/workbench/localization/Localization.java b/3.0.4/examples/Workbench/src/org/apache/tapestry/workbench/localization/Localization.java
deleted file mode 100644
index bada689..0000000
--- a/3.0.4/examples/Workbench/src/org/apache/tapestry/workbench/localization/Localization.java
+++ /dev/null
@@ -1,60 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.workbench.localization;
-
-import java.util.Locale;
-
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.form.IPropertySelectionModel;
-import org.apache.tapestry.html.BasePage;
-
-/**
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 1.0.7
- *
- **/
-
-public class Localization extends BasePage
-{
-	private IPropertySelectionModel localeModel;
-
-	public void formSubmit(IRequestCycle cycle)
-	{
-		cycle.activate("LocalizationChange");
-	}
-
-	public IPropertySelectionModel getLocaleModel()
-	{
-		if (localeModel == null)
-			localeModel = buildLocaleModel();
-
-		return localeModel;
-	}
-
-	private IPropertySelectionModel buildLocaleModel()
-	{
-		LocaleModel model = new LocaleModel(getLocale());
-
-		model.add(Locale.ENGLISH);
-		model.add(Locale.FRENCH);
-		model.add(Locale.GERMAN);
-		model.add(Locale.ITALIAN);
-
-		return model;
-	}
-
-}
\ No newline at end of file
diff --git a/3.0.4/examples/Workbench/src/org/apache/tapestry/workbench/localization/LocalizationChange.java b/3.0.4/examples/Workbench/src/org/apache/tapestry/workbench/localization/LocalizationChange.java
deleted file mode 100644
index 7c15685..0000000
--- a/3.0.4/examples/Workbench/src/org/apache/tapestry/workbench/localization/LocalizationChange.java
+++ /dev/null
@@ -1,43 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.workbench.localization;
-
-import java.util.Locale;
-
-import org.apache.tapestry.html.BasePage;
-
-/**
- *
- *  @version $Id$
- *  @author Howard Lewis Ship
- *
- **/
-
-public class LocalizationChange extends BasePage
-{
-    private String localeName;
-
-    public String getLocaleName()
-    {
-        if (localeName == null)
-        {
-            Locale locale = getLocale();
-
-            localeName = locale.getDisplayName(locale);
-        }
-
-        return localeName;
-    }
-}
\ No newline at end of file
diff --git a/3.0.4/examples/Workbench/src/org/apache/tapestry/workbench/palette/Palette.java b/3.0.4/examples/Workbench/src/org/apache/tapestry/workbench/palette/Palette.java
deleted file mode 100644
index aeba9f9..0000000
--- a/3.0.4/examples/Workbench/src/org/apache/tapestry/workbench/palette/Palette.java
+++ /dev/null
@@ -1,125 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.workbench.palette;
-
-import java.util.List;
-import java.util.ResourceBundle;
-
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.contrib.palette.SortMode;
-import org.apache.tapestry.form.EnumPropertySelectionModel;
-import org.apache.tapestry.form.IPropertySelectionModel;
-import org.apache.tapestry.form.StringPropertySelectionModel;
-import org.apache.tapestry.html.BasePage;
-import org.apache.commons.lang.enum.Enum;
-
-/**
- *  @version $Id$
- *  @author Howard Lewis Ship
- *
- **/
-
-public class Palette extends BasePage
-{
-    private List _selectedColors;
-
-    private SortMode _sort = SortMode.USER;
-
-    private IPropertySelectionModel _sortModel;
-
-    public void initialize()
-    {
-        _sort = SortMode.USER;
-        _selectedColors = null;
-    }
-
-    public void formSubmit(IRequestCycle cycle)
-    {
-        // Does nothing ... may be invoked because
-        // the user changed the sort
-    }
-
-    /**
-     *  Invoked before {@link #formSubmit(IRequestCycle)} if the
-     *  user clicks the "advance" button.
-     * 
-     **/
-
-    public void advance(IRequestCycle cycle)
-    {
-        // Since Palette and palette.Results come from
-        // a library now, we need to make sure
-        // the namespace id is part of the name.
-
-        PaletteResults results = (PaletteResults) cycle.getPage("PaletteResults");
-
-        results.setSelectedColors(_selectedColors);
-
-        cycle.activate(results);
-    }
-
-    private IPropertySelectionModel colorModel;
-
-    private String[] colors = { "Red", "Orange", "Yellow", "Green", "Blue", "Indigo", "Violet" };
-
-    public IPropertySelectionModel getColorModel()
-    {
-        if (colorModel == null)
-            colorModel = new StringPropertySelectionModel(colors);
-
-        return colorModel;
-    }
-
-    public void setSort(SortMode value)
-    {
-        _sort = value;
-
-        fireObservedChange("sort", value);
-    }
-
-    public SortMode getSort()
-    {
-        return _sort;
-    }
-
-    public IPropertySelectionModel getSortModel()
-    {
-        if (_sortModel == null)
-        {
-            String packageName = getClass().getPackage().getName();
-            
-            ResourceBundle bundle =
-                ResourceBundle.getBundle(packageName + ".SortModeStrings", getLocale());
-
-            Enum[] options =
-                new Enum[] { SortMode.NONE, SortMode.LABEL, SortMode.VALUE, SortMode.USER };
-
-            _sortModel = new EnumPropertySelectionModel(options, bundle);
-        }
-
-        return _sortModel;
-    }
-
-    public List getSelectedColors()
-    {
-        return _selectedColors;
-    }
-
-    public void setSelectedColors(List selectedColors)
-    {
-        _selectedColors = selectedColors;
-    }
-
-}
\ No newline at end of file
diff --git a/3.0.4/examples/Workbench/src/org/apache/tapestry/workbench/palette/PaletteResults.java b/3.0.4/examples/Workbench/src/org/apache/tapestry/workbench/palette/PaletteResults.java
deleted file mode 100644
index 9912da3..0000000
--- a/3.0.4/examples/Workbench/src/org/apache/tapestry/workbench/palette/PaletteResults.java
+++ /dev/null
@@ -1,48 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.workbench.palette;
-
-import java.util.List;
-
-import org.apache.tapestry.html.BasePage;
-
-/**
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 1.0.7
- *
- **/
-
-public class PaletteResults extends BasePage
-{
-    private List selectedColors;
-
-    public void initialize()
-    {
-        selectedColors = null;
-    }
-
-    public void setSelectedColors(List value)
-    {
-        selectedColors = value;
-    }
-
-    public List getSelectedColors()
-    {
-        return selectedColors;
-    }
-
-}
\ No newline at end of file
diff --git a/3.0.4/examples/Workbench/src/org/apache/tapestry/workbench/palette/SortModeStrings.properties b/3.0.4/examples/Workbench/src/org/apache/tapestry/workbench/palette/SortModeStrings.properties
deleted file mode 100644
index 2d143dd..0000000
--- a/3.0.4/examples/Workbench/src/org/apache/tapestry/workbench/palette/SortModeStrings.properties
+++ /dev/null
@@ -1,6 +0,0 @@
-# $Id$
-
-NONE=None
-LABEL=Label
-VALUE=Value
-USER=Manual
diff --git a/3.0.4/examples/Workbench/src/org/apache/tapestry/workbench/table/ILocaleSelectionListener.java b/3.0.4/examples/Workbench/src/org/apache/tapestry/workbench/table/ILocaleSelectionListener.java
deleted file mode 100644
index ccdc978..0000000
--- a/3.0.4/examples/Workbench/src/org/apache/tapestry/workbench/table/ILocaleSelectionListener.java
+++ /dev/null
@@ -1,26 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.workbench.table;
-
-import java.util.Locale;
-
-/**
- * @author mindbridge
- *
- */
-public interface ILocaleSelectionListener
-{
-    void localesSelected(Locale[] arrLocales);
-}
diff --git a/3.0.4/examples/Workbench/src/org/apache/tapestry/workbench/table/LocaleList.java b/3.0.4/examples/Workbench/src/org/apache/tapestry/workbench/table/LocaleList.java
deleted file mode 100644
index 7565c86..0000000
--- a/3.0.4/examples/Workbench/src/org/apache/tapestry/workbench/table/LocaleList.java
+++ /dev/null
@@ -1,114 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.workbench.table;
-
-import java.util.HashSet;
-import java.util.Locale;
-import java.util.Set;
-import java.util.StringTokenizer;
-
-import org.apache.tapestry.BaseComponent;
-import org.apache.tapestry.IBinding;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.contrib.table.model.IPrimaryKeyConvertor;
-
-/**
- * @author mindbridge
- *
- */
-public abstract class LocaleList extends BaseComponent
-{
-    // immutable values
-	private IPrimaryKeyConvertor m_objLocaleConvertor;
-    
-    public LocaleList()
-    {
-        // define an IPrimaryKeyConvertor that represents
-        // a Locale object as a String and converts it back
-        m_objLocaleConvertor = new IPrimaryKeyConvertor()
-        {
-            public Object getPrimaryKey(Object objValue)
-            {
-                Locale objLocale = (Locale) objValue;
-                return objLocale.toString();
-            }
-
-            public Object getValue(Object objPrimaryKey)
-            {
-                StringTokenizer objTokenizer = new StringTokenizer((String) objPrimaryKey, "_");
-
-                String strLanguage = "";
-                if (objTokenizer.hasMoreTokens())
-                    strLanguage = objTokenizer.nextToken(); 
-
-                String strCountry = "";
-                if (objTokenizer.hasMoreTokens())
-                    strCountry = objTokenizer.nextToken(); 
-
-                String strVariant = "";
-                if (objTokenizer.hasMoreTokens())
-                    strVariant = objTokenizer.nextToken();
-                
-                return new Locale(strLanguage, strCountry, strVariant); 
-            }
-        };
-    }
-    
-    public IPrimaryKeyConvertor getLocaleConvertor()
-    {
-        return m_objLocaleConvertor;
-    }
-
-    public boolean getCheckboxSelected() 
-    {
-        return getSelectedLocales().contains(getCurrentLocale());
-    }
-    
-    public void setCheckboxSelected(boolean bSelected) 
-    {
-        Locale objLocale = getCurrentLocale();
-        Set setSelectedLocales = getSelectedLocales();
-        
-        if (bSelected)
-            setSelectedLocales.add(objLocale);
-        else
-            setSelectedLocales.remove(objLocale);
-        
-        // persist value
-        setSelectedLocales(setSelectedLocales);
-    }
-
-    public void selectLocales(IRequestCycle objCycle)
-    {
-        Set setSelectedLocales = getSelectedLocales();
-        Locale[] arrLocales = new Locale[setSelectedLocales.size()];
-        setSelectedLocales.toArray(arrLocales);
-
-        ILocaleSelectionListener objListener = 
-            (ILocaleSelectionListener) getLocaleSelectionListenerBinding().getObject();
-        objListener.localesSelected(arrLocales);
-
-        // clear selection
-        setSelectedLocales(new HashSet());
-    }
-
-    public abstract IBinding getLocaleSelectionListenerBinding();
-    
-    public abstract Locale getCurrentLocale();
-
-    public abstract Set getSelectedLocales();
-
-    public abstract void setSelectedLocales(Set set);
-}
diff --git a/3.0.4/examples/Workbench/src/org/apache/tapestry/workbench/table/LocaleSelection.java b/3.0.4/examples/Workbench/src/org/apache/tapestry/workbench/table/LocaleSelection.java
deleted file mode 100644
index bef257a..0000000
--- a/3.0.4/examples/Workbench/src/org/apache/tapestry/workbench/table/LocaleSelection.java
+++ /dev/null
@@ -1,162 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.workbench.table;
-
-import java.text.DateFormat;
-import java.text.DecimalFormatSymbols;
-import java.util.Date;
-import java.util.Locale;
-import java.util.Set;
-
-import org.apache.commons.collections.CollectionUtils;
-import org.apache.tapestry.BaseComponent;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.contrib.table.model.ITableColumn;
-import org.apache.tapestry.contrib.table.model.simple.ITableColumnEvaluator;
-import org.apache.tapestry.contrib.table.model.simple.SimpleTableColumn;
-
-/**
- * @author mindbridge
- * @version $Id$
- */
-public abstract class LocaleSelection extends BaseComponent implements ILocaleSelectionListener
-{
-    // immutable
-    private VerbosityRating m_objVerbosityRating;
-
-    // temporary
-    private Locale m_objCurrentLocale;
-
-    // properties
-    public abstract Locale getCurrentLocale();
-    public abstract Set getLocaleSet();
-    public abstract void setLocaleSet(Set objLocaleSet);
-
-    /**
-     * Creates a new LocaleSelection component
-     */
-    public LocaleSelection()
-    {
-        m_objVerbosityRating = new VerbosityRating();
-    }
-
-    /**
-     * @see org.apache.tapestry.workbench.table.ILocaleSelectionListener#localesSelected(Locale[])
-     */
-    public void localesSelected(Locale[] arrLocales)
-    {
-        Set objLocaleSet = getLocaleSet();
-        CollectionUtils.addAll(objLocaleSet, arrLocales);
-        // ensure that the framework knows about the change and the set is persisted
-        setLocaleSet(objLocaleSet);
-    }
-
-    public ITableColumn getCurrencyColumn()
-    {
-        // The column value is extracted in a custom evaluator class
-        return new SimpleTableColumn("Currency", new CurrencyEvaluator(), true);
-    }
-
-    public ITableColumn getDateFormatColumn()
-    {
-        // The entire column is defined using a custom column class
-        return new DateFormatColumn(new Date());
-    }
-
-    /**
-     * Returns the verbosity of the current locale. 
-     * This is used by the Block rendering the 'Verbosity' column
-     * @return int the current locale verbosity
-     */
-    public int getCurrentLocaleVerbosity()
-    {
-        int nVerbosity = VerbosityRating.calculateVerbosity(getCurrentLocale());
-        return nVerbosity;
-    }
-
-    /**
-     * Generates the context that will be passed to the deleteLocale() listener 
-     * if a "remove" link is selected. <p>
-     * 
-     * This is used by the Block rendering the 'Remove' column.
-     * 
-     * @return String[] the context for the deleteLocale() listener
-     */
-    public String[] getDeleteLocaleContext()
-    {
-        Locale objLocale = getCurrentLocale();
-        return new String[] {
-            objLocale.getLanguage(),
-            objLocale.getCountry(),
-            objLocale.getVariant()};
-    }
-
-    /**
-     * A listener invoked when a "remove" link is selected. 
-     * It removes from the data model the locale corresponding to the link. <p>
-     * 
-     * @param objCycle the request cycle
-     */
-    public void deleteLocale(IRequestCycle objCycle)
-    {
-        Object[] arrParams = objCycle.getServiceParameters();
-        Locale objLocale =
-            new Locale(arrParams[0].toString(), arrParams[1].toString(), arrParams[2].toString());
-        getLocaleSet().remove(objLocale);
-    }
-
-    /**
-     * A class defining the logic for getting the currency symbol from a locale
-     */
-    private static class CurrencyEvaluator implements ITableColumnEvaluator
-    {
-        /**
-         * @see org.apache.tapestry.contrib.table.model.simple.ITableColumnEvaluator#getColumnValue(ITableColumn, Object)
-         */
-        public Object getColumnValue(ITableColumn objColumn, Object objRow)
-        {
-            Locale objLocale = (Locale) objRow;
-            String strCountry = objLocale.getCountry();
-            if (strCountry == null || strCountry.equals(""))
-                return "";
-
-            DecimalFormatSymbols objSymbols = new DecimalFormatSymbols(objLocale);
-            return objSymbols.getCurrencySymbol();
-        }
-    }
-
-    /**
-     * A class defining a column for displaying the date format
-     */
-    private static class DateFormatColumn extends SimpleTableColumn
-    {
-        private Date m_objDate;
-
-        public DateFormatColumn(Date objDate)
-        {
-            super("Date Format", true);
-            m_objDate = objDate;
-        }
-
-        public Object getColumnValue(Object objRow)
-        {
-            Locale objLocale = (Locale) objRow;
-            DateFormat objFormat =
-                DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG, objLocale);
-            return objFormat.format(m_objDate);
-        }
-    }
-
-}
diff --git a/3.0.4/examples/Workbench/src/org/apache/tapestry/workbench/table/VerbosityRating.java b/3.0.4/examples/Workbench/src/org/apache/tapestry/workbench/table/VerbosityRating.java
deleted file mode 100644
index 312394c..0000000
--- a/3.0.4/examples/Workbench/src/org/apache/tapestry/workbench/table/VerbosityRating.java
+++ /dev/null
@@ -1,105 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.workbench.table;
-
-import java.io.Serializable;
-import java.text.SimpleDateFormat;
-import java.util.GregorianCalendar;
-import java.util.Locale;
-
-/**
- * @author mindbridge
- *
- */
-public class VerbosityRating implements Serializable
-{
-
-	/**
-	 * Method calculateVerbosity.
-	 * Please note that this method is relatively slow
-	 * It should not be used often, unless for fun :)
-	 * @param objLocale
-	 * @return int
-	 */
-	public static int calculateVerbosity(Locale objLocale)
-	{
-		int nWeekDayVerbosity = calculateWeekDayVerbosity(objLocale);
-		int nMonthVerbosity = calculateMonthVerbosity(objLocale);
-		return nWeekDayVerbosity + nMonthVerbosity;
-	}
-
-	public static int calculateWeekDayVerbosity(Locale objLocale)
-	{
-		SimpleDateFormat objWeekDay = new SimpleDateFormat("EEEE", objLocale);
-
-		GregorianCalendar objCalendar = new GregorianCalendar();
-		objCalendar.set(GregorianCalendar.YEAR, 2000);
-		objCalendar.set(GregorianCalendar.MONTH, 0);
-		objCalendar.set(GregorianCalendar.DATE, 1);
-
-		int nCount = 0;
-		for (int i = 0; i < 7; i++)
-		{
-			String strWeekDay = objWeekDay.format(objCalendar.getTime());
-			nCount += strWeekDay.length();
-			objCalendar.add(GregorianCalendar.DATE, 1);
-		}
-
-		return nCount;
-	}
-
-	public static int calculateMonthVerbosity(Locale objLocale)
-	{
-		SimpleDateFormat objMonth = new SimpleDateFormat("MMMM", objLocale);
-
-		GregorianCalendar objCalendar = new GregorianCalendar();
-		objCalendar.set(GregorianCalendar.YEAR, 2000);
-		objCalendar.set(GregorianCalendar.MONTH, 0);
-		objCalendar.set(GregorianCalendar.DATE, 1);
-
-		int nCount = 0;
-		for (int i = 0; i < 12; i++)
-		{
-			String strMonth = objMonth.format(objCalendar.getTime());
-			nCount += strMonth.length();
-			objCalendar.add(GregorianCalendar.MONTH, 1);
-		}
-
-		return nCount;
-	}
-
-	public static void main(String[] arrArgs)
-	{
-		int nMax = 0;
-		int nMin = 1000;
-
-		System.out.println("Starting");
-
-		Locale[] arrLocales = Locale.getAvailableLocales();
-		for (int i = 0; i < arrLocales.length; i++)
-		{
-			Locale objLocale = arrLocales[i];
-			int nRating = calculateVerbosity(objLocale);
-			if (nRating > nMax)
-				nMax = nRating;
-			if (nRating < nMin)
-				nMin = nRating;
-		}
-
-		System.out.println("Min: " + nMin);
-		System.out.println("Max: " + nMax);
-	}
-
-}
diff --git a/3.0.4/examples/Workbench/src/org/apache/tapestry/workbench/tree/examples/DirectoryTableView.java b/3.0.4/examples/Workbench/src/org/apache/tapestry/workbench/tree/examples/DirectoryTableView.java
deleted file mode 100644
index 3e800bd..0000000
--- a/3.0.4/examples/Workbench/src/org/apache/tapestry/workbench/tree/examples/DirectoryTableView.java
+++ /dev/null
@@ -1,123 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.workbench.tree.examples;
-
-import java.util.ArrayList;
-import java.util.Collection;
-
-import org.apache.tapestry.BaseComponent;
-import org.apache.tapestry.IBinding;
-import org.apache.tapestry.contrib.table.components.Table;
-import org.apache.tapestry.contrib.table.model.ITableColumn;
-import org.apache.tapestry.contrib.table.model.ITableModel;
-import org.apache.tapestry.contrib.table.model.simple.SimpleTableColumn;
-import org.apache.tapestry.contrib.table.model.simple.SimpleTableModel;
-import org.apache.tapestry.workbench.tree.examples.fsmodel.SFObject;
-import org.apache.tapestry.event.PageDetachListener;
-import org.apache.tapestry.event.PageEvent;
-
-/**
- * @author ceco
- * @version $Id$
- */
-public class DirectoryTableView extends BaseComponent implements PageDetachListener{
-
-	private ITableModel m_objTableModel = null;
-	private ITableColumn[] m_arrColumns = null;
-	private ISelectedFolderSource m_objSelectedFolderSource = null;
-	/**
-	 * 
-	 */
-	public DirectoryTableView() {
-		super();
-		initialize();
-	}
-
-
-	private void initialize(){
-		m_objTableModel = null;
-		m_objSelectedFolderSource = null;
-	}
-	
-	/**
-	 * @see org.apache.tapestry.AbstractComponent#finishLoad()
-	 */
-	protected void finishLoad() {
-		super.finishLoad();
-		getPage().addPageDetachListener(this);
-	}
-
-
-	/**
-	 * @see org.apache.tapestry.event.PageDetachListener#pageDetached(org.apache.tapestry.event.PageEvent)
-	 */
-	public void pageDetached(PageEvent arg0) {
-		initialize();
-	}
-
-	public ITableModel getTableModel() {
-		if(m_objTableModel == null){
-			ISelectedFolderSource objSelectedFolderSource = getSelectedFolderSource();
-			Collection colChildrens = objSelectedFolderSource.getSelectedFolderChildren();
-			
-			m_objTableModel = new SimpleTableModel(colChildrens.toArray(), getColumns());
-		}
-		return m_objTableModel;
-	}
-
-	public ITableColumn[] getColumns() {
-		if(m_arrColumns == null){
-			ArrayList arrColumnsList = new ArrayList();
-			arrColumnsList.add(new SimpleTableColumn ("Name", true) 
-				{ 
-					public Object getColumnValue(Object objValue) {
-						SFObject objSFObject = (SFObject) objValue;
-						return objSFObject.getName();
-					}
-				});
-
-			arrColumnsList.add(new SimpleTableColumn ("Date", true) 
-				{ 
-					public Object getColumnValue(Object objValue) {
-						SFObject objSFObject = (SFObject) objValue;
-						return objSFObject.getDate();
-					}
-				});
-
-			m_arrColumns = new SimpleTableColumn[arrColumnsList.size()];
-			arrColumnsList.toArray(m_arrColumns);
-		}
-		return m_arrColumns;
-	}
-
-	public ISelectedFolderSource getSelectedFolderSource() {
-		if(m_objSelectedFolderSource == null){
-			IBinding objBinding = getBinding("selectedFolderSource");
-			m_objSelectedFolderSource = (ISelectedFolderSource)objBinding.getObject();
-		}
-		return m_objSelectedFolderSource;
-	}
-
-
-	public void resetState(){
-		initialize();
-		Table objTable = (Table)getComponent("table");
-		objTable.reset();
-	}
-	
-	public String getSelectedNodeName(){
-		return getSelectedFolderSource().getSelectedNodeName();
-	}
-}
diff --git a/3.0.4/examples/Workbench/src/org/apache/tapestry/workbench/tree/examples/FileSystemTree.java b/3.0.4/examples/Workbench/src/org/apache/tapestry/workbench/tree/examples/FileSystemTree.java
deleted file mode 100644
index 1d4172e..0000000
--- a/3.0.4/examples/Workbench/src/org/apache/tapestry/workbench/tree/examples/FileSystemTree.java
+++ /dev/null
@@ -1,166 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.workbench.tree.examples;
-
-import java.io.File;
-import java.util.Collection;
-import java.util.Date;
-
-import org.apache.tapestry.contrib.tree.components.INodeRenderFactory;
-import org.apache.tapestry.contrib.tree.components.TreeView;
-import org.apache.tapestry.workbench.tree.examples.fsmodel.FileSystem;
-import org.apache.tapestry.workbench.tree.examples.fsmodel.FileSystemDataModel;
-import org.apache.tapestry.workbench.tree.examples.fsmodel.FileSystemStateManager;
-import org.apache.tapestry.workbench.tree.examples.fsmodel.FolderObject;
-import org.apache.tapestry.workbench.tree.examples.fsmodel.NodeRenderFactory;
-import org.apache.tapestry.contrib.tree.model.TreeStateEvent;
-import org.apache.tapestry.contrib.tree.model.ITreeDataModel;
-import org.apache.tapestry.contrib.tree.model.ITreeModel;
-import org.apache.tapestry.contrib.tree.model.ITreeNode;
-import org.apache.tapestry.contrib.tree.model.ITreeSessionStateManager;
-import org.apache.tapestry.contrib.tree.model.ITreeStateListener;
-import org.apache.tapestry.contrib.tree.model.ITreeStateModel;
-import org.apache.tapestry.contrib.tree.simple.SimpleTreeModel;
-
-import org.apache.tapestry.html.BasePage;
-
-public class FileSystemTree extends BasePage implements ISelectedFolderSource, ITreeStateListener{
-    private ITreeSessionStateManager m_objTreeSessionStateManager = null;
-    private ITreeDataModel m_objDataModel;
-    private ITreeModel m_objModel;
-    private Object m_objValue;
-
-    public FileSystemTree() {
-        super();
-    }
-
-	protected void initialize() {
-		super.initialize();
-        m_objDataModel = null;
-        m_objValue = null;
-        m_objTreeSessionStateManager = null;
-    }
-
-    public void initTableModel() {
-        ITreeNode objParent;
-        String strRootDir = getRequestCycle().getRequestContext().getServlet().getInitParameter("TreeRootDir");
-
-        System.out.println("strRootDir = " + strRootDir);
-
-        if (strRootDir == null || "".equals(strRootDir)) {
-            objParent = new FileSystem();
-        } else{
-            FolderObject objFolder = new FolderObject(null, new File(strRootDir), true);
-            objFolder.reload();
-            objParent = objFolder;
-        }
-
-        m_objDataModel = new FileSystemDataModel(objParent);
-        m_objModel = new SimpleTreeModel(m_objDataModel);
-    }
-
-    public Date getCurrentTime() {
-        return new Date();
-    }
-
-    public ITreeModel getTreeModel() {
-        if (m_objDataModel == null) {
-            initTableModel();
-        }
-        return m_objModel;
-    }
-
-    /**
-     * Returns the value.
-     * @return Object
-     */
-    public Object getValue() {
-        return m_objValue;
-    }
-
-    /**
-     * Sets the value.
-     * @param value The value to set
-     */
-    public void setValue(Object value) {
-        m_objValue = value;
-    }
-
-    public INodeRenderFactory getRenderFactory() {
-        return new NodeRenderFactory();
-    }
-
-    public ITreeSessionStateManager getSessionStateManager() {
-		//IPage objPage = getRequestCycle().getPage("contrib:TreeNodeViewPage");
-		//System.out.println("TreeNodeViewPage NamespaceId : "+objPage.getNamespace().getNamespaceId());
-        
-        if (m_objTreeSessionStateManager == null) {
-            String strRootDir = getRequestCycle().getRequestContext().getServlet().getInitParameter("TreeRootDir");
-            //System.out.println("strRootDir = " + strRootDir);
-
-            m_objTreeSessionStateManager =
-                new FileSystemStateManager(strRootDir);
-        }
-        return m_objTreeSessionStateManager;
-    }
-	/**
-	 * @see org.apache.tapestry.workbench.tree.examples.ISelectedFolderSource#getSelectedFolder()
-	 */
-	public Collection getSelectedFolderChildren() {
-		TreeView objTreeView = (TreeView)getComponent("treeView");
-		ITreeStateModel objTreeStateModel = objTreeView.getTreeModel().getTreeStateModel();
-		Object objSelectedNodeUID = objTreeStateModel.getSelectedNode();
-		ITreeNode objSelectedNode = null;
-		if(objSelectedNodeUID != null)
-			objSelectedNode = (ITreeNode)getTreeModel().getTreeDataModel().getObject(objSelectedNodeUID);
-		else{
-			objSelectedNode = (ITreeNode)getTreeModel().getTreeDataModel().getRoot();
-		}
-		return objSelectedNode.getChildren();
-	}
-
-	/**
-	 * @see org.apache.tapestry.contrib.tree.model.ITreeStateListener#treeStateChanged(org.apache.tapestry.contrib.tree.model.TreeStateEvent)
-	 */
-	public void treeStateChanged(TreeStateEvent objEvent) {
-		DirectoryTableView objDirectoryTableView = (DirectoryTableView)getComponent("directoryTableView");
-		objDirectoryTableView.resetState();
-	}
-
-	public ITreeStateListener getTreeStateListener(){
-		return this;
-	}
-
-	public ISelectedFolderSource getSelectedFolderSource(){
-		return this;
-	}
-	
-	/**
-	 * @see org.apache.tapestry.workbench.tree.examples.ISelectedFolderSource#getSelectedNodeName()
-	 */
-	public String getSelectedNodeName() {
-		TreeView objTreeView = (TreeView)getComponent("treeView");
-		ITreeStateModel objTreeStateModel = objTreeView.getTreeModel().getTreeStateModel();
-		Object objSelectedNodeUID = objTreeStateModel.getSelectedNode();
-		ITreeNode objSelectedNode = null;
-		if(objSelectedNodeUID != null)
-			objSelectedNode = (ITreeNode)getTreeModel().getTreeDataModel().getObject(objSelectedNodeUID);
-		else{
-			objSelectedNode = (ITreeNode)getTreeModel().getTreeDataModel().getRoot();
-		}
-		return objSelectedNode.toString();
-	}
-
-}
diff --git a/3.0.4/examples/Workbench/src/org/apache/tapestry/workbench/tree/examples/FileSystemTreeTable.java b/3.0.4/examples/Workbench/src/org/apache/tapestry/workbench/tree/examples/FileSystemTreeTable.java
deleted file mode 100644
index 0a6d370..0000000
--- a/3.0.4/examples/Workbench/src/org/apache/tapestry/workbench/tree/examples/FileSystemTreeTable.java
+++ /dev/null
@@ -1,190 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.workbench.tree.examples;
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Date;
-
-import org.apache.tapestry.contrib.table.model.simple.SimpleTableColumn;
-import org.apache.tapestry.contrib.tree.components.INodeRenderFactory;
-import org.apache.tapestry.contrib.tree.components.table.TreeTable;
-import org.apache.tapestry.workbench.tree.examples.fsmodel.FileSystem;
-import org.apache.tapestry.workbench.tree.examples.fsmodel.FileSystemDataModel;
-import org.apache.tapestry.workbench.tree.examples.fsmodel.FileSystemStateManager;
-import org.apache.tapestry.workbench.tree.examples.fsmodel.FolderObject;
-import org.apache.tapestry.workbench.tree.examples.fsmodel.NodeRenderFactory;
-import org.apache.tapestry.workbench.tree.examples.fsmodel.IFileSystemTreeNode;
-import org.apache.tapestry.contrib.tree.model.TreeRowObject;
-import org.apache.tapestry.contrib.tree.model.TreeStateEvent;
-import org.apache.tapestry.contrib.tree.model.ITreeDataModel;
-import org.apache.tapestry.contrib.tree.model.ITreeModel;
-import org.apache.tapestry.contrib.tree.model.ITreeModelSource;
-import org.apache.tapestry.contrib.tree.model.ITreeNode;
-import org.apache.tapestry.contrib.tree.model.ITreeSessionStateManager;
-import org.apache.tapestry.contrib.tree.model.ITreeStateListener;
-import org.apache.tapestry.contrib.tree.model.ITreeStateModel;
-import org.apache.tapestry.contrib.tree.simple.SimpleTreeModel;
-import org.apache.tapestry.html.BasePage;
-
-public class FileSystemTreeTable extends BasePage implements ISelectedFolderSource, ITreeStateListener{
-    private ITreeSessionStateManager m_objTreeSessionStateManager = null;
-    private ITreeDataModel m_objDataModel;
-    private ITreeModel m_objModel;
-    private Object m_objValue;
-	private ArrayList m_arrTableColumns = null;
-
-    public FileSystemTreeTable() {
-        super();
-    }
-
-	protected void initialize() {
-		super.initialize();
-        m_objDataModel = null;
-        m_objValue = null;
-        m_objTreeSessionStateManager = null;
-    }
-
-    public void initTableModel() {
-        ITreeNode objParent;
-        String strRootDir = getRequestCycle().getRequestContext().getServlet().getInitParameter("TreeRootDir");
-
-        System.out.println("strRootDir = " + strRootDir);
-
-        if (strRootDir == null || "".equals(strRootDir)) {
-            objParent = new FileSystem();
-        } else{
-            FolderObject objFolder = new FolderObject(null, new File(strRootDir), true);
-            objFolder.reload();
-            objParent = objFolder;
-        }
-
-        m_objDataModel = new FileSystemDataModel(objParent);
-        m_objModel = new SimpleTreeModel(m_objDataModel);
-    }
-
-    public Date getCurrentTime() {
-        return new Date();
-    }
-
-    public ITreeModel getTreeModel() {
-        if (m_objDataModel == null) {
-            initTableModel();
-        }
-        return m_objModel;
-    }
-
-    /**
-     * Returns the value.
-     * @return Object
-     */
-    public Object getValue() {
-        return m_objValue;
-    }
-
-    /**
-     * Sets the value.
-     * @param value The value to set
-     */
-    public void setValue(Object value) {
-        m_objValue = value;
-    }
-
-    public INodeRenderFactory getRenderFactory() {
-        return new NodeRenderFactory();
-    }
-
-    public ITreeSessionStateManager getSessionStateManager() {
-        if (m_objTreeSessionStateManager == null) {
-            String strRootDir = getRequestCycle().getRequestContext().getServlet().getInitParameter("TreeRootDir");
-//            System.out.println("strRootDir = " + strRootDir);
-
-            m_objTreeSessionStateManager =
-                new FileSystemStateManager(strRootDir);
-        }
-        return m_objTreeSessionStateManager;
-    }
-	
-	/**
-	 * @return
-	 */
-	public ArrayList getTableColumns() {
-		if(m_arrTableColumns == null){
-			m_arrTableColumns = new ArrayList();
-			m_arrTableColumns.add(new SimpleTableColumn ("Date", true) 
-				{ 
-					public Object getColumnValue(Object objValue) {
-						TreeRowObject objRowObject = (TreeRowObject)objValue;
-						//SFObject objSFObject = (SFObject)objRowObject.getTreeNode();
-						IFileSystemTreeNode objFileSystemTreeNode = (IFileSystemTreeNode)objRowObject.getTreeNode();
-						return objFileSystemTreeNode.getDate();
-					}
-				});
-		}
-		return m_arrTableColumns;
-	}
-
-	/**
-	 * @see org.apache.tapestry.workbench.tree.examples.ISelectedFolderSource#getSelectedFolder()
-	 */
-	public Collection getSelectedFolderChildren() {
-		TreeTable objTreeTable = (TreeTable)getComponent("tree");
-		ITreeModelSource objTreeModelSource = objTreeTable.getTreeModelSource();
-		ITreeStateModel objTreeStateModel = objTreeModelSource.getTreeModel().getTreeStateModel();
-		Object objSelectedNodeUID = objTreeStateModel.getSelectedNode();
-		ITreeNode objSelectedNode = null;
-		if(objSelectedNodeUID != null)
-			objSelectedNode = (ITreeNode)getTreeModel().getTreeDataModel().getObject(objSelectedNodeUID);
-		else{
-			objSelectedNode = (ITreeNode)getTreeModel().getTreeDataModel().getRoot();
-		}
-		return objSelectedNode.getChildren();
-	}
-
-	/**
-	 * @see org.apache.tapestry.contrib.tree.model.ITreeStateListener#treeStateChanged(org.apache.tapestry.contrib.tree.model.TreeStateEvent)
-	 */
-	public void treeStateChanged(TreeStateEvent objEvent) {
-		DirectoryTableView objDirectoryTableView = (DirectoryTableView)getComponent("directoryTableView");
-		objDirectoryTableView.resetState();
-	}
-
-	public ITreeStateListener getTreeStateListener(){
-		return this;
-	}
-
-	public ISelectedFolderSource getSelectedFolderSource(){
-		return this;
-	}
-
-	
-	/**
-	 * @see org.apache.tapestry.workbench.tree.examples.ISelectedFolderSource#getSelectedNodeName()
-	 */
-	public String getSelectedNodeName() {
-		TreeTable objTreeTable = (TreeTable)getComponent("tree");
-		ITreeModelSource objTreeModelSource = objTreeTable.getTreeModelSource();
-		ITreeStateModel objTreeStateModel = objTreeModelSource.getTreeModel().getTreeStateModel();
-		Object objSelectedNodeUID = objTreeStateModel.getSelectedNode();
-		ITreeNode objSelectedNode = null;
-		if(objSelectedNodeUID != null)
-			objSelectedNode = (ITreeNode)getTreeModel().getTreeDataModel().getObject(objSelectedNodeUID);
-		else{
-			objSelectedNode = (ITreeNode)getTreeModel().getTreeDataModel().getRoot();
-		}
-		return objSelectedNode.toString();
-	}
-}
diff --git a/3.0.4/examples/Workbench/src/org/apache/tapestry/workbench/tree/examples/ISelectedFolderSource.java b/3.0.4/examples/Workbench/src/org/apache/tapestry/workbench/tree/examples/ISelectedFolderSource.java
deleted file mode 100644
index a5aff2f..0000000
--- a/3.0.4/examples/Workbench/src/org/apache/tapestry/workbench/tree/examples/ISelectedFolderSource.java
+++ /dev/null
@@ -1,30 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.workbench.tree.examples;
-
-import java.util.Collection;
-
-/**
- * All right reserved.
- * Copyright (c) by Rushmore Digital Ltd.
- * 
- * Created on Sep 4, 2003
- * 
- * @author ceco
- */
-public interface ISelectedFolderSource {
-	Collection getSelectedFolderChildren();
-	String getSelectedNodeName();
-}
diff --git a/3.0.4/examples/Workbench/src/org/apache/tapestry/workbench/tree/examples/SessionVisit.java b/3.0.4/examples/Workbench/src/org/apache/tapestry/workbench/tree/examples/SessionVisit.java
deleted file mode 100644
index ae04b44..0000000
--- a/3.0.4/examples/Workbench/src/org/apache/tapestry/workbench/tree/examples/SessionVisit.java
+++ /dev/null
@@ -1,21 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.workbench.tree.examples;
-
-import java.io.*;
-
-public class SessionVisit implements Serializable
-{
-}
diff --git a/3.0.4/examples/Workbench/src/org/apache/tapestry/workbench/tree/examples/SimpleTree.java b/3.0.4/examples/Workbench/src/org/apache/tapestry/workbench/tree/examples/SimpleTree.java
deleted file mode 100644
index 4b1fee7..0000000
--- a/3.0.4/examples/Workbench/src/org/apache/tapestry/workbench/tree/examples/SimpleTree.java
+++ /dev/null
@@ -1,97 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.workbench.tree.examples;
-
-import java.util.Date;
-
-import org.apache.tapestry.contrib.tree.model.ITreeDataModel;
-import org.apache.tapestry.contrib.tree.model.ITreeModel;
-import org.apache.tapestry.contrib.tree.simple.SimpleTreeModel;
-import org.apache.tapestry.contrib.tree.simple.SimpleTreeDataModel;
-
-import org.apache.tapestry.IEngine;
-import org.apache.tapestry.html.BasePage;
-
-/**
- * Simple example page.
- *
- * @version $Revision$
- */
-public class SimpleTree extends BasePage {
-    private ITreeDataModel treeDataModel;
-    private ITreeModel treeModel;
-    private Object value;
-
-    public SimpleTree() {
-    }
-
-    public void attach(IEngine value) {
-        super.attach(value);
-    }
-
-    public void detach() {
-        super.detach();
-        treeDataModel = null;
-        value = null;
-    }
-
-    public void init() {
-        TestTreeNode objParent = new TestTreeNode("Parent");
-
-        TestTreeNode objChild1 = new TestTreeNode("Child1");
-        TestTreeNode objChild2 = new TestTreeNode("Child2");
-        TestTreeNode objChild3 = new TestTreeNode("Child3");
-
-        objParent.insert(objChild3);
-        objParent.insert(objChild2);
-        objParent.insert(objChild1);
-
-        TestTreeNode objChild31 = new TestTreeNode("Child31");
-        TestTreeNode objChild32 = new TestTreeNode("Child32");
-
-        objChild3.insert(objChild32);
-        objChild3.insert(objChild31);
-
-        treeDataModel = new SimpleTreeDataModel(objParent);
-        treeModel = new SimpleTreeModel(treeDataModel);
-    }
-
-    public Date getCurrentTime() {
-        return new Date();
-    }
-
-    public ITreeModel getTreeModel() {
-        if(treeModel == null) {
-            init();
-        }
-        return treeModel;
-    }
-
-    /**
-     * Returns the value.
-     * @return Object
-     */
-    public Object getValue() {
-        return value;
-    }
-
-    /**
-     * Sets the value.
-     * @param value The value to set
-     */
-    public void setValue(Object value) {
-        this.value = value;
-    }
-}
diff --git a/3.0.4/examples/Workbench/src/org/apache/tapestry/workbench/tree/examples/TestTreeNode.java b/3.0.4/examples/Workbench/src/org/apache/tapestry/workbench/tree/examples/TestTreeNode.java
deleted file mode 100644
index c53f704..0000000
--- a/3.0.4/examples/Workbench/src/org/apache/tapestry/workbench/tree/examples/TestTreeNode.java
+++ /dev/null
@@ -1,69 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.workbench.tree.examples;
-
-import org.apache.tapestry.contrib.tree.model.IMutableTreeNode;
-import org.apache.tapestry.contrib.tree.simple.TreeNode;
-
-/**
- * @author ceco
- */
-public class TestTreeNode extends TreeNode {
-
-    private String m_strValue;
-
-    /**
-     * Constructor for TestTreeNode.
-     */
-    public TestTreeNode(String strValue) {
-        this(null, strValue);
-    }
-
-    /**
-     * Constructor for TestTreeNode.
-     * @param parentNode
-     */
-    public TestTreeNode(IMutableTreeNode parentNode, String strValue) {
-        super(parentNode);
-        m_strValue = strValue;
-    }
-
-    public String toString(){
-        return m_strValue;
-    }
-
-    public int hashCode(){
-        return m_strValue.hashCode();
-    }
-
-    public boolean equals(Object objTarget){
-        if(objTarget == this)
-            return true;
-        if(! (objTarget instanceof TestTreeNode))
-            return false;
-
-        TestTreeNode objTargetNode = (TestTreeNode)objTarget;
-        return this.getValue().equals(objTargetNode.getValue());
-    }
-
-    /**
-     * Returns the value.
-     * @return String
-     */
-    public String getValue() {
-        return m_strValue;
-    }
-
-}
diff --git a/3.0.4/examples/Workbench/src/org/apache/tapestry/workbench/tree/examples/fsmodel/AssetsHolder.java b/3.0.4/examples/Workbench/src/org/apache/tapestry/workbench/tree/examples/fsmodel/AssetsHolder.java
deleted file mode 100644
index 1994c81..0000000
--- a/3.0.4/examples/Workbench/src/org/apache/tapestry/workbench/tree/examples/fsmodel/AssetsHolder.java
+++ /dev/null
@@ -1,65 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.workbench.tree.examples.fsmodel;
-
-import org.apache.tapestry.asset.PrivateAsset;
-import org.apache.tapestry.resource.ClasspathResourceLocation;
-import org.apache.tapestry.util.DefaultResourceResolver;
-
-/**
- * All right reserved.
- * Copyright (c) by Rushmore Digital Ltd.
- * Created on Oct 3, 2002
- *
- * @author ceco
- *
- */
-public class AssetsHolder {
-
-	private String m_strOpenAssetsURL;
-	private String m_strCloseAssetsURL;
-	private PrivateAsset m_objOpenAsset = null;
-	private PrivateAsset m_objCloseAsset = null;
-	/**
-	 * Constructor for AssetsHolder.
-	 */
-	public AssetsHolder(String strOpenAssetsURL, String strCloseAssetsURL) {
-		super();
-		m_strOpenAssetsURL = strOpenAssetsURL;
-		m_strCloseAssetsURL = strCloseAssetsURL;
-	}
-    public PrivateAsset getAssetForOpenNode(){
-        if(m_objOpenAsset == null){
-            //m_objOpenAsset = new PrivateAsset(m_strOpenAssetsURL);
-            m_objOpenAsset =
-                new PrivateAsset
-                (new ClasspathResourceLocation
-                 (new DefaultResourceResolver(), m_strOpenAssetsURL), null);
-        }
-        return m_objOpenAsset;
-	}
-	public PrivateAsset getAssetForCloseNode(){
-		if(m_objCloseAsset == null){
-                    //m_objCloseAsset = new PrivateAsset(m_strCloseAssetsURL);
-                    m_objCloseAsset =
-                        new PrivateAsset
-                        (new ClasspathResourceLocation
-                         (new DefaultResourceResolver(), m_strCloseAssetsURL),
-                         null);
-		}
-		return m_objCloseAsset;
-	}
-
-}
diff --git a/3.0.4/examples/Workbench/src/org/apache/tapestry/workbench/tree/examples/fsmodel/Drive.java b/3.0.4/examples/Workbench/src/org/apache/tapestry/workbench/tree/examples/fsmodel/Drive.java
deleted file mode 100644
index 0b07594..0000000
--- a/3.0.4/examples/Workbench/src/org/apache/tapestry/workbench/tree/examples/fsmodel/Drive.java
+++ /dev/null
@@ -1,48 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.workbench.tree.examples.fsmodel;
-
-import java.io.File;
-
-import org.apache.tapestry.contrib.tree.model.ITreeNode;
-
-public class Drive extends FolderObject {
-	private String m_strType;
-	private String m_strLabel;
-	private long m_lSize;
-
-	public Drive(ITreeNode objParent, File objFile) {
-		super(objParent, objFile, false);
-	}
-	public long getSize() {
-		return m_lSize;
-	}
-	public String getType() {
-		return m_strType;
-	}
-	public String getLabel() {
-		return m_strLabel;
-	}
-
-	public AssetsHolder getAssets() {
-		if (m_objAssetsHolder == null) {
-			m_objAssetsHolder =
-				new AssetsHolder(
-					"/org/apache/tapestry/workbench/tree/examples/fsmodel/harddrive.gif",
-					"/org/apache/tapestry/workbench/tree/examples/fsmodel/harddrive.gif");
-		}
-		return m_objAssetsHolder;
-	}
-}
diff --git a/3.0.4/examples/Workbench/src/org/apache/tapestry/workbench/tree/examples/fsmodel/FileObject.java b/3.0.4/examples/Workbench/src/org/apache/tapestry/workbench/tree/examples/fsmodel/FileObject.java
deleted file mode 100644
index a838651..0000000
--- a/3.0.4/examples/Workbench/src/org/apache/tapestry/workbench/tree/examples/fsmodel/FileObject.java
+++ /dev/null
@@ -1,85 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.workbench.tree.examples.fsmodel;
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.Collection;
-
-import org.apache.tapestry.contrib.tree.model.ITreeNode;
-
-public class FileObject extends SFObject {
-    private long m_lSize;
-
-    public FileObject(ITreeNode objParent, File objFile) {
-        super(objParent, objFile);
-        init();
-    }
-
-    protected void init() {
-        super.init();
-        m_lSize = m_objFile.length();
-    }
-
-    public long getSize() {
-        return m_lSize;
-    }
-
-    /**
-     * @see org.apache.tapestry.contrib.tree.model.ITreeNode#containsChild(ITreeNode)
-     */
-    public boolean containsChild(ITreeNode node) {
-        return false;
-    }
-
-    /**
-     * @see org.apache.tapestry.contrib.tree.model.ITreeNode#getAllowsChildren()
-     */
-    public boolean getAllowsChildren() {
-        return false;
-    }
-
-    /**
-     * @see org.apache.tapestry.contrib.tree.model.ITreeNode#getChildCount()
-     */
-    public int getChildCount() {
-        return 0;
-    }
-
-    /**
-     * @see org.apache.tapestry.contrib.tree.model.ITreeNode#getChildren()
-     */
-    public Collection getChildren() {
-        return new ArrayList();
-    }
-
-    /**
-     * @see org.apache.tapestry.contrib.tree.model.ITreeNode#isLeaf()
-     */
-    public boolean isLeaf() {
-        return true;
-    }
-
-    /**
-     * @see org.apache.tapestry.workbench.tree.examples.fsmodel.IFileSystemTreeNode#getAssets()
-     */
-    public AssetsHolder getAssets() {
-        if (m_objAssetsHolder == null) {
-            final String a = "/org/apache/tapestry/workbench/tree/examples/fsmodel/file.gif";
-            m_objAssetsHolder = new AssetsHolder(a, a);
-        }
-        return m_objAssetsHolder;
-    }
-}
diff --git a/3.0.4/examples/Workbench/src/org/apache/tapestry/workbench/tree/examples/fsmodel/FileSystem.java b/3.0.4/examples/Workbench/src/org/apache/tapestry/workbench/tree/examples/fsmodel/FileSystem.java
deleted file mode 100644
index 26809ce..0000000
--- a/3.0.4/examples/Workbench/src/org/apache/tapestry/workbench/tree/examples/fsmodel/FileSystem.java
+++ /dev/null
@@ -1,165 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.workbench.tree.examples.fsmodel;
-
-import java.io.File;
-import java.util.Collection;
-import java.util.Date;
-import java.util.Vector;
-
-import org.apache.tapestry.contrib.tree.model.ITreeNode;
-
-public class FileSystem implements IFileSystemTreeNode
-{
-
-  private transient AssetsHolder m_objAssetsHolder = null;
-    /** @associates <{Drive}>
-     * @supplierCardinality 0..*
-     * @link aggregation*/
-    
-  private Vector m_vDrives;
-
-  public FileSystem()
-  {
-    //initDrives();
-  }
-
-  private void initDrives()
-  {
-    m_vDrives = new Vector();
-    File[] arrFile = File.listRoots();
-
-    if (arrFile != null)
-      for(int i=0; i<arrFile.length; i++)
-      {
-        m_vDrives.addElement(new Drive(this, arrFile[i]));
-      }
-  }
-
-  public Vector getDrives()
-  {
-  	if(m_vDrives == null){
-  		initDrives();
-  	}
-    return m_vDrives;
-  }
-  public int getChildNumber(Object objChild)
-  {
-    for(int i=0;i<m_vDrives.size();i++)
-    {
-      Object objChildDrive = m_vDrives.elementAt(i);
-      if(objChildDrive.equals(objChild))
-      {
-        return i;
-      }
-    }
-    return -1;
-  }
-	/**
-	 * @see org.apache.tapestry.contrib.tree.model.ITreeNode#containsChild(ITreeNode)
-	 */
-	public boolean containsChild(ITreeNode node) {
-		return true;
-	}
-
-	/**
-	 * @see org.apache.tapestry.contrib.tree.model.ITreeNode#getAllowsChildren()
-	 */
-	public boolean getAllowsChildren() {
-		return true;
-	}
-
-	/**
-	 * @see org.apache.tapestry.contrib.tree.model.ITreeNode#getChildCount()
-	 */
-	public int getChildCount() {
-		return getDrives().size();
-	}
-
-	/**
-	 * @see org.apache.tapestry.contrib.tree.model.ITreeNode#getChildren()
-	 */
-	public Collection getChildren() {
-		return getDrives();
-	}
-
-	/**
-	 * @see org.apache.tapestry.contrib.tree.model.ITreeNode#getParent()
-	 */
-	public ITreeNode getParent() {
-		return null;
-	}
-
-	/**
-	 * @see org.apache.tapestry.contrib.tree.model.ITreeNode#isLeaf()
-	 */
-	public boolean isLeaf() {
-		return false;
-	}
-
-	/**
-	 * @see java.lang.Object#toString()
-	 */
-	public String toString() {
-		return getName();
-	}
-	public String getName(){
-		return "FileSystem";
-	}
-	
-	/**
-	 * @see java.lang.Object#equals(Object)
-	 */
-	public boolean equals(Object arg0) {
-		if(!(arg0 instanceof FileSystem))
-			return false;
-		FileSystem objFileSystem = (FileSystem)arg0;
-		if(getName().equals(objFileSystem.getName()))
-			return true;
-		return false;
-	}
-
-	/**
-	 * @see java.lang.Object#hashCode()
-	 */
-	public int hashCode() {
-		return getName().hashCode();
-	}
-
-	/**
-	 * @see org.apache.tapestry.workbench.tree.examples.fsmodel.IFileSystemTreeNode#getAbsolutePath()
-	 */
-	public String getAbsolutePath() {
-		return "";
-	}
-
-	/**
-	 * @see org.apache.tapestry.workbench.tree.examples.fsmodel.IFileSystemTreeNode#getAssets()
-	 */
-	public AssetsHolder getAssets() {
-		if(m_objAssetsHolder == null){
-			m_objAssetsHolder = new AssetsHolder("/org/apache/tapestry/workbench/tree/examples/fsmodel/computer.gif", "/org/apache/tapestry/workbench/tree/examples/fsmodel/computer.gif");
-		}
-		return m_objAssetsHolder;
-	}
-
-	/**
-	 * @see org.apache.tapestry.workbench.tree.examples.fsmodel.IFileSystemTreeNode#getObjectDate()
-	 */
-	public Date getDate() {
-		return null;
-	}
-
-}
diff --git a/3.0.4/examples/Workbench/src/org/apache/tapestry/workbench/tree/examples/fsmodel/FileSystemDataModel.java b/3.0.4/examples/Workbench/src/org/apache/tapestry/workbench/tree/examples/fsmodel/FileSystemDataModel.java
deleted file mode 100644
index 9149c72..0000000
--- a/3.0.4/examples/Workbench/src/org/apache/tapestry/workbench/tree/examples/fsmodel/FileSystemDataModel.java
+++ /dev/null
@@ -1,100 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.workbench.tree.examples.fsmodel;
-
-import java.io.Serializable;
-import java.util.Iterator;
-
-import org.apache.tapestry.contrib.tree.model.ITreeNode;
-import org.apache.tapestry.contrib.tree.simple.SimpleTreeDataModel;
-
-/**
- * @author ceco
- */
-public class FileSystemDataModel extends SimpleTreeDataModel
-    implements Serializable {
-    /**
-     * Constructor for FileSystemDataModel.
-     * @param objRootNode
-     */
-    public FileSystemDataModel(ITreeNode objRootNode) {
-        super(objRootNode);
-    }
-
-    /**
-     * @see org.apache.tapestry.contrib.tree.model.ITreeDataModel#getObject(Object)
-     */
-    public Object getObject(Object objUniqueKey) {
-        return findNode(objUniqueKey, (IFileSystemTreeNode)getRoot());
-    }
-
-    private IFileSystemTreeNode findNode(Object objUniqueKey,
-                                         IFileSystemTreeNode objParentNode) {
-        String strUniqueKey = (String) objUniqueKey;
-        String strParentUniqueKey = objParentNode.getAbsolutePath();
-
-        if (strUniqueKey.equals(strParentUniqueKey)) {
-            return objParentNode;
-        }
-
-        IFileSystemTreeNode obj = null;
-
-		if(strUniqueKey.startsWith(strParentUniqueKey))
-		{
-	        for (Iterator iter = objParentNode.getChildren().iterator(); iter.hasNext();) {
-	            IFileSystemTreeNode element = (IFileSystemTreeNode) iter.next();
-	            obj = findNode(objUniqueKey, element);
-	            if (obj != null) {
-	                break;
-	            }
-	        }
-		}
-
-        return obj;
-    }
-
-    /**
-     * @see org.apache.tapestry.contrib.tree.model.ITreeDataModel#getUniqueKey(Object, Object)
-     */
-    public Object getUniqueKey(Object objTarget, Object objParentUniqueKey) {
-        IFileSystemTreeNode objNode = (IFileSystemTreeNode) objTarget;
-        return objNode.getAbsolutePath();
-    }
-
-    /**
-     * @see org.apache.tapestry.contrib.tree.model.ITreeDataModel#isAncestorOf(Object, Object)
-     */
-    public boolean isAncestorOf(Object objChildUniqueKey,
-                                Object objParentUniqueKey) {
-        String strChildAbsolutePath = (String)objChildUniqueKey;
-        String strParentAbsolutePath = (String)objParentUniqueKey;
-
-        if("".equals(strParentAbsolutePath)) {
-            return true;
-        }
-
-        return strChildAbsolutePath.lastIndexOf(strParentAbsolutePath) > -1;
-    }
-
-    /**
-     * @see org.apache.tapestry.contrib.tree.model.ITreeDataModel#getParentUniqueKey(Object)
-     */
-    public Object getParentUniqueKey(Object objChildUniqueKey) {
-        IFileSystemTreeNode objNode =
-            (IFileSystemTreeNode) getObject(objChildUniqueKey);
-        return objNode.getParent();
-    }
-
-}
diff --git a/3.0.4/examples/Workbench/src/org/apache/tapestry/workbench/tree/examples/fsmodel/FileSystemStateManager.java b/3.0.4/examples/Workbench/src/org/apache/tapestry/workbench/tree/examples/fsmodel/FileSystemStateManager.java
deleted file mode 100644
index d52e13e..0000000
--- a/3.0.4/examples/Workbench/src/org/apache/tapestry/workbench/tree/examples/fsmodel/FileSystemStateManager.java
+++ /dev/null
@@ -1,69 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.workbench.tree.examples.fsmodel;
-
-import java.io.File;
-
-import org.apache.tapestry.contrib.tree.model.ITreeDataModel;
-import org.apache.tapestry.contrib.tree.model.ITreeModel;
-import org.apache.tapestry.contrib.tree.model.ITreeNode;
-import org.apache.tapestry.contrib.tree.model.ITreeSessionStateManager;
-import org.apache.tapestry.contrib.tree.model.ITreeStateModel;
-import org.apache.tapestry.contrib.tree.simple.SimpleTreeModel;
-
-/**
- * @author ceco
- */
-public class FileSystemStateManager implements ITreeSessionStateManager {
-    private String m_strRootDir;
-
-    /**
-     * Constructor for FileSystemStateManager.
-     */
-    public FileSystemStateManager(String strRootDir) {
-        super();
-        m_strRootDir = strRootDir;
-    }
-
-    /**
-     * @see org.apache.tapestry.contrib.tree.model.ITreeSessionStateManager#getSessionState(ITreeModel)
-     */
-    public Object getSessionState(ITreeModel objModel) {
-        return objModel.getTreeStateModel();
-    }
-
-    /**
-     * @see org.apache.tapestry.contrib.tree.model.ITreeSessionStateManager#getModel(Object)
-     */
-    public ITreeModel getModel(Object objSessionState) {
-        ITreeStateModel objStateModel = (ITreeStateModel) objSessionState;
-
-        ITreeNode objParent;
-
-        if (m_strRootDir == null || "".equals(m_strRootDir)) {
-            objParent = new FileSystem();
-        } else {
-            FolderObject objFolder = new FolderObject(null, new File(m_strRootDir), true);
-            objFolder.reload();
-            objParent = objFolder;
-        }
-
-        ITreeDataModel objDataModel = new FileSystemDataModel(objParent);
-        ITreeModel objModel = new SimpleTreeModel(objDataModel,
-                                                    objStateModel);
-
-        return objModel;
-    }
-}
diff --git a/3.0.4/examples/Workbench/src/org/apache/tapestry/workbench/tree/examples/fsmodel/FolderObject.java b/3.0.4/examples/Workbench/src/org/apache/tapestry/workbench/tree/examples/fsmodel/FolderObject.java
deleted file mode 100644
index 8ca2490..0000000
--- a/3.0.4/examples/Workbench/src/org/apache/tapestry/workbench/tree/examples/fsmodel/FolderObject.java
+++ /dev/null
@@ -1,144 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.workbench.tree.examples.fsmodel;
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Vector;
-
-import org.apache.tapestry.contrib.tree.model.ITreeNode;
-
-public class FolderObject extends SFObject{
-
-    /**
-     * @associates <{File}>
-     * @supplierCardinality 0..*
-     * @link aggregation
-     */
-    private Vector m_vFiles = null;
-
-    /**
-     * @associates <{FolderObject}>
-     * @supplierCardinality 0..*
-     * @link aggregation
-     */
-    private Vector m_vFolders = null;
-    private boolean m_bShared;
-
-    public FolderObject(ITreeNode objParent, File objFile, boolean bInvokeInit) {
-        super(objParent, objFile);
-        if(bInvokeInit)
-        	init();
-    }
-
-    public void reload() {
-        m_vFolders = new Vector();
-        m_vFiles = new Vector();
-
-        File[] arrFiles = getFile().listFiles();
-
-        if (arrFiles == null) {
-            return;
-        }
-
-        for (int i=0; i<arrFiles.length; i++) {
-            if (arrFiles[i].isDirectory()) {
-                m_vFolders.addElement(new FolderObject(this, arrFiles[i], true));
-            } else {
-                m_vFiles.addElement(new FileObject(this, arrFiles[i]));
-            }
-        }
-    }
-
-    public boolean isShared() {
-        return m_bShared;
-    }
-
-    public Vector getFolders() {
-        if (m_vFolders == null) {
-            reload();
-        }
-        return m_vFolders;
-    }
-
-    public Vector getFiles() {
-        if (m_vFiles == null) {
-            reload();
-        }
-        return m_vFiles;
-    }
-
-    public int getChildNumber(Object objChild) {
-        for(int i = 0; i < m_vFolders.size(); i++) {
-            Object objChildFolder = m_vFolders.elementAt(i);
-            if (objChildFolder.equals(objChild)) {
-                return i;
-            }
-        }
-        return -1;
-    }
-
-    /**
-     * @see org.apache.tapestry.contrib.tree.model.ITreeNode#containsChild(ITreeNode)
-     */
-    public boolean containsChild(ITreeNode node) {
-        return true;
-    }
-
-    /**
-     * @see org.apache.tapestry.contrib.tree.model.ITreeNode#getAllowsChildren()
-     */
-    public boolean getAllowsChildren() {
-        return true;
-    }
-
-    /**
-     * @see org.apache.tapestry.contrib.tree.model.ITreeNode#getChildCount()
-     */
-    public int getChildCount() {
-        return getFolders().size() + getFiles().size();
-    }
-
-    /**
-     * @see org.apache.tapestry.contrib.tree.model.ITreeNode#getChildren()
-     */
-    public Collection getChildren() {
-        ArrayList arrChildrens = new ArrayList();
-        arrChildrens.addAll(getFolders());
-        arrChildrens.addAll(getFiles());
-        return arrChildrens;
-    }
-
-    /**
-     * @see org.apache.tapestry.contrib.tree.model.ITreeNode#isLeaf()
-     */
-    public boolean isLeaf() {
-        return false;
-    }
-
-    private final static String openImage =
-        "/org/apache/tapestry/workbench/tree/examples/fsmodel/TreeOpen.gif";
-
-    private final static String closedImage =
-        "/org/apache/tapestry/workbench/tree/examples/fsmodel/TreeClosed.gif";
-
-    public AssetsHolder getAssets() {
-        if (m_objAssetsHolder == null) {
-            m_objAssetsHolder = new AssetsHolder(openImage, closedImage);
-        }
-        return m_objAssetsHolder;
-    }
-}
diff --git a/3.0.4/examples/Workbench/src/org/apache/tapestry/workbench/tree/examples/fsmodel/IFileSystemTreeNode.java b/3.0.4/examples/Workbench/src/org/apache/tapestry/workbench/tree/examples/fsmodel/IFileSystemTreeNode.java
deleted file mode 100644
index 195f69d..0000000
--- a/3.0.4/examples/Workbench/src/org/apache/tapestry/workbench/tree/examples/fsmodel/IFileSystemTreeNode.java
+++ /dev/null
@@ -1,28 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.workbench.tree.examples.fsmodel;
-
-import java.util.Date;
-
-import org.apache.tapestry.contrib.tree.model.ITreeNode;
-
-/**
- * @author ceco
- */
-public interface IFileSystemTreeNode extends ITreeNode {
-    String getAbsolutePath();
-    AssetsHolder getAssets();
-    Date getDate();
-}
diff --git a/3.0.4/examples/Workbench/src/org/apache/tapestry/workbench/tree/examples/fsmodel/NodeRenderFactory.java b/3.0.4/examples/Workbench/src/org/apache/tapestry/workbench/tree/examples/fsmodel/NodeRenderFactory.java
deleted file mode 100644
index a5e2076..0000000
--- a/3.0.4/examples/Workbench/src/org/apache/tapestry/workbench/tree/examples/fsmodel/NodeRenderFactory.java
+++ /dev/null
@@ -1,112 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.workbench.tree.examples.fsmodel;
-
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRender;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.asset.PrivateAsset;
-import org.apache.tapestry.contrib.tree.components.INodeRenderFactory;
-import org.apache.tapestry.contrib.tree.model.ITreeDataModel;
-import org.apache.tapestry.contrib.tree.model.ITreeModelSource;
-import org.apache.tapestry.contrib.tree.model.ITreeStateModel;
-
-/**
- * @author ceco
- */
-public class NodeRenderFactory implements INodeRenderFactory {
-
-    /**
-     * Constructor for NodeRenderFactory.
-     */
-    public NodeRenderFactory() {
-        super();
-    }
-
-    public IRender getRenderByID(Object objUniqueKey,
-								 ITreeModelSource objTreeModelSource,
-                                 IRequestCycle objCycle) {
-        Object objValue = objTreeModelSource.getTreeModel().getTreeDataModel().getObject(objUniqueKey);
-        return getRender(objValue, objTreeModelSource, objCycle);
-    }
-
-    public IRender getRender(Object objValue,
-							 ITreeModelSource objTreeModelSource,
-                             IRequestCycle objCycle) {
-        return new CFileSystemRender(objValue, objTreeModelSource);
-    }
-
-
-    public class CFileSystemRender implements IRender{
-        private Object m_objNode;
-        private ITreeModelSource m_objTreeModelSource;
-
-        public CFileSystemRender(Object objNode, ITreeModelSource objTreeModelSource) {
-            super();
-            m_objNode = objNode;
-			m_objTreeModelSource = objTreeModelSource;
-        }
-
-        public boolean isOpen() {
-            ITreeDataModel objDataModel =
-				m_objTreeModelSource.getTreeModel().getTreeDataModel();
-            ITreeStateModel objStateModel =
-				m_objTreeModelSource.getTreeModel().getTreeStateModel();
-            Object objUniqueKey = objDataModel.getUniqueKey(m_objNode, null);
-            return objStateModel.isUniqueKeyExpanded(objUniqueKey);
-        }
-
-        public boolean isSelected(){
-            ITreeDataModel objDataModel =
-				m_objTreeModelSource.getTreeModel().getTreeDataModel();
-            ITreeStateModel objStateModel =
-				m_objTreeModelSource.getTreeModel().getTreeStateModel();
-            Object objUniqueKey = objDataModel.getUniqueKey(m_objNode, null);
-            return objUniqueKey.equals(objStateModel.getSelectedNode());
-        }
-
-        public void render(IMarkupWriter objWriter, IRequestCycle objCycle) {
-            PrivateAsset objAsset = getAsset();
-            objWriter.begin("img");
-            objWriter.attribute("border", "0");
-            objWriter.attribute("src", objAsset.buildURL(objCycle));
-            objWriter.attribute("align", "bottom");
-            objWriter.end();
-            objWriter.print(" ");
-            objWriter.begin("span");
-            String strClassName = "fsNodeValue";
-            objWriter.attribute("class", strClassName);
-            objWriter.closeTag();
-            objWriter.print(getNode().toString().trim());
-            objWriter.end();
-        }
-
-        public IFileSystemTreeNode getNode(){
-            return (IFileSystemTreeNode) m_objNode;
-        }
-
-        private PrivateAsset getAsset(){
-            PrivateAsset objAsset;
-
-            if (!isOpen()) {
-                objAsset = getNode().getAssets().getAssetForCloseNode();
-            } else {
-                objAsset = getNode().getAssets().getAssetForOpenNode();
-            }
-
-            return objAsset;
-        }
-    }
-}
diff --git a/3.0.4/examples/Workbench/src/org/apache/tapestry/workbench/tree/examples/fsmodel/SFObject.java b/3.0.4/examples/Workbench/src/org/apache/tapestry/workbench/tree/examples/fsmodel/SFObject.java
deleted file mode 100644
index c8e6160..0000000
--- a/3.0.4/examples/Workbench/src/org/apache/tapestry/workbench/tree/examples/fsmodel/SFObject.java
+++ /dev/null
@@ -1,135 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.workbench.tree.examples.fsmodel;
-
-import java.io.File;
-import java.util.Collection;
-import java.util.Date;
-
-import org.apache.tapestry.contrib.tree.model.ITreeNode;
-
-public abstract class SFObject implements IFileSystemTreeNode{
-    protected File m_objFile;
-    protected ITreeNode m_objParent;
-    private Date m_objDate;
-    protected transient AssetsHolder m_objAssetsHolder = null;
-
-    public SFObject(ITreeNode objParent, File objFile) {
-        m_objParent = objParent;
-        m_objFile = objFile;
-//        init();
-    }
-
-    protected void init() {
-		if(m_objFile.isFile() || m_objFile.isDirectory())
-        	m_objDate = new Date(m_objFile.lastModified());
-    }
-
-    public String getName() {
-        if (m_objFile.getName().equals("")) {
-            return m_objFile.toString();
-        }
-        return m_objFile.getName();
-    }
-
-    public Date getDate() {
-        return m_objDate;
-    }
-
-    public Object getAttributes() {
-        return null;
-    }
-
-    protected File getFile() {
-        return m_objFile;
-    }
-
-    /**
-     * @see org.apache.tapestry.contrib.tree.model.ITreeNode#getParent()
-     */
-    public ITreeNode getParent() {
-        return m_objParent;
-    }
-
-    /**
-     * @see org.apache.tapestry.contrib.tree.model.ITreeNode#containsChild(ITreeNode)
-     */
-    public boolean containsChild(ITreeNode node) {
-        return false;
-    }
-
-    /**
-     * @see org.apache.tapestry.contrib.tree.model.ITreeNode#getAllowsChildren()
-     */
-    public boolean getAllowsChildren() {
-        return false;
-    }
-
-    /**
-     * @see org.apache.tapestry.contrib.tree.model.ITreeNode#getChildCount()
-     */
-    public int getChildCount() {
-        return 0;
-    }
-
-    /**
-     * @see org.apache.tapestry.contrib.tree.model.ITreeNode#getChildren()
-     */
-    public Collection getChildren() {
-        return null;
-    }
-
-    /**
-     * @see org.apache.tapestry.contrib.tree.model.ITreeNode#isLeaf()
-     */
-    public boolean isLeaf() {
-        return false;
-    }
-
-    /**
-     * @see java.lang.Object#equals(Object)
-     */
-    public boolean equals(Object arg0) {
-        if (!(arg0 instanceof SFObject)) {
-            return false;
-        }
-        SFObject objSF = (SFObject)arg0;
-        if (getFile().equals(objSF.getFile())) {
-            return true;
-        }
-        return false;
-    }
-
-    /**
-     * @see java.lang.Object#hashCode()
-     */
-    public int hashCode() {
-        return m_objFile.hashCode();
-    }
-
-    /**
-     * @see java.lang.Object#toString()
-     */
-    public String toString() {
-        return getName();
-    }
-
-    /**
-     * @see org.apache.tapestry.workbench.tree.examples.fsmodel.IFileSystemTreeNode#getAbsolutePath()
-     */
-    public String getAbsolutePath() {
-        return getFile().getAbsolutePath();
-    }
-}
diff --git a/3.0.4/examples/Workbench/src/org/apache/tapestry/workbench/tree/examples/fsmodel/TreeClosed.gif b/3.0.4/examples/Workbench/src/org/apache/tapestry/workbench/tree/examples/fsmodel/TreeClosed.gif
deleted file mode 100644
index 6d00bc2..0000000
--- a/3.0.4/examples/Workbench/src/org/apache/tapestry/workbench/tree/examples/fsmodel/TreeClosed.gif
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/Workbench/src/org/apache/tapestry/workbench/tree/examples/fsmodel/TreeOpen.gif b/3.0.4/examples/Workbench/src/org/apache/tapestry/workbench/tree/examples/fsmodel/TreeOpen.gif
deleted file mode 100644
index def2e5e..0000000
--- a/3.0.4/examples/Workbench/src/org/apache/tapestry/workbench/tree/examples/fsmodel/TreeOpen.gif
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/Workbench/src/org/apache/tapestry/workbench/tree/examples/fsmodel/computer.gif b/3.0.4/examples/Workbench/src/org/apache/tapestry/workbench/tree/examples/fsmodel/computer.gif
deleted file mode 100644
index 893f9d0..0000000
--- a/3.0.4/examples/Workbench/src/org/apache/tapestry/workbench/tree/examples/fsmodel/computer.gif
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/Workbench/src/org/apache/tapestry/workbench/tree/examples/fsmodel/file.gif b/3.0.4/examples/Workbench/src/org/apache/tapestry/workbench/tree/examples/fsmodel/file.gif
deleted file mode 100644
index f38828d..0000000
--- a/3.0.4/examples/Workbench/src/org/apache/tapestry/workbench/tree/examples/fsmodel/file.gif
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/Workbench/src/org/apache/tapestry/workbench/tree/examples/fsmodel/harddrive.gif b/3.0.4/examples/Workbench/src/org/apache/tapestry/workbench/tree/examples/fsmodel/harddrive.gif
deleted file mode 100644
index 2b988a6..0000000
--- a/3.0.4/examples/Workbench/src/org/apache/tapestry/workbench/tree/examples/fsmodel/harddrive.gif
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/Workbench/src/org/apache/tapestry/workbench/upload/Upload.java b/3.0.4/examples/Workbench/src/org/apache/tapestry/workbench/upload/Upload.java
deleted file mode 100644
index da54b0e..0000000
--- a/3.0.4/examples/Workbench/src/org/apache/tapestry/workbench/upload/Upload.java
+++ /dev/null
@@ -1,120 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.workbench.upload;
-
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.form.IFormComponent;
-import org.apache.tapestry.form.IPropertySelectionModel;
-import org.apache.tapestry.form.StringPropertySelectionModel;
-import org.apache.tapestry.html.BasePage;
-import org.apache.tapestry.request.IUploadFile;
-import org.apache.tapestry.valid.IValidationDelegate;
-import org.apache.tapestry.valid.ValidationConstraint;
-
-/**
- *  Contains a form, including an {@link org.apache.tapestry.form.Upload}
- *  component.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *
- **/
-
-public class Upload extends BasePage
-{
-    private static final String[] bytesPerLineOptions =
-        new String[] { "8", "16", "24", "32", "40", "48" };
-
-    private static final String DEFAULT_BPL = "16";
-
-    private String bytesPerLine = DEFAULT_BPL;
-    private boolean showAscii;
-    private IUploadFile file;
-    private IPropertySelectionModel bplModel;
-
-    public void detach()
-    {
-        bytesPerLine = DEFAULT_BPL;
-        showAscii = false;
-        file = null;
-
-        super.detach();
-    }
-
-    public void formSubmit(IRequestCycle cycle)
-    {
-        if (Tapestry.isBlank(file.getFileName()))
-        {
-            IValidationDelegate delegate = (IValidationDelegate) getBeans().getBean("delegate");
-
-            delegate.setFormComponent((IFormComponent) getComponent("inputFile"));
-            delegate.record("You must specify a file to upload.", ValidationConstraint.REQUIRED);
-            return;
-        }
-
-        UploadResults results = (UploadResults) cycle.getPage("UploadResults");
-
-        results.activate(file, showAscii, Integer.parseInt(bytesPerLine), cycle);
-    }
-
-    public String getBytesPerLine()
-    {
-        return bytesPerLine;
-    }
-
-    public void setBytesPerLine(String bytesPerLine)
-    {
-        this.bytesPerLine = bytesPerLine;
-
-        fireObservedChange("bytesPerLine", bytesPerLine);
-    }
-
-    public boolean getShowAscii()
-    {
-        return showAscii;
-    }
-
-    public void setShowAscii(boolean showAscii)
-    {
-        this.showAscii = showAscii;
-
-        fireObservedChange("showAscii", showAscii);
-    }
-
-    public IPropertySelectionModel getBytesPerLineModel()
-    {
-        if (bplModel == null)
-            bplModel = new StringPropertySelectionModel(bytesPerLineOptions);
-
-        return bplModel;
-    }
-
-    public IUploadFile getFile()
-    {
-        return file;
-    }
-
-    public void setFile(IUploadFile file)
-    {
-        this.file = file;
-    }
-
-    public void setMessage(String message)
-    {
-
-    }
-
-}
\ No newline at end of file
diff --git a/3.0.4/examples/Workbench/src/org/apache/tapestry/workbench/upload/UploadResults.java b/3.0.4/examples/Workbench/src/org/apache/tapestry/workbench/upload/UploadResults.java
deleted file mode 100644
index a111f99..0000000
--- a/3.0.4/examples/Workbench/src/org/apache/tapestry/workbench/upload/UploadResults.java
+++ /dev/null
@@ -1,160 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.workbench.upload;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.io.StringWriter;
-import java.io.Writer;
-
-import org.apache.tapestry.ApplicationRuntimeException;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.html.BasePage;
-import org.apache.tapestry.request.IUploadFile;
-import org.apache.tapestry.util.io.BinaryDumpOutputStream;
-
-/**
- *  Displays the uploaded file as a hexadecimal dump.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *
- **/
-
-public class UploadResults extends BasePage
-{
-    private IUploadFile file;
-    private String fileDump;
-
-    public void detach()
-    {
-        file = null;
-        fileDump = null;
-
-        super.detach();
-    }
-
-    public IUploadFile getFile()
-    {
-        return file;
-    }
-
-    public String getFileDump()
-    {
-        return fileDump;
-    }
-
-    public void activate(
-        IUploadFile file,
-        boolean showAscii,
-        int bytesPerLine,
-        IRequestCycle cycle)
-    {
-        this.file = file;
-
-        StringWriter writer = null;
-        BinaryDumpOutputStream out = null;
-        InputStream in = null;
-
-        try
-        {
-            in = file.getStream();
-
-            writer = new StringWriter();
-            out = new BinaryDumpOutputStream(writer);
-
-            out.setShowAscii(showAscii);
-            out.setBytesPerLine(bytesPerLine);
-
-            byte[] buffer = new byte[1000];
-
-            while (true)
-            {
-                int length = in.read(buffer);
-
-                if (length < 0)
-                    break;
-
-                out.write(buffer, 0, length);
-            }
-
-            in.close();
-            in = null;
-
-            out.close();
-            out = null;
-
-            fileDump = writer.getBuffer().toString();
-
-            writer.close();
-            writer = null;
-        }
-        catch (IOException ex)
-        {
-            throw new ApplicationRuntimeException("Unable to display file.", this, null, ex);
-        }
-        finally
-        {
-            close(in);
-            close(out);
-            close(writer);
-        }
-
-        cycle.activate(this);
-    }
-
-    private void close(InputStream stream)
-    {
-        if (stream != null)
-        {
-            try
-            {
-                stream.close();
-            }
-            catch (IOException ex)
-            {
-            }
-        }
-    }
-
-    private void close(OutputStream stream)
-    {
-        if (stream != null)
-        {
-            try
-            {
-                stream.close();
-            }
-            catch (IOException ex)
-            {
-            }
-        }
-    }
-
-    private void close(Writer writer)
-    {
-        if (writer != null)
-        {
-            try
-            {
-                writer.close();
-            }
-            catch (IOException ex)
-            {
-            }
-        }
-    }
-}
diff --git a/3.0.4/examples/build.xml b/3.0.4/examples/build.xml
deleted file mode 100644
index c024d54..0000000
--- a/3.0.4/examples/build.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-<?xml version="1.0"?>
-<!-- Interface between the top-level build file and any of the examples.  Simply re-executes 
-     its targets in each of its sub-projects. -->
-<project name="Tapestry Examples" default="install">
-	<target name="clean">
-		<ant dir="Workbench" target="clean"/>
-		<ant dir="VlibBeans" target="clean"/>
-		<ant dir="Vlib" target="clean"/>
-	</target>
-	<target name="install">
-		<ant dir="Workbench" target="install" inheritAll="false"/>
-		<ant dir="VlibBeans" target="install" inheritAll="false"/>
-		<ant dir="Vlib" target="install" inheritAll="false"/>
-		<ant dir="VlibEAR" target="install" inheritAll="false"/>
-	</target>
-</project>
diff --git a/3.0.4/examples/wap/.cvsignore b/3.0.4/examples/wap/.cvsignore
deleted file mode 100644
index d366d2e..0000000
--- a/3.0.4/examples/wap/.cvsignore
+++ /dev/null
@@ -1 +0,0 @@
-classes
\ No newline at end of file
diff --git a/3.0.4/examples/wap/build.xml b/3.0.4/examples/wap/build.xml
deleted file mode 100644
index b815ab5..0000000
--- a/3.0.4/examples/wap/build.xml
+++ /dev/null
@@ -1,88 +0,0 @@
-<?xml version="1.0"?>
-<!-- $Id$ -->
-<project name="Wap Demo" default="install">
-	<property name="root.dir" value="../.."/>
-	<property file="${root.dir}/config/Version.properties"/>
-	<property file="${root.dir}/config/build.properties"/>
-	<property file="${root.dir}/config/common.properties"/>
-	<path id="jetty.classpath">
-		<fileset dir="${jetty.dir}">
-			<include name="**/javax.*.jar"/>
-		</fileset>
-	</path>
-	<path id="compile.classpath">
-		<fileset dir="${root.lib.dir}">
-            <include name="*.jar"/>
-            <include name="${ext.dir}/*.jar"/>
-			<include name="${j2ee.dir}/*.jar"/>
-		</fileset>
-	</path>
-	<target name="init">
-		<mkdir dir="${classes.dir}"/>
-	</target>
-	<target name="clean">
-		<delete dir="${classes.dir}"/>
-	</target>
-	<target name="compile" depends="init"
-		description="Compile all classes in the tutorial.">
-		<javac srcdir="${src.dir}" destdir="${classes.dir}" debug="on"
-			target="1.1" source="1.3">
-			<classpath refid="compile.classpath"/>
-		</javac>
-	</target>
-	<target name="install" depends="compile"
-		description="Compile all classes and build the installed WAR.">
-		<mkdir dir="${examples.dir}"/>
-		<war warfile="${examples.dir}/${wap.war}"
-			webxml="context/WEB-INF/web.xml">
-			<fileset dir="context">
-				<exclude name="WEB-INF/web.xml"/>
-			</fileset>
-			<classes dir="${classes.dir}"/>
-			<classes dir="${src.dir}">
-				<exclude name="**/*.java"/>
-				<exclude name="**/package.html"/>
-			</classes>
-		</war>
-	</target>
-
-	<target name="run" description="Run the Wap Demo."
-		depends="compile">
-
-		<property environment="env"/>
-
-		<java classname="org.mortbay.jetty.Server" fork="true">
-			<classpath>
-				<!-- Favor files in src over copies in classes -->
-				<pathelement location="${src.dir}"/>
-				<pathelement location="${classes.dir}"/>
-				<path refid="compile.classpath"/>
-				<path refid="jetty.classpath"/>
-
-				<pathelement location="${env.JAVA_HOME}/lib/tools.jar"/>
-
-				<fileset dir="${jetty.dir}">
-					<include name="ext/*.jar"/>
-					<include name="lib/org.mortbay.jetty-jdk1.2.jar"/>
-				</fileset>
-
-				<fileset dir="${root.lib.dir}">
-					<include name="${runtime.dir}/*.jar"/>
-				</fileset>
-				<pathelement location="${root.dir}/config"/>
-			</classpath>
-			<arg value="jetty.xml"/>
-			<!-- Enable debugging on port 20150 -->
-			<jvmarg line="-showversion -Xdebug -Xnoagent"/>
-			<jvmarg
-				line="-Xrunjdwp:transport=dt_socket,suspend=n,server=y,address=20150"
-				/>
-			<sysproperty key="java.compiler" value="NONE"/>
-			<sysproperty key="org.apache.tapestry.disable-caching" value="true"/>
-			<sysproperty key="org.apache.tapestry.enable-reset-service" value="true"
-				/>
-			<sysproperty key="org.mortbay.util.FileResource.checkAliases"
-				value="false"/>
-		</java>
-	</target>
-</project>
\ No newline at end of file
diff --git a/3.0.4/examples/wap/context/WEB-INF/animate/Home.page b/3.0.4/examples/wap/context/WEB-INF/animate/Home.page
deleted file mode 100644
index 3e74e10..0000000
--- a/3.0.4/examples/wap/context/WEB-INF/animate/Home.page
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<page-specification class="org.apache.tapestry.wml.Deck">
-
-    <context-asset name="first" path="images/img1.wbmp"/>
-    <context-asset name="second" path="images/img2.wbmp"/>
-    <context-asset name="third" path="images/img3.wbmp"/>
-    <context-asset name="fourth" path="images/img4.wbmp"/>
-
-</page-specification>
diff --git a/3.0.4/examples/wap/context/WEB-INF/animate/animate.application b/3.0.4/examples/wap/context/WEB-INF/animate/animate.application
deleted file mode 100644
index dcff594..0000000
--- a/3.0.4/examples/wap/context/WEB-INF/animate/animate.application
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-    Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE application PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<application name="Animate Wap Example" engine-class="org.apache.tapestry.wml.WMLEngine">
-
-    <property name="org.apache.tapestry.template-extension" value="wml"/>
-
-    <library id="wml" specification-path="/org/apache/tapestry/wml/WML.library"/>
-
-</application>
diff --git a/3.0.4/examples/wap/context/WEB-INF/hello/Hello.page b/3.0.4/examples/wap/context/WEB-INF/hello/Hello.page
deleted file mode 100644
index 30e638e..0000000
--- a/3.0.4/examples/wap/context/WEB-INF/hello/Hello.page
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<page-specification class="org.apache.tapestry.wap.hello.Hello">
-    <property-specification name="username" type="java.lang.String" persistent="no" initial-value="null"/>
-</page-specification>
diff --git a/3.0.4/examples/wap/context/WEB-INF/hello/Home.page b/3.0.4/examples/wap/context/WEB-INF/hello/Home.page
deleted file mode 100644
index a9f700a..0000000
--- a/3.0.4/examples/wap/context/WEB-INF/hello/Home.page
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<page-specification class="org.apache.tapestry.wap.hello.Home">
-    <property-specification name="username" type="java.lang.String" persistent="yes" initial-value="null"/>
-</page-specification>
diff --git a/3.0.4/examples/wap/context/WEB-INF/hello/hello.application b/3.0.4/examples/wap/context/WEB-INF/hello/hello.application
deleted file mode 100644
index 95d5292..0000000
--- a/3.0.4/examples/wap/context/WEB-INF/hello/hello.application
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-    Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE application PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<application name="Hello World Wap Example" engine-class="org.apache.tapestry.wml.WMLEngine">
-
-    <property name="org.apache.tapestry.template-extension" value="wml"/>
-
-    <library id="wml" specification-path="/org/apache/tapestry/wml/WML.library"/>
-
-</application>
diff --git a/3.0.4/examples/wap/context/WEB-INF/quiz/Home.page b/3.0.4/examples/wap/context/WEB-INF/quiz/Home.page
deleted file mode 100644
index 5b9d658..0000000
--- a/3.0.4/examples/wap/context/WEB-INF/quiz/Home.page
+++ /dev/null
@@ -1,55 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE page-specification PUBLIC
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN"
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<page-specification class="org.apache.tapestry.wap.quiz.Home">
-
-    <component id="username" type="wml:Postfield">
-        <binding name="value" expression="username"/>
-        <binding name="name" expression="components.userInput.name"/>
-    </component>
-
-    <component id="level" type="wml:SelectionField">
-        <binding name="value" expression="level"/>
-        <binding name="model" expression="components.selectLevel.model"/>
-        <binding name="name" expression="components.selectLevel.name"/>
-    </component>
-
-    <component id="userInput" type="wml:Input">
-        <static-binding name="name">username</static-binding>
-        <binding name="value" expression="username"/>
-    </component>
-
-    <component id="selectLevel" type="wml:PropertySelection">
-        <static-binding name="name">level</static-binding>
-        <binding name="model" expression="@org.apache.tapestry.wap.quiz.Home@LEVEL_MODEL"/>
-    </component>
-
-    <component id="go" type="wml:Go">
-        <binding name="stateful" expression="false"/>
-        <binding name="listener" expression="listeners.start"/>
-    </component>
-
-    <context-asset name="logo" path="images/logo.wbmp"/>
-
-    <property-specification name="username" type="java.lang.String" persistent="yes"/>
-    <property-specification name="level" type="java.lang.String" persistent="yes" initial-value='"easy"'/>
-
-</page-specification>
diff --git a/3.0.4/examples/wap/context/WEB-INF/quiz/Quiz.page b/3.0.4/examples/wap/context/WEB-INF/quiz/Quiz.page
deleted file mode 100644
index 10beb47..0000000
--- a/3.0.4/examples/wap/context/WEB-INF/quiz/Quiz.page
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE page-specification PUBLIC
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN"
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<page-specification class="org.apache.tapestry.wap.quiz.Quiz">
-
-    <property-specification name="question" type="java.util.Map" persistent="yes" initial-value="null"/>
-
-    <property-specification name="choice" type="int" persistent="no"/>
-
-</page-specification>
diff --git a/3.0.4/examples/wap/context/WEB-INF/quiz/Scores.page b/3.0.4/examples/wap/context/WEB-INF/quiz/Scores.page
deleted file mode 100644
index dc156c7..0000000
--- a/3.0.4/examples/wap/context/WEB-INF/quiz/Scores.page
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE page-specification PUBLIC
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN"
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<page-specification class="org.apache.tapestry.wap.quiz.Scores">
-
-    <property-specification name="newHighscore" type="boolean" persistent="no" initial-value="false"/>
-    <property-specification name="highscores" type="java.util.List" persistent="no" initial-value="null"/>
-    <property-specification name="highscore" type="java.util.Map" persistent="no"/>
-
-</page-specification>
diff --git a/3.0.4/examples/wap/context/WEB-INF/quiz/easyquestions.txt b/3.0.4/examples/wap/context/WEB-INF/quiz/easyquestions.txt
deleted file mode 100644
index d4dde1e..0000000
--- a/3.0.4/examples/wap/context/WEB-INF/quiz/easyquestions.txt
+++ /dev/null
@@ -1,11 +0,0 @@
-Spiders can regrow missing legs.;1;true;false
-Elk can't swim.;2;true;false
-African elephants are bigger than Indian.;2;false;true
-Tigers are the biggest cat in the world.;1;true;false
-Where do penguins mainly live?;2;The Arctic;The Antarctic
-Baboons travel mostly alone.;2;true;false
-Moles live in trees.;2;true;false
-Bats use a kind of sonar to find food.;1;true;false
-Some snakes have ear lobes.;2;true;false
-A dolphin sleeps only with half a brain at a time.;1;true;false
-Stingray is a kind of bee.;2;true;false
diff --git a/3.0.4/examples/wap/context/WEB-INF/quiz/hardquestions.txt b/3.0.4/examples/wap/context/WEB-INF/quiz/hardquestions.txt
deleted file mode 100644
index 1bb971a..0000000
--- a/3.0.4/examples/wap/context/WEB-INF/quiz/hardquestions.txt
+++ /dev/null
@@ -1,11 +0,0 @@
-How many months does an elephant's pregnancy last?;3;9;13;22;25
-How many teeth can a shark grow in a lifetime?;4;24;240;2400;24000
-How many species of fish are there?;1;20000;50000;200000
-What was the biggest dinosaur?;3;Compsognathus;Mussaurus;Brachiosaurus
-What's a baby elephant called?;3;A cup;A fawn;A calf
-What is the Okapi's only natural enemy?;2;Lion;Leopard;Wolf
-Where does the platypus live?;2;Austria;Australia;Brazil
-What is a tuatara?;1;Reptile;Mammal;Bird;Fish
-In the wild, where do flamingos get their red colour?;2;Red algae;Blue-green algae;Waterlilies
-What's a baby beaver called?;1;A kit;A pup;A bijou
-
diff --git a/3.0.4/examples/wap/context/WEB-INF/quiz/mediumquestions.txt b/3.0.4/examples/wap/context/WEB-INF/quiz/mediumquestions.txt
deleted file mode 100644
index bfd7496..0000000
--- a/3.0.4/examples/wap/context/WEB-INF/quiz/mediumquestions.txt
+++ /dev/null
@@ -1,11 +0,0 @@
-Beaver's teeth grow continuously.;1;true;false
-How many Amur Tigers live in the wild?;2;100;200;1000
-How many polar bears are there worldwide?;3;1500;11000;28000
-What's a young lion called?;1;A cub;A calf;A fawn
-How many different breeds of dogs are there?;3;40;120;140
-Both male and female reindeer have antlers.;1;true;false
-Penguins fall over when they watch flying aeroplanes.;2;true;false
-What does a herbivore eat?;2;Meat;Plants;Fish
-Where do tigers live?;3;South America;Africa;Asia
-The noise a sea lion makes sounds like:;2;Lion's roar;Dog's bark;Cat's miaow
-
diff --git a/3.0.4/examples/wap/context/WEB-INF/quiz/quiz.application b/3.0.4/examples/wap/context/WEB-INF/quiz/quiz.application
deleted file mode 100644
index 95af796..0000000
--- a/3.0.4/examples/wap/context/WEB-INF/quiz/quiz.application
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-    Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE application PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<application name="Quiz Wap Example" engine-class="org.apache.tapestry.wml.WMLEngine">
-
-    <property name="org.apache.tapestry.template-extension" value="wml"/>
-
-    <property name="org.apache.tapestry.global-class" value="org.apache.tapestry.wap.quiz.Global"/>
-
-    <property name="org.apache.tapestry.visit-class" value="org.apache.tapestry.wap.quiz.Visit"/>
-
-    <library id="wml" specification-path="/org/apache/tapestry/wml/WML.library"/>
-
-</application>
diff --git a/3.0.4/examples/wap/context/WEB-INF/web.xml b/3.0.4/examples/wap/context/WEB-INF/web.xml
deleted file mode 100644
index 7f79b47..0000000
--- a/3.0.4/examples/wap/context/WEB-INF/web.xml
+++ /dev/null
@@ -1,69 +0,0 @@
-<?xml version="1.0"?>
-<!--$Id$ -->
-<!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>
-  
-	<display-name>Tapestry WAP Examples</display-name>
-	 
-	<servlet>
-		<servlet-name>hello</servlet-name>
-        <servlet-class>org.apache.tapestry.ApplicationServlet</servlet-class>
-	</servlet>
-
-     <servlet>
-        <servlet-name>animate</servlet-name>
-        <servlet-class>org.apache.tapestry.ApplicationServlet</servlet-class>
-    </servlet>
-
-     <servlet>
-        <servlet-name>quiz</servlet-name>
-        <servlet-class>org.apache.tapestry.ApplicationServlet</servlet-class>
-        <init-param>
-            <param-name>easyquestionsfile</param-name>
-            <param-value>easyquestions.txt</param-value>
-        </init-param>
-         <init-param>
-            <param-name>mediumquestiosfile</param-name>
-            <param-value>mediumquestions.txt</param-value>
-        </init-param>
-        <init-param>
-            <param-name>hardquestionsfile</param-name>
-            <param-value>hardquestions.txt</param-value>
-        </init-param>
-    </servlet>
-
-    <servlet-mapping>
-        <servlet-name>hello</servlet-name>
-        <url-pattern>/hello/app</url-pattern>
-   </servlet-mapping>
-
-    <servlet-mapping>
-        <servlet-name>animate</servlet-name>
-        <url-pattern>/animate/app</url-pattern>
-    </servlet-mapping>
-
-    <servlet-mapping>
-        <servlet-name>quiz</servlet-name>
-        <url-pattern>/quiz/app</url-pattern>
-    </servlet-mapping>
-
-    <mime-mapping>
-        <extension>wml</extension>
-        <mime-type>text/vnd.wap.wml</mime-type>
-    </mime-mapping>
-
-    <mime-mapping>
-        <extension>wmls</extension>
-        <mime-type>text/vnd.wap.wmlscript</mime-type>
-    </mime-mapping>
-
-    <mime-mapping>
-        <extension>wbmp</extension>
-        <mime-type>image/vnd.wap.wbmp</mime-type>
-    </mime-mapping>
-
-	<welcome-file-list>
-        <welcome-file>index.wml</welcome-file>
-	</welcome-file-list>
-</web-app>
diff --git a/3.0.4/examples/wap/context/animate/Home.wml b/3.0.4/examples/wap/context/animate/Home.wml
deleted file mode 100644
index 6f9de93..0000000
--- a/3.0.4/examples/wap/context/animate/Home.wml
+++ /dev/null
@@ -1,59 +0,0 @@
-<?xml version="1.0"?>
-<!-- $Id$ -->
-   <!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.2//EN"
-   "http://www.wapforum.org/DTD/wml12.dtd">
-<wml>
-
-    <template>
-        <do type="accept" label="Back">
-            <go href="../index.wml"></go>
-        </do>
-    </template>
-
-    <card id="img1" ontimer="#img2" title="">
-        <timer value="5"/>
-        <p align="center">
-            <img jwcid="@wml:Image" image="ognl:assets.first" alt="img1" align="middle"/>
-        </p>
-    </card>
-
-    <card id="img2" ontimer="#img3" title="">
-        <timer value="5"/>
-        <p align="center">
-            <br/>
-            <img jwcid="@wml:Image" image="ognl:assets.second" alt="img2" align="middle"/>
-        </p>
-    </card>
-
-    <card id="img3" ontimer="#img4" title="">
-        <timer value="5"/>
-
-        <p align="center">
-            <br/>
-            <img jwcid="@wml:Image" image="ognl:assets.third" alt="img3" align="middle"/>
-
-        </p>
-    </card>
-
-    <card id="img4" ontimer="#tapestry" title="">
-        <timer value="5"/>
-
-        <p align="center">
-            <br/>
-            <img jwcid="@wml:Image" image="ognl:assets.fourth" alt="img4" align="middle"/>
-
-
-        </p>
-    </card>
-
-    <card id="tapestry" ontimer="#img1" title="Tapestry Mobile">
-        <timer value="5"/>
-
-        <p align="center">
-            <br/>
-            Tapestry
-        </p>
-    </card>
-
-</wml>
-
diff --git a/3.0.4/examples/wap/context/animate/images/img1.wbmp b/3.0.4/examples/wap/context/animate/images/img1.wbmp
deleted file mode 100644
index a1f252a..0000000
--- a/3.0.4/examples/wap/context/animate/images/img1.wbmp
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/wap/context/animate/images/img2.wbmp b/3.0.4/examples/wap/context/animate/images/img2.wbmp
deleted file mode 100644
index 7f0b19f..0000000
--- a/3.0.4/examples/wap/context/animate/images/img2.wbmp
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/wap/context/animate/images/img3.wbmp b/3.0.4/examples/wap/context/animate/images/img3.wbmp
deleted file mode 100644
index ae1a608..0000000
--- a/3.0.4/examples/wap/context/animate/images/img3.wbmp
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/wap/context/animate/images/img4.wbmp b/3.0.4/examples/wap/context/animate/images/img4.wbmp
deleted file mode 100644
index 7f0b19f..0000000
--- a/3.0.4/examples/wap/context/animate/images/img4.wbmp
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/wap/context/hello/Hello.wml b/3.0.4/examples/wap/context/hello/Hello.wml
deleted file mode 100644
index b1dd8bc..0000000
--- a/3.0.4/examples/wap/context/hello/Hello.wml
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0"?>
-<!-- $Id$ -->
-   <!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.2//EN"
-   "http://www.wapforum.org/DTD/wml12.dtd">
-<wml>
-    <head>
-        <meta http-equiv="Cache-Control" content="must-revalidate" forua="true"/>
-        <meta http-equiv="Cache-Control" content="no-cache" forua="true"/>
-    </head>
-
-    <template>
-        <do type="accept" label="Index">
-            <go href="../index.wml" />
-        </do>
-    </template>
-
-	<card id="Welcome" title="Welcome">
-		<p>
-            Hello <b jwcid="@Insert" value="ognl:username">John Doe</b>
-	    </p>
-	</card>
-</wml>
\ No newline at end of file
diff --git a/3.0.4/examples/wap/context/hello/Home.wml b/3.0.4/examples/wap/context/hello/Home.wml
deleted file mode 100644
index 1a564d7..0000000
--- a/3.0.4/examples/wap/context/hello/Home.wml
+++ /dev/null
@@ -1,33 +0,0 @@
-<?xml version="1.0"?>
-<!-- $Id$ -->
-   <!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.2//EN"
-   "http://www.wapforum.org/DTD/wml12.dtd">
-<wml>
-    <head>
-        <meta http-equiv="Cache-Control" content="must-revalidate" forua="true"/>
-        <meta http-equiv="Cache-Control" content="no-cache" forua="true"/>
-    </head>
-
-    <template>
-        <do type="prev" label="Back">
-            <prev/>
-        </do>
-    </template>
-
-    <card id="Hello" title="Hello">
-        <onevent type="onenterforward">
-            <refresh>
-                <setvar jwcid="@wml:Setvar" name="username" value="ognl:username"/>
-            </refresh>
-        </onevent>
-        <p>
-            What is your name?
-            <input jwcid="userInput@wml:Input" name="username" value="ognl:username"/>
-        </p>
-        <do type="accept" label="Accept">
-            <go jwcid="go@wml:Go" stateful="ognl:false" listener="ognl:listeners.submit">
-                <postfield jwcid="username@wml:Postfield" name="ognl:components.userInput.name" value="ognl:username"/>
-            </go>
-        </do>
-    </card>
-</wml>
\ No newline at end of file
diff --git a/3.0.4/examples/wap/context/index.wml b/3.0.4/examples/wap/context/index.wml
deleted file mode 100644
index 0423d23..0000000
--- a/3.0.4/examples/wap/context/index.wml
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0"?>
-   <!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.2//EN"
-   "http://www.wapforum.org/DTD/wml12.dtd">
-<!-- $Id$ -->
-<wml>
-    <card id="main" title="Tapestry Wap Examples">
-        <p>
-            <b>
-                <a href="hello/app">Hello World</a>
-            </b>
-            <br/>
-            <b>
-                <a href="animate/app">Animate</a>
-            </b>
-            <br/>
-            <b>
-                <a href="quiz/app">Quiz</a>
-            </b>
-        </p>
-    </card>
-</wml>
diff --git a/3.0.4/examples/wap/context/quiz/Home.wml b/3.0.4/examples/wap/context/quiz/Home.wml
deleted file mode 100644
index 12af76e..0000000
--- a/3.0.4/examples/wap/context/quiz/Home.wml
+++ /dev/null
@@ -1,78 +0,0 @@
-<?xml version="1.0"?>
-<!-- $Id$ -->
-   <!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.2//EN"
-   "http://www.wapforum.org/DTD/wml12.dtd">
-
-<!-- Animal Quiz game home page. -->
-
-<wml>
-
-    <head>
-        <meta http-equiv="Cache-Control" content="must-revalidate" forua="true"/>
-        <meta http-equiv="Cache-Control" content="no-cache" forua="true"/>
-    </head>
-
-    <!-- Provides a way back using the prev element -->
-    <template>
-        <do type="prev">
-            <prev/>
-        </do>
-    </template>
-
-    <!-- First card shows the zoo logo -->
-    <card id="card0" title="Animal QUIZ" ontimer="#card1" newcontext="true">
-        <timer name="t" value="20"/>
-        <p align="center">
-            <br/>
-            <img jwcid="@wml:Image" image="ognl:assets.logo" alt="WMLZoo"/>
-            <br/>
-            <strong>Animal QUIZ</strong>
-            <br/>
-        </p>
-    </card>
-
-    <!-- Second card asks the user name and difficulty level. Start the game! -->
-    <card id="card1" title="Animal QUIZ" newcontext="true">
-        <p>Welcome!
-            <br/>
-            Your name:
-            <input jwcid="userInput" name="username" title="Your name" value=""/>
-        </p>
-        <p>
-            Difficulty:
-            <b jwcid="selectLevel"/>
-        </p>
-        <p>
-            <do type="help" label="Instructions">
-                <go href="#help"/>
-            </do>
-            <do type="options" label="Zoo home">
-                <go jwcid="@ServiceLink" service="ognl:@org.apache.tapestry.Tapestry@HOME_SERVICE" renderer="ognl:@org.apache.tapestry.wml.GoLinkRenderer@SHARED_INSTANCE" href=""/>
-            </do>
-        </p>
-        <p>
-           <anchor title="Start">Start
-                <go jwcid="go">
-                    <postfield jwcid="username" name="username" value="username"/>
-                    <postfield jwcid="level" name="level" value="level"/>
-                </go>
-            </anchor>
-            <br/>
-            <anchor title="Instructions">Instructions
-                <go href="#help"/>
-            </anchor>
-        </p>
-    </card>
-
-    <!-- Instructions -->
-
-    <card id="help" title="Instructions">
-        <p>The quiz will test your knowledge about the world of animals. There are
-            "easy", "medium" and "hard" questions. For each correct
-            answer to an easy question you receive one point, a medium question two points, and a hard
-            question three points. The questions will become more difficult as you go along.
-            You can also select the starting difficulty level.
-            After the first wrong answer the game will end. Good luck!</p>
-    </card>
-
-</wml>
diff --git a/3.0.4/examples/wap/context/quiz/Quiz.wml b/3.0.4/examples/wap/context/quiz/Quiz.wml
deleted file mode 100644
index 7d45af4..0000000
--- a/3.0.4/examples/wap/context/quiz/Quiz.wml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0"?>
-<!-- $Id$ -->
-   <!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.2//EN"
-   "http://www.wapforum.org/DTD/wml12.dtd">
-
-<wml>
-    <head>
-        <meta http-equiv="Cache-Control" content="must-revalidate" forua="true"/>
-        <meta http-equiv="Cache-Control" content="no-cache" forua="true"/>
-    </head>
-
-    <!-- This card displays a question and gives a list of alternative answers -->
-    <card id="main" jwcid="@wml:Card" title='ognl:(questionNumber + 1) + "/" + visit.numberOfQuestions + ", " + visit.level'>
-        <onevent type="onenterforward">
-            <refresh>
-                <setvar jwcid="@wml:Setvar" name="choice" value='ognl:"God".equals(visit.username) ? question.answer : 0'/>
-            </refresh>
-        </onevent>
-        <p> <p jwcid="@Insert" value="ognl:question.question"/>
-            <select jwcid="selection@wml:PropertySelection" name="choice" model="ognl:choiceModel"/>
-            <br/>
-            <anchor title="Ok">Ok
-                <go jwcid="go@wml:Go" listener="ognl:listeners.process" href="">
-                    <postfield jwcid="choice@wml:Postfield" name="ognl:components.selection.name" value="ognl:choice"/>
-                </go>
-            </anchor>
-            <br/>
-            Your points: <p jwcid="@Insert" value="ognl:visit.points"/>
-            <br/>
-            <do type="prev" label="Start again">
-                <go jwcid="@ServiceLink" service="ognl:@org.apache.tapestry.Tapestry@HOME_SERVICE" renderer="ognl:@org.apache.tapestry.wml.GoLinkRenderer@SHARED_INSTANCE" href=""/>
-            </do>
-        </p>
-    </card>
-</wml>
-
diff --git a/3.0.4/examples/wap/context/quiz/Scores.wml b/3.0.4/examples/wap/context/quiz/Scores.wml
deleted file mode 100644
index 721914a..0000000
--- a/3.0.4/examples/wap/context/quiz/Scores.wml
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0"?>
-<!-- $Id$ -->
-   <!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.2//EN"
-   "http://www.wapforum.org/DTD/wml12.dtd">
-
-<wml>
-    <head>
-        <meta http-equiv="Cache-Control" content="must-revalidate" forua="true"/>
-        <meta http-equiv="Cache-Control" content="no-cache" forua="true"/>
-    </head>
-
-	<!-- High scores are printed into a card -->
-	<card id="main" title="Scores">
-        <p>
-            Points: <p jwcid="@Insert" value="ognl:visit.points"/>
-            <p jwcid="@Conditional" condition="ognl:newHighscore">
-                <p jwcid="@Insert" value="New highscore!"/>
-            </p>
-            <br/>
-            Top <p jwcid="@Insert" value="ognl:highscores.size"/>:<br/>
-            <p jwcid="@Foreach" source="ognl:highscores" value="ognl:highscore">
-                <p jwcid="@Insert" value='ognl:highscore.name + "->" + highscore.score'/><br/>
-            </p>
-        </p>
-        <do type="prev" label="Start again">
-            <go jwcid="@ServiceLink" service="ognl:@org.apache.tapestry.Tapestry@HOME_SERVICE" renderer="ognl:@org.apache.tapestry.wml.GoLinkRenderer@SHARED_INSTANCE" href=""/>
-        </do>
-	</card>
-
-</wml>
-
diff --git a/3.0.4/examples/wap/context/quiz/images/logo.wbmp b/3.0.4/examples/wap/context/quiz/images/logo.wbmp
deleted file mode 100644
index bde9575..0000000
--- a/3.0.4/examples/wap/context/quiz/images/logo.wbmp
+++ /dev/null
Binary files differ
diff --git a/3.0.4/examples/wap/jetty.xml b/3.0.4/examples/wap/jetty.xml
deleted file mode 100644
index 61dea3e..0000000
--- a/3.0.4/examples/wap/jetty.xml
+++ /dev/null
@@ -1,42 +0,0 @@
-<?xml version="1.0"  encoding="ISO-8859-1"?> 
-<!-- $Id$ -->
-<!DOCTYPE Configure PUBLIC
-	"-//Mort Bay Consulting//DTD Configure 1.2//EN"
-	"http://jetty.mortbay.org/configure_1_2.dtd">
-
-<Configure class="org.mortbay.jetty.Server">
-
-  <Call name="addListener">
-    <Arg>
-      <New class="org.mortbay.http.SocketListener">
-        <Set name="Port">8080</Set>
-        <Set name="MinThreads">1</Set>
-        <Set name="MaxThreads">10</Set>
-        <Set name="MaxIdleTimeMs">50000</Set>
-      </New>
-    </Arg>
-  </Call>
-
-  
-  <Call name="addWebApplication">
-    <Arg>/wap</Arg>
-    <Arg>context</Arg>
-    <Set name="DefaultsDescriptor">../../config/webdefault.xml</Set>
-  </Call>
-  
-  <Call name="addContext">
-    <Arg>/</Arg>   
-    <Set name="realmName">Jetty Demo Realm</Set>
-   
-    <Call name="addServlet">
-      <Arg>Admin</Arg>
-      <Arg>/</Arg>
-      <Arg>org.mortbay.servlet.AdminServlet</Arg>
-    </Call>
-    
-    <Call name="setAttribute">
-      <Arg>org.mortbay.http.HttpServer</Arg>
-      <Arg><Call name="getHttpServer"/></Arg>
-    </Call>
-  </Call>    
-</Configure>
diff --git a/3.0.4/examples/wap/src/org/apache/tapestry/wap/hello/Hello.java b/3.0.4/examples/wap/src/org/apache/tapestry/wap/hello/Hello.java
deleted file mode 100644
index 3ece2d2..0000000
--- a/3.0.4/examples/wap/src/org/apache/tapestry/wap/hello/Hello.java
+++ /dev/null
@@ -1,30 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.wap.hello;
-
-import org.apache.tapestry.wml.Deck;
-
-/**
- *  @version $Id$
- *  @author David Solis
- *
- **/
-
-public abstract class Hello extends Deck
-{
-    public abstract String getUsername();
-    public abstract void setUsername(String username);
-
-}
diff --git a/3.0.4/examples/wap/src/org/apache/tapestry/wap/hello/Home.java b/3.0.4/examples/wap/src/org/apache/tapestry/wap/hello/Home.java
deleted file mode 100644
index 9cb91e7..0000000
--- a/3.0.4/examples/wap/src/org/apache/tapestry/wap/hello/Home.java
+++ /dev/null
@@ -1,37 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.wap.hello;
-
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.wml.Deck;
-
-/**
- *  @version $Id$
- *  @author David Solis
- *
- **/
-
-public abstract class Home extends Deck {
-		
-	public void submit(IRequestCycle cycle)
-	{
-        Hello helloDeck = (Hello) cycle.getPage("Hello");
-        helloDeck.setUsername(getUsername());
-		cycle.activate(helloDeck);
-	}
-	
-	public abstract String getUsername();
-	public abstract void setUsername(String username);
-}
diff --git a/3.0.4/examples/wap/src/org/apache/tapestry/wap/quiz/Global.java b/3.0.4/examples/wap/src/org/apache/tapestry/wap/quiz/Global.java
deleted file mode 100644
index b13e696..0000000
--- a/3.0.4/examples/wap/src/org/apache/tapestry/wap/quiz/Global.java
+++ /dev/null
@@ -1,260 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.wap.quiz;
-
-import org.apache.tapestry.ApplicationServlet;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.IResourceLocation;
-import org.apache.tapestry.engine.IPropertySource;
-import org.apache.tapestry.request.RequestContext;
-import org.apache.tapestry.resource.ContextResourceLocation;
-import org.apache.tapestry.util.StringSplitter;
-
-import javax.servlet.ServletContext;
-import java.io.BufferedReader;
-import java.io.FileReader;
-import java.io.IOException;
-import java.io.Serializable;
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-/**
- *  Global object for the Quiz application.
- *  This class has the following responsabilities:
- *  <ul>
- *  <li>Read questions from the specified files</li>
- *  <li>Provide questions by index</li>
- *  <li>Keep high scores in memory</li>
- *  </ul>
- *
- *  @version $Id$
- *  @author David Solis
- *
- **/
-
-public class Global implements Serializable
-{
-    private boolean init = false;
-
-    private int points[];
-    private String names[];
-
-    private static final List easyQuestions = new ArrayList();
-    private static final List mediumQuestions = new ArrayList();
-    private static final List hardQuestions = new ArrayList();
-
-    public static final int EASY_QUESTIONS = 1;
-    public static final int MEDIUM_QUESTIONS = 2;
-    public static final int HARD_QUESTIONS = 3;
-
-    public static final String EASY_LEVEL = "easy";
-    public static final String MEDIUM_LEVEL = "medium";
-    public static final String HARD_LEVEL = "hard";
-
-    public static final String QUESTION_KEY = "question";
-    public static final String ANSWER_KEY = "answer";
-    public static final String CHOICES_KEY = "choices";
-
-    public List getHighscores()
-    {
-        List result = new ArrayList();
-        for (int i = 0; i < 9; i++)
-        {
-            String name = names[i];
-            if (!"nobody".equals(name))
-            {
-                Map map = new HashMap();
-                map.put("name", name);
-                map.put("score", new Integer(points[i]));
-                result.add(map);
-            }
-        }
-        return result;
-    }
-
-    /**
-     *  Checks if score is high scores
-     **/
-    public boolean isHighscore(int score)
-    {
-        return (score >= points[9]);
-    }
-
-    /**
-     *  Checks if score is a new high score
-     **/
-    public boolean isNewHighscore(int score)
-    {
-        return (score > points[9]);
-    }
-
-    /**
-     *  Adds score/name to the highscore table,
-     *  returns position in highscore table or -1 if no highscore
-     **/
-    public int addHighscore(int score, String name)
-    {
-        int i = -1;
-        if (isNewHighscore(score))
-        {
-            for (i = 0; i <= 9; i++)
-            {
-                if (score > points[i])
-                    break;
-            }
-            for (int j = 9; j >= i + 1; j--)
-            {
-                points[j] = points[j - 1];
-                names[j] = names[j - 1];
-            }
-            points[i] = score;
-            names[i] = name;
-        }
-        return i;
-    }
-
-    /**
-     * "getQuestionSet" method returns a number representing the right difficulty setting.
-     *
-     * @param level an <code>String</code> value
-     * @return an <code>int</code> value
-     */
-    public int getQuestionSet(String level)
-    {
-        if (HARD_LEVEL.equals(level))
-            return HARD_QUESTIONS;
-        if (MEDIUM_LEVEL.equals(level))
-            return MEDIUM_QUESTIONS;
-        return EASY_QUESTIONS;
-    }
-
-    /**
-     * "getQuestion" method returns a String that contains the question, the alternatives and the correct answer.
-     *
-     * @param questionToBeAsked an <code>int</code> value
-     * @param questionSet an <code>int</code> value
-     * @return a <code>String</code> value
-     */
-    public Map getQuestion(int questionToBeAsked, int questionSet)
-    {
-        String line;
-        List list;
-
-        switch (questionSet)
-        {
-            case EASY_QUESTIONS:
-                list = easyQuestions;
-                break;
-            case MEDIUM_QUESTIONS:
-                list = mediumQuestions;
-                break;
-            default:
-                list = hardQuestions;
-                break;
-        }
-        line = (String) list.get(questionToBeAsked);
-        StringSplitter splitter = new StringSplitter(';');
-        String[] result = splitter.splitToArray(line);
-        HashMap map = new HashMap();
-        map.put(QUESTION_KEY, result[0]);
-        int answer = Integer.parseInt(result[1]) - 1;
-        map.put(ANSWER_KEY, new Integer(answer));
-        int length = result.length - 2;
-        String[] choices = new String[length];
-        System.arraycopy(result, 2, choices, 0, length);
-        map.put(CHOICES_KEY, choices);
-        return map;
-    }
-
-    /**
-     * "getNumberOfQuestions" method returns the number of questions (Strings) in the questions table that is used.
-     *
-     * @param questionSet an <code>int</code> value
-     * @return an <code>int</code> value
-     */
-    public int getNumberOfQuestions(int questionSet)
-    {
-        switch (questionSet)
-        {
-            case EASY_QUESTIONS:
-                return easyQuestions.size();
-            case MEDIUM_QUESTIONS:
-                return mediumQuestions.size();
-            default:
-                return hardQuestions.size();
-        }
-    }
-
-    public void initialize(IRequestCycle cycle)
-    {
-        if (!init)
-        {
-            RequestContext requestContext = cycle.getRequestContext();
-            ApplicationServlet servlet = requestContext.getServlet();
-            ServletContext context = servlet.getServletContext();
-            IPropertySource propertySource = cycle.getEngine().getPropertySource();
-            IResourceLocation webInfLocation = new ContextResourceLocation(context, "/WEB-INF/");
-            IResourceLocation webInfAppLocation = webInfLocation.getRelativeLocation(servlet.getServletName() + "/");
-            readQuestions(easyQuestions, webInfAppLocation, propertySource.getPropertyValue("easyquestionsfile"));
-            readQuestions(mediumQuestions, webInfAppLocation, propertySource.getPropertyValue("mediumquestiosfile"));
-            readQuestions(hardQuestions, webInfAppLocation, propertySource.getPropertyValue("hardquestionsfile"));
-            points = new int[10];
-            names = new String[10];
-            for (int i = 0; i <= 9; i++)
-            {
-                points[i] = 0;
-                names[i] = "nobody";
-            }
-            init = true;
-        }
-    }
-
-    /**
-     * This method reads the questions from the appropriate file to the appropriate Vector.
-     *
-     * @param questions a <code>Vector</code> value
-     * @param questionsFile a <code>String</code> value
-     * @exception java.io.IOException if an error occurs
-     */
-    private void readQuestions(List questions, String questionsFile) throws IOException
-    {
-        BufferedReader reader = null;
-        String line;
-        reader = new BufferedReader(new FileReader(questionsFile));
-        while ((line = reader.readLine()) != null)
-        {
-            if (line.trim().equals("")) break;
-            questions.add(line);
-        }
-    }
-
-    private void readQuestions(List questions, IResourceLocation location, String filename)
-    {
-        IResourceLocation result = location.getRelativeLocation(filename);
-        URL url = result.getResourceURL();
-        try
-        {
-            readQuestions(questions, url.getFile());
-        }
-        catch (IOException e)
-        {
-            e.printStackTrace(System.err);
-        }
-    }
-
-}
diff --git a/3.0.4/examples/wap/src/org/apache/tapestry/wap/quiz/Home.java b/3.0.4/examples/wap/src/org/apache/tapestry/wap/quiz/Home.java
deleted file mode 100644
index 5daf5f4..0000000
--- a/3.0.4/examples/wap/src/org/apache/tapestry/wap/quiz/Home.java
+++ /dev/null
@@ -1,62 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.wap.quiz;
-
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.form.IPropertySelectionModel;
-import org.apache.tapestry.form.StringPropertySelectionModel;
-import org.apache.tapestry.wml.Deck;
-
-/**
- *  Home deck for the Quiz application.
- *
- *  Quiz application is a game that is run on a server that people can connect to using a WAP phone.
- *  The game is highly customizable. You can add your own questions to simple text files without
- *  any knowledge of programming.
- *
- *  @version $Id$
- *  @author David Solis
- *
- **/
-
-public abstract class Home extends Deck
-{
-
-	public static final IPropertySelectionModel LEVEL_MODEL = new StringPropertySelectionModel
-            (new String[] { Global.EASY_LEVEL, Global.MEDIUM_LEVEL, Global.HARD_LEVEL });
-	
-	public void start(IRequestCycle cycle)
-	{
-        Global global = (Global) getGlobal();
-        global.initialize(cycle);
-        Visit visit = (Visit) getVisit();
-        String level = getLevel();
-        int questionSet = global.getQuestionSet(level);
-        String username = getUsername();
-        if (username == null || "".equals(username))
-            username = "newcomer";
-        visit.initialize(username, level, questionSet, global.getNumberOfQuestions(questionSet));
-        Quiz quizDeck = (Quiz) cycle.getPage("Quiz");
-        quizDeck.setQuestionNumber(0);
-        quizDeck.fetch();
-        cycle.activate(quizDeck);
-	}
-	
-	public abstract String getUsername();
-	public abstract void setUsername(String username);
-	
-	public abstract String getLevel();
-	public abstract void setLevel(String level);
-}
diff --git a/3.0.4/examples/wap/src/org/apache/tapestry/wap/quiz/Quiz.java b/3.0.4/examples/wap/src/org/apache/tapestry/wap/quiz/Quiz.java
deleted file mode 100644
index f3d5aa0..0000000
--- a/3.0.4/examples/wap/src/org/apache/tapestry/wap/quiz/Quiz.java
+++ /dev/null
@@ -1,98 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.wap.quiz;
-
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.form.IPropertySelectionModel;
-import org.apache.tapestry.form.StringPropertySelectionModel;
-import org.apache.tapestry.wml.Deck;
-
-import java.util.Map;
-
-/**
- *  Quiz deck for the Quiz application.
- *
- *  @version $Id$
- *  @author David Solis
- *
- **/
-
-public abstract class Quiz extends Deck
-{
-    int questionNumber;
-
-    public void fetch()
-    {
-        Visit visit = (Visit) getVisit();
-        Global global = (Global) getGlobal();
-        Map question = global.getQuestion(getQuestionNumber(), visit.getQuestionSet());
-        setQuestion(question);
-    }
-
-    public IPropertySelectionModel getChoiceModel()
-    {
-        return new StringPropertySelectionModel((String[])getQuestion().get(Global.CHOICES_KEY));
-    }
-
-    public void process(IRequestCycle cycle)
-    {
-        Visit visit = (Visit) getVisit();
-        int rightAnswer = ((Integer)getQuestion().get(Global.ANSWER_KEY)).intValue();
-        if (getChoice() == rightAnswer)
-        {
-            int points = visit.getPoints();
-            points += visit.getQuestionSet();
-            visit.setPoints(points);
-        }
-        int questionNumber = getQuestionNumber() + 1;
-        if (questionNumber < visit.getNumberOfQuestions())
-        {
-            setQuestionNumber(questionNumber);
-            fetch();
-        }
-        else
-        {
-            Scores scoresDeck = (Scores)cycle.getPage("Scores");
-            Global global = (Global) getGlobal();
-            boolean isNewHighscore = global.addHighscore(visit.getPoints(), visit.getUsername()) != -1;
-            scoresDeck.setNewHighscore(isNewHighscore);
-            scoresDeck.setHighscores(global.getHighscores());
-            cycle.activate(scoresDeck);
-        }
-    }
-
-    protected void initialize()
-    {
-        questionNumber = 0;
-    }
-
-    public int getQuestionNumber()
-    {
-        return questionNumber;
-    }
-
-    public void setQuestionNumber(int questionNumber)
-    {
-        this.questionNumber = questionNumber;
-        fireObservedChange("questionNumber", questionNumber);
-    }
-
-    public abstract Map getQuestion();
-    public abstract void setQuestion(Map question);
-
-    public abstract int getChoice();
-
-
-}
diff --git a/3.0.4/examples/wap/src/org/apache/tapestry/wap/quiz/Scores.java b/3.0.4/examples/wap/src/org/apache/tapestry/wap/quiz/Scores.java
deleted file mode 100644
index 05c90fc..0000000
--- a/3.0.4/examples/wap/src/org/apache/tapestry/wap/quiz/Scores.java
+++ /dev/null
@@ -1,37 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.wap.quiz;
-
-import org.apache.tapestry.wml.Deck;
-
-import java.util.List;
-
-/**
- *  Scores deck for the Quiz application.
- *
- *  @version $Id$
- *  @author David Solis
- *
- **/
-
-public abstract class Scores extends Deck
-{
-
-    public abstract List getHighscores();
-    public abstract void setHighscores(List value);
-
-    public abstract boolean isNewHighscore();
-    public abstract void setNewHighscore(boolean value);
-}
diff --git a/3.0.4/examples/wap/src/org/apache/tapestry/wap/quiz/Visit.java b/3.0.4/examples/wap/src/org/apache/tapestry/wap/quiz/Visit.java
deleted file mode 100644
index 415c9ae..0000000
--- a/3.0.4/examples/wap/src/org/apache/tapestry/wap/quiz/Visit.java
+++ /dev/null
@@ -1,99 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.wap.quiz;
-
-import java.io.Serializable;
-
-/**
- *  Visit object for the Quiz application.
- *
- *  @version $Id$
- *  @author David Solis
- *
- **/
-
-public class Visit implements Serializable
-{
-    private String username;
-    private String level;
-    private int points;
-    private int questionSet;
-    private int numberOfQuestions;
-
-    public void initialize(String username, String level, int questionSet, int numberOfQuestions)
-    {
-        this.username = username;
-        this.level = level;
-        this.questionSet = questionSet;
-        this.numberOfQuestions = numberOfQuestions;
-        points = 0;
-    }
-
-    public int getNumberOfQuestions()
-    {
-        return numberOfQuestions;
-    }
-
-    public void setNumberOfQuestions(int numberOfQuestions)
-    {
-        this.numberOfQuestions = numberOfQuestions;
-    }
-
-    public int getQuestionSet()
-    {
-        return questionSet;
-    }
-
-    public void setQuestionSet(int questionSet)
-    {
-        this.questionSet = questionSet;
-    }
-
-    public void incPoints()
-    {
-        points++;
-    }
-
-    public int getPoints()
-    {
-        return points;
-    }
-
-    public void setPoints(int points)
-    {
-        this.points = points;
-    }
-
-    public String getLevel()
-    {
-        return level;
-    }
-
-    public void setLevel(String level)
-    {
-        this.level = level;
-    }
-
-	public String getUsername()
-    {
-		return username;
-	}
-
-	public void setUsername(String user)
-    {
-		this.username = user;
-	}
-
-}
diff --git a/3.0.4/ext-dist/.cvsignore b/3.0.4/ext-dist/.cvsignore
deleted file mode 100644
index 8193e2a..0000000
--- a/3.0.4/ext-dist/.cvsignore
+++ /dev/null
@@ -1,4 +0,0 @@
-*.jar
-*.zip
-*.tar.gz
-downloads
diff --git a/3.0.4/ext-dist/README.html b/3.0.4/ext-dist/README.html
deleted file mode 100644
index 57e5dc8..0000000
--- a/3.0.4/ext-dist/README.html
+++ /dev/null
@@ -1,38 +0,0 @@
-<html>
-<!-- $Id$ -->
-<head>
-<title>README - External Distributions</title>
-</head>
-<body>
-
-<h1>External Distributions</h1>
-
-<p>
-This directory contains external distributions that can no longer be included with Tapestry due to
-licensing conflicts.  It starts empty, and the necessary files are downloaded automatically by the Ant
-build scripts.
-</p>
-
-<p>
-You will need to update <code>config/build.properties</code> to tell Ant where
-to put temporary files.  The <b>base.path</b> entry should be the absolute path name. The directory will be created automatically.
-</p>
-
-<p>
-If you are operating behind a firewall, you will need to set three additional properties:
-<ul>
-<li><b>proxy.use</b> should be set to 'on'
-<li><b>proxy.host</b> should be set the name of your local download proxy
-<li><b>proxy.port</b> should be set to the port for your local download proxy
-</ul>
-</p>
-
-<p>
-Also, don't forget to update <code>config/build.properties</code> to point at
-your Jetty or Tomcat installation (to run the <a href="http://localhost:8080/workbench/app">Workbench</a>),
-or at your JBoss installation (to run the <a href="http://localhost/vlib/app">Virtual Library</a>).
-</p>
-
-
-</body>
-</html>
\ No newline at end of file
diff --git a/3.0.4/forrest-targets.ent b/3.0.4/forrest-targets.ent
deleted file mode 100644
index 994c0b7..0000000
--- a/3.0.4/forrest-targets.ent
+++ /dev/null
@@ -1,174 +0,0 @@
-<!--
-This build.xml snippet contains Forrest targets for Ant 1.5+.  It checks that
-the user has set ${forrest.home}, either in one of:
-  build.properties
-  project.properties
-  ant.properties
-  .ant.properties
-or with the FORREST_HOME environment variable, and prints an informative error
-message if not found.
-
-Usage:
-1) Copy this file to somewhere in your project.
-2) Add the following to the top of your project's Ant build.xml script
-(adjusting the path):
-
-  <!DOCTYPE project [
-    <!ENTITY forrest-targets SYSTEM "file:./forrest-targets.ent">
-  ]>
-
-3) Before the closing '</project>' in your build.xml, add this:
-
-  &forrest-targets;
-  
-This is like expanding a macro: it pulls in the contents of this file.
-
-A minimal build.xml would thus be:
-
-<!DOCTYPE project [
-<!ENTITY forrest-targets SYSTEM "file:./forrest-targets.ent">
-]>
-
-<project default="site">
-    &forrest-targets;
-</project>
--->
-
-  <target name="site" depends="forrest.init" description="Generates static HTML documentation">
-    <ant antfile="${forrest.home}/forrest.antproxy.xml" target="site"/>
-  </target>
-
-  <target name="webapp" depends="forrest.init" description="Generates an unpackaged webapp of the website">
-    <ant antfile="${forrest.home}/forrest.antproxy.xml" target="webapp"/>
-  </target>
-
-  <target name="war" depends="forrest.init" description="Generates a .war file containing the website">
-    <ant antfile="${forrest.home}/forrest.antproxy.xml" target="war"/>
-  </target>
-
-  <target name="validate" depends="forrest.init" description="Validates XML documentation files">
-    <ant antfile="${forrest.home}/forrest.antproxy.xml" target="validate"/>
-  </target>
-
-  <target name="forrest.init" depends="forrest.sethome, forrest.home.defined"/>
-
-  <target name="forrest.sethome" depends="forrest.loadenv,
-  forrest.checkenv, forrest.checkhome, forrest.check-build.properties,
-  forrest.check-project.properties, forrest.check-ant.properties,
-  forrest.check-.ant.properties"/>
-
-  <target name="forrest.loadenv" unless="forrest.home.present">
-    <property environment="env"/>
-    <echo level="verbose">Forrest: Got ${env.FORREST_HOME}</echo>
-  </target>
-
-  <target name="forrest.checkenv" if="env.FORREST_HOME">
-    <echo level="verbose">Found $FORREST_HOME..</echo>
-    <property name="forrest.home" location="${env.FORREST_HOME}"/>
-    <echo level="verbose">forrest.home set to ${forrest.home}</echo>
-    <available file="${forrest.home}" type="dir" property="forrest.home.present"/>
-  </target>
-
-
-  <target name="forrest.checkhome">
-    <available file="${forrest.home}" type="dir" property="forrest.home.present"/>
-    <available file="build.properties" type="file" property="build.properties.present"/>
-    <available file="project.properties" type="file" property="project.properties.present"/>
-    <available file="ant.properties" type="file" property="ant.properties.present"/>
-    <available file=".ant.properties" type="file" property=".ant.properties.present"/>
-  </target>
-
-  <!-- No we can't extract the commonalities below into an antcall'ed target,
-  because it wouldn't be able to set forrest.home -->
-  <target name="forrest.check-build.properties" unless="forrest.home.present"
-  if="build.properties.present">
-    <echo level="verbose">Forrest: Checking build.properties..</echo>
-    <loadproperties srcfile="build.properties">
-      <filterchain>
-        <linecontains>
-          <contains value="forrest.home"/>
-        </linecontains>
-      </filterchain>
-    </loadproperties>
-    <available file="${forrest.home}" type="dir" property="forrest.home.present"/>
-
-  </target>
-
-  <target name="forrest.check-project.properties" unless="forrest.home.present"
-  if="project.properties.present">
-    <echo level="verbose">Forrest: Checking project.properties..</echo>
-    <loadproperties srcfile="project.properties">
-      <filterchain>
-        <linecontains>
-          <contains value="forrest.home"/>
-        </linecontains>
-      </filterchain>
-    </loadproperties>
-    <available file="${forrest.home}" type="dir" property="forrest.home.present"/>
-  </target>
-
-  <target name="forrest.check-ant.properties" unless="forrest.home.present"
-  if="ant.properties.present">
-    <echo level="verbose">Forrest: Checking ant.properties..</echo>
-    <loadproperties srcfile="ant.properties">
-      <filterchain>
-        <linecontains>
-          <contains value="forrest.home"/>
-        </linecontains>
-      </filterchain>
-    </loadproperties>
-    <available file="${forrest.home}" type="dir" property="forrest.home.present"/>
-  </target>
-
-  <target name="forrest.check-.ant.properties" unless="forrest.home.present"
-  if=".ant.properties.present">
-    <echo level="verbose">Forrest: Checking .ant.properties..</echo>
-    <loadproperties srcfile=".ant.properties">
-      <filterchain>
-        <linecontains>
-          <contains value="forrest.home"/>
-        </linecontains>
-      </filterchain>
-    </loadproperties>
-    <available file="${forrest.home}" type="dir" property="forrest.home.present"/>
-  </target>
-
-  <target name="forrest.home.defined" depends="forrest.sethome" unless="forrest.home.present">
-    <property name="path" value="${user.home}/xml-forrest/build/dist/shbat"/>
-    <pathconvert targetos="windows" property="winpath">
-      <path>
-        <pathelement location="${path}"/>
-      </path>
-    </pathconvert>
-    <pathconvert targetos="unix" property="unixpath">
-      <path>
-        <pathelement
-          location="${path}"/>
-      </path>
-    </pathconvert>
-
-    <echo>
-      ----------------------------------------------
-      To run this target, you need Forrest installed.
-      Please do the following:
-
-      export CVSROOT=:pserver:anoncvs@cvs.apache.org:/home/cvspublic
-      cvs checkout xml-forrest
-      cd xml-forrest
-      build      (Windows)
-      ./build.sh (Unix)
-
-      Then either:
-
-      - Set FORREST_HOME as the Forrest build instructions describe
-      - Create a build.properties, with the forrest.home property pointing to
-        the forrest shbat directory, eg:
-
-        forrest.home=${winpath}  (Windows)
-        forrest.home=${unixpath}  (Unix)
-
-        (adjusting the path according to where your xml-forrest is)
-      ----------------------------------------------
-    </echo>
-    <fail message="Need to define $${forrest.home}"/>
-  </target>
diff --git a/3.0.4/forrest.properties b/3.0.4/forrest.properties
deleted file mode 100644
index d2fd9c7..0000000
--- a/3.0.4/forrest.properties
+++ /dev/null
@@ -1,99 +0,0 @@
-##############
-# Properties used by forrest.build.xml for building the website
-##############
-
-# Prints out a summary of Forrest settings for this project
-#forrest.echo=true 
-
-# Project name (used to name .war file)
-project.name=tapestry
-
-# Specifies name of Forrest skin to use
-#project.skin=forrest-site
-#project.skin=avalon-tigris
-#project.skin=krysalis-site
-project.skin=jakarta-site
-
-
-##############
-# layout properties
-
-# Properties that must be set to override the default locations
-#
-# Parent properties must be set. This usually means uncommenting
-# project.content-dir if any other property using it is uncommented
-
-#project.status=status.xml
-
-project.content-dir=doc/forrest
-
-#project.conf-dir=${project.content-dir}/conf
-#project.sitemap=${project.content-dir}/sitemap.xmap
-#project.xdocs-dir=${project.content-dir}/content/xdocs
-#project.stylesheets-dir=${project.content-dir}/resources/stylesheets
-#project.images-dir=${project.content-dir}/resources/images
-#project.schema-dir=${project.content-dir}/resources/schema
-#project.skins-dir=${project.content-dir}/skins
-#project.skinconf=${project.content-dir}/skinconf.xml
-#project.lib-dir=${project.content-dir}/lib
-#project.classes-dir=${project.content-dir}/classes
-
-
-##############
-# Cocoon catalog entity resolver properties
-
-# A local catalog to supplement the default Forrest catalog
-#project.catalog=${project.schema-dir}/catalog
-
-# The verbosity level for the entity resolver (1..10)
-#forrest.catalog.verbosity=1
-
-
-##############
-# validation properties
-
-# These props determine if validation is performed at all
-# Values are inherited unless overridden.
-# Eg, if forrest.validate=false, then all others are false unless set to true.
-forrest.validate=false
-#forrest.validate.xdocs=${forrest.validate}
-#forrest.validate.skinconf=${forrest.validate}
-#forrest.validate.sitemap=${forrest.validate}
-#forrest.validate.stylesheets=${forrest.validate}
-#forrest.validate.skins=${forrest.validate}
-#forrest.validate.skins.stylesheets=${forrest.validate.skins}
-
-
-# Key:
-# *.failonerror=(true|false)    stop when an XML file is invalid
-# *.includes=(pattern)         Comma-separated list of path patterns to validate
-# *.excludes=(pattern)         Comma-separated list of path patterns to not validate
-
-#forrest.validate.failonerror=true
-#forrest.validate.includes=**/*
-#forrest.validate.excludes=
-#
-#forrest.validate.xdocs.failonerror=${forrest.validate.failonerror}
-#
-#forrest.validate.xdocs.includes=**/*.x*
-#forrest.validate.xdocs.excludes=site.xml
-#
-#forrest.validate.skinconf.includes=${skinconf-file}
-#forrest.validate.skinconf.excludes=
-#forrest.validate.skinconf.failonerror=${forrest.validate.failonerror}
-#
-#forrest.validate.sitemap.includes=${sitemap-file}
-#forrest.validate.sitemap.excludes=
-#forrest.validate.sitemap.failonerror=${forrest.validate.failonerror}
-#
-#forrest.validate.stylesheets.includes=**/*.xsl
-#forrest.validate.stylesheets.excludes=
-#forrest.validate.stylesheets.failonerror=${forrest.validate.failonerror}
-#
-#forrest.validate.skins.includes=**/*
-#forrest.validate.skins.excludes=**/*.xsl
-#forrest.validate.skins.failonerror=${forrest.validate.failonerror}
-#
-#forrest.validate.skins.stylesheets.includes=**/*.xsl
-#forrest.validate.skins.stylesheets.excludes=
-#forrest.validate.skins.stylesheets.failonerror=${forrest.validate.skins.failonerror}
diff --git a/3.0.4/framework/.cvsignore b/3.0.4/framework/.cvsignore
deleted file mode 100644
index 4b3be5f..0000000
--- a/3.0.4/framework/.cvsignore
+++ /dev/null
@@ -1,2 +0,0 @@
-target
-classes
diff --git a/3.0.4/framework/META-INF/taglib.tld b/3.0.4/framework/META-INF/taglib.tld
deleted file mode 100644
index 77c1ae5..0000000
--- a/3.0.4/framework/META-INF/taglib.tld
+++ /dev/null
@@ -1,126 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- $Id$ -->
-<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
-	"http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_2.dtd">
-<taglib>
-	<tlib-version>1.0</tlib-version>
-	<jsp-version>1.2</jsp-version>
-	<short-name>tapestry</short-name>
-	<uri>http://jakarta.apache.org/tapestry/tld/tapestry_1_0.tld</uri>
-	<display-name>Tapestry</display-name>
-	<description>Tapestry JSP taglibrary for providing rudimentary access to a Tapestry application.</description>
-	<tag>
-		<name>page</name>
-		<tag-class>org.apache.tapestry.jsp.PageTag</tag-class>
-		<body-content>JSP</body-content>
-		<display-name>Page</display-name>
-		<description>Creates a link to a named page within a Tapestry
-			application.</description>
-		<attribute>
-			<name>servlet</name>
-			<required>no</required>
-			<rtexprvalue>yes</rtexprvalue>
-			<type>java.lang.String</type>
-			<description>The relative path to the servlet for the application.  The default value is "/app".</description>
-		</attribute>
-		<attribute>
-			<name>page</name>
-			<required>yes</required>
-			<rtexprvalue>yes</rtexprvalue>
-			<type>java.lang.String</type>
-			<description>The name of the page within the application.</description>
-		</attribute>
-		<attribute>
-			<name>styleClass</name>
-			<required>no</required>
-			<rtexprvalue>yes</rtexprvalue>
-			<type>java.lang.String</type>
-			<description>The CSS style class for the rendered tag.</description>
-		</attribute>
-	</tag>
-	<tag>
-		<name>page-url</name>
-		<tag-class>org.apache.tapestry.jsp.PageURLTag</tag-class>
-		<body-content>empty</body-content>
-		<display-name>Page URL</display-name>
-		<description>Inserts a URL to a named page within a Tapestry
-			application.</description>
-		<attribute>
-			<name>servlet</name>
-			<required>no</required>
-			<rtexprvalue>yes</rtexprvalue>
-			<type>java.lang.String</type>
-			<description>The relative path to the servlet for the application.  The default value is "/app".</description>
-		</attribute>
-		<attribute>
-			<name>page</name>
-			<required>yes</required>
-			<rtexprvalue>yes</rtexprvalue>
-			<type>java.lang.String</type>
-			<description>The name of the page within the application.</description>
-		</attribute>
-	</tag>
-	<tag>
-		<name>external</name>
-		<tag-class>org.apache.tapestry.jsp.ExternalTag</tag-class>
-		<body-content>JSP</body-content>
-		<display-name>External</display-name>
-		<description>Creates a link, with parameters, to an external page within a Tapestry application.</description>
-		<attribute>
-			<name>servlet</name>
-			<required>no</required>
-			<rtexprvalue>yes</rtexprvalue>
-			<type>java.lang.String</type>
-			<description>The relative path to the servlet for the application.  The default value is "/app".</description>
-		</attribute>
-		<attribute>
-			<name>page</name>
-			<required>yes</required>
-			<rtexprvalue>yes</rtexprvalue>
-			<type>java.lang.String</type>
-			<description>The name of the page within the application, which must be an external page.</description>
-		</attribute>
-		<attribute>
-			<name>styleClass</name>
-			<required>no</required>
-			<rtexprvalue>yes</rtexprvalue>
-			<type>java.lang.String</type>
-			<description>The CSS style class for the rendered tag.</description>
-		</attribute>
-		<attribute>
-			<name>parameters</name>
-			<required>no</required>
-			<rtexprvalue>yes</rtexprvalue>
-			<type>java.lang.String</type>
-			<description>Either a single string to pass as a parameter, or (if prefixed with "ognl:") an OGNL expression evaluated against the pageContext.</description>
-		</attribute>
-	</tag>
-	<tag>
-		<name>external-url</name>
-		<tag-class>org.apache.tapestry.jsp.ExternalURLTag</tag-class>
-		<body-content>empty</body-content>
-		<display-name>External URL</display-name>
-		<description>Inserts a URL to an external page within a Tapestry application, including service parameters.</description>
-		<attribute>
-			<name>servlet</name>
-			<required>no</required>
-			<rtexprvalue>yes</rtexprvalue>
-			<type>java.lang.String</type>
-			<description>The relative path to the servlet for the application.  The default value is "/app".</description>
-		</attribute>
-		<attribute>
-			<name>page</name>
-			<required>yes</required>
-			<rtexprvalue>yes</rtexprvalue>
-			<type>java.lang.String</type>
-			<description>The name of the page within the application, which must be an external page.</description>
-		</attribute>
-		<attribute>
-			<name>parameters</name>
-			<required>no</required>
-			<rtexprvalue>yes</rtexprvalue>
-			<type>java.lang.String</type>
-			<description>Either a single string to pass as a parameter, or (if prefixed with "ognl:") an OGNL expression evaluated against the pageContext.</description>
-		</attribute>
-	</tag>
-</taglib>
diff --git a/3.0.4/framework/build.xml b/3.0.4/framework/build.xml
deleted file mode 100644
index 052edc1..0000000
--- a/3.0.4/framework/build.xml
+++ /dev/null
@@ -1,51 +0,0 @@
-<?xml version="1.0"?>
-<!-- $Id$ -->
-<project name="Tapestry Framework" default="install">
-	<property name="root.dir" value=".."/>
-	<property file="${root.dir}/config/Version.properties"/>
-	<property file="${root.dir}/config/common.properties"/>
-	<property file="${root.dir}/config/build.properties"/>
-	
-	<path id="project.class.path">
-		<fileset dir="${root.lib.dir}">
-			<include name="${ext.dir}/*.jar"/>
-		</fileset>
-		<fileset dir="${root.lib.dir}">
-			<include name="${j2ee.dir}/*.jar"/>
-		</fileset>
-	</path>
-	<target name="init">
-		<mkdir dir="${classes.dir}"/>
-	</target>
-	<target name="clean">
-		<delete dir="${classes.dir}"/>
-	</target>
-
-	<target name="compile" depends="init"
-		description="Compile all classes in the framework.">
-		<javac srcdir="${src.dir}" destdir="${classes.dir}" debug="on"
-			target="1.1" source="1.3">
-			<classpath refid="project.class.path"/>
-		</javac>
-	</target>
-	<target name="install" depends="compile"
-		description="Compile all classes and build the installed JAR including all package resources."
-		>
-		<copy file="${root.dir}/config/Version.properties"
-			todir="${classes.dir}/org/apache/tapestry"/>
-		<jar jarfile="${root.lib.dir}/${framework.jar}">
-			<fileset dir="${classes.dir}">
-			</fileset>
-
-			<fileset dir="${src.dir}">
-				<exclude name="**/*.java"/>
-				<exclude name="**/package.html"/>
-			</fileset>
-			
-			<metainf dir="META-INF">
-				<include name="*"/>
-			</metainf>
-		</jar>
-
-	</target>
-</project>
diff --git a/3.0.4/framework/src/org/apache/tapestry/AbstractComponent.java b/3.0.4/framework/src/org/apache/tapestry/AbstractComponent.java
deleted file mode 100644
index 4e406ec..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/AbstractComponent.java
+++ /dev/null
@@ -1,1146 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry;
-
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
-import ognl.OgnlRuntime;
-
-import org.apache.tapestry.bean.BeanProvider;
-import org.apache.tapestry.bean.BeanProviderPropertyAccessor;
-import org.apache.tapestry.engine.IPageLoader;
-import org.apache.tapestry.event.ChangeObserver;
-import org.apache.tapestry.event.PageDetachListener;
-import org.apache.tapestry.event.PageEvent;
-import org.apache.tapestry.event.PageRenderListener;
-import org.apache.tapestry.event.PageValidateListener;
-import org.apache.tapestry.listener.ListenerMap;
-import org.apache.tapestry.param.ParameterManager;
-import org.apache.tapestry.spec.BaseLocatable;
-import org.apache.tapestry.spec.IComponentSpecification;
-import org.apache.tapestry.util.prop.OgnlUtils;
-import org.apache.tapestry.util.prop.PropertyFinder;
-import org.apache.tapestry.util.prop.PropertyInfo;
-
-/**
- *  Abstract base class implementing the {@link IComponent} interface.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- * 
- **/
-
-public abstract class AbstractComponent extends BaseLocatable implements IComponent
-{
-    /**
-     * Used to check that subclasses invoke this implementation of prepareForRender().
-     * @see Tapestry#checkMethodInvocation(Object, String, Object)
-     * @since 3.0
-     */
-    private final static String PREPAREFORRENDER_METHOD_ID = "AbstractComponent.prepareForRender()";
-
-    /**
-     * Used to check that subclasses invoke this implementation of cleanupAfterRender().
-     * @see Tapestry#checkMethodInvocation(Object, String, Object)
-     * @since 3.0
-     */
-
-    private final static String CLEANUPAFTERRENDER_METHOD_ID =
-        "AbstractComponent.cleanupAfterRender()";
-
-    static {
-        // Register the BeanProviderHelper to provide access to the
-        // beans of a bean provider as named properties.
-
-        OgnlRuntime.setPropertyAccessor(IBeanProvider.class, new BeanProviderPropertyAccessor());
-    }
-
-    /**
-     *  The specification used to originally build the component.
-     *
-     * 
-     **/
-
-    private IComponentSpecification _specification;
-
-    /**
-     *  The page that contains the component, possibly itself (if the component is
-     *  in fact, a page).
-     *
-     * 
-     **/
-
-    private IPage _page;
-
-    /**
-     *  The component which contains the component.  This will only be
-     *  null if the component is actually a page.
-     *
-     **/
-
-    private IComponent _container;
-
-    /**
-     *  The simple id of this component.
-     *
-     * 
-     **/
-
-    private String _id;
-
-    /**
-     *  The fully qualified id of this component.  This is calculated the first time
-     *  it is needed, then cached for later.
-     *
-     **/
-
-    private String _idPath;
-
-    private static final int MAP_SIZE = 5;
-
-    /**
-     *  A {@link Map} of all bindings (for which there isn't a corresponding
-     *  JavaBeans property); the keys are the names of formal and informal
-     *  parameters.
-     *
-     **/
-
-    private Map _bindings;
-
-    private Map _components;
-    private static final int BODY_INIT_SIZE = 5;
-
-    private INamespace _namespace;
-
-    /**
-     *  Used in place of JDK 1.3's Collections.EMPTY_MAP (which is not
-     *  available in JDK 1.2).
-     *
-     **/
-
-    private static final Map EMPTY_MAP = Collections.unmodifiableMap(new HashMap(1));
-
-    /**
-     *  The number of {@link IRender} objects in the body of
-     *  this component.
-     *
-     * 
-     **/
-
-    private int _bodyCount = 0;
-
-    /**
-     *  An aray of elements in the body of this component.
-     *
-     * 
-     **/
-
-    private IRender[] _body;
-
-    /**
-     *  The components' asset map.
-     *
-     **/
-
-    private Map _assets;
-
-    /**
-     *  A mapping that allows public instance methods to be dressed up
-     *  as {@link IActionListener} listener
-     *  objects.
-     *
-     *  @since 1.0.2
-     * 
-     **/
-
-    private ListenerMap _listeners;
-
-    /**
-     *  A bean provider; these are lazily created as needed.
-     *
-     *  @since 1.0.4
-     * 
-     **/
-
-    private IBeanProvider _beans;
-
-    /**
-     *  Manages setting and clearing parameter properties for the component.
-     * 
-     *  @since 2.0.3
-     * 
-     **/
-
-    private ParameterManager _parameterManager;
-
-    /**
-     *  Provides access to localized Strings for this component.
-     * 
-     *  @since 2.0.4
-     * 
-     **/
-
-    private IMessages _strings;
-
-    public void addAsset(String name, IAsset asset)
-    {
-        if (_assets == null)
-            _assets = new HashMap(MAP_SIZE);
-
-        _assets.put(name, asset);
-    }
-
-    public void addComponent(IComponent component)
-    {
-        if (_components == null)
-            _components = new HashMap(MAP_SIZE);
-
-        _components.put(component.getId(), component);
-    }
-
-    /**
-     *  Adds an element (which may be static text or a component) as a body
-     *  element of this component.  Such elements are rendered
-     *  by {@link #renderBody(IMarkupWriter, IRequestCycle)}.
-     *
-     *  @since 2.2
-     * 
-     **/
-
-    public void addBody(IRender element)
-    {
-        // Should check the specification to see if this component
-        // allows body.  Curently, this is checked by the component
-        // in render(), which is silly.
-
-        if (_body == null)
-        {
-            _body = new IRender[BODY_INIT_SIZE];
-            _body[0] = element;
-
-            _bodyCount = 1;
-            return;
-        }
-
-        // No more room?  Make the array bigger.
-
-        if (_bodyCount == _body.length)
-        {
-            IRender[] newWrapped;
-
-            newWrapped = new IRender[_body.length * 2];
-
-            System.arraycopy(_body, 0, newWrapped, 0, _bodyCount);
-
-            _body = newWrapped;
-        }
-
-        _body[_bodyCount++] = element;
-    }
-
-    /**
-     *  Registers this component as a listener of the page if it
-     *  implements {@link org.apache.tapestry.event.PageDetachListener} or 
-     *  {@link org.apache.tapestry.event.PageRenderListener}.
-     * 
-     *  <p>
-     *  Invokes {@link #finishLoad()}.  Subclasses may overide as needed, but
-     *  must invoke this implementation.
-     *  {@link BaseComponent}
-     *  loads its HTML template. 
-     *
-     **/
-
-    public void finishLoad(
-        IRequestCycle cycle,
-        IPageLoader loader,
-        IComponentSpecification specification)
-    {
-        if (this instanceof PageDetachListener)
-            _page.addPageDetachListener((PageDetachListener) this);
-
-        if (this instanceof PageRenderListener)
-            _page.addPageRenderListener((PageRenderListener) this);
-
-        if (this instanceof PageValidateListener)
-            _page.addPageValidateListener((PageValidateListener) this);
-
-        finishLoad();
-    }
-
-    /**
-     * @deprecated To be removed in 3.1. 
-     * Use {@link Tapestry#fireObservedChange(IComponent, String, int)} instead.
-     */
-    protected void fireObservedChange(String propertyName, int newValue)
-    {
-        Tapestry.fireObservedChange(this, propertyName, newValue);
-    }
-
-    /**
-     * @deprecated To be removed in 3.1. 
-     * Use {@link Tapestry#fireObservedChange(IComponent, String, Object)} instead.
-     */
-    protected void fireObservedChange(String propertyName, Object newValue)
-    {
-        Tapestry.fireObservedChange(this, propertyName, newValue);
-    }
-
-    /**
-     * @deprecated To be removed in 3.1. 
-     * Use {@link Tapestry#fireObservedChange(IComponent, String, boolean)} instead.
-     */
-    protected void fireObservedChange(String propertyName, boolean newValue)
-    {
-        Tapestry.fireObservedChange(this, propertyName, newValue);
-    }
-
-    /**
-     * @deprecated To be removed in 3.1. 
-     * Use {@link Tapestry#fireObservedChange(IComponent, String, double)} instead.
-     */
-    protected void fireObservedChange(String propertyName, double newValue)
-    {
-        Tapestry.fireObservedChange(this, propertyName, newValue);
-    }
-
-    /**
-     * @deprecated To be removed in 3.1. 
-     * Use {@link Tapestry#fireObservedChange(IComponent, String, float)} instead.
-     */
-    protected void fireObservedChange(String propertyName, float newValue)
-    {
-        Tapestry.fireObservedChange(this, propertyName, newValue);
-    }
-
-    /**
-     * @deprecated To be removed in 3.1. 
-     * Use {@link Tapestry#fireObservedChange(IComponent, String, long)} instead.
-     */
-    protected void fireObservedChange(String propertyName, long newValue)
-    {
-        Tapestry.fireObservedChange(this, propertyName, newValue);
-    }
-
-    /**
-     * @deprecated To be removed in 3.1. 
-     * Use {@link Tapestry#fireObservedChange(IComponent, String, char)} instead.
-     */
-    protected void fireObservedChange(String propertyName, char newValue)
-    {
-        Tapestry.fireObservedChange(this, propertyName, newValue);
-    }
-
-    /**
-     * @deprecated To be removed in 3.1. 
-     * Use {@link Tapestry#fireObservedChange(IComponent, String, byte)} instead.
-     */
-    protected void fireObservedChange(String propertyName, byte newValue)
-    {
-        Tapestry.fireObservedChange(this, propertyName, newValue);
-    }
-
-    /**
-     * @deprecated To be removed in 3.1. 
-     * Use {@link Tapestry#fireObservedChange(IComponent, String, short)} instead.
-     */
-    protected void fireObservedChange(String propertyName, short newValue)
-    {
-        Tapestry.fireObservedChange(this, propertyName, newValue);
-    }
-
-    /**
-     *  @deprecated To be removed in 3.1.  Use 
-     *  {@link #renderInformalParameters(IMarkupWriter, IRequestCycle)}
-     *  instead.
-     * 
-     **/
-
-    protected void generateAttributes(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        renderInformalParameters(writer, cycle);
-    }
-
-    /**
-     *  Converts informal parameters into additional attributes on the
-     *  curently open tag.
-     *
-     *  <p>Invoked from subclasses to allow additional attributes to
-     *  be specified within a tag (this works best when there is a
-     *  one-to-one corespondence between an {@link IComponent} and a
-     *  HTML element.
-     *
-     *  <p>Iterates through the bindings for this component.  Filters
-     *  out bindings when the name matches a formal parameter (as of 1.0.5,
-     *  informal bindings are weeded out at page load / template load time,
-     *  if they match a formal parameter, or a specificied reserved name).
-     *  For the most part, all the bindings here are either informal parameter,
-     *  or formal parameter without a corresponding JavaBeans property.
-     *
-     *  <p>For each acceptible key, the value is extracted using {@link IBinding#getObject()}.
-     *  If the value is null, no attribute is written.
-     *
-     *  <p>If the value is an instance of {@link IAsset}, then
-     *  {@link IAsset#buildURL(IRequestCycle)} is invoked to convert the asset
-     *  to a URL.
-     *
-     *  <p>Finally, {@link IMarkupWriter#attribute(String,String)} is
-     *  invoked with the value (or the URL).
-     *
-     *  <p>The most common use for informal parameters is to support
-     *  the HTML class attribute (for use with cascading style sheets)
-     *  and to specify JavaScript event handlers.
-     *
-     *  <p>Components are only required to generate attributes on the
-     *  result phase; this can be skipped during the rewind phase.
-     **/
-
-    protected void renderInformalParameters(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        String attribute;
-
-        if (_bindings == null)
-            return;
-
-        Iterator i = _bindings.entrySet().iterator();
-
-        while (i.hasNext())
-        {
-            Map.Entry entry = (Map.Entry) i.next();
-            String name = (String) entry.getKey();
-
-            IBinding binding = (IBinding) entry.getValue();
-
-            Object value = binding.getObject();
-            if (value == null)
-                continue;
-
-            if (value instanceof IAsset)
-            {
-                IAsset asset = (IAsset) value;
-
-                // Get the URL of the asset and insert that.
-
-                attribute = asset.buildURL(cycle);
-            }
-            else
-                attribute = value.toString();
-
-            writer.attribute(name, attribute);
-        }
-
-    }
-
-    /**
-     *  Returns an object used to resolve classes.
-     *  @since 3.0
-     *
-     **/
-    private IResourceResolver getResourceResolver()
-    {
-        return getPage().getEngine().getResourceResolver();
-    }
-
-	/**
-	 *  Returns the named binding, or null if it doesn't exist.
-	 *
-	 *  <p>This method looks for a JavaBeans property with an
-	 *  appropriate name, of type {@link IBinding}.  The property
-	 *  should be named <code><i>name</i>Binding</code>.  If it exists
-	 *  and is both readable and writable, then it is accessor method
-	 *  is invoked.  Components which implement such methods can
-	 *  access their own binding through their instance variables
-	 *  instead of invoking this method, a performance optimization.
-	 *
-	 *  @see #setBinding(String,IBinding)
-	 *
-	 **/
-
-	public IBinding getBinding(String name)
-	{
-		String bindingPropertyName = name + Tapestry.PARAMETER_PROPERTY_NAME_SUFFIX;
-		PropertyInfo info = PropertyFinder.getPropertyInfo(getClass(), bindingPropertyName);
-
-		if (info != null && info.isReadWrite() && info.getType().equals(IBinding.class))
-		{
-			IResourceResolver resolver = getPage().getEngine().getResourceResolver();
-
-			return (IBinding) OgnlUtils.get(bindingPropertyName, resolver, this);
-		}
-
-		if (_bindings == null)
-			return null;
-
-		return (IBinding) _bindings.get(name);
-	}
-
-
-    /**
-     *  Return's the page's change observer.  In practical terms, this
-     *  will be an {@link org.apache.tapestry.engine.IPageRecorder}.
-     *
-     *  @see IPage#getChangeObserver()
-     *  @deprecated To be removed in 3.1; use {@link IPage#getChangeObserver()}.
-     **/
-
-    public ChangeObserver getChangeObserver()
-    {
-        return _page.getChangeObserver();
-    }
-
-    public IComponent getComponent(String id)
-    {
-        IComponent result = null;
-
-        if (_components != null)
-            result = (IComponent) _components.get(id);
-
-        if (result == null)
-            throw new ApplicationRuntimeException(
-                Tapestry.format("no-such-component", this, id),
-                this,
-                null,
-                null);
-
-        return result;
-    }
-
-    public IComponent getContainer()
-    {
-        return _container;
-    }
-
-    public void setContainer(IComponent value)
-    {
-        if (_container != null)
-            throw new ApplicationRuntimeException(
-                Tapestry.getMessage("AbstractComponent.attempt-to-change-container"));
-
-        _container = value;
-    }
-
-    /**
-     *  Returns the name of the page, a slash, and this component's id path.
-     *  Pages are different, they simply return their name.
-     *
-     *  @see #getIdPath()
-     *
-     **/
-
-    public String getExtendedId()
-    {
-        if (_page == null)
-            return null;
-
-        return _page.getPageName() + "/" + getIdPath();
-    }
-
-    public String getId()
-    {
-        return _id;
-    }
-
-    public void setId(String value)
-    {
-        if (_id != null)
-            throw new ApplicationRuntimeException(
-                Tapestry.getMessage("AbstractComponent.attempt-to-change-component-id"));
-
-        _id = value;
-    }
-
-    public String getIdPath()
-    {
-        String containerIdPath;
-
-        if (_container == null)
-            throw new NullPointerException(
-                Tapestry.format("AbstractComponent.null-container", this));
-
-        containerIdPath = _container.getIdPath();
-
-        if (containerIdPath == null)
-            _idPath = _id;
-        else
-            _idPath = containerIdPath + "." + _id;
-
-        return _idPath;
-    }
-
-    public IPage getPage()
-    {
-        return _page;
-    }
-
-    public void setPage(IPage value)
-    {
-        if (_page != null)
-            throw new ApplicationRuntimeException(
-                Tapestry.getMessage("AbstractComponent.attempt-to-change-page"));
-
-        _page = value;
-    }
-
-    public IComponentSpecification getSpecification()
-    {
-        return _specification;
-    }
-
-    public void setSpecification(IComponentSpecification value)
-    {
-        if (_specification != null)
-            throw new ApplicationRuntimeException(
-                Tapestry.getMessage("AbstractComponent.attempt-to-change-spec"));
-
-        _specification = value;
-    }
-
-    /**
-     *  Renders all elements wrapped by the receiver.
-     *
-     **/
-
-    public void renderBody(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        for (int i = 0; i < _bodyCount; i++)
-            _body[i].render(writer, cycle);
-    }
-
-	/**
-	 *  Adds the binding with the given name, replacing any existing binding
-	 *  with that name.
-	 *
-	 *  <p>This method checks to see if a matching JavaBeans property
-	 *  (with a name of <code><i>name</i>Binding</code> and a type of
-	 *  {@link IBinding}) exists.  If so, that property is updated.
-	 *  An optimized component can simply implement accessor and
-	 *  mutator methods and then access its bindings via its own
-	 *  instance variables, rather than going through {@link
-	 *  #getBinding(String)}.
-	 *
-	 *  <p>Informal parameters should <em>not</em> be stored in
-	 *  instance variables if {@link
-	 *  #renderInformalParameters(IMarkupWriter, IRequestCycle)} is to be used.
-	 *  It relies on using the collection of bindings (to store informal parameters).
-	 **/
-
-	public void setBinding(String name, IBinding binding)
-	{
-		String bindingPropertyName = name + Tapestry.PARAMETER_PROPERTY_NAME_SUFFIX;
-
-		PropertyInfo info = PropertyFinder.getPropertyInfo(getClass(), bindingPropertyName);
-
-		if (info != null && info.isReadWrite() && info.getType().equals(IBinding.class))
-		{
-			IResourceResolver resolver = getPage().getEngine().getResourceResolver();
-			OgnlUtils.set(bindingPropertyName, resolver, this, binding);
-			return;
-		}
-
-		if (_bindings == null)
-			_bindings = new HashMap(MAP_SIZE);
-
-		_bindings.put(name, binding);
-	}
-
-
-    public String toString()
-    {
-        StringBuffer buffer;
-
-        buffer = new StringBuffer(super.toString());
-
-        buffer.append('[');
-
-        buffer.append(getExtendedId());
-
-        buffer.append(']');
-
-        return buffer.toString();
-    }
-
-    /**
-     *  Returns an unmodifiable {@link Map} of components, keyed on component id.
-     *  Never returns null, but may return an empty map.  The returned map is
-     *  immutable.
-     *
-     **/
-
-    public Map getComponents()
-    {
-        if (_components == null)
-            return EMPTY_MAP;
-
-        return Collections.unmodifiableMap(_components);
-
-    }
-
-    public Map getAssets()
-    {
-        if (_assets == null)
-            return EMPTY_MAP;
-
-        return Collections.unmodifiableMap(_assets);
-    }
-
-    public IAsset getAsset(String name)
-    {
-        if (_assets == null)
-            return null;
-
-        return (IAsset) _assets.get(name);
-    }
-
-    public Collection getBindingNames()
-    {
-        // If no conainer, i.e. a page, then no bindings.
-
-        if (_container == null)
-            return null;
-
-        HashSet result = new HashSet();
-
-        // All the informal bindings go into the bindings Map. 
-
-        if (_bindings != null)
-            result.addAll(_bindings.keySet());
-
-        // Now, iterate over the formal parameters and add the formal parameters
-        // that have a binding.
-
-        List names = _specification.getParameterNames();
-
-        int count = names.size();
-
-        for (int i = 0; i < count; i++)
-        {
-            String name = (String) names.get(i);
-
-            if (result.contains(name))
-                continue;
-
-            if (getBinding(name) != null)
-                result.add(name);
-        }
-
-        return result;
-    }
-
-    /** 
-     *
-     *  Returns a {@link Map} of all bindings for this component.  This implementation
-     *  is expensive, since it has to merge the disassociated bindings (informal parameters,
-     *  and parameters without a JavaBeans property) with the associated bindings (formal
-     *  parameters with a JavaBeans property).
-     *
-     * @since 1.0.5
-     *
-     **/
-
-    public Map getBindings()
-    {
-        Map result = new HashMap();
-
-        // Add any informal parameters.
-
-        if (_bindings != null)
-            result.putAll(_bindings);
-
-        // Now work on the formal parameters
-
-        Iterator i = _specification.getParameterNames().iterator();
-        while (i.hasNext())
-        {
-            String name = (String) i.next();
-
-            if (result.containsKey(name))
-                continue;
-
-            IBinding binding = getBinding(name);
-
-            if (binding != null)
-                result.put(name, binding);
-        }
-
-        return result;
-    }
-
-    /**
-     *  Returns a {@link ListenerMap} for the component.  A {@link ListenerMap} contains a number of
-     *  synthetic read-only properties that implement the {@link IActionListener} 
-     *  interface, but in fact, cause public instance methods to be invoked.
-     *
-     *  @since 1.0.2
-     **/
-
-    public ListenerMap getListeners()
-    {
-        if (_listeners == null)
-            _listeners = new ListenerMap(this);
-
-        return _listeners;
-    }
-
-    /**
-     *  Returns the {@link IBeanProvider} for this component.  This is lazily created the
-     *  first time it is needed.
-     *
-     *  @since 1.0.4
-     *
-     **/
-
-    public IBeanProvider getBeans()
-    {
-        if (_beans == null)
-            _beans = new BeanProvider(this);
-
-        return _beans;
-    }
-
-    /**
-     * 
-     *  Invoked, as a convienience, 
-     *  from {@link #finishLoad(IRequestCycle, IPageLoader, IComponentSpecification)}.
-     *  This implemenation does nothing.  Subclasses may override without invoking
-     *  this implementation.
-     * 
-     *  @since 1.0.5
-     *
-     **/
-
-    protected void finishLoad()
-    {
-    }
-
-    /**
-     *  The main method used to render the component.  
-     *  Invokes {@link #prepareForRender(IRequestCycle)}, then
-     *  {@link #renderComponent(IMarkupWriter, IRequestCycle)}.
-     *  {@link #cleanupAfterRender(IRequestCycle)} is invoked in a 
-     *  <code>finally</code> block.
-     * 	 
-     *  <p>Subclasses should not override this method; instead they
-     *  will implement {@link #renderComponent(IMarkupWriter, IRequestCycle)}.
-     * 
-     *  @since 2.0.3
-     * 
-     **/
-
-    public final void render(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        try
-        {
-            Tapestry.clearMethodInvocations();
-
-            prepareForRender(cycle);
-
-            Tapestry.checkMethodInvocation(PREPAREFORRENDER_METHOD_ID, "prepareForRender()", this);
-
-            renderComponent(writer, cycle);
-        }
-        finally
-        {
-            Tapestry.clearMethodInvocations();
-
-            cleanupAfterRender(cycle);
-
-            Tapestry.checkMethodInvocation(
-                CLEANUPAFTERRENDER_METHOD_ID,
-                "cleanupAfterRender()",
-                this);
-        }
-    }
-
-    /**
-     *  Invoked by {@link #render(IMarkupWriter, IRequestCycle)}
-     *  to prepare the component to render.  This implementation
-     *  sets JavaBeans properties from matching bound parameters.
-     *  Subclasses that override this method must invoke this
-     *  implementation as well.
-     * 
-     *  @since 2.0.3
-     * 
-     **/
-
-    protected void prepareForRender(IRequestCycle cycle)
-    {
-        Tapestry.addMethodInvocation(PREPAREFORRENDER_METHOD_ID);
-
-        if (_parameterManager == null)
-        {
-            // Pages inherit from this class too, but pages (by definition)
-            // never have parameters.
-
-            if (getSpecification().isPageSpecification())
-                return;
-
-            _parameterManager = new ParameterManager(this);
-        }
-
-        _parameterManager.setParameters(cycle);
-    }
-
-    /**
-     *  Invoked by {@link #render(IMarkupWriter, IRequestCycle)}
-     *  to actually render the component (with any parameter values
-     *  already set).  This is the method that subclasses must implement.
-     * 
-     *  @since 2.0.3
-     * 
-     **/
-
-    protected abstract void renderComponent(IMarkupWriter writer, IRequestCycle cycle);
-
-    /**
-     *  Invoked by {@link #render(IMarkupWriter, IRequestCycle)}
-     *  after the component renders, to clear any parameters back to
-     *  null (or 0, or false, or whatever the correct default is).  
-     *  Primarily, this is used to ensure
-     *  that the component doesn't hold onto any objects that could
-     *  otherwise be garbage collected.
-     * 
-     *  <p>Subclasses may override this implementation, but must
-     *  also invoke it.
-     * 
-     *  @since 2.0.3
-     * 
-     **/
-
-    protected void cleanupAfterRender(IRequestCycle cycle)
-    {
-        Tapestry.addMethodInvocation(CLEANUPAFTERRENDER_METHOD_ID);
-
-        if (_parameterManager != null)
-            _parameterManager.resetParameters(cycle);
-    }
-
-    /** @since 3.0 **/
-
-    public IMessages getMessages()
-    {
-        if (_strings == null)
-            _strings = getPage().getEngine().getComponentMessagesSource().getMessages(this);
-
-        return _strings;
-    }
-
-    /**
-     *  Obtains the {@link IMessages} for this component
-     *  (if necessary), and gets the string from it.
-     * 
-     **/
-
-    public String getString(String key)
-    {
-        return getMessages().getMessage(key);
-    }
-
-    public String getMessage(String key)
-    {
-        // Invoke the deprecated implementation (for code coverage reasons).
-        // In 3.1, remove getString() and move its implementation
-        // here.
-
-        return getString(key);
-    }
-
-    /**
-     *  Formats a message string, using
-     *  {@link IMessages#format(java.lang.String, java.lang.Object[])}.
-     * 
-     *  @param key the key used to obtain a localized pattern using
-     *  {@link #getString(String)}
-     *  @param arguments passed to the formatter
-     * 
-     *  @since 2.2
-     *  @deprecated To be removed in 3.1.  Use {@link #format(String, Object[])} instead.
-     **/
-
-    public String formatString(String key, Object[] arguments)
-    {
-        return getMessages().format(key, arguments);
-    }
-
-    /**
-     * Formats a localized message string, using
-     * {@link IMessages#format(java.lang.String, java.lang.Object[])}.
-     *
-     * @param key the key used to obtain a localized pattern using
-     * {@link #getString(String)}
-     * @param arguments passed to the formatter
-     * 
-     * @since 3.0
-     */
-
-    public String format(String key, Object[] arguments)
-    {
-        // SOP: New name invokes deprecated method (consistency and 
-        // code coverage); in 3.1 we move the implementation here.
-
-        return formatString(key, arguments);
-    }
-
-    /**
-     *  Convienience method for invoking {@link IMessages#format(String, Object[])}
-     * 
-     *  @since 2.2
-     *  @deprecated To be removed in 3.1.  Use {@link #format(String, Object)} instead.
-     * 
-     **/
-
-    public String formatString(String key, Object argument)
-    {
-        return getMessages().format(key, argument);
-    }
-
-    /**
-     * Convienience method for invoking {@link IMessages#format(String, Object)}
-     * 
-     * @since 3.0
-     * 
-     */
-
-    public String format(String key, Object argument)
-    {
-        return formatString(key, argument);
-    }
-
-    /**
-     *  Convienience method for invoking {@link IMessages#format(String, Object, Object)}.
-     * 
-     *  @since 2.2
-     *  @deprecated To be removed in 3.1.  Use {@link #format(String, Object, Object)} instead.
-     **/
-
-    public String formatString(String key, Object argument1, Object argument2)
-    {
-        return getMessages().format(key, argument1, argument2);
-    }
-
-    /**
-     * Convienience method for invoking {@link IMessages#format(String, Object, Object)}.
-     * 
-     * @since 3.0
-     * 
-     **/
-
-    public String format(String key, Object argument1, Object argument2)
-    {
-        return formatString(key, argument1, argument2);
-    }
-
-    /**
-     * Convienience method for {@link IMessages#format(String, Object, Object, Object)}.
-     * 
-     * @since 2.2
-     * @deprecated To be removed in 3.1.  Use {@link #format(String, Object, Object, Object)} instead.
-     */
-
-    public String formatString(String key, Object argument1, Object argument2, Object argument3)
-    {
-        return getMessages().format(key, argument1, argument2, argument3);
-    }
-
-    /**
-     * Convienience method for {@link IMessages#format(String, Object, Object, Object)}.
-     * 
-     * @since 3.0
-     */
-
-    public String format(String key, Object argument1, Object argument2, Object argument3)
-    {
-        return formatString(key, argument1, argument2, argument3);
-    }
-
-    public INamespace getNamespace()
-    {
-        return _namespace;
-    }
-
-    public void setNamespace(INamespace namespace)
-    {
-        _namespace = namespace;
-    }
-
-    /**
-     *  Returns the body of the component, the element (which may be static HTML or components)
-     *  that the component immediately wraps.  May return null.  Do not modify the returned
-     *  array.  The array may be padded with nulls.
-     * 
-     *  @since 2.3
-     *  @see #getBodyCount()
-     * 
-     **/
-
-    public IRender[] getBody()
-    {
-        return _body;
-    }
-
-    /**
-     *  Returns the active number of elements in the the body, which may be zero.
-     * 
-     *  @since 2.3
-     *  @see #getBody()
-     * 
-     **/
-
-    public int getBodyCount()
-    {
-        return _bodyCount;
-    }
-
-    /**
-     * Empty implementation of
-     * {@link org.apache.tapestry.event.PageRenderListener#pageEndRender(PageEvent)}.
-     * This allows classes to implement
-     * {@link org.apache.tapestry.event.PageRenderListener} and only
-     * implement the
-     * {@link org.apache.tapestry.event.PageRenderListener#pageBeginRender(PageEvent)}
-     * method.
-     * @since 3.0
-     */
-
-    public void pageEndRender(PageEvent event)
-    {
-    }
-
-    /**
-     *  Sets a property of a component.
-     *  @see IComponent 
-     *  @since 3.0
-     */
-    public void setProperty(String propertyName, Object value)
-    {
-        IResourceResolver resolver = getResourceResolver();
-        OgnlUtils.set(propertyName, resolver, this, value);
-    }
-    /**
-     *  Gets a property of a component.
-     *  @see IComponent 
-     *  @since 3.0
-     */
-    public Object getProperty(String propertyName)
-    {
-        IResourceResolver resolver = getResourceResolver();
-        return OgnlUtils.get(propertyName, resolver, this);
-    }
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/AbstractMarkupWriter.java b/3.0.4/framework/src/org/apache/tapestry/AbstractMarkupWriter.java
deleted file mode 100644
index b4514b3..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/AbstractMarkupWriter.java
+++ /dev/null
@@ -1,843 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry;
-
-import java.io.BufferedWriter;
-import java.io.OutputStream;
-import java.io.OutputStreamWriter;
-import java.io.PrintWriter;
-import java.io.UnsupportedEncodingException;
-import java.io.Writer;
-import java.util.Stack;
-
-import org.apache.tapestry.util.ContentType;
-
-/**
- * Abstract base class implementing the {@link IMarkupWriter} interface.
- * This class is used to create a Generic Tag Markup Language (GTML) output.   
- * It is more sophisticated than <code>PrintWriter</code> in that it maintains   
- * a concept hierarchy of open GTML tags. It also supplies a number of other
- * of the features that are useful when creating GTML.
- *
- * Elements are started with the {@link #begin(String)} 
- * or {@link #beginEmpty(String)}
- * methods. Once they are started, attributes for the elements may be set with
- * the various <code>attribute()</code> methods. The element is closed off
- * (i.e., the closing '&gt;' character is written) when any other method
- * is invoked (exception: methods which do not produce output, such as
- * {@link #flush()}). The <code>end()</code> methods end an element,
- * writing an GTML close tag to the output.
- *
- * <p>TBD:
- * <ul>
- * <li>Support XML and XHTML
- *  <li>What to do with Unicode characters with a value greater than 255?
- * </ul>
- *
- * <p>This class is derived from the original class 
- * <code>com.primix.servlet.HTMLWriter</code>,
- * part of the <b>ServletUtils</b> framework available from
- * <a href="http://www.gjt.org/servlets/JCVSlet/list/gjt/com/primix/servlet">The Giant 
- * Java Tree</a>.
- *
- * @version $Id$
- * @author Howard Ship, David Solis
- * @since 0.2.9
- *
- **/
-
-public abstract class AbstractMarkupWriter implements IMarkupWriter
-{
-    /**
-     * The encoding to be used should it be omitted in the constructors.
-     * This is only used for backward compatibility. New code always provides the encoding.
-     */
-
-    private static final String DEFAULT_ENCODING = "utf-8";
-
-    /**
-     * The underlying {@link PrintWriter} that output is sent to. 
-     *  
-     **/
-
-    private PrintWriter _writer;
-
-    /**
-     * Indicates whether a tag is open or not. A tag is opened by
-     * {@link #begin(String)} or {@link #beginEmpty(String)}.
-     * It stays open while calls to the <code>attribute()</code>
-     * methods are made. It is closed
-     * (the '&gt;' is written) when any other method is invoked.
-     *
-     **/
-
-    private boolean _openTag = false;
-
-    /**
-     *  Indicates that the tag was opened with 
-     *  {@link #beginEmpty(String)}, which affects
-     *  how the tag is closed (a slash is added to indicate the
-     *  lack of a body).  This is compatible with HTML, but reflects
-     *  an XML/XHTML leaning.
-     * 
-     *  @since 2.2
-     * 
-     **/
-
-    private boolean _emptyTag = false;
-
-    /**
-     * A Stack of Strings used to track the active tag elements. Elements are active
-     * until the corresponding close tag is written.  The {@link #push(String)} method
-     * adds elements to the stack, {@link #pop()} removes them.
-     *
-     **/
-
-    private Stack _activeElementStack;
-
-    /**
-     * The depth of the open tag stack.
-     * @see #_activeElementStack
-     *
-     **/
-
-    private int _depth = 0;
-
-    private char[] _buffer;
-
-    private String[] _entities;
-    private boolean[] _safe;
-
-    /**
-     *  Implemented in concrete subclasses to provide an indication of which
-     *  characters are 'safe' to insert directly into the response.  The index
-     *  into the array is the character, if the value at the index is false (or the
-     *  index out of range), then the character is escaped.
-     *
-     **/
-
-    private String _contentType;
-
-    /**
-     *  Indicates whether {@link #close()} should close the 
-     *  underlying {@link PrintWriter}.
-     * 
-     *  @since 3.0
-     * 
-     **/
-
-    private boolean _propagateClose = true;
-
-    public String getContentType()
-    {
-        return _contentType;
-    }
-
-    abstract public IMarkupWriter getNestedWriter();
-
-    /**
-     *  General constructor used by subclasses.
-     * 
-     *  @param safe an array of flags indicating which characters
-     *  can be passed directly through with out filtering.  Characters marked
-     *  unsafe, or outside the range defined by safe, are converted to entities.
-     *  @param entities a set of prefered entities, unsafe characters with
-     *  a defined entity use the entity, other characters are converted
-     *  to numeric entities.
-     *  @param contentType the MIME type of the content produced by the writer.
-     *  @param encoding the encoding of content produced by the writer.
-     *  @param stream stream to which content will be written.
-     *
-     **/
-
-    protected AbstractMarkupWriter(
-        boolean safe[],
-        String[] entities,
-        String contentType,
-        String encoding,
-        OutputStream stream)
-    {
-        if (entities == null || safe == null || contentType == null || encoding == null)
-            throw new IllegalArgumentException(
-                Tapestry.getMessage("AbstractMarkupWriter.missing-constructor-parameters"));
-
-        _entities = entities;
-        _safe = safe;
-
-        _contentType = generateFullContentType(contentType, encoding);
-
-        setOutputStream(stream, encoding);
-    }
-
-    /**
-     *  General constructor used by subclasses.
-     *  This constructor is left for backward compatibility. It is preferred that 
-     *  it is not used since it does not specify an encoding for conversion.
-     * 
-     *  @param safe an array of flags indicating which characters
-     *  can be passed directly through with out filtering.  Characters marked
-     *  unsafe, or outside the range defined by safe, are converted to entities.
-     *  @param entities a set of prefered entities, unsafe characters with
-     *  a defined entity use the entity, other characters are converted
-     *  to numeric entities.
-     *  @param contentType the type of content produced by the
-     *  writer.
-     *  @param stream stream to which content will be written.
-     **/
-
-    protected AbstractMarkupWriter(
-        boolean safe[],
-        String[] entities,
-        String contentType,
-        OutputStream stream)
-    {
-        this(safe, entities, contentType);
-
-        ContentType contentTypeObject = new ContentType(contentType);
-        String encoding = contentTypeObject.getParameter("charset");
-
-        setOutputStream(stream, encoding);
-    }
-
-    /**
-     *  Creates new markup writer around the underlying {@link PrintWriter}.
-     * 
-     *  <p>This is primarily used by {@link org.apache.tapestry.engine.TagSupportService},
-     *  which is inlcuding content, and therefore this method will not
-     *  close the writer when the markup writer is closed.
-     * 
-     *  @since 3.0
-     *  
-     **/
-
-    protected AbstractMarkupWriter(
-        boolean safe[],
-        String[] entities,
-        String contentType,
-        PrintWriter writer)
-    {
-        this(safe, entities, contentType);
-
-        // When the markup writer is closed, the underlying writer
-        // is NOT closed.
-
-        _propagateClose = false;
-        _writer = writer;
-    }
-
-    /**
-     *  Special constructor used for nested response writers.
-     *  The subclass is responsible for creating the writer.
-     * 
-     **/
-
-    protected AbstractMarkupWriter(boolean safe[], String[] entities, String contentType)
-    {
-        if (entities == null || safe == null || contentType == null)
-            throw new IllegalArgumentException(
-                Tapestry.getMessage("AbstractMarkupWriter.missing-constructor-parameters"));
-
-        _entities = entities;
-        _safe = safe;
-        _contentType = generateFullContentType(contentType, DEFAULT_ENCODING);
-    }
-
-    /**
-     * Ensures that the content type has a charset (encoding) parameter.
-     * 
-     * @param contentType The content type, e.g. text/html. It may contain a charset parameter.
-     * @param encoding The value of the charset parameter of the content type if it is not already present.
-     * @return The content type containing a charset parameter, e.g. text/html;charset=utf-8 
-     */
-    private String generateFullContentType(String contentType, String encoding)
-    {
-        ContentType contentTypeObject = new ContentType(contentType);
-        if (contentTypeObject.getParameter("charset") == null)
-            contentTypeObject.setParameter("charset", encoding);
-        return contentTypeObject.unparse();
-    }
-
-    protected void setWriter(PrintWriter writer)
-    {
-        _writer = writer;
-    }
-
-    protected void setOutputStream(OutputStream stream, String encoding)
-    {
-        try
-        {
-            OutputStreamWriter owriter;
-            if (encoding != null)
-                owriter = new OutputStreamWriter(stream, encoding);
-            else
-                owriter = new OutputStreamWriter(stream);
-            Writer bwriter = new BufferedWriter(owriter);
-
-            _writer = new PrintWriter(bwriter);
-        }
-        catch (UnsupportedEncodingException e)
-        {
-            throw new IllegalArgumentException(
-                Tapestry.format("illegal-encoding", encoding));
-        }
-    }
-
-    /**
-     * Writes an integer attribute into the currently open tag.
-     *
-     * <p>TBD: Validate that name is legal.
-     *
-     * @throws IllegalStateException if there is no open tag.
-     *
-     **/
-
-    public void attribute(String name, int value)
-    {
-        checkTagOpen();
-
-        _writer.print(' ');
-        _writer.print(name);
-        _writer.print("=\"");
-        _writer.print(value);
-        _writer.print('"');
-    }
-
-    /**
-     *  Writes a boolean attribute into the currently open tag.
-     *
-     *  <p>TBD: Validate that name is legal.
-     *
-     *  @throws IllegalStateException if there is no open tag.
-     *
-     *  @since 3.0
-     *
-     **/
-
-    public void attribute(String name, boolean value)
-    {
-        checkTagOpen();
-
-        _writer.print(' ');
-        _writer.print(name);
-        _writer.print("=\"");
-        _writer.print(value);
-        _writer.print('"');
-    }
-
-    /**
-     *  Writes an attribute into the most recently opened tag. This must be called after
-     *  {@link #begin(String)}
-     *  and before any other kind of writing (which closes the tag).
-     *
-     *  <p>The value may be null. A null value will be rendered as an empty string.
-     *
-     *  <p>Troublesome characters in the value are converted to thier GTML entities, much
-     *  like a <code>print()</code> method, with the following exceptions:
-     *  <ul>
-     *  <li>The double quote (&quot;) is converted to &amp;quot;
-     *  <li>The ampersand (&amp;) is passed through unchanged
-     *  </ul>
-     *
-     *  @throws IllegalStateException if there is no open tag.
-     *  @param name The name of the attribute to write (no validation
-     *  is done on the name).
-     *  @param value The value to write.  If null, the attribute
-     *  name is written as the value.  Otherwise, the
-     *  value is written, 
-     **/
-
-    public void attribute(String name, String value)
-    {
-        checkTagOpen();
-
-        _writer.print(' ');
-
-        // Could use a check here that name contains only valid characters
-
-        _writer.print(name);
-        _writer.print("=\"");
-
-        if (value != null)
-        {
-            int length = value.length();
-
-            if (_buffer == null || _buffer.length < length)
-                _buffer = new char[length];
-
-            value.getChars(0, length, _buffer, 0);
-
-            safePrint(_buffer, 0, length, true);
-        }
-
-        _writer.print('"');
-
-    }
-
-    /**
-      *  Similar to {@link #attribute(String, String)} but no escaping of invalid elements
-      *  is done for the value.
-      * 
-      *  @throws IllegalStateException if there is no open tag.
-      *
-      *  @since 3.0
-      *
-      **/
-    public void attributeRaw(String name, String value)
-    {
-        if (value == null)
-        {
-            attribute(name, value);
-            return;
-        }
-
-        checkTagOpen();
-
-        _writer.print(' ');
-
-        _writer.print(name);
-
-        _writer.print("=\"");
-        _writer.print(value);
-        _writer.print('"');
-    }
-
-    /**
-     * Closes any existing tag then starts a new element. The new element is pushed
-     * onto the active element stack.
-     **/
-
-    public void begin(String name)
-    {
-        if (_openTag)
-            closeTag();
-
-        push(name);
-
-        _writer.print('<');
-        _writer.print(name);
-
-        _openTag = true;
-        _emptyTag = false;
-    }
-
-    /**
-     * Starts an element that will not later be matched with an <code>end()</code>
-     * call. This is useful for elements such as &lt;hr;&gt; or &lt;br&gt; that
-     * do not need closing tags.
-     *
-     **/
-
-    public void beginEmpty(String name)
-    {
-        if (_openTag)
-            closeTag();
-
-        _writer.print('<');
-        _writer.print(name);
-
-        _openTag = true;
-        _emptyTag = true;
-    }
-
-    /**
-     * Invokes <code>checkError()</code> on the
-     *  <code>PrintWriter</code> used to format output.
-     **/
-
-    public boolean checkError()
-    {
-        return _writer.checkError();
-    }
-
-    private void checkTagOpen()
-    {
-        if (!_openTag)
-            throw new IllegalStateException(
-                Tapestry.getMessage("AbstractMarkupWriter.tag-not-open"));
-    }
-
-    /**
-     * Closes this <code>IMarkupWriter</code>. Any active elements are closed. The
-     * {@link PrintWriter} is then  sent {@link PrintWriter#close()}.
-     *
-     **/
-
-    public void close()
-    {
-        if (_openTag)
-            closeTag();
-
-        // Close any active elements.
-
-        while (_depth > 0)
-        {
-            _writer.print("</");
-            _writer.print(pop());
-            _writer.print('>');
-        }
-
-        if (_propagateClose)
-            _writer.close();
-
-        _writer = null;
-        _activeElementStack = null;
-        _buffer = null;
-    }
-
-    /**
-     *  Closes the most recently opened element by writing the '&gt;' that ends
-     *  it. May write a slash before the '&gt;' if the tag
-     *  was opened by {@link #beginEmpty(String)}.
-     * 
-     *  <p>Once this is invoked, the <code>attribute()</code> methods
-     *  may not be used until a new element is opened with {@link #begin(String)} or
-     *  or {@link #beginEmpty(String)}.
-     **/
-
-    public void closeTag()
-    {
-        if (_emptyTag)
-            _writer.print('/');
-
-        _writer.print('>');
-
-        _openTag = false;
-        _emptyTag = false;
-    }
-
-    /**
-     * Writes an GTML comment. Any open tag is first closed. 
-     * The method takes care of
-     * providing the <code>&lt;!--</code> and <code>--&gt;</code>, 
-     * including a blank line after the close of the comment.
-     *
-     * <p>Most characters are valid inside an GTML comment, so no check
-     * of the contents is made (much like {@link #printRaw(String)}.
-     *
-     **/
-
-    public void comment(String value)
-    {
-        if (_openTag)
-            closeTag();
-
-        _writer.print("<!-- ");
-        _writer.print(value);
-        _writer.println(" -->");
-    }
-
-    /**
-     * Ends the element most recently started by {@link #begin(String)}. 
-     * The name of the tag
-     * is popped off of the active element stack and used to form an GTML close tag.
-     *
-     * <p>TBD: Error checking for the open element stack empty.
-     **/
-
-    public void end()
-    {
-        if (_openTag)
-            closeTag();
-
-        _writer.print("</");
-        _writer.print(pop());
-        _writer.print('>');
-    }
-
-    /**
-     * Ends the most recently started element with the given name. This will
-     * also end any other intermediate elements. This is very useful for easily
-     * ending a table or even an entire page.
-     *
-     * <p>TBD: Error check if the name matches nothing on the open tag stack.
-     **/
-
-    public void end(String name)
-    {
-        if (_openTag)
-            closeTag();
-
-        while (true)
-        {
-            String tagName = pop();
-
-            _writer.print("</");
-            _writer.print(tagName);
-            _writer.print('>');
-
-            if (tagName.equals(name))
-                break;
-        }
-    }
-
-    /**
-     * Forwards <code>flush()</code> to this <code>AbstractMarkupWriter</code>'s 
-     * <code>PrintWriter</code>.
-     *
-     **/
-
-    public void flush()
-    {
-        _writer.flush();
-    }
-
-    /**
-     *  Removes the top element from the active element stack and returns it.
-     *
-     **/
-
-    protected final String pop()
-    {
-        String result = (String) _activeElementStack.pop();
-        _depth--;
-
-        return result;
-    }
-
-    /**
-     *
-     * The primary <code>print()</code> method, used by most other methods.
-     *
-     * <p>Prints the character array, first closing any open tag. Problematic characters
-     * ('&lt;', '&gt;' and '&amp;') are converted to their
-     * GTML entities.
-     *
-     * <p>All 'unsafe' characters are properly converted to either a named
-     * or numeric GTML entity.  This can be somewhat expensive, so use
-     * {@link #printRaw(char[], int, int)} if the data to print is guarenteed
-     * to be safe.
-     *
-     * <p>Does <em>nothing</em> if <code>data</code> is null.
-     *
-     * <p>Closes any open tag.
-     *
-     **/
-
-    public void print(char[] data, int offset, int length)
-    {
-        if (data == null)
-            return;
-
-        if (_openTag)
-            closeTag();
-
-        safePrint(data, offset, length, false);
-    }
-
-    /**
-     * Prints a single character. If the character is not a 'safe' character,
-     * such as '&lt;', then it's GTML entity (named or numeric) is printed instead.
-     *
-     * <p>Closes any open tag.
-     *
-     **/
-
-    public void print(char value)
-    {
-        if (_openTag)
-            closeTag();
-
-        if (value < _safe.length && _safe[value])
-        {
-            _writer.print(value);
-            return;
-        }
-
-        String entity = null;
-
-        if (value < _entities.length)
-            entity = _entities[value];
-
-        if (entity != null)
-        {
-            _writer.print(entity);
-            return;
-        }
-
-        // Not a well-known entity.  Print it's numeric equivalent.  Note:  this omits
-        // the leading '0', but most browsers (IE 5.0) don't seem to mind.  Is this a bug?
-
-        _writer.print("&#" + (int) value + ";");
-    }
-
-    /**
-     * Prints an integer.
-     *
-     * <p>Closes any open tag.
-     *
-     **/
-
-    public void print(int value)
-    {
-        if (_openTag)
-            closeTag();
-
-        _writer.print(value);
-    }
-
-    /**
-     * Invokes {@link #print(char[], int, int)} to print the string.  Use
-     * {@link #printRaw(String)} if the character data is known to be safe.
-     *
-     * <p>Does <em>nothing</em> if <code>value</code> is null.
-     *
-     * <p>Closes any open tag.
-     *
-     * @see #print(char[], int, int)
-     *
-     **/
-
-    public void print(String value)
-    {
-        if (value == null)
-            return;
-
-        int length = value.length();
-
-        if (_buffer == null || _buffer.length < length)
-            _buffer = new char[length];
-
-        value.getChars(0, length, _buffer, 0);
-
-        print(_buffer, 0, length);
-    }
-
-    /**
-     * Closes the open tag (if any), then prints a line seperator to the output stream.
-     *
-     **/
-
-    public void println()
-    {
-        if (_openTag)
-            closeTag();
-
-        _writer.println();
-    }
-
-    /**
-     * Prints and portion of an output buffer to the stream.
-     * No escaping of invalid GTML elements is done, which
-     * makes this more effecient than <code>print()</code>. 
-     * Does <em>nothing</em> if <code>buffer</code>
-     * is null.
-     *
-     * <p>Closes any open tag.
-     *
-     **/
-
-    public void printRaw(char[] buffer, int offset, int length)
-    {
-        if (buffer == null)
-            return;
-
-        if (_openTag)
-            closeTag();
-
-        _writer.write(buffer, offset, length);
-    }
-
-    /**
-     * Prints output to the stream. No escaping of invalid GTML elements is done, which
-     * makes this more effecient than <code>print()</code>. Does <em>nothing</em> 
-     * if <code>value</code>
-     * is null.
-     *
-     * <p>Closes any open tag.
-     *
-     **/
-
-    public void printRaw(String value)
-    {
-        if (value == null)
-            return;
-
-        if (_openTag)
-            closeTag();
-
-        _writer.print(value);
-    }
-
-    /**
-     *  Adds an element to the active element stack.
-     *
-     **/
-
-    protected final void push(String name)
-    {
-        if (_activeElementStack == null)
-            _activeElementStack = new Stack();
-
-        _activeElementStack.push(name);
-
-        _depth++;
-    }
-
-    /**
-     * Internal support for safe printing.  Ensures that all characters emitted
-     * are safe: either valid GTML characters or GTML entities (named or numeric).
-     **/
-
-    private void safePrint(char[] data, int offset, int length, boolean isAttribute)
-    {
-        int safelength = 0;
-        int start = offset;
-
-        for (int i = 0; i < length; i++)
-        {
-            char ch = data[offset + i];
-
-            // Ignore safe characters.  In an attribute, quotes
-            // are not ok and are escaped.
-
-            boolean isSafe = (ch < _safe.length && _safe[ch]);
-
-            if (isAttribute && ch == '"')
-                isSafe = false;
-
-            if (isSafe)
-            {
-                safelength++;
-                continue;
-            }
-
-            // Write the safe stuff.
-
-            if (safelength > 0)
-                _writer.write(data, start, safelength);
-
-            String entity = null;
-
-            // Look for a known entity.
-
-            if (ch < _entities.length)
-                entity = _entities[ch];
-
-            // Failing that, emit a numeric entity.
-
-            if (entity == null)
-                entity = "&#" + (int) ch + ";";
-
-            _writer.print(entity);
-
-            start = offset + i + 1;
-            safelength = 0;
-        }
-
-        if (safelength > 0)
-            _writer.write(data, start, safelength);
-    }
-
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/AbstractPage.java b/3.0.4/framework/src/org/apache/tapestry/AbstractPage.java
deleted file mode 100644
index 67ad269..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/AbstractPage.java
+++ /dev/null
@@ -1,576 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry;
-
-import java.io.OutputStream;
-import java.util.EventListener;
-import java.util.Locale;
-
-import javax.swing.event.EventListenerList;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.tapestry.event.ChangeObserver;
-import org.apache.tapestry.event.PageDetachListener;
-import org.apache.tapestry.event.PageEvent;
-import org.apache.tapestry.event.PageRenderListener;
-import org.apache.tapestry.event.PageValidateListener;
-import org.apache.tapestry.util.StringSplitter;
-
-/**
- *  Abstract base class implementing the {@link IPage} interface.
- *
- *  @version $Id$
- *  @author Howard Lewis Ship, David Solis
- *  @since 0.2.9
- * 
- **/
-
-public abstract class AbstractPage extends BaseComponent implements IPage
-{
-    private static final Log LOG = LogFactory.getLog(AbstractPage.class);
-
-    /**
-     *  Object to be notified when a observered property changes.  Observered
-     *  properties are the ones that will be persisted between request cycles.
-     *  Unobserved properties are reconstructed.
-     *
-     **/
-
-    private ChangeObserver _changeObserver;
-
-    /**
-     *  The {@link IEngine} the page is currently attached to.
-     *
-     **/
-
-    private IEngine _engine;
-
-    /**
-     *  The visit object, if any, for the application.  Set inside
-     *  {@link #attach(IEngine)} and cleared
-     *  by {@link #detach()}.
-     *
-     **/
-
-    private Object _visit;
-
-    /**
-     *  The qualified name of the page, which may be prefixed by the
-     *  namespace.
-     * 
-     *  @since 2.3
-     * 
-     **/
-
-    private String _pageName;
-
-    /**
-     *  Set when the page is attached to the engine.
-     *
-     **/
-
-    private IRequestCycle _requestCycle;
-
-    /**
-     *  The locale of the page, initially determined from the {@link IEngine engine}.
-     *
-     **/
-
-    private Locale _locale;
-
-    /**
-     *  A list of listeners for the page.
-     *  @see PageRenderListener
-     *  @see PageDetachListener
-     *
-     *  @since 1.0.5
-     **/
-
-    private EventListenerList _listenerList;
-    
-    
-    /**
-     *  The output encoding to be used when rendering this page.
-     *  This value is cached from the engine.
-     *
-     *  @since 3.0
-     **/
-    private String _outputEncoding;
-
-    /**
-     *  Standard constructor; invokes {@link #initialize()}
-     *  to configure initial values for properties
-     *  of the page.
-     * 
-     *  @since 2.2
-     * 
-     **/
-
-    public AbstractPage()
-    {
-        initialize();
-    }
-
-    /**
-     *  Implemented in subclasses to provide a particular kind of
-     *  response writer (and therefore, a particular kind of
-     *  content).
-     *
-     **/
-
-    abstract public IMarkupWriter getResponseWriter(OutputStream out);
-
-    /**
-     *  Prepares the page to be returned to the pool.
-     *  <ul>
-     *  <li>Clears the changeObserved property
-     *	<li>Invokes {@link PageDetachListener#pageDetached(PageEvent)} on all listeners
-     *  <li>Invokes {@link #initialize()} to clear/reset any properties	
-     * <li>Clears the engine, visit and requestCycle properties
-     *	</ul>
-     *
-     *  <p>Subclasses may override this method, but must invoke this
-     *  implementation (usually, last).
-     *
-     **/
-
-    public void detach()
-    {
-    	Tapestry.addMethodInvocation(Tapestry.ABSTRACTPAGE_DETACH_METHOD_ID);
-    	
-        // Do this first,so that any changes to persistent properties do not
-        // cause errors.
-
-        _changeObserver = null;
-
-        firePageDetached();
-
-        initialize();
-
-        _engine = null;
-        _visit = null;
-        _requestCycle = null;
-    }
-
-    /**
-     *  Method invoked from the constructor, and from
-     *  {@link #detach()} to (re-)initialize properties
-     *  of the page.  This is most useful when
-     *  properties have non-null initial values.
-     * 
-     *  <p>Subclasses may override this implementation
-     *  (which is empty).
-     * 
-     *  @since 2.2
-     * 
-     **/
-
-    protected void initialize()
-    {
-        // Does nothing.
-    }
-
-    public IEngine getEngine()
-    {
-        return _engine;
-    }
-
-    public ChangeObserver getChangeObserver()
-    {
-        return _changeObserver;
-    }
-
-    /**
-     *  Returns the name of the page.
-     *
-     **/
-
-    public String getExtendedId()
-    {
-        return _pageName;
-    }
-
-    /**
-     *  Pages always return null for idPath.
-     *
-     **/
-
-    public String getIdPath()
-    {
-        return null;
-    }
-
-    /**
-     *  Returns the locale for the page, which may be null if the
-     *  locale is not known (null corresponds to the "default locale").
-     *
-     **/
-
-    public Locale getLocale()
-    {
-        return _locale;
-    }
-
-    public void setLocale(Locale value)
-    {
-        if (_locale != null)
-            throw new ApplicationRuntimeException(
-                Tapestry.getMessage("AbstractPage.attempt-to-change-locale"));
-
-        _locale = value;
-    }
-
-    public IComponent getNestedComponent(String path)
-    {
-        StringSplitter splitter;
-        IComponent current;
-        String[] elements;
-        int i;
-
-        if (path == null)
-            return this;
-
-        splitter = new StringSplitter('.');
-        current = this;
-
-        elements = splitter.splitToArray(path);
-        for (i = 0; i < elements.length; i++)
-        {
-            current = current.getComponent(elements[i]);
-        }
-
-        return current;
-
-    }
-
-    /**
-     *  Called by the {@link IEngine engine} to attach the page
-     *  to itself.  Does
-     *  <em>not</em> change the locale, but since a page is selected
-     *  from the {@link org.apache.tapestry.engine.IPageSource} pool based on its
-     *  locale matching the engine's locale, they should match
-     *  anyway.
-     *
-     **/
-
-    public void attach(IEngine value)
-    {
-        if (_engine != null)
-            LOG.error(this +" attach(" + value + "), but engine = " + _engine);
-
-        _engine = value;
-    }
-
-    /**
-     *
-     * <ul>
-     *  <li>Invokes {@link PageRenderListener#pageBeginRender(PageEvent)}
-     *  <li>Invokes {@link #beginResponse(IMarkupWriter, IRequestCycle)}
-     *  <li>Invokes {@link IRequestCycle#commitPageChanges()} (if not rewinding)
-     *  <li>Invokes {@link #render(IMarkupWriter, IRequestCycle)}
-     *  <li>Invokes {@link PageRenderListener#pageEndRender(PageEvent)} (this occurs
-     *  even if a previous step throws an exception)
-     *
-     **/
-
-    public void renderPage(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        try
-        {
-            firePageBeginRender();
-
-            beginResponse(writer, cycle);
-
-            if (!cycle.isRewinding())
-                cycle.commitPageChanges();
-
-            render(writer, cycle);
-        }
-        finally
-        {
-            firePageEndRender();
-        }
-    }
-
-    public void setChangeObserver(ChangeObserver value)
-    {
-        _changeObserver = value;
-    }
-
-    /** @since 3.0 **/
-
-    public void setPageName(String pageName)
-    {
-        if (_pageName != null)
-            throw new ApplicationRuntimeException(
-                Tapestry.getMessage("AbstractPage.attempt-to-change-name"));
-
-        _pageName = pageName;
-    }
-
-    /**
-     *  By default, pages are not protected and this method does nothing.
-     *
-     **/
-
-    public void validate(IRequestCycle cycle)
-    {
-        Tapestry.addMethodInvocation(Tapestry.ABSTRACTPAGE_VALIDATE_METHOD_ID);
-
-        firePageValidate();
-    }
-
-    /**
-     *  Does nothing, subclasses may override as needed.
-     *
-     * @deprecated To be removed in 3.1.  Implement 
-     * {@link PageRenderListener} instead.
-     *
-     **/
-
-    public void beginResponse(IMarkupWriter writer, IRequestCycle cycle)
-    {
-    }
-
-    public IRequestCycle getRequestCycle()
-    {
-        return _requestCycle;
-    }
-
-    public void setRequestCycle(IRequestCycle value)
-    {
-        _requestCycle = value;
-    }
-
-    /**
-     *  Returns the visit object obtained from the engine via
-     *  {@link IEngine#getVisit(IRequestCycle)}.
-     *
-     **/
-
-    public Object getVisit()
-    {
-        if (_visit == null)
-            _visit = _engine.getVisit(_requestCycle);
-
-        return _visit;
-    }
-
-    /**
-     *  Convienience methods, simply invokes
-     *  {@link IEngine#getGlobal()}.
-     * 
-     *  @since 2.3
-     * 
-     **/
-
-    public Object getGlobal()
-    {
-        return _engine.getGlobal();
-    }
-
-    public void addPageDetachListener(PageDetachListener listener)
-    {
-        addListener(PageDetachListener.class, listener);
-    }
-
-    private void addListener(Class listenerClass, EventListener listener)
-    {
-        if (_listenerList == null)
-            _listenerList = new EventListenerList();
-
-        _listenerList.add(listenerClass, listener);
-    }
-
-    /**
-     *  @since 2.1-beta-2
-     * 
-     **/
-
-    private void removeListener(Class listenerClass, EventListener listener)
-    {
-        if (_listenerList != null)
-            _listenerList.remove(listenerClass, listener);
-    }
-
-    public void addPageRenderListener(PageRenderListener listener)
-    {
-        addListener(PageRenderListener.class, listener);
-    }
-
-    /**
-     *  @since 1.0.5
-     *
-     **/
-
-    protected void firePageDetached()
-    {
-        if (_listenerList == null)
-            return;
-
-        PageEvent event = null;
-        Object[] listeners = _listenerList.getListenerList();
-
-        for (int i = 0; i < listeners.length; i += 2)
-        {
-            if (listeners[i] == PageDetachListener.class)
-            {
-                PageDetachListener l = (PageDetachListener) listeners[i + 1];
-
-                if (event == null)
-                    event = new PageEvent(this, _requestCycle);
-
-                l.pageDetached(event);
-            }
-        }
-    }
-
-    /**
-     *  @since 1.0.5
-     *
-     **/
-
-    protected void firePageBeginRender()
-    {
-        if (_listenerList == null)
-            return;
-
-        PageEvent event = null;
-        Object[] listeners = _listenerList.getListenerList();
-
-        for (int i = 0; i < listeners.length; i += 2)
-        {
-            if (listeners[i] == PageRenderListener.class)
-            {
-                PageRenderListener l = (PageRenderListener) listeners[i + 1];
-
-                if (event == null)
-                    event = new PageEvent(this, _requestCycle);
-
-                l.pageBeginRender(event);
-            }
-        }
-    }
-
-    /**
-     *  @since 1.0.5
-     *
-     **/
-
-    protected void firePageEndRender()
-    {
-        if (_listenerList == null)
-            return;
-
-        PageEvent event = null;
-        Object[] listeners = _listenerList.getListenerList();
-
-        for (int i = 0; i < listeners.length; i += 2)
-        {
-            if (listeners[i] == PageRenderListener.class)
-            {
-                PageRenderListener l = (PageRenderListener) listeners[i + 1];
-
-                if (event == null)
-                    event = new PageEvent(this, _requestCycle);
-
-                l.pageEndRender(event);
-            }
-        }
-    }
-
-    /**
-     *  @since 2.1-beta-2
-     * 
-     **/
-
-    public void removePageDetachListener(PageDetachListener listener)
-    {
-        removeListener(PageDetachListener.class, listener);
-    }
-
-    public void removePageRenderListener(PageRenderListener listener)
-    {
-        removeListener(PageRenderListener.class, listener);
-    }
-
-    /** @since 2.2 **/
-
-    public void beginPageRender()
-    {
-        firePageBeginRender();
-    }
-
-    /** @since 2.2 **/
-
-    public void endPageRender()
-    {
-        firePageEndRender();
-    }
-
-    /** @since 3.0 **/
-
-    public String getPageName()
-    {
-        return _pageName;
-    }
-
-    public void addPageValidateListener(PageValidateListener listener)
-    {
-        addListener(PageValidateListener.class, listener);
-    }
-
-    public void removePageValidateListener(PageValidateListener listener)
-    {
-        removeListener(PageValidateListener.class, listener);
-    }
-
-    protected void firePageValidate()
-    {
-        if (_listenerList == null)
-            return;
-
-        PageEvent event = null;
-        Object[] listeners = _listenerList.getListenerList();
-
-        for (int i = 0; i < listeners.length; i += 2)
-        {
-            if (listeners[i] == PageValidateListener.class)
-            {
-                PageValidateListener l = (PageValidateListener) listeners[i + 1];
-
-                if (event == null)
-                    event = new PageEvent(this, _requestCycle);
-
-                l.pageValidate(event);
-            }
-        }
-    }
-
-    /**
-     *  Returns the output encoding to be used when rendering this page.
-     *  This value is usually cached from the Engine.
-     * 
-     *  @since 3.0
-     **/
-    protected String getOutputEncoding()
-    {
-        if (_outputEncoding == null)
-            _outputEncoding = getEngine().getOutputEncoding();
-        
-        return _outputEncoding;
-    }
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/ApplicationRuntimeException.java b/3.0.4/framework/src/org/apache/tapestry/ApplicationRuntimeException.java
deleted file mode 100644
index dfcf792..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/ApplicationRuntimeException.java
+++ /dev/null
@@ -1,83 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry;
-
-/**
- *  General wrapper for any exception (normal or runtime) that may occur during
- *  runtime processing for the application.  This exception is used
- *  when the intent is to communicate a low-level failure to the user or
- *  developer; it is not expected to be caught.  The {@link #getCause() rootCause}
- *  property is a <em>nested</em> exception (Tapestry supported this concept
- *  long before the JDK did).
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- **/
-
-public class ApplicationRuntimeException extends RuntimeException implements ILocatable
-{
-    private Throwable _rootCause;
-    private transient ILocation _location;
-    private transient Object _component;
-
-    public ApplicationRuntimeException(Throwable rootCause)
-    {
-        this(rootCause.getMessage(), rootCause);
-    }
-
-    public ApplicationRuntimeException(String message)
-    {
-        this(message, null, null, null);
-    }
-
-    public ApplicationRuntimeException(String message, Throwable rootCause)
-    {
-        this(message, null, null, rootCause);
-    }
-
-    public ApplicationRuntimeException(
-        String message,
-        Object component,
-        ILocation location,
-        Throwable rootCause)
-    {
-        super(message);
-
-        _rootCause = rootCause;
-        _component = component;
-
-        _location = Tapestry.findLocation(new Object[] { location, rootCause, component });
-    }
-
-    public ApplicationRuntimeException(String message, ILocation location, Throwable rootCause)
-    {
-        this(message, null, location, rootCause);
-    }
-
-    public Throwable getCause()
-    {
-        return _rootCause;
-    }
-
-    public ILocation getLocation()
-    {
-        return _location;
-    }
-
-    public Object getComponent()
-    {
-        return _component;
-    }
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/ApplicationServlet.java b/3.0.4/framework/src/org/apache/tapestry/ApplicationServlet.java
deleted file mode 100644
index 80ce4a0..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/ApplicationServlet.java
+++ /dev/null
@@ -1,807 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.Locale;
-
-import javax.servlet.ServletConfig;
-import javax.servlet.ServletContext;
-import javax.servlet.ServletException;
-import javax.servlet.http.Cookie;
-import javax.servlet.http.HttpServlet;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import javax.servlet.http.HttpSession;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.tapestry.engine.BaseEngine;
-import org.apache.tapestry.engine.IPropertySource;
-import org.apache.tapestry.parse.SpecificationParser;
-import org.apache.tapestry.request.RequestContext;
-import org.apache.tapestry.resource.ClasspathResourceLocation;
-import org.apache.tapestry.resource.ContextResourceLocation;
-import org.apache.tapestry.spec.ApplicationSpecification;
-import org.apache.tapestry.spec.IApplicationSpecification;
-import org.apache.tapestry.util.DefaultResourceResolver;
-import org.apache.tapestry.util.DelegatingPropertySource;
-import org.apache.tapestry.util.JanitorThread;
-import org.apache.tapestry.util.ServletContextPropertySource;
-import org.apache.tapestry.util.ServletPropertySource;
-import org.apache.tapestry.util.SystemPropertiesPropertySource;
-import org.apache.tapestry.util.exception.ExceptionAnalyzer;
-import org.apache.tapestry.util.pool.Pool;
-import org.apache.tapestry.util.xml.DocumentParseException;
-
-/**
- *  Links a servlet container with a Tapestry application.  The servlet has some
- *  responsibilities related to bootstrapping the application (in terms of
- *  logging, reading the {@link ApplicationSpecification specification}, etc.).
- *  It is also responsible for creating or locating the {@link IEngine} and delegating
- *  incoming requests to it.
- * 
- *  <p>The servlet init parameter
- *  <code>org.apache.tapestry.specification-path</code>
- *  should be set to the complete resource path (within the classpath)
- *  to the application specification, i.e.,
- *  <code>/com/foo/bar/MyApp.application</code>. 
- *
- *  <p>In some servlet containers (notably
- *  <a href="www.bea.com"/>WebLogic</a>)
- *  it is necessary to invoke {@link HttpSession#setAttribute(String,Object)}
- *  in order to force a persistent value to be replicated to the other
- *  servers in the cluster.  Tapestry applications usually only have a single
- *  persistent value, the {@link IEngine engine}.  For persistence to
- *  work in such an environment, the
- *  JVM system property <code>org.apache.tapestry.store-engine</code>
- *  must be set to <code>true</code>.  This will force the application
- *  servlet to restore the engine into the {@link HttpSession} at the
- *  end of each request cycle.
- * 
- *  <p>As of release 1.0.1, it is no longer necessary for a {@link HttpSession}
- *  to be created on the first request cycle.  Instead, the HttpSession is created
- *  as needed by the {@link IEngine} ... that is, when a visit object is created,
- *  or when persistent page state is required.  Otherwise, for sessionless requests,
- *  an {@link IEngine} from a {@link Pool} is used.  Additional work must be done
- *  so that the {@link IEngine} can change locale <em>without</em> forcing 
- *  the creation of a session; this involves the servlet and the engine storing
- *  locale information in a {@link Cookie}.
- * 
- *  @version $Id$
- *  @author Howard Lewis Ship
- * 
- **/
-
-public class ApplicationServlet extends HttpServlet
-{
-    private static final Log LOG = LogFactory.getLog(ApplicationServlet.class);
-
-    /** @since 2.3 **/
-
-    private static final String APP_SPEC_PATH_PARAM =
-        "org.apache.tapestry.application-specification";
-
-    /**
-     *  Name of the cookie written to the client web browser to
-     *  identify the locale.
-     *
-     **/
-
-    private static final String LOCALE_COOKIE_NAME = "org.apache.tapestry.locale";
-
-    /**
-     *  A {@link Pool} used to store {@link IEngine engine}s that are not currently
-     *  in use.  The key is on {@link Locale}.
-     *
-     **/
-
-    private Pool _enginePool = new Pool();
-
-    /**
-     *  The application specification, which is read once and kept in memory
-     *  thereafter.
-     *
-     **/
-
-    private IApplicationSpecification _specification;
-
-    /**
-     * The name under which the {@link IEngine engine} is stored within the
-     * {@link HttpSession}.
-     *
-     **/
-
-    private String _attributeName;
-
-    /**
-     *  The resolved class name used to instantiate the engine.
-     * 
-     *  @since 3.0
-     * 
-     **/
-
-    private String _engineClassName;
-
-    /**
-     *  Used to search for configuration properties.
-     * 
-     *  
-     *  @since 3.0
-     * 
-     **/
-
-    private IPropertySource _propertySource;
-
-    /**
-     *  Invokes {@link #doService(HttpServletRequest, HttpServletResponse)}.
-     *
-     *  @since 1.0.6
-     *
-     **/
-
-    public void doGet(HttpServletRequest request, HttpServletResponse response)
-        throws IOException, ServletException
-    {
-        doService(request, response);
-    }
-
-    /**
-     *  @since 2.3
-     * 
-     **/
-
-    private IResourceResolver _resolver;
-
-    /**
-     * Handles the GET and POST requests. Performs the following:
-     * <ul>
-     * <li>Construct a {@link RequestContext}
-     * <li>Invoke {@link #getEngine(RequestContext)} to get or create the {@link IEngine}
-     * <li>Invoke {@link IEngine#service(RequestContext)} on the application
-     * </ul>
-     **/
-
-    protected void doService(HttpServletRequest request, HttpServletResponse response)
-        throws IOException, ServletException
-    {
-        RequestContext context = null;
-
-        try
-        {
-
-            // Create a context from the various bits and pieces.
-
-            context = createRequestContext(request, response);
-
-            // The subclass provides the engine.
-
-            IEngine engine = getEngine(context);
-
-            if (engine == null)
-                throw new ServletException(
-                    Tapestry.getMessage("ApplicationServlet.could-not-locate-engine"));
-
-            boolean dirty = engine.service(context);
-
-            HttpSession session = context.getSession();
-
-            // When there's an active session, we *may* store it into
-            // the HttpSession and we *will not* store the engine
-            // back into the engine pool.
-
-            if (session != null)
-            {
-                // If the service may have changed the engine and the
-                // special storeEngine flag is on, then re-save the engine
-                // into the session.  Otherwise, we only save the engine
-                // into the session when the session is first created (is new).
-
-                try
-                {
-
-                    boolean forceStore =
-                        engine.isStateful() && (session.getAttribute(_attributeName) == null);
-
-                    if (forceStore || dirty)
-                    {
-                        if (LOG.isDebugEnabled())
-                            LOG.debug("Storing " + engine + " into session as " + _attributeName);
-
-                        session.setAttribute(_attributeName, engine);
-                    }
-                }
-                catch (IllegalStateException ex)
-                {
-                    // Ignore because the session been's invalidated.
-                    // Allow the engine (which has state particular to the client)
-                    // to be reclaimed by the garbage collector.
-
-                    if (LOG.isDebugEnabled())
-                        LOG.debug("Session invalidated.");
-                }
-
-                // The engine is stateful and stored in a session.  Even if it started
-                // the request cycle in the pool, it doesn't go back.
-
-                return;
-            }
-
-            if (engine.isStateful())
-            {
-                LOG.error(
-                    Tapestry.format(
-                        "ApplicationServlet.engine-stateful-without-session",
-                        engine));
-                return;
-            }
-
-            // No session; the engine contains no state particular to
-            // the client (except for locale).  Don't throw it away,
-            // instead save it in a pool for later reuse (by this, or another
-            // client in the same locale).
-
-            if (LOG.isDebugEnabled())
-                LOG.debug("Returning " + engine + " to pool.");
-
-            _enginePool.store(engine.getLocale(), engine);
-
-        }
-        catch (ServletException ex)
-        {
-            log("ServletException", ex);
-
-            show(ex);
-
-            // Rethrow it.
-
-            throw ex;
-        }
-        catch (IOException ex)
-        {
-            log("IOException", ex);
-
-            show(ex);
-
-            // Rethrow it.
-
-            throw ex;
-        }
-        finally
-        {
-            if (context != null)
-                context.cleanup();
-        }
-
-    }
-
-    /**
-     *  Invoked by {@link #doService(HttpServletRequest, HttpServletResponse)} to create
-     *  the {@link RequestContext} for this request cycle.  Some applications may need to
-     *  replace the default RequestContext with a subclass for particular behavior.
-     * 
-     *  @since 2.3
-     * 
-     **/
-
-    protected RequestContext createRequestContext(
-        HttpServletRequest request,
-        HttpServletResponse response)
-        throws IOException
-    {
-        return new RequestContext(this, request, response);
-    }
-
-    protected void show(Exception ex)
-    {
-        System.err.println("\n\n**********************************************************\n\n");
-
-        new ExceptionAnalyzer().reportException(ex, System.err);
-
-        System.err.println("\n**********************************************************\n");
-
-    }
-
-    /**
-     *  Invokes {@link #doService(HttpServletRequest, HttpServletResponse)}.
-     *
-     *
-     **/
-
-    public void doPost(HttpServletRequest request, HttpServletResponse response)
-        throws IOException, ServletException
-    {
-        doService(request, response);
-    }
-
-    /**
-     *  Returns the application specification, which is read
-     *  by the {@link #init(ServletConfig)} method.
-     *
-     **/
-
-    public IApplicationSpecification getApplicationSpecification()
-    {
-        return _specification;
-    }
-
-    /**
-     *  Retrieves the {@link IEngine engine} that will process this
-     *  request.  This comes from one of the following places:
-     *  <ul>
-     *  <li>The {@link HttpSession}, if the there is one.
-     *  <li>From the pool of available engines
-     *  <li>Freshly created
-     *  </ul>
-     *
-     **/
-
-    protected IEngine getEngine(RequestContext context) throws ServletException
-    {
-        IEngine engine = null;
-        HttpSession session = context.getSession();
-
-        // If there's a session, then find the engine within it.
-
-        if (session != null)
-        {
-            engine = (IEngine) session.getAttribute(_attributeName);
-            if (engine != null)
-            {
-                if (LOG.isDebugEnabled())
-                    LOG.debug("Retrieved " + engine + " from session " + session.getId() + ".");
-
-                return engine;
-            }
-
-            if (LOG.isDebugEnabled())
-                LOG.debug("Session exists, but doesn't contain an engine.");
-        }
-
-        Locale locale = getLocaleFromRequest(context);
-
-        engine = (IEngine) _enginePool.retrieve(locale);
-
-        if (engine == null)
-        {
-            engine = createEngine(context);
-            engine.setLocale(locale);
-        }
-        else
-        {
-            if (LOG.isDebugEnabled())
-                LOG.debug("Using pooled engine " + engine + " (from locale " + locale + ").");
-        }
-
-        return engine;
-    }
-
-    /**
-     *  Determines the {@link Locale} for the incoming request.
-     *  This is determined from the locale cookie or, if not set,
-     *  from the request itself.  This may return null
-     *  if no locale is determined.
-     *
-     **/
-
-    protected Locale getLocaleFromRequest(RequestContext context) throws ServletException
-    {
-        Cookie cookie = context.getCookie(LOCALE_COOKIE_NAME);
-
-        if (cookie != null)
-            return Tapestry.getLocale(cookie.getValue());
-
-        return context.getRequest().getLocale();
-    }
-
-    /**
-     *  Reads the application specification when the servlet is
-     *  first initialized.  All {@link IEngine engine instances}
-     *  will have access to the specification via the servlet.
-     * 
-     *  @see #getApplicationSpecification()
-     *  @see #constructApplicationSpecification()
-     *  @see #createResourceResolver()
-     *
-     **/
-
-    public void init(ServletConfig config) throws ServletException
-    {
-        super.init(config);
-
-        _resolver = createResourceResolver();
-
-        _specification = constructApplicationSpecification();
-
-        _attributeName = "org.apache.tapestry.engine:" + config.getServletName();
-    }
-
-    /**
-     *  Invoked from {@link #init(ServletConfig)} to create a resource resolver
-     *  for the servlet (which will utlimately be shared and used through the
-     *  application).
-     * 
-     *  <p>This implementation constructs a {@link DefaultResourceResolver}, subclasses
-     *  may provide a different implementation.
-     * 
-     *  @see #getResourceResolver()
-     *  @since 2.3
-     * 
-     **/
-
-    protected IResourceResolver createResourceResolver() throws ServletException
-    {
-        return new DefaultResourceResolver();
-    }
-
-    /**
-     *  Invoked from {@link #init(ServletConfig)} to read and construct
-     *  the {@link ApplicationSpecification} for this servlet.
-     *  Invokes {@link #getApplicationSpecificationPath()}, opens
-     *  the resource as a stream, then invokes
-     *  {@link #parseApplicationSpecification(IResourceLocation)}.
-     * 
-     *  <p>
-     *  This method exists to be overriden in
-     *  applications where the application specification cannot be
-     *  loaded from the classpath.  Alternately, a subclass
-     *  could override this method, invoke this implementation,
-     *  and then add additional data to it (for example, an application
-     *  where some of the pages are defined in an external source
-     *  such as a database).
-     *  
-     *  @since 2.2
-     * 
-     **/
-
-    protected IApplicationSpecification constructApplicationSpecification() throws ServletException
-    {
-        IResourceLocation specLocation = getApplicationSpecificationLocation();
-
-        if (specLocation == null)
-        {
-            if (LOG.isDebugEnabled())
-                LOG.debug(Tapestry.getMessage("ApplicationServlet.no-application-specification"));
-
-            return constructStandinSpecification();
-        }
-
-        if (LOG.isDebugEnabled())
-            LOG.debug("Loading application specification from " + specLocation);
-
-        return parseApplicationSpecification(specLocation);
-    }
-
-    /**
-     *  Gets the location of the application specification, if there is one.
-     *  
-     *  <ul>
-     *  <li>Invokes {@link #getApplicationSpecificationPath()} to get the
-     *  location of the application specification on the classpath.
-     *  <li>If that return null, search for the application specification:
-     *  <ul>
-     *  <li><i>name</i>.application in /WEB-INF/<i>name</i>/
-     *  <li><i>name</i>.application in /WEB-INF/
-     *  </ul>
-     *  </ul>
-     * 
-     *  <p>Returns the location of the application specification, or null
-     *  if not found.
-     * 
-     *  @since 3.0
-     * 
-     **/
-
-    protected IResourceLocation getApplicationSpecificationLocation() throws ServletException
-    {
-        String path = getApplicationSpecificationPath();
-
-        if (path != null)
-            return new ClasspathResourceLocation(_resolver, path);
-
-        ServletContext context = getServletContext();
-        String servletName = getServletName();
-        String expectedName = servletName + ".application";
-
-        IResourceLocation webInfLocation = new ContextResourceLocation(context, "/WEB-INF/");
-        IResourceLocation webInfAppLocation = webInfLocation.getRelativeLocation(servletName + "/");
-
-        IResourceLocation result = check(webInfAppLocation, expectedName);
-        if (result != null)
-            return result;
-
-        return check(webInfLocation, expectedName);
-    }
-
-    /**
-     *  Checks for the application specification relative to the specified
-     *  location.
-     * 
-     *  @since 3.0
-     * 
-     **/
-
-    private IResourceLocation check(IResourceLocation location, String name)
-    {
-        IResourceLocation result = location.getRelativeLocation(name);
-
-        if (LOG.isDebugEnabled())
-            LOG.debug("Checking for existence of " + result);
-
-        if (result.getResourceURL() != null)
-        {
-            LOG.debug("Found.");
-            return result;
-        }
-
-        return null;
-    }
-
-    /**
-     *  Invoked from {@link #constructApplicationSpecification()} when
-     *  the application doesn't have an explicit specification.  A
-     *  simple specification is constructed and returned.  This is useful
-     *  for minimal applications and prototypes.
-     * 
-     *  @since 3.0
-     * 
-     **/
-
-    protected IApplicationSpecification constructStandinSpecification()
-    {
-        ApplicationSpecification result = new ApplicationSpecification();
-
-        IResourceLocation virtualLocation =
-            new ContextResourceLocation(getServletContext(), "/WEB-INF/");
-
-        result.setSpecificationLocation(virtualLocation);
-
-        result.setName(getServletName());
-        result.setResourceResolver(_resolver);
-
-        return result;
-    }
-
-    /**
-     *  Invoked from {@link #constructApplicationSpecification()} to
-     *  actually parse the stream (with content provided from the path)
-     *  and convert it into an {@link ApplicationSpecification}.
-     * 
-     *  @since 2.2
-     * 
-     **/
-
-    protected IApplicationSpecification parseApplicationSpecification(IResourceLocation location)
-        throws ServletException
-    {
-        try
-        {
-            SpecificationParser parser = new SpecificationParser(_resolver);
-
-            return parser.parseApplicationSpecification(location);
-        }
-        catch (DocumentParseException ex)
-        {
-            show(ex);
-
-            throw new ServletException(
-                Tapestry.format("ApplicationServlet.could-not-parse-spec", location),
-                ex);
-        }
-    }
-
-    /**
-     *  Closes the stream, ignoring any exceptions.
-     * 
-     **/
-
-    protected void close(InputStream stream)
-    {
-        try
-        {
-            if (stream != null)
-                stream.close();
-        }
-        catch (IOException ex)
-        {
-            // Ignore it.
-        }
-    }
-
-    /**
-     *  Reads the servlet init parameter
-     *  <code>org.apache.tapestry.application-specification</code>, which
-     *  is the location, on the classpath, of the application specification.
-     *
-     *  <p>
-     *  If the parameter is not set, this method returns null, and a search
-     *  for the application specification within the servlet context
-     *  will begin.
-     * 
-     *  @see #getApplicationSpecificationLocation()
-     * 
-     **/
-
-    protected String getApplicationSpecificationPath() throws ServletException
-    {
-        return getInitParameter(APP_SPEC_PATH_PARAM);
-    }
-
-    /**
-     *  Invoked by {@link #getEngine(RequestContext)} to create
-     *  the {@link IEngine} instance specific to the
-     *  application, if not already in the
-     *  {@link HttpSession}.
-     *
-     *  <p>The {@link IEngine} instance returned is stored into the
-     *  {@link HttpSession}.
-     *
-     *  @see #getEngineClassName()    
-     *
-     **/
-
-    protected IEngine createEngine(RequestContext context) throws ServletException
-    {
-        try
-        {
-            String className = getEngineClassName();
-
-            if (LOG.isDebugEnabled())
-                LOG.debug("Creating engine from class " + className);
-
-            Class engineClass = getResourceResolver().findClass(className);
-
-            IEngine result = (IEngine) engineClass.newInstance();
-
-            if (LOG.isDebugEnabled())
-                LOG.debug("Created engine " + result);
-
-            return result;
-        }
-        catch (Exception ex)
-        {
-            throw new ServletException(ex);
-        }
-    }
-
-    /**
-     * 
-     *  Returns the name of the class to use when instantiating
-     *  an engine instance for this application.  
-     *  If the application specification
-     *  provides a value, this is returned.  Otherwise, a search for
-     *  the configuration property 
-     *  <code>org.apache.tapestry.engine-class</code>
-     *  occurs (see {@link #searchConfiguration(String)}).
-     * 
-     *  <p>If the search is still unsuccessful, then
-     *  {@link org.apache.tapestry.engine.BaseEngine} is used.
-     * 
-     **/
-
-    protected String getEngineClassName()
-    {
-        if (_engineClassName != null)
-            return _engineClassName;
-
-        _engineClassName = _specification.getEngineClassName();
-
-        if (_engineClassName == null)
-            _engineClassName = searchConfiguration("org.apache.tapestry.engine-class");
-
-        if (_engineClassName == null)
-            _engineClassName = BaseEngine.class.getName();
-
-        return _engineClassName;
-    }
-
-    /**
-     *  Searches for a configuration property in:
-     *  <ul>
-     *  <li>The servlet's initial parameters
-     *  <li>The servlet context's initial parameters
-     *  <li>JVM system properties
-     *  </ul>
-     * 
-     *  @see #createPropertySource()
-     *  @since 3.0
-     * 
-     **/
-
-    protected String searchConfiguration(String propertyName)
-    {
-        if (_propertySource == null)
-            _propertySource = createPropertySource();
-
-        return _propertySource.getPropertyValue(propertyName);
-    }
-
-    /**
-     *  Creates an instance of {@link IPropertySource} used for
-     *  searching of configuration values.  Subclasses may override
-     *  this method if they want to change the normal locations
-     *  that properties are searched for within.
-     * 
-     *  @since 3.0
-     * 
-     **/
-
-    protected IPropertySource createPropertySource()
-    {
-        DelegatingPropertySource result = new DelegatingPropertySource();
-
-        result.addSource(new ServletPropertySource(getServletConfig()));
-        result.addSource(new ServletContextPropertySource(getServletContext()));
-        result.addSource(SystemPropertiesPropertySource.getInstance());
-
-        return result;
-    }
-
-    /**
-     *  Invoked from the {@link IEngine engine}, just prior to starting to
-     *  render a response, when the locale has changed.  The servlet writes a
-     *  {@link Cookie} so that, on subsequent request cycles, an engine localized
-     *  to the selected locale is chosen.
-     *
-     *  <p>At this time, the cookie is <em>not</em> persistent.  That may
-     *  change in subsequent releases.
-     *
-     *  @since 1.0.1
-     **/
-
-    public void writeLocaleCookie(Locale locale, IEngine engine, RequestContext cycle)
-    {
-        if (LOG.isDebugEnabled())
-            LOG.debug("Writing locale cookie " + locale);
-
-        Cookie cookie = new Cookie(LOCALE_COOKIE_NAME, locale.toString());
-        cookie.setPath(engine.getServletPath());
-
-        cycle.addCookie(cookie);
-    }
-
-    /**
-     *  Returns a resource resolver that can access classes and resources related
-     *  to the current web application context.  Relies on
-     *  {@link java.lang.Thread#getContextClassLoader()}, which is set by
-     *  most modern servlet containers.
-     * 
-     *  @since 2.3
-     *
-     **/
-
-    public IResourceResolver getResourceResolver()
-    {
-        return _resolver;
-    }
-
-    /**
-     * Ensures that shared janitor thread is terminated.
-     * @see javax.servlet.Servlet#destroy()
-     * @since 3.0.3
-     */
-    public void destroy()
-    {
-        try
-        {
-            JanitorThread.getSharedJanitorThread().interrupt();
-        }
-        finally
-        {
-            super.destroy();
-        }
-    }
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/BaseComponent.java b/3.0.4/framework/src/org/apache/tapestry/BaseComponent.java
deleted file mode 100644
index b9f06f4..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/BaseComponent.java
+++ /dev/null
@@ -1,139 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.tapestry.engine.IPageLoader;
-import org.apache.tapestry.engine.IPageSource;
-import org.apache.tapestry.engine.ITemplateSource;
-import org.apache.tapestry.parse.ComponentTemplate;
-import org.apache.tapestry.spec.IComponentSpecification;
-
-/**
- * Base implementation for most components that use an HTML template.
- *
- * @author Howard Lewis Ship
- * @version $Id$
- * 
- **/
-
-public class BaseComponent extends AbstractComponent
-{
-    private static final Log LOG = LogFactory.getLog(BaseComponent.class);
-
-    private static final int OUTER_INIT_SIZE = 5;
-
-    private IRender[] _outer;
-    private int _outerCount = 0;
-
-    /**
-     *  Adds an element as an outer element for the receiver.  Outer
-     *  elements are elements that should be directly rendered by the
-     *  receiver's <code>render()</code> method.  That is, they are
-     *  top-level elements on the HTML template.
-     *
-     * 
-     **/
-
-    protected void addOuter(IRender element)
-    {
-        if (_outer == null)
-        {
-            _outer = new IRender[OUTER_INIT_SIZE];
-            _outer[0] = element;
-
-            _outerCount = 1;
-            return;
-        }
-
-        // No more room?  Make the array bigger.
-
-        if (_outerCount == _outer.length)
-        {
-            IRender[] newOuter;
-
-            newOuter = new IRender[_outer.length * 2];
-
-            System.arraycopy(_outer, 0, newOuter, 0, _outerCount);
-
-            _outer = newOuter;
-        }
-
-        _outer[_outerCount++] = element;
-    }
-
-    /**
-     *
-     *  Reads the receiver's template and figures out which elements wrap which
-     *  other elements.
-     *
-     *  <P>This is coded as a single, big, ugly method for efficiency.
-     * 
-     **/
-
-    private void readTemplate(IRequestCycle cycle, IPageLoader loader)
-    {
-        IPageSource pageSource = loader.getEngine().getPageSource();
-
-        if (LOG.isDebugEnabled())
-            LOG.debug(this +" reading template");
-
-        ITemplateSource source = loader.getTemplateSource();
-        ComponentTemplate componentTemplate = source.getTemplate(cycle, this);
-
-        // Most of the work is done inside the loader class. 
-        // We instantiate it just to invoke process() on it.
-        
-        new BaseComponentTemplateLoader(cycle, loader, this, componentTemplate, pageSource).process();
-
-        if (LOG.isDebugEnabled())
-            LOG.debug(this +" finished reading template");
-    }
-
-    /**
-     *   Renders the top level components contained by the receiver.
-     *
-     *   @since 2.0.3
-     **/
-
-    protected void renderComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        if (LOG.isDebugEnabled())
-            LOG.debug("Begin render " + getExtendedId());
-
-        for (int i = 0; i < _outerCount; i++)
-            _outer[i].render(writer, cycle);
-
-        if (LOG.isDebugEnabled())
-            LOG.debug("End render " + getExtendedId());
-    }
-
-    /**
-     *  Loads the template for the component, then invokes
-     *  {@link AbstractComponent#finishLoad(IRequestCycle, IPageLoader, IComponentSpecification)}.
-     *  Subclasses must invoke this method first,
-     *  before adding any additional behavior, though its usually
-     *  simpler to override {@link #finishLoad()} instead.
-     *
-     **/
-
-    public void finishLoad(IRequestCycle cycle, IPageLoader loader, IComponentSpecification specification)
-    {
-        readTemplate(cycle, loader);
-
-        super.finishLoad(cycle, loader, specification);
-    }
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/BaseComponentTemplateLoader.java b/3.0.4/framework/src/org/apache/tapestry/BaseComponentTemplateLoader.java
deleted file mode 100644
index 8150771..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/BaseComponentTemplateLoader.java
+++ /dev/null
@@ -1,660 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry;
-
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.Set;
-
-import org.apache.commons.lang.builder.ToStringBuilder;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.tapestry.binding.ExpressionBinding;
-import org.apache.tapestry.binding.StaticBinding;
-import org.apache.tapestry.binding.StringBinding;
-import org.apache.tapestry.engine.IPageLoader;
-import org.apache.tapestry.engine.IPageSource;
-import org.apache.tapestry.engine.ITemplateSource;
-import org.apache.tapestry.parse.AttributeType;
-import org.apache.tapestry.parse.CloseToken;
-import org.apache.tapestry.parse.ComponentTemplate;
-import org.apache.tapestry.parse.LocalizationToken;
-import org.apache.tapestry.parse.OpenToken;
-import org.apache.tapestry.parse.TemplateAttribute;
-import org.apache.tapestry.parse.TemplateToken;
-import org.apache.tapestry.parse.TextToken;
-import org.apache.tapestry.parse.TokenType;
-import org.apache.tapestry.spec.IComponentSpecification;
-import org.apache.tapestry.spec.IContainedComponent;
-
-/**
- *  Utility class instantiated by {@link org.apache.tapestry.BaseComponent} to
- *  process the component's {@link org.apache.tapestry.parse.ComponentTemplate template},
- *  which involves working through the nested structure of the template and hooking
- *  the various static template blocks and components together using
- *  {@link IComponent#addBody(IRender)} and 
- *  {@link org.apache.tapestry.BaseComponent#addOuter(IRender)}.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 3.0
- */
-
-public class BaseComponentTemplateLoader
-{
-    private static final Log LOG = LogFactory.getLog(BaseComponentTemplateLoader.class);
-
-    private IPageLoader _pageLoader;
-    private IRequestCycle _requestCycle;
-    private BaseComponent _loadComponent;
-    private IPageSource _pageSource;
-    private ComponentTemplate _template;
-    private IComponent[] _stack;
-    private int _stackx = 0;
-    private IComponent _activeComponent = null;
-    private Set _seenIds = new HashSet();
-
-    /**
-     *  A class used with invisible localizations.  Constructed
-     *  from a {@link TextToken}.
-     */
-
-    private static class LocalizedStringRender implements IRender
-    {
-        private IComponent _component;
-        private String _key;
-        private Map _attributes;
-        private String _value;
-        private boolean _raw;
-
-        private LocalizedStringRender(IComponent component, LocalizationToken token)
-        {
-            _component = component;
-            _key = token.getKey();
-            _raw = token.isRaw();
-            _attributes = token.getAttributes();
-        }
-
-        public void render(IMarkupWriter writer, IRequestCycle cycle)
-        {
-            if (cycle.isRewinding())
-                return;
-
-            if (_attributes != null)
-            {
-                writer.begin("span");
-
-                Iterator i = _attributes.entrySet().iterator();
-
-                while (i.hasNext())
-                {
-                    Map.Entry entry = (Map.Entry) i.next();
-                    String attributeName = (String) entry.getKey();
-                    String attributeValue = (String) entry.getValue();
-
-                    writer.attribute(attributeName, attributeValue);
-                }
-            }
-
-            if (_value == null)
-                _value = _component.getMessage(_key);
-
-            if (_raw)
-                writer.printRaw(_value);
-            else
-                writer.print(_value);
-
-            if (_attributes != null)
-                writer.end();
-        }
-
-        public String toString()
-        {
-            ToStringBuilder builder = new ToStringBuilder(this);
-
-            builder.append("component", _component);
-            builder.append("key", _key);
-            builder.append("raw", _raw);
-            builder.append("attributes", _attributes);
-
-            return builder.toString();
-        }
-
-    }
-
-    public BaseComponentTemplateLoader(
-        IRequestCycle requestCycle,
-        IPageLoader pageLoader,
-        BaseComponent loadComponent,
-        ComponentTemplate template,
-        IPageSource pageSource)
-    {
-        _requestCycle = requestCycle;
-        _pageLoader = pageLoader;
-        _loadComponent = loadComponent;
-        _template = template;
-        _pageSource = pageSource;
-
-        _stack = new IComponent[template.getTokenCount()];
-    }
-
-    public void process()
-    {
-        int count = _template.getTokenCount();
-
-        for (int i = 0; i < count; i++)
-        {
-            TemplateToken token = _template.getToken(i);
-
-            TokenType type = token.getType();
-
-            if (type == TokenType.TEXT)
-            {
-                process((TextToken) token);
-                continue;
-            }
-
-            if (type == TokenType.OPEN)
-            {
-                process((OpenToken) token);
-                continue;
-            }
-
-            if (type == TokenType.CLOSE)
-            {
-                process((CloseToken) token);
-                continue;
-            }
-
-            if (type == TokenType.LOCALIZATION)
-            {
-                process((LocalizationToken) token);
-                continue;
-            }
-        }
-
-        // This is also pretty much unreachable, and the message is kind of out
-        // of date, too.
-
-        if (_stackx != 0)
-            throw new ApplicationRuntimeException(
-                Tapestry.getMessage("BaseComponent.unbalance-open-tags"),
-                _loadComponent,
-                null,
-                null);
-
-        checkAllComponentsReferenced();
-    }
-
-    /**
-     *  Adds the token (which implements {@link IRender})
-     *  to the active component (using {@link IComponent#addBody(IRender)}),
-     *  or to this component {@link BaseComponent#addOuter(IRender)}.
-     * 
-     *  <p>
-     *  A check is made that the active component allows a body.
-     */
-
-    private void process(TextToken token)
-    {
-        if (_activeComponent == null)
-        {
-            _loadComponent.addOuter(token);
-            return;
-        }
-
-        if (!_activeComponent.getSpecification().getAllowBody())
-            throw createBodylessComponentException(_activeComponent);
-
-        _activeComponent.addBody(token);
-    }
-
-    private void process(OpenToken token)
-    {
-        String id = token.getId();
-        IComponent component = null;
-        String componentType = token.getComponentType();
-
-        if (componentType == null)
-            component = getEmbeddedComponent(id);
-        else
-        {
-            checkForDuplicateId(id, token.getLocation());
-
-            component = createImplicitComponent(id, componentType, token.getLocation());
-        }
-
-        // Make sure the template contains each component only once.
-
-        if (_seenIds.contains(id))
-            throw new ApplicationRuntimeException(
-                Tapestry.format(
-                    "BaseComponent.multiple-component-references",
-                    _loadComponent.getExtendedId(),
-                    id),
-                _loadComponent,
-                token.getLocation(),
-                null);
-
-        _seenIds.add(id);
-
-        if (_activeComponent == null)
-            _loadComponent.addOuter(component);
-        else
-        {
-            // Note: this code may no longer be reachable (because the
-            // template parser does this check first).
-
-            if (!_activeComponent.getSpecification().getAllowBody())
-                throw createBodylessComponentException(_activeComponent);
-
-            _activeComponent.addBody(component);
-        }
-
-        addTemplateBindings(component, token);
-
-        _stack[_stackx++] = _activeComponent;
-
-        _activeComponent = component;
-    }
-
-    private void checkForDuplicateId(String id, ILocation location)
-    {
-        if (id == null)
-            return;
-
-        IContainedComponent cc = _loadComponent.getSpecification().getComponent(id);
-
-        if (cc != null)
-            throw new ApplicationRuntimeException(
-                Tapestry.format(
-                    "BaseComponentTemplateLoader.dupe-component-id",
-                    id,
-                    location,
-                    cc.getLocation()),
-                _loadComponent,
-                location,
-                null);
-    }
-
-    private IComponent createImplicitComponent(String id, String componentType, ILocation location)
-    {
-        IComponent result =
-            _pageLoader.createImplicitComponent(
-                _requestCycle,
-                _loadComponent,
-                id,
-                componentType,
-                location);
-
-        return result;
-    }
-
-    private IComponent getEmbeddedComponent(String id)
-    {
-        return _loadComponent.getComponent(id);
-    }
-
-    private void process(CloseToken token)
-    {
-        // Again, this is pretty much impossible to reach because
-        // the template parser does a great job.
-
-        if (_stackx <= 0)
-            throw new ApplicationRuntimeException(
-                Tapestry.getMessage("BaseComponent.unbalanced-close-tags"),
-                _loadComponent,
-                token.getLocation(),
-                null);
-
-        // Null and forget the top element on the stack.
-
-        _stack[_stackx--] = null;
-
-        _activeComponent = _stack[_stackx];
-    }
-
-    private void process(LocalizationToken token)
-    {
-        IRender render = new LocalizedStringRender(_loadComponent, token);
-
-        if (_activeComponent == null)
-            _loadComponent.addOuter(render);
-        else
-            _activeComponent.addBody(render);
-    }
-
-    /**
-     *  Adds bindings based on attributes in the template.
-     */
-
-    private void addTemplateBindings(IComponent component, OpenToken token)
-    {
-        IComponentSpecification spec = component.getSpecification();
-
-        Map attributes = token.getAttributesMap();
-
-        if (attributes != null)
-        {
-            Iterator i = attributes.entrySet().iterator();
-
-            while (i.hasNext())
-            {
-                Map.Entry entry = (Map.Entry) i.next();
-
-                String name = (String) entry.getKey();
-                TemplateAttribute attribute = (TemplateAttribute) entry.getValue();
-                AttributeType type = attribute.getType();
-
-                if (type == AttributeType.OGNL_EXPRESSION)
-                {
-                    addExpressionBinding(
-                        component,
-                        spec,
-                        name,
-                        attribute.getValue(),
-                        token.getLocation());
-                    continue;
-                }
-
-                if (type == AttributeType.LOCALIZATION_KEY)
-                {
-                    addStringBinding(
-                        component,
-                        spec,
-                        name,
-                        attribute.getValue(),
-                        token.getLocation());
-                    continue;
-                }
-
-                if (type == AttributeType.LITERAL)
-                    addStaticBinding(
-                        component,
-                        spec,
-                        name,
-                        attribute.getValue(),
-                        token.getLocation());
-            }
-        }
-
-        // if the component defines a templateTag parameter and 
-        // there is no established binding for that parameter, 
-        // add a static binding carrying the template tag  
-        if (spec.getParameter(ITemplateSource.TEMPLATE_TAG_PARAMETER_NAME) != null
-            && component.getBinding(ITemplateSource.TEMPLATE_TAG_PARAMETER_NAME) == null)
-        {
-            addStaticBinding(
-                component,
-                spec,
-                ITemplateSource.TEMPLATE_TAG_PARAMETER_NAME,
-                token.getTag(),
-                token.getLocation());
-        }
-
-    }
-
-    /**
-     *  Adds an expression binding, checking for errors related
-     *  to reserved and informal parameters.
-     *
-     *  <p>It is an error to specify expression 
-     *  bindings in both the specification
-     *  and the template.
-     */
-
-    private void addExpressionBinding(
-        IComponent component,
-        IComponentSpecification spec,
-        String name,
-        String expression,
-        ILocation location)
-    {
-
-        // If matches a formal parameter name, allow it to be set
-        // unless there's already a binding.
-
-        boolean isFormal = (spec.getParameter(name) != null);
-
-        if (isFormal)
-        {
-            if (component.getBinding(name) != null)
-                throw new ApplicationRuntimeException(
-                    Tapestry.format(
-                        "BaseComponent.dupe-template-expression",
-                        name,
-                        component.getExtendedId(),
-                        _loadComponent.getExtendedId()),
-                    component,
-                    location,
-                    null);
-        }
-        else
-        {
-            if (!spec.getAllowInformalParameters())
-                throw new ApplicationRuntimeException(
-                    Tapestry.format(
-                        "BaseComponent.template-expression-for-informal-parameter",
-                        name,
-                        component.getExtendedId(),
-                        _loadComponent.getExtendedId()),
-                    component,
-                    location,
-                    null);
-
-            // If the name is reserved (matches a formal parameter
-            // or reserved name, caselessly), then skip it.
-
-            if (spec.isReservedParameterName(name))
-                throw new ApplicationRuntimeException(
-                    Tapestry.format(
-                        "BaseComponent.template-expression-for-reserved-parameter",
-                        name,
-                        component.getExtendedId(),
-                        _loadComponent.getExtendedId()),
-                    component,
-                    location,
-                    null);
-        }
-
-        IBinding binding =
-            new ExpressionBinding(
-                _pageSource.getResourceResolver(),
-                _loadComponent,
-                expression,
-                location);
-
-        component.setBinding(name, binding);
-    }
-
-    /**
-      *  Adds an expression binding, checking for errors related
-      *  to reserved and informal parameters.
-      *
-      *  <p>It is an error to specify expression 
-      *  bindings in both the specification
-      *  and the template.
-      */
-
-    private void addStringBinding(
-        IComponent component,
-        IComponentSpecification spec,
-        String name,
-        String localizationKey,
-        ILocation location)
-    {
-        // If matches a formal parameter name, allow it to be set
-        // unless there's already a binding.
-
-        boolean isFormal = (spec.getParameter(name) != null);
-
-        if (isFormal)
-        {
-            if (component.getBinding(name) != null)
-                throw new ApplicationRuntimeException(
-                    Tapestry.format(
-                        "BaseComponent.dupe-string",
-                        name,
-                        component.getExtendedId(),
-                        _loadComponent.getExtendedId()),
-                    component,
-                    location,
-                    null);
-        }
-        else
-        {
-            if (!spec.getAllowInformalParameters())
-                throw new ApplicationRuntimeException(
-                    Tapestry.format(
-                        "BaseComponent.template-expression-for-informal-parameter",
-                        name,
-                        component.getExtendedId(),
-                        _loadComponent.getExtendedId()),
-                    component,
-                    location,
-                    null);
-
-            // If the name is reserved (matches a formal parameter
-            // or reserved name, caselessly), then skip it.
-
-            if (spec.isReservedParameterName(name))
-                throw new ApplicationRuntimeException(
-                    Tapestry.format(
-                        "BaseComponent.template-expression-for-reserved-parameter",
-                        name,
-                        component.getExtendedId(),
-                        _loadComponent.getExtendedId()),
-                    component,
-                    location,
-                    null);
-        }
-
-        IBinding binding = new StringBinding(_loadComponent, localizationKey, location);
-
-        component.setBinding(name, binding);
-    }
-
-    /**
-     *  Adds a static binding, checking for errors related
-     *  to reserved and informal parameters.
-     * 
-     *  <p>
-     *  Static bindings that conflict with bindings in the
-     *  specification are quietly ignored.
-     */
-
-    private void addStaticBinding(
-        IComponent component,
-        IComponentSpecification spec,
-        String name,
-        String staticValue,
-        ILocation location)
-    {
-
-        if (component.getBinding(name) != null)
-            return;
-
-        // If matches a formal parameter name, allow it to be set
-        // unless there's already a binding.
-
-        boolean isFormal = (spec.getParameter(name) != null);
-
-        if (!isFormal)
-        {
-            // Skip informal parameters if the component doesn't allow them.
-
-            if (!spec.getAllowInformalParameters())
-                return;
-
-            // If the name is reserved (matches a formal parameter
-            // or reserved name, caselessly), then skip it.
-
-            if (spec.isReservedParameterName(name))
-                return;
-        }
-
-        IBinding binding = new StaticBinding(staticValue, location);
-
-        component.setBinding(name, binding);
-    }
-
-    private void checkAllComponentsReferenced()
-    {
-        // First, contruct a modifiable copy of the ids of all expected components
-        // (that is, components declared in the specification).
-
-        Map components = _loadComponent.getComponents();
-
-        Set ids = components.keySet();
-
-        // If the seen ids ... ids referenced in the template, matches
-        // all the ids in the specification then we're fine.
-
-        if (_seenIds.containsAll(ids))
-            return;
-
-        // Create a modifiable copy.  Remove the ids that are referenced in
-        // the template.  The remainder are worthy of note.
-
-        ids = new HashSet(ids);
-        ids.removeAll(_seenIds);
-
-        int count = ids.size();
-
-        String key =
-            (count == 1)
-                ? "BaseComponent.missing-component-spec-single"
-                : "BaseComponent.missing-component-spec-multi";
-
-        StringBuffer buffer =
-            new StringBuffer(Tapestry.format(key, _loadComponent.getExtendedId()));
-
-        Iterator i = ids.iterator();
-        int j = 1;
-
-        while (i.hasNext())
-        {
-            if (j == 1)
-                buffer.append(' ');
-            else
-                if (j == count)
-                {
-                    buffer.append(' ');
-                    buffer.append(Tapestry.getMessage("BaseComponent.and"));
-                    buffer.append(' ');
-                }
-                else
-                    buffer.append(", ");
-
-            buffer.append(i.next());
-
-            j++;
-        }
-
-        buffer.append('.');
-
-        LOG.error(buffer.toString());
-    }
-
-    protected ApplicationRuntimeException createBodylessComponentException(IComponent component)
-    {
-        return new ApplicationRuntimeException(
-            Tapestry.getMessage("BaseComponentTemplateLoader.bodyless-component"),
-            component,
-            null,
-            null);
-    }
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/BindingException.java b/3.0.4/framework/src/org/apache/tapestry/BindingException.java
deleted file mode 100644
index 094b274..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/BindingException.java
+++ /dev/null
@@ -1,61 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry;
-
-/**
- *  A general exception describing an {@link IBinding}
- *  and an {@link IComponent}.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *
- **/
-
-public class BindingException extends ApplicationRuntimeException
-{
-    private transient IBinding _binding;
-
-    public BindingException(String message, IBinding binding)
-    {
-        this(message, binding, null);
-    }
-
-    public BindingException(String message, IBinding binding, Throwable rootCause)
-    {
-        this(message, null, null, binding, rootCause);
-    }
-
-
-    public BindingException(
-        String message,
-        Object component,
-        ILocation location,
-        IBinding binding,
-        Throwable rootCause)
-    {
-        super(
-            message,
-            component,
-            Tapestry.findLocation(new Object[] { location, binding, component }),
-            rootCause);
-
-        _binding = binding;
-    }
-
-    public IBinding getBinding()
-    {
-        return _binding;
-    }
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/ConfigurationDefaults.properties b/3.0.4/framework/src/org/apache/tapestry/ConfigurationDefaults.properties
deleted file mode 100644
index 8451a55..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/ConfigurationDefaults.properties
+++ /dev/null
@@ -1,4 +0,0 @@
-# $Id$
-
-org.apache.tapestry.default-script-language=jython
-org.apache.tapestry.visit-class=java.util.HashMap
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/Framework.library b/3.0.4/framework/src/org/apache/tapestry/Framework.library
deleted file mode 100644
index b8f4d11..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/Framework.library
+++ /dev/null
@@ -1,98 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-    Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE library-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<!--
- 
-   This is a kind of "boostrap" library; when an unadorned page name or alias (a name or
-   alias without a namespace prefix) cannot be located in the appropriate application or
-   library specification, the framework specification is checked.  This allows
-   the application or library to override framework's versions of a component.
-   
--->
-
-<library-specification>
-
-    <component-type type="ActionLink" specification-path="link/ActionLink.jwc"/>
-    <component-type type="Any" specification-path="components/Any.jwc"/>
-    <component-type type="Block" specification-path="components/Block.jwc"/>
-    <component-type type="Body" specification-path="html/Body.jwc"/>
-    <component-type type="Button" specification-path="form/Button.jwc"/>
-    <component-type type="Checkbox" specification-path="form/Checkbox.jwc"/>
-    <component-type type="Conditional" specification-path="components/Conditional.jwc"/>
-    <component-type type="DatePicker" specification-path="form/DatePicker.jwc"/>
-    <component-type type="Delegator" specification-path="components/Delegator.jwc"/>
-    <component-type type="DirectLink" specification-path="link/DirectLink.jwc"/>
-    <component-type type="ExternalLink" specification-path="link/ExternalLink.jwc"/>
-    <component-type type="FieldLabel" specification-path="valid/FieldLabel.jwc"/>
-    <component-type type="Foreach" specification-path="components/Foreach.jwc"/>
-    <component-type type="Frame" specification-path="html/Frame.jwc"/>
-    <component-type type="ExceptionDisplay" specification-path="html/ExceptionDisplay.jwc"/>
-    <component-type type="Form" specification-path="form/Form.jwc"/>
-    <component-type type="GenericLink" specification-path="link/GenericLink.jwc"/>
-    <component-type type="Hidden" specification-path="form/Hidden.jwc"/>
-    <component-type type="Image" specification-path="html/Image.jwc"/>
-    <component-type type="ImageSubmit" specification-path="form/ImageSubmit.jwc"/>
-	<component-type type="Insert" specification-path="components/Insert.jwc"/>
-    <component-type type="InsertText" specification-path="html/InsertText.jwc"/>
-    <component-type type="LinkSubmit" specification-path="form/LinkSubmit.jwc"/>
-    <component-type type="ListEdit" specification-path="form/ListEdit.jwc"/>
-    <component-type type="Option" specification-path="form/Option.jwc"/>
-    <component-type type="PageLink" specification-path="link/PageLink.jwc"/>
-    <component-type type="PropertySelection" specification-path="form/PropertySelection.jwc"/>
-    <component-type type="Radio" specification-path="form/Radio.jwc"/>
-    <component-type type="RadioGroup" specification-path="form/RadioGroup.jwc"/>
-    <component-type type="RenderBlock" specification-path="components/RenderBlock.jwc"/>
-    <component-type type="RenderBody" specification-path="components/RenderBody.jwc"/>
-    <component-type type="Rollover" specification-path="html/Rollover.jwc"/>
-    <component-type type="Select" specification-path="form/Select.jwc"/>
-    <component-type type="ServiceLink" specification-path="link/ServiceLink.jwc"/>
-    <component-type type="Script" specification-path="html/Script.jwc"/>
-    <component-type type="Shell" specification-path="html/Shell.jwc"/>
-    <component-type type="Submit" specification-path="form/Submit.jwc"/>
-    <component-type type="TextArea" specification-path="form/TextArea.jwc"/>
-    <component-type type="TextField" specification-path="form/TextField.jwc"/>
-    <component-type type="Upload" specification-path="form/Upload.jwc"/>
-    <component-type type="ValidField" specification-path="valid/ValidField.jwc"/>
-          
-    <page name="StaleLink" specification-path="pages/StaleLink.page"/>
-    <page name="StaleSession" specification-path="pages/StaleSession.page"/>
-    <page name="Exception" specification-path="pages/Exception.page"/>
-   
-    <page name="WMLException" specification-path="wml/pages/WMLException.page"/>
-    <page name="WMLStaleLink" specification-path="wml/pages/WMLStaleLink.page"/>
-    <page name="WMLStaleSession" specification-path="wml/pages/WMLStaleSession.page"/>
-
-    <!-- These may be overriden but generally shouldn't be, except perhaps for the home service. -->
-    
-    <service name="home" class="org.apache.tapestry.engine.HomeService"/>
-    <service name="action" class="org.apache.tapestry.engine.ActionService"/>
-    <service name="direct" class="org.apache.tapestry.engine.DirectService"/>
-    <service name="page" class="org.apache.tapestry.engine.PageService"/>
-    <service name="reset" class="org.apache.tapestry.engine.ResetService"/>
-    <service name="restart" class="org.apache.tapestry.engine.RestartService"/>
-    <service name="asset" class="org.apache.tapestry.asset.AssetService"/>
-	<service name="external" class="org.apache.tapestry.engine.ExternalService"/>
-	
-	<!-- Used to support the JSP tags. -->
-	
-	<service name="tagsupport" class="org.apache.tapestry.engine.TagSupportService"/>
-	
-</library-specification>
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/IAction.java b/3.0.4/framework/src/org/apache/tapestry/IAction.java
deleted file mode 100644
index 1c089aa..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/IAction.java
+++ /dev/null
@@ -1,37 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry;
-
-/**
- *  A particular type of component usuable with the
- *  action service.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 1.0.1
- */
-
-public interface IAction extends IComponent
-{
-    /**
-     *  Returns true if the component requires 
-     *  an existing, not new, {@link javax.servlet.http.HttpSession}
-     *  to operate.  Components who are not dependant on page state
-     *  (or the visit object) are non-stateful and can return false.
-     *
-     **/
-
-    public boolean getRequiresSession();
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/IActionListener.java b/3.0.4/framework/src/org/apache/tapestry/IActionListener.java
deleted file mode 100644
index 0a59bac..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/IActionListener.java
+++ /dev/null
@@ -1,42 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry;
-
-/**
- *  Defines a listener to an {@link IAction} component, which is way to
- *  get behavior when the component's URL is triggered (or the form
- *  containing the component is submitted).  Certain form elements 
- *  ({@link org.apache.tapestry.form.Hidden})
- *  also make use of this interface.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *
- **/
-
-public interface IActionListener
-{
-
-    /**
-     *  Method invoked by the component (an {@link org.apache.tapestry.link.ActionLink} or 
-     *  {@link org.apache.tapestry.form.Form}, when its URL is triggered.
-     *
-     *  @param component The component which was "triggered".
-     *  @param cycle The request cycle in which the component was triggered.
-     *
-     **/
-
-    public void actionTriggered(IComponent component, IRequestCycle cycle);
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/IAsset.java b/3.0.4/framework/src/org/apache/tapestry/IAsset.java
deleted file mode 100644
index ef8d24a..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/IAsset.java
+++ /dev/null
@@ -1,65 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry;
-
-import java.io.InputStream;
-
-/**
- *  Representation of a asset (GIF, JPEG, etc.) that may be owned by a
- *  {@link IComponent}.
- *
- *  <p>Assets may be completely external (i.e., on some other web site), 
- *  contained by the {@link javax.servlet.ServletContext},  
- *  or stored somewhere in the classpath.
- *
- *  <p>In the latter two cases, the resource may be localized.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *
- **/
-
-public interface IAsset extends ILocatable
-{
-    /**
-     *  Returns a URL for the asset, ready to be inserted into the output HTML.
-     *  If the asset can be localized, the localized version (matching the
-     *  {@link java.util.Locale} of the current {@link IPage page}) is returned.
-     * 
-     *  @throws ApplicationRuntimeException if the asset does not exist.
-     *
-     **/
-
-    public String buildURL(IRequestCycle cycle);
-
-    /**
-     *  Accesses the localized version of the resource (if possible) and returns it as
-     *  an input stream.  A version of the resource localized to the
-     *  current {@link IPage page} is returned.
-     * 
-     *  @throws ApplicationRuntimeException if the asset does not exist, or
-     *  can't be read.
-     *
-     **/
-
-    public InputStream getResourceAsStream(IRequestCycle cycle);
-    
-    /**
-     *  Returns the underlying location of the asset.
-     * 
-     **/
-    
-    public IResourceLocation getResourceLocation();
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/IBeanProvider.java b/3.0.4/framework/src/org/apache/tapestry/IBeanProvider.java
deleted file mode 100644
index 4c39b93..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/IBeanProvider.java
+++ /dev/null
@@ -1,82 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry;
-
-import java.util.Collection;
-
-/**
- *  An object that provides a component with access to helper beans.
- *  Helper beans are JavaBeans associated with a page or component
- *  that are used to extend the functionality of the component via
- *  aggregation.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 1.0.4
- **/
-
-
-public interface IBeanProvider
-{
-	/**
-	 *  Returns the JavaBean with the specified name.  The bean is created as needed.
-	 *
-	 *  @throws ApplicationRuntimeException if no such bean is available.
-	 *
-	 **/
-	
-	public Object getBean(String name);
-	
-	/**
-	 *  Returns the {@link IComponent} (which may be a 
-	 *  {@link org.apache.tapestry.IPage}) for which
-	 *  this bean provider is providing beans.
-	 *
-	 *  @since 1.0.5
-	 **/
-	
-	public IComponent getComponent();
-	
-	/**
-	 *  Returns a collection of the names of any beans which may
-	 *  be provided.
-	 *
-	 *  @since 1.0.6
-	 *  @see org.apache.tapestry.spec.IComponentSpecification#getBeanNames()
-	 *
-	 **/
-	
-	public Collection getBeanNames();
-	
-    /**
-     *  Returns true if the provider can provide the named bean.
-     * 
-     *  @since 2.2
-     * 
-     **/
-    
-    public boolean canProvideBean(String name);
-    
-	/**
-	 *  Returns a resource resolver.
-	 * 
-	 *  @since 1.0.8
-	 * 
-	 **/
-	
-	public IResourceResolver getResourceResolver();
-	
-}
-
diff --git a/3.0.4/framework/src/org/apache/tapestry/IBinding.java b/3.0.4/framework/src/org/apache/tapestry/IBinding.java
deleted file mode 100644
index c0a986a..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/IBinding.java
+++ /dev/null
@@ -1,157 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry;
-
-/**
- *  A binding is the mechanism used to provide values for parameters of
- *  specific {@link IComponent} instances. The component doesn't
- *  care where the required value comes from, it simply requires that
- *  a value be provided when needed.
- *
- *  <p>Bindings are set inside the containing component's specification.
- *  Bindings may be static or dynamic (though that is irrelevant to the
- *  component).  Components may also use a binding to write a value
- *  back through a property to some other object (typically, another component).
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- **/
-
-public interface IBinding extends ILocatable
-{
-    /**
-     *  Invokes {@link #getObject()}, then coerces the value to a boolean.  
-     *  The following rules are used to perform the coercion:
-     *  <ul>
-     *  <li>null is always false
-     *  <li>A {@link Boolean} value is self-evident
-     *  <li>A {@link Number} value is true if non-zero
-     *  <li>A {@link String} value is true if non-empty and contains
-     *  non-whitespace characters
-     *  <li>Any {@link java.util.Collection} value is true if it has a non-zero
-     *  {@link java.util.Collection#size() size}
-     *  <li>Any array type is true if it has a non-zero length
-     *  <li>Any other non-null value is true
-     *  </ul>
-     * 
-     *  @see Tapestry#evaluateBoolean(Object)
-     * 
-     **/
-
-    public boolean getBoolean();
-
-    /**
-     *  Gets the value of the Binding using {@link #getObject} and coerces it
-     *  to an <code>int</code>.  Strings will be parsed, and other
-     *  <code>java.lang.Number</code> classes will have <code>intValue()</code>
-     *  invoked.  
-     *
-     *  @throws ClassCastException if the binding's value is not of a usable class.
-     *  @throws BindingException if the binding's value is null.
-     **/
-
-    public int getInt();
-
-    /**
-     *  Gets the value of the Binding using {@link #getObject()} and coerces it
-     *  to a <code>double</code>.  Strings will be parsed, and other
-     *  <code>java.lang.Number</code> classes will have <code>doubleValue()</code>
-     *  invoked.
-     *
-     *  @throws ClassCastException if the binding's value is not of a usable class.
-     *  @throws BindingException if the binding's value is null.
-     **/
-
-    public double getDouble();
-
-    /**
-     *  Invokes {@link #getObject()} and converts the result to <code>java.lang.String</code>.
-     **/
-
-    public String getString();
-
-    /**
-     *  Returns the value of this binding.  This is the essential method.  Other methods
-     *  get this value and cast or coerce the value.
-     *
-     **/
-
-    public Object getObject();
-
-    /**
-     *  Returns the value for the binding after performing some basic checks.
-     *
-     *  @param parameterName the name of the parameter (used to build
-     *  the message if an exception is thrown).
-     *  @param type if not null, the value must be assignable to the specific
-     *  class
-     *  @throws BindingException if the value is not assignable to the
-     *  specified type
-     *
-     *  @since 0.2.9
-     **/
-
-    public Object getObject(String parameterName, Class type);
-
-    /**
-     *  Returns true if the value is invariant (not changing; the
-     *  same value returned each time).  Static and field bindings
-     *  are always invariant, and {@link org.apache.tapestry.binding.ExpressionBinding}s
-     *  may be marked invariant (as an optimization).
-     * 
-     *  @since 2.0.3
-     * 
-     **/
-
-    public boolean isInvariant();
-
-    /**
-     *  Constructs a <code>Boolean</code> and invokes {@link #setObject(Object)}.
-     *
-     **/
-
-    public void setBoolean(boolean value);
-
-    /**
-     *  Constructs an <code>Integer</code> and invokes {@link #setObject(Object)}.
-     *
-     **/
-
-    public void setInt(int value);
-
-    /**
-     *  Constructs an <code>Double</code> and invokes {@link #setObject(Object)}.
-     *
-     **/
-
-    public void setDouble(double value);
-
-    /**
-     *  Invokes {@link #setObject(Object)}.
-     *
-     **/
-
-    public void setString(String value);
-
-    /**
-     *  Updates the value of the binding, if possible.
-     *
-     *  @exception BindingException If the binding is read only.
-     *
-     **/
-
-    public void setObject(Object value);
-
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/IComponent.java b/3.0.4/framework/src/org/apache/tapestry/IComponent.java
deleted file mode 100644
index 5f3b8dd..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/IComponent.java
+++ /dev/null
@@ -1,354 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry;
-
-import java.util.Collection;
-import java.util.Map;
-
-import org.apache.tapestry.engine.IPageLoader;
-import org.apache.tapestry.spec.IComponentSpecification;
-
-/**
- *  Defines an object which may be used to provide dynamic content on a Tapestry web page.
- *
- *  <p>Components are created dynamically from thier class names (part of the
- *  {@link IComponentSpecification}).
- *
- *
- *  @author Howard Leiws Ship
- *  @version $Id$
- * 
- **/
-
-public interface IComponent extends IRender, ILocationHolder
-{
-
-    /**
-     *  Adds an asset to the component.  This is invoked from the page loader.
-     *
-     **/
-
-    public void addAsset(String name, IAsset asset);
-
-    /**
-     *  Adds a component to a container.  Should only be called during the page
-     *  loading process, which is responsible for any checking.
-     *
-     *  @see IPageLoader
-     *
-     **/
-
-    public void addComponent(IComponent component);
-
-    /**
-     *  Adds a new renderable element to the receiver's body.  The element may be either
-     *  another component, or static HTML.  Such elements come from inside
-     *  the receiver's tag within its container's template, and represent static
-     *  text and other components.
-     * 
-     *  <p>The method {@link #renderBody(IMarkupWriter, IRequestCycle)} is used
-     *  to render these elements.
-     * 
-     *  @since 2.2
-     * 
-     **/
-
-    public void addBody(IRender element);
-
-    /**
-     *  Returns the asset map for the component, which may be empty but will not be null.
-     *
-     *  <p>The return value is unmodifiable.
-     * 
-     **/
-
-    public Map getAssets();
-
-    /**
-     *  Returns the named asset, or null if not found.
-     *
-     **/
-
-    public IAsset getAsset(String name);
-
-    /**
-     *  Returns the binding with the given name or null if not found.
-     *
-     *  <p>Bindings are added to a component using {@link #setBinding(String,IBinding)}.
-     **/
-
-    public IBinding getBinding(String name);
-
-    /**
-     *  Returns a {@link Collection} of the names of all bindings (which includes
-     *  bindings for both formal and informal parameters).
-     *
-     *  <p>The return value is unmodifiable.  It will be null for a {@link IPage page},
-     *  or may simply be empty for a component with no bindings.
-     *
-     **/
-
-    public Collection getBindingNames();
-
-    /**
-     *  Returns a {@link Map} of the {@link IBinding bindings} for this component; 
-     *  this includes informal parameters
-     *  as well as formal bindings.
-     *
-     *  @since 1.0.5
-     *
-     **/
-
-    public Map getBindings();
-
-    /**
-     *  Retrieves an contained component by its id.
-     *  Contained components have unique ids within their container.
-     *
-     *  @exception ApplicationRuntimeException runtime exception thrown if the named
-     *  component does not exist.
-     *
-     **/
-
-    public IComponent getComponent(String id);
-
-    /**
-     *  Returns the component which embeds the receiver.  All components are contained within
-     *  other components, with the exception of the root page component.
-     *
-     *  <p>A page returns null.
-     *
-     **/
-
-    public IComponent getContainer();
-
-    /**
-     *  Sets the container of the component.    This is write-once,
-     *  an attempt to change it later will throw an {@link ApplicationRuntimeException}.
-     *
-     **/
-
-    public void setContainer(IComponent value);
-
-    /**
-     *  Returns a string identifying the name of the page and the id path of the reciever within
-     *  the page.  Pages simply return their name.
-     *
-     *  @see #getIdPath()
-     **/
-
-    public String getExtendedId();
-
-    /**
-     *  Returns the simple id of the component, as defined in its specification.
-     *
-     *  <p>An id will be unique within the
-     *  component which contains this component.
-     *
-     *  <p>A  {@link IPage page} will always return null.
-     *
-     **/
-
-    public String getId();
-
-    /**
-     *  Sets the id of the component.    This is write-once,
-     *  an attempt to change it later will throw an {@link ApplicationRuntimeException}.
-     *
-     **/
-
-    public void setId(String value);
-
-    /**
-     *  Returns the qualified id of the component.  This represents a path from the
-     *  {@link IPage page} to
-     *  this component, showing how components contain each other.
-     *
-     *  <p>A {@link IPage page} will always return
-     *  null.  A component contained on a page returns its simple id.
-     *  Other components return their container's id path followed by a period and their
-     *  own name.
-     *
-     *  @see #getId()
-     **/
-
-    public String getIdPath();
-
-    /**
-     *  Returns the page which ultimately contains the receiver.  A page will return itself.
-     *
-     **/
-
-    public IPage getPage();
-
-    /**
-     *  Sets the page which ultimiately contains the component.  This is write-once,
-     *  an attempt to change it later will throw an {@link ApplicationRuntimeException}.
-     *
-     **/
-
-    public void setPage(IPage value);
-
-    /**
-     *  Returns the specification which defines the component.
-     *
-     **/
-
-    public IComponentSpecification getSpecification();
-
-    /**
-     *  Sets the specification used by the component.  This is write-once, an attempt
-     *  to change it later will throw an {@link ApplicationRuntimeException}.
-     *
-     **/
-
-    public void setSpecification(IComponentSpecification value);
-
-    /**
-     *  Invoked to make the receiver render its body (the elements and components
-     *  its tag wraps around, on its container's template).  
-     *  This method is public so that the
-     *  {@link org.apache.tapestry.components.RenderBody} component may operate.
-     * 
-     *  @since 2.2
-     * 
-     **/
-
-    public void renderBody(IMarkupWriter writer, IRequestCycle cycle);
-
-    /**
-     *  Adds a binding to a container.  Should only be called during the page
-     *  loading process (which is responsible for eror checking).
-     *
-     *  @see IPageLoader
-     *
-     **/
-
-    public void setBinding(String name, IBinding binding);
-
-    /**
-     *  Returns the contained components as an unmodifiable {@link Map}.  This
-     *  allows peer components to work together without directly involving their
-     *  container ... the classic example is to have an {@link org.apache.tapestry.components.Insert} 
-     *  work with an enclosing {@link org.apache.tapestry.components.Foreach}.
-     *
-     *  <p>This is late addition to Tapestry, because it also opens the door
-     *  to abuse, since it is quite possible to break the "black box" aspect of
-     *  a component by interacting directly with components it embeds.  This creates
-     *  ugly interelationships between components that should be seperated.
-     *
-     *  @return A Map of components keyed on component id.  May return an empty map, but won't return
-     *  null.
-     *
-     **/
-
-    public Map getComponents();
-
-    /**
-     *  Allows a component to finish any setup after it has been constructed.
-     *
-     *  <p>The exact timing is not
-     *  specified, but any components contained by the
-     *  receiving component will also have been constructed
-     *  before this method is invoked.
-     *
-     *  <p>As of release 1.0.6, this method is invoked <em>before</em>
-     *  bindings are set.  This should not affect anything, as bindings
-     *  should only be used during renderring.
-     * 
-     *  <p>Release 2.2 added the cycle parameter which is, regretfully, not
-     *  backwards compatible.
-     *
-     *  @since 0.2.12
-     * 
-     **/
-
-    public void finishLoad(
-        IRequestCycle cycle,
-        IPageLoader loader,
-        IComponentSpecification specification);
-
-    /**
-     *  Returns a localized string message.  Each component has an optional
-     *  set of localized message strings that are read from properties
-     *  files.
-     * 
-     *  @param key the key used to locate the message
-     *  @return the localized message for the key, or a placeholder
-     *  if no message is defined for the key.
-     * 
-     *  @since 2.0.4
-     *  @deprecated To be removed in 3.1, use {@link #getMessage(String)}.
-     **/
-
-    public String getString(String key);
-
-    /**
-     *  Returns a localized string message.  Each component has an optional
-     *  set of localized message strings that are read from properties
-     *  files.
-     * 
-     *  @param key the key used to locate the message
-     *  @return the localized message for the key, or a placeholder
-     *  if no message is defined for the key.
-     * 
-     *  @since 3.0
-     **/
-
-    public String getMessage(String key);
-    /**
-     *  Returns component strings for the component.
-     * 
-     *  @since 3.0
-     * 
-     **/
-
-    public IMessages getMessages();
-
-    /**
-     *  Returns the {@link INamespace} in which the component was defined
-     *  (as an alias).  
-     * 
-     *  @since 2.2
-     * 
-     **/
-
-    public INamespace getNamespace();
-
-    /**
-     *  Sets the {@link INamespace} for the component.  The namespace
-     *  should only be set once.
-     * 
-     *  @since 2.2
-     * 
-     **/
-
-    public void setNamespace(INamespace namespace);
-    
-    /**
-     *  Sets a property of a component.
-     *  @param propertyName the property name
-     *  @param value the provided value
-     */
-	public void setProperty(String propertyName, Object value);
-	
-	/**
-	 *  Gets a property of a component.
-	 *  @param propertyName the property name
-	 *  @return Object the value of property
-	 */
-	public Object getProperty(String propertyName);
-
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/IDirect.java b/3.0.4/framework/src/org/apache/tapestry/IDirect.java
deleted file mode 100644
index f4c95c6..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/IDirect.java
+++ /dev/null
@@ -1,49 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry;
-
-/**
- *  Interface that defines classes that may be messaged by the direct
- *  service.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- **/
-
-public interface IDirect extends IComponent
-{
-    /**
-     *  Invoked by the direct service to have the component peform
-     *  the appropriate action.  The {@link org.apache.tapestry.link.DirectLink} component will
-     *  notify its listener.
-     *
-     **/
-
-    public void trigger(IRequestCycle cycle);
-
-    /**
-     *  Invoked by the direct service to query the component as to
-     *  whether it is stateful.  If stateful and no 
-     *  {@link javax.servlet.http.HttpSession} is active, then a
-     *  {@link org.apache.tapestry.StaleSessionException} is
-     *  thrown by the service.
-     * 
-     *  @since 2.3
-     * 
-     **/
-
-    public boolean isStateful();
-
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/IEngine.java b/3.0.4/framework/src/org/apache/tapestry/IEngine.java
deleted file mode 100644
index c340012..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/IEngine.java
+++ /dev/null
@@ -1,386 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry;
-
-import java.io.IOException;
-import java.util.Locale;
-
-import javax.servlet.ServletException;
-
-import org.apache.tapestry.asset.ResourceChecksumSource;
-import org.apache.tapestry.engine.IComponentClassEnhancer;
-import org.apache.tapestry.engine.IComponentMessagesSource;
-import org.apache.tapestry.engine.IEngineService;
-import org.apache.tapestry.engine.IPageRecorder;
-import org.apache.tapestry.engine.IPageSource;
-import org.apache.tapestry.engine.IPropertySource;
-import org.apache.tapestry.engine.IScriptSource;
-import org.apache.tapestry.engine.ISpecificationSource;
-import org.apache.tapestry.engine.ITemplateSource;
-import org.apache.tapestry.request.RequestContext;
-import org.apache.tapestry.spec.IApplicationSpecification;
-import org.apache.tapestry.util.io.DataSqueezer;
-import org.apache.tapestry.util.pool.Pool;
-
-/**
- * Defines the core, session-persistant object used to run a Tapestry
- * application for a single client (each client will have its own instance of the engine).
- *
- * <p>The engine exists to provide core services to the pages and components
- * that make up the application.  The engine is a delegate to the
- * {@link ApplicationServlet} via the {@link #service(RequestContext)} method.
- *
- * <p>Engine instances are persisted in the {@link javax.servlet.http.HttpSession} and are serializable.
- *
- * @author Howard Lewis Ship
- * @version $Id$
- **/
-
-public interface IEngine
-{
-    /**
-     *  The name ("Home") of the default page presented when a user first accesses the
-     *  application.
-     *
-     *  @see org.apache.tapestry.engine.HomeService
-     * 
-     **/
-
-    public static final String HOME_PAGE = "Home";
-
-    /**
-     *  The name ("Exception") of the page used for reporting exceptions.
-     *  
-     *  <p>Such a page must have
-     *  a writable JavaBeans property named 'exception' of type 
-     * <code>java.lang.Throwable</code>.
-     *
-     **/
-
-    public static final String EXCEPTION_PAGE = "Exception";
-
-    /**
-     *  The name ("StaleLink") of the page used for reporting stale links.
-     *
-     *  <p>The page must implement a writeable JavaBeans proeprty named
-     *  'message' of type <code>String</code>.
-     *
-     **/ 
-
-    public static final String STALE_LINK_PAGE = "StaleLink";
-    
-    /**
-     *  Returns a recorder for a page.  Returns null if the page recorder has
-     *  not been created yet.
-     *
-     *  @see #createPageRecorder(String, IRequestCycle)
-     * 
-     **/
-
-    public IPageRecorder getPageRecorder(String pageName, IRequestCycle cycle);
-
-    /**
-     *  The name ("StaleSession") of the page used for reporting state sessions.
-     *
-     **/
-
-    public static final String STALE_SESSION_PAGE = "StaleSession";
-
-    /**
-     *  Forgets changes to the named page by discarding the page recorder for the page.
-     *  This is used when transitioning from one part
-     *  of an application to another.  All property changes for the page are lost.
-     *
-     *  <p>This should be done if the page is no longer needed or relevant, otherwise
-     *  the properties for the page will continue to be recorded by the engine, which
-     *  is wasteful (especially if clustering or failover is employed on the application).
-     *
-     *  <p>Throws an {@link ApplicationRuntimeException} if there are uncommitted changes
-     *  for the recorder (in the current request cycle).
-     *
-     **/
-
-    public void forgetPage(String name);
-
-    /**
-     *  Returns the locale for the engine.  This locale is used when selecting
-     *  templates and assets.
-     **/
-
-    public Locale getLocale();
-
-    /**
-     *  Changes the engine's locale.  Any subsequently loaded pages will be
-     *  in the new locale (though pages already loaded stay in the old locale).
-     *  Generally, you should render a new page after changing the locale, to
-     *  show that the locale has changed.
-     *
-     **/
-
-    public void setLocale(Locale value);
-
-
-
-    /**
-     *  Creates a new page recorder for the named page.
-     *
-     **/
-
-    public IPageRecorder createPageRecorder(String pageName, IRequestCycle cycle);
-
-    /**
-     *  Returns the object used to load a page from its specification.
-     *
-     **/
-
-    public IPageSource getPageSource();
-
-    /**
-     *  Gets the named service, or throws an {@link
-     *  org.apache.tapestry.ApplicationRuntimeException} 
-     *  if the application can't provide
-     *  the named server.
-     *
-     *  <p>The object returned has a short lifecycle (it isn't
-     *  serialized with the engine).  Repeated calls with the
-     *  same name are not guarenteed to return the same object,
-     *  especially in different request cycles.
-     *
-     **/
-
-    public IEngineService getService(String name);
-
-    /**
-     *  Returns the URL path that corresponds to the servlet for the application.  
-     *  This is required by instances of {@link IEngineService} that need 
-     *  to construct URLs for the application.  This value will include
-     *  the context path.
-     **/
-
-    public String getServletPath();
-
-    /**
-     *  Returns the context path, a string which is prepended to the names of
-     *  any assets or servlets.  This may be the empty string, but won't be null.
-     *
-     *  <p>This value is obtained from 
-     *  {@link javax.servlet.http.HttpServletRequest#getContextPath()}.
-     * 
-     **/
-
-    public String getContextPath();
-
-    /**
-     *  Returns the application specification that defines the application
-     *  and its pages.
-     *
-     **/
-
-    public IApplicationSpecification getSpecification();
-
-    /**
-     *  Returns the source of all component specifications for the application.  
-     *  The source is shared between sessions.
-     *
-     *  @see org.apache.tapestry.engine.AbstractEngine#createSpecificationSource(RequestContext)
-     * 
-     **/
-
-    public ISpecificationSource getSpecificationSource();
-
-    /**
-     *  Returns the source for HTML templates.
-     *
-     *  @see  org.apache.tapestry.engine.AbstractEngine#createTemplateSource(RequestContext)
-     * 
-     **/
-
-    public ITemplateSource getTemplateSource();
-
-    /**
-     *  Method invoked from the {@link org.apache.tapestry.ApplicationServlet} 
-     *  to perform processing of the
-     *  request.  In release 3.0, this has become more of a dirty flag, indicating
-     *  if any state stored by the engine instance itself has changed.
-     *
-     *  @return true if the state of the engine was, or could have been, changed during
-     *  processing.
-     *
-     **/
-
-    public boolean service(RequestContext context) throws ServletException, IOException;
-
-    /**
-     *  Returns an object that can resolve resources and classes.
-     *
-     **/
-
-    public IResourceResolver getResourceResolver();
-
-    /**
-     *  Returns the visit object, an object that represents the client's visit
-     *  to the application.  This is where most server-side state is stored (with
-     *  the exception of persistent page properties).
-     *
-     *  <p>Returns the visit, if it exists, or null if it has not been created.
-     *
-     **/
-
-    public Object getVisit();
-
-    /**
-     *  Returns the visit object, creating it if necessary.
-     *
-     **/
-
-    public Object getVisit(IRequestCycle cycle);
-
-    /**
-     *  Allows the visit object to be removed; typically done when "shutting down"
-     *  a user's session (by setting the visit to null).
-     *
-     **/
-
-    public void setVisit(Object value);
-
-    /**
-     *  Returns the globally shared application object. The global object is
-     *  stored in the servlet context and shared by all instances of the engine
-     *  for the same application (within the same JVM; the global is
-     *  <em>not</em> shared between nodes in a cluster).
-     *
-     *  <p>Returns the global object, if it exists, or null if not defined.
-     *
-     *  @since 2.3
-     * 
-     **/
-
-    public Object getGlobal();
-
-    /**
-     *  Returns true if the application allows the reset service.
-     *
-     *  @since 0.2.9
-     * 
-     **/
-
-    public boolean isResetServiceEnabled();
-
-    /**
-     *  Returns a source for parsed 
-     *  {@link org.apache.tapestry.IScript}s.  The source is 
-     *  shared between all sessions.
-     *
-     *  @since 1.0.2
-     *
-     **/
-
-    public IScriptSource getScriptSource();
-
-    /**
-     *  Returns true if the engine has state and, therefore, should be stored
-     *  in the HttpSession.  This starts as false, but becomes true when
-     *  the engine requires state (such as when a visit object is created,
-     *  or when a peristent page property is set).
-     *
-     *  @since 1.0.2
-     *
-     **/
-
-    public boolean isStateful();
-
-	/**
-	 *  Returns a shared object that allows components to find
-	 *  their set of localized strings.
-	 * 
-	 *  @since 2.0.4
-	 * 
-     *  @see org.apache.tapestry.engine.AbstractEngine#createComponentStringsSource(RequestContext)
-     * 
-	 **/
-	
-	public IComponentMessagesSource getComponentMessagesSource();
-
-    /**
-     *  Returns a shared instance of {@link org.apache.tapestry.util.io.DataSqueezer}.
-     * 
-     *  @since 2.2
-     * 
-     *  @see org.apache.tapestry.engine.AbstractEngine#createDataSqueezer()
-     * 
-     **/
-    
-    public DataSqueezer getDataSqueezer();
-
-    /**
-     *  Returns a {@link org.apache.tapestry.engine.IPropertySource} that should be
-     *  used to obtain configuration data.  The returned source represents
-     *  a search path that includes (at a minimum):
-     *  
-     *  <ul>
-     *  <li>Properties of the {@link org.apache.tapestry.spec.ApplicationSpecification}
-     *  <li>Initial Parameters of servlet (configured in the <code>web.xml</code> deployment descriptor)
-     *  <li>Initial Parameter of the servlet context (also configured in <code>web.xml</code>)
-     *  <li>System properties (defined with the <code>-D</code> JVM command line parameter)
-     *  <li>Hard-coded "factory defaults" (for some properties)
-     *  </ul>
-     * 
-     *  @since 2.3
-     *  @see org.apache.tapestry.engine.AbstractEngine#createPropertySource(RequestContext)
-     * 
-     **/
-
-    public IPropertySource getPropertySource();
-    
-    /**
-     *  Returns a {@link org.apache.tapestry.util.pool.Pool} that is used
-     *  to store all manner of objects that are needed throughout the system.
-     *  This is the best way to deal with objects that are both expensive to
-     *  create and not threadsafe.  The reset service
-     *  will clear out this Pool.
-     * 
-     *  @since 3.0
-     *  @see org.apache.tapestry.engine.AbstractEngine#createPool(RequestContext)
-     * 
-     **/
-    
-    public Pool getPool();
-    
-    /**
-     *  Returns an object that can create enhanced versions of component classes.
-     * 
-     *  @since 3.0
-     *  @see org.apache.tapestry.engine.AbstractEngine#createComponentClassEnhancer(RequestContext)
-     * 
-     **/
-    
-    public IComponentClassEnhancer getComponentClassEnhancer();
-    
-    /**
-     *  Returns the encoding to be used to generate the servlet responses and 
-     *  accept the servlet requests.
-     * 
-     *  @since 3.0
-     * 
-     **/
-    
-    public String getOutputEncoding();
-    
-    /**
-     * Returns an object that can compute the checksum of a resource.
-     * @since 3.0.3
-     */
-    public ResourceChecksumSource getResourceChecksumSource();
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/IExternalPage.java b/3.0.4/framework/src/org/apache/tapestry/IExternalPage.java
deleted file mode 100644
index e306845..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/IExternalPage.java
+++ /dev/null
@@ -1,48 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry;
-
-
-/**
- *  Defines a page which may be referenced externally via a URL using the 
- *  {@link org.apache.tapestry.engine.ExternalService}. External pages may be bookmarked 
- *  via their URL for latter display. See the 
- *  {@link org.apache.tapestry.link.ExternalLink} for details on how to invoke
- *  <tt>IExternalPage</tt>s.
- * 
- *  @see org.apache.tapestry.callback.ExternalCallback
- *  @see org.apache.tapestry.engine.ExternalService
- *
- *  @author Howard Lewis Ship
- *  @author Malcolm Edgar
- *  @version $Id$
- *  @since 2.2
- **/
-
-public interface IExternalPage extends IPage
-{
-    /**
-     *  Initialize the external page with the given array of parameters and
-     *  request cycle.
-     *  <p>
-     *  This method is invoked after {@link IPage#validate(IRequestCycle)}.
-     *
-     *  @param parameters the array of page parameters
-     *  @param cycle current request cycle
-     * 
-     **/
-
-    public void activateExternalPage(Object[] parameters, IRequestCycle cycle);
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/IForm.java b/3.0.4/framework/src/org/apache/tapestry/IForm.java
deleted file mode 100644
index dabe67c..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/IForm.java
+++ /dev/null
@@ -1,174 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry;
-
-import org.apache.tapestry.form.FormEventType;
-import org.apache.tapestry.form.IFormComponent;
-import org.apache.tapestry.valid.IValidationDelegate;
-
-/**
- *  A generic way to access a component which defines an HTML form.  This interface
- *  exists so that the {@link IRequestCycle} can invoke the
- *  {@link #rewind(IMarkupWriter, IRequestCycle)} method (which is used to deal with
- *  a Form that uses the direct service).  In release 1.0.5, more responsibility
- *  for forms was moved here.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 1.0.2
- **/
-
-public interface IForm extends IAction
-{
-
-    /**
-     *  Attribute name used with the request cycle; allows other components to locate
-     *  the IForm.
-     *
-     *  @since 1.0.5
-     * 
-     **/
-
-    public static final String ATTRIBUTE_NAME = "org.apache.tapestry.active.Form";
-
-    /**
-     *  Invoked by the {@link IRequestCycle} to allow a form that uses
-     *  the direct service, to respond to the form submission.
-     *
-     **/
-
-    public void rewind(IMarkupWriter writer, IRequestCycle cycle);
-
-    /**
-     *  Adds an additional event handler.  The type determines when the
-     *  handler will be invoked, {@link FormEventType#SUBMIT}
-     *  is most typical.
-     *
-     * @since 1.0.5
-     * 
-     **/
-
-    public void addEventHandler(FormEventType type, String functionName);
-
-    /**
-     *  Constructs a unique identifier (within the Form).  The identifier
-     *  consists of the component's id, with an index number added to
-     *  ensure uniqueness.
-     *
-     *  <p>Simply invokes {@link #getElementId(IFormComponent, String)} with the component's id.
-     *
-     *
-     *  @since 1.0.5
-     * 
-     **/
-
-    public String getElementId(IFormComponent component);
-
-    /**
-     *  Constructs a unique identifier from the base id.  If possible, the
-     *  id is used as-is.  Otherwise, a unique identifier is appended
-     *  to the id.
-     *
-     *  <p>This method is provided simply so that some components
-     *  ({@link org.apache.tapestry.form.ImageSubmit}) have more specific control over
-     *  their names.
-     * 
-     *  <p>Invokes {@link IFormComponent#setName(String)} with the result, as well
-     *  as returning it.
-     * 
-     *  @throws StaleLinkException if, when the form itself is rewinding, the
-     *  element id allocated does not match the expected id (as allocated when the form rendered).
-     *  This indicates that the state of the application has changed between the time the
-     *  form renderred and the time it was submitted.
-     *
-     *  @since 1.0.5
-     *
-     **/
-
-    public String getElementId(IFormComponent component, String baseId);
-
-    /**
-     * Returns the name of the form.
-     *
-     *  @since 1.0.5
-     *
-     **/
-
-    public String getName();
-
-    /**
-     *  Returns true if the form is rewinding (meaning, the form was the subject
-     *  of the request cycle).
-     *
-     *  @since 1.0.5
-     *
-     **/
-
-    public boolean isRewinding();
-
-    /**
-     *  Returns the validation delegate for the form.
-     *  Returns null if the form does not have a delegate.
-     * 
-     *  @since 1.0.8
-     * 
-     **/
-
-    public IValidationDelegate getDelegate();
-    
-    /**
-     *  May be invoked by a component to force the encoding type of the
-     *  form to a particular value.
-     * 
-     *  @see org.apache.tapestry.form.Upload
-     *  @throws ApplicationRuntimeException if the current encoding type is not null
-     *  and doesn't match the suggested encoding type
-     *  @since 3.0
-     * 
-     **/
-    
-    public void setEncodingType(String encodingType);
-    
-    
-    /**
-     * Adds a hidden field value to be stored in the form. This ensures that all
-     * of the &lt;input type="hidden"&gt; (or equivalent) are grouped together, 
-     * which ensures that the output HTML is valid (ie. doesn't 
-     * have &lt;input&gt; improperly nested with &lt;tr&gt;, etc.).
-     * 
-     * <p>
-     * It is acceptible to add multiple hidden fields with the same name.
-     * They will be written in the order they are received.
-     * 
-     * @since 3.0
-     */
-
-	public void addHiddenValue(String name, String value);
-
-	/**
-	 * Adds a hidden field value to be stored in the form. This ensures that all
-	 * of the &lt;input type="hidden"&gt; (or equivalent) are grouped together, 
-	 * which ensures that the output HTML is valid (ie. doesn't 
-	 * have &lt;input&gt; improperly nested with &lt;tr&gt;, etc.).
-	 * 
-	 * <p>
-	 * It is acceptible to add multiple hidden fields with the same name.
-	 * They will be written in the order they are received.
-	 * 
-	 * @since 3.0
-	 */
-
-	public void addHiddenValue(String name, String id, String value);
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/ILocatable.java b/3.0.4/framework/src/org/apache/tapestry/ILocatable.java
deleted file mode 100644
index 02752e1..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/ILocatable.java
+++ /dev/null
@@ -1,37 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry;
-
-/**
- *  Interface for classes that may be linked to a specific
- *  {@link org.apache.tapestry.ILocation location}.  This
- *  is primarily used when reporting errors.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 3.0
- *
- **/
-
-public interface ILocatable
-{
-	/**
-	 *  Returns the {@link org.apache.tapestry.ILocation location} from which
-	 *  this object orginates, or null if not known.
-	 * 
-	 **/
-	
-	public ILocation getLocation();
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/ILocation.java b/3.0.4/framework/src/org/apache/tapestry/ILocation.java
deleted file mode 100644
index a3e9ddd..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/ILocation.java
+++ /dev/null
@@ -1,28 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry;
-
-/**
- *  TODO Add Type comment
- * 
- * @author glongman@intelligentworks.com
- * @version $Id$
- */
-public interface ILocation
-{
-    public abstract IResourceLocation getResourceLocation();
-    public abstract int getLineNumber();
-    public abstract int getColumnNumber();
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/ILocationHolder.java b/3.0.4/framework/src/org/apache/tapestry/ILocationHolder.java
deleted file mode 100644
index 3fd9fe1..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/ILocationHolder.java
+++ /dev/null
@@ -1,32 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry;
-
-/**
- *  Interface for objects that are
- *  read from resource files, used to backtrace
- *  live objects to the resources they
- *  came from. 
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 3.0
- *
- **/
-
-public interface ILocationHolder extends ILocatable
-{
-    public void setLocation(ILocation location);
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/IMarkupWriter.java b/3.0.4/framework/src/org/apache/tapestry/IMarkupWriter.java
deleted file mode 100644
index 5da6b66..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/IMarkupWriter.java
+++ /dev/null
@@ -1,253 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry;
-
-/**
- *  Defines an object that can write markup (XML, HTML, XHTML) style output.
- *  A <code>IMarkupWriter</code> handles translation from unicode to
- *  the markup language (escaping characters such as '&lt;' and '&gt;' to
- *  their entity equivalents, '&amp;lt;' and '&amp;gt;') as well as assisting
- *  with nested elements, closing tags, etc.
- *
- *  @author Howard Ship, David Solis
- *  @version $Id$
- **/
-
-public interface IMarkupWriter
-{
-    /**
-     * Writes an integer attribute into the currently open tag.
-     *
-     * @throws IllegalStateException if there is no open tag.
-     *
-     **/
-
-    public void attribute(String name, int value);
-
-    /**
-     * Writes a boolean attribute into the currently open tag.
-     *
-     * @throws IllegalStateException if there is no open tag.
-     *
-     * @since 3.0
-     **/
-
-    public void attribute(String name, boolean value);
-
-    /**
-     * Writes an attribute into the most recently opened tag. This must be called after
-     * {@link #begin(String)}
-     * and before any other kind of writing (which closes the tag).
-     *
-     * <p>The value may be null.
-     *
-     * @throws IllegalStateException if there is no open tag.
-     **/
-
-    public void attribute(String name, String value);
-
-    /**
-     * Similar to {@link #attribute(String, String)} but no escaping of invalid elements
-     * is done for the value.
-     * 
-     * @throws IllegalStateException if there is no open tag.
-     *
-     * @since 3.0
-     **/
-
-    public void attributeRaw(String name, String value);
-
-    /**
-     * Closes any existing tag then starts a new element. The new element is pushed
-     * onto the active element stack.
-     **/
-
-    public void begin(String name);
-
-    /**
-     * Starts an element that will not later be matched with an <code>end()</code>
-     * call. This is useful for elements that
-     * do not need closing tags.
-     *
-     **/
-
-    public void beginEmpty(String name);
-
-    /**
-     * Invokes checkError() on the <code>PrintWriter</code> used to
-     *  format output.
-     **/
-
-    public boolean checkError();
-
-    /**
-     * Closes this <code>IMarkupWriter</code>. Close tags are
-     * written for any active elements. The <code>PrintWriter</code>
-     * is then sent <code>close()</code>.  A nested writer will commit
-     * its buffer to its containing writer.
-     *
-     **/
-
-    public void close();
-
-    /**
-     * Closes the most recently opened element by writing the '&gt;' that ends
-     * it. Once this is invoked, the <code>attribute()</code> methods
-     * may not be used until a new element is opened with {@link #begin(String)} or
-     * or {@link #beginEmpty(String)}.
-     **/
-
-    public void closeTag();
-
-    /**
-     * Writes an XML/HTML comment. Any open tag is first closed. 
-     * The method takes care of
-     * providing the <code>&lt;!--</code> and <code>--&gt;</code>, and
-     * provides a blank line after the close of the comment.
-     *
-     * <p><em>Most</em> characters are valid inside a comment, so no check
-     * of the contents is made (much like {@link #printRaw(String)}.
-     *
-     **/
-
-    public void comment(String value);
-
-    /**
-     * Ends the element most recently started by {@link
-     * #begin(String)}.  The name of the tag is popped off of the
-     * active element stack and used to form an HTML close tag.
-     *
-     **/
-
-    public void end();
-
-    /**
-     * Ends the most recently started element with the given
-     * name. This will also end any other intermediate
-     * elements. This is very useful for easily ending a table or
-     * even an entire page.
-     *
-     **/
-
-    public void end(String name);
-
-    /**
-     * Forwards <code>flush()</code> to this 
-     * <code>IMarkupWriter</code>'s <code>PrintWriter</code>.
-     *
-     **/
-
-    public void flush();
-
-    /**
-     *  Returns a nested writer, one that accumulates its changes in a
-     *  buffer.  When the nested  writer is closed, it writes its
-     *  buffer into its containing <code>IMarkupWriter</code>.
-     *
-     **/
-
-    public IMarkupWriter getNestedWriter();
-
-    /**
-     *
-     * The primary <code>print()</code> method, used by most other
-     * methods.
-     *
-     * <p>Prints the character array, first closing any open tag. Problematic characters
-     * ('&lt;', '&gt;' and '&amp;') are converted to appropriate
-     * entities.
-     *
-     * <p>Does <em>nothing</em> if <code>data</code> is null.
-     *
-     * <p>Closes any open tag.
-     *
-     **/
-
-    public void print(char[] data, int offset, int length);
-
-    /**
-     * Prints a single character, or its equivalent entity.
-     *
-     * <p>Closes any open tag.
-     *
-     **/
-
-    public void print(char value);
-
-    /**
-     * Prints an integer.
-     *
-     * <p>Closes any open tag.
-     *
-     **/
-
-    public void print(int value);
-
-    /**
-     * Invokes {@link #print(char[], int, int)} to print the string.  Use
-     * {@link #printRaw(String)} if the character data is known to be safe.
-     *
-     * <p>Does <em>nothing</em> if <code>value</code> is null.
-     *
-     * <p>Closes any open tag.
-     *
-     * @see #print(char[], int, int)
-     *
-     **/
-
-    public void print(String value);
-
-    /**
-     * Closes the open tag (if any), then prints a line seperator to
-     * the output stream.
-     *
-     **/
-
-    public void println();
-
-    /**
-     * Prints a portion of an output buffer to the stream.
-     * No escaping of invalid elements is done, which
-     * makes this more effecient than <code>print()</code>. 
-     * Does <em>nothing</em> if <code>buffer</code>
-     * is null.
-     *
-     * <p>Closes any open tag.
-     *
-     **/
-
-    public void printRaw(char[] buffer, int offset, int length);
-
-    /**
-     * Prints output to the stream. No escaping of invalid elements is done, which
-     * makes this more effecient than <code>print()</code>.
-     *
-     * <p>Does <em>nothing</em> if <code>value</code>
-     * is null.
-     *
-     * <p>Closes any open tag.
-     *
-     **/
-
-    public void printRaw(String value);
-
-    /**
-     *  Returns the type of content generated by this response writer, as
-     *  a MIME type.
-     *
-     **/
-
-    public String getContentType();
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/IMessages.java b/3.0.4/framework/src/org/apache/tapestry/IMessages.java
deleted file mode 100644
index f497754..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/IMessages.java
+++ /dev/null
@@ -1,98 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry;
-
-/**
- * A set of localized message strings.  This is somewhat like
- * a {@link java.util.ResourceBundle}, but with more
- * flexibility about where the messages come from.  In addition,
- * it includes methods similar to {@link java.text.MessageFormat}
- * for formatting the strings.
- *
- * @see org.apache.tapestry.IComponent#getMessages
- * @see org.apache.tapestry.engine.IComponentMessagesSource
- * 
- * @author Howard Lewis Ship
- * @since 2.0.4
- *
- */
-
-public interface IMessages
-{
-    /**
-     * Searches for a localized string with the given key.
-     * If not found, a modified version of the key
-     * is returned (all upper-case and surrounded by square
-     * brackets).
-     * 
-     */
-
-    public String getMessage(String key);
-
-    /**
-     * Searches for a localized string with the given key.
-     * If not found, then the default value (which should already
-     * be localized) is returned.  Passing a default of null
-     * is useful when trying to determine if the strings contains
-     * a given key.
-     *
-     */
-
-    public String getMessage(String key, String defaultValue);
-
-    /**
-     * Formats a string, using
-     * {@link java.text.MessageFormat#format(java.lang.String, java.lang.Object[])}.
-     * 
-     * <p>
-     * In addition, special processing occurs for any of the arguments that
-     * inherit from {@link Throwable}: such arguments are replaced with the Throwable's message
-     * (if non blank), or the Throwable's class name (if the message is blank).
-     *
-     * @param key the key used to obtain a localized pattern using
-     * {@link #getMessage(String)}
-     * @param arguments passed to the formatter
-     *
-     * @since 3.0
-     *
-     */
-
-    public String format(String key, Object[] arguments);
-
-    /**
-     * Convienience method for invoking {@link #format(String, Object[])}.
-     * @since 3.0
-     *
-     */
-    public String format(String key, Object argument);
-
-    /**
-     * Convienience method for invoking {@link #format(String, Object[])}.
-     *
-     * @since 3.0
-     * 
-     */
-
-    public String format(String key, Object argument1, Object argument2);
-
-    /**
-     * Convienience method for invoking {@link #format(String, Object[])}.
-     *
-     * @since 3.0
-     * 
-     */
-
-    public String format(String key, Object argument1, Object argument2, Object argument3);
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/INamespace.java b/3.0.4/framework/src/org/apache/tapestry/INamespace.java
deleted file mode 100644
index 6d9f13f..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/INamespace.java
+++ /dev/null
@@ -1,270 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry;
-
-import java.util.List;
-
-import org.apache.tapestry.spec.IComponentSpecification;
-import org.apache.tapestry.spec.ILibrarySpecification;
-
-/**
- *  Organizes different libraries of Tapestry pages, components
- *  and services into "frameworks", used to disambiguate names.
- * 
- *  <p>
- *  Tapestry release 3.0 includes dynamic discovery of pages and components; an application
- *  or library may contain a page or component that won't be "known" until the name
- *  is resolved (because it involves searching for a particular named file).
- * 
- *  @see org.apache.tapestry.resolver.PageSpecificationResolver
- *  @see org.apache.tapestry.resolver.ComponentSpecificationResolver
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 2.2
- *
- **/
-
-public interface INamespace extends ILocatable
-{
-    /**
-     *  Reserved name of a the implicit Framework library.
-     * 
-     **/
-
-    public static final String FRAMEWORK_NAMESPACE = "framework";
-
-    /**
-     *  Character used to seperate the namespace prefix from the page name
-     *  or component type.
-     * 
-     *  @since 2.3
-     * 
-     **/
-
-    public static final char SEPARATOR = ':';
-
-    /**
-     *  Returns an identifier for the namespace.  Identifiers
-     *  are simple names (they start with a letter,
-     *  and may contain letters, numbers, underscores and dashes).
-     *  An identifier must be unique among a namespaces siblings.
-     * 
-     *  <p>The application namespace has a null id; the framework
-     *  namespace has an id of "framework".
-     * 
-     **/
-
-    public String getId();
-
-    /**
-     *  Returns the extended id for this namespace, which is
-     *  a dot-seperated sequence of ids.
-     * 
-     **/
-
-    public String getExtendedId();
-
-    /**
-     *  Returns a version of the extended id appropriate for error
-     *  messages.  This is the based on
-     *  {@link #getExtendedId()}, unless this is the
-     *  application or framework namespace, in which case
-     *  special strings are returned.
-     *  
-     *  @since 3.0
-     * 
-     **/
-
-    public String getNamespaceId();
-
-    /**
-     *  Returns the parent namespace; the namespace which
-     *  contains this namespace.
-     * 
-     *  <p>
-     *  The application and framework namespaces return null
-     *  as the parent.
-     * 
-     **/
-
-    public INamespace getParentNamespace();
-
-    /**
-     *  Returns a namespace contained by this namespace.
-     * 
-     *  @param id either a simple name (of a directly contained namespace),
-     *  or a dot-seperarated name sequence.
-     *  @return the child namespace
-     *  @throws ApplicationRuntimeException if no such namespace exist.
-     * 
-     **/
-
-    public INamespace getChildNamespace(String id);
-
-    /**
-     *  Returns a sorted, immutable list of the ids of the immediate
-     *  children of this namespace.  May return the empty list,
-     *  but won't return null.
-     * 
-     **/
-
-    public List getChildIds();
-
-    /**
-     *  Returns the page specification of the named
-     *  page (defined within the namespace).
-     * 
-     *  @param name the name of the page
-     *  @return the specification
-     *  @throws ApplicationRuntimeException if the page specification
-     *  doesn't exist or can't be loaded
-     * 
-     **/
-
-    public IComponentSpecification getPageSpecification(String name);
-
-    /**
-     *  Returns true if this namespace contains the specified
-     *  page name.
-     * 
-     **/
-
-    public boolean containsPage(String name);
-
-    /**
-     *  Returns a sorted list of page names.  May return an empty
-     *  list, but won't return null.  The return list is immutable.
-     * 
-     **/
-
-    public List getPageNames();
-
-    /**
-     *  Returns the path for the named component (within the namespace).
-     * 
-     *  @param type the component alias
-     *  @return the specification path of the component
-     *  @throws ApplicationRuntimeException if the specification
-     *  doesn't exist or can't be loaded
-     * 
-     **/
-
-    public IComponentSpecification getComponentSpecification(String type);
-
-    /**
-     *  Returns true if the namespace contains the indicated component type.
-     * 
-     *  @param type a simple component type (no namespace prefix is allowed)
-     *
-     **/
-
-    public boolean containsComponentType(String type);
-
-    /**
-     *  Returns a sorted list of component types.  May return 
-     *  an empty list, but won't return null.  The return list
-     *  is immutable.  Represents just the known component types
-     *  (additional types may be discoverred dynamically).
-     * 
-     *  <p>Is this method even needed?
-     * 
-     *  @since 3.0
-     * 
-     **/
-
-    public List getComponentTypes();
-
-    /**
-     *  Returns the class name of a service provided by the
-     *  namespace.
-     * 
-     *  @param name the name of the service.
-     *  @return the complete class name of the service, or null
-     *  if the namespace does not contain the named service.
-     * 
-     **/
-
-    public String getServiceClassName(String name);
-
-    /**
-     *  Returns the names of all services provided by the
-     *  namespace, as a sorted, immutable list.  May return
-     *  the empty list, but won't return null.
-     * 
-     **/
-
-    public List getServiceNames();
-
-    /**
-     *  Returns the {@link org.apache.tapestry.spec.LibrarySpecification} from which
-     *  this namespace was created.
-     * 
-     **/
-
-    public ILibrarySpecification getSpecification();
-
-    /**
-     *  Constructs a qualified name for the given simple page name by
-     *  applying the correct prefix (if any).
-     * 
-     *  @since 2.3
-     * 
-     **/
-
-    public String constructQualifiedName(String pageName);
-
-    /**
-     *  Returns the location of the resource from which the
-     *  specification for this namespace was read.
-     * 
-     **/
-
-    public IResourceLocation getSpecificationLocation();
-
-    /**
-     *  Returns true if the namespace is the special
-     *  application namespace (which has special search rules
-     *  for handling undeclared pages and components).
-     * 
-     *  @since 3.0
-     * 
-     **/
-
-    public boolean isApplicationNamespace();
-
-    /**
-     *  Used to specify additional pages beyond those that came from
-     *  the namespace's specification.  This is used when pages
-     *  in the application namespace are dynamically discovered.
-     * 
-     *  @since 3.0
-     * 
-     **/
-
-    public void installPageSpecification(String pageName, IComponentSpecification specification);
-
-    /**
-     *  Used to specify additional components beyond those that came from
-     *  the namespace's specification.  This is used when components
-     *  in the application namespace are dynamically discovered.
-     * 
-     *  @since 3.0
-     * 
-     **/
-
-    public void installComponentSpecification(String type, IComponentSpecification specification);
-
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/IPage.java b/3.0.4/framework/src/org/apache/tapestry/IPage.java
deleted file mode 100644
index 6470f17..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/IPage.java
+++ /dev/null
@@ -1,312 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry;
-
-import java.io.OutputStream;
-import java.util.Locale;
-
-import org.apache.tapestry.event.ChangeObserver;
-import org.apache.tapestry.event.PageDetachListener;
-import org.apache.tapestry.event.PageRenderListener;
-import org.apache.tapestry.event.PageValidateListener;
-
-/**
- *  A root level component responsible for generating an entire a page
- *  within the application.
- *
- *  <p>Pages are created dynamically from thier class names (part of the
- *  {@link org.apache.tapestry.spec.IComponentSpecification}).
- *
- *  @see org.apache.tapestry.engine.IPageSource
- *  @see org.apache.tapestry.engine.IPageLoader
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- * 
- **/
-
-public interface IPage extends IComponent
-{
-    /**
-     *  Invoked on a page when it is no longer needed by
-     *  the engine, just before is is
-     *  returned to the pool.  The page is expected to
-     *  null the engine, visit and changeObserver properties.
-     * 
-     *  <p>Classes should also reset any properties to
-     *  default values (as if the instance
-     *  was freshly instantiated).
-     *
-     *  @see org.apache.tapestry.engine.IPageSource#releasePage(IPage)
-     *
-     **/
-
-    public void detach();
-
-    /**
-     *  Returns the {@link IEngine} that the page is currently
-     *  attached to.
-     *
-     **/
-
-    public IEngine getEngine();
-
-    /**
-     *  Returns the object (effectively, an 
-     *  {@link org.apache.tapestry.engine.IPageRecorder}) that is notified
-     *  of any changes to persistant properties of the page.
-     *
-     **/
-
-    public ChangeObserver getChangeObserver();
-
-    /**
-     *  Returns the <code>Locale</code> of the page.
-     *  The locale may be used to determine what template is
-     *  used by the page and the components contained by the page.
-     *
-     **/
-
-    public Locale getLocale();
-
-    /**
-     *  Updates the page's locale.  This is write-once, a subsequent attempt
-     *  will throw an {@link ApplicationRuntimeException}.
-     *
-     **/
-
-    public void setLocale(Locale value);
-
-    /**
-     *  Returns the fully qualified name of the page, including its
-     *  namespace prefix, if any.
-     * 
-     *  @since 2.3
-     * 
-     **/
-
-    public String getPageName();
-
-    /**
-     *  Sets the name of the page.
-     * 
-     *  @param pageName fully qualified page name (including namespace prefix, if any)
-     * 
-     *  @since 3.0
-     * 
-     **/
-
-    public void setPageName(String pageName);
-
-    /**
-     *  Returns a particular component from within the page.  The path is a dotted
-     *  name sequence identifying the component.  It may be null
-     *  in which case the page returns itself.
-     *
-     *  @exception ApplicationRuntimeException runtime exception
-     *  thrown if the path does not identify a component.
-     *
-     **/
-
-    public IComponent getNestedComponent(String path);
-
-    /**
-     *  Attaches the page to the {@link IEngine engine}.
-     *  This method is used when a pooled page is
-     *  claimed for use with a particular engine; it will stay attached
-     *  to the engine until the end of the current request cycle,
-     *  then be returned to the pool.
-     * 
-     *  <p>This method is rarely overriden; to initialize
-     *  page properties before a render, override
-     *  {@link #beginResponse(IMarkupWriter, IRequestCycle)}.
-     *
-     **/
-
-    public void attach(IEngine value);
-
-    /**
-     *  Invoked to render the entire page.  This should only be invoked by
-     *  {@link IRequestCycle#renderPage(IMarkupWriter writer)}.
-     *
-     *  <p>The page performs a render using the following steps:
-     *
-     * <ul>
-     *  <li>Invokes {@link PageRenderListener#pageBeginRender(org.apache.tapestry.event.PageEvent)}
-     *  <li>Invokes {@link #beginResponse(IMarkupWriter, IRequestCycle)}
-     *  <li>Invokes {@link IRequestCycle#commitPageChanges()} (if not rewinding)
-     *  <li>Invokes {@link #render(IMarkupWriter, IRequestCycle)}
-     *  <li>Invokes {@link PageRenderListener#pageEndRender(org.apache.tapestry.event.PageEvent)} (this occurs
-     *  even if a previous step throws an exception).
-     * </ul>
-     *
-     **/
-
-    public void renderPage(IMarkupWriter writer, IRequestCycle cycle);
-
-    /**
-     *  Invoked before a partial render of the page occurs
-     *  (this happens when rewinding a {@link org.apache.tapestry.form.Form}
-     *  within the page).  The page is expected to fire appopriate
-     *  events.
-     * 
-     *  @since 2.2
-     * 
-     **/
-
-    public void beginPageRender();
-
-    /**
-     *  Invoked after a partial render of the page occurs
-     *  (this happens when rewinding a {@link org.apache.tapestry.form.Form}
-     *  within the page).  The page is expected to fire
-     *  appropriate events.
-     * 
-     *  @since 2.2
-     * 
-     **/
-
-    public void endPageRender();
-
-    public void setChangeObserver(ChangeObserver value);
-
-    /**
-     *  Method invoked by the page, action and direct services 
-     *  to validate that the
-     *  user is allowed to visit the page.
-     *
-     *  <p>Most web applications have a concept of 'logging in' and
-     *  pages that an anonymous (not logged in) user should not be
-     *  able to visit directly.  This method acts as the first line of
-     *  defense against a malicous user hacking URLs.
-     *
-     *  <p>Pages that should be protected will typically throw a {@link
-     *  PageRedirectException}, to redirect the user to an appropriate
-     *  part of the system (such as, a login page).
-     * 
-     *  <p>Since 3.0, it is easiest to not override this method,
-     *  but to implement the {@link PageValidateListener} interface
-     *  instead.
-     *
-     **/
-
-    public void validate(IRequestCycle cycle);
-
-    /**
-     *  Invoked to create a response writer appropriate to the page
-     *  (i.e., appropriate to the content of the page).
-     *
-     **/
-
-    public IMarkupWriter getResponseWriter(OutputStream out);
-
-    /**
-     *  Invoked just before rendering of the page is initiated.  This gives
-     *  the page a chance to perform any additional setup.  One possible behavior is
-     *  to set HTTP headers and cookies before any output is generated.
-     *
-     *  <p>The timing of this explicitly <em>before</em> {@link org.apache.tapestry.engine.IPageRecorder page recorder}
-     *  changes are committed.  Rendering occurs <em>after</em> the recorders
-     *  are committed, when it is too late to make changes to dynamic page
-     *  properties.
-     *
-     *
-     **/
-
-    public void beginResponse(IMarkupWriter writer, IRequestCycle cycle);
-
-    /**
-     *  Returns the current {@link IRequestCycle}.  This is set when the
-     *  page is loaded (or obtained from the pool) and attached to the
-     *  {@link IEngine engine}.
-     *
-     **/
-
-    public IRequestCycle getRequestCycle();
-
-    /**
-     *  Invoked by the {@link IRequestCycle} to inform the page of the cycle,
-     *  as it is loaded.
-     *
-     **/
-
-    public void setRequestCycle(IRequestCycle cycle);
-
-    /**
-     *  Returns the visit object for the application; the visit object
-     *  contains application-specific information.
-     *
-     **/
-
-    public Object getVisit();
-
-    /**
-     *  Returns the globally shared application object. The global object is
-     *  stored in the servlet context.
-     *
-     *  <p>Returns the global object, if it exists, or null if not defined.
-     *
-     *  @since 2.3
-     * 
-     **/
-
-    public Object getGlobal();
-
-    /**
-     *  @since 1.0.5
-     *
-     **/
-
-    public void addPageRenderListener(PageRenderListener listener);
-
-    /**
-     *
-     *  @since 2.1
-     * 
-     **/
-
-    public void removePageRenderListener(PageRenderListener listener);
-
-    /**
-     *  @since 1.0.5
-     *
-     **/
-
-    public void addPageDetachListener(PageDetachListener listener);
-
-    /**
-     * 
-     *  @since 2.1
-     * 
-     **/
-
-    public void removePageDetachListener(PageDetachListener listener);
-
-    /**
-     *  @since 3.0
-     *
-     **/
-
-    public void addPageValidateListener(PageValidateListener listener);
-
-    /**
-     * 
-     *  @since 3.0
-     * 
-     **/
-
-    public void removePageValidateListener(PageValidateListener listener);
-
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/IRender.java b/3.0.4/framework/src/org/apache/tapestry/IRender.java
deleted file mode 100644
index e4bfc90..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/IRender.java
+++ /dev/null
@@ -1,45 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry;
-
-/**
- *  An element that may be asked to render itself to an
- *  {@link IMarkupWriter} using a {@link IRequestCycle}.
- *
- *  <p>This primarily includes {@link IComponent} and {@link IPage},
- *  but also extends to other things, such as objects responsible for
- *  rendering static markup text.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *
- **/
-
-public interface IRender
-{
-    /**
-     *  The principal rendering/rewinding method.  This will cause
-     *  the receiving component to render its top level elements (HTML
-     *  text and components).
-     *
-     *  <p>Renderring and rewinding are the exact same process.  The
-     *  same code that renders must be able to restore state by going
-     *  through the exact same operations (even though the output is
-     *  discarded).
-     *
-     **/
-
-    public void render(IMarkupWriter writer, IRequestCycle cycle);
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/IRequestCycle.java b/3.0.4/framework/src/org/apache/tapestry/IRequestCycle.java
deleted file mode 100644
index 23d555e..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/IRequestCycle.java
+++ /dev/null
@@ -1,313 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry;
-
-import org.apache.tapestry.engine.IEngineService;
-import org.apache.tapestry.engine.IMonitor;
-import org.apache.tapestry.request.RequestContext;
-
-/**
- *  Controller object that manages a single request cycle.  A request cycle
- *  is one 'hit' on the web server.  In the case of a Tapestry application,
- *  this will involve:
- *  <ul>
- *  <li>Responding to the URL by finding an {@link IEngineService} object
- *  <li>Determining the result page
- *  <li>Renderring the result page
- *  <li>Releasing any resources
- *  </ul>
- *
- *  <p>Mixed in with this is:
- *  <ul>
- *  <li>Exception handling
- *  <li>Loading of pages and templates from resources
- *  <li>Tracking changes to page properties, and restoring pages to prior states
- *  <li>Pooling of page objects
- *  </ul>
- *
- *  <p>A request cycle is broken up into two phases.   The <em>rewind</em> phase
- *  is optional, as it tied to {@link org.apache.tapestry.link.ActionLink} or
- *  {@link org.apache.tapestry.form.Form} components.  In the rewind phase,
- *  a previous page render is redone (discarding output) until a specific component
- *  of the page is reached.  This rewinding ensures that the page
- *  is restored to the exact state it had when the URL for the request cycle was
- *  generated, taking into account the dynamic nature of the page ({@link org.apache.tapestry.components.Foreach},
- *  {@link org.apache.tapestry.components.Conditional}, etc.).  Once this component is reached, it can notify
- *  its {@link IActionListener}.  The listener has the ability to update the state
- *  of any pages and select a new result page.
- *
- *  <p>Following the rewind phase is the <em>render</em> phase.  During the render phase,
- *  a page is actually rendered and output sent to the client web browser.
- *
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- * 
- **/
-
-public interface IRequestCycle
-{
-    /**
-     *  Invoked after the request cycle is no longer needed, to release any resources
-     *  it may have.  This includes releasing any loaded pages back to the page source.
-     *
-     **/
-
-    public void cleanup();
-
-    /**
-     *  Passes the String through 
-     *  {@link javax.servlet.http.HttpServletResponse#encodeURL(java.lang.String)}, which
-     *  ensures that the session id is encoded in the URL (if necessary).
-     *
-     **/
-
-    public String encodeURL(String URL);
-
-    /**
-     *  Returns the engine which is processing this request cycle.
-     *
-     **/
-
-    public IEngine getEngine();
-
-    /**
-     *  Retrieves a previously stored attribute, returning null
-     *  if not found.  Attributes allow components to locate each other; primarily
-     *  they allow a wrapped component to locate a component which wraps it.
-     *
-     **/
-
-    public Object getAttribute(String name);
-
-    public IMonitor getMonitor();
-
-    /**
-     *  Returns the next action id.  ActionLink ids are used to identify different actions on a
-     *  page (URLs that are related to dynamic page state).  
-     *
-     **/
-
-    public String getNextActionId();
-
-    /**
-     *  Identifies the active page, the page which will ultimately render the response.
-     *
-     **/
-
-    public IPage getPage();
-
-    /**
-     *  Returns the page with the given name.  If the page has been
-     *  previously loaded in the current request cycle, that page is
-     *  returned.  Otherwise, the engine's page loader is used to
-     *  load the page.
-     *
-     *  @see IEngine#getPageSource()
-     **/
-
-    public IPage getPage(String name);
-
-    public RequestContext getRequestContext();
-
-    /**
-     *  Returns true if the context is being used to rewind a prior
-     *  state of the page.  This is only true when there is a target
-     *  action id.
-     *
-     **/
-
-    public boolean isRewinding();
-
-    /**
-     *  Checks to see if the current action id matches the target
-     *  action id.  Returns true only if they match.  Returns false if
-     *  there is no target action id (that is, during page rendering).
-     *
-     *  <p>If theres a match on action id, then the component
-     *  is compared against the target component.  If there's a mismatch
-     *  then a {@link StaleLinkException} is thrown.
-     **/
-
-    public boolean isRewound(IComponent component) throws StaleLinkException;
-
-    /**
-     *  Removes a previously stored attribute, if one with the given name exists.
-     *
-     **/
-
-    public void removeAttribute(String name);
-
-    /**
-     *  Renders the given page.  Applications should always use this
-     *  method to render the page, rather than directly invoking
-     *  {@link IPage#render(IMarkupWriter, IRequestCycle)} since the
-     *  request cycle must perform some setup before rendering.
-     *
-     **/
-
-    public void renderPage(IMarkupWriter writer);
-
-    /**
-     *  Rewinds a page and executes some form of action when the
-     *  component with the specified action id is reached.
-     *
-     *  @see IAction
-     *
-     **/
-
-    public void rewindPage(String targetActionId, IComponent targetComponent);
-
-    /**
-     *  Allows a temporary object to be stored in the request cycle,
-     *  which allows otherwise unrelated objects to communicate.  This
-     *  is similar to <code>HttpServletRequest.setAttribute()</code>,
-     *  except that values can be changed and removed as well.
-     *
-     *  <p>This is used by components to locate each other.  A component, such
-     *  as {@link org.apache.tapestry.html.Body}, will write itself under a well-known name
-     *  into the request cycle, and components it wraps can locate it by that name.
-     **/
-
-    public void setAttribute(String name, Object value);
-
-    /**
-     *  Sets the page to be rendered.  This is called by a component
-     *  during the rewind phase to specify an alternate page to render
-     *  during the response phase.
-     * 
-     *  @deprecated To be removed in 3.1.  Use {@link #activate(IPage)}.
-     *
-     **/
-
-    public void setPage(IPage page);
-
-    /**
-     *  Sets the page to be rendered.  This is called by a component
-     *  during the rewind phase to specify an alternate page to render
-     *  during the response phase.
-     *
-     * @deprecated To be removed in 3.1.  Use {@link #activate(String)}.
-     * 
-     **/
-
-    public void setPage(String name);
-
-    /**
-     *  Invoked just before rendering the response page to get all
-     *  {@link org.apache.tapestry.engine.IPageRecorder page recorders} touched in this request cycle
-     *  to commit their changes (save them to persistant storage).
-     *
-     *  @see org.apache.tapestry.engine.IPageRecorder#commit()
-     **/
-
-    public void commitPageChanges();
-
-    /**
-     *  Returns the service which initiated this request cycle.  This may return
-     *  null (very early during the request cycle) if the service has not
-     *  yet been determined.
-     *
-     *  @since 1.0.1
-     **/
-
-    public IEngineService getService();
-
-    /**
-     *  Used by {@link IForm forms} to perform a <em>partial</em> rewind
-     *  so as to respond to the form submission (using the direct service).
-     *
-     *  @since 1.0.2
-     **/
-
-    public void rewindForm(IForm form, String targetActionId);
-
-    /**
-     *  Much like {@link IEngine#forgetPage(String)}, but the page stays active and can even
-     *  record changes, until the end of the request cycle, at which point it is discarded
-     *  (and any recorded changes are lost).
-     *  This is used in certain rare cases where a page has persistent state but is
-     *  being renderred "for the last time".
-     * 
-     *  @since 2.0.2
-     * 
-     **/
-
-    public void discardPage(String name);
-
-    /**
-     *  Invoked by a {@link IEngineService service} to store an array of application-specific parameters.
-     *  These can later be retrieved (typically, by an application-specific listener method)
-     *  by invoking {@link #getServiceParameters()}.
-     * 
-     *  <p>Through release 2.1, parameters was of type String[].  This is
-     *  an incompatible change in 2.2.
-     * 
-     *  @see org.apache.tapestry.engine.DirectService
-     *  @since 2.0.3
-     * 
-     **/
-
-    public void setServiceParameters(Object[] parameters);
-
-    /**
-     *  Returns parameters previously stored by {@link #setServiceParameters(Object[])}.
-     * 
-     *  <p>
-     *  Through release 2.1, the return type was String[].  This is
-     *  an incompatible change in 2.2.
-     * 
-     *  @since 2.0.3
-     * 
-     **/
-
-    public Object[] getServiceParameters();
-
-    /**
-     *  A convienience for invoking {@link #activate(IPage)}.  Invokes
-     *  {@link #getPage(String)} to get an instance of the named page.
-     *
-     *  @since 3.0
-     *  
-     **/
-
-    public void activate(String name);
-
-    /**
-     *  Sets the active page for the request.  The active page is the page
-     *  which will ultimately render the response.  The activate page
-     *  is typically set by the {@link IEngineService service}.  Frequently,
-     *  the active page is changed (from a listener method) to choose 
-     *  an alternate page to render the response).
-     * 
-     *  <p>
-     *  {@link IPage#validate(IRequestCycle)} is invoked on the
-     *  page to be activated.  {@link PageRedirectException} is caught
-     *  and the page specified in the exception will be the
-     *  active page instead (that is, a page may "pass the baton" to another
-     *  page using the exception).  The new page is also validated.  This
-     *  continues until a page does not throw {@link PageRedirectException}.
-     *  
-     *  <p>
-     *  Validation loops can occur, where page A redirects to page B and then page B
-     *  redirects back to page A (possibly with intermediate steps).  This is detected and results
-     *  in an {@link ApplicationRuntimeException}.
-     * 
-     *  @since 3.0
-     *  
-     */
-    public void activate(IPage page);
-
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/IResourceLocation.java b/3.0.4/framework/src/org/apache/tapestry/IResourceLocation.java
deleted file mode 100644
index 933e597..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/IResourceLocation.java
+++ /dev/null
@@ -1,114 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry;
-
-import java.net.URL;
-import java.util.Locale;
-
-/**
- *  Describes the location of a resource, such as a specification
- *  or template.  Resources may be located within the classpath,
- *  or within the Web context root or somewhere else entirely.
- * 
- *  <p>
- *  Resources may be either base or localized.  A localized
- *  version of a base resource may be obtained
- *  via {@link #getLocalization(Locale)}.
- * 
- *  <p>
- *  Resource locations are used as Map keys, they must 
- *  implement {@link java.lang.Object#hashCode()} and
- *  {@link java.lang.Object#equals(java.lang.Object)}
- *  properly.
- * 
- *  <p>
- *  Resource locations are valid even if the corresponding
- *  resource <i>doesn't exist</i>.  To verify if a localization
- *  actually exists, use {@link #getResourceURL()}, which returns
- *  null if the resource doesn't exist.  {@link #getLocalization(Locale)}
- *  returns only real resource locations, where the resource exists.
- * 
- *  <p>
- *  Folders must be represented with a trailing slash.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 3.0
- *
- **/
-
-public interface IResourceLocation
-{
-    /**
-     *  Returns a URL for the resource.
-     * 
-     *  @return the URL for the resource if it exists, or null if it does not
-     * 
-     **/
-    
-    public URL getResourceURL();
-    
-    /**
-     *  Returns the file name portion of the resource location.
-     * 
-     **/
-    
-    public String getName();
-    
-    /**
-     *  Returns a localized version of this resource (or this resource, if no
-     *  appropriate localization is found).  Should only be invoked
-     *  on a base resource.
-     * 
-     *  @param locale to localize for, or null for no localization.
-     *  @return a localized version of this resource, of null if the resource
-     *  itself does not exist.
-     * 
-     **/
-    
-    public IResourceLocation getLocalization(Locale locale);
-    
-    /**
-     *  Returns at a relative location to this resource.  
-     *  The new resource may or may not exist; this can be determined
-     *  via {@link #getResourceURL()}.
-     * 
-     *  @param name name of new resource, possibly as a relative path, or
-     *  as an absolute path (starting with a slash).
-     * 
-     **/
-    
-    public IResourceLocation getRelativeLocation(String name);
-    
-    /**
-     *  Returns the path that represents the resource.  This should 
-     *  only be used when the type of resource is known.
-     * 
-     **/
-    
-    public String getPath();
-
-    /**
-     *  Returns the locale for which this resource has been localized 
-     *  or null if the resource has not been localized. This should 
-     *  only be used when the type of resource is known.
-     * 
-     *  This locale is the same or more general than the locale for which localization 
-     *  was requested. For example, if the requested locale was en_US, but only the file 
-     *  Home_en was found, this locale returned would be en. 
-     **/
-    
-    public Locale getLocale();
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/IResourceResolver.java b/3.0.4/framework/src/org/apache/tapestry/IResourceResolver.java
deleted file mode 100644
index d83717a..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/IResourceResolver.java
+++ /dev/null
@@ -1,67 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry;
-
-import java.net.URL;
-
-import ognl.ClassResolver;
-
-/**
- * An object which is used to resolve classes and class-path resources.
- * This is needed because, in an application server, different class loaders
- * will be loading the Tapestry framework and the specific Tapestry application.
- *
- * <p>The class loader for the framework needs to be able to see resources in
- * the application, but the application's class loader is a descendent of the
- * framework's class loader.  To resolve this, we need a 'hook', an instance
- * that provides access to the application's class loader.
- * 
- * <p>To more easily support OGNL, this interface now extends
- *  {@link ognl.ClassResolver}.
- * 
- * @author Howard Lewis Ship
- * @version $Id$
- **/
-
-public interface IResourceResolver extends ClassResolver
-{
-    /**
-     *  Forwarded, unchanged, to the class loader.  Returns null if the
-     *  resource is not found.
-     *
-     **/
-
-    public URL getResource(String name);
-
-    /**
-     *  Forwarded, to the the method
-     *  <code>Class.forName(String, boolean, ClassLoader)</code>, using
-     *  the application's class loader.
-     *
-     *  Throws an {@link ApplicationRuntimeException} on any error.
-     **/
-
-    public Class findClass(String name);
-    
-    /**
-     *  Returns a {@link java.lang.ClassLoader} that can see
-     *  all the classes the resolver can access.
-     * 
-     *  @since 3.0
-     * 
-     **/
-    
-    public ClassLoader getClassLoader();
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/IScript.java b/3.0.4/framework/src/org/apache/tapestry/IScript.java
deleted file mode 100644
index 3dddea5..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/IScript.java
+++ /dev/null
@@ -1,55 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry;
-
-import java.util.Map;
-
-/**
- *  An object that can convert a set of symbols into a collection of JavaScript statements.
- *
- *  <p>IScript implementation must be threadsafe.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 1.0.2
- * 
- **/
-
-public interface IScript
-{
-    /**
-     *  Returns the location from which the script was loaded.
-     *
-     **/
-
-    public IResourceLocation getScriptLocation();
-
-    /**
-     * Executes the script, which will read and modify the symbols {@link Map}.  The
-     * script works with the {@link IScriptProcessor} to get the generated JavaScript
-     * included on the page.
-     * 
-     * @param cycle the current request cycle
-     * @param processor an object that processes the results of the script, typically
-     * an instance of {@link org.apache.tapestry.html.Body}
-     * @param symbols Map of input symbols; execution of the script may modify the map,
-     * creating new output symbols
-     * 
-     * @see org.apache.tapestry.html.Body#get(IRequestCycle)
-     *
-     */
-
-    public void execute(IRequestCycle cycle, IScriptProcessor processor, Map symbols);
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/IScriptProcessor.java b/3.0.4/framework/src/org/apache/tapestry/IScriptProcessor.java
deleted file mode 100644
index ec5179c..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/IScriptProcessor.java
+++ /dev/null
@@ -1,59 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry;
-
-/**
- * Defines methods needed by a {@link org.apache.tapestry.IScript} to
- * execute.
- *
- * @author Howard Lewis Ship
- * @version $Id$
- * @since 3.0
- * @see org.apache.tapestry.html.Body
- */
-
-public interface IScriptProcessor
-{
-	/**
-	 * Adds scripting code to the main body.  During the render, multiple scripts may
-	 * render multiple bodies; all are concatinated together to form
-	 * a single block.
-	 */
-	
-	public void addBodyScript(String script);
-	
-	/**
-	 * Adds initialization script.  Initialization script is executed once, when
-	 * the containing page loads.  Effectively, this means that initialization script
-	 * is stored inside the HTML &lt;body&gt; element's <code>onload</code>
-	 * event handler.
-	 */
-	public void addInitializationScript(String script);
-	
-	/**
-	 * Adds an external script.  The processor is expected to ensure
-	 * that external scripts are only loaded a single time per page.
-	 */
-	
-	public void addExternalScript(IResourceLocation location);
-	
-	/**
-	 * Ensures that the given string is unique.  The string
-	 * is either returned unchanged, or a suffix is appended to
-	 * ensure uniqueness.
-	 */
-	
-	public String getUniqueString(String baseValue);
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/Location.java b/3.0.4/framework/src/org/apache/tapestry/Location.java
deleted file mode 100644
index cd71e84..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/Location.java
+++ /dev/null
@@ -1,114 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry;
-
-import org.apache.commons.lang.builder.EqualsBuilder;
-import org.apache.commons.lang.builder.HashCodeBuilder;
-
-/**
- *  Implementation of the {@link org.apache.tapestry.ILocation} interface.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 3.0
- *
- **/
-public class Location implements ILocation
-{
-    private IResourceLocation _resourceLocation;
-    private int _lineNumber = -1;
-    private int _columnNumber = -1;
-
-    public Location(IResourceLocation location)
-    {
-        _resourceLocation = location;
-    }
-
-    public Location(IResourceLocation location, int lineNumber)
-    {
-        this(location);
-
-        _lineNumber = lineNumber;
-    }
-
-    public Location(IResourceLocation location, int lineNumber, int columnNumber)
-    {
-        this(location);
-
-        _lineNumber = lineNumber;
-        _columnNumber = columnNumber;
-    }
-
-    public IResourceLocation getResourceLocation()
-    {
-        return _resourceLocation;
-    }
-
-    public int getLineNumber()
-    {
-        return _lineNumber;
-    }
-
-    public int getColumnNumber()
-    {
-        return _columnNumber;
-    }
-
-    public int hashCode()
-    {
-        HashCodeBuilder builder = new HashCodeBuilder(237, 53);
-
-        builder.append(_resourceLocation);
-        builder.append(_lineNumber);
-        builder.append(_columnNumber);
-
-        return builder.toHashCode();
-    }
-
-    public boolean equals(Object other)
-    {
-        if (!(other instanceof ILocation))
-            return false;
-
-        ILocation l = (ILocation) other;
-
-        EqualsBuilder builder = new EqualsBuilder();
-        builder.append(_lineNumber, l.getLineNumber());
-        builder.append(_columnNumber, l.getColumnNumber());
-        builder.append(_resourceLocation, l.getResourceLocation());
-
-        return builder.isEquals();
-    }
-
-    public String toString()
-    {
-        if (_lineNumber <= 0 && _columnNumber <= 0)
-            return _resourceLocation.toString();
-        StringBuffer buffer = new StringBuffer(_resourceLocation.toString());
-        if (_lineNumber > 0)
-        {
-            buffer.append(", line ");
-            buffer.append(_lineNumber);
-        }
-
-        if (_columnNumber > 0)
-        {
-            buffer.append(", column ");
-            buffer.append(_columnNumber);
-        }
-
-        return buffer.toString();
-    }
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/PageRedirectException.java b/3.0.4/framework/src/org/apache/tapestry/PageRedirectException.java
deleted file mode 100644
index c990fef..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/PageRedirectException.java
+++ /dev/null
@@ -1,55 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry;
-
-/**
- *  Exception thrown by a {@link IComponent component} or {@link org.apache.tapestry.engine.IEngineService}
- *  that wishes to force the application to a particular page.  This is often used
- *  to protect a sensitive page until the user is authenticated.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- **/
-
-public class PageRedirectException extends ApplicationRuntimeException
-{
-    private String _targetPageName;
-
-    public PageRedirectException(String targetPageName)
-    {
-        this(targetPageName, null, null, targetPageName);
-    }
-
-    public PageRedirectException(IPage page)
-    {
-        this(page.getPageName());
-    }
-
-    public PageRedirectException(
-        String message,
-        Object component,
-        Throwable rootCause,
-        String targetPageName)
-    {
-        super(message, component, null, rootCause);
-
-        _targetPageName = targetPageName;
-    }
-
-    public String getTargetPageName()
-    {
-        return _targetPageName;
-    }
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/RedirectException.java b/3.0.4/framework/src/org/apache/tapestry/RedirectException.java
deleted file mode 100644
index 3bc8d44..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/RedirectException.java
+++ /dev/null
@@ -1,59 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry;
-
-/**
- *  Exception thrown to force a redirection to an arbitrary location.
- *  This is used when, after processing a request (such as a form
- *  submission or a link being clicked), it is desirable to go
- *  to some arbitrary new location.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 1.0.6
- *
- **/
-
-public class RedirectException extends ApplicationRuntimeException
-{
-	private String _redirectLocation;
-
-	public RedirectException(String redirectLocation)
-	{
-		this(null, redirectLocation);
-	}
-
-	/** 
-	 *  @param message A message describing why the redirection is taking place.
-	 *  @param redirectLocation The location to redirect to, may be a relative path (relative
-	 *  to the {@link javax.servlet.ServletContext}).
-	 *
-	 *  @see javax.servlet.http.HttpServletResponse#sendRedirect(String)
-	 *  @see javax.servlet.http.HttpServletResponse#encodeRedirectURL(String)
-	 *
-	 **/
-
-	public RedirectException(String message, String redirectLocation)
-	{
-		super(message);
-
-		_redirectLocation = redirectLocation;
-	}
-
-	public String getRedirectLocation()
-	{
-		return _redirectLocation;
-	}
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/RedirectFilter.java b/3.0.4/framework/src/org/apache/tapestry/RedirectFilter.java
deleted file mode 100644
index de679b8..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/RedirectFilter.java
+++ /dev/null
@@ -1,109 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry;
-
-import java.io.IOException;
-
-import javax.servlet.Filter;
-import javax.servlet.FilterChain;
-import javax.servlet.FilterConfig;
-import javax.servlet.ServletException;
-import javax.servlet.ServletRequest;
-import javax.servlet.ServletResponse;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-/**
- * Filter used to redirect a root context URL (i.e., "/context" or "/context/"
- * to the Tapestry application servlet (typically, "/context/app").  This
- * servlet is mapped to "/" and must have a &lt;init-parameter&;gt; 
- * <code>redirect-path</code> that is the application servlet's path (i.e.,
- * "/app").  If no value is specified, then "/app" is used.  The path
- * is always relative to the servlet context, and should always
- * begin with a leading slash.
- *  
- * <p>Filters are only available in Servlet API 2.3 and above.
- * 
- * <p>Servlet API 2.4 is expected to allow a servlets in the welcome list
- * (equivalent to index.html or index.jsp), at which point this filter
- * should no longer be necessary.
- *
- * @author Howard Lewis Ship
- * @version $Id$
- * @since 3.0
- */
-
-public class RedirectFilter implements Filter
-{
-    private static final Log LOG = LogFactory.getLog(RedirectFilter.class);
-    public static final String REDIRECT_PATH_PARAM = "redirect-path";
-
-    private String _redirectPath;
-
-    public void init(FilterConfig config) throws ServletException
-    {
-        _redirectPath = config.getInitParameter(REDIRECT_PATH_PARAM);
-
-        if (Tapestry.isBlank(_redirectPath))
-            _redirectPath = "/app";
-
-        if (LOG.isDebugEnabled())
-            LOG.debug(Tapestry.format("RedirectServlet.redirect-path", _redirectPath));
-    }
-
-    public void destroy()
-    {
-
-    }
-
-    /**
-     * This filter intercepts the so-called "default" servlet, whose job is
-     * to provide access to standard resources packaged within the web application
-     * context.  This code is interested in only the very root, redirecting
-     * to the appropriate Tapestry application servlet.  Other values
-     * are passed through unchanged.
-     */
-    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
-        throws IOException, ServletException
-    {
-        HttpServletRequest hrequest = (HttpServletRequest) request;
-        HttpServletResponse hresponse = (HttpServletResponse) response;
-
-        String servletPath = hrequest.getServletPath();
-        String pathInfo = hrequest.getPathInfo();
-
-        // Been experimenting with different servlet containers.  In Jetty 4.2.8 and Tomcat 4.1,
-        // resources have a non-null servletPath.  If JBossWeb 3.0.6, the servletPath is
-        // null and the pathInfo indicates the relative location of the resource.
-
-        if ((Tapestry.isBlank(servletPath) || servletPath.equals("/"))
-            && (Tapestry.isBlank(pathInfo) || pathInfo.equals("/")))
-        {
-            String path = hrequest.getContextPath() + _redirectPath;
-
-            if (LOG.isDebugEnabled())
-                LOG.debug(Tapestry.format("RedirectServlet.redirecting", path));
-
-            hresponse.sendRedirect(path);
-            return;
-        }
-
-        chain.doFilter(request, response);
-    }
-
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/RenderRewoundException.java b/3.0.4/framework/src/org/apache/tapestry/RenderRewoundException.java
deleted file mode 100644
index 6c31ddc..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/RenderRewoundException.java
+++ /dev/null
@@ -1,32 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry;
-
-/**
- *  A special subclass of {@link ApplicationRuntimeException} that can be thrown
- *  when a component has determined that the state of the page has been
- *  rewound.
- *
- * @author Howard Lewis Ship
- * @version $Id$
- **/
-
-public class RenderRewoundException extends ApplicationRuntimeException
-{
-    public RenderRewoundException(Object component)
-    {
-        super(null, component, null, null);
-    }
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/StaleLinkException.java b/3.0.4/framework/src/org/apache/tapestry/StaleLinkException.java
deleted file mode 100644
index ac10e88..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/StaleLinkException.java
+++ /dev/null
@@ -1,115 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry;
-
-/**
- *  Exception thrown by an {@link org.apache.tapestry.engine.IEngineService} when it discovers that
- *  the an action link was for an out-of-date version of the page.
- *
- *  <p>The application should redirect to the StaleLink page.
- *
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- * 
- **/
-
-public class StaleLinkException extends ApplicationRuntimeException
-{
-    private transient IPage _page;
-    private String _pageName;
-    private String _targetIdPath;
-    private String _targetActionId;
-
-    public StaleLinkException()
-    {
-        super(null, null, null, null);
-    }
-
-    /**
-     *  Constructor used when the action id is found, but the target id path
-     *  did not match the actual id path.
-     *
-     **/
-
-    public StaleLinkException(IComponent component, String targetActionId, String targetIdPath)
-    {
-        super(
-            Tapestry.format(
-                "StaleLinkException.action-mismatch",
-                new String[] { targetActionId, component.getIdPath(), targetIdPath }),
-            component,
-            null,
-            null);
-
-        _page = component.getPage();
-        _pageName = _page.getPageName();
-
-        _targetActionId = targetActionId;
-        _targetIdPath = targetIdPath;
-    }
-
-    /**
-     *  Constructor used when the target action id is not found.
-     *
-     **/
-
-    public StaleLinkException(IPage page, String targetActionId, String targetIdPath)
-    {
-        this(
-            Tapestry.format(
-                "StaleLinkException.component-mismatch",
-                targetActionId,
-                targetIdPath),
-            page);
-
-        _targetActionId = targetActionId;
-        _targetIdPath = targetIdPath;
-    }
-
-    public StaleLinkException(String message, IComponent component)
-    {
-        super(message, component, null, null);
-    }
-
-
-
-    public String getPageName()
-    {
-        return _pageName;
-    }
-
-    /**
-     *  Returns the page referenced by the service URL, if known, 
-     *  or null otherwise.
-     *
-     **/
-
-    public IPage getPage()
-    {
-        return _page;
-    }
-    
-    public String getTargetActionId()
-    {
-        return _targetActionId;
-    }
-
-    public String getTargetIdPath()
-    {
-        return _targetIdPath;
-    }
-
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/StaleSessionException.java b/3.0.4/framework/src/org/apache/tapestry/StaleSessionException.java
deleted file mode 100644
index d30d372..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/StaleSessionException.java
+++ /dev/null
@@ -1,64 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry;
-
-/**
- *  Exception thrown by an {@link org.apache.tapestry.engine.IEngineService} when it discovers that
- *  the {@link javax.servlet.http.HttpSession}
- *  has timed out (and been replaced by a new, empty
- *  one).
- *
- *  <p>The application should redirect to the stale-session page.
- *
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *
- **/
-
-public class StaleSessionException extends ApplicationRuntimeException
-{
-    private transient IPage _page;
-    private String _pageName;
-
-    public StaleSessionException()
-    {
-        this(null, null);
-    }
-
-    public StaleSessionException(String message, IPage page)
-    {
-        super(message, page, null, null);
-        _page = page;
-
-        if (page != null)
-            _pageName = page.getPageName();
-    }
-
-    public String getPageName()
-    {
-        return _pageName;
-    }
-
-    /**
-     *  Returns the page referenced by the service URL, if known, or null otherwise.
-     *
-     **/
-
-    public IPage getPage()
-    {
-        return _page;
-    }
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/Tapestry.java b/3.0.4/framework/src/org/apache/tapestry/Tapestry.java
deleted file mode 100644
index bcf3824..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/Tapestry.java
+++ /dev/null
@@ -1,1571 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.text.MessageFormat;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Locale;
-import java.util.Map;
-import java.util.Properties;
-import java.util.ResourceBundle;
-import java.util.Set;
-
-import javax.servlet.ServletContext;
-
-import org.apache.tapestry.event.ChangeObserver;
-import org.apache.tapestry.event.ObservedChangeEvent;
-import org.apache.tapestry.request.RequestContext;
-import org.apache.tapestry.resource.ContextResourceLocation;
-import org.apache.tapestry.spec.IComponentSpecification;
-import org.apache.tapestry.util.AdaptorRegistry;
-import org.apache.tapestry.util.StringSplitter;
-
-/**
- *  A placeholder for a number of (static) methods that don't belong elsewhere, as well
- *  as a global location for static constants.
- *
- *  @since 1.0.1
- *  @version $Id$
- *  @author Howard Lewis Ship
- *
- **/
-
-public final class Tapestry
-{
-    /**
-     *  Name of a request attribute used with the
-     *  {@link #TAGSUPPORT_SERVICE} service.  The attribute
-     *  defines the underlying service to for which a URL will be generated.
-     *
-     *  @since 3.0
-     *
-     **/
-
-    public final static String TAG_SUPPORT_SERVICE_ATTRIBUTE =
-        "org.apache.tapestry.tagsupport.service";
-
-    /**
-     * Name of a request attribute used with the
-     * {@link #TAGSUPPORT_SERVICE} service.  The attribute
-     * defines the correct servlet path for the
-     * Tapestry application (which, for the odd-man-out TAGSUPPORT_SERVICE
-     * may not match HttpServletRequest.getServletPath() because of
-     * the use of an include.
-     *
-     * @since 3.0
-     */
-
-    public final static String TAG_SUPPORT_SERVLET_PATH_ATTRIBUTE =
-        "org.apache.tapestry.tagsupport.servlet-path";
-
-    /**
-     *  Name of a request attribute used with the
-     *  {@link #TAGSUPPORT_SERVICE} service.  The attribute
-     *  defines an array of objects to be converted into
-     *  service parameters (i.e., for use with the
-     *  {@link #EXTERNAL_SERVICE}).
-     *
-     *  @since 3.0
-     *
-     **/
-
-    public final static String TAG_SUPPORT_PARAMETERS_ATTRIBUTE =
-        "org.apache.tapestry.tagsupport.parameters";
-
-    /**
-     *  Service used to support rendering of JSP tags.  tagsupport is provided
-     *  with a service and service parameters via request attributes
-     *  and creates a URI from the result, which is output to the response.
-     *
-     *  @since 3.0
-     *
-     **/
-
-    public static final String TAGSUPPORT_SERVICE = "tagsupport";
-
-    /**
-     *  The name ("action") of a service that allows behavior to be associated with
-     *  an {@link IAction} component, such as {@link org.apache.tapestry.link.ActionLink} or
-     *  {@link org.apache.tapestry.form.Form}.
-     *
-     *  <p>This service is used with actions that are tied to the
-     *  dynamic state of the page, and which require a rewind of the page.
-     *
-     **/
-
-    public final static String ACTION_SERVICE = "action";
-
-    /**
-     *  The name ("direct") of a service that allows stateless behavior for an {@link
-     *  org.apache.tapestry.link.DirectLink} component.
-     *
-     *  <p>This service rolls back the state of the page but doesn't
-     *  rewind the the dynamic state of the page the was the action
-     *  service does, which is more efficient but less powerful.
-     *
-     *  <p>An array of String parameters may be included with the
-     *  service URL; these will be made available to the {@link org.apache.tapestry.link.DirectLink}
-     *  component's listener.
-     *
-     **/
-
-    public final static String DIRECT_SERVICE = "direct";
-
-    /**
-     *  The name ("external") of a service that a allows {@link IExternalPage} to be selected.
-     *  Associated with a {@link org.apache.tapestry.link.ExternalLink} component.
-     *
-     *  <p>This service enables {@link IExternalPage}s to be accessed via a URL.
-     *  External pages may be booked marked using their URL for future reference.
-     *
-     *  <p>An array of Object parameters may be included with the
-     *  service URL; these will be passed to the
-     *  {@link IExternalPage#activateExternalPage(Object[], IRequestCycle)} method.
-     *
-     **/
-
-    public final static String EXTERNAL_SERVICE = "external";
-
-    /**
-     *  The name ("page") of a service that allows a new page to be selected.
-     *  Associated with a {@link org.apache.tapestry.link.PageLink} component.
-     *
-     *  <p>The service requires a single parameter:  the name of the target page.
-     **/
-
-    public final static String PAGE_SERVICE = "page";
-
-    /**
-     *  The name ("home") of a service that jumps to the home page.  A stand-in for
-     *  when no service is provided, which is typically the entrypoint
-     *  to the application.
-     *
-     **/
-
-    public final static String HOME_SERVICE = "home";
-
-    /**
-     *  The name ("restart") of a service that invalidates the session and restarts
-     *  the application.  Typically used just
-     *  to recover from an exception.
-     *
-     **/
-
-    public static final String RESTART_SERVICE = "restart";
-
-    /**
-     *  The name ("asset") of a service used to access internal assets.
-     *
-     **/
-
-    public static final String ASSET_SERVICE = "asset";
-
-    /**
-     *  The name ("reset") of a service used to clear cached template
-     *  and specification data and remove all pooled pages.
-     *  This is only used when debugging as
-     *  a quick way to clear the out cached data, to allow updated
-     *  versions of specifications and templates to be loaded (without
-     *  stopping and restarting the servlet container).
-     *
-     *  <p>This service is only available if the Java system property
-     *  <code>org.apache.tapestry.enable-reset-service</code>
-     *  is set to <code>true</code>.
-     *
-     **/
-
-    public static final String RESET_SERVICE = "reset";
-
-    /**
-     *  Query parameter that identfies the service for the
-     *  request.
-     *
-     *  @since 1.0.3
-     *
-     **/
-
-    public static final String SERVICE_QUERY_PARAMETER_NAME = "service";
-
-    /**
-     *  The query parameter for application specific parameters to the
-     *  service (this is used with the direct service).  Each of these
-     *  values is encoded with {@link java.net.URLEncoder#encode(String)} before
-     *  being added to the URL.  Multiple values are handle by repeatedly
-     *  establishing key/value pairs (this is a change from behavior in
-     *  2.1 and earlier).
-     *
-     *  @since 1.0.3
-     *
-     **/
-
-    public static final String PARAMETERS_QUERY_PARAMETER_NAME = "sp";
-
-    /**
-     *  Property name used to get the extension used for templates.  This
-     *  may be set in the page or component specification, or in the page (or
-     *  component's) immediate container (library or application specification).
-     *  Unlike most properties, value isn't inherited all the way up the chain.
-     *  The default template extension is "html".
-     *
-     *  @since 3.0
-     *
-     **/
-
-    public static final String TEMPLATE_EXTENSION_PROPERTY =
-        "org.apache.tapestry.template-extension";
-
-    /**
-     *  The default extension for templates, "html".
-     *
-     *  @since 3.0
-     *
-     **/
-
-    public static final String DEFAULT_TEMPLATE_EXTENSION = "html";
-
-    /**
-     *  The name of an {@link org.apache.tapestry.IRequestCycle} attribute in which the
-     *  currently rendering {@link org.apache.tapestry.components.ILinkComponent}
-     *  is stored.  Link components do not nest.
-     *
-     **/
-
-    public static final String LINK_COMPONENT_ATTRIBUTE_NAME =
-        "org.apache.tapestry.active-link-component";
-
-    /**
-     *  Suffix appended to a parameter name to form the name of a property that stores the
-     *  binding for the parameter.
-     *
-     *  @since 3.0
-     *
-     **/
-
-    public static final String PARAMETER_PROPERTY_NAME_SUFFIX = "Binding";
-
-    /**
-     *  Name of application extension used to resolve page and component
-     *  specifications that can't be located by the normal means.  The
-     *  extension must implement
-     *  {@link org.apache.tapestry.resolver.ISpecificationResolverDelegate}.
-     *
-     *  @since 3.0
-     *
-     **/
-
-    public static final String SPECIFICATION_RESOLVER_DELEGATE_EXTENSION_NAME =
-        "org.apache.tapestry.specification-resolver-delegate";
-
-    /**
-     *  Name of application extension used to resolve page and component
-     *  templates that can't be located by the normal means.
-     *  The extension must implement
-     *  {@link org.apache.tapestry.engine.ITemplateSourceDelegate}.
-     *
-     *  @since 3.0
-     *
-     **/
-
-    public static final String TEMPLATE_SOURCE_DELEGATE_EXTENSION_NAME =
-        "org.apache.tapestry.template-source-delegate";
-
-    /**
-     *   Key used to obtain an extension from the application specification.  The extension,
-     *   if it exists, implements {@link org.apache.tapestry.request.IRequestDecoder}.
-     *
-     *   @since 2.2
-     *
-     **/
-
-    public static final String REQUEST_DECODER_EXTENSION_NAME =
-        "org.apache.tapestry.request-decoder";
-
-    /**
-     *  Name of optional application extension for the multipart decoder
-     *  used by the application.  The extension must implement
-     *  {@link org.apache.tapestry.multipart.IMultipartDecoder}
-     *  (and is generally a configured instance of
-     *  {@link org.apache.tapestry.multipart.DefaultMultipartDecoder}).
-     *
-     *  @since 3.0
-     *
-     **/
-
-    public static final String MULTIPART_DECODER_EXTENSION_NAME =
-        "org.apache.tapestry.multipart-decoder";
-
-    /**
-     * Method id used to check that {@link IPage#validate(IRequestCycle)}
-     * is invoked.
-     * @see #checkMethodInvocation(Object, String, Object)
-     * @since 3.0
-     */
-
-    public static final String ABSTRACTPAGE_VALIDATE_METHOD_ID = "AbstractPage.validate()";
-
-    /**
-     * Method id used to check that {@link IPage#detach()} is invoked.
-     * @see #checkMethodInvocation(Object, String, Object)
-     * @since 3.0
-     */
-
-    public static final String ABSTRACTPAGE_DETACH_METHOD_ID = "AbstractPage.detach()";
-
-    /**
-     *  Regular expression defining a simple property name.  Used by several different
-     *  parsers. Simple property names match Java variable names; a leading letter
-     *  (or underscore), followed by letters, numbers and underscores.
-     *
-     *  @since 3.0
-     *
-     **/
-
-    public static final String SIMPLE_PROPERTY_NAME_PATTERN = "^_?[a-zA-Z]\\w*$";
-
-    /**
-     * Name of an application extension used as a factory for
-     * {@link org.apache.tapestry.engine.IMonitor} instances.  The extension
-     * must implement {@link org.apache.tapestry.engine.IMonitorFactory}.
-     *
-     * @since 3.0
-     */
-
-    public static final String MONITOR_FACTORY_EXTENSION_NAME =
-        "org.apache.tapestry.monitor-factory";
-
-    /**
-     * Class name of an {@link ognl.TypeConverter} implementing class
-     * to use as a type converter for {@link org.apache.tapestry.binding.ExpressionBinding}
-     */
-    public static final String OGNL_TYPE_CONVERTER = "org.apache.tapestry.ognl-type-converter";
-
-    /**
-     *  Prevent instantiation.
-     *
-     **/
-
-    private Tapestry()
-    {
-    }
-
-    /**
-     *  The version of the framework; this is updated for major releases.
-     *
-     **/
-
-    public static final String VERSION = readVersion();
-
-    /**
-     *  Contains strings loaded from TapestryStrings.properties.
-     *
-     *  @since 1.0.8
-     *
-     **/
-
-    private static ResourceBundle _strings;
-
-    /**
-     *  A {@link Map} that links Locale names (as in {@link Locale#toString()} to
-     *  {@link Locale} instances.  This prevents needless duplication
-     *  of Locales.
-     *
-     **/
-
-    private static final Map _localeMap = new HashMap();
-
-    static {
-        Locale[] locales = Locale.getAvailableLocales();
-        for (int i = 0; i < locales.length; i++)
-        {
-            _localeMap.put(locales[i].toString(), locales[i]);
-        }
-    }
-
-    /**
-     *  Used for tracking if a particular super-class method has been invoked.
-     */
-
-    private static final ThreadLocal _invokedMethodIds = new ThreadLocal();
-
-    /**
-     *  A {@link org.apache.tapestry.util.AdaptorRegistry} used to coerce arbitrary objects
-     *  to boolean values.
-     *
-     *  @see #evaluateBoolean(Object)
-     **/
-
-    private static final AdaptorRegistry _booleanAdaptors = new AdaptorRegistry();
-
-    private static abstract class BoolAdaptor
-    {
-        /**
-         *  Implemented by subclasses to coerce an object to a boolean.
-         *
-         **/
-
-        public abstract boolean coerce(Object value);
-    }
-
-    private static class BooleanAdaptor extends BoolAdaptor
-    {
-        public boolean coerce(Object value)
-        {
-            Boolean b = (Boolean) value;
-
-            return b.booleanValue();
-        }
-    }
-
-    private static class NumberAdaptor extends BoolAdaptor
-    {
-        public boolean coerce(Object value)
-        {
-            Number n = (Number) value;
-
-            return n.intValue() > 0;
-        }
-    }
-
-    private static class CollectionAdaptor extends BoolAdaptor
-    {
-        public boolean coerce(Object value)
-        {
-            Collection c = (Collection) value;
-
-            return c.size() > 0;
-        }
-    }
-
-    private static class StringAdaptor extends BoolAdaptor
-    {
-        public boolean coerce(Object value)
-        {
-            String s = (String) value;
-
-            if (s.length() == 0)
-                return false;
-
-            String ts = s.trim();
-            if (ts.length() == 0)
-                return false;
-
-            // Here probably Boolean.getBoolean(s) should be used,
-            // but we need the opposite check
-            if (ts.equalsIgnoreCase("false"))
-                return false;
-
-            return true;
-        }
-    }
-
-    static {
-        _booleanAdaptors.register(Boolean.class, new BooleanAdaptor());
-        _booleanAdaptors.register(Number.class, new NumberAdaptor());
-        _booleanAdaptors.register(Collection.class, new CollectionAdaptor());
-        _booleanAdaptors.register(String.class, new StringAdaptor());
-
-        // Register a default, catch-all adaptor.
-
-        _booleanAdaptors.register(Object.class, new BoolAdaptor()
-        {
-            public boolean coerce(Object value)
-            {
-                return true;
-            }
-        });
-    }
-
-    /**
-     *  {@link AdaptorRegistry} used to extract an {@link Iterator} from
-     *  an arbitrary object.
-     *
-     **/
-
-    private static AdaptorRegistry _iteratorAdaptors = new AdaptorRegistry();
-
-    private abstract static class IteratorAdaptor
-    {
-        /**
-         *  Coeerces the object into an {@link Iterator}.
-         *
-         **/
-
-        abstract public Iterator coerce(Object value);
-    }
-
-    private static class DefaultIteratorAdaptor extends IteratorAdaptor
-    {
-        public Iterator coerce(Object value)
-        {
-            return (Iterator) value;
-        }
-
-    }
-
-    private static class CollectionIteratorAdaptor extends IteratorAdaptor
-    {
-        public Iterator coerce(Object value)
-        {
-            Collection c = (Collection) value;
-
-            if (c.size() == 0)
-                return null;
-
-            return c.iterator();
-        }
-    }
-
-    private static class ObjectIteratorAdaptor extends IteratorAdaptor
-    {
-        public Iterator coerce(Object value)
-        {
-            return Collections.singleton(value).iterator();
-        }
-    }
-
-    private static class ObjectArrayIteratorAdaptor extends IteratorAdaptor
-    {
-        public Iterator coerce(Object value)
-        {
-            Object[] array = (Object[]) value;
-
-            if (array.length == 0)
-                return null;
-
-            return Arrays.asList(array).iterator();
-        }
-    }
-
-    private static class BooleanArrayIteratorAdaptor extends IteratorAdaptor
-    {
-        public Iterator coerce(Object value)
-        {
-            boolean[] array = (boolean[]) value;
-
-            if (array.length == 0)
-                return null;
-
-            List l = new ArrayList(array.length);
-
-            for (int i = 0; i < array.length; i++)
-                l.add(array[i] ? Boolean.TRUE : Boolean.FALSE);
-
-            return l.iterator();
-        }
-    }
-
-    private static class ByteArrayIteratorAdaptor extends IteratorAdaptor
-    {
-        public Iterator coerce(Object value)
-        {
-            byte[] array = (byte[]) value;
-
-            if (array.length == 0)
-                return null;
-
-            List l = new ArrayList(array.length);
-
-            for (int i = 0; i < array.length; i++)
-                l.add(new Byte(array[i]));
-
-            return l.iterator();
-        }
-    }
-
-    private static class CharArrayIteratorAdaptor extends IteratorAdaptor
-    {
-        public Iterator coerce(Object value)
-        {
-            char[] array = (char[]) value;
-
-            if (array.length == 0)
-                return null;
-
-            List l = new ArrayList(array.length);
-
-            for (int i = 0; i < array.length; i++)
-                l.add(new Character(array[i]));
-
-            return l.iterator();
-        }
-    }
-
-    private static class ShortArrayIteratorAdaptor extends IteratorAdaptor
-    {
-        public Iterator coerce(Object value)
-        {
-            short[] array = (short[]) value;
-
-            if (array.length == 0)
-                return null;
-
-            List l = new ArrayList(array.length);
-
-            for (int i = 0; i < array.length; i++)
-                l.add(new Short(array[i]));
-
-            return l.iterator();
-        }
-    }
-
-    private static class IntArrayIteratorAdaptor extends IteratorAdaptor
-    {
-        public Iterator coerce(Object value)
-        {
-            int[] array = (int[]) value;
-
-            if (array.length == 0)
-                return null;
-
-            List l = new ArrayList(array.length);
-
-            for (int i = 0; i < array.length; i++)
-                l.add(new Integer(array[i]));
-
-            return l.iterator();
-        }
-    }
-
-    private static class LongArrayIteratorAdaptor extends IteratorAdaptor
-    {
-        public Iterator coerce(Object value)
-        {
-            long[] array = (long[]) value;
-
-            if (array.length == 0)
-                return null;
-
-            List l = new ArrayList(array.length);
-
-            for (int i = 0; i < array.length; i++)
-                l.add(new Long(array[i]));
-
-            return l.iterator();
-        }
-    }
-
-    private static class FloatArrayIteratorAdaptor extends IteratorAdaptor
-    {
-        public Iterator coerce(Object value)
-        {
-            float[] array = (float[]) value;
-
-            if (array.length == 0)
-                return null;
-
-            List l = new ArrayList(array.length);
-
-            for (int i = 0; i < array.length; i++)
-                l.add(new Float(array[i]));
-
-            return l.iterator();
-        }
-    }
-
-    private static class DoubleArrayIteratorAdaptor extends IteratorAdaptor
-    {
-        public Iterator coerce(Object value)
-        {
-            double[] array = (double[]) value;
-
-            if (array.length == 0)
-                return null;
-
-            List l = new ArrayList(array.length);
-
-            for (int i = 0; i < array.length; i++)
-                l.add(new Double(array[i]));
-
-            return l.iterator();
-        }
-    }
-
-    static {
-        _iteratorAdaptors.register(Iterator.class, new DefaultIteratorAdaptor());
-        _iteratorAdaptors.register(Collection.class, new CollectionIteratorAdaptor());
-        _iteratorAdaptors.register(Object.class, new ObjectIteratorAdaptor());
-        _iteratorAdaptors.register(Object[].class, new ObjectArrayIteratorAdaptor());
-        _iteratorAdaptors.register(boolean[].class, new BooleanArrayIteratorAdaptor());
-        _iteratorAdaptors.register(byte[].class, new ByteArrayIteratorAdaptor());
-        _iteratorAdaptors.register(char[].class, new CharArrayIteratorAdaptor());
-        _iteratorAdaptors.register(short[].class, new ShortArrayIteratorAdaptor());
-        _iteratorAdaptors.register(int[].class, new IntArrayIteratorAdaptor());
-        _iteratorAdaptors.register(long[].class, new LongArrayIteratorAdaptor());
-        _iteratorAdaptors.register(float[].class, new FloatArrayIteratorAdaptor());
-        _iteratorAdaptors.register(double[].class, new DoubleArrayIteratorAdaptor());
-    }
-
-    /**
-     *  Copys all informal {@link IBinding bindings} from a source component
-     *  to the destination component.  Informal bindings are bindings for
-     *  informal parameters.  This will overwrite parameters (formal or
-     *  informal) in the
-     *  destination component if there is a naming conflict.
-     *
-     *
-     **/
-
-    public static void copyInformalBindings(IComponent source, IComponent destination)
-    {
-        Collection names = source.getBindingNames();
-
-        if (names == null)
-            return;
-
-        IComponentSpecification specification = source.getSpecification();
-        Iterator i = names.iterator();
-
-        while (i.hasNext())
-        {
-            String name = (String) i.next();
-
-            // If not a formal parameter, then copy it over.
-
-            if (specification.getParameter(name) == null)
-            {
-                IBinding binding = source.getBinding(name);
-
-                destination.setBinding(name, binding);
-            }
-        }
-    }
-
-    /**
-     *  Evaluates an object to determine its boolean value.
-     *
-     *  <table border=1>
-     *	<tr> <th>Class</th> <th>Test</th> </tr>
-     *  <tr>
-     *		<td>{@link Boolean}</td>
-     *		<td>Self explanatory.</td>
-     *	</tr>
-     *	<tr> <td>{@link Number}</td>
-     *		<td>True if non-zero, false otherwise.</td>
-     *		</tr>
-     *	<tr>
-     *		<td>{@link Collection}</td>
-     *		<td>True if contains any elements (non-zero size), false otherwise.</td>
-     *		</tr>
-     *	<tr>
-     *		<td>{@link String}</td>
-     *		<td>True if contains any non-whitespace characters, false otherwise.</td>
-     *		</tr>
-     *	<tr>
-     *		<td>Any Object array type</td>
-     *		<td>True if contains any elements (non-zero length), false otherwise.</td>
-     *	<tr>
-     *</table>
-     *
-     * <p>Any other non-null object evaluates to true.
-     *
-     **/
-
-    public static boolean evaluateBoolean(Object value)
-    {
-        if (value == null)
-            return false;
-
-        Class valueClass = value.getClass();
-        if (valueClass.isArray())
-        {
-            Object[] array = (Object[]) value;
-
-            return array.length > 0;
-        }
-
-        BoolAdaptor adaptor = (BoolAdaptor) _booleanAdaptors.getAdaptor(valueClass);
-
-        return adaptor.coerce(value);
-    }
-
-    /**
-     *  Converts an Object into an {@link Iterator}, following some basic rules.
-     *
-     *  <table border=1>
-     * 	<tr><th>Input Class</th> <th>Result</th> </tr>
-     * <tr><td>array</td> <td>Converted to a {@link List} and iterator returned.
-     * null returned if the array is empty.  This works with both object arrays and
-     *  arrays of scalars. </td>
-     * </tr>
-     * <tr><td>{@link Iterator}</td> <td>Returned as-is.</td>
-     * <tr><td>{@link Collection}</td> <td>Iterator returned, or null
-     *  if the Collection is empty</td> </tr>
-    
-     * <tr><td>Any other</td> <td>{@link Iterator} for singleton collection returned</td> </tr>
-     * <tr><td>null</td> <td>null returned</td> </tr>
-     * </table>
-     *
-     **/
-
-    public static Iterator coerceToIterator(Object value)
-    {
-        if (value == null)
-            return null;
-
-        IteratorAdaptor adaptor = (IteratorAdaptor) _iteratorAdaptors.getAdaptor(value.getClass());
-
-        return adaptor.coerce(value);
-    }
-
-    /**
-     *  Gets the {@link Locale} for the given string, which is the result
-     *  of {@link Locale#toString()}.  If no such locale is already registered,
-     *  a new instance is created, registered and returned.
-     *
-     *
-     **/
-
-    public static Locale getLocale(String s)
-    {
-        Locale result = null;
-
-        synchronized (_localeMap)
-        {
-            result = (Locale) _localeMap.get(s);
-        }
-
-        if (result == null)
-        {
-            StringSplitter splitter = new StringSplitter('_');
-            String[] terms = splitter.splitToArray(s);
-
-            switch (terms.length)
-            {
-                case 1 :
-
-                    result = new Locale(terms[0], "");
-                    break;
-
-                case 2 :
-
-                    result = new Locale(terms[0], terms[1]);
-                    break;
-
-                case 3 :
-
-                    result = new Locale(terms[0], terms[1], terms[2]);
-                    break;
-
-                default :
-
-                    throw new IllegalArgumentException(
-                        "Unable to convert '" + s + "' to a Locale.");
-            }
-
-            synchronized (_localeMap)
-            {
-                _localeMap.put(s, result);
-            }
-
-        }
-
-        return result;
-
-    }
-
-    /**
-     *  Closes the stream (if not null), ignoring any {@link IOException} thrown.
-     *
-     *  @since 1.0.2
-     *
-     **/
-
-    public static void close(InputStream stream)
-    {
-        if (stream != null)
-        {
-            try
-            {
-                stream.close();
-            }
-            catch (IOException ex)
-            {
-                // Ignore.
-            }
-        }
-    }
-
-    /**
-     *  Gets a string from the TapestryStrings resource bundle.
-     *  The string in the bundle
-     *  is treated as a pattern for {@link MessageFormat#format(java.lang.String, java.lang.Object[])}.
-     *
-     *  @since 1.0.8
-     *
-     **/
-
-    public static String format(String key, Object[] args)
-    {
-        if (_strings == null)
-            _strings = ResourceBundle.getBundle("org.apache.tapestry.TapestryStrings");
-
-        String pattern = _strings.getString(key);
-
-        if (args == null)
-            return pattern;
-
-        return MessageFormat.format(pattern, args);
-    }
-
-    /**
-     *  Convienience method for invoking {@link #format(String, Object[])}.
-     *
-     *  @since 3.0
-     **/
-
-    public static String getMessage(String key)
-    {
-        return format(key, null);
-    }
-
-    /**
-     *  Convienience method for invoking {@link #format(String, Object[])}.
-     *
-     *  @since 3.0
-     **/
-
-    public static String format(String key, Object arg)
-    {
-        return format(key, new Object[] { arg });
-    }
-
-    /**
-     *  Convienience method for invoking {@link #format(String, Object[])}.
-     *
-     *  @since 3.0
-     *
-     **/
-
-    public static String format(String key, Object arg1, Object arg2)
-    {
-        return format(key, new Object[] { arg1, arg2 });
-    }
-
-    /**
-     *  Convienience method for invoking {@link #format(String, Object[])}.
-     *
-     *  @since 3.0
-     *
-     **/
-
-    public static String format(String key, Object arg1, Object arg2, Object arg3)
-    {
-        return format(key, new Object[] { arg1, arg2, arg3 });
-    }
-
-    private static final String UNKNOWN_VERSION = "Unknown";
-
-    /**
-     *  Invoked when the class is initialized to read the current version file.
-     *
-     **/
-
-    private static final String readVersion()
-    {
-        Properties props = new Properties();
-
-        try
-        {
-            InputStream in = Tapestry.class.getResourceAsStream("Version.properties");
-
-            if (in == null)
-                return UNKNOWN_VERSION;
-
-            props.load(in);
-
-            in.close();
-
-            return props.getProperty("framework.version", UNKNOWN_VERSION);
-        }
-        catch (IOException ex)
-        {
-            return UNKNOWN_VERSION;
-        }
-
-    }
-
-    /**
-     *  Returns the size of a collection, or zero if the collection is null.
-     *
-     *  @since 2.2
-     *
-     **/
-
-    public static int size(Collection c)
-    {
-        if (c == null)
-            return 0;
-
-        return c.size();
-    }
-
-    /**
-     *  Returns the length of the array, or 0 if the array is null.
-     *
-     *  @since 2.2
-     *
-     **/
-
-    public static int size(Object[] array)
-    {
-        if (array == null)
-            return 0;
-
-        return array.length;
-    }
-
-    /**
-     *  Returns true if the Map is null or empty.
-     *
-     *  @since 3.0
-     *
-     **/
-
-    public static boolean isEmpty(Map map)
-    {
-        return map == null || map.isEmpty();
-    }
-
-    /**
-     *  Returns true if the Collection is null or empty.
-     *
-     *  @since 3.0
-     *
-     **/
-
-    public static boolean isEmpty(Collection c)
-    {
-        return c == null || c.isEmpty();
-    }
-
-    /**
-     *  Converts a {@link Map} to an even-sized array of key/value
-     *  pairs.  This may be useful when using a Map as service parameters
-     *  (with {@link org.apache.tapestry.link.DirectLink}.  Assuming the keys
-     *  and values are simple objects (String, Boolean, Integer, etc.), then
-     *  the representation as an array will encode more efficiently
-     *  (via {@link org.apache.tapestry.util.io.DataSqueezer} than
-     *  serializing the Map and its contents.
-     *
-     *  @return the array of keys and values, or null if the input
-     *  Map is null or empty
-     *
-     *  @since 2.2
-     **/
-
-    public static Object[] convertMapToArray(Map map)
-    {
-        if (isEmpty(map))
-            return null;
-
-        Set entries = map.entrySet();
-
-        Object[] result = new Object[2 * entries.size()];
-        int x = 0;
-
-        Iterator i = entries.iterator();
-        while (i.hasNext())
-        {
-            Map.Entry entry = (Map.Entry) i.next();
-
-            result[x++] = entry.getKey();
-            result[x++] = entry.getValue();
-        }
-
-        return result;
-    }
-
-    /**
-     *  Converts an even-sized array of objects back
-     *  into a {@link Map}.
-     *
-     *  @see #convertMapToArray(Map)
-     *  @return a Map, or null if the array is null or empty
-     *  @since 2.2
-     *
-     **/
-
-    public static Map convertArrayToMap(Object[] array)
-    {
-        if (array == null || array.length == 0)
-            return null;
-
-        if (array.length % 2 != 0)
-            throw new IllegalArgumentException(getMessage("Tapestry.even-sized-array"));
-
-        Map result = new HashMap();
-
-        int x = 0;
-        while (x < array.length)
-        {
-            Object key = array[x++];
-            Object value = array[x++];
-
-            result.put(key, value);
-        }
-
-        return result;
-    }
-
-    /**
-     *  Returns the application root location, which is in the
-     *  {@link javax.servlet.ServletContext}, based on
-     *  the {@link javax.servlet.http.HttpServletRequest#getServletPath() servlet path}.
-     *
-     *  @since 3.0
-     *
-     **/
-
-    public static IResourceLocation getApplicationRootLocation(IRequestCycle cycle)
-    {
-        RequestContext context = cycle.getRequestContext();
-        ServletContext servletContext = context.getServlet().getServletContext();
-        String servletPath = context.getRequest().getServletPath();
-
-        // Could strip off the servlet name (i.e., "app" in "/app") but
-        // there's no need.
-
-        return new ContextResourceLocation(servletContext, servletPath);
-    }
-
-    /**
-     * Given a Class, creates a presentable name for the class, even if the
-     * class is a scalar type or Array type.
-     *
-     * @since 3.0
-     */
-
-    public static String getClassName(Class subject)
-    {
-        if (subject.isArray())
-            return getClassName(subject.getComponentType()) + "[]";
-
-        return subject.getName();
-    }
-
-    /**
-     *  Selects the first {@link org.apache.tapestry.ILocation} in an array of objects.
-     *  Skips over nulls.  The objects may be instances of
-     *  {Location or {@link org.apache.tapestry.ILocatable}.  May return null
-     *  if no Location found found.
-     *
-     **/
-
-    public static ILocation findLocation(Object[] locations)
-    {
-        for (int i = 0; i < locations.length; i++)
-        {
-            Object location = locations[i];
-
-            if (location == null)
-                continue;
-
-            if (location instanceof ILocation)
-                return (ILocation) location;
-
-            if (location instanceof ILocatable)
-            {
-                ILocatable locatable = (ILocatable) location;
-                ILocation result = locatable.getLocation();
-
-                if (result != null)
-                    return result;
-            }
-        }
-
-        return null;
-    }
-
-    /**
-     *  Creates an exception indicating the binding value is null.
-     *
-     *  @since 3.0
-     *
-     **/
-
-    public static BindingException createNullBindingException(IBinding binding)
-    {
-        return new BindingException(getMessage("null-value-for-binding"), binding);
-    }
-
-    /** @since 3.0 **/
-
-    public static ApplicationRuntimeException createNoSuchComponentException(
-        IComponent component,
-        String id,
-        ILocation location)
-    {
-        return new ApplicationRuntimeException(
-            format("no-such-component", component.getExtendedId(), id),
-            component,
-            location,
-            null);
-    }
-
-    /** @since 3.0 **/
-
-    public static BindingException createRequiredParameterException(
-        IComponent component,
-        String parameterName)
-    {
-        return new BindingException(
-            format("required-parameter", parameterName, component.getExtendedId()),
-            component,
-            null,
-            component.getBinding(parameterName),
-            null);
-    }
-
-    /** @since 3.0 **/
-
-    public static ApplicationRuntimeException createRenderOnlyPropertyException(
-        IComponent component,
-        String propertyName)
-    {
-        return new ApplicationRuntimeException(
-            format("render-only-property", propertyName, component.getExtendedId()),
-            component,
-            null,
-            null);
-    }
-
-    /**
-     * Clears the list of method invocations.
-     * @see #checkMethodInvocation(Object, String, Object)
-     *
-     * @since 3.0
-     */
-
-    public static void clearMethodInvocations()
-    {
-        _invokedMethodIds.set(null);
-    }
-
-    /**
-     * Adds a method invocation to the list of invocations. This is done
-     * in a super-class implementations.
-     *
-     * @see #checkMethodInvocation(Object, String, Object)
-     * @since 3.0
-     *
-     */
-
-    public static void addMethodInvocation(Object methodId)
-    {
-        List methodIds = (List) _invokedMethodIds.get();
-
-        if (methodIds == null)
-        {
-            methodIds = new ArrayList();
-            _invokedMethodIds.set(methodIds);
-        }
-
-        methodIds.add(methodId);
-    }
-
-    /**
-     * Checks to see if a particular method has been invoked.  The method is identified by a
-     * methodId (usually a String).  The methodName and object are used to create an
-     * error message.
-     *
-     * <p>
-     * The caller should invoke {@link #clearMethodInvocations()}, then invoke a method on
-     * the object.  The super-class implementation should invoke {@link #addMethodInvocation(Object)}
-     * to indicate that it was, in fact, invoked.  The caller then invokes
-     * this method to vlaidate that the super-class implementation was invoked.
-     *
-     * <p>
-     * The list of method invocations is stored in a {@link ThreadLocal} variable.
-     *
-     * @since 3.0
-     */
-
-    public static void checkMethodInvocation(Object methodId, String methodName, Object object)
-    {
-        List methodIds = (List) _invokedMethodIds.get();
-
-        if (methodIds != null && methodIds.contains(methodId))
-            return;
-
-        throw new ApplicationRuntimeException(
-            Tapestry.format(
-                "Tapestry.missing-method-invocation",
-                object.getClass().getName(),
-                methodName));
-    }
-
-    /**
-     * Method used by pages and components to send notifications about
-     * property changes.
-     *
-     * @param component the component containing the property
-     * @param propertyName the name of the property which changed
-     * @param newValue the new value for the property
-     *
-     * @since 3.0
-     */
-    public static void fireObservedChange(
-        IComponent component,
-        String propertyName,
-        Object newValue)
-    {
-        ChangeObserver observer = component.getPage().getChangeObserver();
-
-        if (observer == null)
-            return;
-
-        ObservedChangeEvent event = new ObservedChangeEvent(component, propertyName, newValue);
-
-        observer.observeChange(event);
-    }
-
-    /**
-     * Method used by pages and components to send notifications about
-     * property changes.
-     *
-     * @param component the component containing the property
-     * @param propertyName the name of the property which changed
-     * @param newValue the new value for the property
-     *
-     * @since 3.0
-     */
-    public static void fireObservedChange(
-        IComponent component,
-        String propertyName,
-        boolean newValue)
-    {
-        ChangeObserver observer = component.getPage().getChangeObserver();
-
-        if (observer == null)
-            return;
-
-        ObservedChangeEvent event =
-            new ObservedChangeEvent(
-                component,
-                propertyName,
-                newValue ? Boolean.TRUE : Boolean.FALSE);
-
-        observer.observeChange(event);
-    }
-
-    /**
-     * Method used by pages and components to send notifications about
-     * property changes.
-     *
-     * @param component the component containing the property
-     * @param propertyName the name of the property which changed
-     * @param newValue the new value for the property
-     *
-     * @since 3.0
-     */
-    public static void fireObservedChange(
-        IComponent component,
-        String propertyName,
-        double newValue)
-    {
-        ChangeObserver observer = component.getPage().getChangeObserver();
-
-        if (observer == null)
-            return;
-
-        ObservedChangeEvent event =
-            new ObservedChangeEvent(component, propertyName, new Double(newValue));
-
-        observer.observeChange(event);
-    }
-
-    /**
-     * Method used by pages and components to send notifications about
-     * property changes.
-     *
-     * @param component the component containing the property
-     * @param propertyName the name of the property which changed
-     * @param newValue the new value for the property
-     *
-     * @since 3.0
-     */
-    public static void fireObservedChange(
-        IComponent component,
-        String propertyName,
-        float newValue)
-    {
-        ChangeObserver observer = component.getPage().getChangeObserver();
-
-        if (observer == null)
-            return;
-
-        ObservedChangeEvent event =
-            new ObservedChangeEvent(component, propertyName, new Float(newValue));
-
-        observer.observeChange(event);
-    }
-
-    /**
-    * Method used by pages and components to send notifications about
-    * property changes.
-    *
-    * @param component the component containing the property
-    * @param propertyName the name of the property which changed
-    * @param newValue the new value for the property
-    *
-    * @since 3.0
-    */
-    public static void fireObservedChange(IComponent component, String propertyName, int newValue)
-    {
-        ChangeObserver observer = component.getPage().getChangeObserver();
-
-        if (observer == null)
-            return;
-
-        ObservedChangeEvent event =
-            new ObservedChangeEvent(component, propertyName, new Integer(newValue));
-
-        observer.observeChange(event);
-    }
-
-    /**
-    * Method used by pages and components to send notifications about
-    * property changes.
-    *
-    * @param component the component containing the property
-    * @param propertyName the name of the property which changed
-    * @param newValue the new value for the property
-    *
-    * @since 3.0
-    */
-    public static void fireObservedChange(IComponent component, String propertyName, long newValue)
-    {
-        ChangeObserver observer = component.getPage().getChangeObserver();
-
-        if (observer == null)
-            return;
-
-        ObservedChangeEvent event =
-            new ObservedChangeEvent(component, propertyName, new Long(newValue));
-
-        observer.observeChange(event);
-    }
-
-    /**
-     * Method used by pages and components to send notifications about
-     * property changes.
-     *
-     * @param component the component containing the property
-     * @param propertyName the name of the property which changed
-     * @param newValue the new value for the property
-     *
-     * @since 3.0
-     */
-    public static void fireObservedChange(IComponent component, String propertyName, char newValue)
-    {
-        ChangeObserver observer = component.getPage().getChangeObserver();
-
-        if (observer == null)
-            return;
-
-        ObservedChangeEvent event =
-            new ObservedChangeEvent(component, propertyName, new Character(newValue));
-
-        observer.observeChange(event);
-    }
-
-    /**
-     * Method used by pages and components to send notifications about
-     * property changes.
-     *
-     * @param component the component containing the property
-     * @param propertyName the name of the property which changed
-     * @param newValue the new value for the property
-     *
-     * @since 3.0
-     */
-    public static void fireObservedChange(IComponent component, String propertyName, byte newValue)
-    {
-        ChangeObserver observer = component.getPage().getChangeObserver();
-
-        if (observer == null)
-            return;
-
-        ObservedChangeEvent event =
-            new ObservedChangeEvent(component, propertyName, new Byte(newValue));
-
-        observer.observeChange(event);
-    }
-
-    /**
-     * Method used by pages and components to send notifications about
-     * property changes.
-     *
-     * @param component the component containing the property
-     * @param propertyName the name of the property which changed
-     * @param newValue the new value for the property
-     *
-     * @since 3.0
-     */
-    public static void fireObservedChange(
-        IComponent component,
-        String propertyName,
-        short newValue)
-    {
-        ChangeObserver observer = component.getPage().getChangeObserver();
-
-        if (observer == null)
-            return;
-
-        ObservedChangeEvent event =
-            new ObservedChangeEvent(component, propertyName, new Short(newValue));
-
-        observer.observeChange(event);
-    }
-
-    /**
-     * Returns true if the input is null or contains only whitespace.
-     * 
-     * <p>
-     * Note: Yes, you'd think we'd use <code>StringUtils</code>, but with
-     * the change in names and behavior between releases, it is smarter
-     * to just implement our own little method!
-     * 
-     * @since 3.0
-     */
-
-    public static boolean isBlank(String input)
-    {
-        if (input == null || input.length() == 0)
-            return true;
-
-        return input.trim().length() == 0;
-    }
-
-    /**
-     * Returns true if the input is not null and not empty (or only whitespace).
-     * 
-     * @since 3.0
-     * 
-     */
-
-    public static boolean isNonBlank(String input)
-    {
-        return !isBlank(input);
-    }
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/TapestryStrings.properties b/3.0.4/framework/src/org/apache/tapestry/TapestryStrings.properties
deleted file mode 100644
index cac3ec4..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/TapestryStrings.properties
+++ /dev/null
@@ -1,483 +0,0 @@
-# $Id$
-# Copyright 2004 The Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http:#www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-# Contains String contants used throughout the Tapestry framework.
-# To keep things organized, each key is in two parts:  the simple class name
-# and a subkey within the class name.
-
-
-# Some general messages
-
-service-no-parameters=Service {0} requires no service parameters.
-service-single-parameter=Service {0} requires exactly one service parameter.
-service-single-context-parameter=Service {0} requires exactly one context parameter.
-service-requires-parameters=Service {0} requires at least one service parameter.
-service-incorrect-parameter-count=Service {0} requires exactly {1} service parameters.
-missing-resource=Could not locate resource {0}.
-invalid-field-name=Invalid field name: {0}.
-unable-to-resolve-class=Unable to resolve class {0}.
-field-not-defined=Field {0} does not exist.
-illegal-field-access=Cannot access field {0}.
-field-is-instance=Field {0} is an instance variable, not a class variable.
-deprecated-component-param=Parameter ''{1}'' of component {0} is deprecated, use parameter ''{2}'' instead.
-must-be-wrapped-by-form={1} components must be enclosed by a Form component.
-invalid-null-parameter=Parameter ''{0}'' may not be null.
-null-value-for-binding=Binding value is null.
-no-such-component=Component {0} does not contain a component {1}.
-required-parameter=Value for parameter ''{0}'' in component {1} is null, and a non-null value is required.
-render-only-property=Property ''{0}'' of {1} may only be accessed while the component is rendering.
-unsupported-property=Property ''{1}'' is not supported by {0}.
-must-be-contained-by-body={0} components must be contained by a Body component.
-illegal-encoding=The encoding ''{0}'' is not recognized.
-
-# org.apache.tapestry
-
-AbstractComponent.attempt-to-change-container=Attempt to change existing container.
-AbstractComponent.attempt-to-change-component-id=Attempt to change existing component id.
-AbstractComponent.null-container={0} container is null.
-AbstractComponent.attempt-to-change-page=Attempt to change existing containing page.
-AbstractComponent.attempt-to-change-spec=Attempt to change existing component specification.
-
-AbstractPage.attempt-to-change-locale=Attempt to change existing locale for a page.
-AbstractPage.attempt-to-change-name=Attempt to change existing name for a page.
-
-AbstractMarkupWriter.missing-constructor-parameters=Incomplete parameters to AbstractMarkupWriter constructor.
-AbstractMarkupWriter.tag-not-open=A tag must be open before attributes may be set in an IMarkupWriter.
-
-ApplicationServlet.could-not-locate-engine=Could not locate an engine to service this request.
-ApplicationServlet.could-not-parse-spec=Unable to parse application specification {0}.
-ApplicationServlet.get-app-path-not-overriden=Application servlet {0} does not provide an implementation of method getApplicationServletPath().
-ApplicationServlet.no-application-specification=Running application without an application specification.
-ApplicationServlet.engine-stateful-without-session=Engine {0} is stateful even though there is no HttpSession.  Discarding the engine. 
-
-BaseComponent.multiple-component-references=Template for component {0} contains multiple references to embedded component {1}.
-BaseComponent.unbalanced-close-tags=More closing tags the open tags in template.
-BaseComponent.unbalance-open-tags=Not all tags closed in template.
-BaseComponent.missing-component-spec-single=Template for component {0} does not reference embedded component:
-BaseComponent.missing-component-spec-multi=Template for component {0} does not reference embedded components:
-BaseComponent.and=and
-BaseComponent.dupe-template-expression=An expression for parameter ''{0}'' of component {1} in the template for {2} conflicts with an existing binding in the specification.
-BaseComponent.template-expression-for-informal-parameter=The template for {2} contains an expression for parameter ''{0}'' of component {1}, but {1} does not allow informal parameters.
-BaseComponent.template-expression-for-reserved-parameter=The template for {2} contains an expression for parameter ''{0}'' of component {1}, but ''{0}'' is a reserved parameter name.
-BaseComponent.dupe-string=A localized string reference for parameter ''{0}'' of component {1} in the template for {2} conflicts with an existing binding in the specification.
-
-BaseComponentTemplateLoader.dupe-component-id=Component {0} (at {1}) conflicts with a prior declaration in the specification (at {2}).
-BaseComponentTemplateLoader.bodyless-component=This component may not have a body.
-
-RedirectServlet.redirect-path=Redirecting to servlet at path {0}.
-RedirectServlet.redirecting=Redirecting servlet context URL to {0}.
-
-ResponseOutputStream.content-type-not-set=Content type of response never set.
-
-StaleLinkException.action-mismatch=Action id {0} matched component {1}, not {2}.
-StaleLinkException.component-mismatch=Action id {0} does not match component {1}.
-
-Tapestry.even-sized-array=An even-sized array of keys and values is required.
-Tapestry.missing-method-invocation=Class {0} overrides method ''{1}'' but does not invoke the super-class implementation.
-
-# org.apache.tapestry.asset
-
-AssetExternalizer.externalize-failure=Could not externalize asset {0} to {1}.
-AssetService.exception-report-title=Failure to export asset {0}.
-AssetService.checksum-failure=Checksum {0} does not match that of resource {1}.
-AssetService.checksum-compute-failure=Failed to compute checksum for resource {1}.
-
-ExternalAsset.resource-missing=Could not access external asset {0}.
-
-# org.apache.tapestry.bean
-
-BeanProvider.bean-not-defined=Component {0} does not define a bean name {1}.
-BeanProvider.instantiation-error=Unable to instantiate bean ''{0}'' (for component {1}) as class {2}: {3}
-AbstractBeanInitializer.unable-to-set-property=Unable to set property ''{0}'' of {1} to {2}.
-
-# org.apache.tapestry.binding
-
-AbstractBinding.wrong-type=Parameter {0} ({1}) is an instance of {2}, which does not inherit from {3}.
-AbstractBinding.wrong-interface=Parameter {0} ({1}) is an instance of {2}, which does not implement interface {3}.
-AbstractBinding.read-only-binding=Binding value may not be updated.
-
-ExpressionBinding.unable-to-resolve-expression=Unable to resolve expression ''{0}'' for {1}.
-ExpressionBinding.unable-to-update-expression=Unable to update expression ''{0}'' for {1} to {2}.
-
-ListenerBinding.invalid-access=Inappropriate invocation of {0} on instance of ListenerBinding.
-ListenerBinding.bsf-exception=Unable to execute listener script "{0}": {1}
-ListenerBinding.unable-to-undeclare-bean=Unable to undeclare bean ''{0}'' after executing "{0}".
-
-# org.apache.tapestry.callback
-
-DirectCallback.wrong-type=Component {0} does not implement the IDirect interface.
-
-# org.apache.tapestry.component
-
-Insert.unable-to-format=Unable to format object {0}.
-Any.element-not-defined=The Any component is not used in a template and the 'element' property is not bound.
-
-# org.apache.tapestry.param
-
-ParameterManager.no-accessor=Component {0} does not have accessor methods for property {1}.
-ParameterManager.property-not-read-write=Property {1} of component {0} is not read-write.
-ParameterManager.java-type-not-specified=No Java type was specified for parameter {0} of component {1}.
-ParameterManager.type-mismatch=Parameter {0} of component {1} is declared as {2}, but the property is {3}.
-ParameterManager.static-initialization-failure=Unable to set property {0} of component {1} from {2}.
-ParameterManager.incompatible-direction-and-binding=Parameter {0} of component {1} is direction {2} which is incompatible with {3}.
-
-# org.apache.tapestry.engine
-
-AbstractEngine.unable-to-process-client-request=Unable to process client request.
-AbstractEngine.unable-to-present-exception-page=Unable to present exception page.
-AbstractEngine.unknown-specification=<Unknown specification>
-AbstractEngine.unknown-service=Engine does not implement a service named ''{0}''.
-AbstractEngine.unable-to-begin-request=Tapestry unable to begin processing request.
-AbstractEngine.unable-to-cleanup-page=Unable to cleanup page {0}.
-AbstractEngine.unable-to-instantiate-visit=Unable to instantiate visit object from class {0}.
-AbstractEngine.unable-to-instantiate-global=Unable to instantiate global object from class {0}.
-AbstractEngine.unable-to-redirect=Unable to redirect to {0}.
-AbstractEngine.service-name-mismatch=Class {1} is registered as service {0} but provides service {2} instead.
-AbstractEngine.unable-to-instantiate-service=Unable to instantiate class {1} as service {0}.
-AbstractEngine.unable-to-find-dispatcher=Unable to find a request dispatcher for local resource ''{0}''.
-AbstractEngine.unable-to-forward=Unable to forward to local resource ''{0}''.
-AbstractEngine.unable-to-create-cleanup-context=Unable to create an instance of RequestContext to process end-of-session page cleanups.
-AbstractEngine.exception-during-cleanup=Exception during post-request cleanup.
-AbstractEngine.exception-during-cache-clear=Exception while clearing caches after request.
-AbstractEngine.validate-cycle=A validate cycle during page activation was detected: {0}.
-
-ActionService.context-parameters=Service action requires either three or four service contect parameters.
-ActionService.action-component-wrong-type=Component {0} does not implement the IAction interface.
-
-DefaultScriptSource.unable-to-parse-script=Unable to parse script {0}.
-
-DefaultSpecificationSource.no-match-for-alias=Could not find a component matching alias {0}.
-DefaultSpecificationSource.unable-to-locate-specification=Could not locate resource {0} in the classpath.
-DefaultSpecificationSource.unable-to-open-specification=Could not open specification {0}.
-DefaultSpecificationSource.unable-to-parse-specification=Could not parse specification {0}.
-
-DefaultTemplateSource.no-template-for-component=Could not find template for component {0} in locale {1}.
-DefaultTemplateSource.no-template-for-page=Could not find template for page {0} in locale {1}.
-DefaultTemplateSource.unable-to-parse-template=Could not parse template {0}.
-DefaultTemplateSource.unable-to-read-template=Could not read template {0}.
-
-DirectService.context-parameters=Service direct requires either three or four service context parameters.
-DirectService.component-wrong-type=Component {0} does not implement the IDirect interface.
-DirectService.stale-session-exception=Component {0} is stateful, but the HttpSession has expired (or has not yet been created).
-
-EngineServiceLink.unknown-parameter-name=Unknown parameter name ''{0}''.
-
-Namespace.no-such-page=Page ''{0}'' not found in {1}.
-Namespace.no-such-component-type=Component ''{0}'' not found in {1}.
-Namespace.application-namespace=application namespace
-Namespace.framework-namespace=framework namespace
-Namespace.nested-namespace=namespace ''{0}''
-Namespace.library-id-not-found=Library ''{0}'' not found in {1}.
-
-RequestCycle.invalid-null-name=Parameter name may not be null in RequestCycle.getPage(String).
-RequestCycle.form-rewind-failure=Failure to rewind form {0}.
-
-ResourceResolver.unable-to-load-class=Could not load class {0} from {1}: {2}
-
-TagSupportService.service-only=The tagsupport service does not support tag generation.
-TagSupportService.null-attribute=Request attribute ''{0}'' is required by the tagsupport service, but the value is null.
-TagSupportService.attribute-not-string=Request attribute ''{0}'' is an instance of {1}, not a string.
-TagSupportService.attribute-not-array=Request attribute ''{0}'' is an instance of {0}, not an object array.
-BaseEngine.recorder-has-uncommited-changes=Could not forget changes to page {0} because the page's recorder has uncommitted changes.
-BaseEngine.duplicate-page-recorder=Could not create a second page recorder for page {0}.
-
-ExternalService.page-not-compatible=Page {0} does not implement the IExternalPage interface.
-
-# org.apache.tapestry.enhance
-
-ComponentClassFactory.bad-property-type=Unable to convert ''{0}'' to a property type.
-ComponentClassFactory.property-type-mismatch=Unable to enhance class {0} because it contains property ''{1}'' of type {2}, not the expected type {3}.
-ComponentClassFactory.non-abstract-read=Unable to enhance class {0} because it implements a non-abstract read method for property ''{1}''.
-ComponentClassFactory.non-abstract-write=Unable to enhance class {0} because it implements a non-abstract write method for property ''{1}''.
-ComponentClassFactory.unable-to-introspect-class=Unable to introspect properties of class {0}.
-ComponentClassFactory.auto-must-be-required=Parameter ''{0}'' must be required or have a default value as it uses direction ''auto''.
-ComponentClassFactory.code-generation-error=A code generation error occured while enhancing class {0}.
-
-
-EnhancedClassLoader.unable-to-define-class=Unable to define class {0}: {1}
-
-MethodFabricator.no-more-arguments=No more arguments may be added once any local variables are added.
-
-DefaultComponentClassEnhancer.no-impl-for-abstract-method=Method ''{0}'' (declared in {1}) has no implementation in class {2} (or enhanced subclass {3}).
-
-
-# org.apache.tapestry.event
-
-ObservedChangeEvent.null-property-name=Must specify a non-null propertyName when creating ObservedChangeEvent for {0}.
-ObservedChangeEvent.must-be-serializable=Must specify a serializable object as the new value of property when creating an ObservedChangeEvent.
-
-# org.apache.tapestry.form
-
-AbstractFormComponent.must-be-contained-by-form=This component must be contained within a Form.
-
-Form.forms-may-not-nest=Forms may not be nested.
-Form.needs-body-for-event-handlers=A Form with event handlers must be enclosed by a Body component.
-Form.too-many-ids=Rewind of form {0} expected only {1} form elements, but an additional id was requested by component {2}.
-Form.too-few-ids=Rewind of form {0} expected {1} more form elements, starting with id ''{2}''.
-Form.id-mismatch=Rewind of form {0} expected allocated id #{1} to be ''{2}'', but was ''{3}'' (requested by component {4}).
-Form.encoding-type-contention=Components within Form {0} have requested conflicting encoding types ''{1}'' and ''{2}''.
-
-ListEdit.unable-to-convert-value=Unable to convert {0} to an external string in ListEdit component.
-ListEdit.unable-to-convert-string=Unable to convert {0} back into an object in ListEdit component.
-
-FormConditional.unable-to-convert-value=Unable to convert {0} to an external string in FormConditional component.
-FormConditional.unable-to-convert-string=Unable to convert {0} back into an object in FormConditional component.
-
-Option.must-be-contained-by-select=Option component must be contained within a Select.
-
-Radio.must-be-contained-by-group=Radio component must be contained within a RadioGroup.
-
-RadioGroup.may-not-nest=RadioGroup components may not be nested.
-
-Select.may-not-nest=Select components may not be nested.
-
-LinkSubmit.may-not-nest=LinkSubmit components may not be nested.
-
-# org.apache.tapestry.html
-
-Body.may-not-nest=Body components may not be nested.
-Body.include-classpath-script-only=Unable to include external script {0}: only classpath resources are supported.
-
-InsertText.conversion-error=Error converting text to lines (for InsertText component).
-
-Rollover.must-be-contained-by-body=Rollover components must be contained within a Body component.
-Rollover.must-be-contained-by-link=Rollover components must be contained within an ILinkComponent.
-
-Script.must-be-contained-by-body=Script components must be contained within a Body component.
-
-# org.apache.tapestry.contrib.inspector
-
-ShowEngine.could-not-serialize=Could not serialize the application engine.
-
-InspectorButton.must-be-contained-by-body=InspectorButton component must be contained within a Body component.
-
-# org.apache.tapestry.jsp
-
-URLRetriever.unable-to-find-dispatcher=Unable to find request dispatcher for servlet at ''{0}''.
-URLRetriever.io-exception=I/O exception messaging servlet {0}: {1}
-URLRetriever.servlet-exception=Servlet exception messaging servlet {0}: {1}
-
-AbstractLinkTag.io-exception=I/O exception writing output: {1}
-
-AbstractTapestryTag.unable-to-evaluate-expression=Unable to evaluate OGNL expression ''{0}'': {1}
-
-# org.apache.tapestry.link
-
-GestureLink.missing-service=No engine service name {0}.
-
-AbstractLinkComponent.no-nesting=ILinkComponents may not be nested.
-AbstractLinkComponent.events-need-body=A link component with multiple functions for a single event type must be contained within a Body.
-
-# org.apache.tapestry.listener
-
-ListenerMap.object-missing-method=Object {0} does not implement a listener method named ''{1}''.
-ListenerMap.unable-to-invoke-method=Unable to invoke method {0} on {1}: {2}
-
-# org.apache.tapestry.multipart
-
-UploadPart.unable-to-open-content-file=Unable to open uploaded file ''{0}''.
-UploadPart.write-failure=Error writing uploaded content to {0}: {1}
-
-DefaultMultipartDecoder.unable-to-decode=Unable to decode request: {0}
-DefaultMultipartDecoder.encoding-not-set=No encoding has been set for this request.
-
-# org.apache.tapestry.pageload
-
-PageLoader.formal-parameters-only=Component {0} allows only formal parameters, binding {1} is not allowed.
-PageLoader.required-parameter-not-bound=Required parameter {0} of component {1} is not bound.
-PageLoader.unable-to-load-specification=Unable to load component specification.
-PageLoader.class-not-component=Class {0} does not implement the IComponent interface.
-PageLoader.unable-to-instantiate=Unable to instantiate an instance of class {0}.
-PageLoader.page-not-allowed=Component {0} may not implement the IPage interface.
-PageLoader.class-not-page=Class {0} does not implement the IPage interface.
-PageLoader.unable-to-instantiate-component=Unable to instantiate component {0}: {1}
-PageLoader.missing-asset=Unable to locate asset ''{0}'' of component {1} as {2}.
-PageLoader.unable-to-initialize-property=Unable to initialize property {0} of {1}: {2}
-PageLoader.inherit-informal-invalid-component-formal-only=Component {0} allows only formal parameters, but has inherit-informal-parameters set.
-PageLoader.inherit-informal-invalid-container-formal-only=Component {0} allows only formal parameters, but it contains component {1} that has inherit-informal-parameters set.
-
-EstablishDefaultParameterValuesVisitor.parameter-must-have-no-default-value=Parameter {1} of component {0} is required and must not have a default value.
-
-# org.apache.tapestry.parse
-
-TextToken.error-trimming={0}: Failure trimming leading and trailing whitespace.
-
-SpecificationParser.fail-convert-boolean=Could not convert ''{0}'' to boolean.
-SpecificationParser.fail-convert-int=Could not convert ''{0}'' to integer.
-SpecificationParser.fail-convert-double=Could not convert ''{0}'' to double.
-SpecificationParser.fail-convert-long=Could not convert ''{0}'' to long.
-SpecificationParser.unexpected-component-public-id=Unexpected component specification with public identifier {0}.
-SpecificationParser.unexpected-application-public-id=Unexpected application specification with public identifier {0}.
-SpecificationParser.both-type-and-copy-of=Contained component {0} contains both type and copy-of attributes.
-SpecificationParser.missing-type-or-copy-of=Contained component {0} does not specify attribute type or copy-of.
-SpecificationParser.unable-to-copy=Unable to copy component {0}, which does not exist.
-SpecificationParser.invalid-parameter-name=Parameter ''{0}'' is an invalid name.  Parameter names should be valid Java identifiers.
-SpecificationParser.invalid-page-name=''{0}'' is not a valid page name.  Page names must start with a letter and consist only of letters, numbers, period, dash and underscore.
-SpecificationParser.invalid-component-type=''{0}'' is not a valid component type.  Types must be valid Java identifiers.
-SpecificationParser.invalid-property-name=''{0}'' is not a valid JavaBean property name.  Property names must be valid Java identifiers.
-SpecificationParser.invalid-bean-name=''{0}'' is not a valid helper bean name.  Helper bean names must be valid Java identifiers.
-SpecificationParser.unknown-static-value-type=Unknown <static-value> type: ''{0}''.
-SpecificationParser.invalid-component-id=''{0}'' is not a valid component id.  Component ids must be valid Java identifiers.
-SpecificationParser.invalid-asset-name=''{0}'' is not a valid asset name.  Asset names must be valid Java identifiers.
-SpecificationParser.invalid-service-name=''{0}'' is not a valid service name.  Service names must start with a letter, and contain only letters, numbers, dash, underscore and period.
-SpecificationParser.invalid-library-id=''{0}'' is not a valid library id.  Library ids must be valid Java identifiers.
-SpecificationParser.invalid-extension-name=''{0}'' is not a valid extension name.  Extension names must start with a letter, and contain only letters, numbers, dash and underscore.
-SpecificationParser.invalid-component-type=''{0}'' is not a valid component type.
-SpecificationParser.framework-library-id-is-reserved=The library id ''{0}'' is reserved and may not be used.
-SpecificationParser.no-attribute-and-body=It is not valid to specify a value for attribute ''{0}'' of <{1}> and provide a value in the body of the element.
-SpecificationParser.required-extended-attribute=Element <{0}> does not specify a value for attribute ''{1}'', or contain a body value.
-SpecificationParser.error-reading-resource=Unable to read {0}: {1}
-
-ValidatePublicIdRule.no-public-id=Document {0} does not define a public id.
-
-TemplateParser.comment-not-ended=Comment on line {0} did not end.
-TemplateParser.unclosed-tag=Tag <{0}> on line {1} is never closed.
-TemplateParser.unclosed-unknown-tag=Tag on line {1} is never closed.
-TemplateParser.missing-attribute-value=Tag <{0}> on line {1} is missing a value for attribute {2}.
-TemplateParser.content-block-may-not-be-ignored=Tag <{0}> on line {1} is the template content, and may not be in an ignored block.
-TemplateParser.content-block-may-not-be-empty=Tag <{0}> on line {1} is the template content, and may not be empty.
-TemplateParser.unknown-component-id=Tag <{0}> on line {1} references unknown component id ''{2}''.
-TemplateParser.component-may-not-be-ignored=Tag <{0}> on line {1} is a dynamic component, and may not appear inside an ignored block.
-TemplateParser.nested-ignore=Tag <{0}> on line {1} should be ignored, but is already inside an ignored block (ignored blocks may not be nested).
-TemplateParser.incomplete-close-tag=Incomplete close tag on line {0}.
-TemplateParser.improperly-nested-close-tag=Closing tag </{0}> on line {1} is improperly nested with tag <{2}> on line {3}.
-TemplateParser.unmatched-close-tag=Closing tag </{0}> on line {1} does not have a matching open tag.
-TemplateParser.component-id-invalid=Tag <{0}> on line {1} contains an invalid jwcid ''{2}''.
-TemplateParser.duplicate-tag-attribute=Tag <{0}> on line {1} contains more than one ''{2}'' attribute.
-
-
-TextToken.range-error={0}: out of range for template length {1}.
-TemplateToken.may-not-render={0} tokens may not render.
-
-# org.apache.tapestry.record
-
-PageRecorder.change-after-lock=Page recorder for page {0} is locked after a commit(), but received a change to property {1} of component {2}.
-PageRecorder.unable-to-persist=Unable to persist property {0} of component {1} as {2}.
-PageRecorder.null-property-name=A change event for component {0} failed to specify the name of the updated property.
-PageRecorder.unable-to-rollback=Unable to set property {0} of component {1} to {2}: {3}
-
-# org.apache.tapestry.resource
-
-ContextResourceLocation.unable-to-reference-context-path=Unable to reference context path ''{0}''.
-
-
-# org.apache.tapestry.script
-
-ScriptParser.unknown-public-id=Script uses unknown public indentifier {0}.
-ScriptParser.invalid-key=''{0}'' is not a valid key.  Symbol keys must be valid Java identifiers.
-ScriptParser.unable-to-resolve-class=''{0}'' is not a resolvable class name.
-
-InputSymbolToken.required=Script symbol ''{0}'' is required, but not specified.
-InputSymbolToken.wrong-type=Script symbol ''{0}'' is {1}, not {2}.
-
-# org.apache.tapestry.spec
-
-LibrarySpecification.duplicate-child-namespace-id=A child namespace with id ''{0}'' already exists.
-LibrarySpecification.duplicate-page-name=A page named ''{0}'' already exists in this namespace.
-LibrarySpecification.duplicate-component-alias=A component alias ''{0}'' already exists in this namespace.
-LibrarySpecification.duplicate-service-name=A service named ''{0}'' already exists in this namespace.
-LibrarySpecification.duplicate-extension-name=An extension named ''{0}'' already exists in this namespace.
-LibrarySpecification.no-such-extension=No extension named ''{0}'' exists in this namespace.
-LibrarySpecification.extension-does-not-implement-interface=Extension ''{0}'' (class {1}) does not implement interface {2}.
-LibrarySpecification.extension-not-a-subclass=Extension ''{0}'' (class {1}) does not inherit from class {2}.
-
-ComponentSpecification.duplicate-asset={0}: already contains asset ''{1}''.
-ComponentSpecification.duplicate-component={0}: already contains component ''{1}''.
-ComponentSpecification.duplicate-parameter={0}: already contains parameter ''{1}''.
-ComponentSpecification.duplicate-bean={0}: already contains bean definition for ''{1}''.
-ComponentSpecification.duplicate-property-specification={0}: already contains property specification for property ''{1}''.
-
-ExtensionSpecification.duplicate-property={0}: already contains property configuration for ''{1}''.
-ExtensionSpecification.bad-class=Unable to locate class {0}.
-
-Direction.IN=in
-Direction.FORM=form
-Direction.CUSTOM=custom
-Direction.AUTO=auto
-
-# org.apache.tapestry.util
-
-AdaptorRegistry.duplicate-registration=A registration for class {0} already exists.
-AdaptorRegistry.adaptor-not-found=Could not find an adaptor for class {0}.
-
-JanitorThread.interval-locked=The interval for this janitor thread is locked.
-JanitorThread.illegal-interval=The interval for a janitor thread may not be less than 1 millisecond.
-
-MultiKey.null-keys=Must pass in non-empty array of keys.
-MultiKey.first-element-may-not-be-null=First element of keys may not be null.
-MultiKey.no-keys=No keys for this MultiKey.
-
-Pool.unable-to-instantiate-instance=Unable to instantiate new instance of class {0}.
-
-
-# org.apache.tapestry.util.io
-
-DataSqueezer.short-prefix=The adaptor prefix must contain at least one character.
-DataSqueezer.null-class=The dataClass may not be null.
-DataSqueezer.null-adaptor=The adaptor may not be null.
-DataSqueezer.prefix-out-of-range=DataSqueezer prefix must be in the range ''!'' to ''z''.
-DataSqueezer.adaptor-prefix-taken=An adaptor for prefix ''{0}'' is already registered.
-
-SerializableAdaptor.class-not-found=Class {0} not found.
-SerializableAdaptor.unable-to-convert=Cannot convert {0} into a modified Base64 character.
-SerializableAdaptor.unable-to-interpret-char=Cannot interpret ''{0}'' as a modified Base64 character.
-
-ComponentAddressAdaptor.no-separator=Invalid ComponentAddress encoding -- separator not present
-
-# org.apache.tapestry.util.prop
-
-PropertyFinder.unable-to-introspect-class=Unable to instrospect properties of class {0}.
-
-OgnlUtils.unable-to-update-expression=Unable to update expression ''{0}'' of {1} to {2}.
-OgnlUtils.unable-to-read-expression=Unable to read expression ''{0}'' of {1}.
-OgnlUtils.unable-to-parse-expression=Unable to parse expression ''{0}''.
-
-# org.apache.tapestry.util.xml
-
-AbstractDocumentParser.incorrect-document-type=Incorrect document type; expected {0} but received {1}.
-AbstractDocumentParser.unable-to-parse=Unable to parse {0}: {1}
-AbstractDocumentParser.unable-to-read=Error reading {0}: {1}
-AbstractDocumentParser.unable-to-construct-builder=Unable to construct DocumentBuilder: {0}
-AbstractDocumentParser.invalid-identifier={0} is not a valid identifier (in element {1}).
-AbstractDocumentParser.missing-resource=Resource at {0} does not exist.
-AbstractDocumentParser.unknown-public-id=Document {0} has an unexpected public id of ''{1}''.
-
-RuleDrivenParser.no-rule-for-element=No rule is defined for parsing element ''{0}''.
-RuleDrivenParser.resource-missing=Unable to find resource {0}.
-RuleDrivenParser.unable-to-open-resource=Unable to open resource {0}.
-RuleDrivenParser.parse-error=Unable to parse {0}: {1}
-
-# org.apache.tapestry.valid
-
-FieldLabel.no-display-name=Display name not specified and not provided by field {0}.
-FieldLabel.must-be-contained-by-form=This component must be contained within a Form.
-FieldLabel.no-delegate=No IValidationDelegate is available to ValidField {0}; it is specified as the delegate parameter of Form {1}.
-
-ValidField.no-delegate=No IValidationDelegate is available to ValidField {0}; it is specified as the delegate parameter of Form {1}.
-ValidField.must-be-contained-by-body=A ValidField using client-side validation must be enclosed by a Body component.
-
-NumberValidator.unknown-type=Unknown value type {0}.
-NumberValidator.no-adaptor-for-field=Unable to provide validation for field {0} (value type {1}).
-
-PatternValidator.pattern-match-error=Unable to match pattern {0} for field {1}.
-
-# org.apache.tapestry.wml
-
-Card.cards-may-not-nest=Cards may not be nested.
-Postfield.must-be-contained-by-go=This postfield must be contained within a Go.
-
-# org.apache.tapestry.contrib.components
-
-When.must-be-contained-by-choose=When component must be contained within a Choose.
diff --git a/3.0.4/framework/src/org/apache/tapestry/asset/AbstractAsset.java b/3.0.4/framework/src/org/apache/tapestry/asset/AbstractAsset.java
deleted file mode 100644
index d69dc68..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/asset/AbstractAsset.java
+++ /dev/null
@@ -1,62 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.asset;
-
-import org.apache.commons.lang.builder.ToStringBuilder;
-import org.apache.tapestry.IAsset;
-import org.apache.tapestry.ILocation;
-import org.apache.tapestry.IResourceLocation;
-
-/**
- *  Base class for {@link org.apache.tapestry.IAsset} implementations.  Provides
- *  the location property.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 3.0
- *
- **/
-
-public abstract class AbstractAsset implements IAsset
-{
-	private IResourceLocation _resourceLocation;
-    private ILocation _location;
-
-    protected AbstractAsset(IResourceLocation resourceLocation, ILocation location)
-    {
-    	_resourceLocation = resourceLocation;
-        _location = location;
-    }
-
-    public ILocation getLocation()
-    {
-        return _location;
-    }
-    
-    public IResourceLocation getResourceLocation()
-    {
-    	return _resourceLocation;
-    }
-    
-    public String toString()
-    {
-    	ToStringBuilder builder = new ToStringBuilder(this);
-    	
-    	builder.append("resourceLocation", _resourceLocation);
-    	builder.append("location", _location);
-    	
-    	return builder.toString();
-    }
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/asset/AssetExternalizer.java b/3.0.4/framework/src/org/apache/tapestry/asset/AssetExternalizer.java
deleted file mode 100644
index 22b6600..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/asset/AssetExternalizer.java
+++ /dev/null
@@ -1,287 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.asset;
-
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.net.URL;
-import java.util.HashMap;
-import java.util.Map;
-
-import javax.servlet.ServletContext;
-import javax.servlet.http.HttpServlet;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.tapestry.ApplicationRuntimeException;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.IResourceResolver;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.engine.IPropertySource;
-import org.apache.tapestry.util.StringSplitter;
-
-/**
- *  Responsible for copying assets from the classpath to an external directory that
- *  is visible to the web server. The externalizer is stored inside
- *  the {@link ServletContext} as a named attribute.
- *
- *  <p>The externalizer uses the name <code>org.apache.tapestry.AssetExternalizer.<i>application name</i>
- *  </code>.  It configures itself using two additional 
- *  properties (searching in 
- *  {@link org.apache.tapestry.IEngine#getPropertySource()}.
- *
- *  <table border=1>
- *  <tr> <th>Parameter</th> <th>Description</th> </tr>
- *  <tr valign=top> 
- *		<td><code>org.apache.tapestry.asset.dir</code> </td>
- * 		 <td>The directory to which assets will be copied.</td> </tr>
- *  <tr valign=top>
- *		<td><code>org.apache.tapestry.asset.URL</code> </td>
- *		  <td>The corresponding URL for the asset directory.</td> </tr>
- *	</table>
- *
- * <p>If either of these parameters is null, then no externalization occurs.
- * Private assets will still be available, just less efficiently, as the application
- * will be invoked via its servlet and, ultimately, the {@link AssetService} will need
- * to retrieve the asset.
- *
- * <p>Assets maintain thier directory structure when copied.  For example,
- * an asset with a resource path of <code>/com/skunkworx/Banner.gif</code> would
- * be copied to the file system as <code><i>dir</i>/com/skunkworx/Banner.gif</code> and
- * would have a URL of <code><i>URL</i>/com/skunkworx/Banner.gif</code>.
- *
- * <p>The externalizer will create any directories as needed.
- *
- * <p>The externalizer will not overwrite existing files.  When a new version of the application
- * is deployed with changed assets, there are two deployment stategies:
- * <ul>
- * <li>Delete the existing asset directory and allow the externalizer to recreate and
- * repopulate it.
- * <li>Change the asset directory and URL, allowing the old and new assets to exist
- *  side-by-side.
- * </ul>
- *
- * <p>When using the second approach, it is best to use a directory that has
- * a version number in it, for example, <code>D:/inetpub/assets/0</code> mapped to the URL
- * <code>/assets/0</code>.  When a new version of the application is deployed, the trailing
- * version number is incremented from 0 to 1.
- * 
- *  @author Howard Lewis Ship
- *  @version $Id$
- * 
- **/
-
-public class AssetExternalizer
-{
-    private static final Log LOG = LogFactory.getLog(AssetExternalizer.class);
-
-    private IResourceResolver _resolver;
-    private File _assetDir;
-    private String _URL;
-
-    /**
-     *  A map from resource path (as a String) to final URL (as a String).
-     *
-     **/
-
-    private Map _resources = new HashMap();
-
-    private static final int BUFFER_SIZE = 2048;
-
-    protected AssetExternalizer(IRequestCycle cycle)
-    {
-        _resolver = cycle.getEngine().getResourceResolver();
-    
-        IPropertySource properties = cycle.getEngine().getPropertySource();
-
-
-        String directory = properties.getPropertyValue("org.apache.tapestry.asset.dir");
-
-        if (directory == null)
-            return;
-
-        _URL = properties.getPropertyValue("org.apache.tapestry.asset.URL");
-
-        if (_URL == null)
-            return;
-
-        _assetDir = new File(directory);
-
-        LOG.debug("Initialized with directory " + _assetDir + " mapped to " + _URL);
-    }
-
-    protected void externalize(String resourcePath) throws IOException
-    {
-        String[] path;
-        int i;
-        File file;
-        StringSplitter splitter;
-        InputStream in;
-        OutputStream out;
-        int bytesRead;
-        URL inputURL;
-        byte[] buffer;
-
-        if (LOG.isDebugEnabled())
-            LOG.debug("Externalizing " + resourcePath);
-
-        file = _assetDir;
-
-        // Resources are always split by the unix seperator, even on Win32.
-
-        splitter = new StringSplitter('/');
-
-        path = splitter.splitToArray(resourcePath);
-
-        // The path is expected to start with a leading slash, but the StringSplitter
-        // will ignore that leading slash.
-
-        for (i = 0; i < path.length - 1; i++)
-        {
-            // Doing it this way makes sure the path seperators are right.
-
-            file = new File(file, path[i]);
-        }
-
-        // Make sure the directories exist.
-
-        file.mkdirs();
-
-        file = new File(file, path[path.length - 1]);
-
-        // If the file exists, then assume all is well.  This is OK for development,
-        // but there may be multithreading (or even multiprocess) race conditions
-        // around the creation of the file.
-
-        if (file.exists())
-            return;
-
-        // Get the resource and copy it to the file.
-
-        inputURL = _resolver.getResource(resourcePath);
-        if (inputURL == null)
-            throw new IOException(Tapestry.format("missing-resource", resourcePath));
-
-        in = inputURL.openStream();
-
-        out = new FileOutputStream(file);
-
-        buffer = new byte[BUFFER_SIZE];
-
-        while (true)
-        {
-            bytesRead = in.read(buffer, 0, BUFFER_SIZE);
-            if (bytesRead < 0)
-                break;
-
-            out.write(buffer, 0, bytesRead);
-        }
-
-        in.close();
-        out.close();
-
-        // The file is copied!
-    }
-
-    /**
-     *  Gets the externalizer singleton for the application.  If it does not already
-     *  exist, it is created and stored into the {@link ServletContext}.
-     *
-     *  <p>Each Tapestry application within a single {@link ServletContext}
-     *  will have its own externalizer; they are differentiated by the
-     *  application name.
-     *
-     *  @see org.apache.tapestry.spec.ApplicationSpecification#getName()
-     *
-     **/
-
-    public static AssetExternalizer get(IRequestCycle cycle)
-    {
-        HttpServlet servlet = cycle.getRequestContext().getServlet();
-        ServletContext context = servlet.getServletContext();
-
-        String servletName = servlet.getServletName();
-        
-        String attributeName = "org.apache.tapestry.AssetExternalizer:" + servletName;
-
-        AssetExternalizer result = (AssetExternalizer) context.getAttribute(attributeName);
-
-        if (result == null)
-        {
-            result = new AssetExternalizer(cycle);
-            context.setAttribute(attributeName, result);
-        }
-
-        return result;
-    }
-
-    /**
-     *  Gets the URL to a private resource.  If the resource was
-     *  previously copied out of the classpath, the previously
-     *  generated URL is returned.
-     * 
-     *  <p>If the asset directory and URL are not configured, then
-     *  returns null.
-     *
-     *  <p>Otherwise, the asset is copied out to the asset directory,
-     *  the URL is constructed (and recorded for later) and the URL is
-     *  returned.
-     *
-     *  <p>This method is not explicitly synchronized but should work
-     *  multi-threaded.  It synchronizes on the internal
-     *  <code>Map</code> used to map resource paths to URLs.
-     *
-     *  @param resourcePath The full path of the resource within the
-     *  classpath.  This is expected to include a leading slash.  For
-     *  example: <code>/com/skunkworx/Banner.gif</code>.
-     *
-     **/
-
-    public String getURL(String resourcePath)
-    {
-        String result;
-
-        if (_assetDir == null)
-            return null;
-
-        synchronized (_resources)
-        {
-            result = (String) _resources.get(resourcePath);
-
-            if (result != null)
-                return result;
-
-            try
-            {
-                externalize(resourcePath);
-            }
-            catch (IOException ex)
-            {
-                throw new ApplicationRuntimeException(
-                    Tapestry.format("AssetExternalizer.externalize-failure", resourcePath, _assetDir),
-                    ex);
-            }
-
-            result = _URL + resourcePath;
-
-            _resources.put(resourcePath, result);
-
-            return result;
-        }
-    }
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/asset/AssetService.java b/3.0.4/framework/src/org/apache/tapestry/asset/AssetService.java
deleted file mode 100644
index 8872c6d..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/asset/AssetService.java
+++ /dev/null
@@ -1,220 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.asset;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.URL;
-import java.net.URLConnection;
-import java.util.HashMap;
-import java.util.Map;
-
-import javax.servlet.ServletContext;
-
-import org.apache.tapestry.ApplicationRuntimeException;
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.engine.AbstractService;
-import org.apache.tapestry.engine.IEngineServiceView;
-import org.apache.tapestry.engine.ILink;
-import org.apache.tapestry.request.ResponseOutputStream;
-
-/**
- *  A service for building URLs to and accessing {@link org.apache.tapestry.IAsset}s.
- *  Most of the work is deferred to the {@link org.apache.tapestry.IAsset} instance.
- *
- *  <p>The retrieval part is directly linked to {@link PrivateAsset}.
- *  The service responds to a URL that encodes the path of a resource
- *  within the classpath.  The
- *  {@link #service(IEngineServiceView, IRequestCycle, ResponseOutputStream)}
- *  method reads the resource and streams it out.
- *
- *  <p>TBD: Security issues.  Should only be able to retrieve a
- *  resource that was previously registerred in some way
- *  ... otherwise, hackers will be able to suck out the .class files
- *  of the application!
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- **/
-
-public class AssetService extends AbstractService
-{
-    /**
-     *  Defaults MIME types, by extension, used when the servlet container
-     *  doesn't provide MIME types.  ServletExec Debugger, for example,
-     *  fails to do provide these.
-     *
-     **/
-
-    private final static Map _mimeTypes;
-
-    static {
-        _mimeTypes = new HashMap(17);
-        _mimeTypes.put("css", "text/css");
-        _mimeTypes.put("gif", "image/gif");
-        _mimeTypes.put("jpg", "image/jpeg");
-        _mimeTypes.put("jpeg", "image/jpeg");
-        _mimeTypes.put("htm", "text/html");
-        _mimeTypes.put("html", "text/html");
-    }
-
-    private static final int BUFFER_SIZE = 10240;
-
-    /**
-     *  Builds a {@link ILink} for a {@link PrivateAsset}.
-     *
-     *  <p>A single parameter is expected, the resource path of the asset
-     *  (which is expected to start with a leading slash).
-     *
-     **/
-
-    public ILink getLink(IRequestCycle cycle, IComponent component, Object[] parameters)
-    {
-        if (Tapestry.size(parameters) != 2)
-            throw new ApplicationRuntimeException(
-                Tapestry.format("service-incorrect-parameter-count", Tapestry.ASSET_SERVICE, new Integer(2)));
-
-        // Service is stateless
-
-        return constructLink(cycle, Tapestry.ASSET_SERVICE, null, parameters, false);
-    }
-
-    public String getName()
-    {
-        return Tapestry.ASSET_SERVICE;
-    }
-
-    private static String getMimeType(String path)
-    {
-        String key;
-        String result;
-        int dotx;
-
-        dotx = path.lastIndexOf('.');
-        key = path.substring(dotx + 1).toLowerCase();
-
-        result = (String) _mimeTypes.get(key);
-
-        if (result == null)
-            result = "text/plain";
-
-        return result;
-    }
-
-    /**
-     *  Retrieves a resource from the classpath and returns it to the
-     *  client in a binary output stream.
-     *
-     *  <p>TBD: Security issues.  Hackers can download .class files.
-     *
-     *
-     **/
-
-    public void service(
-        IEngineServiceView engine,
-        IRequestCycle cycle,
-        ResponseOutputStream output)
-        throws IOException
-    {
-        Object[] parameters = getParameters(cycle);
-
-        if (Tapestry.size(parameters) != 2)
-            throw new ApplicationRuntimeException(
-                Tapestry.format("service-incorrect-parameter-count", Tapestry.ASSET_SERVICE, new Integer(2)));
-
-        String resourcePath = (String) parameters[0];
-        String checksum = (String) parameters[1];
-
-        URL resourceURL = engine.getResourceResolver().getResource(resourcePath);
-
-        if (resourceURL == null)
-            throw new ApplicationRuntimeException(
-                Tapestry.format("missing-resource", resourcePath));
-
-        String actualChecksum = engine.getResourceChecksumSource().getChecksum(resourceURL);
-
-        if (!actualChecksum.equals(checksum))
-        {
-            throw new ApplicationRuntimeException(
-                Tapestry.format("AssetService.checksum-failure", checksum, resourcePath));
-        }
-
-        URLConnection resourceConnection = resourceURL.openConnection();
-
-        ServletContext servletContext = cycle.getRequestContext().getServlet().getServletContext();
-
-        writeAssetContent(engine, cycle, output, resourcePath, resourceConnection, servletContext);
-    }
-
-    /**  @since 2.2 **/
-
-    private void writeAssetContent(
-        IEngineServiceView engine,
-        IRequestCycle cycle,
-        ResponseOutputStream output,
-        String resourcePath,
-        URLConnection resourceConnection,
-        ServletContext servletContext)
-    {
-        // Getting the content type and length is very dependant
-        // on support from the application server (represented
-        // here by the servletContext).
-
-        String contentType = servletContext.getMimeType(resourcePath);
-        int contentLength = resourceConnection.getContentLength();
-
-        try
-        {
-            if (contentLength > 0)
-                cycle.getRequestContext().getResponse().setContentLength(contentLength);
-
-            // Set the content type.  If the servlet container doesn't
-            // provide it, try and guess it by the extension.
-
-            if (contentType == null || contentType.length() == 0)
-                contentType = getMimeType(resourcePath);
-
-            output.setContentType(contentType);
-
-            // Disable any further buffering inside the ResponseOutputStream
-
-            output.forceFlush();
-
-            InputStream input = resourceConnection.getInputStream();
-
-            byte[] buffer = new byte[BUFFER_SIZE];
-
-            while (true)
-            {
-                int bytesRead = input.read(buffer);
-
-                if (bytesRead < 0)
-                    break;
-
-                output.write(buffer, 0, bytesRead);
-            }
-
-            input.close();
-        }
-        catch (Throwable ex)
-        {
-            String title = Tapestry.format("AssetService.exception-report-title", resourcePath);
-
-            engine.reportException(title, ex);
-        }
-    }
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/asset/ContextAsset.java b/3.0.4/framework/src/org/apache/tapestry/asset/ContextAsset.java
deleted file mode 100644
index ec62510..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/asset/ContextAsset.java
+++ /dev/null
@@ -1,80 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.asset;
-
-import java.io.InputStream;
-import java.net.URL;
-
-import org.apache.tapestry.ApplicationRuntimeException;
-import org.apache.tapestry.IAsset;
-import org.apache.tapestry.IEngine;
-import org.apache.tapestry.ILocation;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.resource.ContextResourceLocation;
-
-/**
- *  An asset whose path is relative to the {@link javax.servlet.ServletContext} containing
- *  the application.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- **/
-
-public class ContextAsset extends AbstractAsset implements IAsset
-{
-    private String _resolvedURL;
-
-    public ContextAsset(ContextResourceLocation resourceLocation, ILocation location)
-    {
-        super(resourceLocation, location);
-    }
-
-    /**
-     *  Generates a URL for the client to retrieve the asset.  The context path
-     *  is prepended to the asset path, which means that assets deployed inside
-     *  web applications will still work (if things are configured properly).
-     *
-     **/
-
-    public String buildURL(IRequestCycle cycle)
-    {
-        if (_resolvedURL == null)
-        {
-            IEngine engine = cycle.getEngine();
-            String contextPath = engine.getContextPath();
-
-            _resolvedURL = contextPath + getResourceLocation().getPath();
-        }
-        
-        return _resolvedURL;
-    }
-
-    public InputStream getResourceAsStream(IRequestCycle cycle)
-    {
-        try
-        {
-            URL url = getResourceLocation().getResourceURL();
-
-            return url.openStream();
-        }
-        catch (Exception ex)
-        {
-            throw new ApplicationRuntimeException(
-                Tapestry.format("ContextAsset.resource-missing", getResourceLocation()),
-                ex);
-        }
-    }
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/asset/ExternalAsset.java b/3.0.4/framework/src/org/apache/tapestry/asset/ExternalAsset.java
deleted file mode 100644
index 75b4c6e..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/asset/ExternalAsset.java
+++ /dev/null
@@ -1,78 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.asset;
-
-import java.io.InputStream;
-import java.net.URL;
-
-import org.apache.tapestry.ApplicationRuntimeException;
-import org.apache.tapestry.ILocation;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.Tapestry;
-
-/**
- *  A reference to an external URL.  {@link ExternalAsset}s are not
- *  localizable.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- * 
- **/
-
-public class ExternalAsset extends AbstractAsset
-{
-    private String _URL;
-
-    public ExternalAsset(String URL, ILocation location)
-    {
-    	super(null, location);
-    	
-        _URL = URL;
-    }
-
-    /**
-     *  Simply returns the URL of the external asset.
-     *
-     **/
-
-    public String buildURL(IRequestCycle cycle)
-    {
-        return _URL;
-    }
-
-    public InputStream getResourceAsStream(IRequestCycle cycle)
-    {
-        URL url;
-
-        try
-        {
-            url = new URL(_URL);
-
-            return url.openStream();
-        }
-        catch (Exception ex)
-        {
-            // MalrformedURLException or IOException
-
-            throw new ApplicationRuntimeException(Tapestry.format("ExternalAsset.resource-missing", _URL), ex);
-        }
-
-    }
-
-    public String toString()
-    {
-        return "ExternalAsset[" + _URL + "]";
-    }
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/asset/PrivateAsset.java b/3.0.4/framework/src/org/apache/tapestry/asset/PrivateAsset.java
deleted file mode 100644
index fe2a701..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/asset/PrivateAsset.java
+++ /dev/null
@@ -1,105 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.asset;
-
-import java.io.InputStream;
-import java.net.URL;
-
-import org.apache.tapestry.ApplicationRuntimeException;
-import org.apache.tapestry.IEngine;
-import org.apache.tapestry.ILocation;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.IResourceLocation;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.engine.ILink;
-import org.apache.tapestry.resource.ClasspathResourceLocation;
-
-/**
- *  An implementation of {@link org.apache.tapestry.IAsset} for localizable assets within
- *  the JVM's classpath.
- *
- *  <p>The localization code here is largely cut-and-paste from
- *  {@link ContextAsset}.
- *
- *  @author Howard Ship
- *  @version $Id$
- * 
- **/
-
-public class PrivateAsset extends AbstractAsset
-{
-
-    private AssetExternalizer _externalizer;
-
-    public PrivateAsset(ClasspathResourceLocation resourceLocation, ILocation location)
-    {
-        super(resourceLocation, location);
-    }
-
-    /**
-     *  Gets the localized version of the resource.  Build
-     *  the URL for the resource.  If possible, the application's
-     *  {@link AssetExternalizer} is located, to copy the resource to
-     *  a directory visible to the web server.
-     *
-     **/
-
-    public String buildURL(IRequestCycle cycle)
-    {
-        if (_externalizer == null)
-            _externalizer = AssetExternalizer.get(cycle);
-
-        String path = getResourceLocation().getPath();
-
-        String externalURL = _externalizer.getURL(path);
-
-        if (externalURL != null)
-            return externalURL;
-
-        // Otherwise, the service is responsible for dynamically retrieving the
-        // resource.
-
-        IEngine engine = cycle.getEngine();
-        
-        URL resourceURL = engine.getResourceResolver().getResource(path);
-        String checksum = engine.getResourceChecksumSource().getChecksum(resourceURL);
-        
-        String[] parameters = new String[] { path, checksum };
-
-        AssetService service = (AssetService) engine.getService(Tapestry.ASSET_SERVICE);
-        ILink link = service.getLink(cycle, null, parameters);
-
-        return link.getURL();
-    }
-
-    public InputStream getResourceAsStream(IRequestCycle cycle)
-    {
-        IResourceLocation location = getResourceLocation();
-
-        try
-        {
-            URL url = location.getResourceURL();
-
-            return url.openStream();
-        }
-        catch (Exception ex)
-        {
-            throw new ApplicationRuntimeException(
-                Tapestry.format("PrivateAsset.resource-missing", location),
-                ex);
-        }
-    }
-
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/asset/ResourceChecksumSource.java b/3.0.4/framework/src/org/apache/tapestry/asset/ResourceChecksumSource.java
deleted file mode 100644
index 6c21fe8..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/asset/ResourceChecksumSource.java
+++ /dev/null
@@ -1,42 +0,0 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.asset;
-
-import java.net.URL;
-
-/**
- * Calculates the checksum value, as a string, for a particular classpath resource. This is primarily
- * used by the {@link org.apache.tapestry.asset.AssetService} to authenticate requests (you are not
- * allowed access to a resource unless you can provide the correct checksum value).
- * 
- * This code is based on code from Howard Lewis Ship from the upcoming 3.1 release.
- * 
- * @author  Paul Ferraro
- * @since   3.0.3
- */
-public interface ResourceChecksumSource
-{
-    /**
-     * Returns the checksum value for the given resource.
-     * @param resourceURL the url of a resource
-     * @return the checksum value of the specified resource
-     */
-    public String getChecksum(URL resourceURL);
-    
-    /**
-     * Clears the internal cache.
-     */
-    public void reset();
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/asset/ResourceChecksumSourceImpl.java b/3.0.4/framework/src/org/apache/tapestry/asset/ResourceChecksumSourceImpl.java
deleted file mode 100644
index c9015e2..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/asset/ResourceChecksumSourceImpl.java
+++ /dev/null
@@ -1,120 +0,0 @@
-//Copyright 2005 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.asset;
-
-import java.io.BufferedInputStream;
-import java.io.InputStream;
-import java.net.URL;
-import java.security.MessageDigest;
-import java.util.HashMap;
-import java.util.Map;
-
-import org.apache.commons.codec.BinaryEncoder;
-import org.apache.tapestry.ApplicationRuntimeException;
-import org.apache.tapestry.Tapestry;
-
-/**
- * Implementation of {@link org.apache.tapestry.asset.ResourceDigestSource} that calculates an
- * checksum using a message digest and configured encoder.
- * 
- * This code is based on code from Howard Lewis Ship from the upcoming 3.1 release.
- * 
- * @author Paul Ferraro
- * @since 3.0.3
- */
-public class ResourceChecksumSourceImpl implements ResourceChecksumSource
-{
-    private static final int BUFFER_SIZE = 4096;
-
-    private Map _cache = new HashMap();
-    
-    private String _digestAlgorithm;
-
-    private BinaryEncoder _encoder;
-    
-    public ResourceChecksumSourceImpl(String digestAlgorithm, BinaryEncoder encoder)
-    {
-        _digestAlgorithm = digestAlgorithm;
-        _encoder = encoder;
-    }
-    
-    /**
-     * Checksum is obtained from cache if possible.
-     * If not, checksum is computed using {@link #computeChecksum(URL)}
-     * @see org.apache.tapestry.asset.ResourceDigestSource#getChecksum(java.net.URL)
-     */
-    public String getChecksum(URL resourceURL)
-    {
-        synchronized (_cache)
-        {
-            String checksum = (String) _cache.get(resourceURL);
-            
-            if (checksum == null)
-            {
-                checksum = computeChecksum(resourceURL);
-                
-                _cache.put(resourceURL, checksum);
-            }
-            
-            return checksum;
-        }
-    }
-    
-    /**
-     * @see org.apache.tapestry.asset.ResourceDigestSource#reset()
-     */
-    public void reset()
-    {
-        synchronized (_cache)
-        {
-            _cache.clear();
-        }
-    }
-    
-    /**
-     * Computes a message digest of the specified resource and encodes it into a string.
-     * @param resourceURL the url of a resource
-     * @return the checksum value of the specified resource
-     */
-    protected String computeChecksum(URL resourceURL)
-    {
-        try
-        {
-	        MessageDigest digest = MessageDigest.getInstance(_digestAlgorithm);
-	        
-	        InputStream inputStream = new BufferedInputStream(resourceURL.openStream(), BUFFER_SIZE);
-	        
-	        byte[] block = new byte[BUFFER_SIZE];
-	        
-	        int read = inputStream.read(block);
-	        
-	        while (read >= 0)
-	        {
-	            digest.update(block, 0, read);
-	            
-	            read = inputStream.read(block);
-	        }
-	        
-	        inputStream.close();
-	        
-	        return new String(_encoder.encode(digest.digest()));
-        }
-        catch (Exception e)
-        {
-            throw new ApplicationRuntimeException(
-                Tapestry.format("AssetService.checksum-compute-failure", resourceURL), e);
-        }
-    }
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/asset/package.html b/3.0.4/framework/src/org/apache/tapestry/asset/package.html
deleted file mode 100644
index 3b1ac80..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/asset/package.html
+++ /dev/null
@@ -1,15 +0,0 @@
-<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN">
-<!-- $Id$ -->
-<html>
-<head>
-<title>Tapestry: Web Application Framework</title>
-</head>
-<body>
-
-<p>Implementations of {@link org.apache.tapestry.IAsset}, as well as
-the {@link org.apache.tapestry.asset.AssetExternalizer}, used to handle private assets.
-
-@author Howard Lewis Ship <a href="mailto:hlship@apache.org">hlship@apache.org</a>
-
-</body>
-</html>
diff --git a/3.0.4/framework/src/org/apache/tapestry/bean/AbstractBeanInitializer.java b/3.0.4/framework/src/org/apache/tapestry/bean/AbstractBeanInitializer.java
deleted file mode 100644
index cec1d08..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/bean/AbstractBeanInitializer.java
+++ /dev/null
@@ -1,67 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.bean;
-
-import org.apache.tapestry.ApplicationRuntimeException;
-import org.apache.tapestry.IResourceResolver;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.spec.BaseLocatable;
-import org.apache.tapestry.util.prop.OgnlUtils;
-
-/**
- *  Base class for initializing a property of a JavaBean.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 1.0.5
- * 
- **/
-
-abstract public class AbstractBeanInitializer extends BaseLocatable implements IBeanInitializer
-{
-    protected String _propertyName;
-
-    public String getPropertyName()
-    {
-        return _propertyName;
-    }
-
-    /** @since 3.0 **/
-
-    public void setPropertyName(String propertyName)
-    {
-        _propertyName = propertyName;
-    }
-
-    protected void setBeanProperty(IResourceResolver resolver, Object bean, Object value)
-    {
-        try
-        {
-            OgnlUtils.set(_propertyName, resolver, bean, value);
-        }
-        catch (ApplicationRuntimeException ex)
-        {
-            String message =
-                Tapestry.format(
-                    "AbstractBeanInitializer.unable-to-set-property",
-                    _propertyName,
-                    bean,
-                    value);
-
-            throw new ApplicationRuntimeException(message, getLocation(), ex);
-        }
-
-    }
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/bean/BeanProvider.java b/3.0.4/framework/src/org/apache/tapestry/bean/BeanProvider.java
deleted file mode 100644
index 325d081..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/bean/BeanProvider.java
+++ /dev/null
@@ -1,319 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.bean;
-
-import java.util.Collection;
-import java.util.Collections;
-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.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.tapestry.ApplicationRuntimeException;
-import org.apache.tapestry.IBeanProvider;
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.IEngine;
-import org.apache.tapestry.IResourceResolver;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.event.PageDetachListener;
-import org.apache.tapestry.event.PageEvent;
-import org.apache.tapestry.event.PageRenderListener;
-import org.apache.tapestry.spec.BeanLifecycle;
-import org.apache.tapestry.spec.IBeanSpecification;
-import org.apache.tapestry.spec.IComponentSpecification;
-
-/**
- *  Basic implementation of the {@link IBeanProvider} interface.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 1.0.4
- **/
-
-public class BeanProvider implements IBeanProvider, PageDetachListener, PageRenderListener
-{
-    private static final Log LOG = LogFactory.getLog(BeanProvider.class);
-
-    /**
-     *  Indicates whether this instance has been registered with its
-     *  page as a PageDetachListener.  Registration only occurs
-     *  the first time a bean with lifecycle REQUEST is instantiated.
-     *
-     **/
-
-    private boolean _registeredForDetach = false;
-
-    /**
-     *  Indicates whether this instance has been registered as a render
-     *  listener with the page.
-     * 
-     **/
-
-    private boolean _registeredForRender = false;
-
-    /**
-     *  The component for which beans are being created and tracked.
-     *
-     **/
-
-    private IComponent _component;
-
-    /**
-     *  Used for instantiating classes.
-     *
-     **/
-
-    private IResourceResolver _resolver;
-
-    /**
-     *  Map of beans, keyed on name.
-     *
-     **/
-
-    private Map _beans;
-
-    /**
-     *  Set of bean names provided by this provider.
-     * 
-     *  @since 2.2
-     * 
-     **/
-
-    private Set _beanNames;
-
-    public BeanProvider(IComponent component)
-    {
-        this._component = component;
-        IEngine engine = component.getPage().getEngine();
-        _resolver = engine.getResourceResolver();
-
-        if (LOG.isDebugEnabled())
-            LOG.debug("Created BeanProvider for " + component);
-
-    }
-
-    /** @since 1.0.6 **/
-
-    public Collection getBeanNames()
-    {
-        if (_beanNames == null)
-        {
-            Collection c = _component.getSpecification().getBeanNames();
-
-            if (c == null || c.isEmpty())
-                _beanNames = Collections.EMPTY_SET;
-            else
-                _beanNames = Collections.unmodifiableSet(new HashSet(c));
-        }
-
-        return _beanNames;
-    }
-
-    /**
-     *  @since 1.0.5
-     *
-     **/
-
-    public IComponent getComponent()
-    {
-        return _component;
-    }
-
-    public Object getBean(String name)
-    {
-        Object bean = null;
-
-        if (_beans != null)
-            bean = _beans.get(name);
-
-        if (bean != null)
-            return bean;
-
-        IBeanSpecification spec = _component.getSpecification().getBeanSpecification(name);
-
-        if (spec == null)
-            throw new ApplicationRuntimeException(
-                Tapestry.format(
-                    "BeanProvider.bean-not-defined",
-                    _component.getExtendedId(),
-                    name));
-
-        bean = instantiateBean(name, spec);
-
-        BeanLifecycle lifecycle = spec.getLifecycle();
-
-        if (lifecycle == BeanLifecycle.NONE)
-            return bean;
-
-        if (_beans == null)
-            _beans = new HashMap();
-
-        _beans.put(name, bean);
-
-        // The first time in a request that a REQUEST lifecycle bean is created,
-        // register with the page to be notified at the end of the
-        // request cycle.
-
-        if (lifecycle == BeanLifecycle.REQUEST && !_registeredForDetach)
-        {
-            _component.getPage().addPageDetachListener(this);
-            _registeredForDetach = true;
-        }
-
-        if (lifecycle == BeanLifecycle.RENDER && !_registeredForRender)
-        {
-            _component.getPage().addPageRenderListener(this);
-            _registeredForRender = true;
-        }
-
-        // No need to register if a PAGE lifecycle bean; those can stick around
-        // forever.
-
-        return bean;
-    }
-
-    private Object instantiateBean(String beanName, IBeanSpecification spec)
-    {
-        String className = spec.getClassName();
-        Object bean = null;
-
-        if (LOG.isDebugEnabled())
-            LOG.debug("Instantiating instance of " + className);
-
-        // Do it the hard way!
-
-        try
-        {
-            Class beanClass = _resolver.findClass(className);
-
-            bean = beanClass.newInstance();
-        }
-        catch (Exception ex)
-        {
-
-            throw new ApplicationRuntimeException(
-                Tapestry.format(
-                    "BeanProvider.instantiation-error",
-                    new Object[] {
-                        beanName,
-                        _component.getExtendedId(),
-                        className,
-                        ex.getMessage()}),
-                spec.getLocation(),
-                ex);
-        }
-
-        // OK, have the bean, have to initialize it.
-
-        List initializers = spec.getInitializers();
-
-        if (initializers == null)
-            return bean;
-
-        Iterator i = initializers.iterator();
-        while (i.hasNext())
-        {
-            IBeanInitializer iz = (IBeanInitializer) i.next();
-
-            if (LOG.isDebugEnabled())
-                LOG.debug("Initializing property " + iz.getPropertyName());
-
-            iz.setBeanProperty(this, bean);
-        }
-
-        return bean;
-    }
-
-    /**
-     *  Removes all beans with the REQUEST lifecycle.  Beans with
-     *  the PAGE lifecycle stick around, and beans with no lifecycle
-     *  were never stored in the first place.
-     *
-     **/
-
-    public void pageDetached(PageEvent event)
-    {
-        removeBeans(BeanLifecycle.REQUEST);
-    }
-
-    /**
-     *  Removes any beans with the specified lifecycle.
-     * 
-     *  @since 2.2
-     * 
-     **/
-
-    private void removeBeans(BeanLifecycle lifecycle)
-    {
-        if (_beans == null)
-            return;
-
-        IComponentSpecification spec = null;
-
-        Iterator i = _beans.entrySet().iterator();
-        while (i.hasNext())
-        {
-            Map.Entry e = (Map.Entry) i.next();
-            String name = (String) e.getKey();
-
-            if (spec == null)
-                spec = _component.getSpecification();
-
-            IBeanSpecification s = spec.getBeanSpecification(name);
-
-            if (s.getLifecycle() == lifecycle)
-            {
-                Object bean = e.getValue();
-
-                if (LOG.isDebugEnabled())
-                    LOG.debug("Removing " + lifecycle.getName() + " bean " + name + ": " + bean);
-
-                i.remove();
-            }
-        }
-    }
-
-    /** @since 1.0.8 **/
-
-    public IResourceResolver getResourceResolver()
-    {
-        return _resolver;
-    }
-
-    /** @since 2.2 **/
-
-    public void pageBeginRender(PageEvent event)
-    {
-    }
-
-    /** @since 2.2 **/
-
-    public void pageEndRender(PageEvent event)
-    {
-        removeBeans(BeanLifecycle.RENDER);
-    }
-
-    /** @since 2.2 **/
-
-    public boolean canProvideBean(String name)
-    {
-        return getBeanNames().contains(name);
-    }
-
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/bean/BeanProviderPropertyAccessor.java b/3.0.4/framework/src/org/apache/tapestry/bean/BeanProviderPropertyAccessor.java
deleted file mode 100644
index 02fbf26..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/bean/BeanProviderPropertyAccessor.java
+++ /dev/null
@@ -1,75 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.bean;
-
-import java.util.Map;
-
-import ognl.ObjectPropertyAccessor;
-import ognl.OgnlException;
-
-import org.apache.tapestry.IBeanProvider;
-
-/**
- *  Adapts a {@link org.apache.tapestry.IBeanProvider} to
- *  <a href="http://www.ognl.org">OGNL</a> by exposing the named
- *  beans provided by the provider as read-only properties of
- *  the provider.
- * 
- *  <p>This is registered by {@link org.apache.tapestry.AbstractComponent}.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 2.2
- *
- **/
-
-public class BeanProviderPropertyAccessor extends ObjectPropertyAccessor
-{
-    /**
-     *  Checks to see if the name matches the name of a bean inside
-     *  the provider and returns that bean if so.
-     *  Otherwise, invokes the super implementation.
-     * 
-     **/
-    
-    public Object getProperty(Map context, Object target, Object name) throws OgnlException
-    {
-        IBeanProvider provider = (IBeanProvider)target;
-        String beanName = (String)name;
-        
-        if (provider.canProvideBean(beanName))
-            return provider.getBean(beanName);
-        
-        return super.getProperty(context, target, name);
-    }
-
-    /**
-     *  Returns true if the name matches a bean provided by the provider.
-     *  Otherwise invokes the super implementation.
-     * 
-     **/
-    
-    public boolean hasGetProperty(Map context, Object target, Object oname) throws OgnlException
-    {
-        IBeanProvider provider = (IBeanProvider)target;
-        String beanName = (String)oname;
-
-        if (provider.canProvideBean(beanName))
-            return true;
-            
-        return super.hasGetProperty(context, target, oname);
-    }
-
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/bean/Default.java b/3.0.4/framework/src/org/apache/tapestry/bean/Default.java
deleted file mode 100644
index b1ecd74..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/bean/Default.java
+++ /dev/null
@@ -1,89 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.bean;
-
-import org.apache.tapestry.IBinding;
-import org.apache.tapestry.util.pool.IPoolable;
-
-/**
- *  A helper bean to assist with providing defaults for unspecified
- *  parameters.    It is initalized
- *  with an {@link IBinding} and a default value.  It's value property
- *  is either the value of the binding, but if the binding is null,
- *  or the binding returns null, the default value is returned.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 1.0.5
- * 
- **/
-
-public class Default implements IPoolable
-{
-    private IBinding binding;
-    private Object defaultValue;
-
-    public void resetForPool()
-    {
-        binding = null;
-        defaultValue = null;
-    }
-
-    public void setBinding(IBinding value)
-    {
-        binding = value;
-    }
-
-    public IBinding getBinding()
-    {
-        return binding;
-    }
-
-    public void setDefaultValue(Object value)
-    {
-        defaultValue = value;
-    }
-
-    public Object getDefaultValue()
-    {
-        return defaultValue;
-    }
-
-    /**
-     *  Returns the value of the binding.  However, if the binding is null, or the binding
-     *  returns null, then the defaultValue is returned instead.
-     *
-     **/
-
-    public Object getValue()
-    {
-        if (binding == null)
-            return defaultValue;
-
-        Object value = binding.getObject();
-
-        if (value == null)
-            return defaultValue;
-
-        return value;
-    }
-    
-    /** @since 3.0 **/
-    
-    public void discardFromPool()
-    {
-    }
-
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/bean/EvenOdd.java b/3.0.4/framework/src/org/apache/tapestry/bean/EvenOdd.java
deleted file mode 100644
index 22639c8..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/bean/EvenOdd.java
+++ /dev/null
@@ -1,61 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.bean;
-
-/**
- *  Used to emit a stream of alterating string values: "even", "odd", etc.  This
- *  is often used in the Inspector pages to make the class of a &lt;tr&gt; alternate
- *  for presentation reasons.
- *
- *  @version $Id$
- *  @author Howard Lewis Ship
- *
- **/
-
-public class EvenOdd
-{
-    private boolean even = true;
-
-    /**
-     *  Returns "even" or "odd".  Whatever it returns on one invocation, it will
-     *  return the opposite on the next.  By default, the first value
-     *  returned is "even".
-     *
-     **/
-
-    public String getNext()
-    {
-        String result = even ? "even" : "odd";
-
-        even = !even;
-
-        return result;
-    }
-    
-    public boolean isEven()
-    {
-        return even;
-    }
-
-	/**
-	 *  Overrides the even flag.
-	 * 
-	 **/
-	
-    public void setEven(boolean value)
-    {
-        even = value;
-    }
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/bean/ExpressionBeanInitializer.java b/3.0.4/framework/src/org/apache/tapestry/bean/ExpressionBeanInitializer.java
deleted file mode 100644
index 390465d..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/bean/ExpressionBeanInitializer.java
+++ /dev/null
@@ -1,61 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.bean;
-
-import org.apache.tapestry.IBeanProvider;
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.IResourceResolver;
-import org.apache.tapestry.util.prop.OgnlUtils;
-
-/**
- * 
- *  Initializes a helper bean property from an OGNL expression (relative
- *  to the bean's {@link IComponent}).
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 2.2
- *
- **/
-
-public class ExpressionBeanInitializer extends AbstractBeanInitializer
-{
-    protected String _expression;
-
-    public void setBeanProperty(IBeanProvider provider, Object bean)
-    {
-        IResourceResolver resolver = provider.getResourceResolver();
-        IComponent component = provider.getComponent();
-        
-        Object value = OgnlUtils.get(_expression, resolver, component);
-
-        setBeanProperty(resolver, bean, value);
-    }
-
-	/** @since 3.0 **/
-	
-    public String getExpression()
-    {
-        return _expression;
-    }
-
-	/** @since 3.0 **/
-	
-    public void setExpression(String expression)
-    {
-        _expression = expression;
-    }
-
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/bean/FieldBeanInitializer.java b/3.0.4/framework/src/org/apache/tapestry/bean/FieldBeanInitializer.java
deleted file mode 100644
index 7666ce8..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/bean/FieldBeanInitializer.java
+++ /dev/null
@@ -1,119 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.bean;
-
-import java.lang.reflect.Field;
-
-import org.apache.tapestry.ApplicationRuntimeException;
-import org.apache.tapestry.IBeanProvider;
-import org.apache.tapestry.IResourceResolver;
-import org.apache.tapestry.Tapestry;
-
-/**
- *  Initializes a bean with the value of a public static field.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 1.0.8
- *
- **/
-
-public class FieldBeanInitializer extends AbstractBeanInitializer
-{
-    protected String _fieldName;
-    protected Object _fieldValue;
-    private boolean _fieldResolved = false;
-
-    public synchronized void setBeanProperty(IBeanProvider provider, Object bean)
-    {
-        IResourceResolver resolver = provider.getResourceResolver();
-
-        if (!_fieldResolved)
-            resolveField(resolver);
-
-        setBeanProperty(resolver, bean, _fieldValue);
-    }
-
-    private void resolveField(IResourceResolver resolver)
-    {
-        if (_fieldResolved)
-            return;
-
-        // This is all copied out of of FieldBinding!!
-
-        int dotx = _fieldName.lastIndexOf('.');
-
-        if (dotx < 0)
-            throw new ApplicationRuntimeException(
-                Tapestry.format("invalid-field-name", _fieldName));
-
-        String className = _fieldName.substring(0, dotx);
-        String simpleFieldName = _fieldName.substring(dotx + 1);
-
-        // Simple class names are assumed to be in the java.lang package.
-
-        if (className.indexOf('.') < 0)
-            className = "java.lang." + className;
-
-        Class targetClass = null;
-
-        try
-        {
-            targetClass = resolver.findClass(className);
-        }
-        catch (Throwable t)
-        {
-            throw new ApplicationRuntimeException(
-                Tapestry.format("unable-to-resolve-class", className),
-                t);
-        }
-
-        Field field = null;
-
-        try
-        {
-            field = targetClass.getField(simpleFieldName);
-        }
-        catch (NoSuchFieldException ex)
-        {
-            throw new ApplicationRuntimeException(
-                Tapestry.format("field-not-defined", _fieldName),
-                ex);
-        }
-
-        // Get the value of the field.  null means look for it as a static
-        // variable.
-
-        try
-        {
-            _fieldValue = field.get(null);
-        }
-        catch (IllegalAccessException ex)
-        {
-            throw new ApplicationRuntimeException(
-                Tapestry.format("illegal-field-access", _fieldName),
-                ex);
-        }
-        catch (NullPointerException ex)
-        {
-            throw new ApplicationRuntimeException(
-                Tapestry.format("field-is-instance", _fieldName),
-                ex);
-        }
-
-        _fieldResolved = true;
-    }
-
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/bean/IBeanInitializer.java b/3.0.4/framework/src/org/apache/tapestry/bean/IBeanInitializer.java
deleted file mode 100644
index 6ccf1da..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/bean/IBeanInitializer.java
+++ /dev/null
@@ -1,46 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.bean;
-
-import org.apache.tapestry.IBeanProvider;
-import org.apache.tapestry.ILocationHolder;
-
-/**
- *  Interface for a set of classes used to initialize helper beans.
- *
- *  @author Howard Ship
- *  @version $Id$
- *  @since 1.0.5
- * 
- **/
-
-public interface IBeanInitializer extends ILocationHolder
-{
-    /**
-     *  Invoked by the {@link IBeanProvider} to initialize
-     *  a property of the bean.
-     *
-     **/
-
-    public void setBeanProperty(IBeanProvider provider, Object bean);
-
-    /**
-     *  Returns the name of the property this initializer
-     *  will set.
-     *
-     **/
-
-    public String getPropertyName();
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/bean/MessageBeanInitializer.java b/3.0.4/framework/src/org/apache/tapestry/bean/MessageBeanInitializer.java
deleted file mode 100644
index bae2270..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/bean/MessageBeanInitializer.java
+++ /dev/null
@@ -1,57 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.bean;
-
-import org.apache.tapestry.IBeanProvider;
-import org.apache.tapestry.IComponent;
-
-/**
- *  A bean initializer that uses a localized string from the containing
- *  component.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 2.2
- * 
- **/
-
-public class MessageBeanInitializer extends AbstractBeanInitializer
-{
-    protected String _key;
-	
-
-    public void setBeanProperty(IBeanProvider provider, Object bean)
-    {
-        IComponent component = provider.getComponent();
-        String value = component.getMessage(_key);
-        
-        setBeanProperty(provider.getResourceResolver(), bean, value);
-    }
-    
-    /** @since 3.0 **/
-    
-    public String getKey()
-    {
-        return _key;
-    }
-
-	/** @since 3.0 **/
-	
-    public void setKey(String key)
-    {
-        _key = key;
-    }
-
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/bean/StaticBeanInitializer.java b/3.0.4/framework/src/org/apache/tapestry/bean/StaticBeanInitializer.java
deleted file mode 100644
index 9183f56..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/bean/StaticBeanInitializer.java
+++ /dev/null
@@ -1,36 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.bean;
-
-import org.apache.tapestry.IBeanProvider;
-
-/**
- *  Initializes a bean with a static value.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 1.0.5
- * 
- **/
-
-public class StaticBeanInitializer extends AbstractBeanInitializer
-{
-    protected Object _value;
-
-    public void setBeanProperty(IBeanProvider provider, Object bean)
-    {
-        setBeanProperty(provider.getResourceResolver(), bean, _value);
-    }
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/bean/package.html b/3.0.4/framework/src/org/apache/tapestry/bean/package.html
deleted file mode 100644
index 2c03eb9..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/bean/package.html
+++ /dev/null
@@ -1,16 +0,0 @@
-<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN">
-<!-- $Id$ -->
-<html>
-<head>
-<title>Tapestry: Web Application Framework</title>
-</head>
-<body>
-
-<p>Contains useful helper beans, an implementation of
-the {@link org.apache.tapestry.IBeanProvider} interface, and 
-several interfaces and classes related to initializing helper beans.
-
-@author Howard Lewis Ship <a href="mailto:hlship@apache.org">hlship@apache.org</a>
-
-</body>
-</html>
diff --git a/3.0.4/framework/src/org/apache/tapestry/binding/AbstractBinding.java b/3.0.4/framework/src/org/apache/tapestry/binding/AbstractBinding.java
deleted file mode 100644
index 4b13b2c..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/binding/AbstractBinding.java
+++ /dev/null
@@ -1,245 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.binding;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import org.apache.tapestry.BindingException;
-import org.apache.tapestry.IBinding;
-import org.apache.tapestry.ILocation;
-import org.apache.tapestry.Tapestry;
-
-/**
- *  Base class for {@link IBinding} implementations.
- *
- * @author Howard Lewis Ship
- * @version $Id$
- * 
- **/
-
-public abstract class AbstractBinding implements IBinding
-{
-    /** @since 3.0 **/
-
-    private ILocation _location;
-
-    /**
-     *  A mapping from primitive types to wrapper types.
-     * 
-     **/
-
-    private static final Map PRIMITIVE_TYPES = new HashMap();
-
-    static {
-        PRIMITIVE_TYPES.put(boolean.class, Boolean.class);
-        PRIMITIVE_TYPES.put(byte.class, Byte.class);
-        PRIMITIVE_TYPES.put(char.class, Character.class);
-        PRIMITIVE_TYPES.put(short.class, Short.class);
-        PRIMITIVE_TYPES.put(int.class, Integer.class);
-        PRIMITIVE_TYPES.put(long.class, Long.class);
-        PRIMITIVE_TYPES.put(float.class, Float.class);
-        PRIMITIVE_TYPES.put(double.class, Double.class);
-    }
-
-    /** @since 3.0 **/
-
-    protected AbstractBinding(ILocation location)
-    {
-        _location = location;
-    }
-
-    public ILocation getLocation()
-    {
-        return _location;
-    }
-
-    /**
-     *  Cooerces the raw value into a true or false, according to the
-     *  rules set by {@link Tapestry#evaluateBoolean(Object)}.
-     *
-     **/
-
-    public boolean getBoolean()
-    {
-        return Tapestry.evaluateBoolean(getObject());
-    }
-
-    public int getInt()
-    {
-        Object raw;
-
-        raw = getObject();
-        if (raw == null)
-            throw Tapestry.createNullBindingException(this);
-
-        if (raw instanceof Number)
-        {
-            return ((Number) raw).intValue();
-        }
-
-        if (raw instanceof Boolean)
-        {
-            return ((Boolean) raw).booleanValue() ? 1 : 0;
-        }
-
-        // Save parsing for last.  This may also throw a number format exception.
-
-        return Integer.parseInt((String) raw);
-    }
-
-    public double getDouble()
-    {
-        Object raw;
-
-        raw = getObject();
-        if (raw == null)
-            throw Tapestry.createNullBindingException(this);
-
-        if (raw instanceof Number)
-        {
-            return ((Number) raw).doubleValue();
-        }
-
-        if (raw instanceof Boolean)
-        {
-            return ((Boolean) raw).booleanValue() ? 1 : 0;
-        }
-
-        // Save parsing for last.  This may also throw a number format exception.
-
-        return Double.parseDouble((String) raw);
-    }
-
-    /**
-     *  Gets the value for the binding.  If null, returns null,
-     *  otherwise, returns the String (<code>toString()</code>) version of
-     *  the value.
-     *
-     **/
-
-    public String getString()
-    {
-        Object value;
-
-        value = getObject();
-        if (value == null)
-            return null;
-
-        return value.toString();
-    }
-
-    /**
-     *  @throws BindingException always.
-     *
-     **/
-
-    public void setBoolean(boolean value)
-    {
-        throw createReadOnlyBindingException(this);
-    }
-
-    /**
-     *  @throws BindingException always.
-     *
-     **/
-
-    public void setInt(int value)
-    {
-        throw createReadOnlyBindingException(this);
-    }
-
-    /**
-     *  @throws BindingException always.
-     *
-     **/
-
-    public void setDouble(double value)
-    {
-        throw createReadOnlyBindingException(this);
-    }
-
-    /**
-     *  @throws BindingException always.
-     *
-     **/
-
-    public void setString(String value)
-    {
-        throw createReadOnlyBindingException(this);
-    }
-
-    /**
-     *  @throws BindingException always.
-     *
-     **/
-
-    public void setObject(Object value)
-    {
-        throw createReadOnlyBindingException(this);
-    }
-
-    /**
-     *  Default implementation: returns true.
-     * 
-     *  @since 2.0.3
-     * 
-     **/
-
-    public boolean isInvariant()
-    {
-        return true;
-    }
-
-    public Object getObject(String parameterName, Class type)
-    {
-        Object result = getObject();
-
-        if (result == null)
-            return result;
-
-        Class resultClass = result.getClass();
-
-        if (type.isAssignableFrom(resultClass))
-            return result;
-
-        if (type.isPrimitive() && isWrapper(type, resultClass))
-            return result;
-
-        String key =
-            type.isInterface() ? "AbstractBinding.wrong-interface" : "AbstractBinding.wrong-type";
-
-        String message =
-            Tapestry.format(
-                key,
-                new Object[] { parameterName, result, resultClass.getName(), type.getName()});
-
-        throw new BindingException(message, this);
-    }
-
-    public boolean isWrapper(Class primitiveType, Class subjectClass)
-    {
-        return PRIMITIVE_TYPES.get(primitiveType).equals(subjectClass);
-    }
-
-    /** @since 3.0 **/
-
-    protected BindingException createReadOnlyBindingException(IBinding binding)
-    {
-        return new BindingException(
-            Tapestry.getMessage("AbstractBinding.read-only-binding"),
-            binding);
-    }
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/binding/ExpressionBinding.java b/3.0.4/framework/src/org/apache/tapestry/binding/ExpressionBinding.java
deleted file mode 100644
index 15419e5..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/binding/ExpressionBinding.java
+++ /dev/null
@@ -1,600 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.binding;
-
-import java.util.Map;
-
-import ognl.Ognl;
-import ognl.OgnlException;
-import ognl.TypeConverter;
-
-import org.apache.tapestry.BindingException;
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.ILocation;
-import org.apache.tapestry.IResourceResolver;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.spec.BeanLifecycle;
-import org.apache.tapestry.spec.IBeanSpecification;
-import org.apache.tapestry.spec.IApplicationSpecification;
-import org.apache.tapestry.util.StringSplitter;
-import org.apache.tapestry.util.prop.OgnlUtils;
-
-/**
- *  Implements a dynamic binding, based on getting and fetching
- *  values using JavaBeans property access.  This is built
- *  upon the <a href="http://www.ognl.org">OGNL</a> library.
- *
- *  <p><b>Optimization of the Expression</b>
- * 
- *  <p>There's a lot of room for optimization here because we can
- *  count on some portions of the expression to be
- *  effectively static.  Note that we type the root object as
- *  {@link IComponent}.  We have some expectations that
- *  certain properties of the root (and properties reachable from the root)
- *  will be constant for the lifetime of the binding.  For example, 
- *  components never change thier page or container.  This means
- *  that certain property prefixes can be optimized:
- *
- *  <ul>
- *  <li>page
- *  <li>container
- *  <li>components.<i>name</i>
- *  </ul>
- *
- *  <p>This means that once an ExpressionBinding has been triggered, 
- *  the {@link #toString()} method may return different values for the root
- *  component and the expression than was originally set.
- * 
- *  <p><b>Identifying Invariants</b>
- * 
- *  <p>Most expressions are fully dynamic; they must be
- *  resolved each time they are accessed.  This can be somewhat inefficient.
- *  Tapestry can identify certain paths as invariant:
- * 
- *  <ul>
- *  <li>A component within the page hierarchy 
- *  <li>An {@link org.apache.tapestry.IAsset} from then assets map (property <code>assets</code>)
- *  <li>A {@link org.apache.tapestry.IActionListener}
- *  from the listener map (property <code>listeners</code>)
- *  <li>A bean with a {@link org.apache.tapestry.spec.BeanLifecycle#PAGE}
- *  lifecycle (property <code>beans</code>)
- *  <li>A binding (property <code>bindings</code>)
- *  </ul>
- * 
- *  <p>
- *  These optimizations have some inherent dangers; they assume that
- *  the components have not overidden the specified properties;
- *  the last one (concerning helper beans) assumes that the
- *  component does inherit from {@link org.apache.tapestry.AbstractComponent}.
- *  If this becomes a problem in the future, it may be necessary to
- *  have the component itself involved in these determinations.
- *  
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 2.2
- * 
- **/
-
-public class ExpressionBinding extends AbstractBinding
-{
-    /**
-     *  The root object against which the nested property name is evaluated.
-     *
-     **/
-
-    private IComponent _root;
-
-    /**
-     *  The OGNL expression, as a string.
-     *
-     **/
-
-    private String _expression;
-
-    /**
-     *  If true, then the binding is invariant, and cachedValue
-     *  is the ultimate value.
-     * 
-     **/
-
-    private boolean _invariant = false;
-
-    /**
-     *  Stores the cached value for the binding, if invariant
-     *  is true.
-     * 
-     **/
-
-    private Object _cachedValue;
-
-    /**
-     *   Parsed OGNL expression.
-     * 
-     **/
-
-    private Object _parsedExpression;
-
-    /**
-     *  Flag set once the binding has initialized.
-     *  _cachedValue, _invariant and _final value
-     *  for _expression
-     *  are not valid until after initialization.
-     * 
-     * 
-     **/
-
-    private boolean _initialized;
-
-    private IResourceResolver _resolver;
-
-    /**
-     *  The OGNL context for this binding.  It is retained
-     *  for the lifespan of the binding once created.
-     * 
-     **/
-
-    private Map _context;
-
-    /**
-     *  Creates a {@link ExpressionBinding} from the root object
-     *  and an OGNL expression.
-     * 
-     **/
-
-    public ExpressionBinding(
-        IResourceResolver resolver,
-        IComponent root,
-        String expression,
-        ILocation location)
-    {
-        super(location);
-
-        _resolver = resolver;
-        _root = root;
-        _expression = expression;
-    }
-
-    public String getExpression()
-    {
-        return _expression;
-    }
-
-    public IComponent getRoot()
-    {
-        return _root;
-    }
-
-    /**
-     *  Gets the value of the property path, with the assistance of a 
-     *  OGNL.
-     *
-     *  @throws BindingException if an exception is thrown accessing the property.
-     *
-     **/
-
-    public Object getObject()
-    {
-        initialize();
-
-        if (_invariant)
-            return _cachedValue;
-
-        return resolveProperty();
-    }
-
-    private Object resolveProperty()
-    {
-        try
-        {
-            return Ognl.getValue(_parsedExpression, getOgnlContext(), _root);
-        }
-        catch (OgnlException t)
-        {
-            throw new BindingException(
-                Tapestry.format(
-                    "ExpressionBinding.unable-to-resolve-expression",
-                    _expression,
-                    _root),
-                this,
-                t);
-        }
-    }
-
-    /**
-     *  Creates an OGNL context used to get or set a value.
-     *  We may extend this in the future to set additional
-     *  context variables (such as page, request cycle and engine).
-     *  An optional type converter will be added to the OGNL context
-     *  if it is specified as an application extension with the name
-     *  {@link Tapestry#OGNL_TYPE_CONVERTER}.
-     * 
-     **/
-
-    private Map getOgnlContext()
-    {
-        if (_context == null)
-            _context = Ognl.createDefaultContext(_root, _resolver);
-
-        if (_root.getPage() != null)
-        {
-            if (_root.getPage().getEngine() != null)
-            {
-                IApplicationSpecification appSpec = _root.getPage().getEngine().getSpecification();
-
-                if (appSpec != null && appSpec.checkExtension(Tapestry.OGNL_TYPE_CONVERTER))
-                {
-                    TypeConverter typeConverter =
-                        (TypeConverter) appSpec.getExtension(
-                            Tapestry.OGNL_TYPE_CONVERTER,
-                            TypeConverter.class);
-
-                    Ognl.setTypeConverter(_context, typeConverter);
-                }
-            }
-        }
-
-        return _context;
-    }
-
-    /**
-     *  Returns true if the binding is expected to always 
-     *  return the same value.
-     * 
-     * 
-     **/
-
-    public boolean isInvariant()
-    {
-        initialize();
-
-        return _invariant;
-    }
-
-    public void setBoolean(boolean value)
-    {
-        setObject(value ? Boolean.TRUE : Boolean.FALSE);
-    }
-
-    public void setInt(int value)
-    {
-        setObject(new Integer(value));
-    }
-
-    public void setDouble(double value)
-    {
-        setObject(new Double(value));
-    }
-
-    public void setString(String value)
-    {
-        setObject(value);
-    }
-
-    /**
-     *  Sets up the helper object, but also optimizes the property path
-     *  and determines if the binding is invarant.
-     *
-     **/
-
-    private void initialize()
-    {
-        if (_initialized)
-            return;
-
-        _initialized = true;
-
-        try
-        {
-            _parsedExpression = OgnlUtils.getParsedExpression(_expression);
-        }
-        catch (Exception ex)
-        {
-            throw new BindingException(ex.getMessage(), this, ex);
-        }
-
-        if (checkForConstant())
-            return;
-
-        try
-        {
-            if (!Ognl.isSimpleNavigationChain(_parsedExpression, getOgnlContext()))
-                return;
-        }
-        catch (OgnlException ex)
-        {
-            throw new BindingException(ex.getMessage(), this, ex);
-        }
-
-        // Split the expression into individual property names.
-        // We then optimize what we can from the expression.  This will
-        // shorten the expression and, in some cases, eliminate
-        // it.  We also check to see if the binding can be an invariant.
-
-        String[] split = new StringSplitter('.').splitToArray(_expression);
-
-        int count = optimizeRootObject(split);
-
-        // We'ver removed some or all of the initial elements of split
-        // but have to account for anthing left over.
-
-        if (count == split.length)
-        {
-            // The property path was something like "page" or "component.foo"
-            // and was completely eliminated.
-
-            _expression = null;
-            _parsedExpression = null;
-
-            _invariant = true;
-            _cachedValue = _root;
-
-            return;
-        }
-
-        _expression = reassemble(count, split);
-        _parsedExpression = OgnlUtils.getParsedExpression(_expression);
-
-        checkForInvariant(count, split);
-    }
-
-    /**
-     *  Looks for common prefixes on the expression (provided pre-split) that
-     *  are recognized as references to other components.
-     * 
-     *  @return the number of leading elements of the split expression that
-     *  have been removed.
-     * 
-     **/
-
-    private int optimizeRootObject(String[] split)
-    {
-        int i;
-
-        for (i = 0; i < split.length; i++)
-        {
-
-            if (split[i].equals("page"))
-            {
-                _root = _root.getPage();
-                continue;
-            }
-
-            if (split[i].equals("container"))
-            {
-                _root = _root.getContainer();
-                continue;
-            }
-
-            // Here's the tricky one ... if its of the form
-            // "components.foo" we can get the named component
-            // directly.
-
-            if (split[i].equals("components") && i + 1 < split.length)
-            {
-                _root = _root.getComponent(split[i + 1]);
-                i++;
-                continue;
-            }
-
-            // Not a recognized prefix, break the loop
-
-            break;
-        }
-
-        return i;
-    }
-
-    private boolean checkForConstant()
-    {
-        try
-        {
-            if (Ognl.isConstant(_parsedExpression, getOgnlContext()))
-            {
-                _invariant = true;
-
-                _cachedValue = resolveProperty();
-
-                return true;
-            }
-        }
-        catch (OgnlException ex)
-        {
-            throw new BindingException(
-                Tapestry.format(
-                    "ExpressionBinding.unable-to-resolve-expression",
-                    _expression,
-                    _root),
-                this,
-                ex);
-        }
-
-        return false;
-    }
-
-    /**
-     *  Reassembles the remainder of the split property path
-     *  from the start point.
-     * 
-     **/
-
-    private String reassemble(int start, String[] split)
-    {
-        int count = split.length - start;
-
-        if (count == 0)
-            return null;
-
-        if (count == 1)
-            return split[split.length - 1];
-
-        StringBuffer buffer = new StringBuffer();
-
-        for (int i = start; i < split.length; i++)
-        {
-            if (i > start)
-                buffer.append('.');
-
-            buffer.append(split[i]);
-        }
-
-        return buffer.toString();
-    }
-
-    /**
-     *  Checks to see if the binding can be converted to an invariant.
-     * 
-     **/
-
-    private void checkForInvariant(int start, String[] split)
-    {
-        // For now, all of our conditions are two properties
-        // from a root component.
-
-        if (split.length - start != 2)
-            return;
-
-        try
-        {
-            if (!Ognl.isSimpleNavigationChain(_parsedExpression, getOgnlContext()))
-                return;
-        }
-        catch (OgnlException ex)
-        {
-            throw new BindingException(
-                Tapestry.format(
-                    "ExpressionBinding.unable-to-resolve-expression",
-                    _expression,
-                    _root),
-                this,
-                ex);
-        }
-
-        String first = split[start];
-
-        if (first.equals("listeners"))
-        {
-            _invariant = true;
-
-            // Could cast to AbstractComponent, get listenersMap, etc.,
-            // but this is easier.
-
-            _cachedValue = resolveProperty();
-            return;
-        }
-
-        if (first.equals("assets"))
-        {
-            String name = split[start + 1];
-
-            _invariant = true;
-            _cachedValue = _root.getAsset(name);
-            return;
-        }
-
-        if (first.equals("beans"))
-        {
-            String name = split[start + 1];
-
-            IBeanSpecification bs = _root.getSpecification().getBeanSpecification(name);
-
-            if (bs == null || bs.getLifecycle() != BeanLifecycle.PAGE)
-                return;
-
-            // Again, could cast to AbstractComponent, but this
-            // is easier.
-
-            _invariant = true;
-            _cachedValue = resolveProperty();
-            return;
-        }
-
-        if (first.equals("bindings"))
-        {
-            String name = split[start + 1];
-
-            _invariant = true;
-            _cachedValue = _root.getBinding(name);
-            return;
-        }
-
-        // Not a recognized pattern for conversion
-        // to invariant.
-    }
-
-    /**
-     *  Updates the property for the binding to the given value.  
-     *
-     *  @throws BindingException if the property can't be updated (typically
-     *  due to an security problem, or a missing mutator method).
-     *  @throws BindingException if the binding is invariant.
-     **/
-
-    public void setObject(Object value)
-    {
-        initialize();
-
-        if (_invariant)
-            throw createReadOnlyBindingException(this);
-
-        try
-        {
-            Ognl.setValue(_parsedExpression, getOgnlContext(), _root, value);
-        }
-        catch (OgnlException ex)
-        {
-            throw new BindingException(
-                Tapestry.format(
-                    "ExpressionBinding.unable-to-update-expression",
-                    _expression,
-                    _root,
-                    value),
-                this,
-                ex);
-        }
-    }
-
-    /**
-     *  Returns the a String representing the property path.  This includes
-     *  the {@link IComponent#getExtendedId() extended id} of the root component
-     *  and the property path ... once the binding is used, these may change
-     *  due to optimization of the property path.
-     *
-     **/
-
-    public String toString()
-    {
-        StringBuffer buffer = new StringBuffer();
-
-        buffer.append("ExpressionBinding[");
-        buffer.append(_root.getExtendedId());
-
-        if (_expression != null)
-        {
-            buffer.append(' ');
-            buffer.append(_expression);
-        }
-
-        if (_invariant)
-        {
-            buffer.append(" cachedValue=");
-            buffer.append(_cachedValue);
-        }
-
-        buffer.append(']');
-
-        return buffer.toString();
-    }
-
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/binding/FieldBinding.java b/3.0.4/framework/src/org/apache/tapestry/binding/FieldBinding.java
deleted file mode 100644
index 249f243..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/binding/FieldBinding.java
+++ /dev/null
@@ -1,149 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.binding;
-
-import java.lang.reflect.Field;
-
-import org.apache.tapestry.BindingException;
-import org.apache.tapestry.ILocation;
-import org.apache.tapestry.IResourceResolver;
-import org.apache.tapestry.Tapestry;
-
-/**
- *
- *  A type of static {@link org.apache.tapestry.IBinding} that gets it value from a public field
- *  (static class variable) of some class or interface.
- *
- *  <p>The binding uses a field name, which consists of a fully qualified class name and
- *  a static field of that class seperated by a dot.  For example: <code>com.foobar.SomeClass.SOME_FIELD</code>.
- *
- *  <p>If the class specified is for the <code>java.lang</code> package, then the package may be
- *  ommitted.  This allows <code>Boolean.TRUE</code> to be recognized as a valid value.
- *
- *  <p>The {@link org.apache.tapestry.engine.IPageSource} maintains a cache of FieldBindings.  This means that
- *  each field will be represented by a single binding ... that means that for any field,
- *  the <code>accessValue()</code> method (which obtains the value for the field using
- *  reflection) will only be invoked once.
- *
- * @author Howard Lewis Ship
- * @version $Id$
- * @deprecated To be removed in 2.5 with no replacement.  Can be accomplished using OGNL expressions.
- * 
- **/
-
-public class FieldBinding extends AbstractBinding
-{
-    private String fieldName;
-    private boolean accessed;
-    private Object value;
-    private IResourceResolver resolver;
-
-    public FieldBinding(IResourceResolver resolver, String fieldName, ILocation location)
-    {
-    	super(location);
-    	
-        this.resolver = resolver;
-        this.fieldName = fieldName;
-    }
-
-    public String toString()
-    {
-        StringBuffer buffer;
-
-        buffer = new StringBuffer("FieldBinding[");
-        buffer.append(fieldName);
-
-        if (accessed)
-        {
-            buffer.append(" (");
-            buffer.append(value);
-            buffer.append(')');
-        }
-
-        buffer.append(']');
-
-        return buffer.toString();
-    }
-
-    public Object getObject()
-    {
-        if (!accessed)
-            accessValue();
-
-        return value;
-    }
-
-    private void accessValue()
-    {
-        String className;
-        String simpleFieldName;
-        int dotx;
-        Class targetClass;
-        Field field;
-
-        dotx = fieldName.lastIndexOf('.');
-
-        if (dotx < 0)
-            throw new BindingException(Tapestry.format("invalid-field-name", fieldName), this);
-
-        // Hm. Should validate that there's a dot!
-
-        className = fieldName.substring(0, dotx);
-        simpleFieldName = fieldName.substring(dotx + 1);
-
-        // Simple class names are assumed to be in the java.lang package.
-
-        if (className.indexOf('.') < 0)
-            className = "java.lang." + className;
-
-        try
-        {
-            targetClass = resolver.findClass(className);
-        }
-        catch (Throwable t)
-        {
-            throw new BindingException(Tapestry.format("unable-to-resolve-class", className), this, t);
-        }
-
-        try
-        {
-            field = targetClass.getField(simpleFieldName);
-        }
-        catch (NoSuchFieldException ex)
-        {
-            throw new BindingException(Tapestry.format("field-not-defined", fieldName), this, ex);
-        }
-
-        // Get the value of the field.  null means look for it as a static
-        // variable.
-
-        try
-        {
-            value = field.get(null);
-        }
-        catch (IllegalAccessException ex)
-        {
-            throw new BindingException(Tapestry.format("illegal-field-acccess", fieldName), this, ex);
-        }
-        catch (NullPointerException ex)
-        {
-            throw new BindingException(Tapestry.format("field-is-instance", fieldName), this, ex);
-        }
-
-        // Don't look for it again, even if the value is itself null.
-
-        accessed = true;
-    }
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/binding/ListenerBinding.java b/3.0.4/framework/src/org/apache/tapestry/binding/ListenerBinding.java
deleted file mode 100644
index fd24bd8..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/binding/ListenerBinding.java
+++ /dev/null
@@ -1,206 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.binding;
-
-import org.apache.bsf.BSFException;
-import org.apache.bsf.BSFManager;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.tapestry.ApplicationRuntimeException;
-import org.apache.tapestry.BindingException;
-import org.apache.tapestry.IActionListener;
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.IEngine;
-import org.apache.tapestry.ILocation;
-import org.apache.tapestry.IPage;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.util.pool.Pool;
-
-/**
- *  A very specialized binding that can be used as an {@link org.apache.tapestry.IActionListener},
- *  executing a script in a scripting language, via
- *  <a href="http://jakarta.apache.org/bsf">Bean Scripting Framework</a>.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 3.0
- *
- **/
-
-public class ListenerBinding extends AbstractBinding implements IActionListener
-{
-    private static final Log LOG = LogFactory.getLog(ListenerBinding.class);
-
-    private static final String BSF_POOL_KEY = "org.apache.tapestry.BSFManager";
-
-    private String _language;
-    private String _script;
-    private IComponent _component;
-
-    public ListenerBinding(IComponent component, String language, String script, ILocation location)
-    {
-        super(location);
-
-        _component = component;
-        _language = language;
-        _script = script;
-    }
-
-    /**
-     *  Always returns true.
-     * 
-     **/
-
-    public boolean getBoolean()
-    {
-        return true;
-    }
-
-    public int getInt()
-    {
-        throw new BindingException(
-            Tapestry.format("ListenerBinding.invalid-access", "getInt()"),
-            this);
-    }
-
-    public double getDouble()
-    {
-        throw new BindingException(
-            Tapestry.format("ListenerBinding.invalid-access", "getDouble()"),
-            this);
-
-    }
-
-    /**
-     *  Returns the underlying script.
-     * 
-     **/
-
-    public String getString()
-    {
-        return _script;
-    }
-
-    /**
-     *  Returns this.
-     * 
-     **/
-
-    public Object getObject()
-    {
-        return this;
-    }
-
-    /**
-     *  A ListenerBinding is also a {@link org.apache.tapestry.IActionListener}.  It
-     *  registers a number of beans with the BSF manager and invokes the
-     *  script.
-     * 
-     *  <p>
-     *  Registers the following bean:
-     *  <ul>
-     *  <li>component - the relevant {@link IComponent}, typically the same as the page 
-     *  <li>page - the {@link IPage} trigged by the request (obtained by {@link IRequestCycle#getPage()}
-     *  <li>cycle - the {@link IRequestCycle}, from which can be found
-     *  the {@link IEngine}, etc.
-     *  </ul>
-     * 
-     **/
-
-    public void actionTriggered(IComponent component, IRequestCycle cycle)
-    {
-        boolean debug = LOG.isDebugEnabled();
-
-        long startTime = debug ? System.currentTimeMillis() : 0;
-
-        BSFManager bsf = obtainBSFManager(cycle);
-
-        ILocation location = getLocation();
-
-        try
-        {
-            IPage page = cycle.getPage();
-
-            bsf.declareBean("component", _component, _component.getClass());
-            bsf.declareBean("page", page, page.getClass());
-            bsf.declareBean("cycle", cycle, cycle.getClass());
-
-            bsf.exec(
-                _language,
-                location.getResourceLocation().toString(),
-                location.getLineNumber(),
-                location.getLineNumber(),
-                _script);
-        }
-        catch (BSFException ex)
-        {
-            String message =
-                Tapestry.format("ListenerBinding.bsf-exception", location, ex.getMessage());
-
-            throw new ApplicationRuntimeException(message, _component, getLocation(), ex);
-        }
-        finally
-        {
-            if (LOG.isDebugEnabled())
-                LOG.debug("Cleaning up " + bsf);
-
-            undeclare(bsf, "component");
-            undeclare(bsf, "page");
-            undeclare(bsf, "cycle");
-
-            cycle.getEngine().getPool().store(BSF_POOL_KEY, bsf);
-
-            if (debug)
-            {
-                long endTime = System.currentTimeMillis();
-
-                LOG.debug(
-                    "Execution of \"" + location + "\" took " + (endTime - startTime) + " millis");
-            }
-        }
-    }
-
-    private void undeclare(BSFManager bsf, String name)
-    {
-        try
-        {
-            bsf.undeclareBean(name);
-        }
-        catch (BSFException ex)
-        {
-            LOG.warn(Tapestry.format("ListenerBinding.unable-to-undeclare-bean", ex));
-        }
-    }
-
-    private BSFManager obtainBSFManager(IRequestCycle cycle)
-    {
-        IEngine engine = cycle.getEngine();
-        Pool pool = engine.getPool();
-
-        BSFManager result = (BSFManager) pool.retrieve(BSF_POOL_KEY);
-
-        if (result == null)
-        {
-            LOG.debug("Creating new BSFManager instance.");
-
-            result = new BSFManager();
-
-            result.setClassLoader(engine.getResourceResolver().getClassLoader());
-        }
-
-        return result;
-    }
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/binding/StaticBinding.java b/3.0.4/framework/src/org/apache/tapestry/binding/StaticBinding.java
deleted file mode 100644
index 80bf953..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/binding/StaticBinding.java
+++ /dev/null
@@ -1,90 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.binding;
-
-import org.apache.tapestry.ILocation;
-
-/**
- * Stores a static (invariant) String as the value.
- *
- * <p>It may be useful to cache static bindings the way {@link FieldBinding}s are cached.
- *
- * @author Howard Lewis Ship
- * @version $Id$
- * 
- **/
-
-public class StaticBinding extends AbstractBinding
-{
-    private String _value;
-    private boolean _parsedInt;
-    private int _intValue;
-    private boolean _parsedDouble;
-    private double _doubleValue;
-
-    public StaticBinding(String value, ILocation location)
-    {
-    	super(location);
-    	
-        _value = value;
-    }
-
-    /**
-     *  Interprets the static value as an integer.
-     *
-     **/
-
-    public int getInt()
-    {
-        if (!_parsedInt)
-        {
-            _intValue = Integer.parseInt(_value);
-            _parsedInt = true;
-        }
-
-        return _intValue;
-    }
-
-    /**
-     *  Interprets the static value as a double.
-     *
-     **/
-
-    public double getDouble()
-    {
-        if (!_parsedDouble)
-        {
-            _doubleValue = Double.parseDouble(_value);
-            _parsedDouble = true;
-        }
-
-        return _doubleValue;
-    }
-
-    public String getString()
-    {
-        return _value;
-    }
-
-    public Object getObject()
-    {
-        return _value;
-    }
-
-    public String toString()
-    {
-        return "StaticBinding[" + _value + "]";
-    }
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/binding/StringBinding.java b/3.0.4/framework/src/org/apache/tapestry/binding/StringBinding.java
deleted file mode 100644
index fd9ff7e..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/binding/StringBinding.java
+++ /dev/null
@@ -1,87 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.binding;
-
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.ILocation;
-
-/**
- *  A binding that connects directly to a localized string for
- *  a component.
- *
- *  @see IComponent#getString(String)
- * 
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 2.0.4
- *
- **/
-
-public class StringBinding extends AbstractBinding
-{
-    private IComponent _component;
-    private String _key;
-
-    public StringBinding(IComponent component, String key, ILocation location)
-    {
-    	super(location);
-    	
-        _component = component;
-        _key = key;
-    }
-
-    public IComponent getComponent()
-    {
-        return _component;
-    }
-
-    public String getKey()
-    {
-        return _key;
-    }
-
-    /**
-     *  Accesses the specified localized string.  Never returns null.
-     *
-     **/
-
-    public Object getObject()
-    {
-        return _component.getMessages().getMessage(_key);
-    }
-
-    /**
-     *  Returns true.  Localized component strings are
-     *  read-only.
-     * 
-     **/
-
-    public boolean isInvariant()
-    {
-        return true;
-    }
-
-    public String toString()
-    {
-        StringBuffer buffer = new StringBuffer("StringBinding");
-        buffer.append('[');
-        buffer.append(_component.getExtendedId());
-        buffer.append(' ');
-        buffer.append(_key);
-        buffer.append(']');
-
-        return buffer.toString();
-    }
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/binding/package.html b/3.0.4/framework/src/org/apache/tapestry/binding/package.html
deleted file mode 100644
index a893063..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/binding/package.html
+++ /dev/null
@@ -1,14 +0,0 @@
-<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN">
-<!-- $Id$ -->
-<html>
-<head>
-<title>Tapestry: Web Application Framework</title>
-</head>
-<body>
-
-<p>Implementations of {@link org.apache.tapestry.IBinding}.
-
-@author Howard Lewis Ship <a href="mailto:hlship@apache.org">hlship@apache.org</a>
-
-</body>
-</html>
diff --git a/3.0.4/framework/src/org/apache/tapestry/callback/DirectCallback.java b/3.0.4/framework/src/org/apache/tapestry/callback/DirectCallback.java
deleted file mode 100644
index 8b890df..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/callback/DirectCallback.java
+++ /dev/null
@@ -1,117 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.callback;
-
-import org.apache.tapestry.ApplicationRuntimeException;
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.IDirect;
-import org.apache.tapestry.IPage;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.Tapestry;
-
-/**
- *  Simple callback for re-invoking a {@link IDirect} component trigger..
- *
- *  @version $Id$
- *  @author Howard Lewis Ship
- *  @since 0.2.9
- *
- **/
-
-public class DirectCallback implements ICallback
-{
-    /**
-     *  @since 2.0.4
-     * 
-     **/
-
-    private static final long serialVersionUID = -8888847655917503471L;
-
-    private String _pageName;
-    private String _componentIdPath;
-    private Object[] _parameters;
-
-    public String toString()
-    {
-        StringBuffer buffer = new StringBuffer("DirectCallback[");
-
-        buffer.append(_pageName);
-        buffer.append('/');
-        buffer.append(_componentIdPath);
-
-        if (_parameters != null)
-        {
-            String sep = " ";
-
-            for (int i = 0; i < _parameters.length; i++)
-            {
-                buffer.append(sep);
-                buffer.append(_parameters[i]);
-
-                sep = ", ";
-            }
-        }
-
-        buffer.append(']');
-
-        return buffer.toString();
-
-    }
-
-    /**
-     *  Creates a new DirectCallback for the component.  The parameters
-     *  (which may be null) is retained, not copied.
-     *
-     **/
-
-    public DirectCallback(IDirect component, Object[] parameters)
-    {
-        _pageName = component.getPage().getPageName();
-        _componentIdPath = component.getIdPath();
-        _parameters = parameters;
-    }
-
-    /**
-     *  Locates the {@link IDirect} component that was previously identified
-     *  (and whose page and id path were stored).
-     *  Invokes {@link IRequestCycle#setServiceParameters(Object[])} to
-     *  restore the service parameters, then
-     *  invokes {@link IDirect#trigger(IRequestCycle)} on the component.
-     *
-     **/
-
-    public void performCallback(IRequestCycle cycle)
-    {
-        IPage page = cycle.getPage(_pageName);
-        IComponent component = page.getNestedComponent(_componentIdPath);
-        IDirect direct = null;
-
-        try
-        {
-            direct = (IDirect) component;
-        }
-        catch (ClassCastException ex)
-        {
-            throw new ApplicationRuntimeException(
-                Tapestry.format("DirectCallback.wrong-type", component.getExtendedId()),
-                component,
-                null,
-                ex);
-        }
-
-        cycle.setServiceParameters(_parameters);
-        direct.trigger(cycle);
-    }
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/callback/ExternalCallback.java b/3.0.4/framework/src/org/apache/tapestry/callback/ExternalCallback.java
deleted file mode 100644
index 80d50c3..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/callback/ExternalCallback.java
+++ /dev/null
@@ -1,170 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.callback;
-
-import org.apache.tapestry.ApplicationRuntimeException;
-import org.apache.tapestry.IExternalPage;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.Tapestry;
-
-/**
- *  A callback for returning to an {@link org.apache.tapestry.IExternalPage}.
- *  <p>
- *  Example usage of <tt>ExternalCallback</tt>: 
- *  <p>
- *  The External page ensure a user is authenticated in the 
- *  {@link org.apache.tapestry.IPage#validate(IRequestCycle)} method. 
- *  If the user is not authenticated, they are redirected to the Login page, after 
- *  setting a callback in the Login page.
- *  <p>
- *  The Login page <tt>formSubmit()</tt> {@link org.apache.tapestry.IActionListener} 
- *  authenticates the user and then invokes {@link ICallback#performCallback(IRequestCycle)} 
- *  to the External page.
- *  <pre>
- *  public class External extends BasePage implements IExternalPage {
- * 
- *      private Integer _itemId;
- *
- *      public void validate(IRequestCycle cycle) throws RequestCycleException {            
- *          Visit visit = (Visit) getVisit();
- *      
- *          if (!visit.isAuthenticated()) {
- *              Login login = (Login) cycle.getPage("Login");
- *
- *              login.setCallback
- *                  (new ExternalCallback(this, cycle.getServiceParameters()));
- *              
- *              throw new PageRedirectException(login);
- *          }            
- *      }
- * 
- *      public void activateExternalPage(Object[] params, IRequestCycle cycle)
- *              throws RequestCycleException {            
- *          _itemId = (Integer) params[0];
- *      }
- *  }
- *
- *  public Login extends BasePage {
- * 
- *      private ICallback _callback;
- *
- *      public void setCallback(ICallback _callback) {
- *          _callback = callback;
- *      }
- *
- *      public void formSubmit(IRequestCycle cycle) {
- *          // Authentication code
- *          ..
- *   
- *          Visit visit = (Visit) getVisit();
- *
- *          visit.setAuthenticated(true);
- *  
- *          if (_callback != null) {
- *              _callback.performCallback(cycle);
- *          }
- *      }
- *  }    
- *  </pre>
- * 
- *  @see org.apache.tapestry.IExternalPage
- *  @see org.apache.tapestry.engine.ExternalService
- *
- *  @version $Id$
- *  @author Malcolm Edgar
- *  @since 2.3
- *
- **/
-
-public class ExternalCallback implements ICallback
-{
-    private String _pageName;
-    private Object[] _parameters;
-
-    /**
-     *  Creates a new ExternalCallback for the named <tt>IExternalPage</tt>.  
-     *  The parameters (which may be null) is retained, not copied.
-     *
-     **/
-
-    public ExternalCallback(String pageName, Object[] parameters)
-    {
-        _pageName = pageName;
-        _parameters = parameters;
-    }
-
-    /**
-     *  Creates a new ExternalCallback for the page.  The parameters
-     *  (which may be null) is retained, not copied.
-     *
-     **/
-
-    public ExternalCallback(IExternalPage page, Object[] parameters)
-    {
-        _pageName = page.getPageName();
-        _parameters = parameters;
-    }
-
-    /**
-     *  Invokes {@link IRequestCycle#setPage(String)} to select the previously
-     *  identified <tt>IExternalPage</tt> as the response page and activates
-     *  the page by invoking <tt>activateExternalPage()</tt> with the callback 
-     *  parameters and request cycle.
-     *
-     **/
-
-    public void performCallback(IRequestCycle cycle)
-    {        
-        try
-        {
-            IExternalPage page = (IExternalPage) cycle.getPage(_pageName);
-            
-            cycle.activate(page);
-    
-            page.activateExternalPage(_parameters, cycle);            
-        }
-        catch (ClassCastException ex)
-        {
-            throw new ApplicationRuntimeException(
-                Tapestry.format("ExternalCallback.page-not-compatible", _pageName),
-                ex);
-        }
-    }
-    
-    public String toString()
-    {
-        StringBuffer buffer = new StringBuffer("ExternalCallback[");
-
-        buffer.append(_pageName);
-        buffer.append('/');
-
-        if (_parameters != null)
-        {
-            String sep = " ";
-
-            for (int i = 0; i < _parameters.length; i++)
-            {
-                buffer.append(sep);
-                buffer.append(_parameters[i]);
-
-                sep = ", ";
-            }
-        }
-
-        buffer.append(']');
-
-        return buffer.toString();
-    }    
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/callback/ICallback.java b/3.0.4/framework/src/org/apache/tapestry/callback/ICallback.java
deleted file mode 100644
index a6028ef..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/callback/ICallback.java
+++ /dev/null
@@ -1,46 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.callback;
-
-import java.io.Serializable;
-
-import org.apache.tapestry.IRequestCycle;
-
-/**
- *  Defines a callback, an object which is used to invoke or reinvoke a method
- *  on an object or component in a later request cycle.  This is used to
- *  allow certain operations (say, submitting an order) to defer to other processes
- *  (say, logging in and/or registerring).
- *
- *  <p>Callbacks must be {@link Serializable}, to ensure that they can be stored
- *  between request cycles.
- *
- *  @version $Id$
- *  @author Howard Lewis Ship
- *  @since 0.2.9
- *
- **/
-
-public interface ICallback extends Serializable
-{
-    /**
-     *  Performs the call back.  Typical implementation will locate a particular
-     *  page or component and invoke a method upon it, or 
-     *  invoke a method on the {@link IRequestCycle cycle}.
-     *
-     **/
-
-    public void performCallback(IRequestCycle cycle);
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/callback/PageCallback.java b/3.0.4/framework/src/org/apache/tapestry/callback/PageCallback.java
deleted file mode 100644
index 987c7bc..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/callback/PageCallback.java
+++ /dev/null
@@ -1,114 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.callback;
-
-import org.apache.tapestry.IPage;
-import org.apache.tapestry.IRequestCycle;
-
-/**
- *  Simple callback for returning to a page.
- *  <p>
- *  Example usage of <tt>PageCallback</tt>:
- *  <p>
- *  The Home page ensure a user is 
- *  authenticated in the {@link org.apache.tapestry.IPage#validate(IRequestCycle)} 
- *  method.  If the user is not authenticated, they are redirected to the Login 
- *  page, after setting a callback in the Login page.
- *  <p>
- *  The Login page <tt>formSubmit()</tt> {@link org.apache.tapestry.IActionListener} 
- *  authenticates the user and then invokes {@link ICallback#performCallback(IRequestCycle)} 
- *  to the Home page.
- *  <pre>
- *  public class Home extends BasePage {
- * 
- *      public void validate(IRequestCycle cycle) {            
- *          Visit visit = (Visit) getVisit();
- *      
- *          if (!visit.isAuthenticated()) {
- *              Login login = (Login) cycle.getPage("Login");
- *
- *              login.setCallback(new PageCallback(this));
- *              
- *              throw new PageRedirectException(login);
- *          }            
- *      }
- *  }
- *
- *  public Login extends BasePage {
- * 
- *      private ICallback _callback;
- *
- *      public void setCallback(ICallback _callback) {
- *          _callback = callback;
- *      }
- *
- *      public void formSubmit(IRequestCycle cycle) {
- *          // Authentication code
- *          ..
- *   
- *          Visit visit = (Visit) getVisit();
- *
- *          visit.setAuthenticated(true);
- *  
- *          if (_callback != null) {
- *              _callback.performCallback(cycle);
- *          }
- *      }
- *  }    
- *  </pre>
- *
- *  @version $Id$
- *  @author Howard Lewis Ship
- *  @since 0.2.9
- *
- **/
-
-public class PageCallback implements ICallback
-{
-    /**
-     *  @since 2.0.4
-     * 
-     **/
-
-    private static final long serialVersionUID = -3286806776105690068L;
-
-    private String _pageName;
-
-    public PageCallback(String pageName)
-    {
-        _pageName = pageName;
-    }
-
-    public PageCallback(IPage page)
-    {
-        this(page.getPageName());
-    }
-
-    public String toString()
-    {
-        return "PageCallback[" + _pageName + "]";
-    }
-
-    /**
-     *  Invokes {@link IRequestCycle#activate(String)} to select the previously
-     *  identified page as the response page.
-     *
-     **/
-
-    public void performCallback(IRequestCycle cycle)
-    {
-        cycle.activate(_pageName);
-    }
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/callback/package.html b/3.0.4/framework/src/org/apache/tapestry/callback/package.html
deleted file mode 100644
index 6623396..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/callback/package.html
+++ /dev/null
@@ -1,24 +0,0 @@
-<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN">
-<!-- $Id$ -->
-<html>
-<head>
-<title>Tapestry: Web Application Framework</title>
-</head>
-<body>
-
-<p>Provides implementations of callbacks, objects that encapsulate a server request that is deferred,
-typically to allow a user to login or otherwise authenticate before proceeding with
-some other activity.
-
-<p>In practice, an implementation of {@link org.apache.tapestry.IPage#validate(IRequestCycle)} or
-{@link org.apache.tapestry.IActionListener} will create a callback, and assign it as a
-persistent page property of an application-specific login page.  After the login completes, it 
-can use the callback to return the user to the functionality that was deferred.
-
-<p>Another example use would be to collect billing and shipping information as part of
-an e-commerce site's checkout wizard.
-
-@author Howard Lewis Ship <a href="mailto:hlship@apache.org">hlship@apache.org</a>
-
-</body>
-</html>
diff --git a/3.0.4/framework/src/org/apache/tapestry/components/Any.java b/3.0.4/framework/src/org/apache/tapestry/components/Any.java
deleted file mode 100644
index 00d1ede..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/components/Any.java
+++ /dev/null
@@ -1,63 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.components;
-
-import org.apache.tapestry.AbstractComponent;
-import org.apache.tapestry.ApplicationRuntimeException;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.Tapestry;
-
-/**
- *  A component that can substitute for any HTML element.  
- *
- *  [<a href="../../../../../ComponentReference/Any.html">Component Reference</a>]
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- * 
- **/
-
-public abstract class Any extends AbstractComponent
-{
-    protected void renderComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        String element = getElement();
-
-        if (element == null)
-            throw new ApplicationRuntimeException(
-                Tapestry.getMessage("Any.element-not-defined"),
-                this,
-                null,
-                null);
-
-        if (!cycle.isRewinding())
-        {
-            writer.begin(element);
-
-            renderInformalParameters(writer, cycle);
-        }
-
-        renderBody(writer, cycle);
-
-        if (!cycle.isRewinding())
-        {
-            writer.end(element);
-        }
-
-    }
-
-    public abstract String getElement();
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/components/Any.jwc b/3.0.4/framework/src/org/apache/tapestry/components/Any.jwc
deleted file mode 100644
index 7807fbd..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/components/Any.jwc
+++ /dev/null
@@ -1,40 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-<component-specification class="org.apache.tapestry.components.Any">
-
-  <description>
-  Dynamically emulates any element, including attributes (provided as
-  informal parameters).
-  </description>
-  
-  <parameter name="element" type="java.lang.String" direction="in" required="no" default-value="templateTag">
-  	<description>
-  	The element to emulate.
-  	</description>
-  </parameter>
-  
-  <parameter name="templateTag" type="java.lang.String" direction="auto" required="no" default-value="null">
-  	<description>
-  	The tag used to add this component in a template.
-  	</description>
-  </parameter>
-  
-</component-specification>
diff --git a/3.0.4/framework/src/org/apache/tapestry/components/Block.java b/3.0.4/framework/src/org/apache/tapestry/components/Block.java
deleted file mode 100644
index b926828..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/components/Block.java
+++ /dev/null
@@ -1,73 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.components;
-
-import org.apache.tapestry.AbstractComponent;
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-
-/** 
- *  Prevents its contents from being rendered until triggered by
- *  an {@link RenderBlock} component.
- *
- *  [<a href="../../../../../ComponentReference/Block.html">Component Reference</a>]
- *
- *  <p>Block and {@link RenderBlock} are used to build a certain class
- *  of complicated component that can't be assembled using the normal
- *  wrapping containment.  Such a super component would have two or more
- *  sections that need to be supplied by the containing page (or component).
- *
- *  <p>Using Blocks, the blocks can be provided as parameters to the super
- *  component.
- * 
- *  <p>The inserter property gives the components inside the block access to
- *  the component (typically an {@link RenderBlock}) that inserted the block,
- *  including access to its informal bindings which allows components contained
- *  by the Block to be passed parameters.  Note - it is the responsibility of the
- *  inserting component to set itself as the Block's inserter.
- *
- *  @version $Id$
- *  @author Howard Lewis Ship
- *  @since 0.2.9
- * 
- **/
-
-public class Block extends AbstractComponent
-{
-	private IComponent _inserter;
-
-    /**
-     *  Does nothing; the idea of a Block is to defer the rendering of
-     *  the body of the block until an {@link RenderBlock} forces it
-     *  out.
-     *
-     **/
-
-    protected void renderComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        // Nothing!
-    }
-    
-    public IComponent getInserter()
-    {
-    	return _inserter;
-    }
-    
-    public void setInserter(IComponent value)
-    {
-    	_inserter = value;
-    }
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/components/Block.jwc b/3.0.4/framework/src/org/apache/tapestry/components/Block.jwc
deleted file mode 100644
index 99323f9..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/components/Block.jwc
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<component-specification class="org.apache.tapestry.components.Block" allow-informal-parameters="no">
-	<description>
-	A block of dynamic content.  Blocks don't render until a RenderBlock component
-	triggers them.
-	</description>
-</component-specification>
diff --git a/3.0.4/framework/src/org/apache/tapestry/components/BlockRenderer.java b/3.0.4/framework/src/org/apache/tapestry/components/BlockRenderer.java
deleted file mode 100644
index 236c975..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/components/BlockRenderer.java
+++ /dev/null
@@ -1,79 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.components;
-
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRender;
-import org.apache.tapestry.IRequestCycle;
-
-/**
- * An implementation of IRender that renders a Block component.
- * 
- * <p>The BlockRenderer allows the contents of a {@link Block} to be rendered
- * via {@link IRender}. It can be used in cases when an {@link IRender} object is
- * required as an argument or a binding to render a part of a Component. 
- * To provide a complicated view, it could be defined in a {@link Block} and then
- * returned encapsulated in a BlockRenderer.
- * 
- * <p>It is important to note that a special care has to be taken if 
- * the BlockRenderer is used within an inner class of a component or a page. 
- * In such a case the instance of the component that created the inner class 
- * may not be the currently active instance in the RequestCycle when the 
- * BlockRenderer is required. Thus, calling getComponent("blockName") to get the
- * block component may return a Block component that is not initialized for this 
- * RequestCycle.
- * 
- * <p>To avoid similar problems, the ComponentAddress class could be used in
- * conjunction with BlockRenderer. 
- * Here is a quick example of how BlockRenderer could be used with ComponentAddress:
- * <p>
- * <code>
- * <br>// Create a component address for the current component
- * <br>final ComponentAddress address = new ComponentAddress(this);
- * <br>return new SomeClass() {
- * <br>&nbsp;&nbsp;IRender getRenderer(IRequestCycle cycle) {
- * <br>&nbsp;&nbsp;&nbsp;&nbsp;MyComponent component = (MyComponent) address.findComponent(cycle);
- * <br>&nbsp;&nbsp;&nbsp;&nbsp;// initialize variables in the component that will be used by the block here
- * <br>&nbsp;&nbsp;&nbsp;&nbsp;return new BlockRenderer(component.getComponent("block"));
- * <br>&nbsp;&nbsp;}
- * <br>}
- * </code>
- * 
- * @version $Id$
- * @author mindbridge
- * @since 2.2
- */
-public class BlockRenderer implements IRender
-{
-	private Block m_objBlock;
-
-	/**
-	 * Creates a new BlockRenderer that will render the content of the argument
-	 * @param objBlock the Block to be rendered
-	 */
-	public BlockRenderer(Block objBlock)
-	{
-		m_objBlock = objBlock;
-	}
-
-	/**
-	 * @see org.apache.tapestry.IRender#render(IMarkupWriter, IRequestCycle)
-	 */
-	public void render(IMarkupWriter writer, IRequestCycle cycle)
-	{
-		m_objBlock.renderBody(writer, cycle);
-	}
-
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/components/Conditional.java b/3.0.4/framework/src/org/apache/tapestry/components/Conditional.java
deleted file mode 100644
index 9f59742..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/components/Conditional.java
+++ /dev/null
@@ -1,72 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.components;
-
-import org.apache.tapestry.AbstractComponent;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.Tapestry;
-
-/**
- *  A conditional element on a page which will render its wrapped elements
- *  zero or one times.
- *
- *  [<a href="../../../../../ComponentReference/Conditional.html">Component Reference</a>]
- *
- *  @author Howard Lewis Ship, David Solis
- *  @version $Id$
- * 
- **/
-
-public abstract class Conditional extends AbstractComponent 
-{
-	/**
-	 *  Renders its wrapped components only if the condition is true (technically,
-	 *  if condition matches invert). 
-	 *  Additionally, if element is specified, can emulate that HTML element if condition is met
-	 *
-	 **/
-
-	protected void renderComponent(IMarkupWriter writer, IRequestCycle cycle) 
-	{
-		if (evaluateCondition()) 
-		{
-			String element = getElement();
-			
-			boolean render = !cycle.isRewinding() && Tapestry.isNonBlank(element);
-			
-			if (render)
-			{
-				writer.begin(element);
-				renderInformalParameters(writer, cycle);
-			}
-
-			renderBody(writer, cycle);
-			
-			if (render)
-				writer.end(element);
-		}
-	}
-	
-	protected boolean evaluateCondition()
-	{
-		return getCondition() != getInvert();
-	}
-
-	public abstract boolean getCondition();
-	public abstract boolean getInvert();
-
-	public abstract String getElement();
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/components/Conditional.jwc b/3.0.4/framework/src/org/apache/tapestry/components/Conditional.jwc
deleted file mode 100644
index cbff668..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/components/Conditional.jwc
+++ /dev/null
@@ -1,47 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-  
-<component-specification class="org.apache.tapestry.components.Conditional">
-  <description>
-  Conditionally emulates an element and its attributes (if element is specified) and/or includes a block of content if a condition is met.
-  </description>
-  
-  <parameter name="condition" type="boolean" direction="in" required="yes">
-    <description>
-    The condition to evaluate.
-    </description>
-  </parameter>
-  
-  <parameter name="invert" type="boolean" direction="in">
-    <description>
-    If true, inverts the condition, so that a false condition causes the 
-    content to be included.  If false (the default), then the condition
-    is evaluated normally.
-    </description>
-  </parameter>
-
-  <parameter name="element" type="java.lang.String" direction="in" required="no">
-  	<description>
-  	The element to emulate.
-  	</description>
-  </parameter>
-  
-</component-specification>
diff --git a/3.0.4/framework/src/org/apache/tapestry/components/Delegator.java b/3.0.4/framework/src/org/apache/tapestry/components/Delegator.java
deleted file mode 100644
index d817160..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/components/Delegator.java
+++ /dev/null
@@ -1,49 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.components;
-
-import org.apache.tapestry.AbstractComponent;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRender;
-import org.apache.tapestry.IRequestCycle;
-
-/**
- *  A component which delegates it's behavior to another object.
- *
- *  [<a href="../../../../../ComponentReference/Delegator.html">Component Reference</a>]
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- * 
- **/
-
-public abstract class Delegator extends AbstractComponent
-{
-    /**
-     *  Gets its delegate and invokes {@link IRender#render(IMarkupWriter, IRequestCycle)}
-     *  on it.
-     *
-     **/
-
-    protected void renderComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-    	IRender delegate = getDelegate();
-    	
-        if (delegate != null)
-        	delegate.render(writer, cycle);
-    }
-    
-    public abstract IRender getDelegate();
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/components/Delegator.jwc b/3.0.4/framework/src/org/apache/tapestry/components/Delegator.jwc
deleted file mode 100644
index 6000319..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/components/Delegator.jwc
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<component-specification class="org.apache.tapestry.components.Delegator"
-    allow-body="no" 
-	allow-informal-parameters="no">
-
-  <description>
-  Delegates rendering to an object that implements the IRender interface.
-  </description>
-
-  <parameter name="delegate" type="org.apache.tapestry.IRender" direction="in">
-    <description>
-    The object which will perform the render.
-    </description>
-  </parameter>
-  
-</component-specification>
diff --git a/3.0.4/framework/src/org/apache/tapestry/components/Foreach.java b/3.0.4/framework/src/org/apache/tapestry/components/Foreach.java
deleted file mode 100644
index e43ef9d..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/components/Foreach.java
+++ /dev/null
@@ -1,174 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.components;
-
-import java.util.Iterator;
-
-import org.apache.tapestry.AbstractComponent;
-import org.apache.tapestry.IBinding;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.Tapestry;
-
-/**
- *  Repeatedly renders its wrapped contents while iterating through
- *  a list of values.
- *
- *  [<a href="../../../../../ComponentReference/Foreach.html">Component Reference</a>]
- *
- *  <p>
- *  While the component is rendering, the property
- *  {@link #getValue() value} (accessed as
- *  <code>components.<i>foreach</i>.value</code>
- *  is set to each successive value from the source,
- *  and the property
- *  {@link #getIndex() index} is set to each successive index
- *  into the source (starting with zero).
- * 
- *  @author Howard Lewis Ship
- *  @version $Id$
- * 
- **/
-
-public abstract class Foreach extends AbstractComponent
-{
-    private Object _value;
-    private int _index;
-    private boolean _rendering;
-
-    public abstract IBinding getIndexBinding();
-
-
-    /**
-     *  Gets the source binding and returns an {@link Iterator}
-     *  representing
-     *  the values identified by the source.  Returns an empty {@link Iterator}
-     *  if the binding, or the binding value, is null.
-     *
-     *  <p>Invokes {@link Tapestry#coerceToIterator(Object)} to perform
-     *  the actual conversion.
-     *
-     **/
-
-    protected Iterator getSourceData()
-    {
-    	Object source = getSource();
-    	
- 		if (source == null)
- 			return null;
- 		
-        return Tapestry.coerceToIterator(source);
-    }
-
-    public abstract IBinding getValueBinding();
-
-    /**
-     *  Gets the source binding and iterates through
-     *  its values.  For each, it updates the value binding and render's its wrapped elements.
-     *
-     **/
-
-    protected void renderComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        Iterator dataSource = getSourceData();
-
-        // The dataSource was either not convertable, or was empty.
-
-        if (dataSource == null)
-            return;
-
-
-        try
-        {
-            _rendering = true;
-            _value = null;
-            _index = 0;
-            
-            IBinding indexBinding = getIndexBinding();
-            IBinding valueBinding = getValueBinding();
-            String element = getElement();
-
-            boolean hasNext = dataSource.hasNext();
-
-            while (hasNext)
-            {
-                _value = dataSource.next();
-                hasNext = dataSource.hasNext();
-
-                if (indexBinding != null)
-                    indexBinding.setInt(_index);
-
-                if (valueBinding != null)
-                    valueBinding.setObject(_value);
-
-                if (element != null)
-                {
-                    writer.begin(element);
-                    renderInformalParameters(writer, cycle);
-                }
-
-                renderBody(writer, cycle);
-
-                if (element != null)
-                    writer.end();
-
-                _index++;
-            }
-        }
-        finally
-        {
-            _value = null;
-            _rendering = false;
-        }
-    }
-
-    /**
-     *  Returns the most recent value extracted from the source parameter.
-     *
-     *  @throws org.apache.tapestry.ApplicationRuntimeException if the Foreach is not currently rendering.
-     *
-     **/
-
-    public Object getValue()
-    {
-        if (!_rendering)
-            throw Tapestry.createRenderOnlyPropertyException(this, "value");
-  
-        return _value;
-    }
-
-    public abstract String getElement();
-
-    public abstract Object getSource();
-
-    /**
-     *  The index number, within the {@link #getSource() source}, of the
-     *  the current value.
-     * 
-     *  @throws org.apache.tapestry.ApplicationRuntimeException if the Foreach is not currently rendering.
-     *
-     *  @since 2.2
-     * 
-     **/
-    
-    public int getIndex()
-    {
-        if (!_rendering)
-            throw Tapestry.createRenderOnlyPropertyException(this, "index");
-        
-        return _index;
-    }
-
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/components/Foreach.jwc b/3.0.4/framework/src/org/apache/tapestry/components/Foreach.jwc
deleted file mode 100644
index 1e5ca90..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/components/Foreach.jwc
+++ /dev/null
@@ -1,56 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE component-specification PUBLIC
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<component-specification 
-	class="org.apache.tapestry.components.Foreach" 
-	allow-informal-parameters="yes">
-	
-  <description>
-  Loops over a collection of source values.  May also emulate an element (like an Any
-  component).
-  </description>
-	
-  <parameter name="source" type="java.lang.Object" direction="in" required="yes">
-    <description>
-    The source of values, a Java collection or array.
-    </description>
-  </parameter>
-  
-  <parameter name="value" direction="custom">
-    <description>
-    If provided, then on each iteration, the value property is updated.
-    </description>
-  </parameter>
-  
-  <parameter name="index" type="int" direction="custom">
-    <description>
-    If provided, then the index of the loop is set on each iteration.
-    </description>
-  </parameter>
-  
-  <parameter name="element" type="java.lang.String" direction="in">
-    <description>
-    If provided, then the Foreach creates an element wrapping its content.
-    Informal parameters become attributes of the element.
-    </description>
-  </parameter>
-  
-</component-specification>
diff --git a/3.0.4/framework/src/org/apache/tapestry/components/ILinkComponent.java b/3.0.4/framework/src/org/apache/tapestry/components/ILinkComponent.java
deleted file mode 100644
index fae2537..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/components/ILinkComponent.java
+++ /dev/null
@@ -1,89 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.components;
-
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.engine.ILink;
-
-/**
- *  A component that renders an HTML &lt;a&gt; element.  It exposes some
- *  properties to the components it wraps.  This is basically to facilitate
- *  the {@link org.apache.tapestry.html.Rollover} component.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- * 
- **/
-
-public interface ILinkComponent extends IComponent
-{
-
-    /**
-     *  Returns whether this service link component is enabled or disabled.
-     *
-     *  @since 0.2.9
-     *
-     **/
-
-    public boolean isDisabled();
-
-    /**
-     *  Returns the anchor defined for this link, or null for no anchor.
-     * 
-     *  @since 3.0
-     * 
-     **/
-
-    public String getAnchor();
-
-    /**
-     *  Adds a new event handler.  When the event occurs, the JavaScript function
-     *  specified is executed.  Multiple functions can be specified, in which case
-     *  all of them are executed.
-     *
-     *  <p>This was created for use by
-     *  {@link org.apache.tapestry.html.Rollover} to set mouse over and mouse out handlers on
-     *  the {@link ILinkComponent} that wraps it, but can be used for
-     *  many other things as well.
-     *
-     *  @since 0.2.9
-     **/
-
-    public void addEventHandler(LinkEventType type, String functionName);
-
-    /**
-     *  Invoked by the {@link org.apache.tapestry.link.ILinkRenderer} (if
-     *  the link is not disabled) to provide a
-     *  {@link org.apache.tapestry.engine.EngineServiceLink} that the renderer can convert
-     *  into a URL.
-     * 
-     **/
-
-    public ILink getLink(IRequestCycle cycle);
-
-    /**
-     *  Invoked (by the {@link org.apache.tapestry.link.ILinkRenderer})
-     *  to make the link render any additional attributes.  These
-     *  are informal parameters, plus any attributes related to events.
-     *  This is only invoked for non-disabled links.
-     * 
-     *  @since 3.0
-     * 
-     **/
-
-    public void renderAdditionalAttributes(IMarkupWriter writer, IRequestCycle cycle);
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/components/Insert.java b/3.0.4/framework/src/org/apache/tapestry/components/Insert.java
deleted file mode 100644
index 3820819..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/components/Insert.java
+++ /dev/null
@@ -1,106 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.components;
-
-import java.text.Format;
-
-import org.apache.tapestry.AbstractComponent;
-import org.apache.tapestry.ApplicationRuntimeException;
-import org.apache.tapestry.IBinding;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.Tapestry;
-
-/**
- *  Used to insert some text (from a parameter) into the HTML.
- *
- *  [<a href="../../../../../ComponentReference/Insert.html">Component Reference</a>]
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- * 
- **/
-
-public abstract class Insert extends AbstractComponent
-{
-    public abstract IBinding getFormatBinding();
-
-    /**
-     *  Prints its value parameter, possibly formatted by its format parameter.
-     *
-     **/
-
-    protected void renderComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        if (cycle.isRewinding())
-            return;
-
-        Object value = getValue();
-
-        if (value == null)
-            return;
-
-        String insert = null;
-
-        Format format = getFormat();
-
-        if (format == null)
-        {
-            insert = value.toString();
-        }
-        else
-        {
-            try
-            {
-                insert = format.format(value);
-            }
-            catch (Exception ex)
-            {
-                throw new ApplicationRuntimeException(
-                    Tapestry.format("Insert.unable-to-format", value),
-                    this,
-                    getFormatBinding().getLocation(),
-                    ex);
-            }
-        }
-
-        String styleClass = getStyleClass();
-
-        if (styleClass != null)
-        {
-            writer.begin("span");
-            writer.attribute("class", styleClass);
-
-            renderInformalParameters(writer, cycle);
-        }
-
-        if (getRaw())
-            writer.printRaw(insert);
-        else
-            writer.print(insert);
-
-        if (styleClass != null)
-            writer.end(); // <span>
-    }
-
-    public abstract Object getValue();
-
-    public abstract Format getFormat();
-
-    public abstract String getStyleClass();
-
-    public abstract boolean getRaw();
-
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/components/Insert.jwc b/3.0.4/framework/src/org/apache/tapestry/components/Insert.jwc
deleted file mode 100644
index 1cb5409..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/components/Insert.jwc
+++ /dev/null
@@ -1,57 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE component-specification PUBLIC
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<component-specification class="org.apache.tapestry.components.Insert" 
-	allow-body="no">
-  
-  <description>
-  Emits a value into the response page.
-  </description>
-  
-  
-  <parameter name="value" type="java.lang.Object" direction="in">
-  	<description>
-  	The value to be emitted.  Non-strings are converted to strings.
-  	</description>
-  </parameter>
-  
-  <parameter name="format" type="java.text.Format" direction="in">
-  	<description>
-  	A Format object used to convert the value to a string.
-  	</description>
-  </parameter>
-  
-  <parameter name="raw" type="boolean" direction="in">
-  	<description>
-  	If false (the default), then HTML characters in the value are escaped.  If
-  	true, then value is emitted exactly as is.
-  	</description>
-  </parameter>
-  
-  <parameter name="class" 
-  	type="java.lang.String"
-  	property-name="styleClass"
-  	direction="in">
-  	<description>
-  	If specified, then any output is wrapped in an HTML span tag with the given CSS class.
-  	</description>
-  </parameter>
-</component-specification>
diff --git a/3.0.4/framework/src/org/apache/tapestry/components/LinkEventType.java b/3.0.4/framework/src/org/apache/tapestry/components/LinkEventType.java
deleted file mode 100644
index 7682dd6..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/components/LinkEventType.java
+++ /dev/null
@@ -1,110 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.components;
-
-import org.apache.commons.lang.enum.Enum;
-
-/**
- *  Different types of JavaScript events that an {@link ILinkComponent}
- *  can provide handlers for.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 0.2.9
- *
- **/
-
-public class LinkEventType extends Enum
-{
-    private String _attributeName;
-
-    /**
-     *  Type for <code>onMouseOver</code>.  This may also be called "focus".
-     *
-     **/
-
-    public static final LinkEventType MOUSE_OVER = new LinkEventType("MOUSE_OVER", "onMouseOver");
-
-    /**
-     * Type for <code>onMouseOut</code>.  This may also be called "blur".
-     *
-     **/
-
-    public static final LinkEventType MOUSE_OUT = new LinkEventType("MOUSE_OUT", "onMouseOut");
-
-    /**
-     * Type for <code>onClick</code>.
-     *
-     * @since 1.0.1
-     *
-     **/
-
-    public static final LinkEventType CLICK = new LinkEventType("CLICK", "onClick");
-
-    /**
-     * Type for <code>onDblClick</code>.
-     *
-     * @since 1.0.1
-     *
-     **/
-
-    public static final LinkEventType DOUBLE_CLICK =
-        new LinkEventType("DOUBLE_CLICK", "onDblClick");
-
-    /**
-     * Type for <code>onMouseDown</code>.
-     *
-     * @since 1.0.1.
-     *
-     **/
-
-    public static final LinkEventType MOUSE_DOWN = new LinkEventType("MOUSE_DOWN", "onMouseDown");
-
-    /**
-     * Type for <code>onMouseUp</code>.
-     *
-     * @since 1.0.1
-     *
-     **/
-
-    public static final LinkEventType MOUSE_UP = new LinkEventType("MOUSE_UP", "onMouseUp");
-
-    /**
-     *  Constructs a new type of event.  The name should match the
-     *  static final variable (i.e., MOUSE_OVER) and the attributeName
-     *  is the name of the HTML attribute to be managed (i.e., "onMouseOver").
-     *
-     *  <p>This method is protected so that subclasses can be created
-     *  to provide additional managed event types.
-     **/
-
-    protected LinkEventType(String name, String attributeName)
-    {
-        super(name);
-
-        _attributeName = attributeName;
-    }
-
-    /**
-     *  Returns the name of the HTML attribute corresponding to this
-     *  type.
-     *
-     **/
-
-    public String getAttributeName()
-    {
-        return _attributeName;
-    }
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/components/RenderBlock.java b/3.0.4/framework/src/org/apache/tapestry/components/RenderBlock.java
deleted file mode 100644
index 9d08eac..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/components/RenderBlock.java
+++ /dev/null
@@ -1,80 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.components;
-
-import org.apache.tapestry.AbstractComponent;
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-
-/**
- *  Renders the text and components wrapped by a {@link Block} component.
- *
- *  [<a href="../../../../../ComponentReference/RenderBlock.html">Component Reference</a>]
- *
- *  <p>It is possible for an RenderBlock to obtain a Block
- *  from a page <em>other than</em> the render page.  This works, even when
- *  the Block contains links, forms and form components.  The action and
- *  direct services will create URLs that properly address this situation.
- *
- *  <p>However, because the rendering page can't know
- *  ahead of time about these foriegn Blocks,
- *  {@link org.apache.tapestry.event.PageRenderListener} methods
- *  (for components and objects of the foriegn page)
- *  via RenderBlock will <em>not</em> be executed.  This specifically
- *  affects the methods of the {@link org.apache.tapestry.event.PageRenderListener} 
- *  interface.
- * 
- *  <p>Before rendering its {@link Block}, RenderBlock will set itself as the 
- *  Block's inserter, and will reset the inserter after the {@link Block} is 
- *  rendered.  This gives the components contained in the {@link Block} access
- *  to its inserted environment via the RenderBlock.  In particular this allows
- *  the contained components to access the informal parameters of the RenderBlock
- *  which effectively allows parameters to be passed to the components contained
- *  in a Block.
- *
- * @author Howard Lewis Ship
- * @version $Id$
- * 
- **/
-
-public abstract class RenderBlock extends AbstractComponent
-{
-    /**
-     *  If block is not null,
-     *  then the block's inserter is set (to this),
-     * {@link org.apache.tapestry.IComponent#renderBody(IMarkupWriter, IRequestCycle)}
-     *  is invoked on it, and the Block's inserter is set back to its previous state.
-     *
-     **/
-
-    protected void renderComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-    	Block block = getBlock();
-    	
-        if (block != null)
-        {
-            // make a copy of the inserter so we don't overwrite completely
-            IComponent previousInserter = block.getInserter();
-            block.setInserter(this);
-            block.renderBody(writer, cycle);
-            // reset the inserter as it was before we changed it
-            block.setInserter(previousInserter);
-        }
-    }
-
-    public abstract Block getBlock();
-
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/components/RenderBlock.jwc b/3.0.4/framework/src/org/apache/tapestry/components/RenderBlock.jwc
deleted file mode 100644
index 7c384d7..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/components/RenderBlock.jwc
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<component-specification class="org.apache.tapestry.components.RenderBlock" 
-	allow-body="no" 
-	allow-informal-parameters="yes">
-	
-  <parameter name="block" 
-  	type="org.apache.tapestry.components.Block"
-  	direction="in"/>
-  	
-</component-specification>
diff --git a/3.0.4/framework/src/org/apache/tapestry/components/RenderBody.java b/3.0.4/framework/src/org/apache/tapestry/components/RenderBody.java
deleted file mode 100644
index 00af581..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/components/RenderBody.java
+++ /dev/null
@@ -1,47 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.components;
-
-import org.apache.tapestry.AbstractComponent;
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-
-/**
- *  Renders the text and components wrapped by a component.
- *
- *  [<a href="../../../../../ComponentReference/RenderBody.html">Component Reference</a>]
- * 
- *  @author Howard Lewis Ship
- *  @version $Id$
- * 
- **/
-
-public class RenderBody extends AbstractComponent
-{
-    /**
-     *  Finds this <code>RenderBody</code>'s container, and invokes
-     *  {@link IComponent#renderBody(IMarkupWriter, IRequestCycle)}
-     *  on it.
-     *
-     **/
-
-    protected void renderComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        IComponent container = getContainer();
-
-        container.renderBody(writer, cycle);
-    }
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/components/RenderBody.jwc b/3.0.4/framework/src/org/apache/tapestry/components/RenderBody.jwc
deleted file mode 100644
index e21fd48..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/components/RenderBody.jwc
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<component-specification 
-	class="org.apache.tapestry.components.RenderBody" 
-	allow-body="no" 
-	allow-informal-parameters="no"/>
diff --git a/3.0.4/framework/src/org/apache/tapestry/components/package.html b/3.0.4/framework/src/org/apache/tapestry/components/package.html
deleted file mode 100644
index 3ccd00e..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/components/package.html
+++ /dev/null
@@ -1,15 +0,0 @@
-<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN">
-<!-- $Id$ -->
-<html>
-<head>
-<title>Tapestry: Web Application Framework</title>
-</head>
-<body>
-
-<p>Basic, fundamental components used to construct more complex components, or pages.  
-These components are independant of any particular markup language.
-
-@author Howard Lewis Ship <a href="mailto:hlship@apache.org">hlship@apache.org</a>
-
-</body>
-</html>
diff --git a/3.0.4/framework/src/org/apache/tapestry/engine/AbstractEngine.java b/3.0.4/framework/src/org/apache/tapestry/engine/AbstractEngine.java
deleted file mode 100644
index 471b657..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/engine/AbstractEngine.java
+++ /dev/null
@@ -1,2369 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.engine;
-
-import java.io.Externalizable;
-import java.io.IOException;
-import java.io.ObjectInput;
-import java.io.ObjectOutput;
-import java.io.UnsupportedEncodingException;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Locale;
-import java.util.Map;
-import java.util.ResourceBundle;
-
-import javax.servlet.RequestDispatcher;
-import javax.servlet.ServletContext;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServlet;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import javax.servlet.http.HttpSession;
-import javax.servlet.http.HttpSessionBindingEvent;
-import javax.servlet.http.HttpSessionBindingListener;
-
-import org.apache.bsf.BSFManager;
-import org.apache.commons.codec.binary.Hex;
-import org.apache.commons.lang.builder.ToStringBuilder;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.tapestry.ApplicationRuntimeException;
-import org.apache.tapestry.ApplicationServlet;
-import org.apache.tapestry.IEngine;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.INamespace;
-import org.apache.tapestry.IPage;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.IResourceResolver;
-import org.apache.tapestry.PageRedirectException;
-import org.apache.tapestry.RedirectException;
-import org.apache.tapestry.StaleLinkException;
-import org.apache.tapestry.StaleSessionException;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.asset.ResourceChecksumSource;
-import org.apache.tapestry.asset.ResourceChecksumSourceImpl;
-import org.apache.tapestry.enhance.DefaultComponentClassEnhancer;
-import org.apache.tapestry.listener.ListenerMap;
-import org.apache.tapestry.pageload.PageSource;
-import org.apache.tapestry.request.RequestContext;
-import org.apache.tapestry.request.ResponseOutputStream;
-import org.apache.tapestry.spec.IApplicationSpecification;
-import org.apache.tapestry.util.DelegatingPropertySource;
-import org.apache.tapestry.util.PropertyHolderPropertySource;
-import org.apache.tapestry.util.ResourceBundlePropertySource;
-import org.apache.tapestry.util.ServletContextPropertySource;
-import org.apache.tapestry.util.ServletPropertySource;
-import org.apache.tapestry.util.SystemPropertiesPropertySource;
-import org.apache.tapestry.util.exception.ExceptionAnalyzer;
-import org.apache.tapestry.util.io.DataSqueezer;
-import org.apache.tapestry.util.pool.Pool;
-
-/**
- *  Basis for building real Tapestry applications.  Immediate subclasses
- *  provide different strategies for managing page state and other resources
- *  between request cycles.
- *
- *  Uses a shared instance of
- *  {@link ITemplateSource}, {@link ISpecificationSource},
- *  {@link IScriptSource} and {@link IComponentMessagesSource}
- *  stored as attributes of the  {@link ServletContext}
- *  (they will be shared by all sessions).
- *
- *  <p>An application is designed to be very lightweight.
- *  Particularily, it should <b>never</b> hold references to any
- *  {@link IPage} or {@link org.apache.tapestry.IComponent} objects.  The entire system is
- *  based upon being able to quickly rebuild the state of any page(s).
- *
- * <p>Where possible, instance variables should be transient.  They
- * can be restored inside {@link #setupForRequest(RequestContext)}.
- *
- *  <p>In practice, a subclass (usually {@link BaseEngine})
- *  is used without subclassing.  Instead, a
- *  visit object is specified.  To facilitate this, the application specification
- *  may include a property, <code>org.apache.tapestry.visit-class</code>
- *  which is the class name  to instantiate when a visit object is first needed.  See
- *  {@link #createVisit(IRequestCycle)} for more details.
- *
- * <p>Some of the classes' behavior is controlled by JVM system properties
- * (typically only used during development):
- *
- * <table border=1>
- * 	<tr> <th>Property</th> <th>Description</th> </tr>
- *  <tr> <td>org.apache.tapestry.enable-reset-service</td>
- *		<td>If true, enabled an additional service, reset, that
- *		allow page, specification and template caches to be cleared on demand.
- *  	See {@link #isResetServiceEnabled()}. </td>
- * </tr>
- * <tr>
- *		<td>org.apache.tapestry.disable-caching</td>
- *	<td>If true, then the page, specification, template and script caches
- *  will be cleared after each request. This slows things down,
- *  but ensures that the latest versions of such files are used.
- *  Care should be taken that the source directories for the files
- *  preceeds any versions of the files available in JARs or WARs. </td>
- * </tr>
- * </table>
- *
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *
- **/
-
-public abstract class AbstractEngine
-    implements IEngine, IEngineServiceView, Externalizable, HttpSessionBindingListener
-{
-    private static final Log LOG = LogFactory.getLog(AbstractEngine.class);
-
-    /**
-     *  @since 2.0.4
-     *
-     **/
-
-    private static final long serialVersionUID = 6884834397673817117L;
-
-    private transient String _contextPath;
-    private transient String _servletPath;
-    private transient String _clientAddress;
-    private transient String _sessionId;
-    private transient boolean _stateful;
-    private transient ListenerMap _listeners;
-
-    /** @since 2.2 **/
-
-    private transient DataSqueezer _dataSqueezer;
-
-    /**
-     *  An object used to contain application-specific server side state.
-     *
-     **/
-
-    private Object _visit;
-
-    /**
-     *  The globally shared application object.  Typically, this is created
-     *  when first needed, shared between sessions and engines, and
-     *  stored in the {@link ServletContext}.
-     *
-     *  @since 2.3
-     *
-     **/
-
-    private transient Object _global;
-
-    /**
-     *  The base name for the servlet context key used to store
-     *  the application-defined Global object, if any.
-     *
-     *  @since 2.3
-     *
-     **/
-
-    public static final String GLOBAL_NAME = "org.apache.tapestry.global";
-
-    /**
-     *  The name of the application property that will be used to
-     *  determine the encoding to use when generating the output
-     *
-     *  @since 3.0
-     **/
-
-    public static final String OUTPUT_ENCODING_PROPERTY_NAME =
-        "org.apache.tapestry.output-encoding";
-
-    /**
-     *  The default encoding that will be used when generating the output.
-     *  It is used if no output encoding property has been specified.
-     *
-     *  @since 3.0
-     */
-
-    public static final String DEFAULT_OUTPUT_ENCODING = "UTF-8";
-
-    /**
-     *  The curent locale for the engine, which may be changed at any time.
-     *
-     **/
-
-    private Locale _locale;
-
-    /**
-     *  Set by {@link #setLocale(Locale)} when the locale is changed;
-     *  this allows the locale cookie to be updated.
-     *
-     **/
-
-    private boolean _localeChanged;
-
-    /**
-     *  The specification for the application, which
-     *  lives in the {@link ServletContext}.  If the
-     *  session (and application) moves to a different context (i.e.,
-     *  a different JVM), then
-     *  we want to reconnect to the specification in the new context.
-     *  A check is made on every request
-     *  cycle as needed.
-     *
-     **/
-
-    protected transient IApplicationSpecification _specification;
-
-    /**
-     *  The source for template data. The template source is stored
-     *  in the {@link ServletContext} as a named attribute.
-     *  After de-serialization, the application can re-connect to
-     *  the template source (or create a new one).
-     *
-     **/
-
-    protected transient ITemplateSource _templateSource;
-
-    /**
-     *  The source for component specifications, stored in the
-     *  {@link ServletContext} (like {@link #_templateSource}).
-     *
-     **/
-
-    protected transient ISpecificationSource _specificationSource;
-
-    /**
-     *  The source for parsed scripts, again, stored in the
-     *  {@link ServletContext}.
-     *
-     *  @since 1.0.2
-     *
-     **/
-
-    private transient IScriptSource _scriptSource;
-
-    /**
-     *  The name of the context attribute for the {@link IScriptSource} instance.
-     *  The application's name is appended.
-     *
-     *  @since 1.0.2
-     *
-     **/
-
-    protected static final String SCRIPT_SOURCE_NAME = "org.apache.tapestry.ScriptSource";
-
-    /**
-     *  The name of the context attribute for the {@link IComponentMessagesSource}
-     *  instance.  The application's name is appended.
-     *
-     *  @since 2.0.4
-     *
-     **/
-
-    protected static final String STRINGS_SOURCE_NAME = "org.apache.tapestry.StringsSource";
-
-    private transient IComponentMessagesSource _stringsSource;
-
-    /**
-     *  The name of the application specification property used to specify the
-     *  class of the visit object.
-     *
-     **/
-
-    public static final String VISIT_CLASS_PROPERTY_NAME = "org.apache.tapestry.visit-class";
-
-    /**
-     *  Servlet context attribute name for the default {@link ITemplateSource}
-     *  instance.  The application's name is appended.
-     *
-     **/
-
-    protected static final String TEMPLATE_SOURCE_NAME = "org.apache.tapestry.TemplateSource";
-
-    /**
-     *  Servlet context attribute name for the default {@link ISpecificationSource}
-     *  instance.  The application's name is appended.
-     *
-     **/
-
-    protected static final String SPECIFICATION_SOURCE_NAME =
-        "org.apache.tapestry.SpecificationSource";
-
-    /**
-     *  Servlet context attribute name for the {@link IPageSource}
-     *  instance.  The application's name is appended.
-     *
-     **/
-
-    protected static final String PAGE_SOURCE_NAME = "org.apache.tapestry.PageSource";
-
-    /**
-     *  Servlet context attribute name for a shared instance
-     *  of {@link DataSqueezer}.  The instance is actually shared
-     *  between Tapestry applications within the same context
-     *  (which will have the same ClassLoader).
-     *
-     *  @since 2.2
-     *
-     **/
-
-    protected static final String DATA_SQUEEZER_NAME = "org.apache.tapestry.DataSqueezer";
-
-    /**
-     * Servlet context attribute name for a shared instance
-     * of {@link ResourceChecksumSource}.
-     * @since 3.0.3
-     */
-    protected static final String RESOURCE_CHECKSUM_SOURCE_NAME = 
-        "org.apache.tapestry.ResourceChecksumSource";
-    
-    /**
-     *  The source for pages, which acts as a pool, but is capable of
-     *  creating pages as needed.  Stored in the
-     *  {@link ServletContext}, like {@link #_templateSource}.
-     *
-     **/
-
-    private transient IPageSource _pageSource;
-
-    /**
-     *  If true (set from JVM system parameter
-     *  <code>org.apache.tapestry.enable-reset-service</code>)
-     *  then the reset service will be enabled, allowing
-     *  the cache of pages, specifications and template
-     *  to be cleared on demand.
-     *
-     **/
-
-    private static final boolean _resetServiceEnabled =
-        Boolean.getBoolean("org.apache.tapestry.enable-reset-service");
-
-    /**
-     * If true (set from the JVM system parameter
-     * <code>org.apache.tapestry.disable-caching</code>)
-     * then the cache of pages, specifications and template
-     * will be cleared after each request.
-     *
-     **/
-
-    private static final boolean _disableCaching =
-        Boolean.getBoolean("org.apache.tapestry.disable-caching");
-
-    private transient IResourceResolver _resolver;
-
-    /**
-     *  Constant used to store a {@link org.apache.tapestry.util.IPropertyHolder}
-     *  in the servlet context.
-     *
-     *  @since 2.3
-     *
-     **/
-
-    protected static final String PROPERTY_SOURCE_NAME = "org.apache.tapestry.PropertySource";
-
-    /**
-     *  A shared instance of {@link IPropertySource}
-     *
-     *  @since 3.0
-     *  @see #createPropertySource(RequestContext)
-     *
-     **/
-
-    private transient IPropertySource _propertySource;
-
-    /**
-     *  Map from service name to service instance.
-     *
-     *  @since 1.0.9
-     *
-     **/
-
-    private transient Map _serviceMap;
-
-    protected static final String SERVICE_MAP_NAME = "org.apache.tapestry.ServiceMap";
-
-    /**
-     *  A shared instance of {@link Pool}.
-     *
-     *  @since 3.0
-     *  @see #createPool(RequestContext)
-     *
-     **/
-
-    private transient Pool _pool;
-
-    protected static final String POOL_NAME = "org.apache.tapestry.Pool";
-
-    /**
-     *  Name of a shared instance of {@link org.apache.tapestry.engine.IComponentClassEnhancer}
-     *  stored in the {@link ServletContext}.
-     *
-     *  @since 3.0
-     *
-     **/
-
-    protected static final String ENHANCER_NAME = "org.apache.tapestry.ComponentClassEnhancer";
-
-    /**
-     *  A shared instance of {@link org.apache.tapestry.engine.IComponentClassEnhancer}.
-     *
-     *  @since 3.0
-     *  @see #createComponentClassEnhancer(RequestContext)
-     *
-     **/
-
-    private transient IComponentClassEnhancer _enhancer;
-
-    /**
-     *  Set to true when there is a (potential)
-     *  change to the internal state of the engine, set
-     *  to false when the engine is stored into the
-     *  {@link HttpSession}.
-     *
-     *  @since 3.0
-     *
-     **/
-
-    private transient boolean _dirty;
-
-    /**
-     * The instance of {@link IMonitorFactory} used to create a monitor.
-     *
-     * @since 3.0
-     */
-
-    private transient IMonitorFactory _monitorFactory;
-
-    /**
-     * Used to obtain resource checksums for the asset service.
-     * @since 3.0.3
-     */
-    private transient ResourceChecksumSource _resourceChecksumSource;
-    
-    /**
-     *  Sets the Exception page's exception property, then renders the Exception page.
-     *
-     *  <p>If the render throws an exception, then copious output is sent to
-     *  <code>System.err</code> and a {@link ServletException} is thrown.
-     *
-     **/
-
-    protected void activateExceptionPage(
-        IRequestCycle cycle,
-        ResponseOutputStream output,
-        Throwable cause)
-        throws ServletException
-    {
-        try
-        {
-            IPage exceptionPage = cycle.getPage(getExceptionPageName());
-
-            exceptionPage.setProperty("exception", cause);
-
-            cycle.activate(exceptionPage);
-
-            renderResponse(cycle, output);
-
-        }
-        catch (Throwable ex)
-        {
-            // Worst case scenario.  The exception page itself is broken, leaving
-            // us with no option but to write the cause to the output.
-
-            reportException(
-                Tapestry.getMessage("AbstractEngine.unable-to-process-client-request"),
-                cause);
-
-            // Also, write the exception thrown when redendering the exception
-            // page, so that can get fixed as well.
-
-            reportException(
-                Tapestry.getMessage("AbstractEngine.unable-to-present-exception-page"),
-                ex);
-
-            // And throw the exception.
-
-            throw new ServletException(ex.getMessage(), ex);
-        }
-    }
-
-    /**
-     *  Writes a detailed report of the exception to <code>System.err</code>.
-     *
-     **/
-
-    public void reportException(String reportTitle, Throwable ex)
-    {
-        LOG.warn(reportTitle, ex);
-
-        System.err.println("\n\n**********************************************************\n\n");
-
-        System.err.println(reportTitle);
-
-        System.err.println(
-            "\n\n      Session id: "
-                + _sessionId
-                + "\n  Client address: "
-                + _clientAddress
-                + "\n\nExceptions:\n");
-
-        new ExceptionAnalyzer().reportException(ex, System.err);
-
-        System.err.println("\n**********************************************************\n");
-
-    }
-
-    /**
-     *  Invoked at the end of the request cycle to release any resources specific
-     *  to the request cycle.
-     *
-     **/
-
-    protected abstract void cleanupAfterRequest(IRequestCycle cycle);
-
-    /**
-     *  Extends the description of the class generated by {@link #toString()}.
-     *  If a subclass adds additional instance variables that should be described
-     *  in the instance description, it may overide this method. This implementation
-     *  does nothing.
-     *
-     *  @see #toString()
-     *
-     **/
-
-    protected void extendDescription(ToStringBuilder builder)
-    {
-
-    }
-
-    /**
-     *  Returns the locale for the engine.  This is initially set
-     *  by the {@link ApplicationServlet} but may be updated
-     *  by the application.
-     *
-     **/
-
-    public Locale getLocale()
-    {
-        return _locale;
-    }
-
-    /**
-     * Overriden in subclasses that support monitoring.  Should create and return
-     * an instance of {@link IMonitor} that is appropriate for the request cycle described
-     * by the {@link RequestContext}.
-     *
-     * <p>The monitor is used to create a {@link RequestCycle}.
-     *
-     * <p>This implementation uses a {@link IMonitorFactory}
-     * to create the monitor instance.  The factory
-     * is provided as an application extension.  If the application
-     * extension does not exist, {@link DefaultMonitorFactory} is used.
-     *
-     * <p>As of release 3.0, this method should <em>not</em> return null.
-     *
-     *
-     */
-
-    public IMonitor getMonitor(RequestContext context)
-    {
-        if (_monitorFactory == null)
-        {
-            if (_specification.checkExtension(Tapestry.MONITOR_FACTORY_EXTENSION_NAME))
-                _monitorFactory =
-                    (IMonitorFactory) _specification.getExtension(
-                        Tapestry.MONITOR_FACTORY_EXTENSION_NAME,
-                        IMonitorFactory.class);
-            else
-                _monitorFactory = DefaultMonitorFactory.SHARED;
-        }
-
-        return _monitorFactory.createMonitor(context);
-    }
-
-    public IPageSource getPageSource()
-    {
-        return _pageSource;
-    }
-
-    /**
-     *  Returns a service with the given name.  Services are created by the
-     *  first call to {@link #setupForRequest(RequestContext)}.
-     **/
-
-    public IEngineService getService(String name)
-    {
-        IEngineService result = (IEngineService) _serviceMap.get(name);
-
-        if (result == null)
-            throw new ApplicationRuntimeException(
-                Tapestry.format("AbstractEngine.unknown-service", name));
-
-        return result;
-    }
-
-    public String getServletPath()
-    {
-        return _servletPath;
-    }
-
-    /**
-     * Returns the context path, the prefix to apply to any URLs so that they
-     * are recognized as belonging to the Servlet 2.2 context.
-     *
-     *  @see org.apache.tapestry.asset.ContextAsset
-     *
-     **/
-
-    public String getContextPath()
-    {
-        return _contextPath;
-    }
-
-    /**
-     *  Returns the specification, if available, or null otherwise.
-     *
-     *  <p>To facilitate deployment across multiple servlet containers, the
-     *  application is serializable.  However, the reference to the specification
-     *  is transient.   When an application instance is deserialized, it reconnects
-     *  with the application specification by locating it in the {@link ServletContext}
-     *  or parsing it fresh.
-     *
-     **/
-
-    public IApplicationSpecification getSpecification()
-    {
-        return _specification;
-    }
-
-    public ISpecificationSource getSpecificationSource()
-    {
-        return _specificationSource;
-    }
-
-    public ITemplateSource getTemplateSource()
-    {
-        return _templateSource;
-    }
-
-    /**
-     *  Reads the state serialized by {@link #writeExternal(ObjectOutput)}.
-     *
-     *  <p>This always set the stateful flag.  By default, a deserialized
-     *  session is stateful (else, it would not have been serialized).
-     **/
-
-    public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException
-    {
-        _stateful = true;
-
-        String localeName = in.readUTF();
-        _locale = Tapestry.getLocale(localeName);
-
-        _visit = in.readObject();
-    }
-
-    /**
-     *  Writes the following properties:
-     *
-     *  <ul>
-     *  <li>locale name ({@link Locale#toString()})
-     *  <li>visit
-     *  </ul>
-     *
-     **/
-
-    public void writeExternal(ObjectOutput out) throws IOException
-    {
-        out.writeUTF(_locale.toString());
-        out.writeObject(_visit);
-    }
-
-    /**
-     *  Invoked, typically, when an exception occurs while servicing the request.
-     *  This method resets the output, sets the new page and renders it.
-     *
-     **/
-
-    protected void redirect(
-        String pageName,
-        IRequestCycle cycle,
-        ResponseOutputStream out,
-        ApplicationRuntimeException exception)
-        throws IOException, ServletException
-    {
-        // Discard any output from the previous page.
-
-        out.reset();
-
-        IPage page = cycle.getPage(pageName);
-
-        cycle.activate(page);
-
-        renderResponse(cycle, out);
-    }
-
-    public void renderResponse(IRequestCycle cycle, ResponseOutputStream output)
-        throws ServletException, IOException
-    {
-        if (LOG.isDebugEnabled())
-            LOG.debug("Begin render response.");
-
-        // If the locale has changed during this request cycle then
-        // do the work to propogate the locale change into
-        // subsequent request cycles.
-
-        if (_localeChanged)
-        {
-            _localeChanged = false;
-
-            RequestContext context = cycle.getRequestContext();
-            ApplicationServlet servlet = context.getServlet();
-
-            servlet.writeLocaleCookie(_locale, this, context);
-        }
-
-        // Commit all changes and ignore further changes.
-
-        IPage page = cycle.getPage();
-
-        IMarkupWriter writer = page.getResponseWriter(output);
-
-        output.setContentType(writer.getContentType());
-
-        boolean discard = true;
-
-        try
-        {
-            cycle.renderPage(writer);
-
-            discard = false;
-        }
-        finally
-        {
-            // Closing the writer closes its PrintWriter and a whole stack of java.io objects,
-            // which tend to stream a lot of output that eventually hits the
-            // ResponseOutputStream.  If we are discarding output anyway (due to an exception
-            // getting thrown during the render), we can save ourselves some trouble
-            // by ignoring it.
-
-            if (discard)
-                output.setDiscard(true);
-
-            writer.close();
-
-            if (discard)
-                output.setDiscard(false);
-        }
-
-    }
-
-    /**
-     * Invalidates the session, then redirects the client web browser to
-     * the servlet's prefix, starting a new visit.
-     *
-     * <p>Subclasses should perform their own restart (if necessary, which is
-     * rarely) before invoking this implementation.
-     *
-     **/
-
-    public void restart(IRequestCycle cycle) throws IOException
-    {
-        RequestContext context = cycle.getRequestContext();
-
-        HttpSession session = context.getSession();
-
-        if (session != null)
-        {
-            try
-            {
-                session.invalidate();
-            }
-            catch (IllegalStateException ex)
-            {
-                if (LOG.isDebugEnabled())
-                    LOG.debug("Exception thrown invalidating HttpSession.", ex);
-
-                // Otherwise, ignore it.
-            }
-        }
-
-        // Make isStateful() return false, so that the servlet doesn't
-        // try to store the engine back into the (now invalid) session.
-
-        _stateful = false;
-
-        String url = context.getAbsoluteURL(_servletPath);
-
-        context.redirect(url);
-    }
-
-    /**
-     *  Delegate method for the servlet.  Services the request.
-     *
-     **/
-
-    public boolean service(RequestContext context) throws ServletException, IOException
-    {
-        ApplicationServlet servlet = context.getServlet();
-        IRequestCycle cycle = null;
-        ResponseOutputStream output = null;
-        IMonitor monitor = null;
-
-        if (LOG.isDebugEnabled())
-            LOG.debug("Begin service " + context.getRequestURI());
-
-        if (_specification == null)
-            _specification = servlet.getApplicationSpecification();
-
-        // The servlet invokes setLocale() before invoking service().  We want
-        // to ignore that setLocale() ... that is, not force a cookie to be
-        // written.
-
-        _localeChanged = false;
-
-        if (_resolver == null)
-            _resolver = servlet.getResourceResolver();
-
-        try
-        {
-            setupForRequest(context);
-
-            monitor = getMonitor(context);
-
-            output = new ResponseOutputStream(context.getResponse());
-        }
-        catch (Exception ex)
-        {
-            reportException(Tapestry.getMessage("AbstractEngine.unable-to-begin-request"), ex);
-
-            throw new ServletException(ex.getMessage(), ex);
-        }
-
-        IEngineService service = null;
-
-        try
-        {
-            try
-            {
-                String serviceName;
-
-                try
-                {
-                    serviceName = extractServiceName(context);
-
-                    if (Tapestry.isBlank(serviceName))
-                        serviceName = Tapestry.HOME_SERVICE;
-
-                    // Must have a service to create the request cycle.
-                    // Must have a request cycle to report an exception.
-
-                    service = getService(serviceName);
-                }
-                catch (Exception ex)
-                {
-                    service = getService(Tapestry.HOME_SERVICE);
-                    cycle = createRequestCycle(context, service, monitor);
-
-                    throw ex;
-                }
-
-                cycle = createRequestCycle(context, service, monitor);
-
-                monitor.serviceBegin(serviceName, context.getRequestURI());
-
-                // Invoke the service, which returns true if it may have changed
-                // the state of the engine (most do return true).
-
-                service.service(this, cycle, output);
-
-                // Return true only if the engine is actually dirty.  This cuts down
-                // on the number of times the engine is stored into the
-                // session unceccesarily.
-
-                return _dirty;
-            }
-            catch (PageRedirectException ex)
-            {
-                handlePageRedirectException(ex, cycle, output);
-            }
-            catch (RedirectException ex)
-            {
-                handleRedirectException(cycle, ex);
-            }
-            catch (StaleLinkException ex)
-            {
-                handleStaleLinkException(ex, cycle, output);
-            }
-            catch (StaleSessionException ex)
-            {
-                handleStaleSessionException(ex, cycle, output);
-            }
-        }
-        catch (Exception ex)
-        {
-            monitor.serviceException(ex);
-
-            // Discard any output (if possible).  If output has already been sent to
-            // the client, then things get dicey.  Note that this block
-            // gets activated if the StaleLink or StaleSession pages throws
-            // any kind of exception.
-
-            // Attempt to switch to the exception page.  However, this may itself fail
-            // for a number of reasons, in which case a ServletException is thrown.
-
-            output.reset();
-
-            if (LOG.isDebugEnabled())
-                LOG.debug("Uncaught exception", ex);
-
-            activateExceptionPage(cycle, output, ex);
-        }
-        finally
-        {
-            if (service != null)
-                monitor.serviceEnd(service.getName());
-
-            try
-            {
-                cycle.cleanup();
-
-                // Closing the buffered output closes the underlying stream as well.
-
-                if (output != null)
-                    output.forceFlush();
-            }
-            catch (Exception ex)
-            {
-                reportException(Tapestry.getMessage("AbstractEngine.exception-during-cleanup"), ex);
-            }
-			finally
-			{
-                cleanupAfterRequest(cycle);
-			}
-
-            if (_disableCaching)
-            {
-                try
-                {
-                    clearCachedData();
-                }
-                catch (Exception ex)
-                {
-                    reportException(
-                        Tapestry.getMessage("AbstractEngine.exception-during-cache-clear"),
-                        ex);
-                }
-            }
-
-            if (LOG.isDebugEnabled())
-                LOG.debug("End service");
-
-        }
-
-        return _dirty;
-    }
-
-    /**
-     *  Handles {@link PageRedirectException} which involves
-     *  executing {@link IPage#validate(IRequestCycle)} on the target page
-     *  (of the exception), until either a loop is found, or a page
-     *  succesfully validates and can be activated.
-     *
-     *  <p>This should generally not be overriden in subclasses.
-     *
-     *  @since 3.0
-     */
-
-    protected void handlePageRedirectException(
-        PageRedirectException ex,
-        IRequestCycle cycle,
-        ResponseOutputStream output)
-        throws IOException, ServletException
-    {
-        List pageNames = new ArrayList();
-
-        String pageName = ex.getTargetPageName();
-
-        while (true)
-        {
-            if (pageNames.contains(pageName))
-            {
-                // Add the offending page to pageNames so it shows in the
-                // list.
-
-                pageNames.add(pageName);
-
-                StringBuffer buffer = new StringBuffer();
-                int count = pageNames.size();
-
-                for (int i = 0; i < count; i++)
-                {
-                    if (i > 0)
-                        buffer.append("; ");
-
-                    buffer.append(pageNames.get(i));
-                }
-
-                throw new ApplicationRuntimeException(
-                    Tapestry.format("AbstractEngine.validate-cycle", buffer.toString()));
-            }
-
-            // Record that this page has been a target.
-
-            pageNames.add(pageName);
-
-            try
-            {
-                // Attempt to activate the new page.
-
-                cycle.activate(pageName);
-
-                break;
-            }
-            catch (PageRedirectException ex2)
-            {
-                pageName = ex2.getTargetPageName();
-            }
-        }
-
-        // Discard any output from the previous page.
-
-        output.reset();
-
-        renderResponse(cycle, output);
-    }
-
-    /**
-     *  Invoked from {@link #service(RequestContext)} to create an instance of
-     *  {@link IRequestCycle} for the current request.  This implementation creates
-     *  an returns an instance of {@link RequestCycle}.
-     *
-     *  @since 3.0
-     *
-     **/
-
-    protected IRequestCycle createRequestCycle(
-        RequestContext context,
-        IEngineService service,
-        IMonitor monitor)
-    {
-        return new RequestCycle(this, context, service, monitor);
-    }
-
-    /**
-     *  Invoked by {@link #service(RequestContext)} if a {@link StaleLinkException}
-     *  is thrown by the {@link IEngineService service}.  This implementation
-     *  sets the message property of the StaleLink page to the
-     *  message provided in the exception,
-     *  then invokes
-     *  {@link #redirect(String, IRequestCycle, ResponseOutputStream, ApplicationRuntimeException)}
-     *  to render the StaleLink page.
-     *
-     *  <p>Subclasses may overide this method (without
-     *  invoking this implementation).  A common practice
-     *  is to present an error message on the application's
-     *  Home page.
-     *
-     *  <p>Alternately, the application may provide its own version of
-     *  the StaleLink page, overriding
-     *  the framework's implementation (probably a good idea, because the
-     *  default page hints at "application errors" and isn't localized).
-     *  The overriding StaleLink implementation must
-     *  implement a message property of type String.
-     *
-     *  @since 0.2.10
-     *
-     **/
-
-    protected void handleStaleLinkException(
-        StaleLinkException ex,
-        IRequestCycle cycle,
-        ResponseOutputStream output)
-        throws IOException, ServletException
-    {
-        String staleLinkPageName = getStaleLinkPageName();
-        IPage page = cycle.getPage(staleLinkPageName);
-
-        page.setProperty("message", ex.getMessage());
-
-        redirect(staleLinkPageName, cycle, output, ex);
-    }
-
-    /**
-     *  Invoked by {@link #service(RequestContext)} if a {@link StaleSessionException}
-     *  is thrown by the {@link IEngineService service}.  This implementation
-     *  invokes
-     *  {@link #redirect(String, IRequestCycle, ResponseOutputStream, ApplicationRuntimeException)}
-     *  to render the StaleSession page.
-     *
-     *  <p>Subclasses may overide this method (without
-     *  invoking this implementation).  A common practice
-     *  is to present an eror message on the application's
-     *  Home page.
-     *
-     *  @since 0.2.10
-     **/
-
-    protected void handleStaleSessionException(
-        StaleSessionException ex,
-        IRequestCycle cycle,
-        ResponseOutputStream output)
-        throws IOException, ServletException
-    {
-        redirect(getStaleSessionPageName(), cycle, output, ex);
-    }
-
-    /**
-     *  Discards all cached pages, component specifications and templates.
-     *  Subclasses who override this method should invoke this implementation
-     *  as well.
-     *
-     *  @since 1.0.1
-     *
-     **/
-
-    public void clearCachedData()
-    {
-        _pool.clear();
-        _pageSource.reset();
-        _specificationSource.reset();
-        _templateSource.reset();
-        _scriptSource.reset();
-        _stringsSource.reset();
-        _enhancer.reset();
-        _resourceChecksumSource.reset();
-    }
-
-    /**
-     *  Changes the locale for the engine.
-     *
-     **/
-
-    public void setLocale(Locale value)
-    {
-        if (value == null)
-            throw new IllegalArgumentException("May not change engine locale to null.");
-
-        // Because locale changes are expensive (it involves writing a cookie and all that),
-        // we're careful not to really change unless there's a true change in value.
-
-        if (!value.equals(_locale))
-        {
-            _locale = value;
-            _localeChanged = true;
-            markDirty();
-        }
-    }
-
-    /**
-     *  Invoked from {@link #service(RequestContext)} to ensure that the engine's
-     *  instance variables are setup.  This allows the application a chance to
-     *  restore transient variables that will not have survived deserialization.
-     *
-     *  Determines the servlet prefix:  this is the base URL used by
-     *  {@link IEngineService services} to build URLs.  It consists
-     *  of two parts:  the context path and the servlet path.
-     *
-     *  <p>The servlet path is retrieved from {@link HttpServletRequest#getServletPath()}.
-     *
-     *  <p>The context path is retrieved from {@link HttpServletRequest#getContextPath()}.
-     *
-     *  <p>The global object is retrieved from {@link IEngine#getGlobal()} method.
-     *
-     *  <p>The final path is available via the {@link #getServletPath()} method.
-     *
-     *  <p>In addition, this method locates and/or creates the:
-     *  <ul>
-     *  <li>{@link IComponentClassEnhancer}
-     *  <li>{@link Pool}
-     *  <li>{@link ITemplateSource}
-     *  <li>{@link ISpecificationSource}
-     *  <li>{@link IPageSource}
-     *  <li>{@link IEngineService} {@link Map}
-     *  <ll>{@link IScriptSource}
-     *  <li>{@link IComponentMessagesSource}
-     *  <li>{@link IPropertySource}
-     *  </ul>
-     *
-     *  <p>This order is important, because some of the later shared objects
-     *  depend on some of the earlier shared objects already having
-     *  been located or created
-     *  (especially {@link #getPool() pool}).
-     *
-     *  <p>Subclasses should invoke this implementation first, then perform their
-     *  own setup.
-     *
-     **/
-
-    protected void setupForRequest(RequestContext context)
-    {
-        HttpServlet servlet = context.getServlet();
-        ServletContext servletContext = servlet.getServletContext();
-        HttpServletRequest request = context.getRequest();
-        HttpSession session = context.getSession();
-
-        if (session != null)
-            _sessionId = context.getSession().getId();
-        else
-            _sessionId = null;
-
-        // Previously, this used getRemoteHost(), but that requires an
-        // expensive reverse DNS lookup. Possibly, the host name lookup
-        // should occur ... but only if there's an actual error message
-        // to display.
-
-        if (_clientAddress == null)
-            _clientAddress = request.getRemoteAddr();
-
-        // servletPath is null, so this means either we're doing the
-        // first request in this session, or we're handling a subsequent
-        // request in another JVM (i.e. another server in the cluster).
-        // In any case, we have to do some late (re-)initialization.
-
-        if (_servletPath == null)
-        {
-            // Get the path *within* the servlet context
-
-            // In rare cases related to the tagsupport service, getServletPath() is wrong
-            // (its a JSP, which invokes Tapestry as an include, thus muddling what
-            // the real servlet and servlet path is).  In those cases, the JSP tag
-            // will inform us.
-
-            String path =
-                (String) request.getAttribute(Tapestry.TAG_SUPPORT_SERVLET_PATH_ATTRIBUTE);
-
-            if (path == null)
-                path = request.getServletPath();
-
-            // Get the context path, which may be the empty string
-            // (but won't be null).
-
-            _contextPath = request.getContextPath();
-
-            _servletPath = _contextPath + path;
-        }
-
-        String servletName = context.getServlet().getServletName();
-
-        if (_propertySource == null)
-        {
-            String name = PROPERTY_SOURCE_NAME + ":" + servletName;
-
-            _propertySource = (IPropertySource) servletContext.getAttribute(name);
-
-            if (_propertySource == null)
-            {
-                _propertySource = createPropertySource(context);
-
-                servletContext.setAttribute(name, _propertySource);
-            }
-        }
-
-        if (_enhancer == null)
-        {
-            String name = ENHANCER_NAME + ":" + servletName;
-
-            _enhancer = (IComponentClassEnhancer) servletContext.getAttribute(name);
-
-            if (_enhancer == null)
-            {
-                _enhancer = createComponentClassEnhancer(context);
-
-                servletContext.setAttribute(name, _enhancer);
-            }
-        }
-
-        if (_pool == null)
-        {
-            String name = POOL_NAME + ":" + servletName;
-
-            _pool = (Pool) servletContext.getAttribute(name);
-
-            if (_pool == null)
-            {
-                _pool = createPool(context);
-
-                servletContext.setAttribute(name, _pool);
-            }
-        }
-
-        if (_templateSource == null)
-        {
-            String name = TEMPLATE_SOURCE_NAME + ":" + servletName;
-
-            _templateSource = (ITemplateSource) servletContext.getAttribute(name);
-
-            if (_templateSource == null)
-            {
-                _templateSource = createTemplateSource(context);
-
-                servletContext.setAttribute(name, _templateSource);
-            }
-        }
-
-        if (_specificationSource == null)
-        {
-            String name = SPECIFICATION_SOURCE_NAME + ":" + servletName;
-
-            _specificationSource = (ISpecificationSource) servletContext.getAttribute(name);
-
-            if (_specificationSource == null)
-            {
-                _specificationSource = createSpecificationSource(context);
-
-                servletContext.setAttribute(name, _specificationSource);
-            }
-        }
-
-        if (_pageSource == null)
-        {
-            String name = PAGE_SOURCE_NAME + ":" + servletName;
-
-            _pageSource = (IPageSource) servletContext.getAttribute(name);
-
-            if (_pageSource == null)
-            {
-                _pageSource = createPageSource(context);
-
-                servletContext.setAttribute(name, _pageSource);
-            }
-        }
-
-        if (_scriptSource == null)
-        {
-            String name = SCRIPT_SOURCE_NAME + ":" + servletName;
-
-            _scriptSource = (IScriptSource) servletContext.getAttribute(name);
-
-            if (_scriptSource == null)
-            {
-                _scriptSource = createScriptSource(context);
-
-                servletContext.setAttribute(name, _scriptSource);
-            }
-        }
-
-        if (_serviceMap == null)
-        {
-            String name = SERVICE_MAP_NAME + ":" + servletName;
-
-            _serviceMap = (Map) servletContext.getAttribute(name);
-
-            if (_serviceMap == null)
-            {
-                _serviceMap = createServiceMap();
-
-                servletContext.setAttribute(name, _serviceMap);
-            }
-        }
-
-        if (_stringsSource == null)
-        {
-            String name = STRINGS_SOURCE_NAME + ":" + servletName;
-
-            _stringsSource = (IComponentMessagesSource) servletContext.getAttribute(name);
-
-            if (_stringsSource == null)
-            {
-                _stringsSource = createComponentStringsSource(context);
-
-                servletContext.setAttribute(name, _stringsSource);
-            }
-        }
-
-        if (_dataSqueezer == null)
-        {
-            String name = DATA_SQUEEZER_NAME + ":" + servletName;
-
-            _dataSqueezer = (DataSqueezer) servletContext.getAttribute(name);
-
-            if (_dataSqueezer == null)
-            {
-                _dataSqueezer = createDataSqueezer();
-
-                servletContext.setAttribute(name, _dataSqueezer);
-            }
-        }
-
-        if (_global == null)
-        {
-            String name = GLOBAL_NAME + ":" + servletName;
-
-            _global = servletContext.getAttribute(name);
-
-            if (_global == null)
-            {
-                _global = createGlobal(context);
-
-                servletContext.setAttribute(name, _global);
-            }
-        }
-        
-        if (_resourceChecksumSource == null)
-        {
-            String name = RESOURCE_CHECKSUM_SOURCE_NAME + ":" + servletName;
-
-            _resourceChecksumSource = (ResourceChecksumSource) servletContext.getAttribute(name);
-
-            if (_resourceChecksumSource == null)
-            {
-                _resourceChecksumSource = createResourceChecksumSource();
-
-                servletContext.setAttribute(name, _resourceChecksumSource);
-            }
-        }
-
-        String encoding = request.getCharacterEncoding();
-        if (encoding == null)
-        {
-            encoding = getOutputEncoding();
-            try
-            {
-                request.setCharacterEncoding(encoding);
-            }
-            catch (UnsupportedEncodingException e)
-            {
-                throw new IllegalArgumentException(Tapestry.format("illegal-encoding", encoding));
-            }
-            catch (NoSuchMethodError e)
-            {
-                // Servlet API 2.2 compatibility
-                // Behave okay if the setCharacterEncoding() method is unavailable
-            }
-            catch (AbstractMethodError e)
-            {
-                // Servlet API 2.2 compatibility
-                // Behave okay if the setCharacterEncoding() method is unavailable
-            }
-        }
-    }
-
-    /**
-     *
-     *  Invoked from {@link #setupForRequest(RequestContext)} to provide
-     *  a new instance of {@link IComponentMessagesSource}.
-     *
-     *  @return an instance of {@link DefaultComponentMessagesSource}
-     *  @since 2.0.4
-     *
-     **/
-
-    public IComponentMessagesSource createComponentStringsSource(RequestContext context)
-    {
-        return new DefaultComponentMessagesSource();
-    }
-
-    /**
-     *  Invoked from {@link #setupForRequest(RequestContext)} to provide
-     *  an instance of {@link IScriptSource} that will be stored into
-     *  the {@link ServletContext}.  Subclasses may override this method
-     *  to provide a different implementation.
-     *
-     *
-     *  @return an instance of {@link DefaultScriptSource}
-     *  @since 1.0.9
-     *
-     **/
-
-    protected IScriptSource createScriptSource(RequestContext context)
-    {
-        return new DefaultScriptSource(getResourceResolver());
-    }
-
-    /**
-     *  Invoked from {@link #setupForRequest(RequestContext)} to provide
-     *  an instance of {@link IPageSource} that will be stored into
-     *  the {@link ServletContext}.  Subclasses may override this method
-     *  to provide a different implementation.
-     *
-     *  @return an instance of {@link PageSource}
-     *  @since 1.0.9
-     *
-     **/
-
-    protected IPageSource createPageSource(RequestContext context)
-    {
-        return new PageSource(this);
-    }
-
-    /**
-     *  Invoked from {@link #setupForRequest(RequestContext)} to provide
-     *  an instance of {@link ISpecificationSource} that will be stored into
-     *  the {@link ServletContext}.  Subclasses may override this method
-     *  to provide a different implementation.
-     *
-     *  @return an instance of {@link DefaultSpecificationSource}
-     *  @since 1.0.9
-     **/
-
-    protected ISpecificationSource createSpecificationSource(RequestContext context)
-    {
-        return new DefaultSpecificationSource(getResourceResolver(), _specification, _pool);
-    }
-
-    /**
-     *  Invoked from {@link #setupForRequest(RequestContext)} to provide
-     *  an instance of {@link ITemplateSource} that will be stored into
-     *  the {@link ServletContext}.  Subclasses may override this method
-     *  to provide a different implementation.
-     *
-     *  @return an instance of {@link DefaultTemplateSource}
-     *  @since 1.0.9
-     *
-     **/
-
-    protected ITemplateSource createTemplateSource(RequestContext context)
-    {
-        return new DefaultTemplateSource();
-    }
-
-    /**
-     * Invoked from {@link #setupForRequest(RequestContext)} to provide
-     * an instance of {@link ResourceChecksumSource} that will be stored into
-     * the {@link ServletContext}.  Subclasses may override this method
-     * to provide a different implementation.
-     * @return an instance of {@link ResourceChecksumSourceImpl} that uses MD5 and Hex encoding.
-     * @since 3.0.3
-     */
-    protected ResourceChecksumSource createResourceChecksumSource()
-    {
-        return new ResourceChecksumSourceImpl("MD5", new Hex());
-    }
-    
-    /**
-     *  Returns an object which can find resources and classes.
-     *
-     **/
-
-    public IResourceResolver getResourceResolver()
-    {
-        return _resolver;
-    }
-
-    /**
-     *  Generates a description of the instance.
-     *  Invokes {@link #extendDescription(ToStringBuilder)}
-     *  to fill in details about the instance.
-     *
-     *  @see #extendDescription(ToStringBuilder)
-     *
-     **/
-
-    public String toString()
-    {
-        ToStringBuilder builder = new ToStringBuilder(this);
-
-        builder.append(
-            "name",
-            _specification == null
-                ? Tapestry.getMessage("AbstractEngine.unknown-specification")
-                : _specification.getName());
-
-        builder.append("dirty", _dirty);
-        builder.append("locale", _locale);
-        builder.append("stateful", _stateful);
-        builder.append("visit", _visit);
-
-        extendDescription(builder);
-
-        return builder.toString();
-    }
-
-    /**
-     *  Returns true if the reset service is curently enabled.
-     *
-     **/
-
-    public boolean isResetServiceEnabled()
-    {
-        return _resetServiceEnabled;
-    }
-
-    /**
-     *  Implemented by subclasses to return the names of the active pages
-     *  (pages for which recorders exist).  May return the empty list,
-     *  but should not return null.
-     *
-     **/
-
-    abstract public Collection getActivePageNames();
-
-    /**
-     *  Gets the visit object, if it has been created already.
-     *
-     *  <p>
-     *  If the visit is non-null then
-     *  the {@link #isDirty()} flag is set (because
-     *  the engine can't tell what the caller will
-     *  <i>do</i> with the visit).
-     *
-     **/
-
-    public Object getVisit()
-    {
-        if (_visit != null)
-            markDirty();
-
-        return _visit;
-    }
-
-    /**
-     *  Gets the visit object, invoking {@link #createVisit(IRequestCycle)} to create
-     *  it lazily if needed.  If cycle is null, the visit will not be lazily created.
-     *
-     *  <p>
-     *  After creating the visit, but before returning,
-     *  the {@link HttpSession} will be created, and
-     *  {@link #setStateful()} will be invoked.
-     *
-     *  <p>
-     *  Sets the {@link #isDirty()} flag, if the return value
-     *  is not null.
-     *
-     *
-     **/
-
-    public Object getVisit(IRequestCycle cycle)
-    {
-        if (_visit == null && cycle != null)
-        {
-            _visit = createVisit(cycle);
-
-            // Now that a visit object exists, we need to force the creation
-            // of a HttpSession.
-
-            cycle.getRequestContext().createSession();
-
-            setStateful();
-        }
-
-        if (_visit != null)
-            markDirty();
-
-        return _visit;
-    }
-
-    /**
-     *  Updates the visit object and
-     *  sets the {@link #isDirty() dirty flag}.
-     *
-     **/
-
-    public void setVisit(Object value)
-    {
-        _visit = value;
-
-        markDirty();
-    }
-
-    public boolean getHasVisit()
-    {
-        return _visit != null;
-    }
-
-    /**
-     *  Invoked to lazily create a new visit object when it is first
-     *  referenced (by {@link #getVisit(IRequestCycle)}).  This implementation works
-     *  by looking up the name of the class to instantiate
-     *  in the {@link #getPropertySource() configuration}.
-     *
-     *  <p>Subclasses may want to overide this method if some other means
-     *  of instantiating a visit object is required.
-     **/
-
-    protected Object createVisit(IRequestCycle cycle)
-    {
-        String visitClassName;
-        Class visitClass;
-        Object result = null;
-
-        visitClassName = _propertySource.getPropertyValue(VISIT_CLASS_PROPERTY_NAME);
-
-        if (LOG.isDebugEnabled())
-            LOG.debug("Creating visit object as instance of " + visitClassName);
-
-        visitClass = _resolver.findClass(visitClassName);
-
-        try
-        {
-            result = visitClass.newInstance();
-        }
-        catch (Throwable t)
-        {
-            throw new ApplicationRuntimeException(
-                Tapestry.format("AbstractEngine.unable-to-instantiate-visit", visitClassName),
-                t);
-        }
-
-        return result;
-    }
-
-    /**
-     *  Returns the global object for the application.  The global object is created at the start
-     *  of the request ({@link #setupForRequest(RequestContext)} invokes
-     *  {@link #createGlobal(RequestContext)} if needed),
-     *  and is stored into the {@link ServletContext}.  All instances of the engine for
-     *  the application share
-     *  the global object; however, the global object is explicitly <em>not</em>
-     *  replicated to other servers within
-     *  a cluster.
-     *
-     *  @since 2.3
-     *
-     **/
-
-    public Object getGlobal()
-    {
-        return _global;
-    }
-
-    public IScriptSource getScriptSource()
-    {
-        return _scriptSource;
-    }
-
-    public boolean isStateful()
-    {
-        return _stateful;
-    }
-
-    /**
-     *  Invoked by subclasses to indicate that some state must now be stored
-     *  in the engine (and that the engine should now be stored in the
-     *  HttpSession).  The caller is responsible for actually creating
-     *  the HttpSession (it will have access to the {@link RequestContext}).
-     *
-     *  @since 1.0.2
-     *
-     **/
-
-    protected void setStateful()
-    {
-        _stateful = true;
-    }
-
-    /**
-     *  Allows subclasses to include listener methods easily.
-     *
-     * @since 1.0.2
-     **/
-
-    public ListenerMap getListeners()
-    {
-        if (_listeners == null)
-            _listeners = new ListenerMap(this);
-
-        return _listeners;
-    }
-
-    private static class RedirectAnalyzer
-    {
-        private boolean _internal;
-        private String _location;
-
-        private RedirectAnalyzer(String location)
-        {
-            if (Tapestry.isBlank(location))
-            {
-                _location = "";
-                _internal = true;
-
-                return;
-            }
-
-            _location = location;
-
-            _internal = !(location.startsWith("/") || location.indexOf("://") > 0);
-        }
-
-        public void process(IRequestCycle cycle)
-        {
-            RequestContext context = cycle.getRequestContext();
-
-            if (_internal)
-                forward(context);
-            else
-                redirect(context);
-        }
-
-        private void forward(RequestContext context)
-        {
-            HttpServletRequest request = context.getRequest();
-            HttpServletResponse response = context.getResponse();
-
-            RequestDispatcher dispatcher = request.getRequestDispatcher("/" + _location);
-
-            if (dispatcher == null)
-                throw new ApplicationRuntimeException(
-                    Tapestry.format("AbstractEngine.unable-to-find-dispatcher", _location));
-
-            try
-            {
-                dispatcher.forward(request, response);
-            }
-            catch (ServletException ex)
-            {
-                throw new ApplicationRuntimeException(
-                    Tapestry.format("AbstractEngine.unable-to-forward", _location),
-                    ex);
-            }
-            catch (IOException ex)
-            {
-                throw new ApplicationRuntimeException(
-                    Tapestry.format("AbstractEngine.unable-to-forward", _location),
-                    ex);
-            }
-        }
-
-        private void redirect(RequestContext context)
-        {
-            HttpServletResponse response = context.getResponse();
-
-            String finalURL = response.encodeRedirectURL(_location);
-
-            try
-            {
-                response.sendRedirect(finalURL);
-            }
-            catch (IOException ex)
-            {
-                throw new ApplicationRuntimeException(
-                    Tapestry.format("AbstractEngine.unable-to-redirect", _location),
-                    ex);
-            }
-        }
-
-    }
-
-    /**
-     *  Invoked when a {@link RedirectException} is thrown during the processing of a request.
-     *
-     *  @throws ApplicationRuntimeException if an {@link IOException},
-     *  {@link ServletException} is thrown by the redirect, or if no
-     *  {@link RequestDispatcher} can be found for local resource.
-     *
-     *  @since 2.2
-     *
-     **/
-
-    protected void handleRedirectException(IRequestCycle cycle, RedirectException ex)
-    {
-        String location = ex.getRedirectLocation();
-
-        if (LOG.isDebugEnabled())
-            LOG.debug("Redirecting to: " + location);
-
-        RedirectAnalyzer analyzer = new RedirectAnalyzer(location);
-
-        analyzer.process(cycle);
-    }
-
-    /**
-     *  Creates a Map of all the services available to the application.
-     *
-     *  <p>Note: the Map returned is not synchronized, on the theory that returned
-     *  map is not further modified and therefore threadsafe.
-     *
-     **/
-
-    private Map createServiceMap()
-    {
-        if (LOG.isDebugEnabled())
-            LOG.debug("Creating service map.");
-
-        ISpecificationSource source = getSpecificationSource();
-
-        // Build the initial version of the result map,
-        // where each value is the *name* of a class.
-
-        Map result = new HashMap();
-
-        // Do the framework first.
-
-        addServices(source.getFrameworkNamespace(), result);
-
-        // And allow the application to override the framework.
-
-        addServices(source.getApplicationNamespace(), result);
-
-        IResourceResolver resolver = getResourceResolver();
-
-        Iterator i = result.entrySet().iterator();
-
-        while (i.hasNext())
-        {
-            Map.Entry entry = (Map.Entry) i.next();
-
-            String name = (String) entry.getKey();
-            String className = (String) entry.getValue();
-
-            if (LOG.isDebugEnabled())
-                LOG.debug("Creating service " + name + " as instance of " + className);
-
-            Class serviceClass = resolver.findClass(className);
-
-            try
-            {
-                IEngineService service = (IEngineService) serviceClass.newInstance();
-                String serviceName = service.getName();
-
-                if (!service.getName().equals(name))
-                    throw new ApplicationRuntimeException(
-                        Tapestry.format(
-                            "AbstractEngine.service-name-mismatch",
-                            name,
-                            className,
-                            serviceName));
-
-                // Replace the class name with an instance
-                // of the named class.
-
-                entry.setValue(service);
-            }
-            catch (InstantiationException ex)
-            {
-                String message =
-                    Tapestry.format(
-                        "AbstractEngine.unable-to-instantiate-service",
-                        name,
-                        className);
-
-                LOG.error(message, ex);
-
-                throw new ApplicationRuntimeException(message, ex);
-            }
-            catch (IllegalAccessException ex)
-            {
-                String message =
-                    Tapestry.format(
-                        "AbstractEngine.unable-to-instantiate-service",
-                        name,
-                        className);
-
-                LOG.error(message, ex);
-
-                throw new ApplicationRuntimeException(message, ex);
-            }
-        }
-
-        // Result should not be modified after this point, for threadsafety issues.
-        // We could wrap it in an unmodifiable, but for efficiency we don't.
-
-        return result;
-    }
-
-    /**
-     *  Locates all services in the namespace and adds key/value
-     *  pairs to the map (name and class name).  Then recursively
-     *  descendends into child namespaces to collect more
-     *  service names.
-     *
-     *  @since 2.2
-     *
-     **/
-
-    private void addServices(INamespace namespace, Map map)
-    {
-        List names = namespace.getServiceNames();
-        int count = names.size();
-
-        for (int i = 0; i < count; i++)
-        {
-            String name = (String) names.get(i);
-
-            map.put(name, namespace.getServiceClassName(name));
-        }
-
-        List namespaceIds = namespace.getChildIds();
-        count = namespaceIds.size();
-
-        for (int i = 0; i < count; i++)
-        {
-            String id = (String) namespaceIds.get(i);
-
-            addServices(namespace.getChildNamespace(id), map);
-        }
-    }
-
-    /**
-     *  @since 2.0.4
-     *
-     **/
-
-    public IComponentMessagesSource getComponentMessagesSource()
-    {
-        return _stringsSource;
-    }
-
-    /**
-     *  @since 2.2
-     *
-     **/
-
-    public DataSqueezer getDataSqueezer()
-    {
-        return _dataSqueezer;
-    }
-
-    /**
-     *
-     *  Invoked from {@link #setupForRequest(RequestContext)} to create
-     *  a {@link DataSqueezer} when needed (typically, just the very first time).
-     *  This implementation returns a standard, new instance.
-     *
-     *  @since 2.2
-     *
-     **/
-
-    public DataSqueezer createDataSqueezer()
-    {
-        return new DataSqueezer(_resolver);
-    }
-
-    /**
-     *  Invoked from {@link #service(RequestContext)} to extract, from the URL,
-     *  the name of the service.  The current implementation expects the first
-     *  pathInfo element to be the service name.  At some point in the future,
-     *  the method of constructing and parsing URLs may be abstracted into
-     *  a developer-selected class.
-     *
-     *  <p>Subclasses may override this method if the application defines
-     *  specific services with unusual URL encoding rules.
-     *
-     *  <p>This implementation simply extracts the value for
-     *  query parameter {@link Tapestry#SERVICE_QUERY_PARAMETER_NAME}
-     *  and extracts the service name from that.
-     *
-     *  <p>
-     *  For supporting the JSP tags, this method first
-     *  checks for attribute {@link Tapestry#TAG_SUPPORT_SERVICE_ATTRIBUTE}.  If non-null,
-     *  then {@link Tapestry#TAGSUPPORT_SERVICE} is returned.
-     *
-     *  @since 2.2
-     *
-     **/
-
-    protected String extractServiceName(RequestContext context)
-    {
-        if (context.getRequest().getAttribute(Tapestry.TAG_SUPPORT_SERVICE_ATTRIBUTE) != null)
-            return Tapestry.TAGSUPPORT_SERVICE;
-
-        String serviceData = context.getParameter(Tapestry.SERVICE_QUERY_PARAMETER_NAME);
-
-        if (serviceData == null)
-            return Tapestry.HOME_SERVICE;
-
-        // The service name is anything before the first slash,
-        // if there is one.
-
-        int slashx = serviceData.indexOf('/');
-
-        if (slashx < 0)
-            return serviceData;
-
-        return serviceData.substring(0, slashx);
-    }
-
-    /** @since 2.3 **/
-
-    public IPropertySource getPropertySource()
-    {
-        return _propertySource;
-    }
-
-    /** @since 3.0.3 */
-    
-    public ResourceChecksumSource getResourceChecksumSource()
-    {
-        return _resourceChecksumSource;
-    }
-    
-    /** @since 3.0 **/
-
-    protected String getExceptionPageName()
-    {
-        return EXCEPTION_PAGE;
-    }
-
-    /** @since 3.0 **/
-
-    protected String getStaleLinkPageName()
-    {
-        return STALE_LINK_PAGE;
-    }
-
-    /** @since 3.0 **/
-
-    protected String getStaleSessionPageName()
-    {
-        return STALE_SESSION_PAGE;
-    }
-
-    /**
-     *  Name of an application extension that can provide configuration properties.
-     *
-     *  @see #createPropertySource(RequestContext)
-     *  @since 2.3
-     *
-     **/
-
-    private static final String EXTENSION_PROPERTY_SOURCE_NAME =
-        "org.apache.tapestry.property-source";
-
-    /**
-     *  Creates a shared property source that will be stored into
-     *  the servlet context.
-     *  Subclasses may override this method to build thier
-     *  own search path.
-     *
-     *  <p>If the application specification contains an extension
-     *  named "org.apache.tapestry.property-source" it is inserted
-     *  in the search path just before
-     *  the property source for JVM System Properties.  This is a simple
-     *  hook at allow application-specific methods of obtaining
-     *  configuration values (typically, from a database or from JMX,
-     *  in some way).  Alternately, subclasses may
-     *  override this method to provide whatever search path
-     *  is appropriate.
-     *
-     *
-     *  @since 2.3
-     *
-     **/
-
-    protected IPropertySource createPropertySource(RequestContext context)
-    {
-        DelegatingPropertySource result = new DelegatingPropertySource();
-
-        ApplicationServlet servlet = context.getServlet();
-        IApplicationSpecification spec = servlet.getApplicationSpecification();
-
-        result.addSource(new PropertyHolderPropertySource(spec));
-        result.addSource(new ServletPropertySource(servlet.getServletConfig()));
-        result.addSource(new ServletContextPropertySource(servlet.getServletContext()));
-
-        if (spec.checkExtension(EXTENSION_PROPERTY_SOURCE_NAME))
-        {
-            IPropertySource source =
-                (IPropertySource) spec.getExtension(
-                    EXTENSION_PROPERTY_SOURCE_NAME,
-                    IPropertySource.class);
-
-            result.addSource(source);
-        }
-
-        result.addSource(SystemPropertiesPropertySource.getInstance());
-
-        // Lastly, add a final source to handle "factory defaults".
-
-        ResourceBundle bundle =
-            ResourceBundle.getBundle("org.apache.tapestry.ConfigurationDefaults");
-
-        result.addSource(new ResourceBundlePropertySource(bundle));
-
-        return result;
-    }
-
-    /**
-     *  Creates the shared Global object.  This implementation looks for an configuration
-     *  property, <code>org.apache.tapestry.global-class</code>, and instantiates that class
-     *  using a no-arguments
-     *  constructor.  If the property is not defined, a synchronized
-     *  {@link java.util.HashMap} is created.
-     *
-     *  @since 2.3
-     *
-     **/
-
-    protected Object createGlobal(RequestContext context)
-    {
-        String className = _propertySource.getPropertyValue("org.apache.tapestry.global-class");
-
-        if (className == null)
-            return Collections.synchronizedMap(new HashMap());
-
-        Class globalClass = _resolver.findClass(className);
-
-        try
-        {
-            return globalClass.newInstance();
-        }
-        catch (Exception ex)
-        {
-            throw new ApplicationRuntimeException(
-                Tapestry.format("AbstractEngine.unable-to-instantiate-global", className),
-                ex);
-        }
-    }
-
-    /**
-     *  Returns an new instance of {@link Pool}, with the standard
-     *  set of adaptors, plus {@link BSFManagerPoolableAdaptor} for
-     *  {@link BSFManager}.
-     *
-     *  <p>Subclasses may override this
-     *  method to configure the Pool differently.
-     *
-     *  @since 3.0
-     *
-     **/
-
-    protected Pool createPool(RequestContext context)
-    {
-        Pool result = new Pool();
-
-        result.registerAdaptor(BSFManager.class, new BSFManagerPoolableAdaptor());
-
-        return result;
-    }
-
-    /** @since 3.0 **/
-
-    public Pool getPool()
-    {
-        return _pool;
-    }
-
-    /**
-     *
-     * Invoked from {@link #setupForRequest(RequestContext)}.  Creates
-     * a new instance of {@link DefaultComponentClassEnhancer}.  Subclasses
-     * may override to return a different object.
-     * 
-     * <p>
-     * Check the property <code>org.apache.tapestry.enhance.disable-abstract-method-validation</code>
-     * and, if true, disables abstract method validation. This is used  in some
-     * errant JDK's (such as IBM's 1.3.1) that incorrectly report concrete methods from
-     * abstract classes as abstract.
-     *
-     * @since 3.0
-     */
-
-    protected IComponentClassEnhancer createComponentClassEnhancer(RequestContext context)
-    {
-        boolean disableValidation =
-            "true".equals(
-                _propertySource.getPropertyValue(
-                    "org.apache.tapestry.enhance.disable-abstract-method-validation"));
-
-        return new DefaultComponentClassEnhancer(_resolver, disableValidation);
-    }
-
-    /** @since 3.0 **/
-
-    public IComponentClassEnhancer getComponentClassEnhancer()
-    {
-        return _enhancer;
-    }
-
-    /**
-     *  Returns true if the engine has (potentially) changed
-     *  state since the last time it was stored
-     *  into the {@link javax.servlet.http.HttpSession}.  Various
-     *  events set this property to true.
-     *
-     *  @since 3.0
-     *
-     **/
-
-    public boolean isDirty()
-    {
-        return _dirty;
-    }
-
-    /**
-     *  Invoked to set the dirty flag, indicating that the
-     *  engine should be stored into the
-     *  {@link javax.servlet.http.HttpSession}.
-     *
-     *
-     *  @since 3.0
-     *
-     **/
-
-    protected void markDirty()
-    {
-        if (!_dirty)
-            LOG.debug("Setting dirty flag.");
-
-        _dirty = true;
-    }
-
-    /**
-     *
-     *  Clears the dirty flag when a engine is stored into the
-     *  {@link HttpSession}.
-     *
-     *
-     *  @since 3.0
-     *
-     **/
-
-    public void valueBound(HttpSessionBindingEvent arg0)
-    {
-        LOG.debug(_dirty ? "Clearing dirty flag." : "Dirty flag already cleared.");
-
-        _dirty = false;
-    }
-
-    /**
-     *  Does nothing.
-     *
-     *  @since 3.0
-     *
-     **/
-
-    public void valueUnbound(HttpSessionBindingEvent arg0)
-    {
-    }
-
-    /**
-     *
-     *  The encoding to be used if none has been defined using the output encoding property.
-     *  Override this method to change the default.
-     *
-     *  @return the default output encoding
-     *  @since 3.0
-     *
-     **/
-    protected String getDefaultOutputEncoding()
-    {
-        return DEFAULT_OUTPUT_ENCODING;
-    }
-
-    /**
-     *
-     *  Returns the encoding to be used to generate the servlet responses and
-     *  accept the servlet requests.
-     *
-     *  The encoding is defined using the org.apache.tapestry.output-encoding
-     *  and is UTF-8 by default
-     *
-     *  @since 3.0
-     *  @see org.apache.tapestry.IEngine#getOutputEncoding()
-     *
-     **/
-    public String getOutputEncoding()
-    {
-        IPropertySource source = getPropertySource();
-
-        String encoding = source.getPropertyValue(OUTPUT_ENCODING_PROPERTY_NAME);
-        if (encoding == null)
-            encoding = getDefaultOutputEncoding();
-
-        return encoding;
-    }
-
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/engine/AbstractService.java b/3.0.4/framework/src/org/apache/tapestry/engine/AbstractService.java
deleted file mode 100644
index 8cfd3d2..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/engine/AbstractService.java
+++ /dev/null
@@ -1,127 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.engine;
-
-import java.io.IOException;
-
-import org.apache.tapestry.ApplicationRuntimeException;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.request.RequestContext;
-import org.apache.tapestry.util.StringSplitter;
-import org.apache.tapestry.util.io.DataSqueezer;
-
-/**
- *  Abstract base class for implementing engine services.  Instances of services
- *  are shared by many engines and threads, so they must be threadsafe.
- * 
- *  <p>
- *  Note; too much of the URL encoding/decoding stategy is fixed here.
- *  A future release of Tapestry may extract this strategy, allowing developers
- *  to choose the method via which URLs are encoded.
- * 
- *  @see org.apache.tapestry.engine.AbstractEngine#getService(String)
- * 
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 1.0.3
- * 
- **/
-
-public abstract class AbstractService implements IEngineService
-{
-    /**
-     *  Constructs a link for the service.
-     *
-     *  @param cycle the request cycle
-     *  @param serviceName the name of the service
-     *  @param serviceContext context related to the service itself which is added to the URL as-is
-     *  @param parameters additional service parameters provided by the component; 
-     *  this is application specific information, and is encoded with 
-     *  {@link java.net.URLEncoder#encode(String)} before being added
-     *  to the query.
-     *  @param stateful if true, the final URL must be encoded with the HttpSession id
-     *
-     **/
-
-    protected ILink constructLink(
-        IRequestCycle cycle,
-        String serviceName,
-        String[] serviceContext,
-        Object[] parameters,
-        boolean stateful)
-    {
-        DataSqueezer squeezer = cycle.getEngine().getDataSqueezer();
-        String[] squeezed = null;
-
-        try
-        {
-            squeezed = squeezer.squeeze(parameters);
-        }
-        catch (IOException ex)
-        {
-            throw new ApplicationRuntimeException(ex);
-        }
-
-        return new EngineServiceLink(cycle, serviceName, serviceContext, squeezed, stateful);
-    }
-
-    /**
-     *  Returns the service context as an array of Strings.
-     *  Returns null if there are no service context strings.
-     *
-     **/
-
-    protected String[] getServiceContext(RequestContext context)
-    {
-        String service = context.getParameter(Tapestry.SERVICE_QUERY_PARAMETER_NAME);
-
-		int slashx = service.indexOf('/');
-		
-		if (slashx < 0)
-			return null;
-			
-		String serviceContext = service.substring(slashx + 1);
-
-        return new StringSplitter('/').splitToArray(serviceContext);
-    }
-
-    /**
-     *  Returns the service parameters as an array of Strings.
-     *
-     **/
-
-    protected Object[] getParameters(IRequestCycle cycle)
-    {
-        RequestContext context = cycle.getRequestContext();
-
-        String[] squeezed = context.getParameters(Tapestry.PARAMETERS_QUERY_PARAMETER_NAME);
-
-        if (Tapestry.size(squeezed) == 0)
-            return squeezed;
-
-        try
-        {
-            DataSqueezer squeezer = cycle.getEngine().getDataSqueezer();
-
-            return squeezer.unsqueeze(squeezed);
-        }
-        catch (IOException ex)
-        {
-            throw new ApplicationRuntimeException(ex);
-        }
-    }
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/engine/ActionService.java b/3.0.4/framework/src/org/apache/tapestry/engine/ActionService.java
deleted file mode 100644
index ae48d8f..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/engine/ActionService.java
+++ /dev/null
@@ -1,173 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.engine;
-
-import java.io.IOException;
-
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpSession;
-
-import org.apache.tapestry.ApplicationRuntimeException;
-import org.apache.tapestry.IAction;
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.IPage;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.StaleSessionException;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.request.ResponseOutputStream;
-
-/**
- *  A context-sensitive service related to {@link org.apache.tapestry.form.Form} 
- *  and {@link org.apache.tapestry.link.ActionLink}.  Encodes
- *  the page, component and an action id in the service context.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 1.0.9
- *
- **/
-
-public class ActionService extends AbstractService
-{
-    /**
-     *  Encoded into URL if engine was stateful.
-     * 
-     *  @since 3.0
-     **/
-
-    private static final String STATEFUL_ON = "1";
-
-    /**
-     *  Encoded into URL if engine was not stateful.
-     * 
-     *  @since 3.0
-     **/
-
-    private static final String STATEFUL_OFF = "0";
-
-    public ILink getLink(IRequestCycle cycle, IComponent component, Object[] parameters)
-    {
-        if (parameters == null || parameters.length != 1)
-            throw new IllegalArgumentException(
-                Tapestry.format("service-single-parameter", Tapestry.ACTION_SERVICE));
-
-        String stateful = cycle.getEngine().isStateful() ? STATEFUL_ON : STATEFUL_OFF;
-        IPage componentPage = component.getPage();
-        IPage responsePage = cycle.getPage();
-
-        boolean complex = (componentPage != responsePage);
-
-        String[] serviceContext = new String[complex ? 5 : 4];
-
-        int i = 0;
-
-        serviceContext[i++] = stateful;
-        serviceContext[i++] = responsePage.getPageName();
-        serviceContext[i++] = (String) parameters[0];
-
-        // Because of Block/InsertBlock, the component may not be on
-        // the same page as the response page and we need to make
-        // allowances for this.
-
-        if (complex)
-            serviceContext[i++] = componentPage.getPageName();
-
-        serviceContext[i++] = component.getIdPath();
-
-        return constructLink(cycle, Tapestry.ACTION_SERVICE, serviceContext, null, true);
-    }
-
-    public void service(
-        IEngineServiceView engine,
-        IRequestCycle cycle,
-        ResponseOutputStream output)
-        throws ServletException, IOException
-    {
-        IAction action = null;
-        String componentPageName;
-        int count = 0;
-
-        String[] serviceContext = getServiceContext(cycle.getRequestContext());
-
-        if (serviceContext != null)
-            count = serviceContext.length;
-
-        if (count != 4 && count != 5)
-            throw new ApplicationRuntimeException(
-                Tapestry.getMessage("ActionService.context-parameters"));
-
-        boolean complex = count == 5;
-
-        int i = 0;
-        String stateful = serviceContext[i++];
-        String pageName = serviceContext[i++];
-        String targetActionId = serviceContext[i++];
-
-        if (complex)
-            componentPageName = serviceContext[i++];
-        else
-            componentPageName = pageName;
-
-        String targetIdPath = serviceContext[i++];
-
-        IPage page = cycle.getPage(pageName);
-
-		// Setup the page for the rewind, then do the rewind.
-
-		cycle.activate(page);
-		
-        IPage componentPage = cycle.getPage(componentPageName);
-        IComponent component = componentPage.getNestedComponent(targetIdPath);
-
-        try
-        {
-            action = (IAction) component;
-        }
-        catch (ClassCastException ex)
-        {
-            throw new ApplicationRuntimeException(
-                Tapestry.format("ActionService.component-wrong-type", component.getExtendedId()),
-                component,
-                null,
-                ex);
-        }
-
-        // Only perform the stateful check if the application was stateful
-        // when the URL was rendered.
-
-        if (stateful.equals(STATEFUL_ON) && action.getRequiresSession())
-        {
-            HttpSession session = cycle.getRequestContext().getSession();
-
-            if (session == null || session.isNew())
-                throw new StaleSessionException();
-        }
-
-        cycle.rewindPage(targetActionId, action);
-
-        // During the rewind, a component may change the page.  This will take
-        // effect during the second render, which renders the HTML response.
-
-        // Render the response.
-
-        engine.renderResponse(cycle, output);
-    }
-
-    public String getName()
-    {
-        return Tapestry.ACTION_SERVICE;
-    }
-
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/engine/BSFManagerPoolableAdaptor.java b/3.0.4/framework/src/org/apache/tapestry/engine/BSFManagerPoolableAdaptor.java
deleted file mode 100644
index fc20c7e..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/engine/BSFManagerPoolableAdaptor.java
+++ /dev/null
@@ -1,54 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.engine;
-
-import org.apache.bsf.BSFManager;
-import org.apache.tapestry.util.pool.IPoolableAdaptor;
-
-/**
- *  Allows a {@link org.apache.tapestry.util.pool.Pool} to
- *  properly terminate a {@link org.apache.bsf.BSFManager}
- *  when it is discarded.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 3.0
- *
- **/
-
-public class BSFManagerPoolableAdaptor implements IPoolableAdaptor
-{
-    /**
-     *  Does nothing.
-     * 
-     **/
-    
-    public void resetForPool(Object object)
-    {
-    }
-
-    /**
-     *  Invokes {@link org.apache.bsf.BSFManager#terminate()}.
-     * 
-     **/
-    
-    public void discardFromPool(Object object)
-    {
-        BSFManager manager = (BSFManager)object;
-        
-        manager.terminate();
-    }
-
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/engine/BaseEngine.java b/3.0.4/framework/src/org/apache/tapestry/engine/BaseEngine.java
deleted file mode 100644
index 46f95c2..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/engine/BaseEngine.java
+++ /dev/null
@@ -1,239 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.engine;
-
-import java.io.IOException;
-import java.io.ObjectInput;
-import java.io.ObjectOutput;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.Set;
-
-import org.apache.commons.lang.builder.ToStringBuilder;
-import org.apache.tapestry.ApplicationRuntimeException;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.record.SessionPageRecorder;
-
-/**
- *  Concrete implementation of {@link org.apache.tapestry.IEngine} used for ordinary
- *  applications.  All page state information is maintained in
- *  the {@link javax.servlet.http.HttpSession} using
- *  instances of {@link org.apache.tapestry.record.SessionPageRecorder}.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- * 
- **/
-
-public class BaseEngine extends AbstractEngine
-{
-    private static final long serialVersionUID = -7051050643746333380L;
-
-    private final static int MAP_SIZE = 3;
-
-    private transient Map _recorders;
-
-    private transient Set _activePageNames;
-
-    /**
-     *  Removes all page recorders that contain no changes, or
-     *  are marked for discard.  Subclasses
-     *  should invoke this implementation in addition to providing
-     *  thier own.
-     *
-     **/
-
-    protected void cleanupAfterRequest(IRequestCycle cycle)
-    {
-        if (Tapestry.isEmpty(_recorders))
-            return;
-
-		boolean markDirty = false;
-        Iterator i = _recorders.entrySet().iterator();
-
-        while (i.hasNext())
-        {
-            Map.Entry entry = (Map.Entry) i.next();
-            String pageName = (String) entry.getKey();
-            IPageRecorder recorder = (IPageRecorder) entry.getValue();
-
-            if (!recorder.getHasChanges() || recorder.isMarkedForDiscard())
-            {
-                recorder.discard();
-
-                i.remove();
-
-                _activePageNames.remove(pageName);
-      	
-      			markDirty = true;
-            }
-        }
-        
-        if (markDirty)
-        	markDirty();
-    }
-
-    public void forgetPage(String name)
-    {
-        if (_recorders == null)
-            return;
-
-        IPageRecorder recorder = (IPageRecorder) _recorders.get(name);
-        if (recorder == null)
-            return;
-
-        if (recorder.isDirty())
-            throw new ApplicationRuntimeException(
-                Tapestry.format("BaseEngine.recorder-has-uncommited-changes", name));
-
-        recorder.discard();
-        _recorders.remove(name);
-        _activePageNames.remove(name);
-        
-        markDirty();
-    }
-
-    /**
-     *  Returns an unmodifiable {@link Collection} of the page names for which
-     *  {@link IPageRecorder} instances exist.
-     * 
-     *
-     **/
-
-    public Collection getActivePageNames()
-    {
-        if (_activePageNames == null)
-            return Collections.EMPTY_LIST;
-
-        return Collections.unmodifiableCollection(_activePageNames);
-    }
-
-    public IPageRecorder getPageRecorder(String pageName, IRequestCycle cycle)
-    {
-        if (_activePageNames == null || !_activePageNames.contains(pageName))
-            return null;
-
-        IPageRecorder result = null;
-
-        if (_recorders != null)
-            return result = (IPageRecorder) _recorders.get(pageName);
-
-        // So the page is active, but not in the cache of page recoders,
-        // so (re-)create the page recorder.
-
-        if (result == null)
-            result = createPageRecorder(pageName, cycle);
-
-        return result;
-    }
-
-    public IPageRecorder createPageRecorder(String pageName, IRequestCycle cycle)
-    {
-        if (_recorders == null)
-            _recorders = new HashMap(MAP_SIZE);
-        else
-        {
-            if (_recorders.containsKey(pageName))
-                throw new ApplicationRuntimeException(
-                    Tapestry.format("BaseEngine.duplicate-page-recorder", pageName));
-        }
-
-        // Force the creation of the HttpSession
-
-        cycle.getRequestContext().createSession();
-        setStateful();
-       
-
-        IPageRecorder result = new SessionPageRecorder();
-        result.initialize(pageName, cycle);
-
-        _recorders.put(pageName, result);
-
-        if (_activePageNames == null)
-            _activePageNames = new HashSet();
-
-        _activePageNames.add(pageName);
-        
-        markDirty();
-
-        return result;
-    }
-
-    /**
-     *  Reconstructs the list of active page names
-     *  written by {@link #writeExternal(ObjectOutput)}.
-     * 
-     **/
-
-    public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException
-    {
-        super.readExternal(in);
-
-        int count = in.readInt();
-
-        if (count > 0)
-            _activePageNames = new HashSet(count);
-
-        for (int i = 0; i < count; i++)
-        {
-            String name = in.readUTF();
-
-            _activePageNames.add(name);
-        }
-
-    }
-
-    /**
-     *  Writes the engine's persistent state; this is simply the list of active page
-     *  names.  For efficiency, this is written as a count followed by each name
-     *  as a UTF String.
-     * 
-     **/
-
-    public void writeExternal(ObjectOutput out) throws IOException
-    {
-        super.writeExternal(out);
-
-        if (Tapestry.isEmpty(_activePageNames))
-        {
-            out.writeInt(0);
-            return;
-        }
-
-        int count = _activePageNames.size();
-
-        out.writeInt(count);
-
-        Iterator i = _activePageNames.iterator();
-
-        while (i.hasNext())
-        {
-            String name = (String) i.next();
-
-            out.writeUTF(name);
-        }
-    }
-
-    public void extendDescription(ToStringBuilder builder)
-    {
-		builder.append("activePageNames", _activePageNames);
-    }
-
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/engine/ComponentMessages.java b/3.0.4/framework/src/org/apache/tapestry/engine/ComponentMessages.java
deleted file mode 100644
index e081309..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/engine/ComponentMessages.java
+++ /dev/null
@@ -1,109 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.engine;
-
-import java.text.MessageFormat;
-import java.util.Locale;
-import java.util.Properties;
-
-import org.apache.tapestry.IMessages;
-import org.apache.tapestry.Tapestry;
-
-/**
- *  Implementation of {@link org.apache.tapestry.IMessages}.  This is basically
- *  a wrapper around an instance of {@link Properties}.  This ensures
- *  that the properties are, in fact, read-only (which ensures that
- *  they don't have to be synchronized).
- *
- *  @author Howard Lewis Ship
- *  @since 2.0.4
- *
- **/
-
-public class ComponentMessages implements IMessages
-{
-    private Properties _properties;
-    private Locale _locale;
-
-    public ComponentMessages(Locale locale, Properties properties)
-    {
-        _locale = locale;
-        _properties = properties;
-    }
-
-    public String getMessage(String key, String defaultValue)
-    {
-        return _properties.getProperty(key, defaultValue);
-    }
-
-    public String getMessage(String key)
-    {
-        String result = _properties.getProperty(key);
-
-        if (result == null)
-            result = "[" + key.toUpperCase() + "]";
-
-        return result;
-    }
-
-    public String format(String key, Object argument1, Object argument2, Object argument3)
-    {
-        return format(key, new Object[] { argument1, argument2, argument3 });
-    }
-
-    public String format(String key, Object argument1, Object argument2)
-    {
-        return format(key, new Object[] { argument1, argument2 });
-    }
-
-    public String format(String key, Object argument)
-    {
-        return format(key, new Object[] { argument });
-    }
-
-    public String format(String key, Object[] arguments)
-    {
-        String pattern = getMessage(key);
-
-        // This ugliness is mandated for JDK 1.3 compatibility, which has a bug 
-        // in MessageFormat ... the
-        // pattern is applied in the constructor, using the system default Locale,
-        // regardless of what locale is later specified!
-        // It appears that the problem does not exist in JDK 1.4.
-
-        MessageFormat messageFormat = new MessageFormat("");
-        messageFormat.setLocale(_locale);
-        messageFormat.applyPattern(pattern);
-
-        int count = Tapestry.size(arguments);
-
-        for (int i = 0; i < count; i++)
-        {
-            if (arguments[i] instanceof Throwable)
-            {
-                Throwable t = (Throwable) arguments[i];
-                String message = t.getMessage();
-
-                if (Tapestry.isNonBlank(message))
-                    arguments[i] = message;
-                else
-                    arguments[i] = t.getClass().getName();
-            }
-        }
-
-        return messageFormat.format(arguments);
-    }
-
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/engine/DefaultComponentMessagesSource.java b/3.0.4/framework/src/org/apache/tapestry/engine/DefaultComponentMessagesSource.java
deleted file mode 100644
index 253c438..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/engine/DefaultComponentMessagesSource.java
+++ /dev/null
@@ -1,245 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.engine;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.URL;
-import java.util.HashMap;
-import java.util.Locale;
-import java.util.Map;
-import java.util.Properties;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.tapestry.ApplicationRuntimeException;
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.IMessages;
-import org.apache.tapestry.IResourceLocation;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.util.MultiKey;
-
-/**
- *  Global object (stored in the servlet context) that accesses
- *  localized properties for a component.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 2.0.4
- *
- **/
-
-public class DefaultComponentMessagesSource implements IComponentMessagesSource
-{
-    private static final Log LOG = LogFactory.getLog(DefaultComponentMessagesSource.class);
-
-    private Properties _emptyProperties = new Properties();
-
-    /**
-     *  Map of {@link Properties}, keyed on a {@link MultiKey} of
-     *  component specification path and locale.
-     * 
-     **/
-
-    private Map _cache = new HashMap();
-
-    /**
-     *  Returns an instance of {@link Properties} containing
-     *  the properly localized messages for the component,
-     *  in the {@link Locale} identified by the component's
-     *  containing page.
-     * 
-     **/
-
-    protected synchronized Properties getLocalizedProperties(IComponent component)
-    {
-        if (component == null)
-            throw new IllegalArgumentException(
-                Tapestry.format("invalid-null-parameter", "component"));
-
-        IResourceLocation specificationLocation =
-            component.getSpecification().getSpecificationLocation();
-        Locale locale = component.getPage().getLocale();
-
-        // Check to see if already in the cache
-
-        MultiKey key = buildKey(specificationLocation, locale);
-
-        Properties result = (Properties) _cache.get(key);
-
-        if (result != null)
-            return result;
-
-        // Not found, create it now.
-
-        result = assembleProperties(specificationLocation, locale);
-
-        _cache.put(key, result);
-
-        return result;
-    }
-
-    private static final String SUFFIX = ".properties";
-
-    private Properties assembleProperties(IResourceLocation baseResourceLocation, Locale locale)
-    {
-        boolean debug = LOG.isDebugEnabled();
-        if (debug)
-            LOG.debug("Assembling properties for " + baseResourceLocation + " " + locale);
-
-        String name = baseResourceLocation.getName();
-
-        int dotx = name.indexOf('.');
-        String baseName = name.substring(0, dotx);
-
-        String language = locale.getLanguage();
-        String country = locale.getCountry();
-        String variant = locale.getVariant();
-
-        Properties parent = (Properties) _cache.get(baseResourceLocation);
-
-        if (parent == null)
-        {
-            parent = readProperties(baseResourceLocation, baseName, null, null);
-
-            if (parent == null)
-                parent = _emptyProperties;
-
-            _cache.put(baseResourceLocation, parent);
-        }
-
-        Properties result = parent;
-
-        if (!Tapestry.isBlank(language))
-        {
-            Locale l = new Locale(language, "");
-            MultiKey key = buildKey(baseResourceLocation, l);
-
-            result = (Properties) _cache.get(key);
-
-            if (result == null)
-                result = readProperties(baseResourceLocation, baseName, l, parent);
-
-            _cache.put(key, result);
-
-            parent = result;
-        }
-        else
-            language = "";
-
-        if (Tapestry.isNonBlank(country))
-        {
-            Locale l = new Locale(language, country);
-            MultiKey key = buildKey(baseResourceLocation, l);
-
-            result = (Properties) _cache.get(key);
-
-            if (result == null)
-                result = readProperties(baseResourceLocation, baseName, l, parent);
-
-            _cache.put(key, result);
-
-            parent = result;
-        }
-        else
-            country = "";
-
-        if (Tapestry.isNonBlank(variant))
-        {
-            Locale l = new Locale(language, country, variant);
-            MultiKey key = buildKey(baseResourceLocation, l);
-
-            result = (Properties) _cache.get(key);
-
-            if (result == null)
-                result = readProperties(baseResourceLocation, baseName, l, parent);
-
-            _cache.put(key, result);
-        }
-
-        return result;
-    }
-
-    private MultiKey buildKey(IResourceLocation location, Locale locale)
-    {
-        return new MultiKey(new Object[] { location, locale.toString()}, false);
-    }
-
-    private Properties readProperties(
-        IResourceLocation baseLocation,
-        String baseName,
-        Locale locale,
-        Properties parent)
-    {
-        StringBuffer buffer = new StringBuffer(baseName);
-
-        if (locale != null)
-        {
-            buffer.append('_');
-            buffer.append(locale.toString());
-        }
-
-        buffer.append(SUFFIX);
-
-        IResourceLocation localized = baseLocation.getRelativeLocation(buffer.toString());
-
-        URL propertiesURL = localized.getResourceURL();
-
-        if (propertiesURL == null)
-            return parent;
-
-        Properties result = null;
-
-        if (parent == null)
-            result = new Properties();
-        else
-            result = new Properties(parent);
-
-        try
-        {
-            InputStream input = propertiesURL.openStream();
-
-            result.load(input);
-
-            input.close();
-        }
-        catch (IOException ex)
-        {
-            throw new ApplicationRuntimeException(
-                Tapestry.format("ComponentPropertiesStore.unable-to-read-input", propertiesURL),
-                ex);
-        }
-
-        return result;
-    }
-
-    /**
-     *  Clears the cache of read properties files.
-     * 
-     **/
-
-    public void reset()
-    {
-        _cache.clear();
-    }
-
-    public IMessages getMessages(IComponent component)
-    {
-        return new ComponentMessages(
-            component.getPage().getLocale(),
-            getLocalizedProperties(component));
-    }
-
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/engine/DefaultMonitorFactory.java b/3.0.4/framework/src/org/apache/tapestry/engine/DefaultMonitorFactory.java
deleted file mode 100644
index 328524f..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/engine/DefaultMonitorFactory.java
+++ /dev/null
@@ -1,38 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.engine;
-
-import org.apache.tapestry.request.RequestContext;
-
-/**
- * Implementation of {@link org.apache.tapestry.engine.IMonitorFactory}
- * that returns the {@link org.apache.tapestry.engine.NullMonitor}.
- *
- * @author Howard Lewis Ship
- * @version $Id$
- */
-public class DefaultMonitorFactory implements IMonitorFactory
-{
-	public static final IMonitorFactory SHARED = new DefaultMonitorFactory();
-	 
-    /**
-     * Returns {@link NullMonitor#SHARED}.
-     */
-    public IMonitor createMonitor(RequestContext context)
-    {
-        return NullMonitor.SHARED;
-    }
-
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/engine/DefaultScriptSource.java b/3.0.4/framework/src/org/apache/tapestry/engine/DefaultScriptSource.java
deleted file mode 100644
index 38ba857..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/engine/DefaultScriptSource.java
+++ /dev/null
@@ -1,106 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.engine;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import org.apache.tapestry.ApplicationRuntimeException;
-import org.apache.tapestry.IResourceLocation;
-import org.apache.tapestry.IResourceResolver;
-import org.apache.tapestry.IScript;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.script.ScriptParser;
-import org.apache.tapestry.util.xml.DocumentParseException;
-
-/**
- *  Provides basic access to scripts available on the classpath.  Scripts are cached in
- *  memory once parsed.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 1.0.2
- * 
- **/
-
-public class DefaultScriptSource implements IScriptSource
-{
-    private IResourceResolver _resolver;
-
-    private Map _cache = new HashMap();
-
-    public DefaultScriptSource(IResourceResolver resolver)
-    {
-        _resolver = resolver;
-    }
-
-    public synchronized void reset()
-    {
-        _cache.clear();
-    }
-
-    public synchronized IScript getScript(IResourceLocation scriptLocation)
-    {
-        IScript result = (IScript) _cache.get(scriptLocation);
-
-        if (result != null)
-            return result;
-
-        result = parse(scriptLocation);
-
-        _cache.put(scriptLocation, result);
-
-        return result;
-    }
-
-    private IScript parse(IResourceLocation location)
-    {
-        ScriptParser parser = new ScriptParser(_resolver);
-
-        try
-        {
-            return parser.parse(location);
-        }
-        catch (DocumentParseException ex)
-        {
-            throw new ApplicationRuntimeException(
-                Tapestry.format("DefaultScriptSource.unable-to-parse-script", location),
-                ex);
-        }
-    }
-
-    public String toString()
-    {
-        StringBuffer buffer = new StringBuffer("DefaultScriptSource@");
-        buffer.append(Integer.toHexString(hashCode()));
-
-        buffer.append('[');
-
-        if (_cache != null)
-        {
-            synchronized (_cache)
-            {
-                buffer.append(_cache.keySet());
-            }
-
-            buffer.append(", ");
-        }
-
-        buffer.append("]");
-
-        return buffer.toString();
-    }
-
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/engine/DefaultSpecificationSource.java b/3.0.4/framework/src/org/apache/tapestry/engine/DefaultSpecificationSource.java
deleted file mode 100644
index 96dd020..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/engine/DefaultSpecificationSource.java
+++ /dev/null
@@ -1,352 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.engine;
-
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.Set;
-
-import org.apache.commons.lang.builder.ToStringBuilder;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.tapestry.ApplicationRuntimeException;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.INamespace;
-import org.apache.tapestry.IResourceLocation;
-import org.apache.tapestry.IResourceResolver;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.parse.SpecificationParser;
-import org.apache.tapestry.resource.ClasspathResourceLocation;
-import org.apache.tapestry.spec.IApplicationSpecification;
-import org.apache.tapestry.spec.IComponentSpecification;
-import org.apache.tapestry.spec.ILibrarySpecification;
-import org.apache.tapestry.spec.LibrarySpecification;
-import org.apache.tapestry.util.IRenderDescription;
-import org.apache.tapestry.util.pool.Pool;
-import org.apache.tapestry.util.xml.DocumentParseException;
-
-/**
- *  Default implementation of {@link ISpecificationSource} that
- *  expects to use the normal class loader to locate component
- *  specifications from within the classpath.
- *
- * <p>Caches specifications in memory forever, or until {@link #reset()} is invoked.
- *
- * <p>An instance of this class acts like a singleton and is shared by multiple sessions,
- * so it must be threadsafe.
- *
- * @author Howard Lewis Ship
- * @version $Id$
- * 
- **/
-
-public class DefaultSpecificationSource implements ISpecificationSource, IRenderDescription
-{
-    private static final Log LOG = LogFactory.getLog(DefaultSpecificationSource.class);
-
-    /**
-     *  Key used to get and store {@link SpecificationParser} instances
-     *  from the Pool.
-     * 
-     *  @since 3.0
-     * 
-     **/
-
-    private static final String PARSER_POOL_KEY = "org.apache.tapestry.SpecificationParser";
-
-    private IResourceResolver _resolver;
-    private IApplicationSpecification _specification;
-
-    private INamespace _applicationNamespace;
-    private INamespace _frameworkNamespace;
-
-    /**
-     *  Contains previously parsed component specifications.
-     *
-     **/
-
-    private Map _componentCache = new HashMap();
-
-    /**
-     *  Contains previously parsed page specifications.
-     * 
-     *  @since 2.2
-     * 
-     **/
-
-    private Map _pageCache = new HashMap();
-
-    /**
-     *  Contains previously parsed library specifications, keyed
-     *  on specification resource path.
-     * 
-     *  @since 2.2
-     * 
-     **/
-
-    private Map _libraryCache = new HashMap();
-
-    /**
-     *  Contains {@link INamespace} instances, keyed on id (which will
-     *  be null for the application specification).
-     * 
-     **/
-
-    private Map _namespaceCache = new HashMap();
-
-    /**
-     *  Reference to the shared {@link org.apache.tapestry.util.pool.Pool}.
-     * 
-     *  @see org.apache.tapestry.IEngine#getPool()
-     * 
-     *  @since 3.0
-     * 
-     **/
-
-    private Pool _pool;
-
-    public DefaultSpecificationSource(
-        IResourceResolver resolver,
-        IApplicationSpecification specification,
-        Pool pool)
-    {
-        _resolver = resolver;
-        _specification = specification;
-        _pool = pool;
-    }
-
-    /**
-     *  Clears the specification cache.  This is used during debugging.
-     *
-     **/
-
-    public synchronized void reset()
-    {
-        _componentCache.clear();
-        _pageCache.clear();
-        _libraryCache.clear();
-        _namespaceCache.clear();
-
-        _applicationNamespace = null;
-        _frameworkNamespace = null;
-    }
-
-    protected IComponentSpecification parseSpecification(
-        IResourceLocation resourceLocation,
-        boolean asPage)
-    {
-        IComponentSpecification result = null;
-
-        if (LOG.isDebugEnabled())
-            LOG.debug("Parsing component specification " + resourceLocation);
-
-        SpecificationParser parser = getParser();
-
-        try
-        {
-            if (asPage)
-                result = parser.parsePageSpecification(resourceLocation);
-            else
-                result = parser.parseComponentSpecification(resourceLocation);
-        }
-        catch (DocumentParseException ex)
-        {
-            throw new ApplicationRuntimeException(
-                Tapestry.format(
-                    "DefaultSpecificationSource.unable-to-parse-specification",
-                    resourceLocation),
-                ex);
-        }
-        finally
-        {
-            discardParser(parser);
-        }
-
-        return result;
-    }
-
-    protected ILibrarySpecification parseLibrarySpecification(IResourceLocation resourceLocation)
-    {
-        if (LOG.isDebugEnabled())
-            LOG.debug("Parsing library specification " + resourceLocation);
-
-        try
-        {
-            return getParser().parseLibrarySpecification(resourceLocation);
-        }
-        catch (DocumentParseException ex)
-        {
-            throw new ApplicationRuntimeException(
-                Tapestry.format(
-                    "DefaultSpecificationSource.unable-to-parse-specification",
-                    resourceLocation),
-                ex);
-        }
-
-    }
-
-    public synchronized String toString()
-    {
-        ToStringBuilder builder = new ToStringBuilder(this);
-
-        builder.append("applicationNamespace", _applicationNamespace);
-        builder.append("frameworkNamespace", _frameworkNamespace);
-        builder.append("specification", _specification);
-
-        return builder.toString();
-    }
-
-    /** @since 1.0.6 **/
-
-    public synchronized void renderDescription(IMarkupWriter writer)
-    {
-        writer.print("DefaultSpecificationSource[");
-
-        writeCacheDescription(writer, "page", _pageCache);
-        writer.beginEmpty("br");
-        writer.println();
-
-        writeCacheDescription(writer, "component", _componentCache);
-        writer.print("]");
-        writer.println();
-    }
-
-    private void writeCacheDescription(IMarkupWriter writer, String name, Map cache)
-    {
-        Set keySet = cache.keySet();
-
-        writer.print(Tapestry.size(keySet));
-        writer.print(" cached ");
-        writer.print(name);
-        writer.print(" specifications:");
-
-        boolean first = true;
-
-        Iterator i = keySet.iterator();
-        while (i.hasNext())
-        {
-            // The keys are now IResourceLocation instances
-
-            Object key = i.next();
-
-            if (first)
-            {
-                writer.begin("ul");
-                first = false;
-            }
-
-            writer.begin("li");
-            writer.print(key.toString());
-            writer.end();
-        }
-
-        if (!first)
-            writer.end(); // <ul>
-    }
-
-    /**
-     *  Gets a component specification.
-     * 
-     *  @param resourceLocation the complete resource path to the specification.
-     *  @throws ApplicationRuntimeException if the specification cannot be obtained.
-     * 
-     **/
-
-    public synchronized IComponentSpecification getComponentSpecification(IResourceLocation resourceLocation)
-    {
-        IComponentSpecification result =
-            (IComponentSpecification) _componentCache.get(resourceLocation);
-
-        if (result == null)
-        {
-            result = parseSpecification(resourceLocation, false);
-
-            _componentCache.put(resourceLocation, result);
-        }
-
-        return result;
-    }
-
-    public synchronized IComponentSpecification getPageSpecification(IResourceLocation resourceLocation)
-    {
-        IComponentSpecification result = (IComponentSpecification) _pageCache.get(resourceLocation);
-
-        if (result == null)
-        {
-            result = parseSpecification(resourceLocation, true);
-
-            _pageCache.put(resourceLocation, result);
-        }
-
-        return result;
-    }
-
-    public synchronized ILibrarySpecification getLibrarySpecification(IResourceLocation resourceLocation)
-    {
-        ILibrarySpecification result = (LibrarySpecification) _libraryCache.get(resourceLocation);
-
-        if (result == null)
-        {
-            result = parseLibrarySpecification(resourceLocation);
-            _libraryCache.put(resourceLocation, result);
-        }
-
-        return result;
-    }
-
-    /** @since 2.2 **/
-
-    protected SpecificationParser getParser()
-    {
-        SpecificationParser result = (SpecificationParser) _pool.retrieve(PARSER_POOL_KEY);
-
-        if (result == null)
-            result = new SpecificationParser(_resolver);
-
-        return result;
-    }
-
-    /** @since 3.0 **/
-
-    protected void discardParser(SpecificationParser parser)
-    {
-        _pool.store(PARSER_POOL_KEY, parser);
-    }
-
-    public synchronized INamespace getApplicationNamespace()
-    {
-        if (_applicationNamespace == null)
-            _applicationNamespace = new Namespace(null, null, _specification, this);
-
-        return _applicationNamespace;
-    }
-
-    public synchronized INamespace getFrameworkNamespace()
-    {
-        if (_frameworkNamespace == null)
-        {
-            IResourceLocation frameworkLocation =
-                new ClasspathResourceLocation(_resolver, "/org/apache/tapestry/Framework.library");
-
-            ILibrarySpecification ls = getLibrarySpecification(frameworkLocation);
-
-            _frameworkNamespace = new Namespace(INamespace.FRAMEWORK_NAMESPACE, null, ls, this);
-        }
-
-        return _frameworkNamespace;
-    }
-
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/engine/DefaultTemplateSource.java b/3.0.4/framework/src/org/apache/tapestry/engine/DefaultTemplateSource.java
deleted file mode 100644
index 44765e1..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/engine/DefaultTemplateSource.java
+++ /dev/null
@@ -1,628 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.engine;
-
-import java.io.BufferedInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.net.URL;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Locale;
-import java.util.Map;
-
-import org.apache.commons.lang.builder.ToStringBuilder;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.tapestry.ApplicationRuntimeException;
-import org.apache.tapestry.IAsset;
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.IEngine;
-import org.apache.tapestry.ILocation;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.INamespace;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.IResourceLocation;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.parse.ComponentTemplate;
-import org.apache.tapestry.parse.ITemplateParserDelegate;
-import org.apache.tapestry.parse.TemplateParseException;
-import org.apache.tapestry.parse.TemplateParser;
-import org.apache.tapestry.parse.TemplateToken;
-import org.apache.tapestry.resolver.ComponentSpecificationResolver;
-import org.apache.tapestry.spec.IApplicationSpecification;
-import org.apache.tapestry.spec.IComponentSpecification;
-import org.apache.tapestry.util.DelegatingPropertySource;
-import org.apache.tapestry.util.IRenderDescription;
-import org.apache.tapestry.util.LocalizedPropertySource;
-import org.apache.tapestry.util.MultiKey;
-import org.apache.tapestry.util.PropertyHolderPropertySource;
-
-/**
- *  Default implementation of {@link ITemplateSource}.  Templates, once parsed,
- *  stay in memory until explicitly cleared.
- *
- *  <p>An instance of this class acts as a singleton shared by all sessions, so it
- *  must be threadsafe.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- * 
- **/
-
-public class DefaultTemplateSource implements ITemplateSource, IRenderDescription
-{
-    private static final Log LOG = LogFactory.getLog(DefaultTemplateSource.class);
-
-
-    // The name of the component/application/etc property that will be used to
-    // determine the encoding to use when loading the template
-         
-    private static final String TEMPLATE_ENCODING_PROPERTY_NAME = "org.apache.tapestry.template-encoding"; 
-
-    // Cache of previously retrieved templates.  Key is a multi-key of 
-    // specification resource path and locale (local may be null), value
-    // is the ComponentTemplate.
-
-    private Map _cache = Collections.synchronizedMap(new HashMap());
-
-    // Previously read templates; key is the IResourceLocation, value
-    // is the ComponentTemplate.
-
-    private Map _templates = Collections.synchronizedMap(new HashMap());
-
-    /**
-     *  Number of tokens (each template contains multiple tokens).
-     *
-     **/
-
-    private int _tokenCount;
-
-    private static final int BUFFER_SIZE = 2000;
-
-    private TemplateParser _parser;
-
-    /** @since 2.2 **/
-
-    private IResourceLocation _applicationRootLocation;
-
-    /** @since 3.0 **/
-
-    private ITemplateSourceDelegate _delegate;
-
-    /**
-     *  Clears the template cache.  This is used during debugging.
-     *
-     **/
-
-    public void reset()
-    {
-        _cache.clear();
-        _templates.clear();
-
-        _tokenCount = 0;
-    }
-
-    /**
-     *  Reads the template for the component.
-     *
-     *  <p>Returns null if the template can't be found.
-     * 
-     **/
-
-    public ComponentTemplate getTemplate(IRequestCycle cycle, IComponent component)
-    {
-        IComponentSpecification specification = component.getSpecification();
-        IResourceLocation specificationLocation = specification.getSpecificationLocation();
-
-        Locale locale = component.getPage().getLocale();
-
-        Object key = new MultiKey(new Object[] { specificationLocation, locale }, false);
-
-        ComponentTemplate result = searchCache(key);
-        if (result != null)
-            return result;
-
-        result = findTemplate(cycle, specificationLocation, component, locale);
-
-        if (result == null)
-        {
-            result = getTemplateFromDelegate(cycle, component, locale);
-
-            if (result != null)
-                return result;
-
-            String stringKey =
-                component.getSpecification().isPageSpecification()
-                    ? "DefaultTemplateSource.no-template-for-page"
-                    : "DefaultTemplateSource.no-template-for-component";
-
-            throw new ApplicationRuntimeException(
-                Tapestry.format(stringKey, component.getExtendedId(), locale),
-                component,
-                component.getLocation(),
-                null);
-        }
-
-        saveToCache(key, result);
-
-        return result;
-    }
-
-    private ComponentTemplate searchCache(Object key)
-    {
-        return (ComponentTemplate) _cache.get(key);
-    }
-
-    private void saveToCache(Object key, ComponentTemplate template)
-    {
-        _cache.put(key, template);
-
-    }
-
-    private ComponentTemplate getTemplateFromDelegate(
-        IRequestCycle cycle,
-        IComponent component,
-        Locale locale)
-    {
-        if (_delegate == null)
-        {
-            IEngine engine = cycle.getEngine();
-            IApplicationSpecification spec = engine.getSpecification();
-
-            if (spec.checkExtension(Tapestry.TEMPLATE_SOURCE_DELEGATE_EXTENSION_NAME))
-                _delegate =
-                    (ITemplateSourceDelegate) spec.getExtension(
-                        Tapestry.TEMPLATE_SOURCE_DELEGATE_EXTENSION_NAME,
-                        ITemplateSourceDelegate.class);
-            else
-                _delegate = NullTemplateSourceDelegate.getSharedInstance();
-
-        }
-
-        return _delegate.findTemplate(cycle, component, locale);
-    }
-
-    /**
-     *  Finds the template for the given component, using the following rules:
-     *  <ul>
-     *  <li>If the component has a $template asset, use that
-     *  <li>Look for a template in the same folder as the component
-     *  <li>If a page in the application namespace, search in the application root
-     *  <li>Fail!
-     *  </ul>
-     * 
-     *  @return the template, or null if not found
-     * 
-     **/
-
-    private ComponentTemplate findTemplate(
-        IRequestCycle cycle,
-        IResourceLocation location,
-        IComponent component,
-        Locale locale)
-    {
-        IAsset templateAsset = component.getAsset(TEMPLATE_ASSET_NAME);
-
-        if (templateAsset != null)
-            return readTemplateFromAsset(cycle, component, templateAsset);
-
-        String name = location.getName();
-        int dotx = name.lastIndexOf('.');
-        String templateBaseName = name.substring(0, dotx + 1) + getTemplateExtension(component);
-
-        ComponentTemplate result =
-            findStandardTemplate(cycle, location, component, templateBaseName, locale);
-
-        if (result == null
-            && component.getSpecification().isPageSpecification()
-            && component.getNamespace().isApplicationNamespace())
-            result = findPageTemplateInApplicationRoot(cycle, component, templateBaseName, locale);
-
-        return result;
-    }
-
-    private ComponentTemplate findPageTemplateInApplicationRoot(
-        IRequestCycle cycle,
-        IComponent component,
-        String templateBaseName,
-        Locale locale)
-    {
-        if (LOG.isDebugEnabled())
-            LOG.debug("Checking for " + templateBaseName + " in application root");
-
-        if (_applicationRootLocation == null)
-            _applicationRootLocation = Tapestry.getApplicationRootLocation(cycle);
-
-        IResourceLocation baseLocation =
-            _applicationRootLocation.getRelativeLocation(templateBaseName);
-        IResourceLocation localizedLocation = baseLocation.getLocalization(locale);
-
-        if (localizedLocation == null)
-            return null;
-
-        return getOrParseTemplate(cycle, localizedLocation, component);
-    }
-
-    /**
-     *  Reads an asset to get the template.
-     * 
-     **/
-
-    private ComponentTemplate readTemplateFromAsset(
-        IRequestCycle cycle,
-        IComponent component,
-        IAsset asset)
-    {
-        InputStream stream = asset.getResourceAsStream(cycle);
-
-        char[] templateData = null;
-
-        try
-        {
-            String encoding = getTemplateEncoding(cycle, component, null);
-            
-            templateData = readTemplateStream(stream, encoding);
-
-            stream.close();
-        }
-        catch (IOException ex)
-        {
-            throw new ApplicationRuntimeException(
-                Tapestry.format("DefaultTemplateSource.unable-to-read-template", asset),
-                ex);
-        }
-
-        IResourceLocation resourceLocation = asset.getResourceLocation();
-
-        return constructTemplateInstance(cycle, templateData, resourceLocation, component);
-    }
-
-    /**
-     *  Search for the template corresponding to the resource and the locale.
-     *  This may be in the template map already, or may involve reading and
-     *  parsing the template.
-     *
-     *  @return the template, or null if not found.
-     * 
-     **/
-
-    private ComponentTemplate findStandardTemplate(
-        IRequestCycle cycle,
-        IResourceLocation location,
-        IComponent component,
-        String templateBaseName,
-        Locale locale)
-    {
-        if (LOG.isDebugEnabled())
-            LOG.debug(
-                "Searching for localized version of template for "
-                    + location
-                    + " in locale "
-                    + locale.getDisplayName());
-
-        IResourceLocation baseTemplateLocation = location.getRelativeLocation(templateBaseName);
-
-        IResourceLocation localizedTemplateLocation = baseTemplateLocation.getLocalization(locale);
-
-        if (localizedTemplateLocation == null)
-            return null;
-
-        return getOrParseTemplate(cycle, localizedTemplateLocation, component);
-
-    }
-
-    /**
-     *  Returns a previously parsed template at the specified location (which must already
-     *  be localized).  If not already in the template Map, then the
-     *  location is parsed and stored into the templates Map, then returned.
-     * 
-     **/
-
-    private ComponentTemplate getOrParseTemplate(
-        IRequestCycle cycle,
-        IResourceLocation location,
-        IComponent component)
-    {
-
-        ComponentTemplate result = (ComponentTemplate) _templates.get(location);
-        if (result != null)
-            return result;
-
-        // Ok, see if it exists.
-
-        result = parseTemplate(cycle, location, component);
-
-        if (result != null)
-            _templates.put(location, result);
-
-        return result;
-    }
-
-    /**
-     *  Reads the template for the given resource; returns null if the
-     *  resource doesn't exist.  Note that this method is only invoked
-     *  from a synchronized block, so there shouldn't be threading
-     *  issues here.
-     *
-     **/
-
-    private ComponentTemplate parseTemplate(
-        IRequestCycle cycle,
-        IResourceLocation location,
-        IComponent component)
-    {
-        String encoding = getTemplateEncoding(cycle, component, location.getLocale());
-        
-        char[] templateData = readTemplate(location, encoding);
-        if (templateData == null)
-            return null;
-
-        return constructTemplateInstance(cycle, templateData, location, component);
-    }
-
-    /** 
-     *  This method is currently synchronized, because
-     *  {@link TemplateParser} is not threadsafe.  Another good candidate
-     *  for a pooling mechanism, especially because parsing a template
-     *  may take a while.
-     * 
-     **/
-
-    private synchronized ComponentTemplate constructTemplateInstance(
-        IRequestCycle cycle,
-        char[] templateData,
-        IResourceLocation location,
-        IComponent component)
-    {
-        if (_parser == null)
-            _parser = new TemplateParser();
-
-        ITemplateParserDelegate delegate = new TemplateParserDelegateImpl(component, cycle);
-
-        TemplateToken[] tokens;
-
-        try
-        {
-            tokens = _parser.parse(templateData, delegate, location);
-        }
-        catch (TemplateParseException ex)
-        {
-            throw new ApplicationRuntimeException(
-                Tapestry.format("DefaultTemplateSource.unable-to-parse-template", location),
-                ex);
-        }
-
-        if (LOG.isDebugEnabled())
-            LOG.debug("Parsed " + tokens.length + " tokens from template");
-
-        _tokenCount += tokens.length;
-
-        return new ComponentTemplate(templateData, tokens);
-    }
-
-    /**
-     *  Reads the template, given the complete path to the
-     *  resource.  Returns null if the resource doesn't exist.
-     *
-     **/
-
-    private char[] readTemplate(IResourceLocation location, String encoding)
-    {
-        if (LOG.isDebugEnabled())
-            LOG.debug("Reading template " + location);
-
-        URL url = location.getResourceURL();
-
-        if (url == null)
-        {
-            if (LOG.isDebugEnabled())
-                LOG.debug("Template does not exist.");
-
-            return null;
-        }
-
-        if (LOG.isDebugEnabled())
-            LOG.debug("Reading template from URL " + url);
-
-        InputStream stream = null;
-
-        try
-        {
-            stream = url.openStream();
-
-            return readTemplateStream(stream, encoding);
-        }
-        catch (IOException ex)
-        {
-            throw new ApplicationRuntimeException(
-                Tapestry.format("DefaultTemplateSource.unable-to-read-template", location),
-                ex);
-        }
-        finally
-        {
-            Tapestry.close(stream);
-        }
-
-    }
-
-    /**
-     *  Reads a Stream into memory as an array of characters.
-     *
-     **/
-
-    private char[] readTemplateStream(InputStream stream, String encoding) throws IOException
-    {
-        char[] charBuffer = new char[BUFFER_SIZE];
-        StringBuffer buffer = new StringBuffer();
-
-        InputStreamReader reader;
-        if (encoding != null)
-            reader = new InputStreamReader(new BufferedInputStream(stream), encoding);
-        else
-            reader = new InputStreamReader(new BufferedInputStream(stream));
-
-        try
-        {
-            while (true)
-            {
-                int charsRead = reader.read(charBuffer, 0, BUFFER_SIZE);
-
-                if (charsRead <= 0)
-                    break;
-
-                buffer.append(charBuffer, 0, charsRead);
-            }
-        }
-        finally
-        {
-            reader.close();
-        }
-
-        // OK, now reuse the charBuffer variable to
-        // produce the final result.
-
-        int length = buffer.length();
-
-        charBuffer = new char[length];
-
-        // Copy the character out of the StringBuffer and into the
-        // array.
-
-        buffer.getChars(0, length, charBuffer, 0);
-
-        return charBuffer;
-    }
-
-    public String toString()
-    {
-        ToStringBuilder builder = new ToStringBuilder(this);
-
-        builder.append("tokenCount", _tokenCount);
-
-        builder.append("templates", _templates.keySet());
-
-        return builder.toString();
-    }
-
-    /**
-     *  Checks for the {@link Tapestry#TEMPLATE_EXTENSION_PROPERTY} in the component's
-     *  specification, then in the component's namespace's specification.  Returns
-     *  {@link Tapestry#DEFAULT_TEMPLATE_EXTENSION} if not otherwise overriden.
-     * 
-     **/
-
-    private String getTemplateExtension(IComponent component)
-    {
-        String extension =
-            component.getSpecification().getProperty(Tapestry.TEMPLATE_EXTENSION_PROPERTY);
-
-        if (extension != null)
-            return extension;
-
-        extension =
-            component.getNamespace().getSpecification().getProperty(
-                Tapestry.TEMPLATE_EXTENSION_PROPERTY);
-
-        if (extension != null)
-            return extension;
-
-        return Tapestry.DEFAULT_TEMPLATE_EXTENSION;
-    }
-
-    /** @since 1.0.6 **/
-
-    public synchronized void renderDescription(IMarkupWriter writer)
-    {
-        writer.print("DefaultTemplateSource[");
-
-        if (_tokenCount > 0)
-        {
-            writer.print(_tokenCount);
-            writer.print(" tokens");
-        }
-
-        if (_cache != null)
-        {
-            boolean first = true;
-            Iterator i = _cache.entrySet().iterator();
-
-            while (i.hasNext())
-            {
-                if (first)
-                {
-                    writer.begin("ul");
-                    first = false;
-                }
-
-                Map.Entry e = (Map.Entry) i.next();
-                Object key = e.getKey();
-                ComponentTemplate template = (ComponentTemplate) e.getValue();
-
-                writer.begin("li");
-                writer.print(key.toString());
-                writer.print(" (");
-                writer.print(template.getTokenCount());
-                writer.print(" tokens)");
-                writer.println();
-                writer.end();
-            }
-
-            if (!first)
-            {
-                writer.end(); // <ul>
-                writer.beginEmpty("br");
-            }
-        }
-
-        writer.print("]");
-
-    }
-    
-    private String getTemplateEncoding(IRequestCycle cycle, IComponent component, Locale locale)
-    {
-        IPropertySource source = getComponentPropertySource(cycle, component);
-
-        if (locale != null)
-            source = new LocalizedPropertySource(locale, source);
-
-        return getTemplateEncodingProperty(source);
-    }
-    
-    private IPropertySource getComponentPropertySource(IRequestCycle cycle, IComponent component)
-    {
-        DelegatingPropertySource source = new DelegatingPropertySource();
-
-        // Search for the encoding property in the following order:
-        // First search the component specification
-        source.addSource(new PropertyHolderPropertySource(component.getSpecification()));
-
-        // Then search its library specification
-        source.addSource(new PropertyHolderPropertySource(component.getNamespace().getSpecification()));
-
-        // Then search the rest of the standard path
-        source.addSource(cycle.getEngine().getPropertySource());
-        
-        return source;
-    }
-    
-    private String getTemplateEncodingProperty(IPropertySource source)
-    {
-        return source.getPropertyValue(TEMPLATE_ENCODING_PROPERTY_NAME);
-    }
-    
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/engine/DirectService.java b/3.0.4/framework/src/org/apache/tapestry/engine/DirectService.java
deleted file mode 100644
index ce77ac2..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/engine/DirectService.java
+++ /dev/null
@@ -1,181 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.engine;
-
-import java.io.IOException;
-
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpSession;
-
-import org.apache.tapestry.ApplicationRuntimeException;
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.IDirect;
-import org.apache.tapestry.IPage;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.StaleSessionException;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.request.RequestContext;
-import org.apache.tapestry.request.ResponseOutputStream;
-
-/**
- *  Implementation of the direct service, which encodes the page and component id in
- *  the service context, and passes application-defined parameters as well.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 1.0.9
- *
- **/
-
-public class DirectService extends AbstractService
-{
-    /**
-     *  Encoded into URL if engine was stateful.
-     * 
-     *  @since 3.0
-     **/
-
-    private static final String STATEFUL_ON = "1";
-
-    /**
-     *  Encoded into URL if engine was not stateful.
-     * 
-     *  @since 3.0
-     **/
-
-    private static final String STATEFUL_OFF = "0";
-
-    public ILink getLink(IRequestCycle cycle, IComponent component, Object[] parameters)
-    {
-
-        // New since 1.0.1, we use the component to determine
-        // the page, not the cycle.  Through the use of tricky
-        // things such as Block/InsertBlock, it is possible 
-        // that a component from a page different than
-        // the response page will render.
-        // In 1.0.6, we start to record *both* the render page
-        // and the component page (if different), as the extended
-        // context.
-
-        IPage renderPage = cycle.getPage();
-        IPage componentPage = component.getPage();
-
-        boolean complex = renderPage != componentPage;
-
-        String[] context = complex ? new String[4] : new String[3];
-
-        int i = 0;
-
-        String stateful = cycle.getEngine().isStateful() ? STATEFUL_ON : STATEFUL_OFF;
-
-        context[i++] = stateful;
-
-        if (complex)
-            context[i++] = renderPage.getPageName();
-
-        context[i++] = componentPage.getPageName();
-        context[i++] = component.getIdPath();
-
-        return constructLink(cycle, Tapestry.DIRECT_SERVICE, context, parameters, true);
-    }
-
-    public void service(
-        IEngineServiceView engine,
-        IRequestCycle cycle,
-        ResponseOutputStream output)
-        throws ServletException, IOException
-    {
-        IDirect direct;
-        int count = 0;
-        String componentPageName;
-        IPage componentPage;
-        RequestContext requestContext = cycle.getRequestContext();
-        String[] serviceContext = getServiceContext(requestContext);
-
-        if (serviceContext != null)
-            count = serviceContext.length;
-
-        if (count != 3 && count != 4)
-            throw new ApplicationRuntimeException(
-                Tapestry.getMessage("DirectService.context-parameters"));
-
-        boolean complex = count == 4;
-
-        int i = 0;
-        String stateful = serviceContext[i++];
-        String pageName = serviceContext[i++];
-
-        if (complex)
-            componentPageName = serviceContext[i++];
-        else
-            componentPageName = pageName;
-
-        String componentPath = serviceContext[i++];
-
-        IPage page = cycle.getPage(pageName);
-
-        cycle.activate(page);
-
-        if (complex)
-            componentPage = cycle.getPage(componentPageName);
-        else
-            componentPage = page;
-
-        IComponent component = componentPage.getNestedComponent(componentPath);
-
-        try
-        {
-            direct = (IDirect) component;
-        }
-        catch (ClassCastException ex)
-        {
-            throw new ApplicationRuntimeException(
-                Tapestry.format("DirectService.component-wrong-type", component.getExtendedId()),
-                component,
-                null,
-                ex);
-        }
-
-        // Check for a StateSession only the session was stateful when
-        // the Gesture was created.
-
-        if (stateful.equals(STATEFUL_ON) && direct.isStateful())
-        {
-            HttpSession session = cycle.getRequestContext().getSession();
-
-            if (session == null || session.isNew())
-                throw new StaleSessionException(
-                    Tapestry.format(
-                        "DirectService.stale-session-exception",
-                        direct.getExtendedId()),
-                    direct.getPage());
-        }
-
-        Object[] parameters = getParameters(cycle);
-
-        cycle.setServiceParameters(parameters);
-        direct.trigger(cycle);
-
-        // Render the response.  This will be the response page (the first element in the context)
-        // unless the direct (or its delegate) changes it.
-
-        engine.renderResponse(cycle, output);
-    }
-
-    public String getName()
-    {
-        return Tapestry.DIRECT_SERVICE;
-    }
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/engine/EngineServiceLink.java b/3.0.4/framework/src/org/apache/tapestry/engine/EngineServiceLink.java
deleted file mode 100644
index c766048..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/engine/EngineServiceLink.java
+++ /dev/null
@@ -1,250 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.engine;
-
-import java.io.UnsupportedEncodingException;
-import java.util.ArrayList;
-import java.util.List;
-
-import org.apache.commons.codec.net.URLCodec;
-import org.apache.commons.lang.builder.ToStringBuilder;
-import org.apache.tapestry.ApplicationRuntimeException;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.request.RequestContext;
-
-/**
- *  A EngineServiceLink represents a possible action within the client web browser;
- *  either clicking a link or submitting a form, which is constructed primarily
- *  from the {@link org.apache.tapestry.IEngine#getServletPath() servlet path},
- *  with some additional query parameters.  A full URL for the EngineServiceLink
- *  can be generated, or the query parameters for the EngineServiceLink can be extracted
- *  (separately from the servlet path).  The latter case is used when submitting
- *  constructing {@link org.apache.tapestry.form.Form forms}.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 3.0
- * 
- **/
-
-public class EngineServiceLink implements ILink
-{
-    private static final int DEFAULT_HTTP_PORT = 80;
-    private static final URLCodec _urlCodec = new URLCodec();
-
-    private IRequestCycle _cycle;
-    private String _service;
-    private String[] _parameters;
-    private boolean _stateful;
-
-    /**
-     *  Creates a new EngineServiceLink.  A EngineServiceLink always names a service to be activated
-     *  by the link, has an optional list of service context strings,
-     *  an optional list of service parameter strings and may be stateful
-     *  or stateless.
-     * 
-     *  <p>ServiceLink parameter strings may contain any characters.
-     * 
-     *  <p>ServiceLink context strings must be URL safe, and may not contain
-     *  slash ('/') characters.  Typically, only letters, numbers and simple
-     *  punctuation ('.', '-', '_', ':') is recommended (no checks are currently made,
-     *  however).  Context strings are generally built from page names
-     *  and component ids, which are limited to safe characters.
-     *  
-     *  @param cycle The {@link IRequestCycle} the EngineServiceLink is to be created for.
-     *  @param serviceName The name of the service to be invoked by the EngineServiceLink.
-     *  @param serviceContext an optional array of strings to be provided
-     *  to the service to provide a context for executing the service.  May be null
-     *  or empty.  <b>Note: copied, not retained.</b>
-     *  @param serviceParameters An array of parameters, may be 
-     *  null or empty. <b>Note: retained, not copied.</b>
-     *  @param stateful if true, the service which generated the EngineServiceLink
-     *  is stateful and expects that the final URL will be passed through
-     *  {@link IRequestCycle#encodeURL(String)}.
-     **/
-
-    public EngineServiceLink(
-        IRequestCycle cycle,
-        String serviceName,
-        String[] serviceContext,
-        String[] serviceParameters,
-        boolean stateful)
-    {
-        _cycle = cycle;
-        _service = constructServiceValue(serviceName, serviceContext);
-        _parameters = serviceParameters;
-        _stateful = stateful;
-    }
-
-    private String constructServiceValue(String serviceName, String[] serviceContext)
-    {
-        int count = Tapestry.size(serviceContext);
-
-        if (count == 0)
-            return serviceName;
-
-        StringBuffer buffer = new StringBuffer(serviceName);
-
-        for (int i = 0; i < count; i++)
-        {
-            buffer.append('/');
-
-            buffer.append(serviceContext[i]);
-        }
-
-        return buffer.toString();
-    }
-
-    public String getURL()
-    {
-        return getURL(null, true);
-    }
-
-    public String getURL(String anchor, boolean includeParameters)
-    {
-        return constructURL(new StringBuffer(), anchor, includeParameters);
-    }
-
-    public String getAbsoluteURL()
-    {
-        return getAbsoluteURL(null, null, 0, null, true);
-    }
-
-    public String getAbsoluteURL(
-        String scheme,
-        String server,
-        int port,
-        String anchor,
-        boolean includeParameters)
-    {
-        StringBuffer buffer = new StringBuffer();
-        RequestContext context = _cycle.getRequestContext();
-
-        if (scheme == null)
-            scheme = context.getScheme();
-
-        buffer.append(scheme);
-        buffer.append("://");
-
-        if (server == null)
-            server = context.getServerName();
-
-        buffer.append(server);
-
-        if (port == 0)
-            port = context.getServerPort();
-
-        if (!(scheme.equals("http") && port == DEFAULT_HTTP_PORT))
-        {
-            buffer.append(':');
-            buffer.append(port);
-        }
-
-        // Add the servlet path and the rest of the URL & query parameters.
-        // The servlet path starts with a leading slash.
-
-        return constructURL(buffer, anchor, includeParameters);
-    }
-
-    private String constructURL(StringBuffer buffer, String anchor, boolean includeParameters)
-    {
-        buffer.append(_cycle.getEngine().getServletPath());
-
-        if (includeParameters)
-        {
-            buffer.append('?');
-            buffer.append(Tapestry.SERVICE_QUERY_PARAMETER_NAME);
-            buffer.append('=');
-            buffer.append(_service);
-
-            int count = Tapestry.size(_parameters);
-
-            for (int i = 0; i < count; i++)
-            {
-                buffer.append('&');
-
-                buffer.append(Tapestry.PARAMETERS_QUERY_PARAMETER_NAME);
-                buffer.append('=');
-
-                String encoding = _cycle.getEngine().getOutputEncoding();
-                try
-                {
-                    String encoded = _urlCodec.encode(_parameters[i], encoding);
-                    buffer.append(encoded);
-                }
-                catch (UnsupportedEncodingException e)
-                {
-                    throw new ApplicationRuntimeException(
-                        Tapestry.format("illegal-encoding", encoding),
-                        e);
-                }
-            }
-        }
-
-        if (anchor != null)
-        {
-            buffer.append('#');
-            buffer.append(anchor);
-        }
-
-        String result = buffer.toString();
-
-        if (_stateful)
-            result = _cycle.encodeURL(result);
-
-        return result;
-    }
-
-    public String[] getParameterNames()
-    {
-        List list = new ArrayList();
-
-        list.add(Tapestry.SERVICE_QUERY_PARAMETER_NAME);
-
-        if (Tapestry.size(_parameters) != 0)
-            list.add(Tapestry.PARAMETERS_QUERY_PARAMETER_NAME);
-
-        return (String[]) list.toArray(new String[list.size()]);
-    }
-
-    public String[] getParameterValues(String name)
-    {
-        if (name.equals(Tapestry.SERVICE_QUERY_PARAMETER_NAME))
-        {
-            return new String[] { _service };
-        }
-
-        if (name.equals(Tapestry.PARAMETERS_QUERY_PARAMETER_NAME))
-        {
-            return _parameters;
-        }
-
-        throw new IllegalArgumentException(
-            Tapestry.format("EngineServiceLink.unknown-parameter-name", name));
-    }
-
-    public String toString()
-    {
-        ToStringBuilder builder = new ToStringBuilder(this);
-
-        builder.append("service", _service);
-        builder.append("parameters", _parameters);
-        builder.append("stateful", _stateful);
-
-        return builder.toString();
-    }
-
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/engine/ExternalService.java b/3.0.4/framework/src/org/apache/tapestry/engine/ExternalService.java
deleted file mode 100644
index 9e0790f..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/engine/ExternalService.java
+++ /dev/null
@@ -1,185 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.engine;
-
-import java.io.IOException;
-
-import javax.servlet.ServletException;
-
-import org.apache.tapestry.ApplicationRuntimeException;
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.IExternalPage;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.request.ResponseOutputStream;
-
-/**
- * The external service enables external applications
- * to reference Tapestry pages via a URL. Pages which can be referenced
- * by the external service must implement the {@link IExternalPage}
- * interface. The external service enables the bookmarking of pages.
- * 
- * <p>
- * The external service may also be used by the Tapestry JSP taglibrary
- * ({@link org.apache.tapestry.jsp.ExternalURLTag} and {@link org.apache.tapestry.jsp.ExternalTag}).
- * 
- * <p> 
- * You can try and second guess the URL format used by Tapestry. 
- * The default URL format for the external service is:
- * <blockquote>
- * <tt>http://localhost/app?service=external/<i>[Page Name]</i>&amp;sp=[Param 0]&amp;sp=[Param 1]...</tt>
- * </blockquote>
- * For example to view the "ViewCustomer" page the service parameters 5056 (customer ID) and
- * 309 (company ID) the external service URL would be:
- * <blockquote>
- * <tt>http://localhost/myapp?service=external&amp;context=<b>ViewCustomer</b>&amp;sp=<b>5056</b>&amp;sp=<b>302</b></tt>
- * </blockquote>
- * In this example external service will get a "ViewCustomer" page and invoke the 
- * {@link IExternalPage#activateExternalPage(Object[], IRequestCycle)} method with the parameters:  
- * Object[] { new Integer(5056), new Integer(302) }.
- * <p>
- * Note service parameters (sp) need to be prefixed by valid
- * {@link org.apache.tapestry.util.io.DataSqueezer} adaptor char. These adaptor chars are automatically provided in
- * URL's created by the <tt>buildGesture()</tt> method. However if you hand coded an external 
- * service URL you will need to ensure valid prefix chars are present.
- * <p>
- * <table border="1" cellpadding="2">
- *  <tr>
- *   <th>Prefix char(s)</th><th>Mapped Java Type</th>
- *  </tr>
- *  <tr>
- *   <td>&nbsp;TF</td><td>&nbsp;boolean</td>
- *  </tr>
- *  <tr>
- *   <td>&nbsp;b</td><td>&nbsp;byte</td>
- *  </tr>
- *  <tr>
- *   <td>&nbsp;c</td><td>&nbsp;char</td>
- *  </tr>
- *  <tr>
- *   <td>&nbsp;d</td><td>&nbsp;double</td>
- *  </tr>
- *  <tr>
- *   <td>&nbsp;-0123456789</td><td>&nbsp;integer</td>
- *  </tr>
- *  <tr>
- *   <td>&nbsp;l</td><td>&nbsp;long</td>
- *  </tr>
- *  <tr>
- *   <td>&nbsp;S</td><td>&nbsp;String</td>
- *  </tr>
- *  <tr>
- *   <td>&nbsp;s</td><td>&nbsp;short</td>
- *  </tr>
- *  <tr>
- *   <td>&nbsp;other chars</td>
- *   <td>&nbsp;<tt>String</tt> without truncation of first char</td>
- *  </tr>
- * <table>
- *  <p>
- *  <p>
- *  A good rule of thumb is to keep the information encoded in the URL short and simple, and restrict it
- *  to just Strings and Integers.  Integers can be encoded as-is.  Prefixing all Strings with the letter 'S'
- *  will ensure that they are decoded properly.  Again, this is only relevant if an 
- *  {@link org.apache.tapestry.IExternalPage} is being referenced from static HTML or JSP and the
- *  URL must be assembled in user code ... when the URL is generated by Tapestry, it is automatically
- *  created with the correct prefixes and encodings (as with any other service).
- * 
- * @see org.apache.tapestry.IExternalPage
- * @see org.apache.tapestry.jsp.ExternalTag
- * @see org.apache.tapestry.jsp.ExternalURLTag
- *
- * @author Howard Lewis Ship
- * @author Malcolm Edgar
- * @since 2.2
- *  
- **/
-
-public class ExternalService extends AbstractService
-{
-
-  /**
-   *  Builds a URL for a service.  This is performed during the
-   *  rendering phase of one request cycle and bulds URLs that will
-   *  invoke activity in a subsequent request cycle.
-   *
-   *  @param cycle Defines the request cycle being processed.
-   *  @param component The component requesting the URL.  Generally, the
-   *  service context is established from the component.
-   *  @param parameters Additional parameters specific to the
-   *  component requesting the EngineServiceLink.
-   *  @return The URL for the service.  The URL always be encoded when it is returned.
-   *
-   **/
-  
-    public ILink getLink(IRequestCycle cycle, IComponent component, Object[] parameters)
-    {
-        if (parameters == null || parameters.length == 0)
-            throw new ApplicationRuntimeException(
-                Tapestry.format("service-requires-parameters", Tapestry.EXTERNAL_SERVICE));
-
-        String pageName = (String) parameters[0];
-        String[] context = new String[] { pageName };
-
-        Object[] pageParameters = new Object[parameters.length - 1];
-        System.arraycopy(parameters, 1, pageParameters, 0, parameters.length - 1);
-
-        return constructLink(cycle, Tapestry.EXTERNAL_SERVICE, context, pageParameters, true);
-    }
-
-    public void service(
-        IEngineServiceView engine,
-        IRequestCycle cycle,
-        ResponseOutputStream output)
-        throws ServletException, IOException
-    {
-        IExternalPage page = null;
-
-        String[] context = getServiceContext(cycle.getRequestContext());
-
-        if (context == null || context.length != 1)
-            throw new ApplicationRuntimeException(
-                Tapestry.format("service-single-context-parameter", Tapestry.EXTERNAL_SERVICE));
-
-        String pageName = context[0];
-
-        try
-        {
-            page = (IExternalPage) cycle.getPage(pageName);
-        }
-        catch (ClassCastException ex)
-        {
-            throw new ApplicationRuntimeException(
-                Tapestry.format("ExternalService.page-not-compatible", pageName),
-                ex);
-        }
-
-        Object[] parameters = getParameters(cycle);
-
-        cycle.setServiceParameters(parameters);
-
-        cycle.activate(page);
-
-        page.activateExternalPage(parameters, cycle);
-
-        // Render the response.
-        engine.renderResponse(cycle, output);
-    }
-
-    public String getName()
-    {
-        return Tapestry.EXTERNAL_SERVICE;
-    }
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/engine/HomeService.java b/3.0.4/framework/src/org/apache/tapestry/engine/HomeService.java
deleted file mode 100644
index 50d6c33..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/engine/HomeService.java
+++ /dev/null
@@ -1,71 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.engine;
-
-import java.io.IOException;
-
-import javax.servlet.ServletException;
-
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.IEngine;
-import org.apache.tapestry.IPage;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.request.ResponseOutputStream;
-
-/**
- *  An implementation of the home service that renders the Home page.
- *  This is the most likely candidate for overriding ... for example,
- *  to select the page to render based on known information about the
- *  user (stored as a cookie).
- * 
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 1.0.9
- *
- **/
-
-public class HomeService extends AbstractService
-{
-
-    public ILink getLink(IRequestCycle cycle, IComponent component, Object[] parameters)
-    {
-        if (Tapestry.size(parameters) != 0)
-            throw new IllegalArgumentException(
-                Tapestry.format("service-no-parameters", Tapestry.HOME_SERVICE));
-
-        return constructLink(cycle, Tapestry.HOME_SERVICE, null, null, true);
-    }
-
-    public void service(
-        IEngineServiceView engine,
-        IRequestCycle cycle,
-        ResponseOutputStream output)
-        throws ServletException, IOException
-    {
-        IPage home = cycle.getPage(IEngine.HOME_PAGE);
-
-        cycle.activate(home);
-
-        engine.renderResponse(cycle, output);
-    }
-
-    public String getName()
-    {
-        return Tapestry.HOME_SERVICE;
-    }
-
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/engine/IComponentClassEnhancer.java b/3.0.4/framework/src/org/apache/tapestry/engine/IComponentClassEnhancer.java
deleted file mode 100644
index 03fe4d2..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/engine/IComponentClassEnhancer.java
+++ /dev/null
@@ -1,60 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.engine;
-
-import org.apache.tapestry.spec.IComponentSpecification;
-
-/**
- *
- *  A provider of enhanced classes, classes with new methods 
- *  and new attributes, and possibly, implementing new
- *  Java interfaces.  The primary use of class enhancement is to
- *  automate the creation of transient and persistant properties.
- * 
- *  <p>
- *  Implementations of this interface must be threadsafe.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 3.0
- * 
- **/
-
-public interface IComponentClassEnhancer
-{
-	/**
-	 *  Clears all cached data for the enhancer; this includes references to
-	 *  enhanced classes.
-	 * 
-	 **/
-	
-	public void reset();
-	
-	/**
-	 *  Used to access the class for a given component (or page).  Returns the
-	 *  specified class, or an enhanced version of the class if the
-	 *  component requires enhancement.
-	 * 
-	 *  @param specification the specification for the component
-	 *  @param className the name of base class to enhance, as extracted
-	 *  from the specification (or possibly, from a default).
-	 * 
-	 *  @throws org.apache.tapestry.ApplicationRuntimeException if the class does not exist, is invalid,
-	 *  or may not be enhanced.
-	 * 
-	 **/
-	
-	public Class getEnhancedClass(IComponentSpecification specification, String className);
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/engine/IComponentMessagesSource.java b/3.0.4/framework/src/org/apache/tapestry/engine/IComponentMessagesSource.java
deleted file mode 100644
index ce6e061..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/engine/IComponentMessagesSource.java
+++ /dev/null
@@ -1,40 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.engine;
-
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.IMessages;
-
-/**
- *  Defines an object that can provide a component with its
- *  {@link org.apache.tapestry.IMessages}.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 2.0.4
- *
- **/
-
-public interface IComponentMessagesSource
-{
-	public IMessages getMessages(IComponent component);
-	
-	/**
-	 *  Clears all cached information for the source.
-	 * 
-	 **/
-	
-	public void reset();
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/engine/IEngineService.java b/3.0.4/framework/src/org/apache/tapestry/engine/IEngineService.java
deleted file mode 100644
index 62d7a15..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/engine/IEngineService.java
+++ /dev/null
@@ -1,85 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.engine;
-
-import java.io.IOException;
-
-import javax.servlet.ServletException;
-
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.request.ResponseOutputStream;
-
-/**
- *  A service, provided by the {@link org.apache.tapestry.IEngine}, for its pages and/or components.
- *  Services are
- *  responsible for constructing {@link EngineServiceLink}s (an encoding of URLs)
- *  to represent dynamic application behavior, and for
- *  parsing those URLs when a subsequent request involves them.
- *
- *  @see org.apache.tapestry.IEngine#getService(String)
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- * 
- **/
-
-public interface IEngineService
-{
-    /**
-     *  Builds a URL for a service.  This is performed during the
-     *  rendering phase of one request cycle and bulds URLs that will
-     *  invoke activity in a subsequent request cycle.
-     *
-     *  @param cycle Defines the request cycle being processed.
-     *  @param component The component requesting the URL.  Generally, the
-     *  service context is established from the component.
-     *  @param parameters Additional parameters specific to the
-     *  component requesting the EngineServiceLink.
-     *  @return The URL for the service.  The URL will have to be encoded
-     *  via {@link javax.servlet.http.HttpServletResponse#encodeURL(java.lang.String)}.
-     *
-     **/
-
-    public ILink getLink(IRequestCycle cycle, IComponent component, Object[] parameters);
-
-    /**
-     *  Perform the service, interpreting the URL (from the
-     *  {@link javax.servlet.http.HttpServletRequest}) 
-     *  responding appropriately, and
-     *  rendering a result page.
-     *
-     *
-     *  @see org.apache.tapestry.IEngine#service(org.apache.tapestry.request.RequestContext)
-     *  @param engine a view of the {@link org.apache.tapestry.IEngine} with additional methods needed by services
-     *  @param cycle the incoming request
-     *  @param output stream to which output should ultimately be directed
-     * 
-     **/
-
-    public void service(
-        IEngineServiceView engine,
-        IRequestCycle cycle,
-        ResponseOutputStream output)
-        throws ServletException, IOException;
-
-    /**
-     *  Returns the name of the service.
-     *
-     *  @since 1.0.1
-     **/
-
-    public String getName();
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/engine/IEngineServiceView.java b/3.0.4/framework/src/org/apache/tapestry/engine/IEngineServiceView.java
deleted file mode 100644
index 9a612e8..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/engine/IEngineServiceView.java
+++ /dev/null
@@ -1,78 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.engine;
-
-import java.io.IOException;
-
-import javax.servlet.ServletException;
-
-import org.apache.tapestry.IEngine;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.request.ResponseOutputStream;
-
-/**
- *  Additional methods implemented by the engine that are 
- *  exposed to {@link IEngineService engine services}.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 1.0.9
- *
- */
-
-public interface IEngineServiceView extends IEngine
-{
-    /**
-     *  Invoked by a service to force the page selected by the {@link IRequestCycle}
-     *  to be renderred.  This takes care of a number of bookkeeping issues, such
-     *  as committing changes in page recorders.
-     * 
-     **/
-
-    public void renderResponse(IRequestCycle cycle, ResponseOutputStream output)
-        throws ServletException, IOException;
-
-    /**
-     *  Invoked to restart the application from start; this most frequently follows
-     *  some kind of catastrophic failure.  This will invalidate any {@link javax.servlet.http.HttpSession}
-     *  and force a redirect to the application servlet (i.e., invoking the home service
-     *  in a subsequent request cycle).
-     * 
-     **/
-
-    public void restart(IRequestCycle cycle) throws IOException;
-
-    /**
-     *  Invoked (typically by the reset service) to clear all cached data known
-     *  to the engine.  This includes 
-     *  pages, templates, helper beans, specifications,
-     *  localized strings, etc., and
-     *  is used during debugging.
-     * 
-     **/
-
-    public void clearCachedData();
-
-    /**
-     *  Writes a detailed report of the exception to <code>System.err</code>.
-     *  This is invoked by services that can't write an HTML description
-     *  of the error because they don't provide text/html content (such as
-     *  an asset that creates an image).
-     *
-     *  @since 1.0.10
-     */
-
-    public void reportException(String reportTitle, Throwable ex);
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/engine/ILink.java b/3.0.4/framework/src/org/apache/tapestry/engine/ILink.java
deleted file mode 100644
index 67f6a21..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/engine/ILink.java
+++ /dev/null
@@ -1,111 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.engine;
-
-/**
- *  Define a link that may be generated as part of a page render.  The vast majority
- *  of links are tied to {@link IEngineService services} and are, in
- *  fact, callbacks.  A small number, such as those generated by
- *  {@link org.apache.tapestry.link.GenericLink} component, are to arbitrary locations.
- *  In addition, ILink differentiates between the path portion of the link, and any
- *  query parameters encoded into a link, primarily to benefit {@link org.apache.tapestry.form.Form},
- *  which needs to encode the query parameters as hidden form fields.
- *
- *  <p>
- *  In addition, an ILink is responsible for
- *  passing constructed URLs through
- *  {@link org.apache.tapestry.IRequestCycle#encodeURL(String)}
- *  as needed.
- * 
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 3.0
- * 
- **/
-
-public interface ILink
-{
-	/**
-	 *  Returns the relative URL as a String.  A relative
-	 *  URL may include a leading slash, but omits
-	 *  the scheme, host and port portions of a full URL.
-	 *  
-	 *  @return the relative URL, with no anchor, but including
-	 *  query parameters.
-	 * 
-	 **/
-	
-	public String getURL();
-	
-    /**
-     *  Returns the relative URL as a String.  This is used
-     *  for most links.
-     * 
-     *  @param anchor if not null, appended to the URL
-     *  @param includeParameters if true, parameters are included
-     * 
-     **/
-
-    public String getURL(String anchor, boolean includeParameters);
-
-	/**
-	 *  Returns the absolute URL as a String, using
-	 *  default scheme, server and port, including
-	 *  parameters, and no anchor.
-	 * 
-	 **/
-	
-	public String getAbsoluteURL();
-
-    /**
-     *  Returns the absolute URL as a String.  
-     * 
-     *  @param scheme if not null, overrides the default scheme.
-     *  @param server if not null, overrides the default server
-     *  @param port if non-zero, overrides the default port
-     *  @param anchor if not null, appended to the URL
-     *  @param includeParameters if true, parameters are included
-     * 
-     **/
-
-    public String getAbsoluteURL(
-        String scheme,
-        String server,
-        int port,
-        String anchor,
-        boolean includeParameters);
-
-    /**
-     * 
-     *  Returns an array of parameters names (in
-     *  no specified order).
-     * 
-     *  @see #getParameterValues(String)
-     * 
-     **/
-
-    public String[] getParameterNames();
-
-    /**
-     *  Returns the values for the named parameter.
-     *  
-     *  @throws IllegalArgumentException if the
-     *  link does not define values for the
-     *  specified name.
-     * 
-     **/
-
-    public String[] getParameterValues(String name);
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/engine/IMonitor.java b/3.0.4/framework/src/org/apache/tapestry/engine/IMonitor.java
deleted file mode 100644
index 259db5b..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/engine/IMonitor.java
+++ /dev/null
@@ -1,121 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.engine;
-
-/**
- *  Basic support for application monitoring and metrics.  
- *  This interface defines events; the implementation
- *  decides what to do with them (such as record them to a database).
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- * 
- **/
-
-public interface IMonitor
-{
-	/**
-	 *  Invoked before constructing a page.
-	 *
-	 **/
-
-	public void pageCreateBegin(String pageName);
-
-	/**
-	 *  Invoked after successfully constructing a page and all of its components.
-	 *
-	 **/
-
-	public void pageCreateEnd(String pageName);
-
-	/**
-	 *  Invoked when a page is loaded.  This includes time to locate or create an instance
-	 *  of the page and rollback its state (to any previously recorded value).
-	 *
-	 **/
-
-	public void pageLoadBegin(String pageName);
-
-	/**
-	 *  Invoked once a page is completely loaded and rolled back to its prior state.
-	 *
-	 **/
-
-	public void pageLoadEnd(String pageName);
-
-	/**
-	 *  Invoked before a page render begins.
-	 *
-	 **/
-
-	public void pageRenderBegin(String pageName);
-
-	/**
-	 *  Invoked after a page has succesfully rendered.
-	 *
-	 **/
-
-	public void pageRenderEnd(String pageName);
-
-	/**
-	 *  Invoked before a page rewind (to respond to an action) begins.
-	 *
-	 **/
-
-	public void pageRewindBegin(String pageName);
-
-	/**
-	 *  Invoked after a page has succesfully been rewound (which includes
-	 *  any activity related to the action listener).
-	 *
-	 **/
-
-	public void pageRewindEnd(String pageName);
-
-	/**
-	 *  Invoked when a service begins processing.
-	 *
-	 **/
-
-	public void serviceBegin(String serviceName, String detailMessage);
-
-	/**
-	 *  Invoked when a service successfully ends.
-	 *
-	 **/
-
-	public void serviceEnd(String serviceName);
-
-	/**
-	 *  Invoked when a service throws an exception rather than completing normally.
-	 *  Processing of the request may continue with the display of an exception
-	 *  page.
-	 * 
-	 *  <p>
-	 *  serviceException() is always invoked <em>before</em>
-	 * {@link #serviceEnd(String)}.
-	 *
-	 **/
-
-	public void serviceException(Throwable exception);
-
-	/**
-	 *  Invoked when a session is initiated.  This is typically
-	 *  done from the implementation of the home service.
-	 *
-	 **/
-
-	public void sessionBegin();
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/engine/IMonitorFactory.java b/3.0.4/framework/src/org/apache/tapestry/engine/IMonitorFactory.java
deleted file mode 100644
index cb7f5a3..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/engine/IMonitorFactory.java
+++ /dev/null
@@ -1,41 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.engine;
-
-import org.apache.tapestry.request.RequestContext;
-
-/**
- * Interface for an object that can create a {@link IMonitor} instance
- * for a particular {@link org.apache.tapestry.request.RequestContext}.
- * The engine expects there to be a monitor factory
- * as application extension
- * <code>org.apache.tapestry.monitor-factory</code>.  If no such
- * extension exists, then {@link org.apache.tapestry.engine.DefaultMonitorFactory}
- * is used instead.
- *
- * @author Howard Lewis Ship
- * @version $Id$
- * @since 3.0
- */
-public interface IMonitorFactory
-{
-    /**
-     * Create a new {@link IMonitor} instance.  Alternately, return a shared instance.
-     * This method may be invoked by multiple threads.
-     * 
-     */
-
-    public IMonitor createMonitor(RequestContext context);
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/engine/IPageLoader.java b/3.0.4/framework/src/org/apache/tapestry/engine/IPageLoader.java
deleted file mode 100644
index eeb1226..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/engine/IPageLoader.java
+++ /dev/null
@@ -1,70 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.engine;
-
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.IEngine;
-import org.apache.tapestry.ILocation;
-import org.apache.tapestry.IRequestCycle;
-
-/**
- * Interface exposed to components as they are loaded by the page loader.
- *
- * @see IComponent#finishLoad(IRequestCycle, IPageLoader, org.apache.tapestry.spec.IComponentSpecification)
- * 
- * @author Howard Lewis Ship
- * @version $Id$
- * 
- **/
-
-public interface IPageLoader
-{
-    /**
-     *  Returns the engine for which this page loader is curently
-     *  constructing a page.
-     *
-     *  @since 0.2.12
-     * 
-     **/
-
-    public IEngine getEngine();
-
-    /**
-     *  A convienience; returns the template source provided by
-     *  the {@link IEngine engine}.
-     *
-     *  @since 0.2.12
-     * 
-     **/
-
-    public ITemplateSource getTemplateSource();
-
-    /**
-     *  Invoked to create an implicit component (one which is defined in the
-     *  containing component's template, rather that in the containing component's
-     *  specification).
-     * 
-     *  @see org.apache.tapestry.BaseComponentTemplateLoader
-     *  @since 3.0
-     * 
-     **/
-
-    public IComponent createImplicitComponent(
-        IRequestCycle cycle,
-        IComponent container,
-        String componentId,
-        String componentType,
-        ILocation location);
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/engine/IPageRecorder.java b/3.0.4/framework/src/org/apache/tapestry/engine/IPageRecorder.java
deleted file mode 100644
index 60f6bbe..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/engine/IPageRecorder.java
+++ /dev/null
@@ -1,141 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.engine;
-
-import java.util.Collection;
-
-import org.apache.tapestry.IPage;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.event.ChangeObserver;
-
-/**
- *  Defines an object that can observe changes to properties of
- *  a page and its components, store the state of the page between request cycles,
- *  and restore a page's state on a subsequent request cycle.
- *
- *  <p>Concrete implementations of this can store the changes in memory,
- *  as client-side cookies, in a flat file, or in a database.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- * 
- **/
-
-public interface IPageRecorder extends ChangeObserver
-{
-    /**
-     *  Invoked after the recorder is instantiated to initialize
-     *  it for the current request cycle.
-     * 
-     *  @param pageName the fully qualified page name
-     *  @param cycle the current request cycle
-     * 
-     *  @since 3.0
-     * 
-     **/
-
-    public void initialize(String pageName, IRequestCycle cycle);
-
-    /**
-     *  Invoked at the end of a request cycle in which the
-     *  page recorder is discarded (either implicitly, because
-     *  the page recorder has no changes, or explicitly
-     *  because of {@link org.apache.tapestry.IEngine#forgetPage(String)} or
-     *  {@link #markForDiscard()}.
-     * 
-     *  @since 3.0
-     * 
-     **/
-
-    public void discard();
-
-    /**
-     *  Persists all changes that have been accumulated.  If the recorder
-     *  saves change incrementally, this should ensure that all changes have been persisted.
-     *
-     *  <p>After commiting, a page recorder automatically locks itself.
-     * 
-     **/
-
-    public void commit();
-
-    /**
-     *  Returns a {@link Collection} of {@link org.apache.tapestry.record.IPageChange} objects that represent
-     *  the persistant state of the page.
-     *
-     **/
-
-    public Collection getChanges();
-
-    /**
-     *  Returns true if the recorder has any changes for the page.
-     *
-     **/
-
-    public boolean getHasChanges();
-
-    /**
-     *  Returns true if the recorder has observed any changes that have not
-     *  been committed to external storage.
-     *
-     **/
-
-    public boolean isDirty();
-
-    /**
-     *  Returns true if the recorder is in a locked state, following
-     *  a {@link #commit()}.
-     *
-     **/
-
-    public boolean isLocked();
-
-    /**
-     *  Rolls back the page to the currently persisted state.
-     *
-     *  <p>A page recorder can only rollback changes to properties
-     *  which have changed at some point.  This can cause some minor
-     *  problems, addressed by
-     *  {@link org.apache.tapestry.event.PageDetachListener#pageDetached(org.apache.tapestry.event.PageEvent)}.
-     * 
-     **/
-
-    public void rollback(IPage page);
-
-    /**
-     *  Invoked to lock or unlock the recorder.  Recoders are locked
-     *  after they are commited, and stay locked until
-     *  explicitly unlocked in a subsequent request cycle.
-     *
-     **/
-
-    public void setLocked(boolean value);
-
-    /**
-     *  Invoked to mark the recorder for discarding at the end of the request cycle.
-     * 
-     *  @since 2.0.2
-     * 
-     **/
-
-    public void markForDiscard();
-
-    /**
-     *  Returns true if the recorder has been marked for discard.
-     * 
-     **/
-
-    public boolean isMarkedForDiscard();
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/engine/IPageSource.java b/3.0.4/framework/src/org/apache/tapestry/engine/IPageSource.java
deleted file mode 100644
index c33c98d..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/engine/IPageSource.java
+++ /dev/null
@@ -1,75 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.engine;
-
-import org.apache.tapestry.IPage;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.IResourceResolver;
-
-/**
- *  Abstracts the process of loading pages from thier specifications as
- *  well as pooling of pages once loaded.  
- *
- *  <p>If the required page is not available, a page source may use an
- *  instance of {@link IPageLoader} to actually load the
- *  page (and all of its nested components).
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- * 
- **/
-
-public interface IPageSource
-{
-    /**
-     *  Gets a given page for the engine.  This may involve using a previously
-     *  loaded page from a pool of available pages, or the page may be loaded as needed.
-     * 
-     *  @param cycle the current request cycle
-     *  @param pageName the name of the page.  May be qualified with a library id prefix, which
-     *  may even be nested. Unqualified names are searched for extensively in the application
-     *  namespace, and then in the framework namespace.
-     *  @param monitor informed of any page loading activity
-     *
-     **/
-
-    public IPage getPage(IRequestCycle cycle, String pageName, IMonitor monitor);
-
-    /**
-     *  Invoked after the engine is done with the page
-     *  (typically, after the response to the client has been sent).
-     *  The page is returned to the pool for later reuse.
-     *
-     **/
-
-    public void releasePage(IPage page);
-
-    /**
-     *  Invoked to have the source clear any internal cache.  This is most often
-     *  used when debugging an application.
-     *
-     **/
-
-    public void reset();
-
-    /**
-     * 
-     *  @since 3.0
-     * 
-     **/
-    
-    public IResourceResolver getResourceResolver();
-        
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/engine/IPropertySource.java b/3.0.4/framework/src/org/apache/tapestry/engine/IPropertySource.java
deleted file mode 100644
index 3361e31..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/engine/IPropertySource.java
+++ /dev/null
@@ -1,38 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.engine;
-
-/**
- *  A source for configuration properties.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 2.3
- *
- **/
-
-public interface IPropertySource
-{
-    /**
-     *  Returns the value for a given property, or null if the
-     *  source does not provide a value for the named property.
-     *  Implementations of IPropertySource may use delegation
-     *  to resolve the value (that is, if one property source returns null,
-     *  it may forward the request to another source).
-     * 
-     **/
-    
-    public String getPropertyValue(String propertyName);
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/engine/IScriptSource.java b/3.0.4/framework/src/org/apache/tapestry/engine/IScriptSource.java
deleted file mode 100644
index f9b0ca0..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/engine/IScriptSource.java
+++ /dev/null
@@ -1,44 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.engine;
-
-import org.apache.tapestry.IResourceLocation;
-import org.apache.tapestry.IScript;
-
-/**
- *  Provides access to an {@link IScript}.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 1.0.2
- **/
-
-public interface IScriptSource
-{
-    /**
-     *  Retrieves the script identified by the location from the source's
-     *  cache, reading and parsing the script if necessary.
-     * 
-     **/
-
-    public IScript getScript(IResourceLocation scriptLocation);
-
-    /**
-     *  Invoked to clear any cached scripts.
-     *
-     **/
-
-    public void reset();
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/engine/ISpecificationSource.java b/3.0.4/framework/src/org/apache/tapestry/engine/ISpecificationSource.java
deleted file mode 100644
index c5d7268..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/engine/ISpecificationSource.java
+++ /dev/null
@@ -1,104 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.engine;
-
-import org.apache.tapestry.INamespace;
-import org.apache.tapestry.IResourceLocation;
-import org.apache.tapestry.spec.IComponentSpecification;
-import org.apache.tapestry.spec.ILibrarySpecification;
-
-/**
- *  Defines access to component specifications.
- *
- *  @see IComponentSpecification
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- * 
- **/
-
-public interface ISpecificationSource
-{
-    /**
-     *  Retrieves a component specification, parsing it as necessary.
-     *  
-     *  @param specificationLocation the location where the specification
-     *  may be read from.
-     * 
-     *  @throws org.apache.tapestry.ApplicationRuntimeException if the specification doesn't
-     *  exist, is unreadable or invalid.
-     * 
-     *  @since 2.2
-     * 
-     **/
-
-    public IComponentSpecification getComponentSpecification(IResourceLocation specificationLocation);
-
-    /**
-     *  Retrieves a component specification, parsing it as necessary.
-     *  
-     *  @param specificationLocation the location where the specification
-     *  may be read from.
-     * 
-     *  @throws org.apache.tapestry.ApplicationRuntimeException if the specification doesn't
-     *  exist, is unreadable or invalid.
-     * 
-     *  @since 2.2
-     * 
-     **/
-
-    public IComponentSpecification getPageSpecification(IResourceLocation specificationLocation);
-
-    /**
-     *  Invoked to have the source clear any internal cache.  This is most often
-     *  used when debugging an application.
-     *
-     **/
-
-    public void reset();
-
-    /**
-     *  Returns a {@link org.apache.tapestry.spec.LibrarySpecification} with the given path.
-     * 
-     *  @param specificationLocation the resource path of the specification
-     *  to return
-     *  @throws org.apache.tapestry.ApplicationRuntimeException if the specification
-     *  cannot be read
-     * 
-     *  @since 2.2
-     * 
-     **/
-
-    public ILibrarySpecification getLibrarySpecification(IResourceLocation specificationLocation);
-
-    /**
-     *  Returns the {@link INamespace} for the application.
-     * 
-     *  @since 2.2
-     * 
-     **/
-
-    public INamespace getApplicationNamespace();
-
-    /**
-     *  Returns the {@link INamespace} for the framework itself.
-     * 
-     *  @since 2.2
-     * 
-     **/
-
-    public INamespace getFrameworkNamespace();
-
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/engine/ITemplateSource.java b/3.0.4/framework/src/org/apache/tapestry/engine/ITemplateSource.java
deleted file mode 100644
index febdbcc..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/engine/ITemplateSource.java
+++ /dev/null
@@ -1,81 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.engine;
-
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.parse.ComponentTemplate;
-
-/**
- * A source of localized HTML templates for components.  
- * The cache is the means of access for components to load thier templates,
- * which they need not do until just before rendering.
- *
- * <p>The template cache must be able to locate and parse templates as needed.
- * It may maintain templates in memory.
- *
- * @author Howard Ship
- * @version $Id$
- * 
- **/
-
-public interface ITemplateSource
-{
-    /**
-     *  Name of an {@link org.apache.tapestry.IAsset} of a component that provides the template
-     *  for the asset.  This overrides the default (that the template is in
-     *  the same directory as the specification).  This allows
-     *  pages or component templates to be located properly, relative to static
-     *  assets (such as images and stylesheets).
-     * 
-     *  @since 2.2
-     * 
-     **/
-    
-    public static final String TEMPLATE_ASSET_NAME = "$template";
-
-    /**
-     *  Name of the component parameter that will be automatically bound to
-     *  the HTML tag that is used to insert the component in the parent template.
-     *  If the parent component does not have a template (i.e. it extends 
-     *  AbstractComponent, not BaseComponent), then this parameter is bound to null.
-     * 
-     *  @since 3.0
-     * 
-     **/
-    
-    public static final String TEMPLATE_TAG_PARAMETER_NAME = "templateTag";
-    
-    /**
-     *  Locates the template for the component.
-     * 
-     *  @param cycle The request cycle loading the template; this is required
-     *  in some cases when the template is loaded from an {@link org.apache.tapestry.IAsset}.
-     *  @param component The component for which a template should be loaded.
-     *
-     *  @throws org.apache.tapestry.ApplicationRuntimeException if the resource cannot be located or loaded.
-     * 
-     **/
-
-    public ComponentTemplate getTemplate(IRequestCycle cycle, IComponent component);
-
-    /**
-     *  Invoked to have the source clear any internal cache.  This is most often
-     *  used when debugging an application.
-     *
-     **/
-
-    public void reset();
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/engine/ITemplateSourceDelegate.java b/3.0.4/framework/src/org/apache/tapestry/engine/ITemplateSourceDelegate.java
deleted file mode 100644
index b668296..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/engine/ITemplateSourceDelegate.java
+++ /dev/null
@@ -1,54 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.engine;
-
-import java.util.Locale;
-
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.parse.ComponentTemplate;
-
-/**
- *  Acts as a delegate to the {@link ITemplateSource}, providing access to
- *  page and component templates after the normal search mechanisms have failed.
- * 
- *  <p>
- *  The delegate must be threadsafe.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 3.0
- *  @see org.apache.tapestry.engine.DefaultTemplateSource
- * 
- **/
-
-public interface ITemplateSourceDelegate
-{
-	/**
-	 *  Invoked by the {@link ITemplateSource} when a template can't be found
-	 *  by normal means (i.e., in the normal locations).  This method
-	 *  should find the template.  The result may be null.  The delegate
-	 *  is responsible for caching the result.
-	 * 
-	 *  @param cycle for access to Tapestry and Servlet API objects
-	 *  @param component component (or page) for which a template is needed
-	 *  @param locale the desired locale for the template
-	 * 
-	 **/
-	
-	public ComponentTemplate findTemplate(IRequestCycle cycle,
-	IComponent component,
-	Locale locale);
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/engine/Namespace.java b/3.0.4/framework/src/org/apache/tapestry/engine/Namespace.java
deleted file mode 100644
index f94fff1..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/engine/Namespace.java
+++ /dev/null
@@ -1,395 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.engine;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import org.apache.tapestry.ApplicationRuntimeException;
-import org.apache.tapestry.ILocation;
-import org.apache.tapestry.INamespace;
-import org.apache.tapestry.IResourceLocation;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.resource.ClasspathResourceLocation;
-import org.apache.tapestry.spec.IComponentSpecification;
-import org.apache.tapestry.spec.ILibrarySpecification;
-
-/**
- *  Implementation of {@link org.apache.tapestry.INamespace}
- *  that works with a {@link ISpecificationSource} to
- *  obtain page and component specifications as needed.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 2.2
- *
- **/
-
-public class Namespace implements INamespace
-{
-    private ILibrarySpecification _specification;
-    private ISpecificationSource _specificationSource;
-    private String _id;
-    private String _extendedId;
-    private INamespace _parent;
-    private boolean _frameworkNamespace;
-    private boolean _applicationNamespace;
-
-    /**
-     *  Map of {@link org.apache.tapestry.spec.ComponentSpecification} keyed on page name.
-     *  The map is synchronized because different threads may
-     *  try to update it simultaneously (due to dynamic page
-     *  discovery in the application namespace).
-     * 
-     **/
-
-    private Map _pages = Collections.synchronizedMap(new HashMap());
-
-    /**
-     *  Map of {@link org.apache.tapestry.spec.ComponentSpecification} keyed on
-     *  component alias.
-     * 
-     **/
-
-    private Map _components = Collections.synchronizedMap(new HashMap());
-
-    /**
-     *  Map, keyed on id, of {@link INamespace}.
-     * 
-     **/
-
-    private Map _children = Collections.synchronizedMap(new HashMap());
-
-    public Namespace(
-        String id,
-        INamespace parent,
-        ILibrarySpecification specification,
-        ISpecificationSource specificationSource)
-    {
-        _id = id;
-        _parent = parent;
-        _specification = specification;
-        _specificationSource = specificationSource;
-
-        _applicationNamespace = (_id == null);
-        _frameworkNamespace = FRAMEWORK_NAMESPACE.equals(_id);
-    }
-
-    public String toString()
-    {
-        StringBuffer buffer = new StringBuffer("Namespace@");
-        buffer.append(Integer.toHexString(hashCode()));
-        buffer.append('[');
-
-        if (_applicationNamespace)
-            buffer.append("<application>");
-        else
-            buffer.append(getExtendedId());
-
-        buffer.append(']');
-
-        return buffer.toString();
-    }
-
-    public String getId()
-    {
-        return _id;
-    }
-
-    public String getExtendedId()
-    {
-        if (_applicationNamespace)
-            return null;
-
-        if (_extendedId == null)
-            _extendedId = buildExtendedId();
-
-        return _extendedId;
-    }
-
-    public INamespace getParentNamespace()
-    {
-        return _parent;
-    }
-
-    public INamespace getChildNamespace(String id)
-    {
-        String firstId = id;
-        String nextIds = null;
-
-        // Split the id into first and next if it is a dot separated sequence
-        int index = id.indexOf('.');
-        if (index >= 0)
-        {
-            firstId = id.substring(0, index);
-            nextIds = id.substring(index + 1);
-        }
-
-        // Get the first namespace
-        INamespace result = (INamespace) _children.get(firstId);
-
-        if (result == null)
-        {
-            result = createNamespace(firstId);
-
-            _children.put(firstId, result);
-        }
-
-        // If the id is a dot separated sequence, recurse to find 
-        // the needed namespace
-        if (result != null && nextIds != null)
-            result = result.getChildNamespace(nextIds);
-
-        return result;
-    }
-
-    public List getChildIds()
-    {
-        return _specification.getLibraryIds();
-    }
-
-    public IComponentSpecification getPageSpecification(String name)
-    {
-        IComponentSpecification result = (IComponentSpecification) _pages.get(name);
-
-        if (result == null)
-        {
-            result = locatePageSpecification(name);
-
-            _pages.put(name, result);
-        }
-
-        return result;
-    }
-
-    public List getPageNames()
-    {
-        Set names = new HashSet();
-
-        names.addAll(_pages.keySet());
-        names.addAll(_specification.getPageNames());
-
-        List result = new ArrayList(names);
-
-        Collections.sort(result);
-
-        return result;
-    }
-
-    public IComponentSpecification getComponentSpecification(String alias)
-    {
-        IComponentSpecification result = (IComponentSpecification) _components.get(alias);
-
-        if (result == null)
-        {
-            result = locateComponentSpecification(alias);
-            _components.put(alias, result);
-        }
-
-        return result;
-    }
-
-    public String getServiceClassName(String name)
-    {
-        return _specification.getServiceClassName(name);
-    }
-
-    public List getServiceNames()
-    {
-        return _specification.getServiceNames();
-    }
-
-    public ILibrarySpecification getSpecification()
-    {
-        return _specification;
-    }
-
-    private String buildExtendedId()
-    {
-        if (_parent == null)
-            return _id;
-
-        String parentId = _parent.getExtendedId();
-
-        // If immediate child of application namespace
-
-        if (parentId == null)
-            return _id;
-
-        return parentId + "." + _id;
-    }
-
-    /**
-     *  Returns a string identifying the namespace, for use in
-     *  error messages.  I.e., "Application namespace" or "namespace 'foo'".
-     * 
-     **/
-
-    public String getNamespaceId()
-    {
-        if (_frameworkNamespace)
-            return Tapestry.getMessage("Namespace.framework-namespace");
-
-        if (_applicationNamespace)
-            return Tapestry.getMessage("Namespace.application-namespace");
-
-        return Tapestry.format("Namespace.nested-namespace", getExtendedId());
-    }
-
-    /**
-     *  Gets the specification from the specification source.
-     * 
-     *  @throws ApplicationRuntimeException if the named page is not defined.
-     * 
-     **/
-
-    private IComponentSpecification locatePageSpecification(String name)
-    {
-        String path = _specification.getPageSpecificationPath(name);
-
-        if (path == null)
-            throw new ApplicationRuntimeException(
-                Tapestry.format("Namespace.no-such-page", name, getNamespaceId()));
-
-        IResourceLocation location = getSpecificationLocation().getRelativeLocation(path);
-
-        return _specificationSource.getPageSpecification(location);
-    }
-
-    private IComponentSpecification locateComponentSpecification(String type)
-    {
-        String path = _specification.getComponentSpecificationPath(type);
-
-        if (path == null)
-            throw new ApplicationRuntimeException(
-                Tapestry.format("Namespace.no-such-alias", type, getNamespaceId()));
-
-        IResourceLocation location = getSpecificationLocation().getRelativeLocation(path);
-
-        return _specificationSource.getComponentSpecification(location);
-    }
-
-    private INamespace createNamespace(String id)
-    {
-        String path = _specification.getLibrarySpecificationPath(id);
-
-        if (path == null)
-            throw new ApplicationRuntimeException(
-                Tapestry.format("Namespace.library-id-not-found", id, getNamespaceId()));
-
-        IResourceLocation location = getSpecificationLocation().getRelativeLocation(path);
-
-        // Ok, an absolute path to a library for an application whose specification
-        // is in the context root is problematic, cause getRelativeLocation()
-        // will still be looking in the context.  Handle this case with the
-        // following little kludge:
-
-        if (location.getResourceURL() == null && path.startsWith("/"))
-            location = new ClasspathResourceLocation(_specification.getResourceResolver(), path);
-
-        ILibrarySpecification ls = _specificationSource.getLibrarySpecification(location);
-
-        return new Namespace(id, this, ls, _specificationSource);
-    }
-
-    public boolean containsPage(String name)
-    {
-        return _pages.containsKey(name) || (_specification.getPageSpecificationPath(name) != null);
-    }
-
-    /** @since 2.3 **/
-
-    public String constructQualifiedName(String pageName)
-    {
-        String prefix = getExtendedId();
-
-        if (prefix == null)
-            return pageName;
-
-        return prefix + SEPARATOR + pageName;
-    }
-
-    /** @since 3.0 **/
-
-    public IResourceLocation getSpecificationLocation()
-    {
-        return _specification.getSpecificationLocation();
-    }
-
-    /** @since 3.0 **/
-
-    public boolean isApplicationNamespace()
-    {
-        return _applicationNamespace;
-    }
-
-    /** @since 3.0 **/
-
-    public synchronized void installPageSpecification(
-        String pageName,
-        IComponentSpecification specification)
-    {
-        _pages.put(pageName, specification);
-    }
-
-    /** @since 3.0 **/
-
-    public synchronized void installComponentSpecification(
-        String type,
-        IComponentSpecification specification)
-    {
-        _components.put(type, specification);
-    }
-
-    /** @since 3.0 **/
-
-    public boolean containsComponentType(String type)
-    {
-        return _components.containsKey(type)
-            || (_specification.getComponentSpecificationPath(type) != null);
-    }
-
-    /** @since 3.0 **/
-
-    public List getComponentTypes()
-    {
-        Set types = new HashSet();
-
-        types.addAll(_components.keySet());
-        types.addAll(_specification.getComponentTypes());
-
-        List result = new ArrayList(types);
-
-        Collections.sort(result);
-
-        return result;
-    }
-
-    /** @since 3.0 **/
-
-    public ILocation getLocation()
-    {
-        if (_specification == null)
-            return null;
-
-        return _specification.getLocation();
-    }
-
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/engine/NullMonitor.java b/3.0.4/framework/src/org/apache/tapestry/engine/NullMonitor.java
deleted file mode 100644
index d3a2b6c..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/engine/NullMonitor.java
+++ /dev/null
@@ -1,81 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.engine;
-
-
-
-/**
- *  Null implementation of {@link org.apache.tapestry.engine.IMonitor}.
- * 
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 3.0
- *
- **/
-
-public class NullMonitor implements IMonitor
-{
-    public static final NullMonitor SHARED = new NullMonitor();
-
-    public void pageCreateBegin(String pageName)
-    {
-    }
-
-    public void pageCreateEnd(String pageName)
-    {
-    }
-
-    public void pageLoadBegin(String pageName)
-    {
-    }
-
-    public void pageLoadEnd(String pageName)
-    {
-    }
-
-    public void pageRenderBegin(String pageName)
-    {
-    }
-
-    public void pageRenderEnd(String pageName)
-    {
-    }
-
-    public void pageRewindBegin(String pageName)
-    {
-    }
-
-    public void pageRewindEnd(String pageName)
-    {
-    }
-
-    public void serviceBegin(String serviceName, String detailMessage)
-    {
-    }
-
-    public void serviceEnd(String serviceName)
-    {
-    }
-
-    public void serviceException(Throwable exception)
-    {
-    }
-
-    public void sessionBegin()
-    {
-    }
-
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/engine/NullTemplateSourceDelegate.java b/3.0.4/framework/src/org/apache/tapestry/engine/NullTemplateSourceDelegate.java
deleted file mode 100644
index daa3105..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/engine/NullTemplateSourceDelegate.java
+++ /dev/null
@@ -1,59 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.engine;
-
-import java.util.Locale;
-
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.parse.ComponentTemplate;
-
-/**
- *  Null implementation of {@link org.apache.tapestry.engine.ITemplateSourceDelegate}. 
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 3.0
- *
- **/
-
-public class NullTemplateSourceDelegate implements ITemplateSourceDelegate
-{
-	private static NullTemplateSourceDelegate _shared;
-	
-	/**
-	 *  Returns a shared instance of NullTemplateSourceDelegate.
-	 * 
-	 **/
-	
-	public static NullTemplateSourceDelegate getSharedInstance()
-	{
-		if (_shared == null)
-			_shared = new NullTemplateSourceDelegate();
-			
-		return _shared;
-	}
-
-	/**
-	 *  Simply returns null.
-	 * 
-	 **/
-	
-    public ComponentTemplate findTemplate(IRequestCycle cycle, IComponent component, Locale locale)
-    {
-        return null;
-    }
-
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/engine/NullWriter.java b/3.0.4/framework/src/org/apache/tapestry/engine/NullWriter.java
deleted file mode 100644
index cfb5d8c..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/engine/NullWriter.java
+++ /dev/null
@@ -1,155 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.engine;
-
-import org.apache.tapestry.IMarkupWriter;
-
-/**
- *  A {@link IMarkupWriter} that does absolutely <em>nothing</em>; this
- *  is used during the rewind phase of the request cycle when output
- *  is discarded anyway.
- *
- *  @author Howard Lewis Ship, David Solis
- *  @version $Id$
- *  @since 0.2.9
- *
- **/
-
-public class NullWriter implements IMarkupWriter
-{
-    private static IMarkupWriter shared;
-
-    public static IMarkupWriter getSharedInstance()
-    {
-        if (shared == null)
-            shared = new NullWriter();
-
-        return shared;
-    }
-
-    public void printRaw(char[] buffer, int offset, int length)
-    {
-    }
-
-    public void printRaw(String value)
-    {
-    }
-
-    public void println()
-    {
-    }
-
-    public void print(char[] data, int offset, int length)
-    {
-    }
-
-    public void print(char value)
-    {
-    }
-
-    public void print(int value)
-    {
-    }
-
-    public void print(String value)
-    {
-    }
-
-    /**
-     *  Returns <code>this</code>: since a NullWriter doesn't actually
-     *  do anything, one is as good as another!.
-     *
-     **/
-
-    public IMarkupWriter getNestedWriter()
-    {
-        return this;
-    }
-
-    public String getContentType()
-    {
-        return null;
-    }
-
-    public void flush()
-    {
-    }
-
-    public void end()
-    {
-    }
-
-    public void end(String name)
-    {
-    }
-
-    public void comment(String value)
-    {
-    }
-
-    public void closeTag()
-    {
-    }
-
-    public void close()
-    {
-    }
-
-    /**
-     *  Always returns false.
-     *
-     **/
-
-    public boolean checkError()
-    {
-        return false;
-    }
-
-    public void beginEmpty(String name)
-    {
-    }
-
-    public void begin(String name)
-    {
-    }
-
-    public void attribute(String name, int value)
-    {
-    }
-
-    public void attribute(String name, String value)
-    {
-    }
-
-    /**
-     *  @see org.apache.tapestry.IMarkupWriter#attribute(java.lang.String, boolean)
-     *
-     *  @since 3.0
-     **/
-
-    public void attribute(String name, boolean value)
-    {
-    }
-
-    /**
-     *  @see org.apache.tapestry.IMarkupWriter#attributeRaw(java.lang.String, java.lang.String)
-     *
-     *  @since 3.0
-     **/
-
-    public void attributeRaw(String name, String value)
-    {
-    }
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/engine/PageService.java b/3.0.4/framework/src/org/apache/tapestry/engine/PageService.java
deleted file mode 100644
index 5467408..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/engine/PageService.java
+++ /dev/null
@@ -1,85 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.engine;
-
-import java.io.IOException;
-
-import javax.servlet.ServletException;
-
-import org.apache.tapestry.ApplicationRuntimeException;
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.IPage;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.request.RequestContext;
-import org.apache.tapestry.request.ResponseOutputStream;
-
-/**
- *  Basic server for creating a link to another page in the application.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 1.0.9
- *
- **/
-
-public class PageService extends AbstractService
-{
-
-    public ILink getLink(IRequestCycle cycle, IComponent component, Object[] parameters)
-    {
-        if (Tapestry.size(parameters) != 1)
-            throw new IllegalArgumentException(
-                Tapestry.format("service-single-parameter", Tapestry.PAGE_SERVICE));
-
-        return constructLink(cycle, Tapestry.PAGE_SERVICE, new String[] {(String) parameters[0]}, null, true);
-
-    }
-
-    public void service(
-        IEngineServiceView engine,
-        IRequestCycle cycle,
-        ResponseOutputStream output)
-        throws ServletException, IOException
-    {
-        RequestContext context = cycle.getRequestContext();
-        String[] serviceContext = getServiceContext(context);
-
-        if (Tapestry.size(serviceContext) != 1)
-            throw new ApplicationRuntimeException(
-                Tapestry.format("service-single-parameter", Tapestry.PAGE_SERVICE));
-
-        String pageName = serviceContext[0];
-
-        // At one time, the page service required a session, but that is no longer necessary.
-        // Users can now bookmark pages within a Tapestry application.  Pages
-        // can implement validate() and throw a PageRedirectException if they don't
-        // want to be accessed this way.  For example, most applications have a concept
-        // of a "login" and have a few pages that don't require the user to be logged in,
-        // and other pages that do.  The protected pages should redirect to a login page.
-
-        IPage page = cycle.getPage(pageName);
-
-        cycle.activate(page);
-
-        engine.renderResponse(cycle, output);
-    }
-
-    public String getName()
-    {
-        return Tapestry.PAGE_SERVICE;
-    }
-
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/engine/RequestCycle.java b/3.0.4/framework/src/org/apache/tapestry/engine/RequestCycle.java
deleted file mode 100644
index 5b57110..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/engine/RequestCycle.java
+++ /dev/null
@@ -1,718 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.engine;
-
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Map;
-
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.commons.lang.builder.ToStringBuilder;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.tapestry.ApplicationRuntimeException;
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.IEngine;
-import org.apache.tapestry.IForm;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IPage;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.RenderRewoundException;
-import org.apache.tapestry.StaleLinkException;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.event.ChangeObserver;
-import org.apache.tapestry.event.ObservedChangeEvent;
-import org.apache.tapestry.request.RequestContext;
-
-/**
- *  Provides the logic for processing a single request cycle.  Provides access to
- *  the {@link IEngine engine} and the {@link RequestContext}.
- *
- *  @author Howard Lewis Ship
- * 
- **/
-
-public class RequestCycle implements IRequestCycle, ChangeObserver
-{
-    private static final Log LOG = LogFactory.getLog(RequestCycle.class);
-
-    private IPage _page;
-    private IEngine _engine;
-    private IEngineService _service;
-
-    private RequestContext _requestContext;
-
-    private IMonitor _monitor;
-
-    private HttpServletResponse _response;
-
-    /**
-     *  A mapping of pages loaded during the current request cycle.
-     *  Key is the page name, value is the {@link IPage} instance.
-     *
-     **/
-
-    private Map _loadedPages;
-
-    /**
-     * A mapping of page recorders for the current request cycle.
-     * Key is the page name, value is the {@link IPageRecorder} instance.
-     *
-     **/
-
-    private Map _loadedRecorders;
-
-    private boolean _rewinding = false;
-
-    private Map _attributes;
-
-    private int _actionId;
-    private int _targetActionId;
-    private IComponent _targetComponent;
-
-    /** @since 2.0.3 **/
-
-    private Object[] _serviceParameters;
-
-    /**
-     *  Standard constructor used to render a response page.
-     *
-     **/
-
-    public RequestCycle(
-        IEngine engine,
-        RequestContext requestContext,
-        IEngineService service,
-        IMonitor monitor)
-    {
-        _engine = engine;
-        _requestContext = requestContext;
-        _service = service;
-        _monitor = monitor;
-    }
-
-    /**
-     *  Called at the end of the request cycle (i.e., after all responses have been
-     *  sent back to the client), to release all pages loaded during the request cycle.
-     *
-     **/
-
-    public void cleanup()
-    {
-        if (_loadedPages == null)
-            return;
-
-        IPageSource source = _engine.getPageSource();
-        Iterator i = _loadedPages.values().iterator();
-
-        while (i.hasNext())
-        {
-            IPage page = (IPage) i.next();
-
-            source.releasePage(page);
-        }
-
-        _loadedPages = null;
-        _loadedRecorders = null;
-
-    }
-
-    public IEngineService getService()
-    {
-        return _service;
-    }
-
-    public String encodeURL(String URL)
-    {
-        if (_response == null)
-            _response = _requestContext.getResponse();
-
-        return _response.encodeURL(URL);
-    }
-
-    public IEngine getEngine()
-    {
-        return _engine;
-    }
-
-    public Object getAttribute(String name)
-    {
-        if (_attributes == null)
-            return null;
-
-        return _attributes.get(name);
-    }
-
-    public IMonitor getMonitor()
-    {
-        return _monitor;
-    }
-
-    public String getNextActionId()
-    {
-        return Integer.toHexString(++_actionId);
-    }
-
-    public IPage getPage()
-    {
-        return _page;
-    }
-
-    /**
-     *  Gets the page from the engines's {@link IPageSource}.
-     *
-     **/
-
-    public IPage getPage(String name)
-    {
-        IPage result = null;
-
-        if (name == null)
-            throw new NullPointerException(Tapestry.getMessage("RequestCycle.invalid-null-name"));
-
-        if (_loadedPages != null)
-            result = (IPage) _loadedPages.get(name);
-
-        if (result == null)
-        {
-            _monitor.pageLoadBegin(name);
-
-            IPageSource pageSource = _engine.getPageSource();
-
-            result = pageSource.getPage(this, name, _monitor);
-
-            // Get the recorder that will eventually observe and record
-            // changes to persistent properties of the page.  If the page
-            // has never emitted any page changes, then it will
-            // not have a recorder.
-
-            IPageRecorder recorder = getPageRecorder(name);
-
-            if (recorder != null)
-            {
-                // Have it rollback the page to the prior state.  Note that
-                // the page has a null observer at this time.
-
-                recorder.rollback(result);
-
-                // Now, have the page use the recorder for any future
-                // property changes.
-
-                result.setChangeObserver(recorder);
-
-                // And, if this recorder observed changes in a prior request cycle
-                // (and was locked after committing in that cycle), it's time
-                // to unlock.
-
-                recorder.setLocked(false);
-            }
-            else
-            {
-                // No page recorder for the page.  We'll observe its
-                // changes and create the page recorder dynamically
-                // if it emits any.
-
-                result.setChangeObserver(this);
-            }
-
-            _monitor.pageLoadEnd(name);
-
-            if (_loadedPages == null)
-                _loadedPages = new HashMap();
-
-            _loadedPages.put(name, result);
-        }
-
-        return result;
-    }
-
-    /**
-     *  Returns the page recorder for the named page.  This may come
-     *  from the cycle's cache of page recorders or, if not yet encountered
-     *  in this request cycle, the {@link IEngine#getPageRecorder(String, IRequestCycle)} is
-     *  invoked to get the recorder, if it exists.
-     * 
-     **/
-
-    protected IPageRecorder getPageRecorder(String name)
-    {
-        IPageRecorder result = null;
-
-        if (_loadedRecorders != null)
-            result = (IPageRecorder) _loadedRecorders.get(name);
-
-        if (result != null)
-            return result;
-
-        result = _engine.getPageRecorder(name, this);
-
-        if (result == null)
-            return null;
-
-        if (_loadedRecorders == null)
-            _loadedRecorders = new HashMap();
-
-        _loadedRecorders.put(name, result);
-
-        return result;
-    }
-
-    /** 
-     * 
-     *  Gets the page recorder from the loadedRecorders cache, or from the engine
-     *  (putting it into loadedRecorders).  If the recorder does not yet exist,
-     *  it is created.
-     * 
-     *  @see IEngine#createPageRecorder(String, IRequestCycle)
-     *  @since 2.0.3
-     * 
-     **/
-
-    private IPageRecorder createPageRecorder(String name)
-    {
-        IPageRecorder result = getPageRecorder(name);
-
-        if (result == null)
-        {
-            result = _engine.createPageRecorder(name, this);
-
-            if (_loadedRecorders == null)
-                _loadedRecorders = new HashMap();
-
-            _loadedRecorders.put(name, result);
-        }
-
-        return result;
-    }
-
-    public RequestContext getRequestContext()
-    {
-        return _requestContext;
-    }
-
-    public boolean isRewinding()
-    {
-        return _rewinding;
-    }
-
-    public boolean isRewound(IComponent component) throws StaleLinkException
-    {
-        // If not rewinding ...
-
-        if (!_rewinding)
-            return false;
-
-        if (_actionId != _targetActionId)
-            return false;
-
-        // OK, we're there, is the page is good order?
-
-        if (component == _targetComponent)
-            return true;
-
-        // Woops.  Mismatch.
-
-        throw new StaleLinkException(
-            component,
-            Integer.toHexString(_targetActionId),
-            _targetComponent.getExtendedId());
-    }
-
-    public void removeAttribute(String name)
-    {
-        if (LOG.isDebugEnabled())
-            LOG.debug("Removing attribute " + name);
-
-        if (_attributes == null)
-            return;
-
-        _attributes.remove(name);
-    }
-
-    /**
-     *  Renders the page by invoking 
-     * {@link IPage#renderPage(IMarkupWriter, IRequestCycle)}.  
-     *  This clears all attributes.
-     *
-     **/
-
-    public void renderPage(IMarkupWriter writer)
-    {
-        String pageName = _page.getPageName();
-        _monitor.pageRenderBegin(pageName);
-
-        _rewinding = false;
-        _actionId = -1;
-        _targetActionId = 0;
-
-        // Forget any attributes from a previous render cycle.
-
-        if (_attributes != null)
-            _attributes.clear();
-
-        try
-        {
-            _page.renderPage(writer, this);
-
-        }
-        catch (ApplicationRuntimeException ex)
-        {
-            // Nothing much to add here.
-
-            throw ex;
-        }
-        catch (Throwable ex)
-        {
-            // But wrap other exceptions in a RequestCycleException ... this
-            // will ensure that some of the context is available.
-
-            throw new ApplicationRuntimeException(ex.getMessage(), _page, null, ex);
-        }
-        finally
-        {
-            _actionId = 0;
-            _targetActionId = 0;
-        }
-
-        _monitor.pageRenderEnd(pageName);
-
-    }
-
-    /**
-     *  Rewinds an individual form by invoking 
-     *  {@link IForm#rewind(IMarkupWriter, IRequestCycle)}.
-     *
-     * <p>The process is expected to end with a {@link RenderRewoundException}.
-     * If the entire page is renderred without this exception being thrown, it means
-     * that the target action id was not valid, and a 
-     * {@link ApplicationRuntimeException}
-     * is thrown.
-     *
-     * <p>This clears all attributes.
-     *
-     *  @since 1.0.2
-     **/
-
-    public void rewindForm(IForm form, String targetActionId)
-    {
-        IPage page = form.getPage();
-        String pageName = page.getPageName();
-
-        _rewinding = true;
-
-        _monitor.pageRewindBegin(pageName);
-
-        if (_attributes != null)
-            _attributes.clear();
-
-        // Fake things a little for getNextActionId() / isRewound()
-
-        _targetActionId = Integer.parseInt(targetActionId, 16);
-        _actionId = _targetActionId - 1;
-
-        _targetComponent = form;
-
-        try
-        {
-            page.beginPageRender();
-
-            form.rewind(NullWriter.getSharedInstance(), this);
-
-            // Shouldn't get this far, because the form should
-            // throw the RenderRewoundException.
-
-            throw new StaleLinkException(
-                Tapestry.format("RequestCycle.form-rewind-failure", form.getExtendedId()),
-                form);
-        }
-        catch (RenderRewoundException ex)
-        {
-            // This is acceptible and expected.
-        }
-        catch (ApplicationRuntimeException ex)
-        {
-            // RequestCycleExceptions don't need to be wrapped.
-            throw ex;
-        }
-        catch (Throwable ex)
-        {
-            // But wrap other exceptions in a ApplicationRuntimeException ... this
-            // will ensure that some of the context is available.
-
-            throw new ApplicationRuntimeException(ex.getMessage(), page, null, ex);
-        }
-        finally
-        {
-            _actionId = 0;
-            _targetActionId = 0;
-            _targetComponent = null;
-
-            page.endPageRender();
-
-            _monitor.pageRewindEnd(pageName);
-
-            _rewinding = false;
-        }
-    }
-
-    /**
-     *  Rewinds the page by invoking 
-     *  {@link IPage#renderPage(IMarkupWriter, IRequestCycle)}.
-     *
-     * <p>The process is expected to end with a {@link RenderRewoundException}.
-     * If the entire page is renderred without this exception being thrown, it means
-     * that the target action id was not valid, and a 
-     * {@link ApplicationRuntimeException}
-     * is thrown.
-     *
-     * <p>This clears all attributes.
-     *
-     **/
-
-    public void rewindPage(String targetActionId, IComponent targetComponent)
-    {
-        String pageName = _page.getPageName();
-
-        _rewinding = true;
-
-        _monitor.pageRewindBegin(pageName);
-
-        if (_attributes != null)
-            _attributes.clear();
-
-        _actionId = -1;
-
-        // Parse the action Id as hex since that's whats generated
-        // by getNextActionId()
-        _targetActionId = Integer.parseInt(targetActionId, 16);
-        _targetComponent = targetComponent;
-
-        try
-        {
-            _page.renderPage(NullWriter.getSharedInstance(), this);
-
-            // Shouldn't get this far, because the target component should
-            // throw the RenderRewoundException.
-
-            throw new StaleLinkException(_page, targetActionId, targetComponent.getExtendedId());
-        }
-        catch (RenderRewoundException ex)
-        {
-            // This is acceptible and expected.
-        }
-        catch (ApplicationRuntimeException ex)
-        {
-            // ApplicationRuntimeExceptions don't need to be wrapped.
-            throw ex;
-        }
-        catch (Throwable ex)
-        {
-            // But wrap other exceptions in a RequestCycleException ... this
-            // will ensure that some of the context is available.
-
-            throw new ApplicationRuntimeException(ex.getMessage(), _page, null, ex);
-        }
-        finally
-        {
-
-            _actionId = 0;
-            _targetActionId = 0;
-            _targetComponent = null;
-
-            _monitor.pageRewindEnd(pageName);
-
-            _rewinding = false;
-        }
-
-    }
-
-    public void setAttribute(String name, Object value)
-    {
-        if (LOG.isDebugEnabled())
-            LOG.debug("Set attribute " + name + " to " + value);
-
-        if (_attributes == null)
-            _attributes = new HashMap();
-
-        _attributes.put(name, value);
-    }
-
-    public void setPage(IPage value)
-    {
-        if (LOG.isDebugEnabled())
-            LOG.debug("Set page to " + value);
-
-        _page = value;
-    }
-
-    public void setPage(String name)
-    {
-        if (LOG.isDebugEnabled())
-            LOG.debug("Set page to " + name);
-
-        _page = getPage(name);
-    }
-
-    /**
-     *  Invokes {@link IPageRecorder#commit()} on each page recorder loaded
-     *  during the request cycle (even recorders marked for discard).
-     *
-     **/
-
-    public void commitPageChanges()
-    {
-        if (LOG.isDebugEnabled())
-            LOG.debug("Committing page changes");
-
-        if (_loadedRecorders == null || _loadedRecorders.isEmpty())
-            return;
-
-        Iterator i = _loadedRecorders.values().iterator();
-
-        while (i.hasNext())
-        {
-            IPageRecorder recorder = (IPageRecorder) i.next();
-
-            recorder.commit();
-        }
-    }
-
-    /**
-     *  For pages without a {@link IPageRecorder page recorder}, 
-     *  we're the {@link ChangeObserver change observer}.
-     *  If such a page actually emits a change, then
-     *  we'll obtain a new page recorder from the
-     *  {@link IEngine engine}, set the recorder
-     *  as the page's change observer, and forward the event
-     *  to the newly created recorder.  In addition, the
-     *  new page recorder is remembered so that it will
-     *  be committed by {@link #commitPageChanges()}.
-     *
-     **/
-
-    public void observeChange(ObservedChangeEvent event)
-    {
-        IPage page = event.getComponent().getPage();
-        String pageName = page.getPageName();
-
-        if (LOG.isDebugEnabled())
-            LOG.debug("Observed change in page " + pageName + "; creating page recorder.");
-
-        IPageRecorder recorder = createPageRecorder(pageName);
-
-        page.setChangeObserver(recorder);
-
-        recorder.observeChange(event);
-    }
-
-    /**
-     *  Finds the page and its page recorder, creating the page recorder if necessary.
-     *  The page recorder is marked for discard regardless of its current state.
-     * 
-     *  <p>This may make the application stateful even if the page recorder does
-     *  not yet exist.
-     * 
-     *  <p>The page recorder will be discarded at the end of the current request cycle.
-     * 
-     *  @since 2.0.2
-     * 
-     **/
-
-    public void discardPage(String name)
-    {
-        if (LOG.isDebugEnabled())
-            LOG.debug("Discarding page " + name);
-
-        IPageRecorder recorder = _engine.getPageRecorder(name, this);
-
-        if (recorder == null)
-        {
-            _page = getPage(name);
-
-            recorder = createPageRecorder(name);
-
-            _page.setChangeObserver(recorder);
-        }
-
-        recorder.markForDiscard();
-    }
-
-    /** @since 2.0.3 **/
-
-    public Object[] getServiceParameters()
-    {
-        return _serviceParameters;
-    }
-
-    /** @since 2.0.3 **/
-
-    public void setServiceParameters(Object[] serviceParameters)
-    {
-        _serviceParameters = serviceParameters;
-    }
-
-    /** @since 3.0 **/
-
-    public void activate(String name)
-    {
-        IPage page = getPage(name);
-
-        activate(page);
-    }
-
-    /** @since 3.0 */
-
-    public void activate(IPage page)
-    {
-        if (LOG.isDebugEnabled())
-            LOG.debug("Activating page " + page);
-
-        Tapestry.clearMethodInvocations();
-
-        page.validate(this);
-
-        Tapestry.checkMethodInvocation(
-            Tapestry.ABSTRACTPAGE_VALIDATE_METHOD_ID,
-            "validate()",
-            page);
-
-        setPage(page);
-    }
-
-    /**
-     * @since 3.0
-     */
-    public String toString()
-    {
-        ToStringBuilder b = new ToStringBuilder(this);
-
-        b.append("rewinding", _rewinding);
-
-        if (_service != null)
-            b.append("service", _service.getName());
-
-        b.append("serviceParameters", _serviceParameters);
-
-        if (_loadedPages != null)
-            b.append("loadedPages", _loadedPages.keySet());
-
-        b.append("attributes", _attributes);
-        b.append("targetActionId", _targetActionId);
-        b.append("targetComponent", _targetComponent);
-
-        return b.toString();
-    }
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/engine/ResetService.java b/3.0.4/framework/src/org/apache/tapestry/engine/ResetService.java
deleted file mode 100644
index f76e955..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/engine/ResetService.java
+++ /dev/null
@@ -1,88 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.engine;
-
-import java.io.IOException;
-
-import javax.servlet.ServletException;
-
-import org.apache.tapestry.ApplicationRuntimeException;
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.IPage;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.request.ResponseOutputStream;
-
-/**
- *  ServiceLink used to discard all cached data (templates, specifications, et cetera).
- *  This is primarily used during development.  It could be a weakness of a Tapestry
- *  application, making it susceptible to denial of service attacks, which is why
- *  it is disabled by default.  The link generated by the ResetService redisplays the
- *  current page after discarding all data.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 1.0.9
- *  @see org.apache.tapestry.IEngine#isResetServiceEnabled()
- * 
- **/
-
-public class ResetService extends AbstractService
-{
-
-    public ILink getLink(IRequestCycle cycle, IComponent component, Object[] parameters)
-    {
-        if (Tapestry.size(parameters) != 0)
-            throw new IllegalArgumentException(
-                Tapestry.format("service-no-parameters", Tapestry.RESET_SERVICE));
-
-        String[] context = new String[1];
-        context[0] = component.getPage().getPageName();
-
-        return constructLink(cycle, Tapestry.RESET_SERVICE, context, null, true);
-    }
-
-    public String getName()
-    {
-        return Tapestry.RESET_SERVICE;
-    }
-
-    public void service(
-        IEngineServiceView engine,
-        IRequestCycle cycle,
-        ResponseOutputStream output)
-        throws ServletException, IOException
-    {
-        String[] context = getServiceContext(cycle.getRequestContext());
-
-        if (Tapestry.size(context) != 1)
-            throw new ApplicationRuntimeException(
-                Tapestry.format("service-single-parameter", Tapestry.RESET_SERVICE));
-
-        String pageName = context[0];
-
-        if (engine.isResetServiceEnabled())
-            engine.clearCachedData();
-
-        IPage page = cycle.getPage(pageName);
-
-        cycle.activate(page);
-
-        // Render the same page (that contained the reset link).
-
-        engine.renderResponse(cycle, output);
-    }
-
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/engine/RestartService.java b/3.0.4/framework/src/org/apache/tapestry/engine/RestartService.java
deleted file mode 100644
index bdb64bc..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/engine/RestartService.java
+++ /dev/null
@@ -1,63 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.engine;
-
-import java.io.IOException;
-
-import javax.servlet.ServletException;
-
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.request.ResponseOutputStream;
-
-/**
- *  Restarts the Tapestry application.  This is normally reserved for dealing with
- *  catastrophic failures of the application.  Discards the {@link javax.servlet.http.HttpSession}, if any,
- *  and redirects to the Tapestry application servlet URL (invoking the {@link HomeService}).
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 1.0.9
- *
- **/
-
-public class RestartService extends AbstractService
-{
-
-    public ILink getLink(IRequestCycle cycle, IComponent component, Object[] parameters)
-    {
-        if (Tapestry.size(parameters) != 0)
-            throw new IllegalArgumentException(
-                Tapestry.format("service-no-parameters", Tapestry.RESTART_SERVICE));
-
-        return constructLink(cycle, Tapestry.RESTART_SERVICE, null, null, true);
-    }
-
-    public void service(
-        IEngineServiceView engine,
-        IRequestCycle cycle,
-        ResponseOutputStream output)
-        throws ServletException, IOException
-    {
-        engine.restart(cycle);
-    }
-
-    public String getName()
-    {
-        return Tapestry.RESTART_SERVICE;
-    }
-
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/engine/TagSupportService.java b/3.0.4/framework/src/org/apache/tapestry/engine/TagSupportService.java
deleted file mode 100644
index faaedd3..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/engine/TagSupportService.java
+++ /dev/null
@@ -1,160 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.engine;
-
-import java.io.IOException;
-import java.io.PrintWriter;
-import java.util.Enumeration;
-
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.tapestry.ApplicationRuntimeException;
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.html.HTMLWriter;
-import org.apache.tapestry.request.RequestContext;
-import org.apache.tapestry.request.ResponseOutputStream;
-
-/**
- *  A very specialized service used by JSPs to access Tapestry URLs. 
- *  This is used by the Tapestry JSP tags, such as
- *  {@link org.apache.tapestry.jsp.PageTag}.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 3.0
- *  @see org.apache.tapestry.jsp.URLRetriever
- * 
- **/
-
-public class TagSupportService implements IEngineService
-{
-    private static final Log LOG = LogFactory.getLog(TagSupportService.class);
-
-    /**
-     *  Not to be invoked; this service is different than the others.
-     * 
-     *  @throws ApplicationRuntimeException always
-     * 
-     **/
-
-    public ILink getLink(IRequestCycle cycle, IComponent component, Object[] parameters)
-    {
-        throw new ApplicationRuntimeException(
-            Tapestry.getMessage("TagSupportService.service-only"));
-    }
-
-    public void service(
-        IEngineServiceView engine,
-        IRequestCycle cycle,
-        ResponseOutputStream output)
-        throws ServletException, IOException
-    {
-        RequestContext context = cycle.getRequestContext();
-        HttpServletRequest request = context.getRequest();
-
-        String serviceName = getAttribute(request, Tapestry.TAG_SUPPORT_SERVICE_ATTRIBUTE);
-
-        Object raw = request.getAttribute(Tapestry.TAG_SUPPORT_PARAMETERS_ATTRIBUTE);
-        Object[] parameters = null;
-
-        try
-        {
-            parameters = (Object[]) raw;
-        }
-        catch (ClassCastException ex)
-        {
-            throw new ServletException(
-                Tapestry.format(
-                    "TagSupportService.attribute-not-array",
-                    Tapestry.TAG_SUPPORT_PARAMETERS_ATTRIBUTE,
-                    Tapestry.getClassName(raw.getClass())));
-        }
-
-        IEngineService service = cycle.getEngine().getService(serviceName);
-
-        ILink link = service.getLink(cycle, null, parameters);
-
-        String URI = link.getURL();
-
-        if (LOG.isDebugEnabled())
-        {
-        	LOG.debug("Request servlet path = " + request.getServletPath());
-        	
-            Enumeration e = request.getParameterNames();
-            while (e.hasMoreElements())
-            {
-                String name = (String) e.nextElement();
-                LOG.debug("Request parameter " + name + " = " + request.getParameter(name));
-            }
-            e = request.getAttributeNames();
-            while (e.hasMoreElements())
-            {
-                String name = (String) e.nextElement();
-                LOG.debug("Request attribute " + name + " = " + request.getAttribute(name));
-            }
-
-            LOG.debug("Result URI: " + URI);
-        }
-
-        HttpServletResponse response = context.getResponse();
-        PrintWriter servletWriter = response.getWriter();
-
-        IMarkupWriter writer = new HTMLWriter(servletWriter);
-
-        writer.print(URI);
-
-        writer.flush();
-    }
-
-    private String getAttribute(HttpServletRequest request, String name) throws ServletException
-    {
-        Object result = request.getAttribute(name);
-
-        if (result == null)
-            throw new ServletException(Tapestry.format("TagSupportService.null-attribute", name));
-
-        try
-        {
-            return (String) result;
-        }
-        catch (ClassCastException ex)
-        {
-            throw new ServletException(
-                Tapestry.format(
-                    "TagSupportService.attribute-not-string",
-                    name,
-                    Tapestry.getClassName(result.getClass())));
-
-        }
-    }
-
-    /**
-     *  @return {@link org.apache.tapestry.Tapestry#TAGSUPPORT_SERVICE}.
-     * 
-     **/
-
-    public String getName()
-    {
-        return Tapestry.TAGSUPPORT_SERVICE;
-    }
-
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/engine/TemplateParserDelegateImpl.java b/3.0.4/framework/src/org/apache/tapestry/engine/TemplateParserDelegateImpl.java
deleted file mode 100644
index b5cbe1f..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/engine/TemplateParserDelegateImpl.java
+++ /dev/null
@@ -1,70 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.engine;
-
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.ILocation;
-import org.apache.tapestry.INamespace;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.parse.ITemplateParserDelegate;
-import org.apache.tapestry.resolver.ComponentSpecificationResolver;
-import org.apache.tapestry.spec.IComponentSpecification;
-
-/**
- * Basic implementation of the {@link org.apache.tapestry.parse.ITemplateParserDelegate} interface.
- *
- * @author Howard Lewis Ship
- */
-public class TemplateParserDelegateImpl implements ITemplateParserDelegate
-{
-    private IComponent _component;
-    private ComponentSpecificationResolver _resolver;
-    private IRequestCycle _cycle;
-
-    public TemplateParserDelegateImpl(IComponent component, IRequestCycle cycle)
-    {
-        _component = component;
-        _resolver = new ComponentSpecificationResolver(cycle);
-        _cycle = cycle;
-    }
-
-    public boolean getKnownComponent(String componentId)
-    {
-        return _component.getSpecification().getComponent(componentId) != null;
-    }
-
-    public boolean getAllowBody(String componentId, ILocation location)
-    {
-        IComponent embedded = _component.getComponent(componentId);
-
-        if (embedded == null)
-            throw Tapestry.createNoSuchComponentException(_component, componentId, location);
-
-        return embedded.getSpecification().getAllowBody();
-    }
-
-    public boolean getAllowBody(String libraryId, String type, ILocation location)
-    {
-        INamespace namespace = _component.getNamespace();
-
-        _resolver.resolve(_cycle, namespace, libraryId, type, location);
-
-        IComponentSpecification spec = _resolver.getSpecification();
-
-        return spec.getAllowBody();
-    }
-
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/engine/package.html b/3.0.4/framework/src/org/apache/tapestry/engine/package.html
deleted file mode 100644
index d6ea383..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/engine/package.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN">
-<!-- $Id$ -->
-<html>
-<head>
-<title>Tapestry: Web Application Framework</title>
-</head>
-<body>
-
-<p>Implementations of the {@link org.apache.tapestry.IEngine} interface, including
-the standard implementation:
-{@link org.apache.tapestry.engine.BaseEngine}.  Also located here are
-default implementations of all the basic support objects, including
-{@link org.apache.tapestry.engine.RequestCycle} 
-(which implements {@link org.apache.tapestry.IRequestCycle}).
-
-@author Howard Lewis Ship <a href="mailto:hlship@apache.org">hlship@apache.org</a>
-
-</body>
-</html>
diff --git a/3.0.4/framework/src/org/apache/tapestry/enhance/BaseEnhancedClass.java b/3.0.4/framework/src/org/apache/tapestry/enhance/BaseEnhancedClass.java
deleted file mode 100644
index 49b0bce..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/enhance/BaseEnhancedClass.java
+++ /dev/null
@@ -1,74 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.enhance;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- *
- *  @author Mindbridge
- *  @version $Id$
- *  @since 3.0
- *
- */
-public abstract class BaseEnhancedClass implements IEnhancedClass
-{
-
-    /**
-     *  List of {@link IEnhancer}.
-     * 
-     **/
-    private List _enhancers;
-
-    protected List getEnhancers()
-    {
-        return _enhancers;
-    }
-
-    public void addEnhancer(IEnhancer enhancer)
-    {
-        if (_enhancers == null)
-            _enhancers = new ArrayList();
-
-        _enhancers.add(enhancer);
-    }
-
-    /**
-     * @see org.apache.tapestry.enhance.IEnhancedClass#hasModifications()
-     */
-    public boolean hasModifications()
-    {
-        return _enhancers != null && !_enhancers.isEmpty();
-    }
-
-    public void performEnhancement()
-    {
-        List enhancers = getEnhancers();
-
-        if (enhancers == null)
-            return;
-
-        int count = enhancers.size();
-
-        for (int i = 0; i < count; i++)
-        {
-            IEnhancer enhancer = (IEnhancer) enhancers.get(i);
-
-            enhancer.performEnhancement(this);
-        }
-    }
-
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/enhance/CodeGenerationException.java b/3.0.4/framework/src/org/apache/tapestry/enhance/CodeGenerationException.java
deleted file mode 100644
index a7c91b1..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/enhance/CodeGenerationException.java
+++ /dev/null
@@ -1,59 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.enhance;
-
-/**
- *  This is an unrecoverable error during code generation.
- *  It should not occur and would typically be the result 
- *  of a bug in the Tapestry code.
- *   
- *  @author Mindbridge
- *  @version $Id$
- *  @since 3.0
- */
-public class CodeGenerationException extends RuntimeException
-{
-	Throwable _cause;
-
-    public CodeGenerationException()
-    {
-        super();
-    }
-
-    public CodeGenerationException(String message)
-    {
-        super(message);
-    }
-
-    public CodeGenerationException(String message, Throwable cause)
-    {
-        super(message);
-        _cause = cause;
-    }
-
-    public CodeGenerationException(Throwable cause)
-    {
-        super();
-        _cause = cause;
-    }
-    
-    public Throwable getCause()
-    {
-    	return _cause;
-    }
-    
-    
-
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/enhance/ComponentClassFactory.java b/3.0.4/framework/src/org/apache/tapestry/enhance/ComponentClassFactory.java
deleted file mode 100644
index e56bad4..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/enhance/ComponentClassFactory.java
+++ /dev/null
@@ -1,529 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.enhance;
-
-import java.beans.BeanInfo;
-import java.beans.IntrospectionException;
-import java.beans.Introspector;
-import java.beans.PropertyDescriptor;
-import java.lang.reflect.Method;
-import java.lang.reflect.Modifier;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.tapestry.ApplicationRuntimeException;
-import org.apache.tapestry.IBinding;
-import org.apache.tapestry.ILocation;
-import org.apache.tapestry.IResourceResolver;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.spec.Direction;
-import org.apache.tapestry.spec.IComponentSpecification;
-import org.apache.tapestry.spec.IParameterSpecification;
-import org.apache.tapestry.spec.IPropertySpecification;
-
-/**
- *  Contains the logic for analyzing and enhancing a single component class.
- *  Internally, this class makes use of {@link IEnhancedClassFactory}.
- *
- *  @author Howard Lewis Ship
- *  @since 3.0
- *
- **/
-
-public class ComponentClassFactory
-{
-    private static final Log LOG = LogFactory.getLog(ComponentClassFactory.class);
-
-    /**
-     *  Package prefix to be added if the enhanced object is in a 'sysem' package 
-     */
-    private static final String PACKAGE_PREFIX = "org.apache.tapestry.";
-
-    /**
-     *  UID used to generate new class names.
-     **/
-    private static int _uid = 0;
-
-    /**
-     *  Mapping between a primitive type and its Java VM representation
-     *  Used for the encoding of array types
-     **/
-    private static Map _primitiveTypes = new HashMap();
-
-    static {
-        _primitiveTypes.put("boolean", "Z");
-        _primitiveTypes.put("short", "S");
-        _primitiveTypes.put("int", "I");
-        _primitiveTypes.put("long", "J");
-        _primitiveTypes.put("float", "F");
-        _primitiveTypes.put("double", "D");
-        _primitiveTypes.put("char", "C");
-        _primitiveTypes.put("byte", "B");
-    }
-
-    private IResourceResolver _resolver;
-
-    private IEnhancedClassFactory _enhancedClassFactory;
-    private IEnhancedClass _enhancedClass;
-    private Map _beanProperties = new HashMap();
-    private IComponentSpecification _specification;
-    private Class _componentClass;
-    private JavaClassMapping _classMapping = new JavaClassMapping();
-
-    public ComponentClassFactory(
-        IResourceResolver resolver,
-        IComponentSpecification specification,
-        Class componentClass,
-        IEnhancedClassFactory enhancedClassFactory)
-    {
-        _resolver = resolver;
-
-        _specification = specification;
-
-        _componentClass = componentClass;
-
-        _enhancedClassFactory = enhancedClassFactory;
-
-        buildBeanProperties();
-    }
-
-    private void buildBeanProperties()
-    {
-        BeanInfo info = null;
-
-        try
-        {
-            info = Introspector.getBeanInfo(_componentClass);
-
-        }
-        catch (IntrospectionException ex)
-        {
-            throw new ApplicationRuntimeException(
-                Tapestry.format(
-                    "ComponentClassFactory.unable-to-introspect-class",
-                    _componentClass.getName()),
-                ex);
-        }
-
-        PropertyDescriptor[] descriptors = info.getPropertyDescriptors();
-
-        for (int i = 0; i < descriptors.length; i++)
-        {
-            _beanProperties.put(descriptors[i].getName(), descriptors[i]);
-        }
-    }
-
-    protected PropertyDescriptor getPropertyDescriptor(String name)
-    {
-        return (PropertyDescriptor) _beanProperties.get(name);
-    }
-
-    /**
-     *  Invokes {@link #scanForEnhancements()} to identify any
-     *  enhancements needed on the class, returning true
-     *  if there are any enhancements to be performed. 
-     * 
-     **/
-
-    public boolean needsEnhancement()
-    {
-        scanForEnhancements();
-
-        return _enhancedClass != null && _enhancedClass.hasModifications();
-    }
-
-    /**
-     * @return true if pd is not null and both read/write methods are implemented
-     */
-    public boolean isImplemented(PropertyDescriptor pd)
-    {
-        if (pd == null)
-            return false;
-
-        return isImplemented(pd.getReadMethod()) && isImplemented(pd.getWriteMethod());
-    }
-
-    /**
-     * @return true if m is not null and is abstract.
-     */
-    public boolean isAbstract(Method m)
-    {
-        if (m == null)
-            return false;
-
-        return Modifier.isAbstract(m.getModifiers());
-    }
-
-    /**
-     * @return true if m is not null and not abstract  
-     */
-    public boolean isImplemented(Method m)
-    {
-        if (m == null)
-            return false;
-
-        return !Modifier.isAbstract(m.getModifiers());
-    }
-
-    /**
-     *  Given a class name, returns the corresponding class.  In addition,
-     *  scalar types, arrays of scalar types, java.lang.Object[] and
-     *  java.lang.String[] are supported.
-     * 
-     *  @param type to convert to a Class
-     *  @param location of the involved specification element (for exception reporting)
-     * 
-     **/
-
-    public Class convertPropertyType(String type, ILocation location)
-    {
-        Class result = _classMapping.getType(type);
-
-        if (result == null)
-        {
-            try
-            {
-                String typeName = translateClassName(type);
-                result = _resolver.findClass(typeName);
-            }
-            catch (Exception ex)
-            {
-                throw new ApplicationRuntimeException(
-                    Tapestry.format("ComponentClassFactory.bad-property-type", type),
-                    location,
-                    ex);
-            }
-
-            _classMapping.recordType(type, result);
-        }
-
-        return result;
-    }
-
-    /**
-     *  Translates types from standard Java format to Java VM format.
-     *  For example, java.util.Locale remains java.util.Locale, but
-     *  int[][] is translated to [[I and java.lang.Object[] to 
-     *  [Ljava.lang.Object;   
-     *  This method and its static Map should go into a utility class
-     */
-    protected String translateClassName(String type)
-    {
-        // if it is not an array, just return the type itself
-        if (!type.endsWith("[]"))
-            return type;
-
-        // if it is an array, convert it to JavaVM-style format
-        StringBuffer javaType = new StringBuffer();
-        while (type.endsWith("[]"))
-        {
-            javaType.append("[");
-            type = type.substring(0, type.length() - 2);
-        }
-
-        String primitiveIdentifier = (String) _primitiveTypes.get(type);
-        if (primitiveIdentifier != null)
-            javaType.append(primitiveIdentifier);
-        else
-            javaType.append("L" + type + ";");
-
-        return javaType.toString();
-    }
-
-    protected void checkPropertyType(PropertyDescriptor pd, Class propertyType, ILocation location)
-    {
-        if (!pd.getPropertyType().equals(propertyType))
-            throw new ApplicationRuntimeException(
-                Tapestry.format(
-                    "ComponentClassFactory.property-type-mismatch",
-                    new Object[] {
-                        _componentClass.getName(),
-                        pd.getName(),
-                        pd.getPropertyType().getName(),
-                        propertyType.getName()}),
-                location,
-                null);
-    }
-
-    /**
-     *  Checks to see that that class either doesn't provide the property, or does
-     *  but the accessor(s) are abstract.  Returns the name of the read accessor,
-     *  or null if there is no such accessor (this is helpful if the beanClass
-     *  defines a boolean property, where the name of the accessor may be isXXX or
-     *  getXXX).
-     * 
-     **/
-
-    protected String checkAccessors(String propertyName, Class propertyType, ILocation location)
-    {
-        PropertyDescriptor d = getPropertyDescriptor(propertyName);
-
-        if (d == null)
-            return null;
-
-        checkPropertyType(d, propertyType, location);
-
-        Method write = d.getWriteMethod();
-        Method read = d.getReadMethod();
-
-        if (isImplemented(write))
-            throw new ApplicationRuntimeException(
-                Tapestry.format(
-                    "ComponentClassFactory.non-abstract-write",
-                    write.getDeclaringClass().getName(),
-                    propertyName),
-                location,
-                null);
-
-        if (isImplemented(read))
-            throw new ApplicationRuntimeException(
-                Tapestry.format(
-                    "ComponentClassFactory.non-abstract-read",
-                    read.getDeclaringClass().getName(),
-                    propertyName),
-                location,
-                null);
-
-        return read == null ? null : read.getName();
-    }
-
-    protected boolean isMissingProperty(String propertyName)
-    {
-        PropertyDescriptor pd = getPropertyDescriptor(propertyName);
-
-        return !isImplemented(pd);
-    }
-
-    /**
-     *  Invoked by {@link org.apache.tapestry.enhance.DefaultComponentClassEnhancer} to
-     *  create an enahanced
-     *  subclass of the component class.  This means creating a default constructor,
-     *  new fields, and new accessor and mutator methods.  Properties are created
-     *  for connected parameters, for all formal parameters (the binding property),
-     *  and for all specified parameters (which may be transient or persistent).
-     * 
-     **/
-
-    public Class createEnhancedSubclass()
-    {
-        IEnhancedClass enhancedClass = getEnhancedClass();
-
-        String startClassName = _componentClass.getName();
-        String subclassName = enhancedClass.getClassName();
-
-        if (LOG.isDebugEnabled())
-            LOG.debug(
-                "Enhancing subclass of "
-                    + startClassName
-                    + " for "
-                    + _specification.getSpecificationLocation());
-
-        Class result = enhancedClass.createEnhancedSubclass();
-
-        if (LOG.isDebugEnabled())
-            LOG.debug("Finished creating enhanced class " + subclassName);
-
-        return result;
-    }
-
-    /**
-     *  Invoked by {@link #needsEnhancement()} to find any enhancements
-     *  that may be needed.  Should create an {@link org.apache.tapestry.enhance.IEnhancer}
-     *  for each one, and add it to the queue.
-     * 
-     **/
-
-    protected void scanForEnhancements()
-    {
-        scanForParameterEnhancements();
-        scanForSpecifiedPropertyEnhancements();
-        scanForAbstractClass();
-    }
-
-    protected void scanForAbstractClass()
-    {
-        if (Modifier.isAbstract(_componentClass.getModifiers()))
-            getEnhancedClass().addEnhancer(new NoOpEnhancer());
-
-    }
-
-    /**
-     *  Invoked by {@link #scanForEnhancements()} to locate
-     *  any enhancements needed for component parameters (this includes
-     *  binding properties and connected parameter property).
-     * 
-     **/
-
-    protected void scanForParameterEnhancements()
-    {
-        List names = _specification.getParameterNames();
-        int count = names.size();
-
-        for (int i = 0; i < count; i++)
-        {
-            String name = (String) names.get(i);
-
-            IParameterSpecification ps = _specification.getParameter(name);
-
-            scanForBindingProperty(name, ps);
-
-            scanForParameterProperty(name, ps);
-        }
-
-    }
-
-    protected void scanForSpecifiedPropertyEnhancements()
-    {
-        List names = _specification.getPropertySpecificationNames();
-        int count = names.size();
-
-        for (int i = 0; i < count; i++)
-        {
-            String name = (String) names.get(i);
-
-            IPropertySpecification ps = _specification.getPropertySpecification(name);
-
-            scanForSpecifiedProperty(ps);
-        }
-    }
-
-    protected void scanForBindingProperty(String parameterName, IParameterSpecification ps)
-    {
-        String propertyName = parameterName + Tapestry.PARAMETER_PROPERTY_NAME_SUFFIX;
-        PropertyDescriptor pd = getPropertyDescriptor(propertyName);
-
-        // only enhance custom parameter binding properties if they are declared abstract
-        if (ps.getDirection() == Direction.CUSTOM)
-        {
-            if (pd == null)
-                return;
-
-            if (!(isAbstract(pd.getReadMethod()) || isAbstract(pd.getWriteMethod())))
-                return;
-        }
-
-        if (isImplemented(pd))
-            return;
-
-        // Need to create the property.
-        getEnhancedClass().createProperty(propertyName, IBinding.class.getName());
-    }
-
-    protected void scanForParameterProperty(String parameterName, IParameterSpecification ps)
-    {
-        Direction direction = ps.getDirection();
-
-        if (direction == Direction.CUSTOM)
-            return;
-
-        if (direction == Direction.AUTO)
-        {
-            addAutoParameterEnhancer(parameterName, ps);
-            return;
-        }
-
-        String propertyName = ps.getPropertyName();
-
-        // Yes, but does it *need* a property created?
-
-        if (!isMissingProperty(propertyName))
-            return;
-
-        ILocation location = ps.getLocation();
-
-        Class propertyType = convertPropertyType(ps.getType(), location);
-
-        String readMethodName = checkAccessors(propertyName, propertyType, location);
-
-        getEnhancedClass().createProperty(propertyName, ps.getType(), readMethodName, false);
-    }
-
-    protected void addAutoParameterEnhancer(String parameterName, IParameterSpecification ps)
-    {
-        ILocation location = ps.getLocation();
-        String propertyName = ps.getPropertyName();
-
-        if (!ps.isRequired() && ps.getDefaultValue() == null)
-            throw new ApplicationRuntimeException(
-                Tapestry.format("ComponentClassFactory.auto-must-be-required", parameterName),
-                location,
-                null);
-
-        Class propertyType = convertPropertyType(ps.getType(), location);
-
-        String readMethodName = checkAccessors(propertyName, propertyType, location);
-
-        getEnhancedClass().createAutoParameter(
-            propertyName,
-            parameterName,
-            ps.getType(),
-            readMethodName);
-    }
-
-    protected void scanForSpecifiedProperty(IPropertySpecification ps)
-    {
-        String propertyName = ps.getName();
-        ILocation location = ps.getLocation();
-        Class propertyType = convertPropertyType(ps.getType(), location);
-
-        PropertyDescriptor pd = getPropertyDescriptor(propertyName);
-
-        if (isImplemented(pd))
-        {
-            // Make sure the property is at least the right type.
-
-            checkPropertyType(pd, propertyType, location);
-            return;
-        }
-
-        String readMethodName = checkAccessors(propertyName, propertyType, location);
-
-        getEnhancedClass().createProperty(
-            propertyName,
-            ps.getType(),
-            readMethodName,
-            ps.isPersistent());
-    }
-
-    public IEnhancedClass getEnhancedClass()
-    {
-        if (_enhancedClass == null)
-        {
-            String startClassName = _componentClass.getName();
-            String subclassName = startClassName + "$Enhance_" + generateUID();
-
-            // If the new class is located in a 'restricted' package, 
-            // add a neutral package prefix to the name. 
-            // The class enhancement will likely fail anyway, since the original object 
-            // would not implement IComponent, but we do not know what the enhancement
-            // will do in the future -- it might implement that interface automatically. 
-            if (subclassName.startsWith("java.") || subclassName.startsWith("javax."))
-                subclassName = PACKAGE_PREFIX + subclassName;
-
-            _enhancedClass =
-                _enhancedClassFactory.createEnhancedClass(subclassName, _componentClass);
-        }
-        return _enhancedClass;
-    }
-
-    private static synchronized int generateUID()
-    {
-        return _uid++;
-    }
-
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/enhance/DefaultComponentClassEnhancer.java b/3.0.4/framework/src/org/apache/tapestry/enhance/DefaultComponentClassEnhancer.java
deleted file mode 100644
index 46c38df..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/enhance/DefaultComponentClassEnhancer.java
+++ /dev/null
@@ -1,264 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.enhance;
-
-import java.lang.reflect.Method;
-import java.lang.reflect.Modifier;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Map;
-import java.util.Set;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.tapestry.ApplicationRuntimeException;
-import org.apache.tapestry.IResourceResolver;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.engine.IComponentClassEnhancer;
-import org.apache.tapestry.enhance.javassist.EnhancedClassFactory;
-import org.apache.tapestry.spec.IComponentSpecification;
-
-/**
- *  Default implementation of {@link IComponentClassEnhancer}.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 3.0
- * 
- **/
-
-public class DefaultComponentClassEnhancer implements IComponentClassEnhancer
-{
-    private static final Log LOG = LogFactory.getLog(DefaultComponentClassEnhancer.class);
-
-    /**
-     *  Map of Class, keyed on IComponentSpecification.
-     * 
-     **/
-
-    private Map _cachedClasses;
-    private IResourceResolver _resolver;
-    private IEnhancedClassFactory _factory;
-    private boolean _disableValidation;
-
-    /**
-     * @param resolver resource resolver used to locate classes
-     * @param disableValidation if true, then validation (of unimplemented abstract methods)
-     * is skipped
-     */
-    public DefaultComponentClassEnhancer(IResourceResolver resolver, boolean disableValidation)
-    {
-        _cachedClasses = Collections.synchronizedMap(new HashMap());
-        _resolver = resolver;
-        _factory = createEnhancedClassFactory();
-        _disableValidation = disableValidation;
-    }
-
-    protected IEnhancedClassFactory createEnhancedClassFactory()
-    {
-        return new EnhancedClassFactory(getResourceResolver());
-    }
-
-    public synchronized void reset()
-    {
-        _cachedClasses.clear();
-        _factory.reset();
-    }
-
-    public IResourceResolver getResourceResolver()
-    {
-        return _resolver;
-    }
-
-    public Class getEnhancedClass(IComponentSpecification specification, String className)
-    {
-            synchronized (specification)
-            {
-                Class result = getCachedClass(specification);
-
-                if (result == null)
-                {
-                    result = constructComponentClass(specification, className);
-                    storeCachedClass(specification, result);
-                }
-
-                return result;
-            }
-    }
-
-    protected void storeCachedClass(IComponentSpecification specification, Class cachedClass)
-    {
-        _cachedClasses.put(specification, cachedClass);
-    }
-
-    protected Class getCachedClass(IComponentSpecification specification)
-    {
-        return (Class) _cachedClasses.get(specification);
-    }
-
-    /**
-     *  Returns the class to be used for the component, which is either
-     *  the class with the given name, or an enhanced subclass.
-     * 
-     **/
-
-    protected Class constructComponentClass(
-        IComponentSpecification specification,
-        String className)
-    {
-        Class result = null;
-
-        try
-        {
-            result = _resolver.findClass(className);
-        }
-        catch (Exception ex)
-        {
-            throw new ApplicationRuntimeException(ex.getMessage(), specification.getLocation(), ex);
-        }
-
-        try
-        {
-            ComponentClassFactory factory = createComponentClassFactory(specification, result);
-
-            if (factory.needsEnhancement())
-            {
-                result = factory.createEnhancedSubclass();
-
-                if (!_disableValidation)
-                    validateEnhancedClass(result, className, specification);
-            }
-        }
-        catch (CodeGenerationException e)
-        {
-            throw new ApplicationRuntimeException(
-                Tapestry.format("ComponentClassFactory.code-generation-error", className),
-                e);
-        }
-
-        return result;
-    }
-
-    /**
-     *  Constructs a new factory for enhancing the specified class. Advanced users
-     *  may want to provide thier own enhancements to classes and this method
-     *  is the hook that allows them to provide a subclass of
-     *  {@link org.apache.tapestry.enhance.ComponentClassFactory} adding those
-     *  enhancements.
-     * 
-     **/
-
-    protected ComponentClassFactory createComponentClassFactory(
-        IComponentSpecification specification,
-        Class componentClass)
-    {
-        return new ComponentClassFactory(_resolver, specification, componentClass, _factory);
-    }
-
-    /**
-     *  Invoked to validate that an enhanced class is acceptible.  Primarily, this is to ensure
-     *  that the class contains no unimplemented abstract methods or fields.  Normally,
-     *  this kind of checking is done at compile time, but for generated
-     *  classes, there is no compile time check (!) and you can get runtime
-     *  errors when accessing unimplemented abstract methods.
-     * 
-     *
-     **/
-
-    protected void validateEnhancedClass(
-        Class subject,
-        String className,
-        IComponentSpecification specification)
-    {
-        boolean debug = LOG.isDebugEnabled();
-
-        if (debug)
-            LOG.debug("Validating " + subject);
-
-        Set implementedMethods = new HashSet();
-        Class current = subject;
-
-        while (true)
-        {
-            Method m = checkForAbstractMethods(current, implementedMethods);
-
-            if (m != null)
-                throw new ApplicationRuntimeException(
-                    Tapestry.format(
-                        "DefaultComponentClassEnhancer.no-impl-for-abstract-method",
-                        new Object[] { m, current, className, subject.getName()}),
-                    specification.getLocation(),
-                    null);
-
-            // An earlier version of this code walked the interfaces directly,
-            // but it appears that implementing an interface actually
-            // puts abstract method declarations into the class
-            // (at least, in terms of what getDeclaredMethods() returns).
-
-            // March up to the super class.
-
-            current = current.getSuperclass();
-
-            // Once advanced up to a concrete class, we trust that
-            // the compiler did its checking.
-
-            if (!Modifier.isAbstract(current.getModifiers()))
-                break;
-        }
-
-    }
-
-    /**
-     *  Searches the class for abstract methods, returning the first found.
-     *  Records non-abstract methods in the implementedMethods set.
-     * 
-     **/
-
-    private Method checkForAbstractMethods(Class current, Set implementedMethods)
-    {
-        boolean debug = LOG.isDebugEnabled();
-
-        if (debug)
-            LOG.debug("Searching for abstract methods in " + current);
-
-        Method[] methods = current.getDeclaredMethods();
-
-        for (int i = 0; i < methods.length; i++)
-        {
-            Method m = methods[i];
-
-            if (debug)
-                LOG.debug("Checking " + m);
-
-            boolean isAbstract = Modifier.isAbstract(m.getModifiers());
-
-            MethodSignature s = new MethodSignature(m);
-
-            if (isAbstract)
-            {
-                if (implementedMethods.contains(s))
-                    continue;
-
-                return m;
-            }
-
-            implementedMethods.add(s);
-        }
-
-        return null;
-    }
-
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/enhance/EnhancedClassLoader.java b/3.0.4/framework/src/org/apache/tapestry/enhance/EnhancedClassLoader.java
deleted file mode 100644
index 2162b78..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/enhance/EnhancedClassLoader.java
+++ /dev/null
@@ -1,63 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.enhance;
-
-import java.security.ProtectionDomain;
-
-import org.apache.tapestry.ApplicationRuntimeException;
-import org.apache.tapestry.Tapestry;
-
-/**
- *  A class loader that can be used to create new classes 
- *  as needed.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 3.0
- * 
- **/
-
-public class EnhancedClassLoader extends ClassLoader
-{
-
-    public EnhancedClassLoader(ClassLoader parentClassLoader)
-    {
-        super(parentClassLoader);
-    }
-
-    /**
-     *  Defines the new class.
-     * 
-     *  @throws ApplicationRuntimeException if defining the class fails.
-     * 
-     **/
-
-    public Class defineClass(String enhancedClassName, byte[] byteCode, ProtectionDomain domain)
-    {
-        try
-        {
-            return defineClass(enhancedClassName, byteCode, 0, byteCode.length, domain);
-        }
-        catch (Throwable ex)
-        {
-            throw new ApplicationRuntimeException(
-                Tapestry.format(
-                    "EnhancedClassLoader.unable-to-define-class",
-                    enhancedClassName,
-                    ex.getMessage()),
-                ex);
-        }
-    }
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/enhance/IEnhancedClass.java b/3.0.4/framework/src/org/apache/tapestry/enhance/IEnhancedClass.java
deleted file mode 100644
index d432990..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/enhance/IEnhancedClass.java
+++ /dev/null
@@ -1,54 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.enhance;
-
-/**
- *  This interface represents a class to be enhanced. An implementation 
- *  is generated by {@link org.apache.tapestry.enhance.IEnhancedClassFactory} 
- *  and is specific to the selected system of enhancement.
- * 
- *  @author Mindbridge
- *  @since 3.0
- */
-public interface IEnhancedClass
-{
-    String getClassName();
-    
-    /**
-     * Adds an enhancer for creating the specified property.
-     */
-    void createProperty(String propertyName, String propertyType);
-
-    void createProperty(
-        String propertyName,
-        String propertyType,
-        String readMethodName,
-        boolean persistent);
-
-    void createAutoParameter(
-        String propertyName,
-        String parameterName,
-        String typeClassName,
-        String readMethodName);
-
-    boolean hasModifications();
-
-    Class createEnhancedSubclass();
-    
-    /**
-     * Adds an arbitrary enhancer.
-     */
-    void addEnhancer(IEnhancer enhancer);
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/enhance/IEnhancedClassFactory.java b/3.0.4/framework/src/org/apache/tapestry/enhance/IEnhancedClassFactory.java
deleted file mode 100644
index 7287270..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/enhance/IEnhancedClassFactory.java
+++ /dev/null
@@ -1,31 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.enhance;
-
-/**
- *  An interface defining the factory for creation of new objects representing 
- *  an enhanced class. This object is used essentially as a singleton -- there is
- *  typically only one instance of it in the system. Common functionality, such as
- *  caches, can be stored here.
- * 
- *  @author Mindbridge
- *  @version $Id$
- *  @since 3.0
- */
-public interface IEnhancedClassFactory
-{
-    void reset();
-    IEnhancedClass createEnhancedClass(String className, Class parentClass);
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/enhance/IEnhancer.java b/3.0.4/framework/src/org/apache/tapestry/enhance/IEnhancer.java
deleted file mode 100644
index b947f35..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/enhance/IEnhancer.java
+++ /dev/null
@@ -1,32 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.enhance;
-
-/**
- *  Defines an object which may work with a 
- *  {@link org.apache.tapestry.enhance.ComponentClassFactory}
- *  to create an enhancement to a class.  These enhancements are
- *  typically in the form of adding new fields and methods.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 3.0
- *
- **/
-
-public interface IEnhancer
-{
-    public void performEnhancement(IEnhancedClass enhancedClass);
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/enhance/JavaClassMapping.java b/3.0.4/framework/src/org/apache/tapestry/enhance/JavaClassMapping.java
deleted file mode 100644
index cc2aa18..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/enhance/JavaClassMapping.java
+++ /dev/null
@@ -1,79 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.enhance;
-
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- *  @author Mindbridge
- *  @version $Id$
- *  @since 3.0
- */
-public class JavaClassMapping
-{
-
-    /**
-     *  Map of type (as Class), keyed on type name. 
-     * 
-     **/
-
-    private Map _typeMap = new HashMap();
-
-
-    {
-        recordType("boolean", boolean.class);
-        recordType("boolean[]", boolean[].class);
-
-        recordType("short", short.class);
-        recordType("short[]", short[].class);
-
-        recordType("int", int.class);
-        recordType("int[]", int[].class);
-
-        recordType("long", long.class);
-        recordType("long[]", long[].class);
-
-        recordType("float", float.class);
-        recordType("float[]", float[].class);
-
-        recordType("double", double.class);
-        recordType("double[]", double[].class);
-
-        recordType("char", char.class);
-        recordType("char[]", char[].class);
-
-        recordType("byte", byte.class);
-        recordType("byte[]", byte[].class);
-
-        recordType("java.lang.Object", Object.class);
-        recordType("java.lang.Object[]", Object[].class);
-
-        recordType("java.lang.String", String.class);
-        recordType("java.lang.String[]", String[].class);
-    }
-
-
-    public void recordType(String name, Class type)
-    {
-        _typeMap.put(name, type);
-    }
-
-    public Class getType(String name)
-    {
-        return (Class) _typeMap.get(name);
-    }
-
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/enhance/MethodSignature.java b/3.0.4/framework/src/org/apache/tapestry/enhance/MethodSignature.java
deleted file mode 100644
index cabbe9e..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/enhance/MethodSignature.java
+++ /dev/null
@@ -1,102 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.enhance;
-
-import java.lang.reflect.Method;
-
-import org.apache.commons.lang.builder.EqualsBuilder;
-import org.apache.commons.lang.builder.HashCodeBuilder;
-import org.apache.commons.lang.builder.ToStringBuilder;
-
-/**
- *  The signature of a {@link java.lang.reflect.Method}, including
- *  the name, return type, and parameter types.  Used when checking
- *  for unimplemented methods in enhanced subclasses.  
- * 
- *  <p>
- *  The modifiers (i.e., "public", "abstract") and thrown
- *  exceptions are not relevant for these purposes, and
- *  are not part of the signature.
- * 
- *  <p>
- *  Instances of MethodSignature are immutable and
- *  implement equals() and hashCode() properly for use
- *  in Sets or as Map keys.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 3.0
- *
- **/
-
-public class MethodSignature
-{
-    private String _name;
-    private Class _returnType;
-    private Class[] _parameterTypes;
-    private int _hashCode = 0;
-
-    public MethodSignature(Method m)
-    {
-        _name = m.getName();
-        _returnType = m.getReturnType();
-
-        // getParameterTypes() returns a copy for us to keep.
-
-        _parameterTypes = m.getParameterTypes();
-    }
-
-    public boolean equals(Object obj)
-    {
-        if (obj == null || !(obj instanceof MethodSignature))
-            return false;
-
-        MethodSignature other = (MethodSignature) obj;
-
-        EqualsBuilder builder = new EqualsBuilder();
-        builder.append(_name, other._name);
-        builder.append(_returnType, other._returnType);
-        builder.append(_parameterTypes, other._parameterTypes);
-
-        return builder.isEquals();
-    }
-
-    public int hashCode()
-    {
-        if (_hashCode == 0)
-        {
-            HashCodeBuilder builder = new HashCodeBuilder(253, 97);
-
-            builder.append(_name);
-            builder.append(_returnType);
-            builder.append(_parameterTypes);
-
-            _hashCode = builder.toHashCode();
-        }
-
-        return _hashCode;
-    }
-
-    public String toString()
-    {
-        ToStringBuilder builder = new ToStringBuilder(this);
-        builder.append("name", _name);
-        builder.append("returnType", _returnType);
-        builder.append("parameterTypes", _parameterTypes);
-
-        return builder.toString();
-    }
-
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/enhance/NoOpEnhancer.java b/3.0.4/framework/src/org/apache/tapestry/enhance/NoOpEnhancer.java
deleted file mode 100644
index d5b9c09..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/enhance/NoOpEnhancer.java
+++ /dev/null
@@ -1,35 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.enhance;
-
-/**
- * Does nothing; added to all abstract classes to force them to be subclassed as concrete
- * (even if no other enhancement takes place).
- *
- * @author Howard Lewis Ship
- * @sincd 3.0
- */
-public class NoOpEnhancer implements IEnhancer
-{
-
-	/**
-	 * Does nothing.
-	 */
-    public void performEnhancement(IEnhancedClass enhancedClass)
-    {
-
-    }
-
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/enhance/javassist/ClassFabricator.java b/3.0.4/framework/src/org/apache/tapestry/enhance/javassist/ClassFabricator.java
deleted file mode 100644
index 0fa5093..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/enhance/javassist/ClassFabricator.java
+++ /dev/null
@@ -1,295 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.enhance.javassist;
-
-import java.io.IOException;
-import java.text.MessageFormat;
-
-import javassist.CannotCompileException;
-import javassist.ClassPool;
-import javassist.CtClass;
-import javassist.CtField;
-import javassist.CtMethod;
-import javassist.NotFoundException;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.tapestry.enhance.CodeGenerationException;
-
-/**
- *  @author Mindbridge
- *  @version $Id$
- *  @since 3.0
- */
-public class ClassFabricator
-{
-    private static final Log LOG = LogFactory.getLog(ClassFabricator.class);
-
-    /**
-     *  The code template for the standard property accessor method.    
-     *                                      <p>
-     *  Legend:                             <br>
-     *      {0} = property field name       <br>
-     */
-    private static final String PROPERTY_ACCESSOR_TEMPLATE = "" +
-        "'{'" +
-        "  return {0}; " +
-        "'}'";
-        
-    /**
-     *  The code template for the standard property mutator method.    
-     *                                      <p>
-     *  Legend:                             <br>
-     *      {0} = property field name       <br>
-     */
-    private static final String PROPERTY_MUTATOR_TEMPLATE = "" +
-        "'{'" +
-        "  {0} = $1; " +
-        "'}'";
-        
-    /**
-     *  The code template for the standard persistent property mutator method.    
-     *                                      <p>
-     *  Legend:                             <br>
-     *      {0} = property field name       <br>
-     *      {1} = property name             <br>
-     */
-    private static final String PERSISTENT_PROPERTY_MUTATOR_TEMPLATE =
-        "" +
-        "'{'" +
-        "  {0} = $1;" +
-        "  fireObservedChange(\"{1}\", {0}); " +
-        "'}'";
-
-    private ClassPool _classPool;
-    private CtClass _genClass;
-
-    public ClassFabricator(String className, CtClass parentClass, ClassPool classPool)
-    {
-        _classPool = classPool;
-        _genClass = _classPool.makeClass(className, parentClass);
-    }
-
-    public CtField getField(String fieldName)
-    {
-        try
-        {
-            return _genClass.getField(fieldName);
-        }
-        catch (NotFoundException e)
-        {
-            return null;
-        }
-    }
-    
-    public void createField(CtClass fieldType, String fieldName)
-    {
-        if (LOG.isDebugEnabled())
-            LOG.debug("Creating field: " + fieldName);
-
-        try
-        {
-            CtField field = new CtField(fieldType, fieldName, _genClass);
-            _genClass.addField(field);
-        }
-        catch (CannotCompileException e)
-        {
-            throw new CodeGenerationException(e);
-        }
-    }
-
-    public void createField(CtClass fieldType, String fieldName, String init)
-    {
-        if (LOG.isDebugEnabled())
-            LOG.debug("Creating field: " + fieldName + " with initializer: " + init);
-
-        try
-        {
-            CtField field = new CtField(fieldType, fieldName, _genClass);
-            _genClass.addField(field, init);
-        }
-        catch (CannotCompileException e)
-        {
-            throw new CodeGenerationException(e);
-        }
-    }
-
-    public CtMethod getMethod(String name, String signature)
-    {
-        try
-        {
-            return _genClass.getMethod(name, signature);
-        }
-        catch (NotFoundException e)
-        {
-            return null;
-        }
-    }
-
-    public void addMethod(CtMethod method) throws CannotCompileException
-    {
-        _genClass.addMethod(method);
-    }
-
-    /**
-     *  Constructs an accessor method name.
-     * 
-     **/
-
-    public String buildMethodName(String prefix, String propertyName)
-    {
-        StringBuffer result = new StringBuffer(prefix);
-
-        char ch = propertyName.charAt(0);
-
-        result.append(Character.toUpperCase(ch));
-
-        result.append(propertyName.substring(1));
-
-        return result.toString();
-    }
-
-    public CtMethod createMethod(
-        CtClass returnType,
-        String methodName,
-        CtClass[] arguments)
-    {
-        if (LOG.isDebugEnabled())
-            LOG.debug("Creating method: " + methodName);
-
-        CtMethod method = new CtMethod(returnType, methodName, arguments, _genClass);
-
-        return method;
-    }
-
-    public CtMethod createAccessor(
-        CtClass fieldType,
-        String propertyName,
-        String readMethodName)
-    {
-        String methodName =
-            readMethodName == null ? buildMethodName("get", propertyName) : readMethodName;
-
-        if (LOG.isDebugEnabled())
-            LOG.debug("Creating accessor: " + methodName);
-
-        CtMethod method = new CtMethod(fieldType, methodName, new CtClass[0], _genClass);
-
-        return method;
-    }
-
-    /**
-     *  Creates an accessor (getter) method for the property.
-     * 
-     *  @param fieldType the return type for the method
-     *  @param fieldName the name of the field (not the name of the property)
-     *  @param propertyName the name of the property (used to build the name of the method)
-     *  @param readMethodName if not null, the name of the method to use
-     * 
-     **/
-
-    public void createPropertyAccessor(
-        CtClass fieldType,
-        String fieldName,
-        String propertyName,
-        String readMethodName)
-    {
-        try
-        {
-            String accessorBody =
-                MessageFormat.format(PROPERTY_ACCESSOR_TEMPLATE, new Object[] { fieldName, propertyName });
-
-            CtMethod method = createAccessor(fieldType, propertyName, readMethodName);
-            method.setBody(accessorBody);
-            _genClass.addMethod(method);
-        }
-        catch (CannotCompileException e)
-        {
-            throw new CodeGenerationException(e);
-        }
-    }
-
-    public CtMethod createMutator(
-        CtClass fieldType,
-        String propertyName)
-    {
-        String methodName = buildMethodName("set", propertyName);
-
-        if (LOG.isDebugEnabled())
-            LOG.debug("Creating mutator: " + methodName);
-
-        CtMethod method =
-            new CtMethod(CtClass.voidType, methodName, new CtClass[] { fieldType }, _genClass);
-
-        return method;
-    }
-
-    /**
-     *  Creates a mutator (aka "setter") method.
-     * 
-     *  @param fieldType type of field value (and type of parameter value)
-     *  @param fieldName name of field (not property!)
-     *  @param propertyName name of property (used to construct method name)
-     *  @param isPersistent if true, adds a call to fireObservedChange()
-     * 
-     **/
-
-    public void createPropertyMutator(
-        CtClass fieldType,
-        String fieldName,
-        String propertyName,
-        boolean isPersistent)
-    {
-        String bodyTemplate = isPersistent ? PERSISTENT_PROPERTY_MUTATOR_TEMPLATE : PROPERTY_MUTATOR_TEMPLATE;
-        String body = MessageFormat.format(bodyTemplate, new Object[] { fieldName, propertyName });
-
-        try
-        {
-            CtMethod method = createMutator(fieldType, propertyName);
-            method.setBody(body);
-            _genClass.addMethod(method);
-        }
-        catch (CannotCompileException e)
-        {
-            throw new CodeGenerationException(e);
-        }
-    }
-
-    
-    public void commit()
-    {
-    }
-
-    public byte[] getByteCode()
-    {
-        try
-        {
-            return _genClass.toBytecode();
-        }
-        catch (NotFoundException e)
-        {
-            throw new CodeGenerationException(e);
-        }
-        catch (IOException e)
-        {
-            throw new CodeGenerationException(e);
-        }
-        catch (CannotCompileException e)
-        {
-            throw new CodeGenerationException(e);
-        }
-    }
-
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/enhance/javassist/ClassMapping.java b/3.0.4/framework/src/org/apache/tapestry/enhance/javassist/ClassMapping.java
deleted file mode 100644
index 6c99b83..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/enhance/javassist/ClassMapping.java
+++ /dev/null
@@ -1,102 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.enhance.javassist;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import javassist.ClassPool;
-import javassist.CtClass;
-import javassist.NotFoundException;
-
-import org.apache.tapestry.enhance.CodeGenerationException;
-
-/**
- *  @author Mindbridge
- *  @version $Id$
- *  @since 3.0
- */
-public class ClassMapping
-{
-
-    /**
-     *  Map of type (as Type), keyed on type name.
-     * 
-     *  This should be kept in synch with ParameterManager, which maintains
-     *  a similar list.
-     * 
-     **/
-
-    private Map _objectTypeMap = new HashMap();
-    private ClassPool _classPool;
-
-    public ClassMapping(ClassPool classPool)
-    {
-        _classPool = classPool;
-        initialize();
-    }
-
-    protected void initialize()
-    {
-        recordType("boolean", CtClass.booleanType);
-        recordType("short", CtClass.shortType);
-        recordType("int", CtClass.intType);
-        recordType("long", CtClass.longType);
-        recordType("float", CtClass.floatType);
-        recordType("double", CtClass.doubleType);
-        recordType("char", CtClass.charType);
-        recordType("byte", CtClass.byteType);
-        
-        try
-        {
-            loadType("boolean[]");
-            loadType("short[]");
-            loadType("int[]");
-            loadType("long[]");
-            loadType("float[]");
-            loadType("double[]");
-            loadType("char[]");
-            loadType("byte[]");
-
-            loadType("java.lang.Object");
-            loadType("java.lang.Object[]");
-
-            loadType("java.lang.String");
-            loadType("java.lang.String[]");
-        }
-        catch (NotFoundException e)
-        {
-            // This exception should not occur since the types above must exist.
-            // Nevertheless...
-            throw new CodeGenerationException(e);
-        }
-    }
-
-    public void loadType(String type) throws NotFoundException
-    {
-        CtClass objectType = _classPool.get(type);
-        _objectTypeMap.put(type, objectType);
-    }
-    
-    public void recordType(String type, CtClass objectType)
-    {
-        _objectTypeMap.put(type, objectType);
-    }
-
-    public CtClass getType(String type)
-    {
-        return (CtClass) _objectTypeMap.get(type);
-    }
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/enhance/javassist/CreateAutoParameterEnhancer.java b/3.0.4/framework/src/org/apache/tapestry/enhance/javassist/CreateAutoParameterEnhancer.java
deleted file mode 100644
index d1bafc7..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/enhance/javassist/CreateAutoParameterEnhancer.java
+++ /dev/null
@@ -1,220 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.enhance.javassist;
-
-import java.text.MessageFormat;
-import java.util.HashMap;
-import java.util.Map;
-
-import javassist.CannotCompileException;
-import javassist.CtClass;
-import javassist.CtMethod;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.enhance.CodeGenerationException;
-import org.apache.tapestry.enhance.IEnhancedClass;
-import org.apache.tapestry.enhance.IEnhancer;
-
-/**
- *  Creates a synthetic property for a
- *  {@link org.apache.tapestry.spec.Direction#AUTO}
- *  parameter.
- *
- *  @author Mindbridge
- *  @version $Id$
- *  @since 3.0
- *
- **/
-
-public class CreateAutoParameterEnhancer implements IEnhancer
-{
-    private static final Log LOG = LogFactory.getLog(CreateAutoParameterEnhancer.class);
-
-    /**
-     *  The code template for the parameter accessor method.    
-     *                                      <p>
-     *  Legend:                             <br>
-     *      {0} = readBindingMethodName     <br>
-     *      {1} = binding value accessor    <br>
-     *      {2} = cast (if needed)          <br>
-     */
-    protected static final String PARAMETER_ACCESSOR_TEMPLATE =
-        ""
-            + "'{'"
-            + "  org.apache.tapestry.IBinding binding = {0}();"
-            + "  return {2} binding.{1}(); "
-            + "'}'";
-
-    /**
-     *  The code template for the parameter mutator method.    
-     *                                      <p>
-     *  Legend:                             <br>
-     *      {0} = readBindingMethodName     <br>
-     *      {1} = binding value mutator     <br>
-     *      {2} = value cast
-     */
-    protected static final String PARAMETER_MUTATOR_TEMPLATE =
-        ""
-            + "'{'"
-            + "  org.apache.tapestry.IBinding binding = {0}();"
-            + "  binding.{1}({2} $1); "
-            + "'}'";
-
-    /**
-     *  The list of types that have accessors and mutators 
-     *  other than getObject()/setObject.
-     *  The key in the Map is the type, the value is the property name in IBinding 
-     */
-    private static final Map SPECIAL_BINDING_TYPES = new HashMap();
-
-    static {
-        SPECIAL_BINDING_TYPES.put("boolean", "boolean");
-        SPECIAL_BINDING_TYPES.put("int", "int");
-        SPECIAL_BINDING_TYPES.put("double", "double");
-        SPECIAL_BINDING_TYPES.put("java.lang.String", "string");
-    }
-
-    private static final Map VALUE_CAST_TYPES = new HashMap();
-
-    static {
-        VALUE_CAST_TYPES.put("byte", "($w)");
-        VALUE_CAST_TYPES.put("long", "($w)");
-        VALUE_CAST_TYPES.put("short", "($w)");
-        VALUE_CAST_TYPES.put("char", "($w)");
-        VALUE_CAST_TYPES.put("float", "($w)");
-    }
-
-    private EnhancedClass _enhancedClass;
-    private String _propertyName;
-    private String _parameterName;
-    private CtClass _type;
-    private String _readMethodName;
-
-    public CreateAutoParameterEnhancer(
-        EnhancedClass enhancedClass,
-        String propertyName,
-        String parameterName,
-        CtClass type,
-        String readMethodName)
-    {
-        _enhancedClass = enhancedClass;
-        _propertyName = propertyName;
-        _parameterName = parameterName;
-        _type = type;
-        _readMethodName = readMethodName;
-    }
-
-    public void performEnhancement(IEnhancedClass enhancedClass)
-    {
-        if (LOG.isDebugEnabled())
-            LOG.debug("Creating auto property: " + _propertyName);
-
-        EnhancedClass jaEnhancedClass = (EnhancedClass) enhancedClass;
-        ClassFabricator cf = jaEnhancedClass.getClassFabricator();
-
-        String readBindingMethodName =
-            cf.buildMethodName("get", _parameterName + Tapestry.PARAMETER_PROPERTY_NAME_SUFFIX);
-
-        createReadMethod(cf, readBindingMethodName);
-        createWriteMethod(cf, readBindingMethodName);
-    }
-
-    private String getSpecialBindingType()
-    {
-        String typeName = _type.getName();
-        return (String) SPECIAL_BINDING_TYPES.get(typeName);
-    }
-
-    private String getValueCastType()
-    {
-        String typeName = _type.getName();
-
-        return (String) VALUE_CAST_TYPES.get(typeName);
-    }
-
-    private void createReadMethod(ClassFabricator cf, String readBindingMethodName)
-    {
-        String castToType;
-        String bindingValueAccessor;
-
-        String specialBindingType = getSpecialBindingType();
-        if (specialBindingType != null)
-        {
-            castToType = "";
-            bindingValueAccessor = cf.buildMethodName("get", specialBindingType);
-        }
-        else
-        {
-            castToType = "($r)";
-            bindingValueAccessor = "getObject";
-        }
-
-        String readMethodBody =
-            MessageFormat.format(
-                PARAMETER_ACCESSOR_TEMPLATE,
-                new Object[] { readBindingMethodName, bindingValueAccessor, castToType });
-
-        try
-        {
-            CtMethod method = cf.createAccessor(_type, _propertyName, _readMethodName);
-            method.setBody(readMethodBody);
-            cf.addMethod(method);
-        }
-        catch (CannotCompileException e)
-        {
-            throw new CodeGenerationException(e);
-        }
-    }
-
-    private void createWriteMethod(ClassFabricator cf, String readBindingMethodName)
-    {
-        String bindingValueAccessor;
-        String valueCast = "";
-
-        String specialBindingType = getSpecialBindingType();
-        if (specialBindingType != null)
-        {
-            bindingValueAccessor = cf.buildMethodName("set", specialBindingType);
-        }
-        else
-        {
-            bindingValueAccessor = "setObject";
-
-            String castForType = getValueCastType();
-
-            if (castForType != null)
-                valueCast = castForType;
-        }
-
-        String writeMethodBody =
-            MessageFormat.format(
-                PARAMETER_MUTATOR_TEMPLATE,
-                new Object[] { readBindingMethodName, bindingValueAccessor, valueCast });
-
-        try
-        {
-            CtMethod method = cf.createMutator(_type, _propertyName);
-            method.setBody(writeMethodBody);
-            cf.addMethod(method);
-        }
-        catch (CannotCompileException e)
-        {
-            throw new CodeGenerationException(e);
-        }
-    }
-
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/enhance/javassist/CreatePropertyEnhancer.java b/3.0.4/framework/src/org/apache/tapestry/enhance/javassist/CreatePropertyEnhancer.java
deleted file mode 100644
index ad16879..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/enhance/javassist/CreatePropertyEnhancer.java
+++ /dev/null
@@ -1,63 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.enhance.javassist;
-
-import javassist.CtClass;
-
-import org.apache.tapestry.enhance.IEnhancedClass;
-import org.apache.tapestry.enhance.IEnhancer;
-
-/**
- *  @author Mindbridge
- *  @version $Id$
- *  @since 3.0
- */
-public class CreatePropertyEnhancer implements IEnhancer
-{
-    private String _propertyName;
-    private CtClass _propertyType;
-    private boolean _persistent;
-    private String _readMethodName;
-
-    public CreatePropertyEnhancer(String propertyName, CtClass propertyType)
-    {
-        this(propertyName, propertyType, null, false);
-    }
-
-    public CreatePropertyEnhancer(
-        String propertyName,
-        CtClass propertyType,
-        String readMethodName,
-        boolean persistent)
-    {
-        _propertyName = propertyName;
-        _propertyType = propertyType;
-        _readMethodName = readMethodName;
-        _persistent = persistent;
-    }
-
-    public void performEnhancement(IEnhancedClass enhancedClass)
-    {
-        String fieldName = "_$" + _propertyName;
-
-        EnhancedClass jaEnhancedClass = (EnhancedClass) enhancedClass;
-        ClassFabricator classFabricator = jaEnhancedClass.getClassFabricator(); 
-
-        classFabricator.createField(_propertyType, fieldName);
-        classFabricator.createPropertyAccessor(_propertyType, fieldName, _propertyName, _readMethodName);
-        classFabricator.createPropertyMutator(_propertyType, fieldName, _propertyName, _persistent);
-    }
-
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/enhance/javassist/EnhancedClass.java b/3.0.4/framework/src/org/apache/tapestry/enhance/javassist/EnhancedClass.java
deleted file mode 100644
index eef0adc..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/enhance/javassist/EnhancedClass.java
+++ /dev/null
@@ -1,139 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.enhance.javassist;
-
-import javassist.ClassPool;
-import javassist.CtClass;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.tapestry.enhance.BaseEnhancedClass;
-import org.apache.tapestry.enhance.EnhancedClassLoader;
-import org.apache.tapestry.enhance.IEnhancer;
-
-/**
- *  Represents a class to be enhanced using Javassist. 
- * 
- *  @author Mindbridge
- *  @version $Id$
- *  @since 3.0
- */
-public class EnhancedClass extends BaseEnhancedClass
-{
-    private static final Log LOG = LogFactory.getLog(EnhancedClass.class);
-
-    private String _className;
-    private Class _parentClass;
-    private EnhancedClassFactory _classFactory;
-
-    private ClassFabricator _classFabricator = null;
-
-    public EnhancedClass(String className, Class parentClass, EnhancedClassFactory classFactory)
-    {
-        _className = className;
-        _parentClass = parentClass;
-        _classFactory = classFactory;
-    }
-
-    /**
-     * @see org.apache.tapestry.enhance.IEnhancedClass#getClassName()
-     */
-    public String getClassName()
-    {
-        return _className;
-    }
-
-    public CtClass getObjectType(String type)
-    {
-        return _classFactory.getObjectType(type);
-    }
-
-    public ClassFabricator getClassFabricator()
-    {
-        if (_classFabricator == null)
-        {
-            CtClass jaParentClass = getObjectType(_parentClass.getName());
-            ClassPool classPool = _classFactory.getClassPool();
-            _classFabricator = new ClassFabricator(_className, jaParentClass, classPool);
-        }
-        return _classFabricator;
-    }
-
-    /**
-     * @see org.apache.tapestry.enhance.IEnhancedClass#createProperty(java.lang.String, java.lang.String)
-     */
-    public void createProperty(String propertyName, String propertyType)
-    {
-        createProperty(propertyName, propertyType, null, false);
-    }
-
-    /**
-     * @see org.apache.tapestry.enhance.IEnhancedClass#createProperty(java.lang.String, java.lang.String, java.lang.String, boolean)
-     */
-    public void createProperty(
-        String propertyName,
-        String propertyType,
-        String readMethodName,
-        boolean persistent)
-    {
-        IEnhancer enhancer =
-            new CreatePropertyEnhancer(
-                propertyName,
-                getObjectType(propertyType),
-                readMethodName,
-                persistent);
-        addEnhancer(enhancer);
-    }
-
-    /**
-     * @see org.apache.tapestry.enhance.IEnhancedClass#createAutoParameter(java.lang.String, java.lang.String, java.lang.String, java.lang.String)
-     */
-    public void createAutoParameter(
-        String propertyName,
-        String parameterName,
-        String typeClassName,
-        String readMethodName)
-    {
-        IEnhancer enhancer =
-            new CreateAutoParameterEnhancer(
-                this,
-                propertyName,
-                parameterName,
-                getObjectType(typeClassName),
-                readMethodName);
-        addEnhancer(enhancer);
-    }
-
-    /**
-     * @see org.apache.tapestry.enhance.IEnhancedClass#createEnhancedSubclass()
-     */
-    public Class createEnhancedSubclass()
-    {
-        performEnhancement();
-
-        ClassFabricator cf = getClassFabricator();
-        cf.commit();
-
-        String enhancedClassName = getClassName();
-        byte[] enhancedClassBytes = cf.getByteCode();
-
-        EnhancedClassLoader loader = _classFactory.getEnhancedClassLoader();
-        return loader.defineClass(
-            enhancedClassName,
-            enhancedClassBytes,
-            _parentClass.getProtectionDomain());
-    }
-
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/enhance/javassist/EnhancedClassFactory.java b/3.0.4/framework/src/org/apache/tapestry/enhance/javassist/EnhancedClassFactory.java
deleted file mode 100644
index d858219..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/enhance/javassist/EnhancedClassFactory.java
+++ /dev/null
@@ -1,134 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.enhance.javassist;
-
-import javassist.ClassPool;
-import javassist.CtClass;
-import javassist.LoaderClassPath;
-import javassist.NotFoundException;
-
-import org.apache.tapestry.IResourceResolver;
-import org.apache.tapestry.enhance.CodeGenerationException;
-import org.apache.tapestry.enhance.EnhancedClassLoader;
-import org.apache.tapestry.enhance.IEnhancedClass;
-import org.apache.tapestry.enhance.IEnhancedClassFactory;
-
-/**
- *  This class defines the factory for creation of new Javassist enhanced classes. 
- *  There is typically only one object of this class in the system. 
- *  Common functionality objects for Javassist enhancement are stored here.
- * 
- *  @author Mindbridge
- *  @version $Id$
- *  @since 3.0
- */
-public class EnhancedClassFactory implements IEnhancedClassFactory
-{
-    private IResourceResolver _resourceResolver;
-    private EnhancedClassLoader _enhancedClassLoader;
-    private ClassPool _classPool;
-
-    private ClassMapping _typeMap = null;
-
-    public EnhancedClassFactory(IResourceResolver resourceResolver)
-    {
-        _resourceResolver = resourceResolver;
-
-        reset();
-    }
-    
-    protected ClassPool createClassPool()
-    {
-        ClassLoader loader = _resourceResolver.getClassLoader();
-        
-        // create a new ClassPool and make sure it uses the application resource resolver 
-        ClassPool classPool = new ClassPool(null);
-        classPool.insertClassPath(new LoaderClassPath(loader));
-        
-        return classPool;
-    }
-    
-    /**
-     * @see org.apache.tapestry.enhance.IEnhancedClassFactory#reset()
-     */
-    public synchronized void reset()
-    {
-        // create a new class pool and discard the previous one
-        _classPool = createClassPool();
-        _typeMap = new ClassMapping(_classPool);
-
-        ClassLoader loader = _resourceResolver.getClassLoader();
-        _enhancedClassLoader = new EnhancedClassLoader(loader);
-    }
-   
-
-    /**
-     * @see org.apache.tapestry.enhance.IEnhancedClassFactory#createEnhancedClass(java.lang.String, java.lang.Class)
-     */
-    public IEnhancedClass createEnhancedClass(String className, Class parentClass)
-    {
-        return new EnhancedClass(className, parentClass, this);
-    }
-
-    public ClassPool getClassPool()
-    {
-        return _classPool;
-    }
-
-    public ClassMapping getClassMapping()
-    {
-        return _typeMap;
-    }
-
-    /**
-     *  Given the java class, returns the equivalent {@link CtClass type}.  In addition,
-     *  knows about scalar types, arrays of scalar types, java.lang.Object[] and
-     *  java.lang.String[].
-     * 
-     **/
-
-    public CtClass getObjectType(String type)
-    {
-
-            synchronized (this) {
-                CtClass result = getClassMapping().getType(type);
-
-                if (result == null)
-                {
-                    try
-                    {
-                        result = _classPool.get(type);
-                        getClassMapping().recordType(type, result);
-                    }
-                    catch (NotFoundException e)
-                    {
-                        throw new CodeGenerationException(e);
-                    }
-                }
-                return result;
-            }
-
-    }
-
-
-    /**
-     * @return The class loader to be used to create the enhanced class
-     */
-    public EnhancedClassLoader getEnhancedClassLoader()
-    {
-        return _enhancedClassLoader;
-    }
-
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/enhance/package.html b/3.0.4/framework/src/org/apache/tapestry/enhance/package.html
deleted file mode 100644
index 390492b..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/enhance/package.html
+++ /dev/null
@@ -1,14 +0,0 @@
-<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN">
-<!-- $Id$ -->
-<html>
-<head>
-<title>Tapestry: Web Application Framework</title>
-</head>
-<body>
-
-Classes used for performing dynamic bytecode enhancement of component and page classes.
-
-@author Howard Lewis Ship <a href="mailto:hlship@apache.org">hlship@apache.org</a>
-
-</body>
-</html>
diff --git a/3.0.4/framework/src/org/apache/tapestry/event/ChangeObserver.java b/3.0.4/framework/src/org/apache/tapestry/event/ChangeObserver.java
deleted file mode 100644
index 8f7b632..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/event/ChangeObserver.java
+++ /dev/null
@@ -1,37 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.event;
-
-/**
- * May observe changes in an object's properties.  This is a "weak" variation
- * on JavaBean's style bound properties.  It is used when there will be at most
- * a single listener on property changes, and that the listener is not interested
- * in the old value.
- *
- * @author Howard Lewis Ship
- * @version $Id$
- * 
- **/
-
-public interface ChangeObserver
-{
-    /**
-     *  Sent when the observed object changes a property.  The event identifies
-     *  the object, the property and the new value.
-     *
-     **/
-
-    public void observeChange(ObservedChangeEvent event);
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/event/ObservedChangeEvent.java b/3.0.4/framework/src/org/apache/tapestry/event/ObservedChangeEvent.java
deleted file mode 100644
index 3adcf22..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/event/ObservedChangeEvent.java
+++ /dev/null
@@ -1,143 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.event;
-
-import java.util.EventObject;
-
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.Tapestry;
-
-/**
- * Event which describes a change to a particular {@link IComponent}.
- *
- * @author Howard Ship
- * @version $Id$
- * 
- **/
-
-public class ObservedChangeEvent extends EventObject
-{
-    private IComponent _component;
-    private String _propertyName;
-    private Object _newValue;
-
-	/**
-	 * @deprecated To be removed in 3.1. Use {@link #ObservedChangeEvent(IComponent, String, Object)} instead.
-	 */
-    public ObservedChangeEvent(IComponent component, String propertyName, char newValue)
-    {
-        this(component, propertyName, new Character(newValue));
-    }
-
-	/**
-	 * @deprecated To be removed in 3.1. Use {@link #ObservedChangeEvent(IComponent, String, Object)} instead.
-	 */
-    public ObservedChangeEvent(IComponent component, String propertyName, byte newValue)
-    {
-        this(component, propertyName, new Byte(newValue));
-    }
-
-	/**
-	 * @deprecated To be removed in 3.1. Use {@link #ObservedChangeEvent(IComponent, String, Object)} instead.
-	 */
-    public ObservedChangeEvent(IComponent component, String propertyName, short newValue)
-    {
-        this(component, propertyName, new Short(newValue));
-    }
-
-	/**
-	 * @deprecated To be removed in 3.1. Use {@link #ObservedChangeEvent(IComponent, String, Object)} instead.
-	 */
-    public ObservedChangeEvent(IComponent component, String propertyName, int newValue)
-    {
-        this(component, propertyName, new Integer(newValue));
-    }
-
-	/**
-	 * @deprecated To be removed in 3.1. Use {@link #ObservedChangeEvent(IComponent, String, Object)} instead.
-	 */
-    public ObservedChangeEvent(IComponent component, String propertyName, long newValue)
-    {
-        this(component, propertyName, new Long(newValue));
-    }
-
-	/**
-	 * @deprecated To be removed in 3.1. Use {@link #ObservedChangeEvent(IComponent, String, Object)} instead.
-	 */
-   public ObservedChangeEvent(IComponent component, String propertyName, double newValue)
-    {
-        this(component, propertyName, new Double(newValue));
-    }
-
-	/**
-	 * @deprecated To be removed in 3.1. Use {@link #ObservedChangeEvent(IComponent, String, Object)} instead.
-	 */
-   public ObservedChangeEvent(IComponent component, String propertyName, float newValue)
-    {
-        this(component, propertyName, new Float(newValue));
-    }
-
-    /**
-     *  Creates the event.  The new value must be null, or be a serializable object.
-     *  (It is declared as Object as a concession to the Java 2 collections framework, where
-     *  the implementations are serializable but the interfaces (Map, List, etc.) don't
-     *  extend Serializable ... so we wait until runtime to check).
-     *
-     *  @param component The component (not necessarily a page) whose property changed.
-     *  @param propertyName the name of the property which was changed.
-     *  @param newValue The new value of the property. 
-     *
-     *  @throws IllegalArgumentException if propertyName is null, or
-     *  if the new value is not serializable
-     *
-     **/
-
-    public ObservedChangeEvent(IComponent component, String propertyName, Object newValue)
-    {
-        super(component);
-
-        if (propertyName == null)
-            throw new IllegalArgumentException(
-                Tapestry.format("ObservedChangeEvent.null-property-name", component));
-
-        _component = component;
-        _propertyName = propertyName;
-        _newValue = newValue;
-    }
-
-	/**
-	 * @deprecated To be removed in 3.1. Use {@link #ObservedChangeEvent(IComponent, String, Object)} instead.
-	 */
-    public ObservedChangeEvent(IComponent component, String propertyName, boolean newValue)
-    {
-        this(component, propertyName, newValue ? Boolean.TRUE : Boolean.FALSE);
-    }
-
-    public IComponent getComponent()
-    {
-        return _component;
-    }
-
-    public Object getNewValue()
-    {
-        return _newValue;
-    }
-
-    public String getPropertyName()
-    {
-        return _propertyName;
-    }
-
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/event/PageDetachListener.java b/3.0.4/framework/src/org/apache/tapestry/event/PageDetachListener.java
deleted file mode 100644
index f9c79b1..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/event/PageDetachListener.java
+++ /dev/null
@@ -1,37 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.event;
-
-import java.util.EventListener;
-
-/**
- *  An interface for objects that want to know when the end of the
- *  request cycle occurs, so that any resources that should be limited
- *  to just one request cycle can be released.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 1.0.5
- **/
-
-public interface PageDetachListener extends EventListener
-{
-    /**
-     *  Invoked by the page from its {@link org.apache.tapestry.IPage#detach()} method.
-     *
-     **/
-
-    public void pageDetached(PageEvent event);
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/event/PageEvent.java b/3.0.4/framework/src/org/apache/tapestry/event/PageEvent.java
deleted file mode 100644
index eaa3335..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/event/PageEvent.java
+++ /dev/null
@@ -1,61 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.event;
-
-import java.util.EventObject;
-
-import org.apache.tapestry.IPage;
-import org.apache.tapestry.IRequestCycle;
-
-/**
- *  Encapsulates information related to the page listener
- *  interfaces.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 1.0.5
- * 
- **/
-
-public class PageEvent extends EventObject
-{
-    private transient IPage page;
-    private transient IRequestCycle requestCycle;
-
-    /**
-     *  Constructs a new instance of the event.  The
-     *  {@link EventObject#getSource()} of the event will
-     *  be the {@link IPage}.
-     *
-     **/
-
-    public PageEvent(IPage page, IRequestCycle cycle)
-    {
-        super(page);
-
-        this.page = page;
-        this.requestCycle = cycle;
-    }
-
-    public IPage getPage()
-    {
-        return page;
-    }
-
-    public IRequestCycle getRequestCycle()
-    {
-        return requestCycle;
-    }
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/event/PageRenderListener.java b/3.0.4/framework/src/org/apache/tapestry/event/PageRenderListener.java
deleted file mode 100644
index 1a2fd99..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/event/PageRenderListener.java
+++ /dev/null
@@ -1,52 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.event;
-
-import java.util.EventListener;
-
-/**
- *  An object that listens to page events.  The {@link org.apache.tapestry.IPage page} generates
- *  events before and after rendering a response.  These events also occur before and
- *  after a form rewinds.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 1.0.5
- * 
- **/
-
-public interface PageRenderListener extends EventListener
-{
-    /**
-     *  Invoked before just before the page renders a response.  This provides
-     *  listeners with a last chance to initialize themselves for the render.
-     *  This initialization can include modifying peristent page properties.
-     *
-     *
-     **/
-
-    public void pageBeginRender(PageEvent event);
-
-    /**
-     *  Invoked after a successful render of the page.
-     *  Allows objects to release any resources they needed during the
-     *  the render.
-     * 
-     *  @see org.apache.tapestry.AbstractComponent#pageEndRender(PageEvent)
-     *
-     **/
-
-    public void pageEndRender(PageEvent event);
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/event/PageValidateListener.java b/3.0.4/framework/src/org/apache/tapestry/event/PageValidateListener.java
deleted file mode 100644
index 2c3087e..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/event/PageValidateListener.java
+++ /dev/null
@@ -1,38 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.event;
-
-import java.util.EventListener;
-
-/**
- *  An interface for objects that want to take part in the validation of the page.
- *
- *  @author Mindbridge
- *  @version $Id$
- *  @since 3.0
- **/
-
-public interface PageValidateListener extends EventListener
-{
-    /**
-     *  Invoked by the page from its
-     *  {@link org.apache.tapestry.IPage#validate(org.apache.tapestry.IRequestCycle)} method.
-     *
-     *  <p>May throw a {@link org.apache.tapestry.PageRedirectException}, to redirect the user
-     *  to an appropriate part of the system (such as, a login page).
-     **/
-
-    public void pageValidate(PageEvent event);
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/event/package.html b/3.0.4/framework/src/org/apache/tapestry/event/package.html
deleted file mode 100644
index 70e3206..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/event/package.html
+++ /dev/null
@@ -1,28 +0,0 @@
-<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN">
-<!-- $Id$ -->
-<html>
-<head>
-<title>Tapestry: Web Application Framework</title>
-</head>
-<body>
-
-Defines events and listener interfaces for Tapestry.
-
-<p>
-{@link org.apache.tapestry.event.ChangeObserver}
-and
-{@link org.apache.tapestry.event.ObservedChangeEvent}
-are used to communicate changes in persistent properties
-from pages and components to page recorders.
-
-<p>
-The remaining interfaces
-{@link org.apache.tapestry.event.PageDetachListener} and
-{@link org.apache.tapestry.event.PageRenderListener} allow
-objects to know about key lifecycle events regarding
-a page.
-
-@author Howard Lewis Ship <a href="mailto:hlship@apache.org">hlship@apache.org</a>
-
-</body>
-</html>
diff --git a/3.0.4/framework/src/org/apache/tapestry/form/AbstractFormComponent.java b/3.0.4/framework/src/org/apache/tapestry/form/AbstractFormComponent.java
deleted file mode 100644
index 134dfe3..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/form/AbstractFormComponent.java
+++ /dev/null
@@ -1,85 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.form;
-
-import org.apache.tapestry.AbstractComponent;
-import org.apache.tapestry.ApplicationRuntimeException;
-import org.apache.tapestry.IForm;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.valid.IValidationDelegate;
-
-/**
- *  A base class for building components that correspond to HTML form elements.
- *  All such components must be wrapped (directly or indirectly) by
- *  a {@link Form} component.
- *
- *  @version $Id$
- *  @author Howard Lewis Ship
- *  @since 1.0.3
- * 
- **/
-
-public abstract class AbstractFormComponent extends AbstractComponent implements IFormComponent
-{
-    /**
-     *  Returns the {@link Form} wrapping this component.  Invokes
-     *  {@link #setForm(IForm)} (so that the component may know, later, what the
-     *  form is).  Also, if the form has a delegate, 
-     *  then {@link IValidationDelegate#setFormComponent(IFormComponent)} is invoked.
-     *
-     *  @throws ApplicationRuntimeException if the component is not wrapped by a {@link Form}.
-     *
-     **/
-
-    public IForm getForm(IRequestCycle cycle)
-    {
-        IForm result = Form.get(cycle);
-
-        if (result == null)
-            throw new ApplicationRuntimeException(
-                Tapestry.getMessage("AbstractFormComponent.must-be-contained-by-form"),
-                this,
-                null,
-                null);
-
-        setForm(result);
-
-        IValidationDelegate delegate = result.getDelegate();
-
-        if (delegate != null)
-            delegate.setFormComponent(this);
-
-        return result;
-    }
-
-    public abstract IForm getForm();
-    public abstract void setForm(IForm form);
-
-    public abstract String getName();
-    public abstract void setName(String name);
-
-    /**
-     *  Implemented in some subclasses to provide a display name (suitable
-     *  for presentation to the user as a label or error message).  This implementation
-     *  return null.
-     * 
-     **/
-
-    public String getDisplayName()
-    {
-        return null;
-    }
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/form/AbstractTextField.java b/3.0.4/framework/src/org/apache/tapestry/form/AbstractTextField.java
deleted file mode 100644
index 37cd8e4..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/form/AbstractTextField.java
+++ /dev/null
@@ -1,127 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.form;
-
-import org.apache.tapestry.IForm;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-
-/**
- *  Base class for implementing various types of text input fields.
- *  This includes {@link TextField} and
- *  {@link org.apache.tapestry.valid.ValidField}.
- *
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 1.0.2
- * 
- **/
-
-public abstract class AbstractTextField extends AbstractFormComponent
-{
-    /**
-     *  Renders the form element, or responds when the form containing the element
-     *  is submitted (by checking {@link Form#isRewinding()}.
-     *
-     **/
-
-    protected void renderComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        String value;
-
-        IForm form = getForm(cycle);
-
-        // It isn't enough to know whether the cycle in general is rewinding, need to know
-        // specifically if the form which contains this component is rewinding.
-
-        boolean rewinding = form.isRewinding();
-
-        // If the cycle is rewinding, but the form containing this field is not,
-        // then there's no point in doing more work.
-
-        if (!rewinding && cycle.isRewinding())
-            return;
-
-        // Used whether rewinding or not.
-
-        String name = form.getElementId(this);
-		
-        if (rewinding)
-        {
-            if (!isDisabled())
-            {
-                value = cycle.getRequestContext().getParameter(name);
-
-                updateValue(value);
-            }
-
-            return;
-        }
-
-        writer.beginEmpty("input");
-
-        writer.attribute("type", isHidden() ? "password" : "text");
-
-        if (isDisabled())
-            writer.attribute("disabled", "disabled");
-
-        writer.attribute("name", name);
-
-        value = readValue();
-        if (value != null)
-            writer.attribute("value", value);
-
-        renderInformalParameters(writer, cycle);
-
-        beforeCloseTag(writer, cycle);
-
-        writer.closeTag();
-    }
-
-    /**
-     *  Invoked from {@link #render(IMarkupWriter, IRequestCycle)}
-     *  just before the tag is closed.  This implementation does nothing,
-     *  subclasses may override.
-     *
-     **/
-
-    protected void beforeCloseTag(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        // Do nothing.
-    }
-
-    /**
-     *  Invoked by {@link #render(IMarkupWriter writer, IRequestCycle cycle)}
-     *  when a value is obtained from the
-     *  {@link javax.servlet.http.HttpServletRequest}.
-     *
-     **/
-
-    abstract protected void updateValue(String value);
-
-    /**
-     *  Invoked by {@link #render(IMarkupWriter writer, IRequestCycle cycle)}
-     *  when rendering a response.
-     *
-     *  @return the current value for the field, as a String, or null.
-     **/
-
-    abstract protected String readValue();
-
-    public abstract boolean isHidden();
-
-    public abstract boolean isDisabled();
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/form/Button.java b/3.0.4/framework/src/org/apache/tapestry/form/Button.java
deleted file mode 100644
index 190e6f3..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/form/Button.java
+++ /dev/null
@@ -1,73 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.form;
-
-import org.apache.tapestry.IForm;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-
-/**
- *  Implements a component that manages an HTML &lt;input type=button&gt; form element.
- *
- *  [<a href="../../../../../ComponentReference/Button.html">Component Reference</a>]
- *  
- *  <p>This component is useful for attaching JavaScript onclick event handlers.
- *
- *  @author Howard Lewis Ship
- *  @author Paul Geerts
- *  @author Malcolm Edgar
- *  @version $Id$
- **/
-
-public abstract class Button extends AbstractFormComponent
-{
-    protected void renderComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        IForm form = getForm(cycle);
-
-        boolean rewinding = form.isRewinding();
-
-        String name = form.getElementId(this);
-
-        if (rewinding)
-        {
-            return;
-        }
-
-        writer.beginEmpty("input");
-        writer.attribute("type", "button");
-        writer.attribute("name", name);
-
-        if (isDisabled())
-        {
-            writer.attribute("disabled", "disabled");
-        }
-
-        String label = getLabel();
-
-        if (label != null)
-        {
-            writer.attribute("value", label);
-        }
-
-        renderInformalParameters(writer, cycle);
-
-        writer.closeTag();
-    }
-
-    public abstract String getLabel();
-
-    public abstract boolean isDisabled();
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/form/Button.jwc b/3.0.4/framework/src/org/apache/tapestry/form/Button.jwc
deleted file mode 100644
index 53b3dad..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/form/Button.jwc
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-  
-<component-specification class="org.apache.tapestry.form.Button" allow-body="no">
-
-  <description>
-  Creates a labeled button within a form.
-  </description>
-
-  <parameter name="label" type="java.lang.String" direction="in"/>
-  <parameter name="disabled" type="boolean" direction="in"/>
-  
-  <reserved-parameter name="name"/>
-  <reserved-parameter name="type"/>
-  
-  <property-specification name="name" type="java.lang.String"/>
-  <property-specification name="form" type="org.apache.tapestry.IForm"/>
-
-</component-specification>
diff --git a/3.0.4/framework/src/org/apache/tapestry/form/Checkbox.java b/3.0.4/framework/src/org/apache/tapestry/form/Checkbox.java
deleted file mode 100644
index 9c47ee5..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/form/Checkbox.java
+++ /dev/null
@@ -1,87 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.form;
-
-import org.apache.tapestry.IForm;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-
-/**
- *  Implements a component that manages an HTML &lt;input type=checkbox&gt;
- *  form element.
- *
- *  [<a href="../../../../../ComponentReference/Checkbox.html">Component Reference</a>]
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- * 
- **/
-
-public abstract class Checkbox extends AbstractFormComponent
-{
-    /**
-     *  Renders the form elements, or responds when the form containing the element
-     *  is submitted (by checking {@link Form#isRewinding()}.
-     *
-     *  <p>In traditional HTML, many checkboxes would have the same name but different values.
-     *  Under Tapestry, it makes more sense to have different names and a fixed value.
-     *  For a checkbox, we only care about whether the name appears as a request parameter.
-     *
-     **/
-
-    protected void renderComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        IForm form = getForm(cycle);
-		
-        // Used whether rewinding or not.
-
-        String name = form.getElementId(this);
-
-        if (form.isRewinding())
-        {
-            String value = cycle.getRequestContext().getParameter(name);
-
-            setSelected((value != null));
-
-            return;
-        }
-
-        writer.beginEmpty("input");
-        writer.attribute("type", "checkbox");
-
-        writer.attribute("name", name);
-
-        if (isDisabled())
-            writer.attribute("disabled", "disabled");
-
-        if (isSelected())
-            writer.attribute("checked", "checked");
-
-        renderInformalParameters(writer, cycle);
-
-        writer.closeTag();
-    }
-
-    public abstract boolean isDisabled();
-
-    /** @since 2.2 **/
-
-    public abstract boolean isSelected();
-
-    /** @since 2.2 **/
-
-    public abstract void setSelected(boolean selected);
-
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/form/Checkbox.jwc b/3.0.4/framework/src/org/apache/tapestry/form/Checkbox.jwc
deleted file mode 100644
index 4f1b307..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/form/Checkbox.jwc
+++ /dev/null
@@ -1,51 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE component-specification PUBLIC
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<component-specification class="org.apache.tapestry.form.Checkbox" allow-body="no">
-
-  <description>
-  Implements a checkbox within a Form.
-  </description>
-  
-  <parameter name="selected" 
-  	type="boolean"
-  	required="yes" 
-  	direction="form">
-    <description>
-    The property read and updated by the Checkbox.
-    </description>
-  </parameter>
-  
-  <parameter name="disabled" type="boolean" direction="in">
-    <description>
-    If true, then the checkbox will be disabled and any input from the checkbox
-    will be ignored.
-    </description>
-  </parameter>
-  
-  <reserved-parameter name="type"/>
-  <reserved-parameter name="checked"/>
-  <reserved-parameter name="name"/>
-  
-  <property-specification name="name" type="java.lang.String"/>
-  <property-specification name="form" type="org.apache.tapestry.IForm"/>
-  
-</component-specification>
diff --git a/3.0.4/framework/src/org/apache/tapestry/form/DatePicker.java b/3.0.4/framework/src/org/apache/tapestry/form/DatePicker.java
deleted file mode 100644
index dcf1de8..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/form/DatePicker.java
+++ /dev/null
@@ -1,250 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.form;
-
-import java.text.DateFormatSymbols;
-import java.text.ParseException;
-import java.text.SimpleDateFormat;
-import java.util.Calendar;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.Locale;
-import java.util.Map;
-
-import org.apache.tapestry.ApplicationRuntimeException;
-import org.apache.tapestry.IAsset;
-import org.apache.tapestry.IEngine;
-import org.apache.tapestry.IForm;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.IResourceLocation;
-import org.apache.tapestry.IScript;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.engine.IScriptSource;
-import org.apache.tapestry.html.Body;
-
-/**
- * Provides a Form <tt>java.util.Date</tt> field component for selecting dates.
- *
- *  [<a href="../../../../../ComponentReference/DatePicker.html">Component Reference</a>]
- *
- * @author Paul Geerts
- * @author Malcolm Edgar
- * @version $Id$
- * @since 2.2
- * 
- */
-
-public abstract class DatePicker extends AbstractFormComponent
-{
-    public abstract String getFormat();
-
-    public abstract Date getValue();
-
-    public abstract void setValue(Date value);
-
-    public abstract boolean isDisabled();
-
-    public abstract boolean getIncludeWeek();
-
-    public abstract IAsset getIcon();
-
-    private IScript _script;
-
-    private static final String SYM_NAME = "name";
-    private static final String SYM_FORMNAME = "formName";
-    private static final String SYM_MONTHNAMES = "monthNames";
-    private static final String SYM_SHORT_MONTHNAMES = "shortMonthNames";
-    private static final String SYM_WEEKDAYNAMES = "weekDayNames";
-    private static final String SYM_SHORT_WEEKDAYNAMES = "shortWeekDayNames";
-    private static final String SYM_FIRSTDAYINWEEK = "firstDayInWeek";
-    private static final String SYM_MINDAYSINFIRSTWEEK = "minimalDaysInFirstWeek";
-    private static final String SYM_FORMAT = "format";
-    private static final String SYM_INCL_WEEK = "includeWeek";
-    private static final String SYM_VALUE = "value";
-    private static final String SYM_BUTTONONCLICKHANDLER = "buttonOnclickHandler";
-
-    // Output symbol
-
-    private static final String SYM_BUTTONNAME = "buttonName";
-
-    protected void finishLoad()
-    {
-        IEngine engine = getPage().getEngine();
-        IScriptSource source = engine.getScriptSource();
-
-        IResourceLocation location =
-            getSpecification().getSpecificationLocation().getRelativeLocation("DatePicker.script");
-
-        _script = source.getScript(location);
-    }
-
-    protected void renderComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        IForm form = getForm(cycle);
-
-        String name = form.getElementId(this);
-
-        String format = getFormat();
-
-        if (format == null)
-            format = "dd MMM yyyy";
-
-        SimpleDateFormat formatter = new SimpleDateFormat(format, getPage().getLocale());
-
-        boolean disabled = isDisabled();
-
-        if (!cycle.isRewinding())
-        {
-            Body body = Body.get(cycle);
-
-            if (body == null)
-                throw new ApplicationRuntimeException(
-                    Tapestry.format("must-be-contained-by-body", "DatePicker"),
-                    this,
-                    null,
-                    null);
-
-            Locale locale = getPage().getLocale();
-            DateFormatSymbols dfs = new DateFormatSymbols(locale);
-            Calendar cal = Calendar.getInstance(locale);
-
-            Date value = getValue();
-
-            Map symbols = new HashMap();
-
-            symbols.put(SYM_NAME, name);
-            symbols.put(SYM_FORMAT, format);
-            symbols.put(SYM_INCL_WEEK, getIncludeWeek() ? Boolean.TRUE : Boolean.FALSE);
-
-            symbols.put(SYM_MONTHNAMES, makeStringList(dfs.getMonths(), 0, 12));
-            symbols.put(SYM_SHORT_MONTHNAMES, makeStringList(dfs.getShortMonths(), 0, 12));
-            symbols.put(SYM_WEEKDAYNAMES, makeStringList(dfs.getWeekdays(), 1, 8));
-            symbols.put(SYM_SHORT_WEEKDAYNAMES, makeStringList(dfs.getShortWeekdays(), 1, 8));
-            symbols.put(SYM_FIRSTDAYINWEEK, new Integer(cal.getFirstDayOfWeek() - 1));
-            symbols.put(SYM_MINDAYSINFIRSTWEEK, new Integer(cal.getMinimalDaysInFirstWeek()));
-            symbols.put(SYM_FORMNAME, form.getName());
-            symbols.put(SYM_VALUE, value);
-
-            _script.execute(cycle, body, symbols);
-
-            writer.beginEmpty("input");
-            writer.attribute("type", "text");
-            writer.attribute("name", name);
-            writer.attribute("title", formatter.toLocalizedPattern());
-
-            if (value != null)
-                writer.attribute("value", formatter.format(value));
-
-            if (disabled)
-                writer.attribute("disabled", "disabled");
-
-            renderInformalParameters(writer, cycle);
-            
-            writer.printRaw("&nbsp;");
-
-            if (!disabled)
-            {
-                writer.begin("a");
-                writer.attribute("href", (String) symbols.get(SYM_BUTTONONCLICKHANDLER));
-            }
-
-            IAsset icon = getIcon();
-
-            writer.beginEmpty("img");
-            writer.attribute("src", icon.buildURL(cycle));
-            writer.attribute("border", 0);
-
-            if (!disabled)
-                writer.end(); // <a>
-
-        }
-
-        if (form.isRewinding())
-        {
-            if (disabled)
-                return;
-
-            String textValue = cycle.getRequestContext().getParameter(name);
-
-            if (Tapestry.isBlank(textValue))
-                return;
-
-            try
-            {
-                Date value = formatter.parse(textValue);
-
-                setValue(value);
-            }
-            catch (ParseException ex)
-            {
-            }
-        }
-
-    }
-
-    /**
-     * Create a list of quoted strings. The list is suitable for
-     * initializing a JavaScript array.
-     */
-    private String makeStringList(String[] a, int offset, int length)
-    {
-        StringBuffer b = new StringBuffer();
-        for (int i = offset; i < length; i++)
-        {
-            // JavaScript is sensitive to some UNICODE characters. So for
-            // the sake of simplicity, we just escape everything
-            b.append('"');
-            char[] ch = a[i].toCharArray();
-            for (int j = 0; j < ch.length; j++)
-            {
-                if (ch[j] < 128)
-                {
-                    b.append(ch[j]);
-                }
-                else
-                {
-                    b.append(escape(ch[j]));
-                }
-            }
-
-            b.append('"');
-            if (i < length - 1)
-            {
-                b.append(", ");
-            }
-        }
-        return b.toString();
-
-    }
-
-    /**
-     * Create an escaped Unicode character
-     * @param c
-     * @return The unicode character in escaped string form
-     */
-    private static String escape(char c)
-    {
-        StringBuffer b = new StringBuffer();
-        for (int i = 0; i < 4; i++)
-        {
-            b.append(Integer.toHexString(c & 0x000F).toUpperCase());
-            c >>>= 4;
-        }
-        b.append("u\\");
-        return b.reverse().toString();
-    }
-
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/form/DatePicker.js b/3.0.4/framework/src/org/apache/tapestry/form/DatePicker.js
deleted file mode 100644
index c74d6ce..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/form/DatePicker.js
+++ /dev/null
@@ -1,992 +0,0 @@
-//

-// calendar -- a javascript date picker designed for easy localization.

-//

-// $Id$

-//

-//

-// Author: Per Norrman (pernorrman@telia.com)

-// 

-// Based on Tapestry 2.3-beta1 Datepicker by Paul Geerts

-// 

-// Thanks to:

-//     Vladimir [vyc@quorus-ms.ru] for fixing the IE6 zIndex problem.

-//

-// The normal setup would be to have one text field for displaying the 

-// selected date, and one button to show/hide the date picker control.

-// This is  the recommended javascript code:

-// 

-//	<script language="javascript">

-//		var cal;

-//

-//		function init() {

-//			cal = new Calendar();

-//			cal.setIncludeWeek(true);

-//			cal.setFormat("yyyy-MM-dd");

-//			cal.setMonthNames(.....);

-//			cal.setShortMonthNames(....);

-//			cal.create();

-//			

-//			document.form.button1.onclick = function() {

-//				cal.toggle(document.form.button1);

-//			}

-//			cal.onchange = function() {

-//				document.form.textfield1.value  = cal.formatDate();

-//			}

-//		}

-//	</script>

-//

-// The init function is invoked when the body is loaded.

-//

-//

-

-function Calendar(date) {

-	if (arguments.length == 0) {

-		this._currentDate = new Date();

-		this._selectedDate = null;

-	}

-	else {

-		this._currentDate = new Date(date);

-		this._selectedDate = new Date(date);

-	}

-

-	// Accumulated days per month, for normal and for leap years.

-	// Used in week number calculations.	

-    Calendar.NUM_DAYS = [0,31,59,90,120,151,181,212,243,273,304,334];

-    

-    Calendar.LEAP_NUM_DAYS = [0,31,60,91,121,152,182,213,244,274,305,335];

-    

-

-	this._bw = new bw_check();

-	this._showing = false;	

-	this._includeWeek = false;

-	this._hideOnSelect = true;

-	this._alwaysVisible = false;

-	

-	this._dateSlot = new Array(42);

-	this._weekSlot = new Array(6);

-	

-	this._firstDayOfWeek = 1;

-	this._minimalDaysInFirstWeek = 4;

-	

-	this._monthNames = [	

-		"January",		"February",		"March",	"April",

-		"May",			"June",			"July",		"August",

-		"September",	"October",		"November",	"December"

-	];

-	

-	this._shortMonthNames = [ 

-		"jan", "feb", "mar", "apr", "may", "jun", 

-		"jul", "aug", "sep", "oct", "nov", "dec"

-	];

-	

-	// Week days start with Sunday=0, ... Saturday=6

-	this._weekDayNames = [

-		"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" 

-	];

-	

-	this._shortWeekDayNames = 

-		["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" ];

-	

-	this._defaultFormat = "yyyy-MM-dd";

-	

-	this._format = this._defaultFormat; 

-

-	this._calDiv = null;

-	

-	

-}

-

-/**

- *	CREATE the Calendar DOM element

- */

-Calendar.prototype.create = function() {

-	var div;

-	var table;

-	var tbody;

-	var tr;

-	var td;

-	var dp = this;

-	

-	// Create the top-level div element

-	this._calDiv = document.createElement("div");

-	this._calDiv.className = "calendar";

-	this._calDiv.style.position = "absolute";

-	this._calDiv.style.display = "none";

-	this._calDiv.style.border = "1px solid WindowText";

-	this._calDiv.style.textAlign = "center";

-	this._calDiv.style.background = "Window";

-	this._calDiv.style.zIndex = "400";

-	

-	

-	// header div

-	div = document.createElement("div");

-	div.className = "calendarHeader";

-	div.style.background = "ActiveCaption";

-	div.style.padding = "3px";

-	div.style.borderBottom = "1px solid WindowText";

-	this._calDiv.appendChild(div);

-	

-	table = document.createElement("table");

-	table.style.cellSpacing = 0;

-	div.appendChild(table);

-	

-	tbody = document.createElement("tbody");

-	table.appendChild(tbody);

-	

-	tr = document.createElement("tr");

-	tbody.appendChild(tr);

-	

-	// Previous Month Button

-	td = document.createElement("td");

-	this._previousMonth = document.createElement("button");

-	this._previousMonth.className = "prevMonthButton"

-	this._previousMonth.appendChild(document.createTextNode("<<"));

-	//this._previousMonth.appendChild(document.createTextNode(String.fromCharCode(9668)));

-	td.appendChild(this._previousMonth);

-	tr.appendChild(td);

-	

-	

-	

-	//

-	// Create the month drop down 

-	//

-	td = document.createElement("td");

-	td.className = "labelContainer";

-	tr.appendChild(td);

-	this._monthSelect = document.createElement("select");

-    for (var i = 0 ; i < this._monthNames.length ; i++) {

-        var opt = document.createElement("option");

-        opt.innerHTML = this._monthNames[i];

-        opt.value = i;

-        if (i == this._currentDate.getMonth()) {

-            opt.selected = true;

-        }

-        this._monthSelect.appendChild(opt);

-    }

-	td.appendChild(this._monthSelect);

-	

-

-	// 

-	// Create the year drop down

-	//

-	td = document.createElement("td");

-	td.className = "labelContainer";

-	tr.appendChild(td);

-	this._yearSelect = document.createElement("select");

-	for(var i=1920; i < 2050; ++i) {

-		var opt = document.createElement("option");

-		opt.innerHTML = i;

-		opt.value = i;

-		if (i == this._currentDate.getFullYear()) {

-			opt.selected = false;

-		}

-		this._yearSelect.appendChild(opt);

-	}

-	td.appendChild(this._yearSelect);

-	

-	

-	td = document.createElement("td");

-	this._nextMonth = document.createElement("button");

-	this._nextMonth.appendChild(document.createTextNode(">>"));

-	//this._nextMonth.appendChild(document.createTextNode(String.fromCharCode(9654)));

-	this._nextMonth.className = "nextMonthButton";

-	td.appendChild(this._nextMonth);

-	tr.appendChild(td);

-	

-	// Calendar body

-	div = document.createElement("div");

-	div.className = "calendarBody";

-	this._calDiv.appendChild(div);

-	this._table = div;

-	

-	// Create the inside of calendar body	

-	

-	var text;

-	table = document.createElement("table");

-	//table.style.width="100%";

-	table.className = "grid";

-	table.style.font 	 	= "small-caption";

-	table.style.fontWeight 	= "normal";

-	table.style.textAalign	= "center";

-	table.style.color		= "WindowText";

-	table.style.cursor		= "default";

-	table.cellPadding		= "3";

-	table.cellSpacing		= "0";

-	

-    div.appendChild(table);

-	var thead = document.createElement("thead");

-	table.appendChild(thead);

-	tr = document.createElement("tr");

-	thead.appendChild(tr);

-	

-	// weekdays header

-	if (this._includeWeek) {

-		td = document.createElement("th");

-		text = document.createTextNode("w");

-		td.appendChild(text);

-		td.className = "weekNumberHead";

-		td.style.textAlign = "left";

-		tr.appendChild(td);

-	}

-	for(i=0; i < 7; ++i) {

-		td = document.createElement("th");

-		text = document.createTextNode(this._shortWeekDayNames[(i+this._firstDayOfWeek)%7]);

-		td.appendChild(text);

-		td.className = "weekDayHead";

-		td.style.fontWeight = "bold";

-		td.style.borderBottom = "1px solid WindowText";

-		tr.appendChild(td);

-	}

-	

-	// Date grid

-	tbody = document.createElement("tbody");

-	table.appendChild(tbody);

-	

-	for(week=0; week<6; ++week) {

-		tr = document.createElement("tr");

-		tbody.appendChild(tr);

-

-		if (this._includeWeek) {

-			td = document.createElement("td");

-			td.className = "weekNumber";

-			td.style.fontWeight = "normal";

-			td.style.borderRight = "1px solid WindowText";

-			td.style.textAlign = "left";

-			text = document.createTextNode(String.fromCharCode(160));

-			td.appendChild(text);

-            //setCursor(td);

-            td.align="center";

-			tr.appendChild(td);

-			var tmp = new Object();

-			tmp.tag = "WEEK";

-			tmp.value = -1;

-			tmp.data = text;

-			this._weekSlot[week] = tmp;

-		}

-

-		for(day=0; day<7; ++day) {

-			td = document.createElement("td");

-			text = document.createTextNode(String.fromCharCode(160));

-			td.appendChild(text);

-            setCursor(td);

-            td.align="center";

-            td.style.fontWeight="normal";

-            

-			tr.appendChild(td);

-			var tmp = new Object();

-			tmp.tag = "DATE";

-			tmp.value = -1;

-			tmp.data = text;

-			this._dateSlot[(week*7)+day] = tmp;

-			

-		}

-	}

-	

-	// Calendar Footer

-	div = document.createElement("div");

-	div.className = "calendarFooter";

-	this._calDiv.appendChild(div);

-	

-	table = document.createElement("table");

-	//table.style.width="100%";

-	table.className = "footerTable";

-	table.cellSpacing = 0;

-	div.appendChild(table);

-	

-	tbody = document.createElement("tbody");

-	table.appendChild(tbody);

-	

-	tr = document.createElement("tr");

-	tbody.appendChild(tr);

-

-	//

-	// The TODAY button	

-	//

-	td = document.createElement("td");

-	this._todayButton = document.createElement("button");

-	var today = new Date();

-	var buttonText = today.getDate() + " " + this._monthNames[today.getMonth()] + ", " + today.getFullYear();

-	this._todayButton.appendChild(document.createTextNode(buttonText));

-	td.appendChild(this._todayButton);

-	tr.appendChild(td);

-	

-	//

-	// The CLEAR button

-	//

-	td = document.createElement("td");

-	this._clearButton = document.createElement("button");

-	var today = new Date();

-	buttonText = "Clear";

-	this._clearButton.appendChild(document.createTextNode(buttonText));

-	td.appendChild(this._clearButton);

-	tr.appendChild(td);

-	

-	

-	this._update();

-	this._updateHeader();

-	

-

-

-	// IE55+ extension		

-	this._previousMonth.hideFocus = true;

-	this._nextMonth.hideFocus = true;

-	this._todayButton.hideFocus = true;

-	// end IE55+ extension

-	

-	// hook up events

-	// buttons

-	this._previousMonth.onclick = function () {

-		dp.prevMonth();

-	};

-

-	this._nextMonth.onclick = function () {

-		dp.nextMonth();

-	};

-

-	this._todayButton.onclick = function () {

-		dp.setSelectedDate(new Date());

-		dp.hide();

-	};

-

-	this._clearButton.onclick = function () {

-		dp.clearSelectedDate();

-		dp.hide();

-	};

-	

-

-	this._calDiv.onselectstart = function () {

-		return false;

-	};

-	

-	this._table.onclick = function (e) {

-		// find event

-		if (e == null) e = document.parentWindow.event;

-		

-		// find td

-		var el = e.target != null ? e.target : e.srcElement;

-		while (el.nodeType != 1)

-			el = el.parentNode;

-		while (el != null && el.tagName && el.tagName.toLowerCase() != "td")

-			el = el.parentNode;

-		

-		// if no td found, return

-		if (el == null || el.tagName == null || el.tagName.toLowerCase() != "td")

-			return;

-		

-		var d = new Date(dp._currentDate);

-		var n = Number(el.firstChild.data);

-		if (isNaN(n) || n <= 0 || n == null)

-			return;

-		

-		if (el.className == "weekNumber")

-			return;

-			

-		d.setDate(n);

-		dp.setSelectedDate(d);

-

-		if (!dp._alwaysVisible && dp._hideOnSelect) {

-			dp.hide();

-		}

-		

-	};

-	

-	

-	this._calDiv.onkeydown = function (e) {

-		if (e == null) e = document.parentWindow.event;

-		var kc = e.keyCode != null ? e.keyCode : e.charCode;

-

-		if(kc == 13) {

-			var d = new Date(dp._currentDate).valueOf();

-			dp.setSelectedDate(d);

-

-			if (!dp._alwaysVisible && dp._hideOnSelect) {

-				dp.hide();

-			}

-			return false;

-		}

-			

-		

-		if (kc < 37 || kc > 40) return true;

-		

-		var d = new Date(dp._currentDate).valueOf();

-		if (kc == 37) // left

-			d -= 24 * 60 * 60 * 1000;

-		else if (kc == 39) // right

-			d += 24 * 60 * 60 * 1000;

-		else if (kc == 38) // up

-			d -= 7 * 24 * 60 * 60 * 1000;

-		else if (kc == 40) // down

-			d += 7 * 24 * 60 * 60 * 1000;

-

-		dp.setCurrentDate(new Date(d));

-		return false;

-	}

-	

-	// ie6 extension

-	this._calDiv.onmousewheel = function (e) {

-		if (e == null) e = document.parentWindow.event;

-		var n = - e.wheelDelta / 120;

-		var d = new Date(dp._currentDate);

-		var m = d.getMonth() + n;

-		d.setMonth(m);

-		

-		

-		dp.setCurrentDate(d);

-		

-		return false;

-	}

-

-	this._monthSelect.onchange = function(e) {

-		if (e == null) e = document.parentWindow.event;

-		e = getEventObject(e);

-		dp.setMonth(e.value);

-	}

-

-	this._monthSelect.onclick = function(e) {

-		if (e == null) e = document.parentWindow.event;

-		e = getEventObject(e);

-		e.cancelBubble = true;

-	}

-	

-	this._yearSelect.onchange = function(e) {

-		if (e == null) e = document.parentWindow.event;

-		e = getEventObject(e);

-		dp.setYear(e.value);

-	}

-

-

-	document.body.appendChild(this._calDiv);

-	

-	

-	return this._calDiv;

-}

-

-Calendar.prototype._update = function() {

-

-

-	// Calculate the number of days in the month for the selected date

-	var date = this._currentDate;

-	var today = toISODate(new Date());

-	

-	

-	var selected = "";

-	if (this._selectedDate != null) {

-		selected = toISODate(this._selectedDate);

-	}

-	var current = toISODate(this._currentDate);

-	var d1 = new Date(date.getFullYear(), date.getMonth(), 1);

-	var d2 = new Date(date.getFullYear(), date.getMonth()+1, 1);

-	var monthLength = Math.round((d2 - d1) / (24 * 60 * 60 * 1000));

-	

-	// Find out the weekDay index for the first of this month

-	var firstIndex = (d1.getDay() - this._firstDayOfWeek) % 7 ;

-    if (firstIndex < 0) {

-    	firstIndex += 7;

-    }

-	

-	var index = 0;

-	while (index < firstIndex) {

-		this._dateSlot[index].value = -1;

-		this._dateSlot[index].data.data = String.fromCharCode(160);

-		this._dateSlot[index].data.parentNode.className = "";

-		this._dateSlot[index].data.parentNode.style.fontWeight = "normal";

-		this._dateSlot[index].data.parentNode.style.border= "none";

-		index++;

-	}

-        

-    for (i = 1; i <= monthLength; i++, index++) {

-		this._dateSlot[index].value = i;

-		this._dateSlot[index].data.data = i;

-		this._dateSlot[index].data.parentNode.className = "";

-		this._dateSlot[index].data.parentNode.style.fontWeight = "normal";

-		this._dateSlot[index].data.parentNode.style.border= "none";

-		if (toISODate(d1) == today) {

-			this._dateSlot[index].data.parentNode.className = "today";

-			this._dateSlot[index].data.parentNode.style.fontWeight = "bold";

-		}

-		if (toISODate(d1) == current) {

-			this._dateSlot[index].data.parentNode.className += " current";

-			this._dateSlot[index].data.parentNode.style.border= "1px dotted WindowText";

-		}

-		if (toISODate(d1) == selected) {

-			this._dateSlot[index].data.parentNode.className += " selected";

-			this._dateSlot[index].data.parentNode.style.border= "1px solid WindowText";

-		}

-		d1 = new Date(d1.getFullYear(), d1.getMonth(), d1.getDate()+1);

-	}

-	

-	var lastDateIndex = index;

-        

-    while(index < 42) {

-		this._dateSlot[index].value = -1;

-		this._dateSlot[index].data.data = String.fromCharCode(160);

-		this._dateSlot[index].data.parentNode.className = "";

-		this._dateSlot[index].data.parentNode.style.fontWeight = "normal";

-		this._dateSlot[index].data.parentNode.style.border= "none";

-		++index;

-	}

-	

-	// Week numbers

-	if (this._includeWeek) {

-		d1 = new Date(date.getFullYear(), date.getMonth(), 1);

-		for (i=0; i < 6; ++i) {

-			if (i == 5 && lastDateIndex < 36) {

-				this._weekSlot[i].data.data = String.fromCharCode(160);

-				this._weekSlot[i].data.parentNode.style.borderRight = "none";

-			} else {

-				week = weekNumber(this, d1);

-				this._weekSlot[i].data.data = week;

-				this._weekSlot[i].data.parentNode.style.borderRight = "1px solid WindowText";

-			}

-			d1 = new Date(d1.getFullYear(), d1.getMonth(), d1.getDate()+7);

-		}

-	}

-}

-

-Calendar.prototype.show = function(element) {

-	if(!this._showing) {

-		var p = getPoint(element);

-		this._calDiv.style.display = "block";

-		this._calDiv.style.top = (p.y + element.offsetHeight + 1) + "px";

-		this._calDiv.style.left = p.x + "px";

-		this._showing = true;

-		

-		/* -------- */

-	   	if( this._bw.ie6 )

-	   	{

-	     	dw = this._calDiv.offsetWidth;

-	     	dh = this._calDiv.offsetHeight;

-	     	var els = document.getElementsByTagName("body");

-	     	var body = els[0];

-	     	if( !body ) return;

-	 

-	    	//paste iframe under the modal

-		     var underDiv = this._calDiv.cloneNode(false); 

-		     underDiv.style.zIndex="390";

-		     underDiv.style.margin = "0px";

-		     underDiv.style.padding = "0px";

-		     underDiv.style.display = "block";

-		     underDiv.style.width = dw;

-		     underDiv.style.height = dh;

-		     underDiv.style.border = "1px solid WindowText";

-		     underDiv.innerHTML = "<iframe width=\"100%\" height=\"100%\" frameborder=\"0\"></iframe>";

-		     body.appendChild(underDiv);

-		     this._underDiv = underDiv;

-	   }

-		/* -------- */

-		this._calDiv.focus();

-		

-	}

-};

-

-Calendar.prototype.hide = function() {   

-	if(this._showing) {

-		this._calDiv.style.display = "none";

-		this._showing = false;

-		if( this._bw.ie6 ) {

-		    if( this._underDiv ) this._underDiv.removeNode(true);

-		}

-	}

-}

-

-Calendar.prototype.toggle = function(element) {

-	if(this._showing) {

-		this.hide(); 

-	} else {

-		this.show(element);

-	}

-}

-

-

-

-Calendar.prototype.onchange = function() {};

-

-

-Calendar.prototype.setCurrentDate = function(date) {

-	if (date == null) {

-		return;

-	}

-

-	// if string or number create a Date object

-	if (typeof date == "string" || typeof date == "number") {

-		date = new Date(date);

-	}

-	

-	

-	// do not update if not really changed

-	if (this._currentDate.getDate() != date.getDate() ||

-		this._currentDate.getMonth() != date.getMonth() || 

-		this._currentDate.getFullYear() != date.getFullYear()) {

-		

-		this._currentDate = new Date(date);

-	

-		this._updateHeader();

-		this._update();

-		

-	}

-	

-}

-

-Calendar.prototype.setSelectedDate = function(date) {

-	this._selectedDate = new Date(date);

-	this.setCurrentDate(this._selectedDate);

-	if (typeof this.onchange == "function") {

-		this.onchange();

-	}

-}

-

-Calendar.prototype.clearSelectedDate = function() {

-	this._selectedDate = null;

-	if (typeof this.onchange == "function") {

-		this.onchange();

-	}

-}

-

-Calendar.prototype.getElement = function() {

-	return this._calDiv;

-}

-

-Calendar.prototype.setIncludeWeek = function(v) {

-	if (this._calDiv == null) {

-		this._includeWeek = v;

-	}

-}

-

-Calendar.prototype.getSelectedDate = function () {

-	if (this._selectedDate == null) {

-		return null;

-	} else {

-		return new Date(this._selectedDate);

-	}

-}

-

-

-

-Calendar.prototype._updateHeader = function () {

-

-	// 

-	var options = this._monthSelect.options;

-	var m = this._currentDate.getMonth();

-	for(var i=0; i < options.length; ++i) {

-		options[i].selected = false;

-		if (options[i].value == m) {

-			options[i].selected = true;

-		}

-	}

-	

-	options = this._yearSelect.options;

-	var year = this._currentDate.getFullYear();

-	for(var i=0; i < options.length; ++i) {

-		options[i].selected = false;

-		if (options[i].value == year) {

-			options[i].selected = true;

-		}

-	}

-	

-}

-

-Calendar.prototype.setYear = function(year) {

-	var d = new Date(this._currentDate);

-	d.setFullYear(year);

-	this.setCurrentDate(d);

-}

-

-Calendar.prototype.setMonth = function (month) {

-	var d = new Date(this._currentDate);

-	d.setMonth(month);

-	this.setCurrentDate(d);

-}

-

-Calendar.prototype.nextMonth = function () {

-	this.setMonth(this._currentDate.getMonth()+1);

-}

-

-Calendar.prototype.prevMonth = function () {

-	this.setMonth(this._currentDate.getMonth()-1);

-}

-

-Calendar.prototype.setFirstDayOfWeek = function (nFirstWeekDay) {

-	this._firstDayOfWeek = nFirstWeekDay;

-}

-

-Calendar.prototype.getFirstDayOfWeek = function () {

-	return this._firstDayOfWeek;

-}

-

-Calendar.prototype.setMinimalDaysInFirstWeek = function(n) {

-	this._minimalDaysInFirstWeek = n;

-}

-

-

-Calendar.prototype.getMinimalDaysInFirstWeek = function () {

-	return this._minimalDaysInFirstWeek;

-}

-

-Calendar.prototype.setMonthNames = function(a) {

-	// sanity test

-	this._monthNames = a;

-}

-

-Calendar.prototype.setShortMonthNames = function(a) {

-	// sanity test

-	this._shortMonthNames = a;

-}

-

-Calendar.prototype.setWeekDayNames = function(a) {

-	// sanity test

-	this._weekDayNames = a;

-}

-

-Calendar.prototype.setShortWeekDayNames = function(a) {

-	// sanity test

-	this._shortWeekDayNames = a;

-}

-

-Calendar.prototype.getFormat = function() {

-	return this._format;

-}

-	

-Calendar.prototype.setFormat = function(f) {

-	this._format = f;

-}

-

-Calendar.prototype.formatDate = function() {  

-	if (this._selectedDate == null) {

-		return "";

-	}

-	

-    var bits = new Array();

-    // work out what each bit should be

-    var date = this._selectedDate;

-    bits['d'] = date.getDate();

-    bits['dd'] = pad(date.getDate(),2);

-    bits['ddd'] = this._shortWeekDayNames[date.getDay()];

-    bits['dddd'] = this._weekDayNames[date.getDay()];

-

-    bits['M'] = date.getMonth()+1;

-    bits['MM'] = pad(date.getMonth()+1,2);

-    bits['MMM'] = this._shortMonthNames[date.getMonth()];

-    bits['MMMM'] = this._monthNames[date.getMonth()];

-    

-    var yearStr = "" + date.getFullYear();

-    yearStr = (yearStr.length == 2) ? '19' + yearStr: yearStr;

-    bits['yyyy'] = yearStr;

-    bits['yy'] = bits['yyyy'].toString().substr(2,2);

-

-    // do some funky regexs to replace the format string

-    // with the real values

-    var frm = new String(this._format);

-    var sect;

-    for (sect in bits) {

-      frm = eval("frm.replace(/\\b" + sect + "\\b/,'" + bits[sect] + "');");

-    }

-

-    return frm;

-}

-	

-                                                                                                       

-function isLeapYear(year) {

-	return ((year%4 == 0) && ((year%100 != 0) || (year%400 == 0)));

-}

-

-function yearLength(year) {

-	if (isLeapYear(year))

-		return 366;

-	else

-		return 365;

-}

-

-function dayOfYear(date) {

-	var a = Calendar.NUM_DAYS;

-	if (isLeapYear(date.getFullYear())) {

-		a = Calendar.LEAP_NUM_DAYS;

-	}

-	var month = date.getMonth();

-	

-	return a[month] + date.getDate();

-}

-

-// ---------------------------------------------

-// Week number stuff

-// ---------------------------------------------

-

-function weekNumber(cal, date) {

-

-	var dow = date.getDay();

-	var doy = dayOfYear(date);

-	var year = date.getFullYear();

-

-	// Compute the week of the year.  Valid week numbers run from 1 to 52

-	// or 53, depending on the year, the first day of the week, and the

-	// minimal days in the first week.  Days at the start of the year may

-	// fall into the last week of the previous year; days at the end of

-	// the year may fall into the first week of the next year.

-	var relDow = (dow + 7 - cal.getFirstDayOfWeek()) % 7; // 0..6

-	var relDowJan1 = (dow - doy + 701 - cal.getFirstDayOfWeek()) % 7; // 0..6

-	var week = Math.floor((doy - 1 + relDowJan1) / 7); // 0..53

-	if ((7 - relDowJan1) >= cal.getMinimalDaysInFirstWeek()) {

-		++week;

-	}

-

-	if (doy > 359) { // Fast check which eliminates most cases

-		// Check to see if we are in the last week; if so, we need

-		// to handle the case in which we are the first week of the

-		// next year.

-		var lastDoy = yearLength(year);

-		var lastRelDow = (relDow + lastDoy - doy) % 7;

-		if (lastRelDow < 0) {

-			lastRelDow += 7;

-		}

-		if (((6 - lastRelDow) >= cal.getMinimalDaysInFirstWeek())

-			&& ((doy + 7 - relDow) > lastDoy)) {

-			week = 1;

-		}

-	} else if (week == 0) {

-		// We are the last week of the previous year.

-		var prevDoy = doy + yearLength(year - 1);

-		week = weekOfPeriod(cal, prevDoy, dow);

-	}

-

-	return week;

-}

-

-function weekOfPeriod(cal, dayOfPeriod, dayOfWeek) {

-	// Determine the day of the week of the first day of the period

-	// in question (either a year or a month).  Zero represents the

-	// first day of the week on this calendar.

-	var periodStartDayOfWeek =

-		(dayOfWeek - cal.getFirstDayOfWeek() - dayOfPeriod + 1) % 7;

-	if (periodStartDayOfWeek < 0) {

-		periodStartDayOfWeek += 7;

-	}

-

-	// Compute the week number.  Initially, ignore the first week, which

-	// may be fractional (or may not be).  We add periodStartDayOfWeek in

-	// order to fill out the first week, if it is fractional.

-	var weekNo = Math.floor((dayOfPeriod + periodStartDayOfWeek - 1) / 7);

-

-	// If the first week is long enough, then count it.  If

-	// the minimal days in the first week is one, or if the period start

-	// is zero, we always increment weekNo.

-	if ((7 - periodStartDayOfWeek) >= cal.getMinimalDaysInFirstWeek()) {

-		++weekNo;

-	}

-

-	return weekNo;

-}

-

-

-

-

-function getEventObject(e) {  // utility function to retrieve object from event

-    if (navigator.appName == "Microsoft Internet Explorer") {

-        return e.srcElement;

-    } else {  // is mozilla/netscape

-        // need to crawl up the tree to get the first "real" element

-        // i.e. a tag, not raw text

-        var o = e.target;

-        while (!o.tagName) {

-            o = o.parentNode;

-        }

-        return o;

-    }

-}

-

-function addEvent(name, obj, funct) { // utility function to add event handlers

-

-    if (navigator.appName == "Microsoft Internet Explorer") {

-        obj.attachEvent("on"+name, funct);

-    } else {  // is mozilla/netscape

-        obj.addEventListener(name, funct, false);

-    }

-}

-

-

-function deleteEvent(name, obj, funct) { // utility function to delete event handlers

-

-    if (navigator.appName == "Microsoft Internet Explorer") {

-        obj.detachEvent("on"+name, funct);

-    } else {  // is mozilla/netscape

-        obj.removeEventListener(name, funct, false);

-    }

-}

-

-function setCursor(obj) {

-   if (navigator.appName == "Microsoft Internet Explorer") {

-        obj.style.cursor = "hand";

-    } else {  // is mozilla/netscape

-        obj.style.cursor = "pointer";

-    }

-}

-

-function Point(iX, iY)

-{

-   this.x = iX;

-   this.y = iY;

-}

-

-

-function getPoint(aTag)

-{

-   var oTmp = aTag;  

-   var point = new Point(0,0);

-  

-   do 

-   {

-      point.x += oTmp.offsetLeft;

-      point.y += oTmp.offsetTop;

-      oTmp = oTmp.offsetParent;

-   } 

-   while (oTmp.tagName != "BODY");

-

-   return point;

-}

-

-function toISODate(date) {

-	var s = date.getFullYear();

-	var m = date.getMonth() + 1;

-	if (m < 10) {

-		m = "0" + m;

-	}

-	var day = date.getDate();

-	if (day < 10) {

-		day = "0" + day;

-	}

-	return String(s) + String(m) + String(day);

-	

-}

-

-function pad(number,X) {   // utility function to pad a number to a given width

-	X = (!X ? 2 : X);

-	number = ""+number;

-	while (number.length < X) {

-	    number = "0" + number;

-	}

-	return number;

-}

-

-function bw_check()

-{

-    var is_major = parseInt( navigator.appVersion );

-    this.nver = is_major;

-    this.ver = navigator.appVersion;

-    this.agent = navigator.userAgent;

-    this.dom = document.getElementById ? 1 : 0;

-    this.opera = window.opera ? 1 : 0;

-    this.ie5 = ( this.ver.indexOf( "MSIE 5" ) > -1 && this.dom && !this.opera ) ? 1 : 0;

-    this.ie6 = ( this.ver.indexOf( "MSIE 6" ) > -1 && this.dom && !this.opera ) ? 1 : 0;

-    this.ie4 = ( document.all && !this.dom && !this.opera ) ? 1 : 0;

-    this.ie = this.ie4 || this.ie5 || this.ie6;

-    this.mac = this.agent.indexOf( "Mac" ) > -1;

-    this.ns6 = ( this.dom && parseInt( this.ver ) >= 5 ) ? 1 : 0;

-    this.ie3 = ( this.ver.indexOf( "MSIE" ) && ( is_major < 4 ) );

-    this.hotjava = ( this.agent.toLowerCase().indexOf( 'hotjava' ) != -1 ) ? 1 : 0;

-    this.ns4 = ( document.layers && !this.dom && !this.hotjava ) ? 1 : 0;

-    this.bw = ( this.ie6 || this.ie5 || this.ie4 || this.ns4 || this.ns6 || this.opera );

-    this.ver3 = ( this.hotjava || this.ie3 );

-    this.opera7 = ( ( this.agent.toLowerCase().indexOf( 'opera 7' ) > -1 ) || ( this.agent.toLowerCase().indexOf( 'opera/7' ) > -1 ) );

-    this.operaOld = this.opera && !this.opera7;

-    return this;

-};

-

-

diff --git a/3.0.4/framework/src/org/apache/tapestry/form/DatePicker.jwc b/3.0.4/framework/src/org/apache/tapestry/form/DatePicker.jwc
deleted file mode 100644
index 72cff6f..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/form/DatePicker.jwc
+++ /dev/null
@@ -1,41 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<component-specification
-	class="org.apache.tapestry.form.DatePicker"
-	allow-informal-parameters="yes" 
-	allow-body="no">
-
-  <parameter name="value" direction="form" type="java.util.Date" required="yes"/>
-  <parameter name="format" direction="in" type="java.lang.String" required="no"/>
-  <parameter name="disabled" direction="in" type="boolean" required="no"/>
-  <parameter name="includeWeek" type="boolean" direction="in" required="no"/>
-  <parameter name="icon" type="org.apache.tapestry.IAsset" direction="in" required="no"
-  	  default-value="assets.defaultIcon"/>
-        
-  <property-specification name="name" type="java.lang.String"/>
-  <property-specification name="form" type="org.apache.tapestry.IForm"/>
-  
-  <private-asset name="script" resource-path="DatePicker.js"/>
-  
-  <private-asset name="defaultIcon" resource-path="DatePickerIcon.png"/>
-                
-</component-specification>
diff --git a/3.0.4/framework/src/org/apache/tapestry/form/DatePicker.script b/3.0.4/framework/src/org/apache/tapestry/form/DatePicker.script
deleted file mode 100644
index b1ca083..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/form/DatePicker.script
+++ /dev/null
@@ -1,67 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- $Id$ -->
-<!DOCTYPE script PUBLIC
-	"-//Apache Software Foundation//Tapestry Script Specification 3.0//EN"
-	"http://jakarta.apache.org/tapestry/dtd/Script_3_0.dtd">
-  
-<script>
-
-<include-script resource-path="DatePicker.js"/>
-
-<input-symbol key="name"  class="java.lang.String" required="yes"/>
-<input-symbol key="formName" class="java.lang.String" required="yes"/>
-<input-symbol key="monthNames"  required="yes"/>
-<input-symbol key="shortMonthNames" required="yes"/>
-<input-symbol key="weekDayNames" required="yes"/>
-<input-symbol key="shortWeekDayNames"  required="yes"/>
-<input-symbol key="firstDayInWeek" required="yes"/>
-<input-symbol key="minimalDaysInFirstWeek" required="yes"/>
-<input-symbol key="format" required="yes"/>
-<input-symbol key="includeWeek" required="yes"/>
-<input-symbol key="value" required="no"/>
-
-<let key="calendarObject" unique="yes">
-	calendar_${name}	
-</let>
-
-<let key="buttonOnclickHandler">
-  javascript:${calendarObject}.toggle(document.${formName}.${name});	
-</let>
-
-<body>
-var ${calendarObject};
-</body>
-
-<initialization>
-	
-<if expression="value == null">
-${calendarObject} = new Calendar();
-</if>
-<if expression="value != null">
-${calendarObject} = new Calendar(${value.time});
-</if>
-		
-${calendarObject}.setMonthNames(new Array(${monthNames}));
-${calendarObject}.setShortMonthNames(new Array(${shortMonthNames}));
-${calendarObject}.setWeekDayNames(new Array(${weekDayNames}));
-${calendarObject}.setShortWeekDayNames(new Array(${shortWeekDayNames}));
-${calendarObject}.setFormat("${format}");
-${calendarObject}.setFirstDayOfWeek(${firstDayInWeek});
-${calendarObject}.setMinimalDaysInFirstWeek(${minimalDaysInFirstWeek});
-${calendarObject}.setIncludeWeek(${includeWeek});
-
-${calendarObject}.create();
-
-${calendarObject}.onchange = function() {
-  var field = document.${formName}.${name};
-  var value = ${calendarObject}.formatDate();
-  if (field.value != value) {
-    field.value = value;
-    if (field.onchange) {
-      field.onchange();
-    }
-  }
-}
-
-</initialization>
-</script>
diff --git a/3.0.4/framework/src/org/apache/tapestry/form/DatePickerIcon.png b/3.0.4/framework/src/org/apache/tapestry/form/DatePickerIcon.png
deleted file mode 100644
index 0b9a96e..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/form/DatePickerIcon.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/framework/src/org/apache/tapestry/form/EnumPropertySelectionModel.java b/3.0.4/framework/src/org/apache/tapestry/form/EnumPropertySelectionModel.java
deleted file mode 100644
index 0ffdfad..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/form/EnumPropertySelectionModel.java
+++ /dev/null
@@ -1,141 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.form;
-
-import java.util.ResourceBundle;
-
-import org.apache.commons.lang.enum.Enum;
-
-/**
- *  Implementation of {@link IPropertySelectionModel} that wraps around
- *  a set of {@link Enum}s.
- * 
- *  <p>Uses a simple index number as the value (used to represent the option).
- *
- *  <p>The resource bundle from which labels are extracted is usually
- *  a resource within the Tapestry application.  Since 
- *  {@link ResourceBundle#getBundle(String, java.util.Locale)} uses its caller's class loader,
- *  and that classloader will be the Tapestry framework's classloader, the application's
- *  resources won't be visible.  This requires that the application resolve
- *  the resource to a {@link ResourceBundle} before creating this model.
- *  
- *  @version $Id$
- *  @author Howard Lewis Ship
- * 
- **/
-
-public class EnumPropertySelectionModel implements IPropertySelectionModel
-{
-    private Enum[] _options;
-    private String[] _labels;
-
-    private String _resourcePrefix;
-    private ResourceBundle _bundle;
-
-    /**
-     *  Standard constructor.
-     *
-     *  <p>Labels for the options are extracted from a resource bundle.  resourceBaseName
-     *  identifies the bundle.  Typically, the bundle will be a <code>.properties</code>
-     *  file within the classpath.  Specify the fully qualified class name equivalent, i.e.,
-     *  for file <code>/com/example/foo/LabelStrings.properties</code> use
-     *  <code>com.example.foo.LabelStrings</code> as the resource base name.
-     *
-     *  <p>Normally (when resourcePrefix is null), the keys used to extract labels
-     *  matches the {@link Enum#getName() enumeration id} of the option.  By
-     *  convention, the enumeration id matches the name of the static variable.
-     *
-     *  <p>To avoid naming conflicts when using a single resource bundle for multiple
-     *  models, use a resource prefix.  This is a string which is prepended to
-     *  the enumeration id (they prefix and enumeration id are seperated with a period).
-     *
-     *  @param   options The list of possible values for this model, in the order they
-     *  should appear. This exact array is retained (not copied).
-     *
-     *  @param   bundle The {@link ResourceBundle} from which labels may be extracted.
-     *
-     *  @param   resourcePrefix An optional prefix used when accessing keys within the bundle. 
-     *  Used to allow a single ResouceBundle to contain labels for multiple Enums.
-     **/
-
-    public EnumPropertySelectionModel(Enum[] options, ResourceBundle bundle, String resourcePrefix)
-    {
-        _options = options;
-        _bundle = bundle;
-        _resourcePrefix = resourcePrefix;
-    }
-
-    /**
-     *  Simplified constructor using no prefix.
-     *
-     **/
-
-    public EnumPropertySelectionModel(Enum[] options, ResourceBundle bundle)
-    {
-        this(options, bundle, null);
-    }
-
-    public int getOptionCount()
-    {
-        return _options.length;
-    }
-
-    public Object getOption(int index)
-    {
-        return _options[index];
-    }
-
-    public String getLabel(int index)
-    {
-        if (_labels == null)
-            readLabels();
-
-        return _labels[index];
-    }
-
-    public String getValue(int index)
-    {
-        return Integer.toString(index);
-    }
-
-    public Object translateValue(String value)
-    {
-        int index;
-
-        index = Integer.parseInt(value);
-
-        return _options[index];
-    }
-
-    private void readLabels()
-    {
-        _labels = new String[_options.length];
-
-        for (int i = 0; i < _options.length; i++)
-        {
-            String enumerationId = _options[i].getName();
-
-            String key;
-
-            if (_resourcePrefix == null)
-                key = enumerationId;
-            else
-                key = _resourcePrefix + "." + enumerationId;
-
-            _labels[i] = _bundle.getString(key);
-        }
-
-    }
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/form/Form.java b/3.0.4/framework/src/org/apache/tapestry/form/Form.java
deleted file mode 100644
index e0e3175..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/form/Form.java
+++ /dev/null
@@ -1,828 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.form;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.tapestry.AbstractComponent;
-import org.apache.tapestry.ApplicationRuntimeException;
-import org.apache.tapestry.IActionListener;
-import org.apache.tapestry.IBinding;
-import org.apache.tapestry.IDirect;
-import org.apache.tapestry.IEngine;
-import org.apache.tapestry.IForm;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.RenderRewoundException;
-import org.apache.tapestry.StaleLinkException;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.engine.IEngineService;
-import org.apache.tapestry.engine.ILink;
-import org.apache.tapestry.html.Body;
-import org.apache.tapestry.util.IdAllocator;
-import org.apache.tapestry.util.StringSplitter;
-import org.apache.tapestry.valid.IValidationDelegate;
-
-/**
- *  Component which contains form element components.  Forms use the
- *  action or direct services to handle the form submission.  A Form will wrap
- *  other components and static HTML, including
- *  form components such as {@link TextArea}, {@link TextField}, {@link Checkbox}, etc.
- * 
- *  [<a href="../../../../../ComponentReference/Form.html">Component Reference</a>]
- * 
- *  <p>When a form is submitted, it continues through the rewind cycle until
- *  <em>after</em> all of its wrapped elements have renderred.  As the form
- *  component render (in the rewind cycle), they will be updating
- *  properties of the containing page and notifying thier listeners.  Again:
- *  each form component is responsible not only for rendering HTML (to present the
- *  form), but for handling it's share of the form submission.
- *
- *  <p>Only after all that is done will the Form notify its listener.
- *
- *  <p>Starting in release 1.0.2, a Form can use either the direct service or
- *  the action service.  The default is the direct service, even though
- *  in earlier releases, only the action service was available.
- *
- *  @author Howard Lewis Ship, David Solis
- *  @version $Id$
- **/
-
-public abstract class Form extends AbstractComponent implements IForm, IDirect
-{
-    private static class HiddenValue
-    {
-        String _name;
-        String _value;
-        String _id;
-
-        private HiddenValue(String name, String value)
-        {
-			this(name, null, value);
-        }
-
-		private HiddenValue(String name, String id, String value)
-		{
-			_name	= name;
-			_id		= id;
-			_value	= value;
-		}
-    }
-
-    private boolean _rewinding;
-    private boolean _rendering;
-    private String _name;
-
-    /**
-     *  Used when rewinding the form to figure to match allocated ids (allocated during
-     *  the rewind) against expected ids (allocated in the previous request cycle, when
-     *  the form was rendered).
-     * 
-     *  @since 3.0
-     * 
-     **/
-
-    private int _allocatedIdIndex;
-
-    /**
-     *  The list of allocated ids for form elements within this form.  This list
-     *  is constructed when a form renders, and is validated against when the
-     *  form is rewound.
-     * 
-     *  @since 3.0
-     * 
-     **/
-
-    private List _allocatedIds = new ArrayList();
-
-    /**
-     *  {@link Map}, keyed on {@link FormEventType}.  Values are either a String (the name
-     *  of a single event), or a {@link List} of Strings.
-     *
-     *  @since 1.0.2
-     **/
-
-    private Map _events;
-
-    private static final int EVENT_MAP_SIZE = 3;
-
-    private IdAllocator _elementIdAllocator = new IdAllocator();
-
-    private String _encodingType;
-
-    private List _hiddenValues;
-
-    /**
-     *  Returns the currently active {@link IForm}, or null if no form is
-     *  active.  This is a convienience method, the result will be
-     *  null, or an instance of {@link IForm}, but not necessarily a
-     *  <code>Form</code>.
-     *
-     **/
-
-    public static IForm get(IRequestCycle cycle)
-    {
-        return (IForm) cycle.getAttribute(ATTRIBUTE_NAME);
-    }
-
-    /**
-     *  Indicates to any wrapped form components that they should respond to the form
-     *  submission.
-     *
-     *  @throws ApplicationRuntimeException if not rendering.
-     **/
-
-    public boolean isRewinding()
-    {
-        if (!_rendering)
-            throw Tapestry.createRenderOnlyPropertyException(this, "rewinding");
-
-        return _rewinding;
-    }
-
-    /**
-     *  Returns true if this Form is configured to use the direct
-     *  service.
-     *
-     *  <p>This is derived from the direct parameter, and defaults
-     *  to true if not bound.
-     *
-     *  @since 1.0.2
-     **/
-
-    public abstract boolean isDirect();
-
-    /**
-     *  Returns true if the stateful parameter is bound to
-     *  a true value.  If stateful is not bound, also returns
-     *  the default, true.
-     *
-     *  @since 1.0.1
-     **/
-
-    public boolean getRequiresSession()
-    {
-        return isStateful();
-    }
-
-    /**
-     *  Constructs a unique identifier (within the Form).  The identifier
-     *  consists of the component's id, with an index number added to
-     *  ensure uniqueness.
-     *
-     *  <p>Simply invokes {@link #getElementId(org.apache.tapestry.form.IFormComponent, java.lang.String)}
-     *  with the component's id.
-     *
-     *
-     *  @since 1.0.2
-     **/
-
-    public String getElementId(IFormComponent component)
-    {
-        return getElementId(component, component.getId());
-    }
-
-    /**
-     *  Constructs a unique identifier from the base id.  If possible, the
-     *  id is used as-is.  Otherwise, a unique identifier is appended
-     *  to the id.
-     *
-     *  <p>This method is provided simply so that some components
-     * ({@link ImageSubmit}) have more specific control over
-     *  their names.
-     *
-     *  @since 1.0.3
-     *
-     **/
-
-    public String getElementId(IFormComponent component, String baseId)
-    {
-        String result = _elementIdAllocator.allocateId(baseId);
-
-        if (_rewinding)
-        {
-            if (_allocatedIdIndex >= _allocatedIds.size())
-            {
-                throw new StaleLinkException(
-                    Tapestry.format(
-                        "Form.too-many-ids",
-                        getExtendedId(),
-                        Integer.toString(_allocatedIds.size()),
-                        component.getExtendedId()),
-                    this);
-            }
-
-            String expected = (String) _allocatedIds.get(_allocatedIdIndex);
-
-            if (!result.equals(expected))
-                throw new StaleLinkException(
-                    Tapestry.format(
-                        "Form.id-mismatch",
-                        new Object[] {
-                            getExtendedId(),
-                            Integer.toString(_allocatedIdIndex + 1),
-                            expected,
-                            result,
-                            component.getExtendedId()}),
-                    this);
-        }
-        else
-        {
-            _allocatedIds.add(result);
-        }
-
-        _allocatedIdIndex++;
-
-        component.setName(result);
-
-        return result;
-    }
-
-    /**
-     *  Returns the name generated for the form.  This is used to faciliate
-     *  components that write JavaScript and need to access the form or
-     *  its contents.
-     *
-     *  <p>This value is generated when the form renders, and is not cleared.
-     *  If the Form is inside a {@link org.apache.tapestry.components.Foreach}, 
-     *  this will be the most recently
-     *  generated name for the Form.
-     *
-     *  <p>This property is exposed so that sophisticated applications can write
-     *  JavaScript handlers for the form and components within the form.
-     *
-     *  @see AbstractFormComponent#getName()
-     *
-     **/
-
-    public String getName()
-    {
-        return _name;
-    }
-
-    /** @since 3.0 **/
-
-    protected void prepareForRender(IRequestCycle cycle)
-    {
-        super.prepareForRender(cycle);
-
-        if (cycle.getAttribute(ATTRIBUTE_NAME) != null)
-            throw new ApplicationRuntimeException(
-                Tapestry.getMessage("Form.forms-may-not-nest"),
-                this,
-                null,
-                null);
-
-        cycle.setAttribute(ATTRIBUTE_NAME, this);
-    }
-
-    protected void cleanupAfterRender(IRequestCycle cycle)
-    {
-        _rendering = false;
-
-        _allocatedIdIndex = 0;
-        _allocatedIds.clear();
-
-        _events = null;
-
-        _elementIdAllocator.clear();
-
-        if (_hiddenValues != null)
-            _hiddenValues.clear();
-
-        cycle.removeAttribute(ATTRIBUTE_NAME);
-
-        _encodingType = null;
-
-        IValidationDelegate delegate = getDelegate();
-
-        if (delegate != null)
-            delegate.setFormComponent(null);
-
-        super.cleanupAfterRender(cycle);
-    }
-
-    protected void writeAttributes(IMarkupWriter writer, ILink link)
-    {
-        String method = getMethod();
-
-        writer.begin(getTag());
-        writer.attribute("method", (method == null) ? "post" : method);
-        writer.attribute("name", _name);
-        writer.attribute("action", link.getURL(null, false));
-
-        if (_encodingType != null)
-            writer.attribute("enctype", _encodingType);
-    }
-
-    protected void renderComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        String actionId = cycle.getNextActionId();
-        _name = getDisplayName() + actionId;
-
-        boolean renderForm = !cycle.isRewinding();
-        boolean rewound = cycle.isRewound(this);
-
-        _rewinding = rewound;
-
-        _allocatedIdIndex = 0;
-
-        _rendering = true;
-
-        if (rewound)
-        {
-            String storedIdList = cycle.getRequestContext().getParameter(_name);
-
-            reconstructAllocatedIds(storedIdList);
-        }
-
-        ILink link = getLink(cycle, actionId);
-
-        // When rendering, use a nested writer so that an embedded Upload
-        // component can force the encoding type.
-
-        IMarkupWriter nested = writer.getNestedWriter();
-
-        renderBody(nested, cycle);
-
-        if (renderForm)
-        {
-            writeAttributes(writer, link);
-
-            renderInformalParameters(writer, cycle);
-            writer.println();
-        }
-
-        // Write the hidden's, or at least, reserve the query parameters
-        // required by the Gesture.
-
-        writeLinkParameters(writer, link, !renderForm);
-
-        if (renderForm)
-        {
-            // What's this for?  It's part of checking for stale links.  
-            // We record the list of allocated ids.
-            // On rewind, we check that the stored list against which
-            // ids were allocated.  If the persistent state of the page or
-            // application changed between render (previous request cycle)
-            // and rewind (current request cycle), then the list
-            // of ids will change as well.
-
-            writeHiddenField(writer, _name, buildAllocatedIdList());
-            writeHiddenValues(writer);
-
-            nested.close();
-
-            writer.end(getTag());
-
-            // Write out event handlers collected during the rendering.
-
-            emitEventHandlers(writer, cycle);
-        }
-
-        if (rewound)
-        {
-            int expected = _allocatedIds.size();
-
-            // The other case, _allocatedIdIndex > expected, is
-            // checked for inside getElementId().  Remember that
-            // _allocatedIdIndex is incremented after allocating.
-
-            if (_allocatedIdIndex < expected)
-            {
-                String nextExpectedId = (String) _allocatedIds.get(_allocatedIdIndex);
-
-                throw new StaleLinkException(
-                    Tapestry.format(
-                        "Form.too-few-ids",
-                        getExtendedId(),
-                        Integer.toString(expected - _allocatedIdIndex),
-                        nextExpectedId),
-                    this);
-            }
-
-            IActionListener listener = getListener();
-
-            if (listener != null)
-                listener.actionTriggered(this, cycle);
-
-            // Abort the rewind render.
-
-            throw new RenderRewoundException(this);
-        }
-    }
-
-    /**
-     *  Adds an additional event handler.
-     *
-     *  @since 1.0.2
-     * 
-     **/
-
-    public void addEventHandler(FormEventType type, String functionName)
-    {
-        if (_events == null)
-            _events = new HashMap(EVENT_MAP_SIZE);
-
-        Object value = _events.get(type);
-
-        // The value can either be a String, or a List of String.  Since
-        // it is rare for there to be more than one event handling function,
-        // we start with just a String.
-
-        if (value == null)
-        {
-            _events.put(type, functionName);
-            return;
-        }
-
-        // The second function added converts it to a List.
-
-        if (value instanceof String)
-        {
-            List list = new ArrayList();
-            list.add(value);
-            list.add(functionName);
-
-            _events.put(type, list);
-            return;
-        }
-
-        // The third and subsequent function just
-        // adds to the List.
-
-        List list = (List) value;
-        list.add(functionName);
-    }
-
-    protected void emitEventHandlers(IMarkupWriter writer, IRequestCycle cycle)
-    {
-
-        if (_events == null || _events.isEmpty())
-            return;
-
-        Body body = Body.get(cycle);
-
-        if (body == null)
-            throw new ApplicationRuntimeException(
-                Tapestry.getMessage("Form.needs-body-for-event-handlers"),
-                this,
-                null,
-                null);
-
-        StringBuffer buffer = new StringBuffer();
-
-        Iterator i = _events.entrySet().iterator();
-        while (i.hasNext())
-        {
-
-            Map.Entry entry = (Map.Entry) i.next();
-            FormEventType type = (FormEventType) entry.getKey();
-            Object value = entry.getValue();
-
-            buffer.append("document.");
-            buffer.append(_name);
-            buffer.append(".");
-            buffer.append(type.getPropertyName());
-            buffer.append(" = ");
-
-            // The typical case; one event one event handler.  Easy enough.
-
-            if (value instanceof String)
-            {
-                buffer.append(value.toString());
-                buffer.append(";");
-            }
-            else
-            {
-                // Build a composite function in-place
-
-                buffer.append("function ()\n{\n");
-
-                boolean combineWithAnd = type.getCombineUsingAnd();
-
-                List l = (List) value;
-                int count = l.size();
-
-                for (int j = 0; j < count; j++)
-                {
-                    String functionName = (String) l.get(j);
-
-                    if (j > 0)
-                    {
-
-                        if (combineWithAnd)
-                            buffer.append(" &&");
-                        else
-                            buffer.append(";");
-                    }
-
-                    buffer.append("\n  ");
-
-                    if (combineWithAnd)
-                    {
-                        if (j == 0)
-                            buffer.append("return ");
-                        else
-                            buffer.append("  ");
-                    }
-
-                    buffer.append(functionName);
-                    buffer.append("()");
-                }
-
-                buffer.append(";\n}");
-            }
-
-            buffer.append("\n\n");
-        }
-
-        body.addInitializationScript(buffer.toString());
-    }
-
-    /**
-     *  Simply invokes {@link #render(IMarkupWriter, IRequestCycle)}.
-     *
-     *  @since 1.0.2
-     * 
-     **/
-
-    public void rewind(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        render(writer, cycle);
-    }
-
-    /**
-     *  Method invoked by the direct service.
-     *
-     *  @since 1.0.2
-     *
-     **/
-
-    public void trigger(IRequestCycle cycle)
-    {
-        Object[] parameters = cycle.getServiceParameters();
-
-        cycle.rewindForm(this, (String) parameters[0]);
-    }
-
-    /**
-     *  Builds the EngineServiceLink for the form, using either the direct or
-     *  action service. 
-     *
-     *  @since 1.0.3
-     *
-     **/
-
-    private ILink getLink(IRequestCycle cycle, String actionId)
-    {
-        String serviceName = null;
-
-        if (isDirect())
-            serviceName = Tapestry.DIRECT_SERVICE;
-        else
-            serviceName = Tapestry.ACTION_SERVICE;
-
-        IEngine engine = cycle.getEngine();
-        IEngineService service = engine.getService(serviceName);
-
-        // A single service parameter is used to store the actionId.
-
-        return service.getLink(cycle, this, new String[] { actionId });
-    }
-
-    private void writeLinkParameters(IMarkupWriter writer, ILink link, boolean reserveOnly)
-    {
-        String[] names = link.getParameterNames();
-        int count = Tapestry.size(names);
-
-        for (int i = 0; i < count; i++)
-        {
-            String name = names[i];
-
-            // Reserve the name.
-
-            _elementIdAllocator.allocateId(name);
-
-            if (!reserveOnly)
-                writeHiddenFieldsForParameter(writer, link, name);
-        }
-    }
-
-    /**
-     *  @since 3.0
-     *
-     **/
-
-    protected void writeHiddenField(IMarkupWriter writer, String name, String value)
-    {
-		writeHiddenField(writer, name, null, value);
-    }
-
-	protected void writeHiddenField(IMarkupWriter writer, String name, String id, String value)
-	{
-		writer.beginEmpty("input");
-		writer.attribute("type", "hidden");
-		writer.attribute("name", name);
-
-		if(id != null && id.length() != 0)
-			writer.attribute("id", id);
-		
-		writer.attribute("value", value);
-		writer.println();
-	}
-
-    /**
-     *  @since 2.2
-     * 
-     **/
-
-    private void writeHiddenFieldsForParameter(
-        IMarkupWriter writer,
-        ILink link,
-        String parameterName)
-    {
-        String[] values = link.getParameterValues(parameterName);
-
-        for (int i = 0; i < values.length; i++)
-        {
-            writeHiddenField(writer, parameterName, values[i]);
-        }
-    }
-
-    /**
-     *  Converts the allocateIds property into a string, a comma-separated list of ids.
-     *  This is included as a hidden field in the form and is used to identify
-     *  discrepencies when the form is submitted.
-     * 
-     *  @since 3.0
-     * 
-     **/
-
-    protected String buildAllocatedIdList()
-    {
-        StringBuffer buffer = new StringBuffer();
-        int count = _allocatedIds.size();
-
-        for (int i = 0; i < count; i++)
-        {
-            if (i > 0)
-                buffer.append(',');
-
-            buffer.append(_allocatedIds.get(i));
-        }
-
-        return buffer.toString();
-    }
-
-    /**
-     *  Converts a string passed as a parameter (and containing a comma
-     *  separated list of ids) back into the allocateIds property.
-     * 
-     *  @see #buildAllocatedIdList()
-     * 
-     *  @since 3.0
-     * 
-     **/
-
-    protected void reconstructAllocatedIds(String storedIdList)
-    {
-        if (Tapestry.isBlank(storedIdList))
-            return;
-
-        StringSplitter splitter = new StringSplitter(',');
-
-        String[] ids = splitter.splitToArray(storedIdList);
-
-        for (int i = 0; i < ids.length; i++)
-            _allocatedIds.add(ids[i]);
-    }
-
-    public abstract IValidationDelegate getDelegate();
-
-    public abstract void setDelegate(IValidationDelegate delegate);
-
-    public abstract void setDirect(boolean direct);
-
-    public abstract IActionListener getListener();
-
-    public abstract String getMethod();
-
-    /**
-     *  Invoked when not rendering, so it uses the stateful binding.
-     *  If not bound, returns true.
-     * 
-     **/
-
-    public boolean isStateful()
-    {
-        IBinding statefulBinding = getStatefulBinding();
-
-        if (statefulBinding == null)
-            return true;
-
-        return statefulBinding.getBoolean();
-    }
-
-    public abstract IBinding getStatefulBinding();
-
-    protected void finishLoad()
-    {
-        setDirect(true);
-    }
-
-    public void setEncodingType(String encodingType)
-    {
-        if (_encodingType != null && !_encodingType.equals(encodingType))
-            throw new ApplicationRuntimeException(
-                Tapestry.format(
-                    "Form.encoding-type-contention",
-                    getExtendedId(),
-                    _encodingType,
-                    encodingType),
-                this,
-                null,
-                null);
-
-        _encodingType = encodingType;
-    }
-
-    /**
-     *  Returns the tag of the form.
-     *
-     *  @since 3.0
-     *
-     **/
-
-    protected String getTag()
-    {
-        return "form";
-    }
-
-    /**
-     * Returns the name of the element.
-     *
-     *
-     *  @since 3.0
-     **/
-
-    protected String getDisplayName()
-    {
-        return "Form";
-    }
-
-    /** @since 3.0 */
-
-    public void addHiddenValue(String name, String value)
-    {
-		if (_hiddenValues == null)
-			_hiddenValues = new ArrayList();
-
-		_hiddenValues.add(new HiddenValue(name, value));
-    }
-
-	/** @since 3.0 */
-
-	public void addHiddenValue(String name, String id, String value)
-	{
-		if (_hiddenValues == null)
-			_hiddenValues = new ArrayList();
-
-		_hiddenValues.add(new HiddenValue(name, id, value));
-	}
-
-    /** 
-     * Writes hidden values accumulated during the render
-     * (by components invoking {@link #addHiddenValue(String, String)}.
-     * 
-     * @since 3.0
-     */
-
-    protected void writeHiddenValues(IMarkupWriter writer)
-    {
-        int count = Tapestry.size(_hiddenValues);
-
-        for (int i = 0; i < count; i++)
-        {
-            HiddenValue hv = (HiddenValue) _hiddenValues.get(i);
-
-            writeHiddenField(writer, hv._name, hv._id, hv._value);
-        }
-    }
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/form/Form.jwc b/3.0.4/framework/src/org/apache/tapestry/form/Form.jwc
deleted file mode 100644
index 1d4c2c8..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/form/Form.jwc
+++ /dev/null
@@ -1,68 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-  
-<component-specification class="org.apache.tapestry.form.Form">
-
-  <description>
-  Used to implement an HTML form.
-  </description>
-
-  <parameter name="method" type="java.lang.String" direction="in">
-    <description>
-    The method used by the form when it is submitted, defaults to POST.
-    </description>
-  </parameter>
-  
-  <parameter name="listener" 
-  	type="org.apache.tapestry.IActionListener" 
-  	required="no"
-  	direction="in">
-    <description>
-  	Object invoked when the form is submitted, after all form components have responded
-  	to the submission.
-    </description>
-  </parameter>
-  
-  <parameter name="stateful" 
-  	type="boolean" 
-  	direction="custom">
-    <description>
-    If true (the default), then an active HttpSession is required.
-    </description>
-  </parameter>
-  
-  <parameter name="direct" type="boolean" direction="in">
-    <description>
-    If true (the default), then the more efficient direct service is used.
-    If false, then the action service is used.
-    </description>
-  </parameter>
-  
-  <parameter name="delegate" 
-  	type="org.apache.tapestry.valid.IValidationDelegate" direction="in">
-    <description>
-    Specifies the delegate to be used by fields to track input errors.
-    </description>
-  </parameter>
-
-  <reserved-parameter name="action"/>
-
-</component-specification>
diff --git a/3.0.4/framework/src/org/apache/tapestry/form/FormEventType.java b/3.0.4/framework/src/org/apache/tapestry/form/FormEventType.java
deleted file mode 100644
index 80b1f9d..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/form/FormEventType.java
+++ /dev/null
@@ -1,82 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.form;
-
-import org.apache.commons.lang.enum.Enum;
-
-/**
- *  Lists different types of JavaScript events that can be associated
- *  with a {@link Form} via {@link Form#addEventHandler(FormEventType, String)}.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 1.0.2
- **/
-
-public class FormEventType extends Enum
-{
-    /**
-     *  Form event triggered when the form is submitted.  Allows an event handler
-     *  to perform any final changes before the results are posted to the server.
-     *
-     *  <p>The JavaScript method should return <code>true</code> or
-     * <code>false</code>.  If there are multiple event handlers for the form
-     * they will be combined using the binary and operator (<code>&amp;&amp;</code>).
-     *
-     **/
-
-    public static final FormEventType SUBMIT = new FormEventType("SUBMIT", "onsubmit");
-
-    /**
-     *  Form event triggered when the form is reset; this allows an event handler
-     *  to deal with any special cases related to resetting.
-     *
-     **/
-
-    public static final FormEventType RESET = new FormEventType("RESET", "onreset");
-
-    private String _propertyName;
-
-    private FormEventType(String name, String propertyName)
-    {
-        super(name);
-
-        _propertyName = propertyName;
-    }
-
-    /** 
-     *  Returns the DOM property corresponding to event type (used when generating
-     *  client-side scripting).
-     *
-     **/
-
-    public String getPropertyName()
-    {
-        return _propertyName;
-    }
-
-    /**
-     *  Returns true if multiple functions should be combined
-     *  with the <code>&amp;&amp;</code> operator.  Otherwise,
-     *  the event handler functions are simply invoked
-     *  sequentially (as a series of JavaScript statements).
-     *
-     **/
-
-    public boolean getCombineUsingAnd()
-    {
-        return this == FormEventType.SUBMIT;
-    }
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/form/Hidden.java b/3.0.4/framework/src/org/apache/tapestry/form/Hidden.java
deleted file mode 100644
index 7643de1..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/form/Hidden.java
+++ /dev/null
@@ -1,176 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.form;
-
-import java.io.IOException;
-
-import org.apache.tapestry.ApplicationRuntimeException;
-import org.apache.tapestry.IActionListener;
-import org.apache.tapestry.IBinding;
-import org.apache.tapestry.IForm;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.util.io.DataSqueezer;
-
-/**
- *  Implements a hidden field within a {@link Form}.
- *
- *  [<a href="../../../../../ComponentReference/Hidden.html">Component Reference</a>]
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- * 
- **/
-
-public abstract class Hidden extends AbstractFormComponent
-{
-
-    protected void renderComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        IForm form = getForm(cycle);
-        boolean formRewound = form.isRewinding();
-
-        String name = form.getElementId(this);
-
-        // If the form containing the Hidden isn't rewound, then render.
-
-        if (!formRewound)
-        {
-            // Optimiziation: if the page is rewinding (some other action or
-            // form was submitted), then don't bother rendering.
-
-            if (cycle.isRewinding())
-                return;
-
-            String externalValue = null;
-
-            if (getEncode())
-            {
-                Object value = getValueBinding().getObject();
-
-                try
-                {
-                    externalValue = getDataSqueezer().squeeze(value);
-                }
-                catch (IOException ex)
-                {
-                    throw new ApplicationRuntimeException(ex.getMessage(), this, null, ex);
-                }
-            }
-            else
-                externalValue = (String) getValueBinding().getObject("value", String.class);
-
-            String id = getElementId();
-            //if we would like to test the IForm.addHiddenValue(name, externalValue) method with
-            //Hidden JUnit test the following code must be default. But from the performance issue
-            //I don't use the id parameter clauses.  
-/*			if(id == null || id.length() == 0){
-				form.addHiddenValue(name, externalValue);
-            }else{
-				form.addHiddenValue(name, id, externalValue);
-            }
-*/
-			form.addHiddenValue(name, id, externalValue);
-            
-
-            return;
-        }
-
-        String externalValue = cycle.getRequestContext().getParameter(name);
-        Object value = null;
-
-        if (getEncode())
-        {
-            try
-            {
-                value = getDataSqueezer().unsqueeze(externalValue);
-            }
-            catch (IOException ex)
-            {
-                throw new ApplicationRuntimeException(ex.getMessage(), this, null, ex);
-            }
-        }
-        else
-            value = externalValue;
-
-        // A listener is not always necessary ... it's easy to code
-        // the synchronization as a side-effect of the accessor method.
-
-        getValueBinding().setObject(value);
-
-        IActionListener listener = getListener();
-
-        if (listener != null)
-            listener.actionTriggered(this, cycle);
-    }
-
-	public String getElementId(){
-		String value = null;
-		IBinding idBinding = getIdBinding();
-		if(idBinding != null){
-			value = idBinding.getString();
-		}
-		return value;
-	}
-
-    /** @since 2.2 **/
-
-    private DataSqueezer getDataSqueezer()
-    {
-        return getPage().getEngine().getDataSqueezer();
-    }
-
-    public abstract IActionListener getListener();
-
-    public abstract IBinding getValueBinding();
-	public abstract IBinding getIdBinding();
-
-    /**
-     * 
-     *  Returns false.  Hidden components are never disabled.
-     * 
-     *  @since 2.2
-     * 
-     **/
-
-    public boolean isDisabled()
-    {
-        return false;
-    }
-
-    /** 
-     * 
-     *  Returns true if the compent encodes object values using a
-     *  {@link org.apache.tapestry.util.io.DataSqueezer}, false
-     *  if values are always Strings.
-     * 
-     *  @since 2.2
-     * 
-     **/
-
-    public abstract boolean getEncode();
-
-    public abstract void setEncode(boolean encode);
-
-    /**
-     * Sets the encode parameter property to its default, true.
-     * 
-     * @since 3.0
-     */
-    protected void finishLoad()
-    {
-        setEncode(true);
-    }
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/form/Hidden.jwc b/3.0.4/framework/src/org/apache/tapestry/form/Hidden.jwc
deleted file mode 100644
index faec149..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/form/Hidden.jwc
+++ /dev/null
@@ -1,61 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<component-specification class="org.apache.tapestry.form.Hidden" 
-	allow-body="no" 
-	allow-informal-parameters="no">
-
-  <description>
-  Stores a value in a hidden field of the form.
-  </description>
-  
-  <parameter name="value" 
-  	required="yes" 
-  	type="java.lang.Object"
-  	direction="custom">
-    <description>
-    Value to save in the form.
-    </description>
-  </parameter>
-  
-  <parameter name="listener" 
-  	type="org.apache.tapestry.IActionListener"
-  	direction="in">
-    <description>
-    Listener notified after the value is restored.
-    </description>
-  </parameter>
-  
-  <parameter name="id" 
-  	required="no" 
-  	type="java.lang.String"
-  	direction="custom">
-    <description>
-    ID parameter of HTML hidden object.
-    </description>
-  </parameter>
-
-  <parameter name="encode" type="boolean" direction="in"/>
-
-  <property-specification name="name" type="java.lang.String"/>
-  <property-specification name="form" type="org.apache.tapestry.IForm"/>
-   
-</component-specification>
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/form/IFormComponent.java b/3.0.4/framework/src/org/apache/tapestry/form/IFormComponent.java
deleted file mode 100644
index 5951813..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/form/IFormComponent.java
+++ /dev/null
@@ -1,87 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.form;
-
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.IForm;
-
-/**
- *  A common interface implemented by all form components (components that
- *  create interactive elements in the rendered page).
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- **/
-
-public interface IFormComponent extends IComponent
-{
-    /**
-     *  Returns the {@link org.apache.tapestry.IForm} which contains the component,
-     *  or null if the component is not contained by a form,
-     *  of if the containing Form is not currently renderring.
-     * 
-     **/
-
-    public IForm getForm();
-
-    /**
-     *  Returns the name of the component, which is automatically generated
-     *  during renderring.
-     *
-     *  <p>This value is set inside the component's render method and is
-     *  <em>not</em> cleared.  If the component is inside a {@link org.apache.tapestry.components.Foreach}, the
-     *  value returned is the most recent name generated for the component.
-     *
-     *  <p>This property is made available to facilitate writing JavaScript that
-     *  allows components (in the client web browser) to interact.
-     *
-     *  <p>In practice, a {@link org.apache.tapestry.html.Script} component
-     *  works with the {@link org.apache.tapestry.html.Body} component to get the
-     *  JavaScript code inserted and referenced.
-     *
-     **/
-
-    public String getName();
-    
-    /**
-     *  Invoked by {@link IForm#getElementId(IFormComponent)} when a name is created
-     *  for a form component.
-     * 
-     *  @since 3.0
-     * 
-     **/
-    
-    public void setName(String name);
-
-    /**
-     *  May be implemented to return a user-presentable, localized name for the component,
-     *  which is used in labels or error messages.  Most components simply return null.
-     * 
-     *  @since 1.0.9
-     * 
-     **/
-
-    public String getDisplayName();
-    
-    /**
-     *  Returns true if the component is disabled.  This is important when the containing
-     *  form is submitted, since disabled parameters do not update their bindings.
-     * 
-     *  @since 2.2
-     * 
-     **/
-    
-    public boolean isDisabled();
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/form/IPropertySelectionModel.java b/3.0.4/framework/src/org/apache/tapestry/form/IPropertySelectionModel.java
deleted file mode 100644
index ba31ec6..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/form/IPropertySelectionModel.java
+++ /dev/null
@@ -1,85 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.form;
-
-/**
- *  Used by a {@link PropertySelection} to provide labels for options.
- *
- *  <p>The component requires three different representations
- *  of each option:
- *  <ul>
- *  <li>The option value, a Java object that will eventually be assigned to
- *  a property
- *  <li>The label, a String which is incorprated into the HTML to identify the
- *  option to the user
- *  <li>The value, a String which is used to represent the option as the value
- *  of the &lt;option&gt; or &lt;input type=radio&gt; generated by the
- *  {@link PropertySelection}.
- *  </ul>
- *
- *  <p>The option is usually either an {@link org.apache.commons.lang.enum.Enum} 
- *  (see {@link EnumPropertySelectionModel})
- *  or some kind of business object.  The label is often a property of the
- *  option object (for example, for a list of customers, it could be the customer name).
- *
- *  <p>It should be easy to convert between the value and the option.  It may simply
- *  be an index into an array.  For business objects, it is often the primary key
- *  of the object, expressed as a String.
- *
- *  @version $Id$
- *  @author Howard Lewis Ship
- *
- **/
-
-public interface IPropertySelectionModel
-{
-    /**
-     *  Returns the number of possible options.
-     *
-     **/
-
-    public int getOptionCount();
-
-    /**
-     *  Returns one possible option.
-     *
-     **/
-
-    public Object getOption(int index);
-
-    /**
-     *  Returns the label for an option.  It is the responsibility of the
-     *  adaptor to make this value localized.
-     *
-     **/
-
-    public String getLabel(int index);
-
-    /**
-     *  Returns a String used to represent the option in the HTML (as the
-     *  value of an &lt;option&gt; or &lt;input type=radio&gt;.
-     *
-     **/
-
-    public String getValue(int index);
-
-    /**
-     *  Returns the option corresponding to a value.  This is used when
-     *  interpreting submitted form parameters.
-     *
-     **/
-
-    public Object translateValue(String value);
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/form/IPropertySelectionRenderer.java b/3.0.4/framework/src/org/apache/tapestry/form/IPropertySelectionRenderer.java
deleted file mode 100644
index 137cf6c..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/form/IPropertySelectionRenderer.java
+++ /dev/null
@@ -1,58 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.form;
-
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-
-/**
- *  Defines an object that works with a {@link PropertySelection} component
- *  to render the individual elements obtained from the {@link IPropertySelectionModel model}.
- *
- *  @version $Id$
- *  @author Howard Lewis Ship
- *
- **/
-
-public interface IPropertySelectionRenderer
-{
-    /**
-     *  Begins the rendering of the {@link PropertySelection}.
-     *
-     **/
-
-    public void beginRender(PropertySelection component, IMarkupWriter writer, IRequestCycle cycle);
-
-    /**
-     *  Invoked for each element obtained from the {@link IPropertySelectionModel model}.
-     *
-     **/
-
-    public void renderOption(
-        PropertySelection component,
-        IMarkupWriter writer,
-        IRequestCycle cycle,
-        IPropertySelectionModel model,
-        Object option,
-        int index,
-        boolean selected);
-
-    /**
-     *  Ends the rendering of the {@link PropertySelection}.
-     *
-     **/
-
-    public void endRender(PropertySelection component, IMarkupWriter writer, IRequestCycle cycle);
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/form/ImageSubmit.java b/3.0.4/framework/src/org/apache/tapestry/form/ImageSubmit.java
deleted file mode 100644
index 611ae2f..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/form/ImageSubmit.java
+++ /dev/null
@@ -1,163 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.form;
-
-import java.awt.Point;
-
-import org.apache.tapestry.IActionListener;
-import org.apache.tapestry.IAsset;
-import org.apache.tapestry.IBinding;
-import org.apache.tapestry.IForm;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.request.RequestContext;
-
-/**
- *  Used to create an image button inside a {@link Form}.  Although it
- *  is occasionally useful to know the {@link Point} on the image that was clicked
- *  (i.e., use the image as a kind of image map, which was the original intent
- *  of the HTML element), it is more commonly used to provide a graphic
- *  image for the user to click, rather than the rather plain &lt;input type=submit&gt;.
- *
- *  [<a href="../../../../../ComponentReference/ImageSubmit.html">Component Reference</a>]
- *
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- **/
-
-public abstract class ImageSubmit extends AbstractFormComponent
-{
-
-    public abstract IBinding getPointBinding();
-
-    public abstract IBinding getSelectedBinding();
-
-    protected void renderComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        IForm form = getForm(cycle);
-
-        boolean rewinding = form.isRewinding();
-
-        String nameOverride = getNameOverride();
-
-        String name =
-            nameOverride == null ? form.getElementId(this) : form.getElementId(this, nameOverride);
-
-        if (rewinding)
-        {
-            // If disabled, do nothing.
-
-            if (isDisabled())
-                return;
-
-            RequestContext context = cycle.getRequestContext();
-
-            // Image clicks get submitted as two request parameters: 
-            // foo.x and foo.y
-
-            String parameterName = name + ".x";
-
-            String value = context.getParameter(parameterName);
-
-            if (value == null)
-                return;
-
-            // The point parameter is not really used, unless the
-            // ImageButton is used for its original purpose (as a kind
-            // of image map).  In modern usage, we only care about
-            // whether the user clicked on the image (and thus submitted
-            // the form), not where in the image the user actually clicked.
-
-            IBinding pointBinding = getPointBinding();
-
-            if (pointBinding != null)
-            {
-                int x = Integer.parseInt(value);
-
-                parameterName = name + ".y";
-                value = context.getParameter(parameterName);
-
-                int y = Integer.parseInt(value);
-
-                pointBinding.setObject(new Point(x, y));
-            }
-
-            // Notify the application, by setting the select parameter
-            // to the tag parameter.
-
-            IBinding selectedBinding = getSelectedBinding();
-
-            if (selectedBinding != null)
-                selectedBinding.setObject(getTag());
-
-            IActionListener listener = getListener();
-
-            if (listener != null)
-                listener.actionTriggered(this, cycle);
-
-            return;
-        }
-
-        // Not rewinding, do the real render
-
-        boolean disabled = isDisabled();
-        IAsset disabledImage = getDisabledImage();
-
-        IAsset finalImage = (disabled && disabledImage != null) ? disabledImage : getImage();
-
-        String imageURL = finalImage.buildURL(cycle);
-
-        writer.beginEmpty("input");
-        writer.attribute("type", "image");
-        writer.attribute("name", name);
-
-        if (disabled)
-            writer.attribute("disabled", "disabled");
-
-        // NN4 places a border unless you tell it otherwise.
-        // IE ignores the border attribute and never shows a border.
-
-        writer.attribute("border", 0);
-
-        writer.attribute("src", imageURL);
-
-        renderInformalParameters(writer, cycle);
-
-        writer.closeTag();
-    }
-
-    public abstract boolean isDisabled();
-
-    public abstract IAsset getDisabledImage();
-
-    public abstract IAsset getImage();
-
-    public abstract IActionListener getListener();
-
-    public abstract Object getTag();
-
-    public abstract String getNameOverride();
-
-    protected void prepareForRender(IRequestCycle cycle)
-    {
-        super.prepareForRender(cycle);
-
-        if (getImage() == null)
-            throw Tapestry.createRequiredParameterException(this, "image");
-    }
-
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/form/ImageSubmit.jwc b/3.0.4/framework/src/org/apache/tapestry/form/ImageSubmit.jwc
deleted file mode 100644
index df5c8de..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/form/ImageSubmit.jwc
+++ /dev/null
@@ -1,86 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-  
-<component-specification class="org.apache.tapestry.form.ImageSubmit" allow-body="no">
-
-  <description>
-  Creates a clickable image within a form.
-  </description>
-
-  <parameter name="image" 
-  	type="org.apache.tapestry.IAsset" 
-  	required="yes"
-  	direction="in">
-  	<description>
-  	Image used for the button.
-  	</description>
-  </parameter>
-  	
-  <parameter name="name" 
-    property-name="nameOverride"
-  	type="java.lang.String"
-  	direction="in"/>
-  	
-  <parameter name="disabledImage" 
-  	type="org.apache.tapestry.IAsset"
-  	direction="in">
-  	<description>
-  	Image used for the button, if disabled.
-  	</description>
-  </parameter>
-  	
-  <parameter name="disabled"
-  	type="boolean"
-  	direction="in"/>
-  	
-  <parameter name="point" type="java.awt.Point"/>
-  
-  <parameter name="selected"
-  	type="java.lang.Object">
-  	<description>
-  	Property updated when the button is clicked.
-  	</description>
-  </parameter>
-  
-  <parameter name="tag" 
-  	type="java.lang.Object" 
-  	direction="in">
-  	<description>
-  	Value used when updating the selected parameter.
-  	</description>
-  </parameter>
-  
-  <parameter name="listener" 
-  	type="org.apache.tapestry.IActionListener"
-  	direction="in">
-  	<description>
-  	Notified when the button is clicked.
-  	</description>
-  </parameter>
-  
-  <reserved-parameter name="type"/>
-  <reserved-parameter name="src"/>
-  <reserved-parameter name="border"/>
-
-  <property-specification name="name" type="java.lang.String"/>
-  <property-specification name="form" type="org.apache.tapestry.IForm"/>
- 
-</component-specification>
diff --git a/3.0.4/framework/src/org/apache/tapestry/form/LinkSubmit.java b/3.0.4/framework/src/org/apache/tapestry/form/LinkSubmit.java
deleted file mode 100644
index bd5860b..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/form/LinkSubmit.java
+++ /dev/null
@@ -1,181 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.form;
-
-import org.apache.tapestry.ApplicationRuntimeException;
-import org.apache.tapestry.IActionListener;
-import org.apache.tapestry.IBinding;
-import org.apache.tapestry.IForm;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.html.Body;
-
-/**
- *  Implements a component that submits its enclosing form via a JavaScript link.
- * 
- *  [<a href="../../../../../ComponentReference/LinkSubmit.html">Component Reference</a>]
- *
- *  @author Richard Lewis-Shell
- *  @version $Id: Submit.java,v 1.6 2003/04/21 13:15:41 glongman Exp $
- * 
- **/
-
-public abstract class LinkSubmit extends AbstractFormComponent
-{
-    /**
-     *  The name of an {@link org.apache.tapestry.IRequestCycle} attribute in which the
-     *  current submit link is stored.  LinkSubmits do not nest.
-     *
-     **/
-
-    public static final String ATTRIBUTE_NAME = "org.apache.tapestry.form.LinkSubmit";
-
-    /**
-     * The name of an  {@link org.apache.tapestry.IRequestCycle} attribute in which the
-     * link submit component that generates the javascript function is stored.  The
-     * function is only required once per page (containing a form with a non-disabled
-     * LinkSubmit)
-     * 
-     **/
-    public static final String ATTRIBUTE_FUNCTION_NAME =
-        "org.apache.tapestry.form.LinkSubmit_function";
-
-    protected void renderComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-
-        IForm form = getForm(cycle);
-        String formName = form.getName();
-
-        boolean rewinding = form.isRewinding();
-
-        String name = form.getElementId(this);
-
-        IMarkupWriter wrappedWriter;
-
-        if (cycle.getAttribute(ATTRIBUTE_NAME) != null)
-            throw new ApplicationRuntimeException(
-                Tapestry.getMessage("LinkSubmit.may-not-nest"),
-                this,
-                null,
-                null);
-
-        cycle.setAttribute(ATTRIBUTE_NAME, this);
-
-        boolean disabled = isDisabled();
-        if (!disabled)
-        {
-            if (!rewinding)
-            {
-                Body body = Body.get(cycle);
-
-				if (body == null)
-				    throw new ApplicationRuntimeException(
-				        Tapestry.format("must-be-contained-by-body", "LinkSubmit"),
-				        this,
-				        null,
-				        null);
-				        				
-                // make sure the submit function is on the page (once)
-                if (cycle.getAttribute(ATTRIBUTE_FUNCTION_NAME) == null)
-                {
-                    body.addBodyScript(
-                        "function submitLink(form, elementId) { form._linkSubmit.value = elementId; if (form.onsubmit == null || form.onsubmit()) form.submit(); }");
-                    cycle.setAttribute(ATTRIBUTE_FUNCTION_NAME, this);
-                }
-
-                // one hidden field per form:
-                String formHiddenFieldAttributeName = ATTRIBUTE_FUNCTION_NAME + formName;
-                if (cycle.getAttribute(formHiddenFieldAttributeName) == null)
-                {
-                	body.addInitializationScript("document." + formName + "._linkSubmit.value = null;"); 
-                    writer.beginEmpty("input");
-                    writer.attribute("type", "hidden");
-                    writer.attribute("name", "_linkSubmit");
-                    cycle.setAttribute(formHiddenFieldAttributeName, this);
-                }
-            }
-            else
-            {
-                // How to know which Submit link was actually
-                // clicked?  When submitted, it sets its elementId into a hidden field
-
-                String value = cycle.getRequestContext().getParameter("_linkSubmit");
-
-                // If the value isn't the elementId of this component, then this link wasn't
-                // selected.
-
-                if (value != null && value.equals(name))
-                {
-                    IBinding selectedBinding = getSelectedBinding();
-                    if (selectedBinding != null)
-                        selectedBinding.setObject(getTag());
-                    IActionListener listener = getListener();
-                    if (listener != null)
-                        listener.actionTriggered(this, cycle);
-                }
-            }
-
-            writer.begin("a");
-            writer.attribute(
-                "href",
-                "javascript:submitLink(document." + formName + ",\"" + name + "\");");
-
-            // Allow the wrapped components a chance to render.
-            // Along the way, they may interact with this component
-            // and cause the name variable to get set.
-
-            wrappedWriter = writer.getNestedWriter();
-        }
-        else
-            wrappedWriter = writer;
-
-        renderBody(wrappedWriter, cycle);
-
-        if (!disabled)
-        {
-            // Generate additional attributes from informal parameters.
-
-            renderInformalParameters(writer, cycle);
-
-            // Dump in HTML provided by wrapped components
-
-            wrappedWriter.close();
-
-            // Close the <a> tag
-
-            writer.end();
-        }
-
-        cycle.removeAttribute(ATTRIBUTE_NAME);
-    }
-
-    public abstract boolean isDisabled();
-
-    public abstract void setDisabled(boolean disabled);
-
-    public abstract IActionListener getListener();
-
-    public abstract void setListener(IActionListener listener);
-
-    public abstract Object getTag();
-
-    public abstract void setTag(Object tag);
-
-    public abstract void setSelectedBinding(IBinding value);
-
-    public abstract IBinding getSelectedBinding();
-
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/form/LinkSubmit.jwc b/3.0.4/framework/src/org/apache/tapestry/form/LinkSubmit.jwc
deleted file mode 100644
index f41452b..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/form/LinkSubmit.jwc
+++ /dev/null
@@ -1,50 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>

-<!--

-   Copyright 2004 The Apache Software Foundation

-  

-   Licensed under the Apache License, Version 2.0 (the "License");

-   you may not use this file except in compliance with the License.

-   You may obtain a copy of the License at

-  

-       http://www.apache.org/licenses/LICENSE-2.0

-  

-   Unless required by applicable law or agreed to in writing, software

-   distributed under the License is distributed on an "AS IS" BASIS,

-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-   See the License for the specific language governing permissions and

-   limitations under the License.

--->

-<!-- $Id: Submit.jwc,v 1.2 2003/03/17 18:10:48 hlship Exp $ -->

-<!DOCTYPE component-specification PUBLIC 

-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 

-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">

-

-<component-specification class="org.apache.tapestry.form.LinkSubmit" allow-body="yes">

-

-  <description>

-  Creates a hyperlink that submits its enclosing form using JavaScript.

-  </description>

-

-  <parameter name="listener" 

-  	type="org.apache.tapestry.IActionListener" 

-  	direction="in">

-  	<description>

-	    The listener is invoked during the rewind as the link component is encountered.  This is

-	    both attractive and dangerous when combined with a form.  When the listener is

-	    invoked, the form has not completely rewound, so not all form values have necessarily

-	    been processed, so the listener might be performing its logic based on inconsistent

-	    data.

-  	</description>

-  </parameter>

-  	

-  <parameter name="disabled" type="boolean" direction="in"/>

-  <parameter name="selected"/>

-  <parameter name="tag" type="java.lang.Object" direction="in"/>

-

-  <reserved-parameter name="name"/>

-  <reserved-parameter name="href"/>

-

-  <property-specification name="name" type="java.lang.String"/>

-  <property-specification name="form" type="org.apache.tapestry.IForm"/>  

-  

-</component-specification>
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/form/ListEdit.java b/3.0.4/framework/src/org/apache/tapestry/form/ListEdit.java
deleted file mode 100644
index 2222752..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/form/ListEdit.java
+++ /dev/null
@@ -1,184 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.form;
-
-import java.io.IOException;
-import java.util.Iterator;
-
-import org.apache.tapestry.ApplicationRuntimeException;
-import org.apache.tapestry.IActionListener;
-import org.apache.tapestry.IBinding;
-import org.apache.tapestry.IForm;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.request.RequestContext;
-import org.apache.tapestry.util.io.DataSqueezer;
-
-/**
- *  A specialized component used to edit a list of items
- *  within a form; it is similar to a {@link org.apache.tapestry.components.Foreach} but leverages
- *  hidden inputs within the &lt;form&gt; to store the items in the list.
- *
- *  [<a href="../../../../../ComponentReference/ListEdit.html">Component Reference</a>]
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 1.0.2
- * 
- **/
-
-public abstract class ListEdit extends AbstractFormComponent
-{
-
-    protected void renderComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        Iterator i = null;
-
-        IForm form = getForm(cycle);
-
-        boolean cycleRewinding = cycle.isRewinding();
-
-        // If the cycle is rewinding, but not this particular form,
-        // then do nothing (don't even render the body).
-
-        if (cycleRewinding && !form.isRewinding())
-            return;
-
-        String name = form.getElementId(this);
-
-        if (!cycleRewinding)
-        {
-            i = Tapestry.coerceToIterator(getSourceBinding().getObject());
-        }
-        else
-        {
-            RequestContext context = cycle.getRequestContext();
-            String[] submittedValues = context.getParameters(name);
-
-            i = Tapestry.coerceToIterator(submittedValues);
-        }
-
-        // If the source (when rendering), or the submitted values (on submit)
-        // are null, then skip the remainder (nothing to update, nothing to
-        // render).
-
-        if (i == null)
-            return;
-
-        int index = 0;
-
-        IBinding indexBinding = getIndexBinding();
-        IBinding valueBinding = getValueBinding();
-        IActionListener listener = getListener();
-        String element = getElement();
-
-        while (i.hasNext())
-        {
-            Object value = null;
-
-            if (indexBinding != null)
-                indexBinding.setInt(index++);
-
-            if (cycleRewinding)
-                value = convertValue((String) i.next());
-            else
-            {
-                value = i.next();
-                writeValue(form, name, value);
-            }
-
-            valueBinding.setObject(value);
-
-            if (listener != null)
-                listener.actionTriggered(this, cycle);
-
-            if (element != null)
-            {
-                writer.begin(element);
-                renderInformalParameters(writer, cycle);
-            }
-
-            renderBody(writer, cycle);
-
-            if (element != null)
-                writer.end();
-
-        }
-    }
-
-    private void writeValue(IForm form, String name, Object value)
-    {
-        String externalValue;
-
-        try
-        {
-            externalValue = getDataSqueezer().squeeze(value);
-        }
-        catch (IOException ex)
-        {
-            throw new ApplicationRuntimeException(
-                Tapestry.format("ListEdit.unable-to-convert-value", value),
-                this,
-                null,
-                ex);
-        }
-
-        form.addHiddenValue(name, externalValue);
-    }
-
-    private Object convertValue(String value)
-    {
-        try
-        {
-            return getDataSqueezer().unsqueeze(value);
-        }
-        catch (IOException ex)
-        {
-            throw new ApplicationRuntimeException(
-                Tapestry.format("ListEdit.unable-to-convert-string", value),
-                this,
-                null,
-                ex);
-        }
-    }
-
-    public abstract String getElement();
-
-    private DataSqueezer getDataSqueezer()
-    {
-        return getPage().getEngine().getDataSqueezer();
-    }
-
-    /** @since 2.2 **/
-
-    public abstract IActionListener getListener();
-
-    /** @since 3.0 **/
-
-    public abstract IBinding getSourceBinding();
-
-    public abstract IBinding getValueBinding();
-
-    public abstract IBinding getIndexBinding();
-
-    /** @since 3.0 **/
-
-    public boolean isDisabled()
-    {
-        return false;
-    }
-
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/form/ListEdit.jwc b/3.0.4/framework/src/org/apache/tapestry/form/ListEdit.jwc
deleted file mode 100644
index 4a03c43..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/form/ListEdit.jwc
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-  
-<component-specification allow-body="yes" allow-informal-parameters="yes"
-	class="org.apache.tapestry.form.ListEdit">
-	
-  <description>
-  A looping component, like Foreach, which works well in a form
-  because it stores each element as a hidden field.
-  </description>
-	
-  <parameter name="source" required="yes" type="java.lang.Object"/>
-  
-  <parameter name="listener" type="org.apache.tapestry.IActionListener" direction="in"/>
-  
-  <parameter name="value" required="yes" type="java.lang.Object"/>
-  
-  <parameter name="index" type="int"/>
-  
-  <parameter name="element" type="java.lang.String" direction="in"/>
-
-  <property-specification name="name" type="java.lang.String"/>
-  <property-specification name="form" type="org.apache.tapestry.IForm"/>
-  
-</component-specification>
-
-
diff --git a/3.0.4/framework/src/org/apache/tapestry/form/ListEditMap.java b/3.0.4/framework/src/org/apache/tapestry/form/ListEditMap.java
deleted file mode 100644
index 8befa71..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/form/ListEditMap.java
+++ /dev/null
@@ -1,271 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.form;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import org.apache.tapestry.Tapestry;
-
-/**
- * A utility class often used with the {@link org.apache.tapestry.form.ListEdit}component. A
- * ListEditMap is loaded with data objects before the ListEdit renders, and again before the
- * ListEdit rewinds. This streamlines the synchronization of the form against data on the server. It
- * is most useful when the set of objects is of a manageable size (say, no more than a few hundred
- * objects).
- * <p>
- * The map stores a list of keys, and relates each key to a value. It also tracks a deleted flag for
- * each key.
- * <p>
- * Usage: <br>
- * The page or component should implement {@link org.apache.tapestry.event.PageRenderListener}and
- * implement
- * {@link org.apache.tapestry.event.PageRenderListener#pageBeginRender(org.apache.tapestry.event.PageEvent)}
- * to initialize the map.
- * <p>
- * The external data (from which keys and values are obtained) is queried, and each key/value pair
- * is {@link #add(Object, Object) added}to the map, in the order that items should be presented.
- * <p>
- * The {@link org.apache.tapestry.form.ListEdit}'s source parameter should be bound to the map's
- * {@link #getKeys() keys}property. The value parameter should be bound to the map's
- * {@link #setKey(Object) key}property.
- * <p>
- * The {@link org.apache.tapestry.form.ListEdit}'s listener parameter should be bound to a listener
- * method to synchronize a property of the component from the map.
- * 
- * <pre><code>
- * 
- *  
- *   
- *     public void synchronize({@link org.apache.tapestry.IRequestCycle} cycle)
- *     {
- *        ListEditMap map = ...;
- *        &lt;i&gt;Type&lt;/i&gt; object = (&lt;i&gt;Type&lt;/i&gt;)map.getValue();
- *    
- *        if (object == null)
- *          ...
- *    
- *        set&lt;i&gt;Property&lt;/i&gt;(object);
- *     }
- *     
- *   
- *  
- * </code></pre>
- * 
- * <p>
- * You may also connect a {@link org.apache.tapestry.form.Checkbox}'s selected parameter to the
- * map's {@link #isDeleted() deleted}property.
- * <p>
- * You may track inclusion in other sets by subclasses and implementing new boolean properties. The
- * accessor method should be a call to {@link #checkSet(Set)}and the mutator method should be a
- * call to {@link #updateSet(Set, boolean)}.
- * 
- * @author Howard Lewis Ship
- * @since 3.0
- */
-
-public class ListEditMap
-{
-    private Map _map = new HashMap();
-
-    private List _keys = new ArrayList();
-
-    private Set _deletedKeys;
-
-    private Object _currentKey;
-
-    /**
-     * Records the key and value into this map. The keys may be obtained, in the order in which they
-     * are added, using {@link #getKeys()}. This also sets the current key (so that you may invoke
-     * {@link #setDeleted(boolean)}, for example).
-     */
-
-    public void add(Object key, Object value)
-    {
-        _currentKey = key;
-
-        _keys.add(_currentKey);
-        _map.put(_currentKey, value);
-    }
-
-    /**
-     * Returns a List of keys, in the order that keys were added to the map (using
-     * {@link #add(Object, Object)}. The caller must not modify the List.
-     */
-
-    public List getKeys()
-    {
-        return _keys;
-    }
-
-    /**
-     * Sets the key for the map. This defines the key used with the other methods:
-     * {@link #getValue()},{@link #isDeleted()},{@link #setDeleted(boolean)}.
-     */
-
-    public void setKey(Object key)
-    {
-        _currentKey = key;
-    }
-
-    /**
-     * Returns the current key within the map.
-     */
-
-    public Object getKey()
-    {
-        return _currentKey;
-    }
-
-    /**
-     * Returns the value for the key (set using {@link #setKey(Object)}). May return null if no
-     * such key has been added (this can occur if a data object is deleted between the time a form
-     * is rendered and the time a form is submitted).
-     */
-
-    public Object getValue()
-    {
-        return _map.get(_currentKey);
-    }
-
-    /**
-     * Returns true if the {@link #setKey(Object) current key}is in the set of deleted keys.
-     */
-
-    public boolean isDeleted()
-    {
-        return checkSet(_deletedKeys);
-    }
-
-    /**
-     * Returns true if the set contains the {@link #getKey() current key}. Returns false is the set
-     * is null, or doesn't contain the current key.
-     */
-
-    protected boolean checkSet(Set set)
-    {
-        if (set == null)
-            return false;
-
-        return set.contains(_currentKey);
-    }
-
-    /**
-     * Adds or removes the {@link #setKey(Object) current key}from the set of deleted keys.
-     */
-
-    public void setDeleted(boolean value)
-    {
-        _deletedKeys = updateSet(_deletedKeys, value);
-    }
-
-    /**
-     * Updates the set, adding or removing the {@link #getKey() current key}from it. Returns the
-     * set passed in. If the value is true and the set is null, an new instance of {@link HashSet}
-     * is created and returned.
-     */
-
-    protected Set updateSet(Set set, boolean value)
-    {
-        if (value)
-        {
-            if (set == null)
-                set = new HashSet();
-
-            set.add(_currentKey);
-        }
-        else
-        {
-            if (set != null)
-                set.remove(_currentKey);
-        }
-
-        return set;
-    }
-
-    /**
-     * Returns the deleted keys in an unspecified order. May return an empty list.
-     */
-
-    public List getDeletedKeys()
-    {
-        return convertSetToList(_deletedKeys);
-    }
-
-    protected List convertSetToList(Set set)
-    {
-        if (Tapestry.isEmpty(set))
-            return Collections.EMPTY_LIST;
-
-        return new ArrayList(set);
-    }
-
-    /**
-     * Returns all the values stored in the map, in the order in which values were added to the map
-     * using {@link #add(Object, Object)}.
-     */
-
-    public List getAllValues()
-    {
-        int count = _keys.size();
-        List result = new ArrayList(count);
-
-        for (int i = 0; i < count; i++)
-        {
-            Object key = _keys.get(i);
-            Object value = _map.get(key);
-
-            result.add(value);
-        }
-
-        return result;
-    }
-
-    /**
-     * Returns all the values stored in the map, excluding those whose id has been marked deleted,
-     * in the order in which values were added to the map using {@link #add(Object, Object)}.
-     */
-
-    public List getValues()
-    {
-        int deletedCount = Tapestry.size(_deletedKeys);
-
-        if (deletedCount == 0)
-            return getAllValues();
-
-        int count = _keys.size();
-
-        List result = new ArrayList(count - deletedCount);
-
-        for (int i = 0; i < count; i++)
-        {
-            Object key = _keys.get(i);
-
-            if (_deletedKeys.contains(key))
-                continue;
-
-            Object value = _map.get(key);
-            result.add(value);
-        }
-
-        return result;
-    }
-
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/form/Option.java b/3.0.4/framework/src/org/apache/tapestry/form/Option.java
deleted file mode 100644
index 0959e3e..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/form/Option.java
+++ /dev/null
@@ -1,97 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.form;
-
-import org.apache.tapestry.AbstractComponent;
-import org.apache.tapestry.ApplicationRuntimeException;
-import org.apache.tapestry.IBinding;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.Tapestry;
-
-/**
- *  A component that renders an HTML &lt;option&gt; form element.
- *  Such a component must be wrapped (possibly indirectly)
- *  inside a {@link Select} component.
- *
- *  [<a href="../../../../../ComponentReference/Option.html">Component Reference</a>]
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- * 
- **/
-
-public abstract class Option extends AbstractComponent
-{
-    /**
-     *  Renders the &lt;option&gt; element, or responds when the form containing the element 
-     *  is submitted (by checking {@link Form#isRewinding()}.
-     *
-     *  <p>If the <code>label</code> property is set, it is inserted inside the
-     *  &lt;option&gt; element.
-     *
-     **/
-
-    protected void renderComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        Select select = Select.get(cycle);
-        if (select == null)
-            throw new ApplicationRuntimeException(
-                Tapestry.getMessage("Option.must-be-contained-by-select"),
-                this,
-                null,
-                null);
-
-        // It isn't enough to know whether the cycle in general is rewinding, need to know
-        // specifically if the form which contains this component is rewinding.
-
-        boolean rewinding = select.isRewinding();
-
-        String value = select.getNextOptionId();
-
-        if (rewinding)
-        {
-            if (!select.isDisabled())
-                getSelectedBinding().setBoolean(select.isSelected(value));
-
-            renderBody(writer, cycle);
-        }
-        else
-        {
-            writer.begin("option");
-
-            writer.attribute("value", value);
-
-            if (getSelectedBinding().getBoolean())
-                writer.attribute("selected", "selected");
-
-            renderInformalParameters(writer, cycle);
-
-            String label = getLabel();
-
-            if (label != null)
-                writer.print(label);
-
-            renderBody(writer, cycle);
-
-            writer.end();
-        }
-
-    }
-
-    public abstract IBinding getSelectedBinding();
-
-    public abstract String getLabel();
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/form/Option.jwc b/3.0.4/framework/src/org/apache/tapestry/form/Option.jwc
deleted file mode 100644
index 06040e4..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/form/Option.jwc
+++ /dev/null
@@ -1,33 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<component-specification class="org.apache.tapestry.form.Option" allow-body="yes">
-
-  <description>
-  A single option within a Select.
-  </description>
-  
-  <parameter name="selected" type="java.lang.Boolean" required="yes"/>  
-  <parameter name="label" type="java.lang.String" direction="in"/>
-  
-  <reserved-parameter name="value"/>
-  
-</component-specification>
diff --git a/3.0.4/framework/src/org/apache/tapestry/form/PropertySelection.java b/3.0.4/framework/src/org/apache/tapestry/form/PropertySelection.java
deleted file mode 100644
index fb19c52..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/form/PropertySelection.java
+++ /dev/null
@@ -1,248 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.form;
-
-import org.apache.tapestry.IForm;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.Tapestry;
-
-/**
- *  A component used to render a drop-down list of options that
- *  the user may select.
- * 
- *  [<a href="../../../../../ComponentReference/PropertySelection.html">Component Reference</a>]
- *
- *  <p>Earlier versions of PropertySelection (through release 2.2)
- *  were more flexible, they included a <b>renderer</b> property
- *  that controlled how the selection was rendered.  Ultimately,
- *  this proved of little value and this portion of
- *  functionality was deprecated in 2.3 and will be removed in 2.3.
- * 
- *  <p>Typically, the values available to be selected
- *  are defined using an {@link org.apache.commons.lang.enum.Enum}.
- *  A PropertySelection is dependent on
- *  an {@link IPropertySelectionModel} to provide the list of possible values.
- *
- *  <p>Often, this is used to select a particular 
- *  {@link org.apache.commons.lang.enum.Enum} to assign to a property; the
- *  {@link EnumPropertySelectionModel} class simplifies this.
- *
- *
- *  @version $Id$
- *  @author Howard Lewis Ship
- *
- **/
-
-public abstract class PropertySelection extends AbstractFormComponent
-{
-    /**
-     *  A shared instance of {@link SelectPropertySelectionRenderer}.
-     *
-     * 
-     **/
-
-    public static final IPropertySelectionRenderer DEFAULT_SELECT_RENDERER =
-        new SelectPropertySelectionRenderer();
-
-    /**
-     *  A shared instance of {@link RadioPropertySelectionRenderer}.
-     *
-     * 
-     **/
-
-    public static final IPropertySelectionRenderer DEFAULT_RADIO_RENDERER =
-        new RadioPropertySelectionRenderer();
-
-    /**
-     *  Renders the component, much of which is the responsiblity
-     *  of the {@link IPropertySelectionRenderer renderer}.  The possible options,
-     *  thier labels, and the values to be encoded in the form are provided
-     *  by the {@link IPropertySelectionModel model}.
-     *
-     **/
-
-    protected void renderComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        IForm form = getForm(cycle);
-
-        boolean rewinding = form.isRewinding();
-
-        String name = form.getElementId(this);
-
-        if (rewinding)
-        {
-            // If disabled, ignore anything that comes up from the client.
-
-            if (isDisabled())
-                return;
-
-            String optionValue = cycle.getRequestContext().getParameter(name);
-
-            Object value = (optionValue == null) ? null : getModel().translateValue(optionValue);
-
-            setValue(value);
-
-            return;
-        }
-
-        IPropertySelectionRenderer renderer = getRenderer();
-
-        if (renderer != null)
-        {
-            renderWithRenderer(writer, cycle, renderer);
-            return;
-        }
-
-        writer.begin("select");
-        writer.attribute("name", name);
-
-        if (isDisabled())
-            writer.attribute("disabled", "disabled");
-
-        if (getSubmitOnChange())
-            writer.attribute("onchange", "javascript:this.form.submit();");
-
-        // Apply informal attributes.
-
-        renderInformalParameters(writer, cycle);
-
-        writer.println();
-
-        IPropertySelectionModel model = getModel();
-
-        if (model == null)
-            throw Tapestry.createRequiredParameterException(this, "model");
-
-        int count = model.getOptionCount();
-        boolean foundSelected = false;
-        boolean selected = false;
-        Object value = getValue();
-
-        for (int i = 0; i < count; i++)
-        {
-            Object option = model.getOption(i);
-
-            if (!foundSelected)
-            {
-                selected = isEqual(option, value);
-                if (selected)
-                    foundSelected = true;
-            }
-
-            writer.begin("option");
-            writer.attribute("value", model.getValue(i));
-
-            if (selected)
-                writer.attribute("selected", "selected");
-
-            writer.print(model.getLabel(i));
-
-            writer.end();
-
-            writer.println();
-
-            selected = false;
-        }
-
-        writer.end(); // <select>
-
-    }
-
-    /**
-     *  Renders the property selection using a {@link IPropertySelectionRenderer}.
-     *  Support for this will be removed in 2.3.
-     * 
-     **/
-
-    private void renderWithRenderer(
-        IMarkupWriter writer,
-        IRequestCycle cycle,
-        IPropertySelectionRenderer renderer)
-    {
-        renderer.beginRender(this, writer, cycle);
-
-        IPropertySelectionModel model = getModel();
-
-        int count = model.getOptionCount();
-
-        boolean foundSelected = false;
-        boolean selected = false;
-
-        Object value = getValue();
-
-        for (int i = 0; i < count; i++)
-        {
-            Object option = model.getOption(i);
-
-            if (!foundSelected)
-            {
-                selected = isEqual(option, value);
-                if (selected)
-                    foundSelected = true;
-            }
-
-            renderer.renderOption(this, writer, cycle, model, option, i, selected);
-
-            selected = false;
-        }
-
-        // A PropertySelection doesn't allow a body, so no need to worry about
-        // wrapped components.
-
-        renderer.endRender(this, writer, cycle);
-    }
-
-    private boolean isEqual(Object left, Object right)
-    {
-        // Both null, or same object, then are equal
-
-        if (left == right)
-            return true;
-
-        // If one is null, the other isn't, then not equal.
-
-        if (left == null || right == null)
-            return false;
-
-        // Both non-null; use standard comparison.
-
-        return left.equals(right);
-    }
-
-    public abstract IPropertySelectionModel getModel();
-
-    public abstract IPropertySelectionRenderer getRenderer();
-
-    /** @since 2.2 **/
-
-    public abstract boolean getSubmitOnChange();
-
-    /** @since 2.2 **/
-
-    public abstract Object getValue();
-
-    /** @since 2.2 **/
-
-    public abstract void setValue(Object value);
-
-    /**
-     *  Returns true if this PropertySelection's disabled parameter yields true.
-     *  The corresponding HTML control(s) should be disabled.
-     **/
-
-    public abstract boolean isDisabled();
-
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/form/PropertySelection.jwc b/3.0.4/framework/src/org/apache/tapestry/form/PropertySelection.jwc
deleted file mode 100644
index 4a88edc..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/form/PropertySelection.jwc
+++ /dev/null
@@ -1,62 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-  
-<component-specification class="org.apache.tapestry.form.PropertySelection" 
-	allow-body="no" 
-	allow-informal-parameters="yes">
-  
-  <description>
-  Creates an HTML select to choose a single property from a list of options.
-  </description>
-  
-  <parameter name="value" required="yes" type="java.lang.Object" direction="form"/>
-  
-  <parameter name="model" 
-  	type="org.apache.tapestry.form.IPropertySelectionModel" 
-  	required="yes"
-  	direction="in"/>
-  	
-  <parameter name="disabled"
-  	type="boolean"
-  	direction="in"/>
-  	
-  <parameter name="renderer" 
-  	type="org.apache.tapestry.form.IPropertySelectionRenderer"
-  	direction="in">
-  	<description>
-	An alternate rendered for the property selection.
-  	</description>
-  </parameter>
-  
-  <parameter name="submitOnChange"
-  	type="boolean"
-  	direction="in">
-  	<description>
-  	Enables logic to submit containing form when value changes.
-  	</description>
-  </parameter>
-  	
-  <reserved-parameter name="name"/>
-
-  <property-specification name="name" type="java.lang.String"/>
-  <property-specification name="form" type="org.apache.tapestry.IForm"/>
-    
-</component-specification>
diff --git a/3.0.4/framework/src/org/apache/tapestry/form/Radio.java b/3.0.4/framework/src/org/apache/tapestry/form/Radio.java
deleted file mode 100644
index 120be4a..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/form/Radio.java
+++ /dev/null
@@ -1,105 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.form;
-
-import org.apache.tapestry.AbstractComponent;
-import org.apache.tapestry.ApplicationRuntimeException;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.Tapestry;
-
-/**
- *  Implements a component that manages an HTML &lt;input type=radio&gt; form element.
- *  Such a component must be wrapped (possibly indirectly)
- *  inside a {@link RadioGroup} component.
- *
- *  [<a href="../../../../../ComponentReference/Radio.html">Component Reference</a>]
- *
- * 
- *  <p>{@link Radio} and {@link RadioGroup} are generally not used (except
- *  for very special cases).  Instead, a {@link PropertySelection} component is used.
- *
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- * 
- **/
-
-public abstract class Radio extends AbstractComponent
-{
-    /**
-     *  Renders the form element, or responds when the form containing the element
-     *  is submitted (by checking {@link Form#isRewinding()}.
-     *
-     *
-     **/
-
-    protected void renderComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-
-        RadioGroup group = RadioGroup.get(cycle);
-        if (group == null)
-            throw new ApplicationRuntimeException(
-                Tapestry.getMessage("Radio.must-be-contained-by-group"),
-                this,
-                null,
-                null);
-
-        // The group determines rewinding from the form.
-
-        boolean rewinding = group.isRewinding();
-
-        int option = group.getNextOptionId();
-
-        if (rewinding)
-        {
-            // If not disabled and this is the selected button within the radio group,
-            // then update set the selection from the group to the value for this
-            // radio button.  This will update the selected parameter of the RadioGroup.
-
-            if (!isDisabled() && !group.isDisabled() && group.isSelected(option))
-                group.updateSelection(getValue());
-            return;
-        }
-
-        writer.beginEmpty("input");
-
-        writer.attribute("type", "radio");
-
-        writer.attribute("name", group.getName());
-
-        // As the group if the value for this Radio matches the selection
-        // for the group as a whole; if so this is the default radio and is checked.
-
-        if (group.isSelection(getValue()))
-            writer.attribute("checked", "checked");
-
-        if (isDisabled() || group.isDisabled())
-            writer.attribute("disabled", "disabled");
-
-        // The value for the Radio matches the option number (provided by the RadioGroup).
-        // When the form is submitted, the RadioGroup will know which option was,
-        // in fact, selected by the user.
-
-        writer.attribute("value", option);
-
-        renderInformalParameters(writer, cycle);
-
-    }
-
-    public abstract boolean isDisabled();
-
-    public abstract Object getValue();
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/form/Radio.jwc b/3.0.4/framework/src/org/apache/tapestry/form/Radio.jwc
deleted file mode 100644
index 5785794..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/form/Radio.jwc
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-  
-<component-specification class="org.apache.tapestry.form.Radio" allow-body="no">
-
-  <description>
-  A single possible selection within a RadioGroup.
-  </description>
-  
-  <parameter name="value" type="java.lang.Object" direction="in"/>
-  
-  <parameter name="disabled" type="boolean" direction="in"/>
-  
-  <reserved-parameter name="checked"/>
-  <reserved-parameter name="type"/>
-  <reserved-parameter name="name"/>
-  
-</component-specification>
diff --git a/3.0.4/framework/src/org/apache/tapestry/form/RadioGroup.java b/3.0.4/framework/src/org/apache/tapestry/form/RadioGroup.java
deleted file mode 100644
index ca441ac..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/form/RadioGroup.java
+++ /dev/null
@@ -1,196 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.form;
-
-import org.apache.tapestry.ApplicationRuntimeException;
-import org.apache.tapestry.IBinding;
-import org.apache.tapestry.IForm;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.Tapestry;
-
-/**
- *  A special type of form component that is used to contain {@link Radio}
- *  components.  The Radio and {@link Radio} group components work together to
- *  update a property of some other object, much like a more flexible
- *  version of a {@link PropertySelection}.
- *
- *  [<a href="../../../../../ComponentReference/RadioGroup.html">Component Reference</a>]
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- * 
- **/
-
-public abstract class RadioGroup extends AbstractFormComponent
-{
-    // Cached copy of the value from the selectedBinding
-    private Object _selection;
-
-    // The value from the HTTP request indicating which
-    // Radio was selected by the user.
-    private int _selectedOption;
-
-    private boolean _rewinding;
-    private boolean _rendering;
-    private int _nextOptionId;
-
-    /**
-     *  A <code>RadioGroup</code> places itself into the {@link IRequestCycle} as
-     *  an attribute, so that its wrapped {@link Radio} components can identify thier
-     *  state.
-     *
-     **/
-
-    private static final String ATTRIBUTE_NAME = "org.apache.tapestry.active.RadioGroup";
-
-    public static RadioGroup get(IRequestCycle cycle)
-    {
-        return (RadioGroup) cycle.getAttribute(ATTRIBUTE_NAME);
-    }
-
-    public abstract IBinding getSelectedBinding();
-
-    public int getNextOptionId()
-    {
-        if (!_rendering)
-            throw Tapestry.createRenderOnlyPropertyException(this, "nextOptionId");
-
-        return _nextOptionId++;
-    }
-
-    /**
-     *  Used by {@link Radio} components wrapped by this <code>RadioGroup</code> to see
-     *  if the group as a whole is disabled.
-     *
-     **/
-
-    public abstract boolean isDisabled();
-
-    public boolean isRewinding()
-    {
-        if (!_rendering)
-            throw Tapestry.createRenderOnlyPropertyException(this, "rewinding");
-
-        return _rewinding;
-    }
-
-    /**
-     *  Returns true if the value is equal to the current selection for the
-     *  group.  This is invoked by a {@link Radio} during rendering
-     *  to determine if it should be marked 'checked'.
-     *
-     **/
-
-    public boolean isSelection(Object value)
-    {
-        if (!_rendering)
-            throw Tapestry.createRenderOnlyPropertyException(this, "selection");
-
-        if (_selection == value)
-            return true;
-
-        if (_selection == null || value == null)
-            return false;
-
-        return _selection.equals(value);
-    }
-
-    /**
-    *  Invoked by the {@link Radio} which is selected to update the 
-    *  property bound to the selected parameter.
-    *
-    **/
-
-    public void updateSelection(Object value)
-    {
-        getSelectedBinding().setObject(value);
-    }
-
-    /**
-    *  Used by {@link Radio} components when rewinding to see if their value was submitted.
-    *
-    **/
-
-    public boolean isSelected(int option)
-    {
-        return _selectedOption == option;
-    }
-
-    /**
-     * Doesn't actual render an HTML element as there is no direct equivalent for
-     * an HTML element.  A <code>RadioGroup</code> component exists to organize the
-     * {@link Radio} components it wraps (directly or indirectly).
-     *
-     * A {@link Radio} can finds its {@link RadioGroup} as a {@link IRequestCycle} attribute.
-     *
-     **/
-
-    protected void renderComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        IForm form = getForm(cycle);
-
-        if (cycle.getAttribute(ATTRIBUTE_NAME) != null)
-            throw new ApplicationRuntimeException(
-                Tapestry.getMessage("RadioGroup.may-not-nest"),
-                this,
-                null,
-                null);
-
-        // It isn't enough to know whether the cycle in general is rewinding, need to know
-        // specifically if the form which contains this component is rewinding.
-
-        _rewinding = form.isRewinding();
-
-        // Used whether rewinding or not.
-
-        String name = form.getElementId(this);
-
-        cycle.setAttribute(ATTRIBUTE_NAME, this);
-
-        // When rewinding, find out which (if any) radio was selected by
-        // the user.
-
-        if (_rewinding)
-        {
-            String value = cycle.getRequestContext().getParameter(name);
-            if (value == null)
-                _selectedOption = -1;
-            else
-                _selectedOption = Integer.parseInt(value);
-        }
-
-        try
-        {
-            _rendering = true;
-            _nextOptionId = 0;
-
-            // For rendering, the Radio components need to know what the current
-            // selection is, so that the correct one can mark itself 'checked'.
-
-            if (!_rewinding)
-                _selection = getSelectedBinding().getObject();
-
-            renderBody(writer, cycle);
-        }
-        finally
-        {
-            _rendering = false;
-            _selection = null;
-        }
-
-        cycle.removeAttribute(ATTRIBUTE_NAME);
-    }
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/form/RadioGroup.jwc b/3.0.4/framework/src/org/apache/tapestry/form/RadioGroup.jwc
deleted file mode 100644
index 2f3f6dd..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/form/RadioGroup.jwc
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-  
-<component-specification class="org.apache.tapestry.form.RadioGroup" allow-informal-parameters="no">
-
-  <description>
-  Groups together a number of Radio components.
-  </description>
-  
-  <parameter name="selected" required="yes"/>
-  
-  <parameter name="disabled" type="boolean" direction="in"/>
-  
-  <property-specification name="name" type="java.lang.String"/>
-  <property-specification name="form" type="org.apache.tapestry.IForm"/>
-  
-</component-specification>
diff --git a/3.0.4/framework/src/org/apache/tapestry/form/RadioPropertySelectionRenderer.java b/3.0.4/framework/src/org/apache/tapestry/form/RadioPropertySelectionRenderer.java
deleted file mode 100644
index 8eb27a2..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/form/RadioPropertySelectionRenderer.java
+++ /dev/null
@@ -1,95 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.form;
-
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-
-/**
- *  Implementation of {@link IPropertySelectionRenderer} that
- *  produces a table of radio (&lt;input type=radio&gt;) elements.
- *
- *  @version $Id$
- *  @author Howard Lewis Ship
- *
- **/
-
-public class RadioPropertySelectionRenderer implements IPropertySelectionRenderer
-{
-
-    /**
-     *  Writes the &lt;table&gt; element.
-     *
-     **/
-
-    public void beginRender(PropertySelection component, IMarkupWriter writer, IRequestCycle cycle)
-    {
-        writer.begin("table");
-        writer.attribute("border", 0);
-        writer.attribute("cellpadding", 0);
-        writer.attribute("cellspacing", 2);
-    }
-
-    /**
-     *  Closes the &lt;table&gt; element.
-     *
-     **/
-
-    public void endRender(PropertySelection component, IMarkupWriter writer, IRequestCycle cycle)
-    {
-        writer.end(); // <table>
-    }
-
-    /**
-     *  Writes a row of the table.  The table contains two cells; the first is the radio
-     *  button, the second is the label for the radio button.
-     *
-     **/
-
-    public void renderOption(
-        PropertySelection component,
-        IMarkupWriter writer,
-        IRequestCycle cycle,
-        IPropertySelectionModel model,
-        Object option,
-        int index,
-        boolean selected)
-    {
-        writer.begin("tr");
-        writer.begin("td");
-
-        writer.beginEmpty("input");
-        writer.attribute("type", "radio");
-        writer.attribute("name", component.getName());
-        writer.attribute("value", model.getValue(index));
-
-        if (component.isDisabled())
-            writer.attribute("disabled", "disabled");
-
-        if (selected)
-            writer.attribute("checked", "checked");
-
-        writer.end(); // <td>
-
-        writer.println();
-
-        writer.begin("td");
-        writer.print(model.getLabel(index));
-        writer.end(); // <td>
-        writer.end(); // <tr>	
-
-        writer.println();
-    }
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/form/Select.java b/3.0.4/framework/src/org/apache/tapestry/form/Select.java
deleted file mode 100644
index fe2bedf..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/form/Select.java
+++ /dev/null
@@ -1,187 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.form;
-
-import java.util.HashSet;
-import java.util.Set;
-
-import org.apache.tapestry.ApplicationRuntimeException;
-import org.apache.tapestry.IForm;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.request.RequestContext;
-
-/**
- *  Implements a component that manages an HTML &lt;select&gt; form element.
- *  The most common situation, using a &lt;select&gt; to set a specific
- *  property of some object, is best handled using a {@link PropertySelection} component.
- *
- *  [<a href="../../../../../ComponentReference/Select.html">Component Reference</a>]
- * 
- *  <p>Otherwise, this component is very similar to {@link RadioGroup}.
- *
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- * 
- **/
-
-public abstract class Select extends AbstractFormComponent
-{
-    private boolean _rewinding;
-    private boolean _rendering;
-
-    private Set _selections;
-    private int _nextOptionId;
-
-    /**
-     *  Used by the <code>Select</code> to record itself as a
-     *  {@link IRequestCycle} attribute, so that the
-     *  {@link Option} components it wraps can have access to it.
-     *
-     **/
-
-    private final static String ATTRIBUTE_NAME = "org.apache.tapestry.active.Select";
-
-    public static Select get(IRequestCycle cycle)
-    {
-        return (Select) cycle.getAttribute(ATTRIBUTE_NAME);
-    }
-
-    public abstract boolean isDisabled();
-
-    public abstract boolean isMultiple();
-
-    public boolean isRewinding()
-    {
-        if (!_rendering)
-            throw Tapestry.createRenderOnlyPropertyException(this, "rewinding");
-
-        return _rewinding;
-    }
-
-    public String getNextOptionId()
-    {
-        if (!_rendering)
-            throw Tapestry.createRenderOnlyPropertyException(this, "nextOptionId");
-
-        // Return it as a hex value.
-
-        return Integer.toString(_nextOptionId++);
-    }
-
-    public boolean isSelected(String value)
-    {
-        if (_selections == null)
-            return false;
-
-        return _selections.contains(value);
-    }
-
-    /**
-     *  Renders the &lt;option&gt; element, or responds when the form containing the element
-     *  is submitted (by checking {@link IForm#isRewinding()}.
-     **/
-
-    protected void renderComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        IForm form = getForm(cycle);
-
-        if (cycle.getAttribute(ATTRIBUTE_NAME) != null)
-            throw new ApplicationRuntimeException(
-                Tapestry.getMessage("Select.may-not-nest"),
-                this,
-                null,
-                null);
-
-        // It isn't enough to know whether the cycle in general is rewinding, need to know
-        // specifically if the form which contains this component is rewinding.
-
-        _rewinding = form.isRewinding();
-
-        // Used whether rewinding or not.
-
-        String name = form.getElementId(this);
-
-        cycle.setAttribute(ATTRIBUTE_NAME, this);
-
-        if (_rewinding)
-        {
-            _selections = buildSelections(cycle, name);
-        }
-        else
-        {
-            writer.begin("select");
-
-            writer.attribute("name", name);
-
-            if (isMultiple())
-                writer.attribute("multiple", "multiple");
-
-            if (isDisabled())
-                writer.attribute("disabled", "disabled");
-
-            renderInformalParameters(writer, cycle);
-        }
-
-        _rendering = true;
-        _nextOptionId = 0;
-
-        renderBody(writer, cycle);
-
-        if (!_rewinding)
-        {
-            writer.end();
-        }
-
-        cycle.removeAttribute(ATTRIBUTE_NAME);
-
-    }
-
-    protected void cleanupAfterRender(IRequestCycle cycle)
-    {
-        _rendering = false;
-        _selections = null;
-
-        super.cleanupAfterRender(cycle);
-    }
-
-    /**
-     *  Cut-and-paste with {@link RadioGroup}!
-     *
-     **/
-
-    private Set buildSelections(IRequestCycle cycle, String parameterName)
-    {
-        RequestContext context = cycle.getRequestContext();
-
-        String[] parameters = context.getParameters(parameterName);
-
-        if (parameters == null)
-            return null;
-
-        int length = parameters.length;
-
-        int size = (parameters.length > 30) ? 101 : 7;
-
-        Set result = new HashSet(size);
-
-        for (int i = 0; i < length; i++)
-            result.add(parameters[i]);
-
-        return result;
-    }
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/form/Select.jwc b/3.0.4/framework/src/org/apache/tapestry/form/Select.jwc
deleted file mode 100644
index f8507ed..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/form/Select.jwc
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE component-specification PUBLIC
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN"
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<component-specification class="org.apache.tapestry.form.Select">
-
-  <description>
-  Creates an HTML select populated with a number of options.
-  </description>
-
-  <parameter name="multiple" type="boolean" direction="in"/>
-  <parameter name="disabled" type="boolean" direction="in"/>
-
-  <reserved-parameter name="name"/>
-
-  <property-specification name="name" type="java.lang.String"/>
-  <property-specification name="form" type="org.apache.tapestry.IForm"/>
-
-</component-specification>
diff --git a/3.0.4/framework/src/org/apache/tapestry/form/SelectPropertySelectionRenderer.java b/3.0.4/framework/src/org/apache/tapestry/form/SelectPropertySelectionRenderer.java
deleted file mode 100644
index 0a46ad6..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/form/SelectPropertySelectionRenderer.java
+++ /dev/null
@@ -1,93 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.form;
-
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-
-/**
- *  Implementation of {@link IPropertySelectionRenderer} that
- *  produces a &lt;select&gt; element (containing &lt;option&gt; elements).
- *
- *  @version $Id$
- *  @author Howard Lewis Ship
- *
- **/
-
-public class SelectPropertySelectionRenderer
-    implements IPropertySelectionRenderer
-{
-    /**
-     *  Writes the &lt;select&gt; element.  If the
-     *  {@link PropertySelection} is {@link PropertySelection#isDisabled() disabled}
-     *  then a <code>disabled</code> attribute is written into the tag
-     *  (though Navigator 4 will ignore this).
-     *
-     **/
-
-    public void beginRender(
-        PropertySelection component,
-        IMarkupWriter writer,
-        IRequestCycle cycle)
-    {
-        writer.begin("select");
-        writer.attribute("name", component.getName());
-
-        if (component.isDisabled())
-            writer.attribute("disabled", "disabled");
-
-        writer.println();
-    }
-
-    /**
-     *  Closes the &lt;select&gt; element.
-     *
-     **/
-
-    public void endRender(
-        PropertySelection component,
-        IMarkupWriter writer,
-        IRequestCycle cycle)
-    {
-        writer.end(); // <select>
-    }
-
-    /**
-     *  Writes an &lt;option&gt; element.
-     *
-     **/
-
-    public void renderOption(
-        PropertySelection component,
-        IMarkupWriter writer,
-        IRequestCycle cycle,
-        IPropertySelectionModel model,
-        Object option,
-        int index,
-        boolean selected)
-    {
-        writer.beginEmpty("option");
-        writer.attribute("value", model.getValue(index));
-
-        if (selected)
-            writer.attribute("selected", "selected");
-
-        writer.print(model.getLabel(index));
-
-        writer.end();
-        
-        writer.println();
-    }
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/form/StringPropertySelectionModel.java b/3.0.4/framework/src/org/apache/tapestry/form/StringPropertySelectionModel.java
deleted file mode 100644
index f9a591f..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/form/StringPropertySelectionModel.java
+++ /dev/null
@@ -1,84 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.form;
-
-/**
- *  Implementation of {@link IPropertySelectionModel} that allows one String from
- *  an array of Strings to be selected as the property.
- *
- *  <p>Uses a simple index number as the value (used to represent the selected String).
- *  This assumes that the possible values for the Strings will remain constant between
- *  request cycles.
- *
- *  @version $Id$
- *  @author Howard Lewis Ship
- * 
- **/
-
-public class StringPropertySelectionModel implements IPropertySelectionModel
-{
-    private String[] options;
-
-    /**
-     * Standard constructor.
-     *
-     * The options are retained (not copied).
-     **/
-
-    public StringPropertySelectionModel(String[] options)
-    {
-        this.options = options;
-    }
-
-    public int getOptionCount()
-    {
-        return options.length;
-    }
-
-    public Object getOption(int index)
-    {
-        return options[index];
-    }
-
-    /**
-     *  Labels match options.
-     *
-     **/
-
-    public String getLabel(int index)
-    {
-        return options[index];
-    }
-
-    /**
-     *  Values are indexes into the array of options.
-     *
-     **/
-
-    public String getValue(int index)
-    {
-        return Integer.toString(index);
-    }
-
-    public Object translateValue(String value)
-    {
-        int index;
-
-        index = Integer.parseInt(value);
-
-        return options[index];
-    }
-
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/form/Submit.java b/3.0.4/framework/src/org/apache/tapestry/form/Submit.java
deleted file mode 100644
index 9de335c..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/form/Submit.java
+++ /dev/null
@@ -1,112 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.form;
-
-import org.apache.tapestry.IActionListener;
-import org.apache.tapestry.IBinding;
-import org.apache.tapestry.IForm;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-
-
-/**
- *  Implements a component that manages an HTML &lt;input type=submit&gt; form element.
- * 
- *  [<a href="../../../../../ComponentReference/Submit.html">Component Reference</a>]
- *
- *  <p>This component is generally only used when the form has multiple
- *  submit buttons, and it is important for the application to know
- *  which one was pressed.  You may also want to use
- *  {@link ImageSubmit} which accomplishes much the same thing, but uses
- *  a graphic image instead.
- *
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- * 
- **/
-
-public abstract class Submit extends AbstractFormComponent{
-
-    protected void renderComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-
-        IForm form = getForm(cycle);
-		
-        boolean rewinding = form.isRewinding();
-
-        String name = form.getElementId(this);
-
-        if (rewinding)
-        {
-            // Don't bother doing anything if disabled.
-
-            if (isDisabled())
-                return;
-
-            // How to know which Submit button was actually
-            // clicked?  When submitted, it produces a request parameter
-            // with its name and value (the value serves double duty as both
-            // the label on the button, and the parameter value).
-
-            String value = cycle.getRequestContext().getParameter(name);
-
-            // If the value isn't there, then this button wasn't
-            // selected.
-
-            if (value == null)
-                return;
-
-            IBinding selectedBinding = getSelectedBinding();
-
-            if (selectedBinding != null)
-                selectedBinding.setObject(getTag());
-
-            IActionListener listener = getListener();
-
-            if (listener != null)
-                listener.actionTriggered(this, cycle);
-
-            return;
-        }
-
-        writer.beginEmpty("input");
-        writer.attribute("type", "submit");
-        writer.attribute("name", name);
-
-        if (isDisabled())
-            writer.attribute("disabled", "disabled");
-
-        String label = getLabel();
-
-        if (label != null)
-            writer.attribute("value", label);
-
-        renderInformalParameters(writer, cycle);
-
-        writer.closeTag();
-    }
-
-    public abstract String getLabel();
-
-    public abstract IBinding getSelectedBinding();
-
-    public abstract boolean isDisabled();
-
-    public abstract IActionListener getListener();
-
-    public abstract Object getTag();
-
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/form/Submit.jwc b/3.0.4/framework/src/org/apache/tapestry/form/Submit.jwc
deleted file mode 100644
index b3a8d3f..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/form/Submit.jwc
+++ /dev/null
@@ -1,42 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-  
-<component-specification class="org.apache.tapestry.form.Submit" allow-body="no">
-
-  <description>
-  Creates a labeled submit button within a form.
-  </description>
-
-  <parameter name="label" type="java.lang.String" direction="in"/>
-  <parameter name="disabled" type="boolean" direction="in"/>
-  <parameter name="selected"/>
-  <parameter name="tag" type="java.lang.Object" direction="in"/>
-  <parameter name="listener" 
-  	type="org.apache.tapestry.IActionListener"
-  	direction="in"/>
-  
-  <reserved-parameter name="name"/>
-  <reserved-parameter name="type"/>
-
-  <property-specification name="name" type="java.lang.String"/>
-  <property-specification name="form" type="org.apache.tapestry.IForm"/>  
-  
-</component-specification>
diff --git a/3.0.4/framework/src/org/apache/tapestry/form/TextArea.java b/3.0.4/framework/src/org/apache/tapestry/form/TextArea.java
deleted file mode 100644
index b6c3516..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/form/TextArea.java
+++ /dev/null
@@ -1,88 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.form;
-
-import org.apache.tapestry.IForm;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-
-/**
- *  Implements a component that manages an HTML &lt;textarea&gt; form element.
- *
- *  [<a href="../../../../../ComponentReference/TextArea.html">Component Reference</a>]
- *
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- * 
- **/
-
-public abstract class TextArea extends AbstractFormComponent
-{
-
-    /**
-     *  Renders the form element, or responds when the form containing the element
-     *  is submitted (by checking {@link Form#isRewinding()}.
-     *
-     **/
-
-    protected void renderComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        IForm form = getForm(cycle);
-		
-        // It isn't enough to know whether the cycle in general is rewinding, need to know
-        // specifically if the form which contains this component is rewinding.
-
-        boolean rewinding = form.isRewinding();
-
-        // Used whether rewinding or not.
-
-        String name = form.getElementId(this);
-
-        if (rewinding)
-        {
-        	if (!isDisabled())
-	            setValue(cycle.getRequestContext().getParameter(name));
-
-            return;
-        }
-        
-        if (cycle.isRewinding())
-        	return;
-
-        writer.begin("textarea");
-
-        writer.attribute("name", name);
-
-        if (isDisabled())
-            writer.attribute("disabled", "disabled");
-
-        renderInformalParameters(writer, cycle);
-
-        String value = getValue();
-
-        if (value != null)
-            writer.print(value);
-
-        writer.end();
-
-    }
-
-    public abstract boolean isDisabled();
-
-    public abstract String getValue();
-
-    public abstract void setValue(String value);
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/form/TextArea.jwc b/3.0.4/framework/src/org/apache/tapestry/form/TextArea.jwc
deleted file mode 100644
index 416e584..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/form/TextArea.jwc
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-  
-<component-specification class="org.apache.tapestry.form.TextArea" allow-body="no">
-
-  <description>
-  A multi-line text area.
-  </description>
-  
-  <parameter name="value" type="java.lang.String" required="yes" direction="form"/>
-  
-  <parameter name="disabled" type="boolean" direction="in"/>
-  
-  <reserved-parameter name="name"/>
-  
-  <property-specification name="name" type="java.lang.String"/>
-  <property-specification name="form" type="org.apache.tapestry.IForm"/>
-  
-</component-specification>
diff --git a/3.0.4/framework/src/org/apache/tapestry/form/TextField.java b/3.0.4/framework/src/org/apache/tapestry/form/TextField.java
deleted file mode 100644
index f632e56..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/form/TextField.java
+++ /dev/null
@@ -1,43 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.form;
-
-import org.apache.tapestry.IBinding;
-
-/**
- *  Implements a component that manages an HTML &lt;input type=text&gt; or
- *  &lt;input type=password&gt; form element.
- *
- *  [<a href="../../../../../ComponentReference/TextField.html">Component Reference</a>]
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- * 
- **/
-
-public abstract class TextField extends AbstractTextField
-{
-    public abstract IBinding getValueBinding();
-
-    public String readValue()
-    {
-        return (String) getValueBinding().getObject("value", String.class);
-    }
-
-    public void updateValue(String value)
-    {
-        getValueBinding().setString(value);
-    }
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/form/TextField.jwc b/3.0.4/framework/src/org/apache/tapestry/form/TextField.jwc
deleted file mode 100644
index d00208d..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/form/TextField.jwc
+++ /dev/null
@@ -1,41 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<component-specification class="org.apache.tapestry.form.TextField" allow-body="no">
-
-  <description>
-  A text input field.
-  </description>
-  
-  <parameter name="value" type="java.lang.String" required="yes"/>
-  
-  <parameter name="disabled" type="boolean" direction="in"/>
-  
-  <parameter name="hidden" type="boolean" direction="in"/>
-  
-  <reserved-parameter name="name"/>
-  <reserved-parameter name="type"/>
-  <reserved-parameter name="value"/>
-  
-  <property-specification name="name" type="java.lang.String"/>
-  <property-specification name="form" type="org.apache.tapestry.IForm"/>
-  
-</component-specification>
diff --git a/3.0.4/framework/src/org/apache/tapestry/form/Upload.java b/3.0.4/framework/src/org/apache/tapestry/form/Upload.java
deleted file mode 100644
index e71dbc1..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/form/Upload.java
+++ /dev/null
@@ -1,72 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.form;
-
-import org.apache.tapestry.IForm;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.request.IUploadFile;
-
-/**
- *  Form element used to upload files.  For the momement, it is necessary to
- *  explicitly set the form's enctype to "multipart/form-data".
- * 
- *  [<a href="../../../../../ComponentReference/Upload.html">Component Reference</a>]
- * 
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 1.0.8
- * 
- **/
-
-public abstract class Upload extends AbstractFormComponent
-{
-    protected void renderComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        IForm form = getForm(cycle);
-		
-        String name = form.getElementId(this);
-
-        if (form.isRewinding())
-        {
-        	if (!isDisabled())
-	            setFile(cycle.getRequestContext().getUploadFile(name));
-
-            return;
-        }
-
-		// Force the form to use the correct encoding type for
-		// file uploads.
-		
-		form.setEncodingType("multipart/form-data");
-
-        writer.beginEmpty("input");
-        writer.attribute("type", "file");
-        writer.attribute("name", name);
-
-        if (isDisabled())
-            writer.attribute("disabled", "disabled");
-
-        // Size, width, etc. can be specified as informal parameters
-        // (Not making the same mistake here that was made with TextField
-        // and friends).
-
-        renderInformalParameters(writer, cycle);
-    }
-
-    public abstract boolean isDisabled();
-
-    public abstract void setFile(IUploadFile file);
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/form/Upload.jwc b/3.0.4/framework/src/org/apache/tapestry/form/Upload.jwc
deleted file mode 100644
index d082cbe..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/form/Upload.jwc
+++ /dev/null
@@ -1,46 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!-- $Id$ -->
-
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-	
-<component-specification class="org.apache.tapestry.form.Upload" allow-body="no">
-
-  <description>
-  Allows a file to be uploaded as part of a form.
-  </description>
-
-  <parameter name="file" type="org.apache.tapestry.request.IUploadFile" required="yes" direction="form">
-  	<description>
-  	Parameter updated with the information (filename and content) of the file
-  	when the form is submitted.
-  	</description>
-  </parameter>
-
-  <parameter name="disabled" type="boolean" direction="in"/>
- 
-  <reserved-parameter name="type"/>
-  <reserved-parameter name="name"/>
-  
-  <property-specification name="name" type="java.lang.String"/>
-  <property-specification name="form" type="org.apache.tapestry.IForm"/>
-  
-</component-specification>
diff --git a/3.0.4/framework/src/org/apache/tapestry/form/package.html b/3.0.4/framework/src/org/apache/tapestry/form/package.html
deleted file mode 100644
index e6b9701..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/form/package.html
+++ /dev/null
@@ -1,20 +0,0 @@
-<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN">
-<!-- $Id$ -->
-<html>
-<head>
-<title>Tapestry: Web Application Framework</title>
-</head>
-<body>
-
-<p>Components for implementing basic HTML Forms.  Most
-components are straight forward 1:1 mappings between Tapestry components and a
-corresponding HTML element. {@link org.apache.tapestry.form.PropertySelection} is more complicated,
-as it manages way more of the process of implementing a &lt;select&gt; and its &lt;option&gt;s.
-
-<p>Package {@link org.apache.tapestry.valid} contains more complex components that not only collect
-input, but validate it as well.
-
-@author Howard Lewis Ship <a href="mailto:hlship@apache.org">hlship@apache.org</a>
-
-</body>
-</html>
diff --git a/3.0.4/framework/src/org/apache/tapestry/html/BasePage.java b/3.0.4/framework/src/org/apache/tapestry/html/BasePage.java
deleted file mode 100644
index 452b422..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/html/BasePage.java
+++ /dev/null
@@ -1,43 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.html;
-
-import java.io.OutputStream;
-
-import org.apache.tapestry.AbstractPage;
-import org.apache.tapestry.IMarkupWriter;
-
-/**
- *  Concrete class for HTML pages. Most pages
- *  should be able to simply subclass this, adding new properties and
- *  methods.  An unlikely exception would be a page that was not based
- *  on a template.
- *
- *  @version $Id$
- *  @author Howard Lewis Ship
- **/
-
-public class BasePage extends AbstractPage
-{
-    /**
-     *  Returns a new {@link HTMLWriter}.
-     *
-     **/
-
-    public IMarkupWriter getResponseWriter(OutputStream out)
-    {
-        return new HTMLWriter(out, getOutputEncoding());
-    }
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/html/Body.java b/3.0.4/framework/src/org/apache/tapestry/html/Body.java
deleted file mode 100644
index 6dcca9c..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/html/Body.java
+++ /dev/null
@@ -1,406 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.html;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.tapestry.AbstractComponent;
-import org.apache.tapestry.ApplicationRuntimeException;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.IResourceLocation;
-import org.apache.tapestry.IScriptProcessor;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.asset.PrivateAsset;
-import org.apache.tapestry.resource.ClasspathResourceLocation;
-import org.apache.tapestry.util.IdAllocator;
-
-/**
- *  The body of a Tapestry page.  This is used since it allows components on the
- *  page access to an initialization script (that is written the start, just inside
- *  the &lt;body&gt; tag).  This is currently used by {@link Rollover} and {@link Script}
- *  components.
- * 
- *  [<a href="../../../../../ComponentReference/Body.html">Component Reference</a>]
- * 
- *  @author Howard Lewis Ship
- *  @version $Id$
- * 
- **/
-
-public abstract class Body extends AbstractComponent implements IScriptProcessor
-{
-    // Lines that belong inside the onLoad event handler for the <body> tag.
-    private StringBuffer _initializationScript;
-
-    // The writer initially passed to render() ... wrapped elements render
-    // into a nested response writer.
-
-    private IMarkupWriter _outerWriter;
-
-    // Any other scripting desired
-
-    private StringBuffer _bodyScript;
-
-    // Contains text lines related to image initializations
-
-    private StringBuffer _imageInitializations;
-
-    /**
-     *  Map of URLs to Strings (preloaded image references).
-     *
-     **/
-
-    private Map _imageMap;
-
-    /**
-     *  List of included scripts.  Values are Strings.
-     *
-     *  @since 1.0.5
-     *
-     **/
-
-    private List _externalScripts;
-
-    private IdAllocator _idAllocator;
-
-    private static final String ATTRIBUTE_NAME = "org.apache.tapestry.active.Body";
-
-    /**
-     *  Tracks a particular preloaded image.
-     *
-     **/
-
-    /**
-     *  Adds to the script an initialization for the named variable as
-     *  an Image(), to the given URL.
-     *
-     *  <p>Returns a reference, a string that can be used to represent
-     *  the preloaded image in a JavaScript function.
-     *
-     *  @since 1.0.2
-     **/
-
-    public String getPreloadedImageReference(String URL)
-    {
-        if (_imageMap == null)
-            _imageMap = new HashMap();
-
-        String reference = (String) _imageMap.get(URL);
-
-        if (reference == null)
-        {
-            int count = _imageMap.size();
-            String varName = "tapestry_preload[" + count + "]";
-            reference = varName + ".src";
-
-            if (_imageInitializations == null)
-                _imageInitializations = new StringBuffer();
-
-            _imageInitializations.append("  ");
-            _imageInitializations.append(varName);
-            _imageInitializations.append(" = new Image();\n");
-            _imageInitializations.append("  ");
-            _imageInitializations.append(reference);
-            _imageInitializations.append(" = \"");
-            _imageInitializations.append(URL);
-            _imageInitializations.append("\";\n");
-
-            _imageMap.put(URL, reference);
-        }
-
-        return reference;
-    }
-
-    /**
-     *  Adds other initialization, in the form of additional JavaScript
-     *  code to execute from the &lt;body&gt;'s <code>onLoad</code> event
-     *  handler.  The caller is responsible for adding a semicolon (statement
-     *  terminator).  This method will add a newline after the script.
-     *
-     **/
-
-    public void addInitializationScript(String script)
-    {
-        if (_initializationScript == null)
-            _initializationScript = new StringBuffer(script.length() + 1);
-
-        _initializationScript.append(script);
-        _initializationScript.append('\n');
-
-    }
-
-    /**
-     *  Adds additional scripting code to the page.  This code
-     *  will be added to a large block of scripting code at the
-     *  top of the page (i.e., the before the &lt;body&gt; tag).
-     *
-     *  <p>This is typically used to add some form of JavaScript
-     *  event handler to a page.  For example, the
-     *  {@link Rollover} component makes use of this.
-     *
-     *  <p>Another way this is invoked is by using the
-     *  {@link Script} component.
-     *
-     *  <p>The string will be added, as-is, within
-     *  the &lt;script&gt; block generated by this <code>Body</code> component.
-     *  The script should <em>not</em> contain HTML comments, those will
-     *  be supplied by this Body component.
-     *
-     *  <p>A frequent use is to add an initialization function using
-     *  this method, then cause it to be executed using
-     *  {@link #addInitializationScript(String)}.
-     *
-     **/
-
-    public void addBodyScript(String script)
-    {
-        if (_bodyScript == null)
-            _bodyScript = new StringBuffer(script.length());
-
-        _bodyScript.append(script);
-    }
-
-    /**
-     *  Used to include a script from an outside URL (the scriptLocation
-     *  is a URL, probably obtained from an asset.  This adds
-     *  an &lt;script src="..."&gt; tag before the main
-     *  &lt;script&gt; tag.  The Body component ensures
-     *  that each URL is included only once.
-     *
-     *  @since 1.0.5
-     *
-     **/
-
-    public void addExternalScript(IResourceLocation scriptLocation)
-    {
-        if (_externalScripts == null)
-            _externalScripts = new ArrayList();
-
-        if (_externalScripts.contains(scriptLocation))
-            return;
-
-        // Alas, this won't give a good ILocation for the actual problem.
-
-        if (!(scriptLocation instanceof ClasspathResourceLocation))
-            throw new ApplicationRuntimeException(
-                Tapestry.format("Body.include-classpath-script-only", scriptLocation),
-                this,
-                null,
-                null);
-
-        // Record the URL so we don't include it twice.
-
-        _externalScripts.add(scriptLocation);
-    }
-
-    /**
-     * Writes &lt;script&gt; elements for all the external scripts.
-     */
-    private void writeExternalScripts(IMarkupWriter writer)
-    {
-        int count = Tapestry.size(_externalScripts);
-        for (int i = 0; i < count; i++)
-        {
-            ClasspathResourceLocation scriptLocation =
-                (ClasspathResourceLocation) _externalScripts.get(i);
-
-            // This is still very awkward!  Should move the code inside PrivateAsset somewhere
-            // else, so that an asset does not have to be created to to build the URL.
-            PrivateAsset asset = new PrivateAsset(scriptLocation, null);
-            String url = asset.buildURL(getPage().getRequestCycle());
-
-            // Note: important to use begin(), not beginEmpty(), because browser don't
-            // interpret <script .../> properly.
-
-            writer.begin("script");
-            writer.attribute("language", "JavaScript");
-            writer.attribute("type", "text/javascript");
-            writer.attribute("src", url);
-            writer.end();
-            writer.println();
-        }
-
-    }
-
-    /**
-     *  Retrieves the <code>Body</code> that was stored into the
-     *  request cycle.  This allows components wrapped by the
-     *  <code>Body</code> to locate it and access the services it
-     *  provides.
-     *
-     **/
-
-    public static Body get(IRequestCycle cycle)
-    {
-        return (Body) cycle.getAttribute(ATTRIBUTE_NAME);
-    }
-
-    protected void renderComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        if (cycle.getAttribute(ATTRIBUTE_NAME) != null)
-            throw new ApplicationRuntimeException(
-                Tapestry.getMessage("Body.may-not-nest"),
-                this,
-                null,
-                null);
-
-        cycle.setAttribute(ATTRIBUTE_NAME, this);
-
-        _outerWriter = writer;
-
-        IMarkupWriter nested = writer.getNestedWriter();
-
-        renderBody(nested, cycle);
-
-        // Start the body tag.
-        writer.println();
-        writer.begin(getElement());
-        renderInformalParameters(writer, cycle);
-
-        writer.println();
-
-        // Write the page's scripting.  This is included scripts
-        // and dynamic JavaScript, including initialization.
-
-        writeScript(_outerWriter);
-
-        // Close the nested writer, which dumps its buffered content
-        // into its parent.
-
-        nested.close();
-
-        writer.end(); // <body>
-
-    }
-
-    protected void cleanupAfterRender(IRequestCycle cycle)
-    {
-        super.cleanupAfterRender(cycle);
-
-        if (_idAllocator != null)
-            _idAllocator.clear();
-
-        if (_imageMap != null)
-            _imageMap.clear();
-
-        if (_externalScripts != null)
-            _externalScripts.clear();
-
-        if (_initializationScript != null)
-            _initializationScript.setLength(0);
-
-        if (_imageInitializations != null)
-            _imageInitializations.setLength(0);
-
-        if (_bodyScript != null)
-            _bodyScript.setLength(0);
-
-        _outerWriter = null;
-    }
-
-    /**
-     *  Writes a single large JavaScript block containing:
-     *  <ul>
-     *  <li>Any image initializations
-     *  <li>Any scripting
-     *  <li>Any initializations
-     *  </ul>
-     *
-     *  <p>The script is written into a nested markup writer.
-     *
-     *  <p>If there are any other initializations 
-     *  (see {@link #addInitializationScript(String)}),
-     *  then a function to execute them is created.
-     **/
-
-    protected void writeScript(IMarkupWriter writer)
-    {
-        if (!Tapestry.isEmpty(_externalScripts))
-            writeExternalScripts(writer);
-
-        if (!(any(_initializationScript) || any(_bodyScript) || any(_imageInitializations)))
-            return;
-
-        writer.begin("script");
-        writer.attribute("language", "JavaScript");
-        writer.attribute("type", "text/javascript");
-        writer.printRaw("<!--");
-
-        if (any(_imageInitializations))
-        {
-            writer.printRaw("\n\nvar tapestry_preload = new Array();\n");
-            writer.printRaw("if (document.images)\n");
-            writer.printRaw("{\n");
-            writer.printRaw(_imageInitializations.toString());
-            writer.printRaw("}\n");
-        }
-
-        if (any(_bodyScript))
-        {
-            writer.printRaw("\n\n");
-            writer.printRaw(_bodyScript.toString());
-        }
-
-        if (any(_initializationScript))
-        {
-
-            writer.printRaw("\n\n" + "window.onload = function ()\n" + "{\n");
-
-            writer.printRaw(_initializationScript.toString());
-
-            writer.printRaw("}");
-        }
-
-        writer.printRaw("\n\n// -->");
-        writer.end();
-    }
-
-    private boolean any(StringBuffer buffer)
-    {
-        if (buffer == null)
-            return false;
-
-        return buffer.length() > 0;
-    }
-
-    public abstract String getElement();
-
-    public abstract void setElement(String element);
-
-    /**
-     * Sets the element parameter property to its default, "body".
-     * 
-     * @since 3.0
-     */
-    protected void finishLoad()
-    {
-        setElement("body");
-    }
-
-    /** @since 3.0 */
-
-    public String getUniqueString(String baseValue)
-    {
-        if (_idAllocator == null)
-            _idAllocator = new IdAllocator();
-
-        return _idAllocator.allocateId(baseValue);
-    }
-
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/html/Body.jwc b/3.0.4/framework/src/org/apache/tapestry/html/Body.jwc
deleted file mode 100644
index 102bc5c..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/html/Body.jwc
+++ /dev/null
@@ -1,40 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-  
-<component-specification class="org.apache.tapestry.html.Body">
-
-  <description>
-  Takes the place of the normal HTML &lt;body&gt; element, providing various
-  forms of support to all components it wraps.
-  </description>
-
-  <parameter
-  	name="element"
-  	type="java.lang.String"
-  	direction="in">
-  	<description>
-  	Name of element to use, defaults to "body".
-  	</description>
-  </parameter>
- 
-  <reserved-parameter name="onload"/>
-    
-</component-specification>
diff --git a/3.0.4/framework/src/org/apache/tapestry/html/ExceptionDisplay.html b/3.0.4/framework/src/org/apache/tapestry/html/ExceptionDisplay.html
deleted file mode 100644
index 5a9fa6a..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/html/ExceptionDisplay.html
+++ /dev/null
@@ -1,71 +0,0 @@
-<!-- $Id$ -->
-<html>
-<link rel="stylesheet" type="text/css" href="../pages/Exception.css">
-
-<body>
-
-<span jwcid="$content$">
-<p>
-
-<table class="exception-display">
-
-<span jwcid="eException">
-	
-		<tr class="exception-name">
-			<td colspan="2"><span jwcid="insertClass">some.exception.Class</span></td>
-		</tr>
-		
-		<tr class="exception-message">
-			<td colspan="2"><span jwcid="insertMessage">A message describing the exception.</span></td>
-		</tr>
-		
-		<tr jwcid="eProperty">
-			<th><span jwcid="insertPropertyName">Property Name</span>:</th>
-			<td><span jwcid="insertPropertyValue">Property Value</span></td>
-		</tr>
-
-		<tr jwcid="$remove$" class="odd">
-			<th>Property Name 2:</th>
-			<td>Property Value 2</td>
-		</tr>
-
-		<tr jwcid="$remove$" class="even">
-			<th>Property Name 3:</th>
-			<td>Property Value 3</td>
-		</tr>
-
-		<tr jwcid="$remove$" class="odd">
-			<th>Property Name 4:</th>
-			<td>Property Value 4</td>
-		</tr>		
-		
-<span jwcid="ifNotLast">
-		<tr> <td colspan=2> &nbsp; </td> </tr>
-</span>
-	
-<span jwcid="ifLast">
-		<tr class="stack-trace-label">
-			<td colspan="2">Stack Trace:</td>
-		</tr>
-
-		<tr class="stack-trace">
-			<td colspan=2>
-				<ul>
-					<li jwcid="eStack"><span jwcid="insertStackTrace">foo.bar.baz(Line:xyz)</span>
-					</li>
-					<li jwcid="$remove$">foo.bar.baz(Line:xyz)</li>
-					<li jwcid="$remove$">foo.bar.baz(Line:xyz)</li>
-					<li jwcid="$remove$">foo.bar.baz(Line:xyz)</li>					
-					<li jwcid="$remove$">foo.bar.baz(Line:xyz)</li>
-				</ul>
-			</td>
-		</tr>
-</span> <!-- ifLast -->
-</span> <!-- e-exception -->
-
-</table>
-
-</span> <!-- $content$ -->
-
-</body>
-</html>
diff --git a/3.0.4/framework/src/org/apache/tapestry/html/ExceptionDisplay.java b/3.0.4/framework/src/org/apache/tapestry/html/ExceptionDisplay.java
deleted file mode 100644
index 24982d9..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/html/ExceptionDisplay.java
+++ /dev/null
@@ -1,101 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.html;
-
-import org.apache.tapestry.BaseComponent;
-import org.apache.tapestry.IBinding;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.bean.EvenOdd;
-import org.apache.tapestry.util.exception.ExceptionDescription;
-
-/**
- *  Component used to display an already formatted exception.
- * 
- *  [<a href="../../../../../ComponentReference/ExceptionDisplay.html">Component Reference</a>]
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- * 
- **/
-
-public class ExceptionDisplay extends BaseComponent
-{
-    private IBinding _exceptionsBinding;
-    private ExceptionDescription _exception;
-    private int _count;
-    private int _index;
-    private EvenOdd _evenOdd;
-
-    public void setExceptionsBinding(IBinding value)
-    {
-        _exceptionsBinding = value;
-    }
-
-    public IBinding getExceptionsBinding()
-    {
-        return _exceptionsBinding;
-    }
-
-    /**
-     *  Each time the current exception is set, as a side effect,
-     *  the evenOdd helper bean is reset to even.
-     * 
-     **/
-    
-    public void setException(ExceptionDescription value)
-    {
-        _exception = value;
-        
-        _evenOdd.setEven(true);
-    }
-
-    public ExceptionDescription getException()
-    {
-        return _exception;
-    }
-
-    protected void renderComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        ExceptionDescription[] exceptions =
-            (ExceptionDescription[]) _exceptionsBinding.getObject(
-                "exceptions",
-                ExceptionDescription[].class);
-
-        _count = exceptions.length;
-        
-        try
-        {
-            _evenOdd = (EvenOdd)getBeans().getBean("evenOdd");
-            
-            super.renderComponent(writer, cycle);
-        }
-        finally
-        {
-            _exception = null;
-            _evenOdd = null;
-        }
-    }
-
-    public void setIndex(int value)
-    {
-        _index = value;
-    }
-
-    public boolean isLast()
-    {
-        return _index == (_count - 1);
-    }
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/html/ExceptionDisplay.jwc b/3.0.4/framework/src/org/apache/tapestry/html/ExceptionDisplay.jwc
deleted file mode 100644
index c7cf8ae..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/html/ExceptionDisplay.jwc
+++ /dev/null
@@ -1,83 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-		
-<component-specification class="org.apache.tapestry.html.ExceptionDisplay" 
-	allow-body="no" 
-	allow-informal-parameters="no">
-  
-  <description>
-  Used to present a detail exception description.
-  </description>
-  
-  <parameter name="exceptions" required="yes">
-    <description>
-    An array of ExceptionDescription objects.
-    </description>
-  </parameter>
-  
-  <bean name="evenOdd" class="org.apache.tapestry.bean.EvenOdd"/>
-    
-  <component id="eException" type="Foreach">
-    <inherited-binding name="source" parameter-name="exceptions"/>
-    <binding name="value" expression="exception"/>
-    <binding name="index" expression="index"/>
-  </component>
-  
-  <component id="insertClass" type="Insert">
-    <binding name="value" expression="exception.exceptionClassName"/>
-  </component>
-  
-  <component id="insertMessage" type="Insert">
-    <binding name="value" expression="exception.message"/>
-  </component>
-  
-  <component id="eProperty" type="Foreach">
-  	<static-binding name="element" value="tr"/>
-  	<binding name="class" expression="beans.evenOdd.next"/>
-    <binding name="source" expression="exception.properties"/>
-  </component>
-  
-  <component id="insertPropertyName" type="Insert">
-    <binding name="value" expression="components.eProperty.value.name"/>
-  </component>
-  
-  <component id="insertPropertyValue" type="Insert">
-    <binding name="value" expression="components.eProperty.value.value"/>
-  </component>
-  
-  <component id="ifLast" type="Conditional">
-    <binding name="condition" expression="last"/>
-  </component>
-  
-  <component id="ifNotLast" type="Conditional">
-    <binding name="condition" expression="! last"/>
-  </component>
-  
-  <component id="eStack" type="Foreach">
-    <static-binding name="element" value="li"/>
-    <binding name="source" expression="exception.stackTrace"/>
-  </component>
-  
-  <component id="insertStackTrace" type="Insert">
-    <binding name="value" expression="components.eStack.value"/>
-  </component>
-  
-</component-specification>
diff --git a/3.0.4/framework/src/org/apache/tapestry/html/Frame.java b/3.0.4/framework/src/org/apache/tapestry/html/Frame.java
deleted file mode 100644
index 071387f..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/html/Frame.java
+++ /dev/null
@@ -1,57 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.html;
-
-import org.apache.tapestry.AbstractComponent;
-import org.apache.tapestry.IEngine;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.engine.IEngineService;
-import org.apache.tapestry.engine.ILink;
-
-/**
- *  Implements a &lt;frame&gt; within a &lt;frameset&gt;.
- * 
- *  [<a href="../../../../../ComponentReference/Frame.html">Component Reference</a>]
- * 
- *  @author Howard Lewis Ship
- *  @version $Id$
- *
- **/
-
-public abstract class Frame extends AbstractComponent
-{
-    protected void renderComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        if (cycle.isRewinding())
-            return;
-
-        IEngine engine = cycle.getEngine();
-        IEngineService pageService = engine.getService(Tapestry.PAGE_SERVICE);
-        ILink link = pageService.getLink(cycle, this, new String[] { getTargetPage() });
-
-        writer.beginEmpty("frame");
-        writer.attribute("src", link.getURL());
-
-        renderInformalParameters(writer, cycle);
-
-        writer.closeTag();
-    }
-
-    public abstract String getTargetPage();
-
-    public abstract void setTargetPage(String targetPage);
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/html/Frame.jwc b/3.0.4/framework/src/org/apache/tapestry/html/Frame.jwc
deleted file mode 100644
index 81ce7bc..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/html/Frame.jwc
+++ /dev/null
@@ -1,42 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<component-specification class="org.apache.tapestry.html.Frame" 
-	allow-body="no"
-	allow-informal-parameters="yes">
-
-  <description>
-  Identifies a page as the contents of a frame within a frameset.
-  </description>
-
-  <parameter name="page" 
-  		property-name="targetPage"
-  		type="java.lang.String" 
-  		required="yes" 
-  		direction="in">
-    <description>
-	The page to display in the frame.
-    </description>
-  </parameter>
-  
-  <reserved-parameter name="src"/>
-  
-</component-specification>
diff --git a/3.0.4/framework/src/org/apache/tapestry/html/HTMLWriter.java b/3.0.4/framework/src/org/apache/tapestry/html/HTMLWriter.java
deleted file mode 100644
index 66c010d..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/html/HTMLWriter.java
+++ /dev/null
@@ -1,109 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.html;
-
-import java.io.OutputStream;
-import java.io.PrintWriter;
-
-import org.apache.tapestry.AbstractMarkupWriter;
-import org.apache.tapestry.IMarkupWriter;
-
-/**
- *  This class is used to create HTML output.
- *
- *  <p>The <code>HTMLWriter</code> handles the necessary escaping 
- *  of invalid characters.
- *  Specifically, the '&lt;', '&gt;' and '&amp;' characters are properly
- *  converted to their HTML entities by the <code>print()</code> methods.
- *  Similar measures are taken by the {@link #attribute(String, String)} method.
- *  Other invalid characters are converted to their numeric entity equivalent.
- *
- *  @version $Id$
- *  @author Howard Lewis Ship
- **/
-
-public class HTMLWriter extends AbstractMarkupWriter
-{
-
-    private static final String[] entities = new String[64];
-    private static final boolean[] safe = new boolean[128];
-
-    private static final String SAFE_CHARACTERS =
-        "01234567890"
-            + "abcdefghijklmnopqrstuvwxyz"
-            + "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
-            + "\t\n\r !\"#$%'()*+,-./:;=?@[\\]^_`{|}~";
-
-    static {
-        entities['"'] = "&quot;";
-        entities['<'] = "&lt;";
-        entities['>'] = "&gt;";
-        entities['&'] = "&amp;";
-
-        int length = SAFE_CHARACTERS.length();
-        for (int i = 0; i < length; i++)
-            safe[SAFE_CHARACTERS.charAt(i)] = true;
-    }
-
-	/**
-	 *  Creates a new markup writer around the {@link PrintWriter}.
-	 *  The writer will not be closed when the markup writer closes.
-	 *  The content type is currently hard-wired to
-	 *  <code>text/html</code>.
-	 * 
-	 *  @since 3.0
-	 * 
-	 **/
-	
-	public HTMLWriter(PrintWriter writer)
-	{
-		super(safe, entities, "text/html", writer);
-	}
-
-    public HTMLWriter(String contentType, OutputStream outputStream)
-    {
-        super(safe, entities, contentType, outputStream);
-    }
-
-    public HTMLWriter(String contentType, String encoding, OutputStream outputStream)
-    {
-        super(safe, entities, contentType, encoding, outputStream);
-    }
-
-    protected HTMLWriter(String contentType)
-    {
-        super(safe, entities, contentType);
-    }
-
-    /**
-     *  Creates a default writer for content type "text/html; charset=utf-8".
-     * 
-     **/
-
-    public HTMLWriter(OutputStream outputStream)
-    {
-        this(outputStream, "UTF-8");
-    }
-
-    public HTMLWriter(OutputStream outputStream, String encoding)
-    {
-        this("text/html", encoding, outputStream);
-    }
-
-    public IMarkupWriter getNestedWriter()
-    {
-        return new NestedHTMLWriter(this);
-    }
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/html/Image.java b/3.0.4/framework/src/org/apache/tapestry/html/Image.java
deleted file mode 100644
index 0e84cfe..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/html/Image.java
+++ /dev/null
@@ -1,74 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.html;
-
-import org.apache.tapestry.AbstractComponent;
-import org.apache.tapestry.IAsset;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.Tapestry;
-
-/**
- *  Used to insert an image.  To create a rollover image, use the
- *  {@link Rollover} class, which integrates a link with the image assets
- *  used with the button.
- *
- *  [<a href="../../../../../ComponentReference/Image.html">Component Reference</a>]
- *
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- * 
- **/
-
-public abstract class Image extends AbstractComponent
-{
-    /**
-     *  Renders the &lt;img&gt; element.
-     *
-     *
-     **/
-
-    protected void renderComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        // Doesn't contain a body so no need to do anything on rewind (assumes no
-        // sideffects to accessor methods via bindings).
-
-        if (cycle.isRewinding())
-            return;
-
-        IAsset imageAsset = getImage();
-
-        if (imageAsset == null)
-            throw Tapestry.createRequiredParameterException(this, "image");
-
-        String imageURL = imageAsset.buildURL(cycle);
-
-        writer.beginEmpty("img");
-
-        writer.attribute("src", imageURL);
-
-        writer.attribute("border", getBorder());
-
-        renderInformalParameters(writer, cycle);
-
-        writer.closeTag();
-
-    }
-
-    public abstract IAsset getImage();
-
-    public abstract int getBorder();
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/html/Image.jwc b/3.0.4/framework/src/org/apache/tapestry/html/Image.jwc
deleted file mode 100644
index 1728279..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/html/Image.jwc
+++ /dev/null
@@ -1,47 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-  
-<component-specification class="org.apache.tapestry.html.Image" allow-body="no">
-
-  <description>
-  Displays an image, deriving the source URL for the image from an asset.
-  </description>
-
-  <parameter name="image" 
-  	type="org.apache.tapestry.IAsset" 
-  	required="yes"
-  	direction="in">
-    <description>
-    The asset to display.
-    </description>
-  </parameter>
-  
-  <parameter name="border"
-  	type="int"
-  	direction="in">
-    <description>
-    Number of pixels of border.
-    </description>
-  </parameter>
-  
-  <reserved-parameter name="src"/>
-  
-</component-specification>
diff --git a/3.0.4/framework/src/org/apache/tapestry/html/InsertText.java b/3.0.4/framework/src/org/apache/tapestry/html/InsertText.java
deleted file mode 100644
index 244a7f1..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/html/InsertText.java
+++ /dev/null
@@ -1,129 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.html;
-
-import java.io.IOException;
-import java.io.LineNumberReader;
-import java.io.Reader;
-import java.io.StringReader;
-
-import org.apache.tapestry.AbstractComponent;
-import org.apache.tapestry.ApplicationRuntimeException;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.Tapestry;
-
-/**
- *  Inserts formatted text (possibly collected using a {@link org.apache.tapestry.form.TextArea} 
- *  component.
- * 
- *  [<a href="../../../../../ComponentReference/InsertText.html">Component Reference</a>]
- *
- *  <p>To maintain the line breaks provided originally, this component will
- *  break the input into individual lines and insert additional
- *  HTML to make each line seperate.
- *
- *  <p>This can be down more simply, using the &lt;pre&gt; HTML element, but
- *  that usually renders the text in a non-proportional font.
- *
- * @author Howard Lewis Ship
- * @version $Id$
- * 
- **/
-
-public abstract class InsertText extends AbstractComponent
-{
-    protected void renderComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        String value = getValue();
-
-        if (value == null)
-            return;
-
-        StringReader reader = null;
-        LineNumberReader lineReader = null;
-        InsertTextMode mode = getMode();
-
-        try
-        {
-            reader = new StringReader(value);
-
-            lineReader = new LineNumberReader(reader);
-
-            int lineNumber = 0;
-
-            while (true)
-            {
-                String line = lineReader.readLine();
-
-                // Exit loop at end of file.
-
-                if (line == null)
-                    break;
-
-                mode.writeLine(lineNumber, line, writer);
-
-                lineNumber++;
-            }
-
-        }
-        catch (IOException ex)
-        {
-            throw new ApplicationRuntimeException(
-                Tapestry.getMessage("InsertText.conversion-error"),
-                this,
-                null,
-                ex);
-        }
-        finally
-        {
-            close(lineReader);
-            close(reader);
-        }
-
-    }
-
-    private void close(Reader reader)
-    {
-        if (reader == null)
-            return;
-
-        try
-        {
-            reader.close();
-        }
-        catch (IOException e)
-        {
-        }
-    }
-
-    public abstract InsertTextMode getMode();
-
-    public abstract void setMode(InsertTextMode mode);
-
-    public abstract String getValue();
-
-    /**
-     * Sets the mode parameter property to its default,
-     * {@link InsertTextMode#BREAK}.
-     * 
-     * @since 3.0
-     */
-    protected void finishLoad()
-    {
-        setMode(InsertTextMode.BREAK);
-    }
-
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/html/InsertText.jwc b/3.0.4/framework/src/org/apache/tapestry/html/InsertText.jwc
deleted file mode 100644
index d28af07..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/html/InsertText.jwc
+++ /dev/null
@@ -1,46 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<component-specification class="org.apache.tapestry.html.InsertText" 
-	allow-body="no" 
-	allow-informal-parameters="no">
-
-  <description>
-  Inserts line-oriented text into the response HTML, inserting additional
-  markup to delimit lines.
-  </description>
-  
-   <parameter name="value" type="java.lang.String" direction="in">
-    <description>
-  	The text to insert.
-    </description>
-  </parameter>
-
-  <parameter name="mode" 
-  	type="org.apache.tapestry.html.InsertTextMode"
-  	direction="in">
-    <description>
-    Determines which mode to use: breaks after each line, or wrap each line
-    as a paragraph.  The default is breaks.
-    </description>
-  </parameter>
-
-</component-specification>
diff --git a/3.0.4/framework/src/org/apache/tapestry/html/InsertTextMode.java b/3.0.4/framework/src/org/apache/tapestry/html/InsertTextMode.java
deleted file mode 100644
index ac6789d..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/html/InsertTextMode.java
+++ /dev/null
@@ -1,96 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.html;
-
-import org.apache.commons.lang.enum.Enum;
-import org.apache.tapestry.IMarkupWriter;
-
-/**
- *  Defines a number of ways to format multi-line text for proper
- *  renderring.
- *
- *  @version $Id$
- *  @author Howard Lewis Ship
- *
- **/
-
-public abstract class InsertTextMode extends Enum
-{
-    /**
-     *  Mode where each line (after the first) is preceded by a &lt;br&gt; tag.
-     *
-     **/
-
-    public static final InsertTextMode BREAK = new BreakMode();
-
-    /**
-     *  Mode where each line is wrapped with a &lt;p&gt; element.
-     *
-     **/
-
-    public static final InsertTextMode PARAGRAPH = new ParagraphMode();
-
-    protected InsertTextMode(String name)
-    {
-        super(name);
-    }
-
-    /**
-     *  Invoked by the {@link InsertText} component to write the next line.
-     *
-     *  @param lineNumber the line number of the line, starting with 0 for the first line.
-     *  @param line the String for the current line.
-     *  @param writer the {@link IMarkupWriter} to send output to.
-     **/
-
-    public abstract void writeLine(
-        int lineNumber,
-        String line,
-        IMarkupWriter writer);
-
-    private static class BreakMode extends InsertTextMode
-    {
-        private BreakMode()
-        {
-            super("BREAK");
-        }
-
-        public void writeLine(int lineNumber, String line, IMarkupWriter writer)
-        {
-            if (lineNumber > 0)
-                writer.beginEmpty("br");
-
-            writer.print(line);
-        }
-    }
-
-    private static class ParagraphMode extends InsertTextMode
-    {
-        private ParagraphMode()
-        {
-            super("PARAGRAPH");
-        }
-
-        public void writeLine(int lineNumber, String line, IMarkupWriter writer)
-        {
-            writer.begin("p");
-
-            writer.print(line);
-
-            writer.end();
-        }
-    }
-
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/html/NestedHTMLWriter.java b/3.0.4/framework/src/org/apache/tapestry/html/NestedHTMLWriter.java
deleted file mode 100644
index a9032ff..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/html/NestedHTMLWriter.java
+++ /dev/null
@@ -1,66 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.html;
-
-import java.io.CharArrayWriter;
-import java.io.PrintWriter;
-
-import org.apache.tapestry.IMarkupWriter;
-
-/**
- *  Subclass of {@link HTMLWriter} that is nested.  A nested writer
- *  buffers its output, then inserts it into its parent writer when it is
- *  closed.
- *
- *  @author Howard Ship
- *  @version $Id$
- */
-
-public class NestedHTMLWriter extends HTMLWriter
-{
-	private IMarkupWriter _parent;
-	private CharArrayWriter _internalBuffer;
-
-	public NestedHTMLWriter(IMarkupWriter parent)
-	{
-		super(parent.getContentType());
-
-		_parent = parent;
-
-		_internalBuffer = new CharArrayWriter();
-
-		setWriter(new PrintWriter(_internalBuffer));
-	}
-
-	/**
-	*  Invokes the {@link HTMLWriter#close() super-class
-	*  implementation}, then gets the data accumulated in the
-	*  internal buffer and provides it to the containing writer using
-	*  {@link IMarkupWriter#printRaw(char[], int, int)}.
-	*
-	*/
-
-	public void close()
-	{
-		super.close();
-
-		char[] data = _internalBuffer.toCharArray();
-
-		_parent.printRaw(data, 0, data.length);
-
-		_internalBuffer = null;
-		_parent = null;
-	}
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/html/PracticalBrowserSniffer.js b/3.0.4/framework/src/org/apache/tapestry/html/PracticalBrowserSniffer.js
deleted file mode 100644
index 95b9360..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/html/PracticalBrowserSniffer.js
+++ /dev/null
@@ -1,165 +0,0 @@
-// PracticalBrowserSniffer.js - Detect Browser

-// Requires JavaScript 1.1

-/*

-The contents of this file are subject to the Netscape Public

-License Version 1.1 (the "License"); you may not use this file

-except in compliance with the License. You may obtain a copy of

-the License at http://www.mozilla.org/NPL/

-

-Software distributed under the License is distributed on an "AS

-IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or

-implied. See the License for the specific language governing

-rights and limitations under the License.

-

-The Initial Developer of the Original Code is Bob Clary.

-

-Contributor(s): Bob Clary, Original Work, Copyright 1999-2000

-                Bob Clary, Netscape Communications, Copyright 2001

-

-

-Note:

-

-Acquired from: http://developer.netscape.com/evangelism/tools/practical-browser-sniffing/

-Last update: July 17, 2001

-

-*/

-

-// work around bug in xpcdom Mozilla 0.9.1

-window.saveNavigator = window.navigator;

-

-// Handy functions

-function noop() {}

-function noerror() { return true; }

-

-function defaultOnError(msg, url, line)

-{

-	// customize this for your site

-	if (top.location.href.indexOf('_files/errors/') == -1)

-		top.location = '/evangelism/xbProjects/_files/errors/index.html?msg=' + escape(msg) + '&url=' + escape(url) + '&line=' + escape(line);

-}

-

-// Display Error page... 

-// XXX: more work to be done here

-//

-function reportError(message)

-{

-	// customize this for your site

-	if (top.location.href.indexOf('_files/errors/') == -1)

-		top.location = '/evangelism/xbProjects/_files/errors/index.html?msg=' + escape(message);

-}

-

-function pageRequires(cond, msg, redirectTo)

-{

-	if (!cond)

-	{

-		msg = 'This page requires ' + msg;

-		top.location = redirectTo + '?msg=' + escape(msg);

-	}

-	// return cond so can use in <A> onclick handlers to exclude browsers

-	// from pages they do not support.

-	return cond;

-}

-

-function detectBrowser()

-{

-	var oldOnError = window.onerror;

-	var element = null;

-	

-	window.onerror = defaultOnError;

-

-	navigator.OS		= '';

-	navigator.version	= 0;

-	navigator.org		= '';

-	navigator.family	= '';

-

-	var platform;

-	if (typeof(window.navigator.platform) != 'undefined')

-	{

-		platform = window.navigator.platform.toLowerCase();

-		if (platform.indexOf('win') != -1)

-			navigator.OS = 'win';

-		else if (platform.indexOf('mac') != -1)

-			navigator.OS = 'mac';

-		else if (platform.indexOf('unix') != -1 || platform.indexOf('linux') != -1 || platform.indexOf('sun') != -1)

-			navigator.OS = 'nix';

-	}

-

-	var i = 0;

-	var ua = window.navigator.userAgent.toLowerCase();

-	

-	if (ua.indexOf('safari') != -1) {

-	  navigator.family = 'nn4';

-	  navigator.version = 4;

-	  navigator.org = 'netscape';

-	}

-	else if (ua.indexOf('opera') != -1)

-	{

-		i = ua.indexOf('opera');

-		navigator.family	= 'opera';

-		navigator.org		= 'opera';

-		navigator.version	= parseFloat('0' + ua.substr(i+6), 10);

-	}

-	else if ((i = ua.indexOf('msie')) != -1)

-	{

-		navigator.org		= 'microsoft';

-		navigator.version	= parseFloat('0' + ua.substr(i+5), 10);

-		

-		if (navigator.version < 4)

-			navigator.family = 'ie3';

-		else

-			navigator.family = 'ie4'

-	}

-	else if (typeof(window.controllers) != 'undefined' && typeof(window.locationbar) != 'undefined')

-	{

-		i = ua.lastIndexOf('/')

-		navigator.version = parseFloat('0' + ua.substr(i+1), 10);

-		navigator.family = 'gecko';

-

-		if (ua.indexOf('netscape') != -1)

-			navigator.org = 'netscape';

-		else if (ua.indexOf('compuserve') != -1)

-			navigator.org = 'compuserve';

-		else

-			navigator.org = 'mozilla';

-	}

-	else if ((ua.indexOf('mozilla') !=-1) && (ua.indexOf('spoofer')==-1) && (ua.indexOf('compatible') == -1) && (ua.indexOf('opera')==-1)&& (ua.indexOf('webtv')==-1) && (ua.indexOf('hotjava')==-1))

-	{

-	    var is_major = parseFloat(navigator.appVersion);

-    

-		if (is_major < 4)

-			navigator.version = is_major;

-		else

-		{

-			i = ua.lastIndexOf('/')

-			navigator.version = parseFloat('0' + ua.substr(i+1), 10);

-		}

-		navigator.org = 'netscape';

-		navigator.family = 'nn' + parseInt(navigator.appVersion);

-	}

-	else if ((i = ua.indexOf('aol')) != -1 )

-	{

-		// aol

-		navigator.family	= 'aol';

-		navigator.org		= 'aol';

-		navigator.version	= parseFloat('0' + ua.substr(i+4), 10);

-	}

-

-	navigator.DOMCORE1	= (typeof(document.getElementsByTagName) != 'undefined' && typeof(document.createElement) != 'undefined');

-	navigator.DOMCORE2	= (navigator.DOMCORE1 && typeof(document.getElementById) != 'undefined' && typeof(document.createElementNS) != 'undefined');

-	navigator.DOMHTML	= (navigator.DOMCORE1 && typeof(document.getElementById) != 'undefined');

-	navigator.DOMCSS1	= ( (navigator.family == 'gecko') || (navigator.family == 'ie4') );

-

-	navigator.DOMCSS2   = false;

-	if (navigator.DOMCORE1)

-	{

-		element = document.createElement('p');

-		navigator.DOMCSS2 = (typeof(element.style) == 'object');

-	}

-

-	navigator.DOMEVENTS	= (typeof(document.createEvent) != 'undefined');

-

-	window.onerror = oldOnError;

-}

-

-detectBrowser();

-

diff --git a/3.0.4/framework/src/org/apache/tapestry/html/Rollover.java b/3.0.4/framework/src/org/apache/tapestry/html/Rollover.java
deleted file mode 100644
index ad9388b..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/html/Rollover.java
+++ /dev/null
@@ -1,197 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.html;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import org.apache.tapestry.AbstractComponent;
-import org.apache.tapestry.ApplicationRuntimeException;
-import org.apache.tapestry.IAsset;
-import org.apache.tapestry.IEngine;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.IResourceLocation;
-import org.apache.tapestry.IScript;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.components.ILinkComponent;
-import org.apache.tapestry.components.LinkEventType;
-import org.apache.tapestry.engine.IScriptSource;
-
-/**
- *  Combines a link component (such as {@link org.apache.tapestry.link.DirectLink}) 
- *  with an &lt;img&gt; and JavaScript code
- *  to create a rollover effect that works with both Netscape Navigator and 
- *  Internet Explorer.
- *
- *  [<a href="../../../../../ComponentReference/Rollover.html">Component Reference</a>]
- *
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- * 
- **/
-
-public abstract class Rollover extends AbstractComponent
-{
-    private IScript _parsedScript;
-
-    /**
-     *  Converts an {@link IAsset} binding into a usable URL.  Returns null
-     *  if the binding does not exist or the binding's value is null.
-     *
-     **/
-
-    protected String getAssetURL(IAsset asset, IRequestCycle cycle)
-    {
-        if (asset == null)
-            return null;
-
-        return asset.buildURL(cycle);
-    }
-
-    protected void renderComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        // No body, so we skip it all if not rewinding (assumes no side effects on
-        // accessors).
-
-        if (cycle.isRewinding())
-            return;
-
-        String imageURL = null;
-        String focusURL = null;
-        String blurURL = null;
-        boolean dynamic = false;
-        String imageName = null;
-
-        Body body = Body.get(cycle);
-        if (body == null)
-            throw new ApplicationRuntimeException(
-                Tapestry.getMessage("Rollover.must-be-contained-by-body"),
-                this,
-                null,
-                null);
-
-        ILinkComponent serviceLink =
-            (ILinkComponent) cycle.getAttribute(Tapestry.LINK_COMPONENT_ATTRIBUTE_NAME);
-
-        if (serviceLink == null)
-            throw new ApplicationRuntimeException(
-                Tapestry.getMessage("Rollover.must-be-contained-by-link"),
-                this,
-                null,
-                null);
-
-        boolean linkDisabled = serviceLink.isDisabled();
-
-        if (linkDisabled)
-        {
-            imageURL = getAssetURL(getDisabled(), cycle);
-
-            if (imageURL == null)
-                imageURL = getAssetURL(getImage(), cycle);
-        }
-        else
-        {
-            imageURL = getAssetURL(getImage(), cycle);
-            focusURL = getAssetURL(getFocus(), cycle);
-            blurURL = getAssetURL(getBlur(), cycle);
-
-            dynamic = (focusURL != null) || (blurURL != null);
-        }
-
-        if (imageURL == null)
-            throw Tapestry.createRequiredParameterException(this, "image");
-
-        writer.beginEmpty("img");
-
-        writer.attribute("src", imageURL);
-
-        writer.attribute("border", 0);
-
-        if (dynamic)
-        {
-            if (focusURL == null)
-                focusURL = imageURL;
-
-            if (blurURL == null)
-                blurURL = imageURL;
-
-            imageName = writeScript(cycle, body, serviceLink, focusURL, blurURL);
-
-            writer.attribute("name", imageName);
-        }
-
-        renderInformalParameters(writer, cycle);
-
-        writer.closeTag();
-
-    }
-
-    private IScript getParsedScript()
-    {
-        if (_parsedScript == null)
-        {
-            IEngine engine = getPage().getEngine();
-            IScriptSource source = engine.getScriptSource();
-
-            IResourceLocation scriptLocation =
-                getSpecification().getSpecificationLocation().getRelativeLocation(
-                    "Rollover.script");
-
-            _parsedScript = source.getScript(scriptLocation);
-        }
-
-        return _parsedScript;
-    }
-
-    private String writeScript(
-        IRequestCycle cycle,
-        Body body,
-        ILinkComponent link,
-        String focusURL,
-        String blurURL)
-    {
-        String imageName = body.getUniqueString(getId());
-        String focusImageURL = body.getPreloadedImageReference(focusURL);
-        String blurImageURL = body.getPreloadedImageReference(blurURL);
-
-        Map symbols = new HashMap();
-
-        symbols.put("imageName", imageName);
-        symbols.put("focusImageURL", focusImageURL);
-        symbols.put("blurImageURL", blurImageURL);
-
-        getParsedScript().execute(cycle, body, symbols);
-
-        // Add attributes to the link to control mouse over/out.
-        // Because the script is written before the <body> tag,
-        // there won't be any timing issues (such as cause
-        // bug #113893).
-
-        link.addEventHandler(LinkEventType.MOUSE_OVER, (String) symbols.get("onMouseOverName"));
-        link.addEventHandler(LinkEventType.MOUSE_OUT, (String) symbols.get("onMouseOutName"));
-
-        return imageName;
-    }
-
-    public abstract IAsset getBlur();
-
-    public abstract IAsset getDisabled();
-
-    public abstract IAsset getFocus();
-
-    public abstract IAsset getImage();
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/html/Rollover.jwc b/3.0.4/framework/src/org/apache/tapestry/html/Rollover.jwc
deleted file mode 100644
index f752d7c..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/html/Rollover.jwc
+++ /dev/null
@@ -1,70 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE component-specification PUBLIC
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<component-specification class="org.apache.tapestry.html.Rollover" allow-body="no">
-
-  <description>
-  A complex image component which must be wrapped by a link component.  Rollovers
-  can reflect the enabled status of the link, and display rollover effects.
-  </description>
-
-  <parameter name="image" 
-  	type="org.apache.tapestry.IAsset" 
-  	required="yes"
-  	direction="in">
-    <description>
-    The normal or default image to display, used as a default image for
-    the other parameters.
-    </description>
-  </parameter>
-  
-  <parameter name="focus"
-  	type="org.apache.tapestry.IAsset"
-  	direction="in">
-    <description>
-    If specified, provides an image displayed when the cursor is moved
-    over the link.
-    </description>
-  </parameter>
-  
-  <parameter name="blur" 
-  	type="org.apache.tapestry.IAsset"
-  	direction="in">
-    <description>
-    If specified, provides an image displayed when the cursor is moved
-    off of the link.
-    </description>
-  </parameter>
-  
-  <parameter name="disabled"
-  	type="org.apache.tapestry.IAsset"
-  	direction="in">
-    <description>
-    If specified, provides an image displayed when the surrounding
-    link is disabled.
-    </description>
-  </parameter>
-  
-  <reserved-parameter name="name"/>
-  <reserved-parameter name="src"/>
-  <reserved-parameter name="border"/>
-  
-</component-specification>
diff --git a/3.0.4/framework/src/org/apache/tapestry/html/Rollover.script b/3.0.4/framework/src/org/apache/tapestry/html/Rollover.script
deleted file mode 100644
index fd2f641..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/html/Rollover.script
+++ /dev/null
@@ -1,54 +0,0 @@
-<?xml version="1.0"?>
-<!-- $Id$ -->
-<!DOCTYPE script PUBLIC
-	"-//Apache Software Foundation//Tapestry Script Specification 3.0//EN"
-	"http://jakarta.apache.org/tapestry/dtd/Script_3_0.dtd">
-<script>
-<!-- 
-
-input symbols:
-
-uniqueId - uniqueId used to build names
-focusImageURL - URL for focus (mouse over)
-blurImageURL - URL for blur image (mouse out)
-
-output symbols:
-
-imageName - name for the image (i.e. name attribute of <img> element)
-onMouseOverName - name of mouse over function
-onMouseOutName - name of mouse out function
-
--->
-
-<input-symbol key="imageName" class="java.lang.String" required="yes"/>
-<input-symbol key="focusImageURL" class="java.lang.String" required="yes"/>
-<input-symbol key="blurImageURL" class="java.lang.String" required="yes"/>
-
-
-<let key="onMouseOverName">
-	focus_${imageName}
-</let>
-<let key="onMouseOutName">
-	blur_${imageName}
-</let>
-
-<let key="attribute">
-	document.${imageName}.src
-</let>
-
-<body>
-
-function ${onMouseOverName}()
-{
-  if (document.images)
-    ${attribute} = ${focusImageURL};
-}
-
-function ${onMouseOutName}()
-{
-  if (document.images)
-    ${attribute} = ${blurImageURL};
-}
-
-</body>
-</script>
diff --git a/3.0.4/framework/src/org/apache/tapestry/html/Script.java b/3.0.4/framework/src/org/apache/tapestry/html/Script.java
deleted file mode 100644
index 1e56f5f..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/html/Script.java
+++ /dev/null
@@ -1,185 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.html;
-
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Map;
-
-import org.apache.tapestry.AbstractComponent;
-import org.apache.tapestry.ApplicationRuntimeException;
-import org.apache.tapestry.IBinding;
-import org.apache.tapestry.IEngine;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.IResourceLocation;
-import org.apache.tapestry.IScript;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.engine.IScriptSource;
-
-/**
- *  Works with the {@link Body} component to add a script (and perhaps some initialization) 
- *  to the HTML response.
- *
- *  [<a href="../../../../../ComponentReference/Script.html">Component Reference</a>]
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *
- **/
-
-public abstract class Script extends AbstractComponent
-{
-    private Map _baseSymbols;
-
-    /**
-     *  A Map of input and output symbols visible to the body of the Script.
-     * 
-     *  @since 2.2
-     * 
-     **/
-
-    private Map _symbols;
-
-    /**
-     *  Constructs the symbols {@link Map}.  This starts with the
-     *  contents of the symbols parameter (if specified) to which is added
-     *  any informal parameters.  If both a symbols parameter and informal
-     *  parameters are bound, then a copy of the symbols parameter's value is made
-     *  (that is, the {@link Map} provided by the symbols parameter is read, but not modified).
-     *
-     **/
-
-    private Map getInputSymbols()
-    {
-        Map result = new HashMap();
-
-        if (_baseSymbols != null)
-            result.putAll(_baseSymbols);
-
-        // Now, iterate through all the binding names (which includes both
-        // formal and informal parmeters).  Skip the formal ones and
-        // access the informal ones.
-
-        Iterator i = getBindingNames().iterator();
-        while (i.hasNext())
-        {
-            String bindingName = (String) i.next();
-
-            // Skip formal parameters
-
-            if (getSpecification().getParameter(bindingName) != null)
-                continue;
-
-            IBinding binding = getBinding(bindingName);
-
-            Object value = binding.getObject();
-
-            result.put(bindingName, value);
-        }
-
-        return result;
-    }
-
-    /**
-     *  Gets the {@link IScript} for the correct script.
-     *
-     *
-     **/
-
-    private IScript getParsedScript(IRequestCycle cycle)
-    {
-        String scriptPath = getScriptPath();
-
-        if (scriptPath == null)
-            throw Tapestry.createRequiredParameterException(this, "scriptPath");
-
-        IEngine engine = cycle.getEngine();
-        IScriptSource source = engine.getScriptSource();
-
-        // If the script path is relative, it should be relative to the Script component's
-        // container (i.e., relative to a page in the application).
-
-        IResourceLocation rootLocation =
-            getContainer().getSpecification().getSpecificationLocation();
-        IResourceLocation scriptLocation = rootLocation.getRelativeLocation(scriptPath);
-
-        try
-        {
-            return source.getScript(scriptLocation);
-        }
-        catch (RuntimeException ex)
-        {
-            throw new ApplicationRuntimeException(ex.getMessage(), this, null, ex);
-        }
-
-    }
-
-    protected void renderComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        if (!cycle.isRewinding())
-        {
-            Body body = Body.get(cycle);
-
-            if (body == null)
-                throw new ApplicationRuntimeException(
-                    Tapestry.getMessage("Script.must-be-contained-by-body"),
-                    this,
-                    null,
-                    null);
-
-            _symbols = getInputSymbols();
-
-            getParsedScript(cycle).execute(cycle, body, _symbols);
-        }
-
-        // Render the body of the Script;
-        renderBody(writer, cycle);
-    }
-
-    public abstract String getScriptPath();
-
-    public Map getBaseSymbols()
-    {
-        return _baseSymbols;
-    }
-
-    public void setBaseSymbols(Map baseSymbols)
-    {
-        _baseSymbols = baseSymbols;
-    }
-
-    /**
-     *  Returns the complete set of symbols (input and output)
-     *  from the script execution.  This is visible to the body
-     *  of the Script, but is cleared after the Script
-     *  finishes rendering.
-     * 
-     *  @since 2.2
-     **/
-
-    public Map getSymbols()
-    {
-        return _symbols;
-    }
-
-    protected void cleanupAfterRender(IRequestCycle cycle)
-    {
-        _symbols = null;
-
-        super.cleanupAfterRender(cycle);
-    }
-
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/html/Script.jwc b/3.0.4/framework/src/org/apache/tapestry/html/Script.jwc
deleted file mode 100644
index 937850e..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/html/Script.jwc
+++ /dev/null
@@ -1,48 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE component-specification PUBLIC
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-  
-<component-specification class="org.apache.tapestry.html.Script" allow-body="yes">
-
-  <description>
-  Constructs dynamic JavaScript which is added to the page.
-  </description>
-  
-  <parameter name="script" 
-  	property-name="scriptPath"
-  	type="java.lang.String" 
-  	required="yes" 
-  	direction="in">
-    <description>
-    The resource path of the script to execute.
-    </description>
-  </parameter>
-
-  <parameter name="symbols"
-  	property-name="baseSymbols"
-  	type="java.util.Map" 
-  	direction="in">
-    <description>
-    Provides a base set of symbols to which, in a copy, are added
-    any informal parameters.
-    </description>
-  </parameter>
-
-</component-specification>
diff --git a/3.0.4/framework/src/org/apache/tapestry/html/Shell.java b/3.0.4/framework/src/org/apache/tapestry/html/Shell.java
deleted file mode 100644
index eba3eb9..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/html/Shell.java
+++ /dev/null
@@ -1,208 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.html;
-
-import java.util.Date;
-import java.util.Iterator;
-
-import org.apache.tapestry.AbstractComponent;
-import org.apache.tapestry.IAsset;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IPage;
-import org.apache.tapestry.IRender;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.engine.IEngineService;
-import org.apache.tapestry.engine.ILink;
-
-/**
- *  Component for creating a standard 'shell' for a page, which comprises
- *  the &lt;html&gt; and &lt;head&gt; portions of the page.
- * 
- *  [<a href="../../../../../ComponentReference/Shell.html">Component Reference</a>]
- *
- *  <p>Specifically does <em>not</em> provide a &lt;body&gt; tag, that is
- *  usually accomplished using a {@link Body} component.
- *
- *  @version $Id$
- *  @author Howard Lewis Ship
- * 
- **/
-
-public abstract class Shell extends AbstractComponent
-{
-
-    private static final String generatorContent =
-        "Tapestry Application Framework, version " + Tapestry.VERSION;
-
-    protected void renderComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        long startTime = 0;
-
-        boolean rewinding = cycle.isRewinding();
-
-        if (!rewinding)
-        {
-            startTime = System.currentTimeMillis();
-
-            writeDocType(writer, cycle);
-
-            IPage page = getPage();
-
-            writer.comment("Application: " + page.getEngine().getSpecification().getName());
-
-            writer.comment("Page: " + page.getPageName());
-            writer.comment("Generated: " + new Date());
-
-            writer.begin("html");
-            renderInformalParameters(writer, cycle);
-            writer.println();
-            writer.begin("head");
-            writer.println();
-
-            writer.beginEmpty("meta");
-            writer.attribute("name", "generator");
-            writer.attribute("content", generatorContent);
-            writer.println();
-
-            if (getRenderContentType()) {
-                // This should not be necessary (the HTTP content type should be sufficient), 
-                // but some browsers require it for some reason
-                writer.beginEmpty("meta");
-                writer.attribute("http-equiv", "Content-Type");
-                writer.attribute("content", writer.getContentType());
-                writer.println();
-            }
-
-            writer.begin("title");
-
-            writer.print(getTitle());
-            writer.end(); // title
-            writer.println();
-
-            IRender delegate = getDelegate();
-
-            if (delegate != null)
-                delegate.render(writer, cycle);
-
-            IAsset stylesheet = getStylesheet();
-
-            if (stylesheet != null)
-                writeStylesheetLink(writer, cycle, stylesheet);
-
-            Iterator i = Tapestry.coerceToIterator(getStylesheets());
-
-            if (i != null)
-            {
-                while (i.hasNext())
-                {
-                    stylesheet = (IAsset) i.next();
-
-                    writeStylesheetLink(writer, cycle, stylesheet);
-                }
-            }
-
-            writeRefresh(writer, cycle);
-
-            writer.end(); // head
-        }
-
-        // Render the body, the actual page content
-
-        renderBody(writer, cycle);
-
-        if (!rewinding)
-        {
-            writer.end(); // html
-            writer.println();
-
-            long endTime = System.currentTimeMillis();
-
-            writer.comment("Render time: ~ " + (endTime - startTime) + " ms");
-        }
-
-    }
-
-    private void writeDocType(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        // This code is deprecated and is here only for backward compatibility
-        String DTD = getDTD();
-        if (Tapestry.isNonBlank(DTD)) {
-            writer.printRaw("<!DOCTYPE HTML PUBLIC \"" + DTD + "\">");
-            writer.println();
-            return;
-        }
-
-        // This is the real code
-        String doctype = getDoctype();
-        if (Tapestry.isNonBlank(doctype)) {
-            writer.printRaw("<!DOCTYPE " + doctype + ">");
-            writer.println();
-        }
-    }
-
-    private void writeStylesheetLink(IMarkupWriter writer, IRequestCycle cycle, IAsset stylesheet)
-    {
-        writer.beginEmpty("link");
-        writer.attribute("rel", "stylesheet");
-        writer.attribute("type", "text/css");
-        writer.attribute("href", stylesheet.buildURL(cycle));
-        writer.println();
-    }
-
-    private void writeRefresh(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        int refresh = getRefresh();
-
-        if (refresh <= 0)
-            return;
-
-        // Here comes the tricky part ... have to assemble a complete URL
-        // for the current page.
-
-        IEngineService pageService = cycle.getEngine().getService(Tapestry.PAGE_SERVICE);
-        String pageName = getPage().getPageName();
-
-        ILink link = pageService.getLink(cycle, null, new String[] { pageName });
-
-        StringBuffer buffer = new StringBuffer();
-        buffer.append(refresh);
-        buffer.append("; URL=");
-        buffer.append(link.getAbsoluteURL());
-
-        // Write out the <meta> tag
-
-        writer.beginEmpty("meta");
-        writer.attribute("http-equiv", "Refresh");
-        writer.attribute("content", buffer.toString());
-    }
-
-    public abstract IRender getDelegate();
-
-    public abstract int getRefresh();
-
-    public abstract IAsset getStylesheet();
-
-    public abstract String getTitle();
-
-    public abstract String getDoctype();
-
-    public abstract String getDTD();
-
-    public abstract Object getStylesheets();
-
-    public abstract boolean getRenderContentType();
-    
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/html/Shell.jwc b/3.0.4/framework/src/org/apache/tapestry/html/Shell.jwc
deleted file mode 100644
index 65b7894..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/html/Shell.jwc
+++ /dev/null
@@ -1,105 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<component-specification class="org.apache.tapestry.html.Shell" allow-informal-parameters="yes">
-
-  <description>
-  Provides the outer tags in an HTML page: &lt;html&gt;, &lt;head&gt; and &lt;title&gt;.
-  </description>
-
-  <parameter name="title" 
-  	type="java.lang.String" 
-  	required="yes"
-  	direction="in">
-    <description>
-    The title for the page.
-    </description>
-  </parameter>
-  
-  <parameter name="stylesheet" 
-  	type="org.apache.tapestry.IAsset"
-  	direction="in">
-    <description>
-    If specified, provides an external stylesheet for the page.
-    </description>
-  </parameter>
-  
-  <parameter name="stylesheets" type="java.lang.Object" direction="in">
-  	<description>
-  	Array or collection of stylesheet assets.
-  	</description>	
-  </parameter>
-
-  <parameter name="doctype" 
-  	type="java.lang.String"
-  	direction="in"
-  	default-value='"HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\""'>
-    <description>
-    Used to specify the full definition of the DOCTYPE element in the response page,
-    for example 'math SYSTEM "http://www.w3.org/Math/DTD/mathml1/mathml.dtd"' 
-
-    The list of currently valid DOCTYPE settings can be found here:
-    http://www.w3.org/QA/2002/04/valid-dtd-list.html
-
-    If the parameter is null or empty, no DOCTYPE tag will be rendered
-    </description>
-  </parameter>
-
-  <parameter name="DTD" 
-  	type="java.lang.String"
-  	direction="in"
-  	default-value='null'>
-    <description>
-    This parameter is deprecated. Please use the 'doctype' parameter instead.
-
-    Used to specify the DOCTYPE DTD of the response page.
-    </description>
-  </parameter>
-  
-  <parameter 
-  	name="renderContentType" 
-  	type="boolean"
-  	direction="in"
-  	default-value="true">
-    <description>
-    Determines whether to render an http-equiv element with the Content Type of this response.
-    </description>
-  </parameter>
-  
-  <parameter 
-  	name="refresh" 
-  	type="int"
-  	direction="in">
-    <description>
-    If specified, the page will refresh itself after the specified delay (in seconds).
-    </description>
-  </parameter>
-  
-  <parameter 
-  	name="delegate" 
-  	type="org.apache.tapestry.IRender"
-  	direction="in">
-    <description>
-    If specified, the delegate is rendered before the close of the &lt;head&gt;
-    tag (typically used to provide &lt;meta&gt; tags).
-    </description>
-  </parameter>
-  
-</component-specification>
diff --git a/3.0.4/framework/src/org/apache/tapestry/html/package.html b/3.0.4/framework/src/org/apache/tapestry/html/package.html
deleted file mode 100644
index a74d010..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/html/package.html
+++ /dev/null
@@ -1,15 +0,0 @@
-<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN">
-<!-- $Id$ -->
-<html>
-<head>
-<title>Tapestry: Web Application Framework</title>
-</head>
-<body>
-
-<p>Components specific to the creation of HTML pages, including sophisticated
-DHTML JavaScript effects.
-
-@author Howard Lewis Ship <a href="mailto:hlship@apache.org">hlship@apache.org</a>
-
-</body>
-</html>
diff --git a/3.0.4/framework/src/org/apache/tapestry/jsp/AbstractLinkTag.java b/3.0.4/framework/src/org/apache/tapestry/jsp/AbstractLinkTag.java
deleted file mode 100644
index dfda6d6..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/jsp/AbstractLinkTag.java
+++ /dev/null
@@ -1,119 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.jsp;
-
-import java.io.IOException;
-
-import javax.servlet.jsp.JspException;
-import javax.servlet.jsp.JspWriter;
-
-import org.apache.tapestry.Tapestry;
-
-/**
- *  Abstract super-class of Tapestry JSP tags that produce a hyperlink
- *  (<code>&lt;a&gt;</code>) tag.  Tags use a
- *  {@link org.apache.tapestry.jsp.URLRetriever} for the <code>href</code>
- *  attribute, and may include a 
- *  <code>class</code> attribute (based on
- *  the {@link #getStyleClass() styleClass property}.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 3.0
- *
- **/
-
-public abstract class AbstractLinkTag extends AbstractTapestryTag
-{
-    private String _styleClass;
-
-    public String getStyleClass()
-    {
-        return _styleClass;
-    }
-
-    public void setStyleClass(String styleClass)
-    {
-        _styleClass = styleClass;
-    }
-
-    /**
-    *  Writes a <code>&lt;/a&gt;</code> tag.
-    * 
-    *  @return {@link javax.servlet.jsp.tagext.Tag#EVAL_PAGE}
-    * 
-    **/
-
-    public int doEndTag() throws JspException
-    {
-        JspWriter out = pageContext.getOut();
-
-        try
-        {
-            out.print("</a>");
-        }
-        catch (IOException ex)
-        {
-            throw new JspException(
-                Tapestry.format("AbstractLinkTag.io-exception", ex.getMessage()));
-        }
-
-        return EVAL_PAGE;
-    }
-
-    /**
-    *  Writes a <code>&lt;a&gt; tag.  The tag may
-    *  have a <code>class</code> attribute if the
-    *  {@link #getStyleClass() styleClass property}
-    *  is not null.  The <code>href</code>
-    *  attribute is provided via
-    *  a {@link #getURLRetriever() URLRetriever}.
-    * 
-    *  @return {@link javax.servlet.jsp.tagext.Tag#EVAL_BODY_INCLUDE}
-    * 
-    **/
-
-    public int doStartTag() throws JspException
-    {
-        JspWriter out = pageContext.getOut();
-
-        try
-        {
-            out.print("<a");
-
-            if (_styleClass != null)
-            {
-                out.print(" class=\"");
-                out.print(_styleClass);
-                out.print('"');
-            }
-
-            out.print(" href=\"");
-
-            getURLRetriever().insertURL(getServlet());
-
-            // And we're back!  Finish off the tag.
-
-            out.print("\">");
-        }
-        catch (IOException ex)
-        {
-            throw new JspException(
-                Tapestry.format("AbstractLinkTag.io-exception", ex.getMessage()));
-        }
-
-        return EVAL_BODY_INCLUDE;
-    }
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/jsp/AbstractTapestryTag.java b/3.0.4/framework/src/org/apache/tapestry/jsp/AbstractTapestryTag.java
deleted file mode 100644
index 8bbed55..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/jsp/AbstractTapestryTag.java
+++ /dev/null
@@ -1,163 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.jsp;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-
-import javax.servlet.jsp.JspException;
-import javax.servlet.jsp.tagext.TagSupport;
-
-import ognl.ClassResolver;
-import ognl.DefaultClassResolver;
-
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.link.DirectLink;
-import org.apache.tapestry.parse.TemplateParser;
-import org.apache.tapestry.util.prop.OgnlUtils;
-
-/**
- *  Contains common code and methods for all the Tapestry JSP tag implementations.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 3.0
- *
- **/
-
-public abstract class AbstractTapestryTag extends TagSupport
-{
-
-    private String _servlet = "/app";
-
-    public String getServlet()
-    {
-        return _servlet;
-    }
-
-    public void setServlet(String servlet)
-    {
-        _servlet = servlet;
-    }
-
-    /**
-     *  Implemented in subclasses to provide a 
-     *  {@link org.apache.tapestry.jsp.URLRetriever} instance that
-     *  can insert the correct URL into the output.
-     * 
-     **/
-
-    protected abstract URLRetriever getURLRetriever() throws JspException;
-
-    /**
-     *  Builds an object array appropriate for use as the service parameters
-     *  for the external service. The first object in the array is the name
-     *  of the page.  Any additional objects are service parameters to be
-     *  supplied to the listener method.
-     * 
-     *  <p>
-     *  The parameters are converted to an array of objects
-     *  via {@link #convertParameters(String)}.
-     * 
-     **/
-
-    protected Object[] constructExternalServiceParameters(String pageName, String parameters)
-        throws JspException
-    {
-
-        Object[] resolvedParameters = convertParameters(parameters);
-
-        int count = Tapestry.size(resolvedParameters);
-
-        if (count == 0)
-            return new Object[] { pageName };
-
-        List list = new ArrayList();
-        list.add(pageName);
-
-        for (int i = 0; i < count; i++)
-            list.add(resolvedParameters[i]);
-
-        return list.toArray();
-    }
-
-    /**
-     *  <p>The external service allows service parameters (an array of
-     *  objects) to be passed along inside the URL.  This method converts
-     *  the input string into an array of parameter objects.
-     *  <ul>
-     *  <li>If parameters is null, the no parameters are passed
-     *  <li>If parameters starts with "ognl:" it is treated as an OGNL expression:
-     *     <ul>
-     *     <li>The expression is evaluated using the 
-     *         {@link javax.servlet.jsp.PageContext page context} as the root object
-     *     <li>If the expression value is a Map, then the Map is converted to
-     *  	   an array via (@link org.apache.tapestry.Tapestry#convertMapToArray(Map)}
-     *     <li>Otherwise, the expression value is converted using
-     *  {@link org.apache.tapestry.link.DirectLink#constructServiceParameters(Object)}.
-     * 		</ul>
-     *   <li>Otherwise, parameters are simply a string, which is included as the lone
-     *  service parameter
-     *  </ul>
-     **/
-
-    protected Object[] convertParameters(String _parameters) throws JspException
-    {
-        if (_parameters == null)
-            return null;
-
-        if (_parameters.startsWith(TemplateParser.OGNL_EXPRESSION_PREFIX))
-        {
-            String expression =
-                _parameters.substring(TemplateParser.OGNL_EXPRESSION_PREFIX.length() + 1);
-
-            return convertExpression(expression);
-        }
-
-        return new Object[] { _parameters };
-    }
-
-    private Object[] convertExpression(String expression) throws JspException
-    {
-        Object value = evaluateExpression(expression);
-
-        if (value == null)
-            return null;
-
-        if (value instanceof Map)
-            return Tapestry.convertMapToArray((Map) value);
-
-        return DirectLink.constructServiceParameters(value);
-    }
-
-    private Object evaluateExpression(String expression) throws JspException
-    {
-        ClassResolver resolver = new DefaultClassResolver();
-
-        try
-        {
-            return OgnlUtils.get(expression, resolver, pageContext);
-        }
-        catch (Throwable t)
-        {
-            throw new JspException(
-                Tapestry.format(
-                    "AbstractTapestryTag.unable-to-evaluate-expression",
-                    expression,
-                    t.getMessage()));
-        }
-    }
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/jsp/AbstractURLTag.java b/3.0.4/framework/src/org/apache/tapestry/jsp/AbstractURLTag.java
deleted file mode 100644
index f516312..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/jsp/AbstractURLTag.java
+++ /dev/null
@@ -1,42 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.jsp;
-
-import javax.servlet.jsp.JspException;
-
-/**
- *  Base class for tags which simply insert a URL into the output.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 3.0
- *
- **/
-
-public abstract class AbstractURLTag extends AbstractTapestryTag
-{
-
-    /**
-	 *  Inserts the URL and returns {@link javax.servlet.jsp.tagext.Tag#SKIP_BODY}.
-	 * 
-	 **/
-	
-    public int doStartTag() throws JspException
-    {
-        getURLRetriever().insertURL(getServlet());
-        
-        return SKIP_BODY;
-    }
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/jsp/ExternalTag.java b/3.0.4/framework/src/org/apache/tapestry/jsp/ExternalTag.java
deleted file mode 100644
index 6dd80e4..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/jsp/ExternalTag.java
+++ /dev/null
@@ -1,63 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.jsp;
-
-import javax.servlet.jsp.JspException;
-
-import org.apache.tapestry.Tapestry;
-
-/**
- *  JSP tag that makes use of the Tapestry external service.
- *  Parameters may be passed in the URL.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 3.0
- *
- **/
-
-public class ExternalTag extends AbstractLinkTag
-{
-    private String _parameters;
-    private String _page;
-
-    protected URLRetriever getURLRetriever() throws JspException
-    {
-        return new URLRetriever(pageContext, Tapestry.EXTERNAL_SERVICE, 
-        constructExternalServiceParameters(_page, _parameters));
-    }
-
-
-    public void setParameters(String parameters)
-    {
-        _parameters = parameters;
-    }
-
-    public String getPage()
-    {
-        return _page;
-    }
-
-    public void setPage(String page)
-    {
-        _page = page;
-    }
-
-    public String getParameters()
-    {
-        return _parameters;
-    }
-
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/jsp/ExternalURLTag.java b/3.0.4/framework/src/org/apache/tapestry/jsp/ExternalURLTag.java
deleted file mode 100644
index 9999453..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/jsp/ExternalURLTag.java
+++ /dev/null
@@ -1,64 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.jsp;
-
-import javax.servlet.jsp.JspException;
-
-import org.apache.tapestry.Tapestry;
-
-/**
- *  Like the {@link org.apache.tapestry.jsp.ExternalTag}, but inserts just
- *  the URL.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 3.0
- *
- **/
-public class ExternalURLTag extends AbstractURLTag
-{
-
-    private String _parameters;
-    private String _page;
-
-    protected URLRetriever getURLRetriever() throws JspException
-    {
-        return new URLRetriever(
-            pageContext,
-            Tapestry.EXTERNAL_SERVICE,
-            constructExternalServiceParameters(_page, _parameters));
-    }
-
-    public void setParameters(String parameters)
-    {
-        _parameters = parameters;
-    }
-
-    public String getPage()
-    {
-        return _page;
-    }
-
-    public void setPage(String page)
-    {
-        _page = page;
-    }
-
-    public String getParameters()
-    {
-        return _parameters;
-    }
-
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/jsp/PageTag.java b/3.0.4/framework/src/org/apache/tapestry/jsp/PageTag.java
deleted file mode 100644
index 5e587ad..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/jsp/PageTag.java
+++ /dev/null
@@ -1,47 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.jsp;
-
-import org.apache.tapestry.Tapestry;
-
-/**
- *  Creates a link from a JSP page to a Tapestry application page.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 3.0
- *
- **/
-
-public class PageTag extends AbstractLinkTag
-{
-    private String _page;
-
-    public String getPage()
-    {
-        return _page;
-    }
-
-    public void setPage(String pageName)
-    {
-        _page = pageName;
-    }
-
-    protected URLRetriever getURLRetriever()
-    {
-        return new URLRetriever(pageContext, Tapestry.PAGE_SERVICE, new String[] { _page });
-    }
-
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/jsp/PageURLTag.java b/3.0.4/framework/src/org/apache/tapestry/jsp/PageURLTag.java
deleted file mode 100644
index 721820f..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/jsp/PageURLTag.java
+++ /dev/null
@@ -1,49 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.jsp;
-
-import javax.servlet.jsp.JspException;
-
-import org.apache.tapestry.Tapestry;
-
-/**
- *  Inserts just the URL for a page service request into the output.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 3.0
- *
- **/
-
-public class PageURLTag extends AbstractURLTag
-{
-	private String _page;	
-
-    protected URLRetriever getURLRetriever() throws JspException
-    {
-        return new URLRetriever(pageContext, Tapestry.PAGE_SERVICE, new String[] { _page });
-    }
-
-    public String getPage()
-    {
-        return _page;
-    }
-
-    public void setPage(String page)
-    {
-        _page = page;
-    }
-
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/jsp/URLRetriever.java b/3.0.4/framework/src/org/apache/tapestry/jsp/URLRetriever.java
deleted file mode 100644
index ad45431..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/jsp/URLRetriever.java
+++ /dev/null
@@ -1,102 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.jsp;
-
-import java.io.IOException;
-
-import javax.servlet.RequestDispatcher;
-import javax.servlet.ServletException;
-import javax.servlet.ServletRequest;
-import javax.servlet.jsp.JspException;
-import javax.servlet.jsp.PageContext;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.tapestry.Tapestry;
-
-/**
- *  Encapsulates the process of calling into the Tapestry servlet to retrieve
- *  a URL.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 3.0
- *
- **/
-public class URLRetriever
-{
-    private static final Log LOG = LogFactory.getLog(URLRetriever.class);
-
-    private PageContext _pageContext;
-    private String _serviceName;
-    private Object[] _serviceParameters;
-
-    public URLRetriever(PageContext pageContext, String serviceName, Object[] serviceParameters)
-    {
-        _pageContext = pageContext;
-        _serviceName = serviceName;
-        _serviceParameters = serviceParameters;
-    }
-
-    /**
-     *  Invokes the servlet to retrieve the URL.  The URL is inserted
-     *  into the output (as with
-     *  {@link RequestDispatcher#include(javax.servlet.ServletRequest, javax.servlet.ServletResponse)}). 
-     * 
-     *
-     **/
-
-    public void insertURL(String servletPath) throws JspException
-    {
-        if (LOG.isDebugEnabled())
-            LOG.debug("Obtaining Tapestry URL for service " + _serviceName + " at " + servletPath);
-
-        ServletRequest request = _pageContext.getRequest();
-
-        RequestDispatcher dispatcher = request.getRequestDispatcher(servletPath);
-
-        if (dispatcher == null)
-            throw new JspException(
-                Tapestry.format("URLRetriever.unable-to-find-dispatcher", servletPath));
-
-        request.setAttribute(Tapestry.TAG_SUPPORT_SERVICE_ATTRIBUTE, _serviceName);
-        request.setAttribute(Tapestry.TAG_SUPPORT_PARAMETERS_ATTRIBUTE, _serviceParameters);
-        request.setAttribute(Tapestry.TAG_SUPPORT_SERVLET_PATH_ATTRIBUTE, servletPath);
-
-        try
-        {
-            _pageContext.getOut().flush();
-
-            dispatcher.include(request, _pageContext.getResponse());
-        }
-        catch (IOException ex)
-        {
-            throw new JspException(
-                Tapestry.format("URLRetriever.io-exception", servletPath, ex.getMessage()));
-        }
-        catch (ServletException ex)
-        {
-            throw new JspException(
-                Tapestry.format("URLRetriever.servlet-exception", servletPath, ex.getMessage()));
-        }
-        finally
-        {
-            request.removeAttribute(Tapestry.TAG_SUPPORT_SERVICE_ATTRIBUTE);
-            request.removeAttribute(Tapestry.TAG_SUPPORT_PARAMETERS_ATTRIBUTE);
-            request.removeAttribute(Tapestry.TAG_SUPPORT_SERVLET_PATH_ATTRIBUTE);
-        }
-
-    }
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/jsp/package.html b/3.0.4/framework/src/org/apache/tapestry/jsp/package.html
deleted file mode 100644
index bd9219b..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/jsp/package.html
+++ /dev/null
@@ -1,12 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-
-<html>
-<body>
-
-A simple JSP tag library that allows JSPs to include links to a Tapestry application.
-Currently supports just the page and external services.
-
-@author Howard Lewis Ship <a href="mailto:hlship@apache.org">hlship@apache.org</a>
-
-</body>
-</html>
diff --git a/3.0.4/framework/src/org/apache/tapestry/link/AbsoluteLinkRenderer.java b/3.0.4/framework/src/org/apache/tapestry/link/AbsoluteLinkRenderer.java
deleted file mode 100644
index 709ee1c..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/link/AbsoluteLinkRenderer.java
+++ /dev/null
@@ -1,94 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.link;
-
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.engine.ILink;
-
-/**
- *  Renders a link using an absolute URL, not simply a URI
- *  (as with {@link org.apache.tapestry.link.DefaultLinkRenderer}.  In addition,
- *  the scheme, server and port may be changed (this may be appropriate when
- *  switching between secure and insecure portions of an application).
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 3.0
- * 
- **/
-
-public class AbsoluteLinkRenderer extends DefaultLinkRenderer
-{
-    private String _scheme;
-    private String _serverName;
-    private int _port;
-
-    public int getPort()
-    {
-        return _port;
-    }
-
-    public String getScheme()
-    {
-        return _scheme;
-    }
-
-    public String getServerName()
-    {
-        return _serverName;
-    }
-
-    /**
-     *  Used to override the port in the final URL, if specified.  If not specified,
-     *  the port provided by the {@link javax.servlet.ServletRequest#getServerPort() request}
-     *  is used (typically, the value 80).
-     *
-     **/
-
-    public void setPort(int port)
-    {
-        _port = port;
-    }
-    
-    /**
-     *  Used to override the scheme in the final URL, if specified.  If not specified,
-     *  the scheme provided by the {@link javax.servlet.ServletRequest#getScheme() request}
-     *  is used (typically, <code>http</code>).
-     *
-     **/
-
-    public void setScheme(String scheme)
-    {
-        _scheme = scheme;
-    }
-
-    /**
-     *  Used to override the server name in the final URL, if specified.  If not specified,
-     *  the port provided by the {@link javax.servlet.ServletRequest#getServerName() request}
-     *  is used.
-     *
-     **/
-
-    public void setServerName(String serverName)
-    {
-        _serverName = serverName;
-    }
-
-    protected String constructURL(ILink link, String anchor, IRequestCycle cycle)
-    {
-        return link.getAbsoluteURL(_scheme, _serverName, _port, anchor, true);
-    }
-
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/link/AbstractLinkComponent.java b/3.0.4/framework/src/org/apache/tapestry/link/AbstractLinkComponent.java
deleted file mode 100644
index ccbb76e..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/link/AbstractLinkComponent.java
+++ /dev/null
@@ -1,234 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.link;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.tapestry.AbstractComponent;
-import org.apache.tapestry.ApplicationRuntimeException;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.components.ILinkComponent;
-import org.apache.tapestry.components.LinkEventType;
-import org.apache.tapestry.engine.IEngineService;
-import org.apache.tapestry.engine.ILink;
-import org.apache.tapestry.html.Body;
-
-/**
- *  Base class for
- *  implementations of {@link ILinkComponent}.  Includes a disabled attribute
- *  (that should be bound to a disabled parameter), 
- *  an anchor attribute, and a
- *  renderer attribute (that should be bound to a renderer parameter).  A default,
- *  shared instance of {@link org.apache.tapestry.link.DefaultLinkRenderer} is
- *  used when no specific renderer is provided.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *
- **/
-
-public abstract class AbstractLinkComponent extends AbstractComponent implements ILinkComponent
-{
-    private Map _eventHandlers;
-
-    public abstract boolean isDisabled();
-
-    /**
-     *  Adds an event handler (typically, from a wrapped component such
-     *  as a {@link org.apache.tapestry.html.Rollover}).
-     *
-     **/
-
-    public void addEventHandler(LinkEventType eventType, String functionName)
-    {
-        Object currentValue;
-
-        if (_eventHandlers == null)
-            _eventHandlers = new HashMap();
-
-        currentValue = _eventHandlers.get(eventType);
-
-        // The first value is added as a String
-
-        if (currentValue == null)
-        {
-            _eventHandlers.put(eventType, functionName);
-            return;
-        }
-
-        // When adding the second value, convert to a List
-
-        if (currentValue instanceof String)
-        {
-            List list = new ArrayList();
-            list.add(currentValue);
-            list.add(functionName);
-
-            _eventHandlers.put(eventType, list);
-            return;
-        }
-
-        // For the third and up, add the new function to the List
-
-        List list = (List) currentValue;
-        list.add(functionName);
-    }
-
-    /**
-     *  Renders the link by delegating to an instance
-     *  of {@link ILinkRenderer}.
-     *
-     **/
-
-    protected void renderComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        getRenderer().renderLink(writer, cycle, this);
-    }
-
-    protected void cleanupAfterRender(IRequestCycle cycle)
-    {
-        _eventHandlers = null;
-
-        super.cleanupAfterRender(cycle);
-    }
-
-    protected void writeEventHandlers(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        String name = null;
-
-        if (_eventHandlers == null)
-            return;
-
-        Body body = Body.get(cycle);
-
-        if (body == null)
-            throw new ApplicationRuntimeException(
-                Tapestry.getMessage("AbstractLinkComponent.events-need-body"),
-                this,
-                null,
-                null);
-
-        Iterator i = _eventHandlers.entrySet().iterator();
-
-        while (i.hasNext())
-        {
-            Map.Entry entry = (Map.Entry) i.next();
-            LinkEventType type = (LinkEventType) entry.getKey();
-
-            name = writeEventHandler(writer, body, name, type.getAttributeName(), entry.getValue());
-        }
-
-    }
-
-    protected String writeEventHandler(
-        IMarkupWriter writer,
-        Body body,
-        String name,
-        String attributeName,
-        Object value)
-    {
-        String wrapperFunctionName;
-
-        if (value instanceof String)
-        {
-            wrapperFunctionName = (String) value;
-        }
-        else
-        {
-            String finalName = name == null ? body.getUniqueString("Link") : name;
-
-            wrapperFunctionName = attributeName + "_" + finalName;
-
-            StringBuffer buffer = new StringBuffer();
-
-            buffer.append("function ");
-            buffer.append(wrapperFunctionName);
-            buffer.append(" ()\n{\n");
-
-            Iterator i = ((List) value).iterator();
-            while (i.hasNext())
-            {
-                String functionName = (String) i.next();
-                buffer.append("  ");
-                buffer.append(functionName);
-                buffer.append("();\n");
-            }
-
-            buffer.append("}\n\n");
-
-            body.addBodyScript(buffer.toString());
-        }
-
-        writer.attribute(attributeName, "javascript:" + wrapperFunctionName + "();");
-
-        return name;
-    }
-
-    /** @since 3.0 **/
-
-    public abstract ILinkRenderer getRenderer();
-
-    public abstract void setRenderer(ILinkRenderer renderer);
-
-    public void renderAdditionalAttributes(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        writeEventHandlers(writer, cycle);
-
-        // Generate additional attributes from informal parameters.
-
-        renderInformalParameters(writer, cycle);
-    }
-
-    /**
-     *  Utility method for subclasses; Gets the named service from the engine
-     *  and invokes {@link IEngineService#getLink(IRequestCycle, org.apache.tapestry.IComponent, Object[])}
-     *  on it.
-     * 
-     *  @since 3.0
-     * 
-     **/
-
-    protected ILink getLink(IRequestCycle cycle, String serviceName, Object[] serviceParameters)
-    {
-        IEngineService service = cycle.getEngine().getService(serviceName);
-
-        return service.getLink(cycle, this, serviceParameters);
-    }
-
-    public abstract String getAnchor();
-
-    public ILink getLink(IRequestCycle cycle)
-    {
-        return null;
-    }
-
-    /**
-     * Sets the renderer parameter property to its default value
-     * {@link DefaultLinkRenderer#SHARED_INSTANCE}.
-     * 
-     * @since 3.0
-     */
-    protected void finishLoad()
-    {
-        setRenderer(DefaultLinkRenderer.SHARED_INSTANCE);
-    }
-
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/link/ActionLink.java b/3.0.4/framework/src/org/apache/tapestry/link/ActionLink.java
deleted file mode 100644
index fa01d01..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/link/ActionLink.java
+++ /dev/null
@@ -1,77 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.link;
-
-import org.apache.tapestry.IAction;
-import org.apache.tapestry.IActionListener;
-import org.apache.tapestry.IBinding;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.RenderRewoundException;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.engine.ILink;
-
-/**
- *  A component for creating a link that is handled using the action service.
- * 
- *  [<a href="../../../../../ComponentReference/ActionLink.html">Component Reference</a>]
- *
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *
- **/
-
-public abstract class ActionLink extends AbstractLinkComponent implements IAction
-{
-    /**
-     *  Returns true if the stateful parameter is bound to
-     *  a true value.  If stateful is not bound, also returns
-     *  the default, true.
-     * 
-     *  <p>Note that this method can be called when the
-     *  component is not rendering, therefore it must
-     *  directly access the {@link IBinding} for the stateful
-     *  parameter.
-     *
-     **/
-
-    public boolean getRequiresSession()
-    {
-    	IBinding statefulBinding = getStatefulBinding();
-    	
-        if (statefulBinding == null)
-            return true;
-
-        return statefulBinding.getBoolean();
-    }
-
-    public ILink getLink(IRequestCycle cycle)
-    {
-        String actionId = cycle.getNextActionId();
-
-        if (cycle.isRewound(this))
-        {
-            getListener().actionTriggered(this, cycle);
-
-            throw new RenderRewoundException(this);
-        }
-
-        return getLink(cycle, Tapestry.ACTION_SERVICE, new Object[] { actionId });
-    }
-
-    public abstract IBinding getStatefulBinding();
-
-    public abstract IActionListener getListener();
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/link/ActionLink.jwc b/3.0.4/framework/src/org/apache/tapestry/link/ActionLink.jwc
deleted file mode 100644
index 658ad5e..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/link/ActionLink.jwc
+++ /dev/null
@@ -1,50 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-  
-<component-specification class="org.apache.tapestry.link.ActionLink">
-
-  <description>
-  Creates a contextual link within the response page.  The page will be rewound to its
-  original state before the listener is invoked.
-  </description>
-  
-  <parameter name="listener" 
-  	type="org.apache.tapestry.IActionListener" 
-  	required="yes"
-  	direction="in"/>
-  	
-  <parameter name="disabled"
-  	type="boolean"
-  	direction="in"/>
-  	  	
-  <parameter name="anchor" 
-  	type="java.lang.String"
-  	direction="in"/>
-  	
-  <parameter name="renderer"
-  	type="org.apache.tapestry.link.ILinkRenderer"
-  	direction="in"/>
-  	
-  <parameter name="stateful" type="boolean" direction="custom" property-name="stateful"/>	
-  
-  <reserved-parameter name="href"/>
-  
-</component-specification>
diff --git a/3.0.4/framework/src/org/apache/tapestry/link/DefaultLinkRenderer.java b/3.0.4/framework/src/org/apache/tapestry/link/DefaultLinkRenderer.java
deleted file mode 100644
index 4a3ceb6..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/link/DefaultLinkRenderer.java
+++ /dev/null
@@ -1,162 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.link;
-
-import org.apache.tapestry.ApplicationRuntimeException;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.components.ILinkComponent;
-import org.apache.tapestry.engine.ILink;
-
-/**
- *  Default implementation of {@link org.apache.tapestry.link.ILinkRenderer}, which
- *  does nothing special.  Can be used as a base class to provide
- *  additional handling.
- *
- *  @author Howard Lewis Ship, David Solis
- *  @version $Id$
- *  @since 3.0
- **/
-
-public class DefaultLinkRenderer implements ILinkRenderer
-{
-    /**
-     *  A shared instance used as a default for any link that doesn't explicitly
-     *  override.
-     * 
-     **/
-
-    public static final ILinkRenderer SHARED_INSTANCE = new DefaultLinkRenderer();
-
-    public void renderLink(IMarkupWriter writer, IRequestCycle cycle, ILinkComponent linkComponent)
-    {
-        IMarkupWriter wrappedWriter = null;
-
-        if (cycle.getAttribute(Tapestry.LINK_COMPONENT_ATTRIBUTE_NAME) != null)
-            throw new ApplicationRuntimeException(
-                Tapestry.getMessage("AbstractLinkComponent.no-nesting"),
-                linkComponent,
-                null,
-                null);
-
-        cycle.setAttribute(Tapestry.LINK_COMPONENT_ATTRIBUTE_NAME, linkComponent);
-
-        boolean hasBody = getHasBody();
-
-        boolean disabled = linkComponent.isDisabled();
-
-        if (!disabled)
-        {
-            ILink l = linkComponent.getLink(cycle);
-
-            if (hasBody)
-                writer.begin(getElement());
-            else
-                writer.beginEmpty(getElement());
-
-            writer.attribute(getUrlAttribute(), constructURL(l, linkComponent.getAnchor(), cycle));
-
-            beforeBodyRender(writer, cycle, linkComponent);
-
-            // Allow the wrapped components a chance to render.
-            // Along the way, they may interact with this component
-            // and cause the name variable to get set.
-
-            wrappedWriter = writer.getNestedWriter();
-        }
-        else
-            wrappedWriter = writer;
-
-        if (hasBody)
-            linkComponent.renderBody(wrappedWriter, cycle);
-
-        if (!disabled)
-        {
-            afterBodyRender(writer, cycle, linkComponent);
-
-            linkComponent.renderAdditionalAttributes(writer, cycle);
-
-            if (hasBody)
-            {
-                wrappedWriter.close();
-
-                // Close the <element> tag
-
-                writer.end();
-            }
-            else
-                writer.closeTag();
-        }
-
-        cycle.removeAttribute(Tapestry.LINK_COMPONENT_ATTRIBUTE_NAME);
-    }
-
-    /**
-     *  Converts the EngineServiceLink into a URI or URL.  This implementation
-     *  simply invokes {@link ILink#getURL(String, boolean)}.
-     * 
-     **/
-
-    protected String constructURL(ILink link, String anchor, IRequestCycle cycle)
-    {
-        return link.getURL(anchor, true);
-    }
-
-    /**
-     *  Invoked after the href attribute has been written but before
-     *  the body of the link is rendered (but only if the link
-     *  is not disabled).
-     * 
-     *  <p>
-     *  This implementation does nothing.
-     * 
-     **/
-
-    protected void beforeBodyRender(IMarkupWriter writer, IRequestCycle cycle, ILinkComponent link)
-    {
-    }
-
-    /**
-     *  Invoked after the body of the link is rendered, but before
-     *  {@link ILinkComponent#renderAdditionalAttributes(IMarkupWriter, IRequestCycle)} is invoked
-     *  (but only if the link is not disabled).
-     * 
-     *  <p>
-     *  This implementation does nothing.
-     * 
-     **/
-
-    protected void afterBodyRender(IMarkupWriter writer, IRequestCycle cycle, ILinkComponent link)
-    {
-    }
-
-    /** @since 3.0 **/
-
-    protected String getElement()
-    {
-        return "a";
-    }
-
-    protected String getUrlAttribute()
-    {
-        return "href";
-    }
-
-    protected boolean getHasBody()
-    {
-        return true;
-    }
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/link/DirectLink.java b/3.0.4/framework/src/org/apache/tapestry/link/DirectLink.java
deleted file mode 100644
index 2c7ff20..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/link/DirectLink.java
+++ /dev/null
@@ -1,125 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.link;
-
-import java.util.List;
-
-import org.apache.tapestry.IActionListener;
-import org.apache.tapestry.IBinding;
-import org.apache.tapestry.IDirect;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.engine.ILink;
-
-/**
- *  A component for creating a link using the direct service; used for actions that
- *  are not dependant on dynamic page state.
- *
- *  [<a href="../../../../../ComponentReference/DirectLink.html">Component Reference</a>]
- *
- * @author Howard Lewis Ship
- * @version $Id$
- *
- **/
-
-public abstract class DirectLink extends AbstractLinkComponent implements IDirect
-{
-
-    public abstract IBinding getStatefulBinding();
-    public abstract IActionListener getListener();
-
-    /**
-     *  Returns true if the stateful parameter is bound to
-     *  a true value.  If stateful is not bound, also returns
-     *  the default, true.  May be invoked when not renderring.
-     *
-     **/
-
-    public boolean isStateful()
-    {
-        IBinding statefulBinding = getStatefulBinding();
-
-        if (statefulBinding == null)
-            return true;
-
-        return statefulBinding.getBoolean();
-    }
-
-    public ILink getLink(IRequestCycle cycle)
-    {
-        return getLink(cycle, Tapestry.DIRECT_SERVICE, constructServiceParameters(getParameters()));
-    }
-
-    /**
-     *  Converts a service parameters value to an array
-     *  of objects.  
-     *  This is used by the {@link DirectLink}, {@link ServiceLink}
-     *  and {@link ExternalLink}
-     *  components.
-     *
-     *  @param parameterValue the input value which may be
-     *  <ul>
-     *  <li>null  (returns null)
-     *  <li>An array of Object (returns the array)
-     *  <li>A {@link List} (returns an array of the values in the List})
-     *  <li>A single object (returns the object as a single-element array)
-     *  </ul>
-     * 
-     *  @return An array representation of the input object.
-     * 
-     *  @since 2.2
-     **/
-
-    public static Object[] constructServiceParameters(Object parameterValue)
-    {
-        if (parameterValue == null)
-            return null;
-
-        if (parameterValue instanceof Object[])
-            return (Object[]) parameterValue;
-
-        if (parameterValue instanceof List)
-        {
-            List list = (List) parameterValue;
-
-            return list.toArray();
-        }
-
-        return new Object[] { parameterValue };
-    }
-
-    /**
-     *  Invoked by the direct service to trigger the application-specific
-     *  action by notifying the {@link IActionListener listener}.
-     *
-     *  @throws org.apache.tapestry.StaleSessionException if the component is stateful, and
-     *  the session is new.
-     * 
-     **/
-
-    public void trigger(IRequestCycle cycle)
-    {
-        IActionListener listener = getListener();
-        
-        if (listener == null)
-        	throw Tapestry.createRequiredParameterException(this, "listener");
-
-        listener.actionTriggered(this, cycle);
-    }
-
-    /** @since 2.2 **/
-
-    public abstract Object getParameters();
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/link/DirectLink.jwc b/3.0.4/framework/src/org/apache/tapestry/link/DirectLink.jwc
deleted file mode 100644
index e3a214e..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/link/DirectLink.jwc
+++ /dev/null
@@ -1,57 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-  
-<component-specification class="org.apache.tapestry.link.DirectLink">
-
-  <description>
-  Creates a non-contextual link.  Non-persistent state can be stored within the link
-  using the context.
-  </description>
-
-  <parameter name="listener" 
-  	type="org.apache.tapestry.IActionListener" 
-  	required="yes"
-  	direction="auto"/>
-  	
-  <parameter name="parameters" type="java.lang.Object" direction="in">
-    <description>
-    An object, or list of objects, encoded into the URL
-    as service parameters.
-    </description>
-  </parameter>
-     
-  <parameter name="stateful" type="boolean" direction="custom"/>
-  
-  <parameter name="disabled"
-  	type="boolean"
-  	direction="in"/>
-  	  	
-  <parameter name="anchor" 
-  	type="java.lang.String"
-  	direction="in"/>
-  	
-  <parameter name="renderer"
-  	type="org.apache.tapestry.link.ILinkRenderer"
-  	direction="in"/>
-  
-  <reserved-parameter name="href"/>
-    
-</component-specification>
diff --git a/3.0.4/framework/src/org/apache/tapestry/link/ExternalLink.java b/3.0.4/framework/src/org/apache/tapestry/link/ExternalLink.java
deleted file mode 100644
index a6e6958..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/link/ExternalLink.java
+++ /dev/null
@@ -1,62 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.link;
-
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.engine.ILink;
-
-/**
- *  A component for creating a link to {@link org.apache.tapestry.IExternalPage} using the
- * {@link org.apache.tapestry.engine.ExternalService}.
- *
- *  [<a href="../../../../../ComponentReference/ExternalLink.html">Component Reference</a>]
- *
- * @see org.apache.tapestry.IExternalPage
- * @see org.apache.tapestry.engine.ExternalService
- *
- * @author Malcolm Edgar
- * @version $Id$
- *
- **/
-
-public abstract class ExternalLink extends AbstractLinkComponent
-{
-    public ILink getLink(IRequestCycle cycle)
-    {
-        return getLink(cycle, Tapestry.EXTERNAL_SERVICE, getServiceParameters());
-    }
-
-    private Object[] getServiceParameters()
-    {
-        Object[] pageParameters = DirectLink.constructServiceParameters(getParameters());
-        String targetPage = getTargetPage();
-
-        if (pageParameters == null)
-            return new Object[] { targetPage };
-
-        Object[] parameters = new Object[pageParameters.length + 1];
-
-        parameters[0] = targetPage;
-
-        System.arraycopy(pageParameters, 0, parameters, 1, pageParameters.length);
-
-        return parameters;
-    }
-
-    public abstract Object getParameters();
-
-    public abstract String getTargetPage();
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/link/ExternalLink.jwc b/3.0.4/framework/src/org/apache/tapestry/link/ExternalLink.jwc
deleted file mode 100644
index c1b31e5..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/link/ExternalLink.jwc
+++ /dev/null
@@ -1,53 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-  
-<component-specification class="org.apache.tapestry.link.ExternalLink">
-
-  <description>Creates a IExternalPage link.</description>
-
-  <parameter name="page" 
-  	type="java.lang.String" 
-  	required="yes" 
-  	property-name="targetPage"
-  	direction="in"/>
-
-  <parameter name="parameters" type="java.lang.Object" direction="in">
-    <description>
-    An object, or list of objects, encoded into the URL
-    as service parameters.
-    </description>
-  </parameter>
-  
-  <parameter name="disabled"
-  	type="boolean"
-  	direction="in"/>
-  	  	
-  <parameter name="anchor" 
-  	type="java.lang.String"
-  	direction="in"/>
-  	
-  <parameter name="renderer"
-  	type="org.apache.tapestry.link.ILinkRenderer"
-  	direction="in"/>
-  	
-  <reserved-parameter name="href"/>
-    
-</component-specification>
diff --git a/3.0.4/framework/src/org/apache/tapestry/link/GenericLink.java b/3.0.4/framework/src/org/apache/tapestry/link/GenericLink.java
deleted file mode 100644
index 7c42f6a..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/link/GenericLink.java
+++ /dev/null
@@ -1,43 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.link;
-
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.engine.ILink;
-
-/**
- *  An implementation of {@link org.apache.tapestry.components.ILinkComponent} 
- *  that allows
- *  the exact HREF to be specified, usually used for client side
- *  scripting.  
- * 
- *  [<a href="../../../../../ComponentReference/GenericLink.html">Component Reference</a>]
- * 
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 2.0.2
- * 
- **/
-
-public abstract class GenericLink extends AbstractLinkComponent
-{
-    public abstract String getHref();
-
-    public ILink getLink(IRequestCycle cycle)
-    {
-        return new StaticLink(getHref());
-    }
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/link/GenericLink.jwc b/3.0.4/framework/src/org/apache/tapestry/link/GenericLink.jwc
deleted file mode 100644
index 2e33130..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/link/GenericLink.jwc
+++ /dev/null
@@ -1,42 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-  
-<component-specification class="org.apache.tapestry.link.GenericLink">
-
-  <description>
-  Creates a link to an application specified URL.
-  </description>
-  
-  <parameter name="href" type="java.lang.String" required="yes" direction="in"/>
-
-  <parameter name="disabled"
-  	type="boolean"
-  	direction="in"/>
-  	  	
-  <parameter name="anchor" 
-  	type="java.lang.String"
-  	direction="in"/>
-  	
-  <parameter name="renderer"
-  	type="org.apache.tapestry.link.ILinkRenderer"
-  	direction="in"/>
-  
-</component-specification>
diff --git a/3.0.4/framework/src/org/apache/tapestry/link/ILinkRenderer.java b/3.0.4/framework/src/org/apache/tapestry/link/ILinkRenderer.java
deleted file mode 100644
index 14d1309..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/link/ILinkRenderer.java
+++ /dev/null
@@ -1,54 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.link;
-
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.components.ILinkComponent;
-
-/**
- *  Used by various instances of {@link org.apache.tapestry.components.ILinkComponent} to
- *  actually renderer a link.  Implementations of the interface can manipulate
- *  some of the details of how the link is written.
- * 
- *  <p>
- *  A link rendered may be used in many threads, and must be threadsafe.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 3.0
- * 
- **/
-
-public interface ILinkRenderer
-{
-    /**
-     *  Renders the link, taking into account whether the link is
-     *  {@link org.apache.tapestry.components.ILinkComponent#isDisabled() disabled}.
-     *  This is complicated by the fact that the rendering of the body must be done
-     *  within a nested writer, since the Link component will not render its tag
-     *  until after its body renders (to allow for any wrapped components that need
-     *  to write event handlers for the link).
-     * 
-     *  <p>
-     *  The renderer is expected to call back into the link component to handle
-     *  any informal parameters, and to handle events output.
-     * 
-     * 
-     **/
-
-    public void renderLink(IMarkupWriter writer, IRequestCycle cycle, ILinkComponent linkComponent);
-
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/link/PageLink.java b/3.0.4/framework/src/org/apache/tapestry/link/PageLink.java
deleted file mode 100644
index 9e76785..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/link/PageLink.java
+++ /dev/null
@@ -1,54 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.link;
-
-import org.apache.tapestry.INamespace;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.engine.ILink;
-
-/**
- *  A component for creating a navigation link to another page, 
- *  using the page service.
- *
- *  [<a href="../../../../../ComponentReference/PageLink.html">Component Reference</a>]
- *
- * @author Howard Ship
- * @version $Id$
- *
- **/
-
-public abstract class PageLink extends AbstractLinkComponent
-{
-    public ILink getLink(IRequestCycle cycle)
-    {
-        String parameter = null;
-        INamespace namespace = getTargetNamespace();
-        String targetPage = getTargetPage();
-
-        if (namespace == null)
-            parameter = targetPage;
-        else
-            parameter = namespace.constructQualifiedName(targetPage);
-
-        return getLink(cycle, Tapestry.PAGE_SERVICE, new String[] { parameter });
-    }
-
-    public abstract String getTargetPage();
-
-    /** @since 2.2 **/
-
-    public abstract INamespace getTargetNamespace();
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/link/PageLink.jwc b/3.0.4/framework/src/org/apache/tapestry/link/PageLink.jwc
deleted file mode 100644
index 7a07237..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/link/PageLink.jwc
+++ /dev/null
@@ -1,54 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<component-specification class="org.apache.tapestry.link.PageLink">
-
-  <description>
-  Creates a link to another page within the application.
-  </description>
-  
-  <parameter name="page" 
-  	type="java.lang.String" 
-  	required="yes" 
-  	property-name="targetPage"
-  	direction="in"/>
-  
-  <parameter name="namespace" 
-  	type="org.apache.tapestry.INamespace" 
-  	required="no" 
-  	property-name="targetNamespace"
-  	direction="in"/>
-  	  	
-  <parameter name="disabled"
-  	type="boolean"
-  	direction="in"/>
-  	  	
-  <parameter name="anchor" 
-  	type="java.lang.String"
-  	direction="in"/>
-  	
-  <parameter name="renderer"
-  	type="org.apache.tapestry.link.ILinkRenderer"
-  	direction="in"/>
-  
-  <reserved-parameter name="href"/>
-
-</component-specification>
diff --git a/3.0.4/framework/src/org/apache/tapestry/link/ServiceLink.java b/3.0.4/framework/src/org/apache/tapestry/link/ServiceLink.java
deleted file mode 100644
index 46378a5..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/link/ServiceLink.java
+++ /dev/null
@@ -1,45 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.link;
-
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.engine.ILink;
-
-/**
- *  A component for creating a link for an arbitrary {@link org.apache.tapestry.engine.IEngineService
- *  engine service}.  A ServiceLink component can emulate an {@link ActionLink},
- *  {@link PageLink} or {@link DirectLink} component, but is most often used in
- *  conjunction with an application-specific service.  
- *
- *  [<a href="../../../../../ComponentReference/ServiceLink.html">Component Reference</a>]
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *
- **/
-
-public abstract class ServiceLink extends AbstractLinkComponent
-{
-    public ILink getLink(IRequestCycle cycle)
-    {
-        Object[] parameters = DirectLink.constructServiceParameters(getParameters());
-
-        return getLink(cycle, getService(), parameters);
-    }
-
-    public abstract String getService();
-
-    public abstract Object getParameters();
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/link/ServiceLink.jwc b/3.0.4/framework/src/org/apache/tapestry/link/ServiceLink.jwc
deleted file mode 100644
index 66c2047..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/link/ServiceLink.jwc
+++ /dev/null
@@ -1,51 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<component-specification class="org.apache.tapestry.link.ServiceLink">
-
-  <description>
-  Creates a link using an arbitrary engine service.
-  </description>
-  
-  <parameter name="service" type="java.lang.String" required="yes" direction="in"/>
-
-  <parameter name="parameters" type="java.lang.Object" direction="in">
-    <description>
-    A object or string, or array of objects and strings, encoded into the URL
-    as service parameters.
-    </description>
-  </parameter>
-
-  <parameter name="disabled"
-  	type="boolean"
-  	direction="in"/>
-  	  	
-  <parameter name="anchor" 
-  	type="java.lang.String"
-  	direction="in"/>
-  	
-  <parameter name="renderer"
-  	type="org.apache.tapestry.link.ILinkRenderer"
-  	direction="in"/>
-
-  <reserved-parameter name="href"/>
-  
-</component-specification>
diff --git a/3.0.4/framework/src/org/apache/tapestry/link/StaticLink.java b/3.0.4/framework/src/org/apache/tapestry/link/StaticLink.java
deleted file mode 100644
index 7ee0836..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/link/StaticLink.java
+++ /dev/null
@@ -1,75 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.link;
-
-import org.apache.tapestry.engine.ILink;
-
-/**
- *  Used by {@link org.apache.tapestry.link.GenericLink} to represent
- *  an external, static URL.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 3.0
- * 
- **/
-public class StaticLink implements ILink
-{
-	private String _url;
-
-	public StaticLink(String url)
-	{
-		_url = url;
-	}
-
-    public String getURL()
-    {
-        return _url;
-    }
-
-    public String getURL(String anchor, boolean includeParameters)
-    {
-        if (anchor == null)
-        	return _url;
-        	
-        	return _url + "#" + anchor;
-    }
-
-    public String getAbsoluteURL()
-    {
-        return _url;
-    }
-
-    public String getAbsoluteURL(
-        String scheme,
-        String server,
-        int port,
-        String anchor,
-        boolean includeParameters)
-    {
-        return getURL(anchor, false);
-    }
-
-    public String[] getParameterNames()
-    {
-        return null;
-    }
-
-    public String[] getParameterValues(String name)
-    {
-        throw new IllegalArgumentException();
-    }
-
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/link/package.html b/3.0.4/framework/src/org/apache/tapestry/link/package.html
deleted file mode 100644
index 4c99d7f..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/link/package.html
+++ /dev/null
@@ -1,26 +0,0 @@
-<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN">
-<!-- $Id$ -->
-<html>
-<head>
-<title>Tapestry: Web Application Framework</title>
-</head>
-<body>
-
-<p>Components for creating links on the page that trigger application behavior
-when clicked.  These links are compatible with HTML and WML (they
-use the basic &lt;a&gt; element).
-
-<p>Each component is related to a different 
-{@link org.apache.tapestry.engine.IEngineService}, except for {@link org.apache.tapestry.link.ServiceLink}
-which is parameterized to use any of the available services ... which is useful with
-applications that define their own services.
-
-<p>Link components have a second function, to provide event handling support to the 
-components they wrap.  This is how a {@link org.apache.tapestry.html.Rollover} component manages
-to include DHTML and JavaScript that preloads the images and changes the displayed image as the
-mouse enters and exits the "hot" area defined by the link.
-
-@author Howard Lewis Ship <a href="mailto:hlship@apache.org">hlship@apache.org</a>
-
-</body>
-</html>
diff --git a/3.0.4/framework/src/org/apache/tapestry/listener/ListenerMap.java b/3.0.4/framework/src/org/apache/tapestry/listener/ListenerMap.java
deleted file mode 100644
index 4258188..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/listener/ListenerMap.java
+++ /dev/null
@@ -1,319 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.listener;
-
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.lang.reflect.Modifier;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Map;
-
-import ognl.OgnlRuntime;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.tapestry.ApplicationRuntimeException;
-import org.apache.tapestry.IActionListener;
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.Tapestry;
-
-/**
- *  Maps a class to a set of listeners based on the public methods of the class.
- *  {@link org.apache.tapestry.listener.ListenerMapPropertyAccessor} is setup
- *  to provide these methods as named properties of the ListenerMap.
- *
- *  @author Howard Ship
- *  @version $Id$
- *  @since 1.0.2
- * 
- **/
-
-public class ListenerMap
-{
-    private static final Log LOG = LogFactory.getLog(ListenerMap.class);
-
-    static {
-        OgnlRuntime.setPropertyAccessor(ListenerMap.class, new ListenerMapPropertyAccessor());
-    }
-
-    private Object _target;
-
-    /**
-     *  A {@link Map} of relevant {@link Method}s, keyed on method name.
-     *  This is just the public void methods that take an {@link IRequestCycle}
-     *  and throw nothing or just {@link ApplicationRuntimeException}.
-     */
-
-    private Map _methodMap;
-
-    /**
-     * A {@link Map} of cached listener instances, keyed on method name
-     *
-     **/
-
-    private Map _listenerCache = new HashMap();
-
-    /**
-     * A {@link Map}, keyed on Class, of {@link Map} ... the method map
-     * for any particular instance of the given class.
-     *
-     **/
-
-    private static Map _classMap = new HashMap();
-
-    /**
-     *  Implements both listener interfaces.
-     *
-     **/
-
-    private class SyntheticListener implements IActionListener
-    {
-        private Method _method;
-
-        SyntheticListener(Method method)
-        {
-            _method = method;
-        }
-
-        private void invoke(IRequestCycle cycle)
-        {
-            Object[] args = new Object[] { cycle };
-
-            invokeTargetMethod(_target, _method, args);
-        }
-
-        public void actionTriggered(IComponent component, IRequestCycle cycle)
-        {
-            invoke(cycle);
-        }
-
-        public String toString()
-        {
-            StringBuffer buffer = new StringBuffer("SyntheticListener[");
-
-            buffer.append(_target);
-            buffer.append(' ');
-            buffer.append(_method);
-            buffer.append(']');
-
-            return buffer.toString();
-        }
-
-    }
-
-    public ListenerMap(Object target)
-    {
-        _target = target;
-    }
-
-    /**
-     *  Gets a listener for the given name (which is both a property name
-     *  and a method name).  The listener is created as needed, but is
-     *  also cached for later use.
-     *
-     * @throws ApplicationRuntimeException if the listener can not be created.
-     **/
-
-    public synchronized Object getListener(String name)
-    {
-        Object listener = null;
-
-        listener = _listenerCache.get(name);
-
-        if (listener == null)
-        {
-            listener = createListener(name);
-
-            _listenerCache.put(name, listener);
-        }
-
-        return listener;
-    }
-
-    /**
-     *  Returns an object that implements {@link IActionListener}.
-     *  This involves looking up the method by name and determining which
-     *  inner class to create.
-     **/
-
-    private synchronized Object createListener(String name)
-    {
-        if (_methodMap == null)
-            getMethodMap();
-
-        Method method = (Method) _methodMap.get(name);
-
-        if (method == null)
-            throw new ApplicationRuntimeException(
-                Tapestry.format("ListenerMap.object-missing-method", _target, name));
-
-        return new SyntheticListener(method);
-    }
-
-    /**
-     *  Gets the method map for the current instance.  If necessary, it is constructed and cached (for other instances
-     *  of the same class).
-     *
-     **/
-
-    private synchronized Map getMethodMap()
-    {
-        if (_methodMap != null)
-            return _methodMap;
-
-        Class beanClass = _target.getClass();
-
-        synchronized (_classMap)
-        {
-            _methodMap = (Map) _classMap.get(beanClass);
-
-            if (_methodMap == null)
-            {
-                _methodMap = buildMethodMap(beanClass);
-
-                _classMap.put(beanClass, _methodMap);
-            }
-        }
-
-        return _methodMap;
-    }
-
-    private static Map buildMethodMap(Class beanClass)
-    {
-        if (LOG.isDebugEnabled())
-            LOG.debug("Building method map for class " + beanClass.getName());
-
-        Map result = new HashMap();
-        Method[] methods = beanClass.getMethods();
-
-        for (int i = 0; i < methods.length; i++)
-        {
-            Method m = methods[i];
-            int mods = m.getModifiers();
-
-            if (Modifier.isStatic(mods))
-                continue;
-
-            // Probably not necessary, getMethods() returns only public
-            // methods.
-
-            if (!Modifier.isPublic(mods))
-                continue;
-
-            // Must return void
-
-            if (m.getReturnType() != Void.TYPE)
-                continue;
-
-            Class[] parmTypes = m.getParameterTypes();
-
-            if (parmTypes.length != 1)
-                continue;
-
-            // parm must be IRequestCycle
-
-            if (!parmTypes[0].equals(IRequestCycle.class))
-                continue;
-
-            // Ha!  Passed all tests.
-
-            result.put(m.getName(), m);
-        }
-
-        return result;
-
-    }
-
-    /**
-     *  Invoked by the inner listener/adaptor classes to
-     *  invoke the method.
-     *
-     **/
-
-    private static void invokeTargetMethod(Object target, Method method, Object[] args)
-    {
-        if (LOG.isDebugEnabled())
-            LOG.debug("Invoking listener method " + method + " on " + target);
-
-        try
-        {
-            try
-            {
-                method.invoke(target, args);
-            }
-            catch (InvocationTargetException ex)
-            {
-                Throwable inner = ex.getTargetException();
-
-                if (inner instanceof ApplicationRuntimeException)
-                    throw (ApplicationRuntimeException) inner;
-
-                // Edit out the InvocationTargetException, if possible.
-
-                if (inner instanceof RuntimeException)
-                    throw (RuntimeException) inner;
-
-                throw ex;
-            }
-        }
-        catch (ApplicationRuntimeException ex)
-        {
-            throw ex;
-        }
-        catch (Exception ex)
-        {
-            // Catch InvocationTargetException or, preferrably,
-            // the inner exception here (if its a runtime exception).
-
-            throw new ApplicationRuntimeException(
-                Tapestry.format("ListenerMap.unable-to-invoke-method", method.getName(), target, ex.getMessage()),
-                ex);
-        }
-    }
-
-    /** 
-     *  Returns an unmodifiable collection of the 
-     *  names of the listeners implemented by the target class.
-     *
-     *  @since 1.0.6
-     *
-     **/
-
-    public synchronized Collection getListenerNames()
-    {
-         return Collections.unmodifiableCollection(getMethodMap().keySet());
-    }
-
-    /**
-     *  Returns true if this ListenerMap can provide a listener
-     *  with the given name.
-     * 
-     *  @since 2.2
-     * 
-     **/
-
-    public synchronized boolean canProvideListener(String name)
-    {
-         return getMethodMap().containsKey(name);
-    }
-
-    public String toString()
-    {
-        return "ListenerMap[" + _target + "]";
-    }
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/listener/ListenerMapPropertyAccessor.java b/3.0.4/framework/src/org/apache/tapestry/listener/ListenerMapPropertyAccessor.java
deleted file mode 100644
index 2d58bcf..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/listener/ListenerMapPropertyAccessor.java
+++ /dev/null
@@ -1,70 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.listener;
-
-import java.util.Map;
-
-import ognl.ObjectPropertyAccessor;
-import ognl.OgnlException;
-
-/**
- *  Exposes {@link org.apache.tapestry.IActionListener} listeners
- *  provided by the {@link ListenerMap} as read-only properties
- *  of the ListenerMap.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 2.2
- *
- **/
-
-public class ListenerMapPropertyAccessor extends ObjectPropertyAccessor
-{
-    /**
-     *  Checks to see if the ListenerMap provides the named
-     *  listener, returning the listener if it does.  Otherwise,
-     *  invokes the super implementation.
-     * 
-     **/
-    
-    public Object getProperty(Map context, Object target, Object name) throws OgnlException
-    {
-        ListenerMap map = (ListenerMap) target;
-        String listenerName = (String) name;
-
-        if (map.canProvideListener(listenerName))
-            return map.getListener(listenerName);
-
-        return super.getProperty(context, target, name);
-    }
-    
-    /**
-     *  Returns true if the ListenerMap contains the named listener,
-     *  otherwise invokes super-implementation.
-     * 
-     **/
-
-    public boolean hasGetProperty(Map context, Object target, Object oname) throws OgnlException
-    {
-        ListenerMap map = (ListenerMap) target;
-        String listenerName = (String) oname;
-
-        if (map.canProvideListener(listenerName))
-            return true;
-
-        return super.hasGetProperty(context, target, oname);
-    }
-
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/listener/package.html b/3.0.4/framework/src/org/apache/tapestry/listener/package.html
deleted file mode 100644
index 9b10c07..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/listener/package.html
+++ /dev/null
@@ -1,39 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-
-<html>
-<body>
-
-<p>Support classes that allows an object
-to expose listener <em>methods</em> instead of listener <em>properties</em>.
-
-<p>
-Normally, a listener property must be an object that implement
-{@link org.apache.tapestry.IActionListener}.  This can be cumbersome, in practice, as it
-typically involves creating an anonymous inner class.
-
-<p>
-Using this mechanism, classes can instead implement listener <em>methods</em>.
-A listener method takes the form:
-
-<pre>
-public void <em>method-name</em>({@link org.apache.tapestry.IRequestCycle} cycle) 
-throws {@link org.apache.tapestry.ApplicationRuntimeException}</code>
-</pre>
-
-<p>The <code>throws</code> clause is optional, but may not throw any 
-additional exceptions.
-
-<p>Tapestry will create an appropriate listener object that will invoke the
-corresponding method.
-
-<p>The methods can be accessed using the property path "<code>listeners.<em>method-name</em></code>"
-
-@see org.apache.tapestry.listener.ListenerMap
-@see org.apache.tapestry.AbstractComponent#getListeners()
-@see org.apache.tapestry.engine.AbstractEngine#getListeners()
-@since 1.0.2
-
-@author Howard Lewis Ship <a href="mailto:hlship@apache.org">hlship@apache.org</a>
-
-</body>
-</html>
diff --git a/3.0.4/framework/src/org/apache/tapestry/multipart/DefaultMultipartDecoder.java b/3.0.4/framework/src/org/apache/tapestry/multipart/DefaultMultipartDecoder.java
deleted file mode 100644
index ce3f327..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/multipart/DefaultMultipartDecoder.java
+++ /dev/null
@@ -1,247 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.multipart;
-
-import java.io.UnsupportedEncodingException;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
-import javax.servlet.http.HttpServletRequest;
-
-import org.apache.commons.fileupload.DiskFileUpload;
-import org.apache.commons.fileupload.FileItem;
-import org.apache.commons.fileupload.FileUpload;
-import org.apache.commons.fileupload.FileUploadException;
-import org.apache.tapestry.ApplicationRuntimeException;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.request.IUploadFile;
-
-/**
- *  Decodes the data in a <code>multipart/form-data</code> HTTP request, handling
- *  file uploads and multi-valued parameters.  After decoding, the class is used
- *  to access the parameter values.
- * 
- *  <p>This implementation is a thin wrapper around the Apache Jakarta
- *  <a href="http://jakarta.apache.org/commons/fileupload/">FileUpload</a>. 
- *  
- *  <p>Supports single valued parameters, multi-valued parameters and individual
- *  file uploads.  That is, for file uploads, each upload must be a unique parameter
- *  (that is all the {@link org.apache.tapestry.form.Upload} component needs).
-
- *
- *  @author Joe Panico
- *  @version $Id$
- *  @since 2.0.1
- *
- **/
-public class DefaultMultipartDecoder implements IMultipartDecoder
-{
-    /**
-     *  Request attribute key used to store the part map for this request.
-     *  The part map is created in {@link #decode(HttpServletRequest)}.  By storing
-     *  the part map in the request instead of an instance variable, DefaultMultipartDecoder
-     *  becomes threadsafe (no client-specific state in instance variables).
-     * 
-     **/
-
-    public static final String PART_MAP_ATTRIBUTE_NAME = "org.apache.tapestry.multipart.part-map";
-
-    private int _maxSize = 10000000;
-    private int _thresholdSize = 1024;
-    private String _repositoryPath = System.getProperty("java.io.tmpdir");
-
-    private static DefaultMultipartDecoder _shared;
-
-    public static DefaultMultipartDecoder getSharedInstance()
-    {
-        if (_shared == null)
-            _shared = new DefaultMultipartDecoder();
-
-        return _shared;
-    }
-
-    public void setMaxSize(int maxSize)
-    {
-        _maxSize = maxSize;
-    }
-
-    public int getMaxSize()
-    {
-        return _maxSize;
-    }
-
-    public void setThresholdSize(int thresholdSize)
-    {
-        _thresholdSize = thresholdSize;
-    }
-
-    public int getThresholdSize()
-    {
-        return _thresholdSize;
-    }
-
-    public void setRepositoryPath(String repositoryPath)
-    {
-        _repositoryPath = repositoryPath;
-    }
-
-    public String getRepositoryPath()
-    {
-        return _repositoryPath;
-    }
-
-    public static boolean isMultipartRequest(HttpServletRequest request)
-    {
-        return FileUpload.isMultipartContent(request);
-    }
-
-    /**
-     *  Invokes {@link IPart#cleanup()} on each part.
-     * 
-     **/
-    public void cleanup(HttpServletRequest request)
-    {
-        Map partMap = getPartMap(request);
-
-        Iterator i = partMap.values().iterator();
-        while (i.hasNext())
-        {
-            IPart part = (IPart) i.next();
-            part.cleanup();
-        }
-    }
-
-    /**
-     * Decodes the request, storing the part map (keyed on query parameter name, 
-     * value is {@link IPart} into the request as an attribute.
-     * 
-     * @throws ApplicationRuntimeException if decode fails, for instance the
-     * request exceeds getMaxSize()
-     * 
-     **/
-
-    public void decode(HttpServletRequest request)
-    {
-        Map partMap = new HashMap();
-
-        request.setAttribute(PART_MAP_ATTRIBUTE_NAME, partMap);
-
-        // The encoding that will be used to decode the string parameters
-        // It should NOT be null at this point, but it may be 
-        // if the older Servlet API 2.2 is used
-        String encoding = request.getCharacterEncoding();
-
-        // DiskFileUpload is not quite threadsafe, so we create a new instance
-        // for each request.
-
-        DiskFileUpload upload = new DiskFileUpload();
-
-        List parts = null;
-
-        try
-        {
-            if (encoding != null)
-                upload.setHeaderEncoding(encoding);
-            parts = upload.parseRequest(request, _thresholdSize, _maxSize, _repositoryPath);
-        }
-        catch (FileUploadException ex)
-        {
-            throw new ApplicationRuntimeException(
-                Tapestry.format("DefaultMultipartDecoder.unable-to-decode", ex.getMessage()),
-                ex);
-        }
-
-        int count = Tapestry.size(parts);
-
-        for (int i = 0; i < count; i++)
-        {
-            FileItem uploadItem = (FileItem) parts.get(i);
-
-            if (uploadItem.isFormField())
-            {
-                try
-                {
-                    String name = uploadItem.getFieldName();
-                    String value;
-                    if (encoding == null)
-                        value = uploadItem.getString();
-                    else
-                        value = uploadItem.getString(encoding);
-                        
-                    ValuePart valuePart = (ValuePart) partMap.get(name);
-                    if (valuePart != null)
-                    {
-                        valuePart.add(value);
-                    }
-                    else
-                    {
-                        valuePart = new ValuePart(value);
-                        partMap.put(name, valuePart);
-                    }
-                }
-                catch (UnsupportedEncodingException ex)
-                {
-                    throw new ApplicationRuntimeException(
-                        Tapestry.format("illegal-encoding", encoding),
-                        ex);
-                }
-            }
-            else
-            {
-                UploadPart uploadPart = new UploadPart(uploadItem);
-
-                partMap.put(uploadItem.getFieldName(), uploadPart);
-            }
-        }
-
-    }
-
-    public String getString(HttpServletRequest request, String name)
-    {
-        Map partMap = getPartMap(request);
-
-        ValuePart part = (ValuePart) partMap.get(name);
-        if (part != null)
-            return part.getValue();
-
-        return null;
-    }
-
-    public String[] getStrings(HttpServletRequest request, String name)
-    {
-        Map partMap = getPartMap(request);
-
-        ValuePart part = (ValuePart) partMap.get(name);
-        if (part != null)
-            return part.getValues();
-
-        return null;
-    }
-
-    public IUploadFile getUploadFile(HttpServletRequest request, String name)
-    {
-        Map partMap = getPartMap(request);
-
-        return (IUploadFile) partMap.get(name);
-    }
-
-    private Map getPartMap(HttpServletRequest request)
-    {
-        return (Map) request.getAttribute(PART_MAP_ATTRIBUTE_NAME);
-    }
-
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/multipart/IMultipartDecoder.java b/3.0.4/framework/src/org/apache/tapestry/multipart/IMultipartDecoder.java
deleted file mode 100644
index b9ebbd5..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/multipart/IMultipartDecoder.java
+++ /dev/null
@@ -1,78 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.multipart;
-
-import javax.servlet.http.HttpServletRequest;
-
-import org.apache.tapestry.request.IUploadFile;
-
-/**
- *  Defines how a multipart HTTP request can be broken into individual
- *  elements (including file uploads).
- * 
- *  <p>Multipart decoder implementations must be threadsafe.
- *  
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 2.3
- **/
-
-public interface IMultipartDecoder
-{
-    /**
-     *  Decodes the incoming request, identifying all
-     *  the parts (values and uploaded files) contained
-     *  within.
-     * 
-     **/
-
-    public void decode(HttpServletRequest request);
-
-    /**
-     *  Invoked to release any resources needed by tghe
-     *  decoder.  In some cases, large incoming parts
-     *  are written to temporary files; this method
-     *  ensures those temporary files are deleted.
-     * 
-     **/
-
-    public void cleanup(HttpServletRequest request);
-
-    /**
-     *  Returns the single value (or first value) for the parameter
-     *  with the specified name.  Returns null if no such parameter
-     *  was in the request.
-     * 
-     **/
-
-    public String getString(HttpServletRequest request, String name);
-
-    /**
-     *  Returns an array of values (possibly a single element array).
-     *  Returns null if no such parameter was in the request.
-     * 
-     **/
-
-    public String[] getStrings(HttpServletRequest request, String name);
-
-    /**
-     *  Returns the uploaded file with the specified parameter name,
-     *  or null if no such parameter was in the request.
-     * 
-     **/
-
-    public IUploadFile getUploadFile(HttpServletRequest request, String name);
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/multipart/IPart.java b/3.0.4/framework/src/org/apache/tapestry/multipart/IPart.java
deleted file mode 100644
index 12c0bc1..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/multipart/IPart.java
+++ /dev/null
@@ -1,37 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.multipart;
-
-/**
- *  Common interface for data parts from multipart form submissions.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 2.0.1
- * 
- **/
-
-public interface IPart
-{
-    /**
-     *  Invoked at the end of a request cycle to delete any resources held by
-     *  the part.
-     * 
-     *  @see UploadPart#cleanup()
-     * 
-     **/
-
-    public void cleanup();
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/multipart/UploadPart.java b/3.0.4/framework/src/org/apache/tapestry/multipart/UploadPart.java
deleted file mode 100644
index d7089e8..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/multipart/UploadPart.java
+++ /dev/null
@@ -1,139 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.multipart;
-
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-
-import org.apache.commons.fileupload.FileItem;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.tapestry.ApplicationRuntimeException;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.request.IUploadFile;
-
-/**
- *  Portion of a multi-part request representing an uploaded file.
- *
- *  @author Joe Panico
- *  @version $Id$
- *  @since 2.0.1
- *
- **/
-public class UploadPart extends Object implements IUploadFile, IPart
-{
-    private static final Log LOG = LogFactory.getLog(UploadPart.class);
-
-    private FileItem _fileItem;
-
-    public UploadPart(FileItem fileItem)
-    {
-        if (fileItem == null)
-            throw new IllegalArgumentException(
-                Tapestry.format("invalid-null-parameter", "fileItem"));
-
-        _fileItem = fileItem;
-    }
-
-    public String getContentType()
-    {
-        return _fileItem.getContentType();
-    }
-
-    /**
-     *  Leverages {@link File} to convert the full file path and extract
-     *  the name.
-     * 
-     **/
-    public String getFileName()
-    {
-        File file = new File(this.getFilePath());
-
-        return file.getName();
-    }
-
-    /**
-     *  @since 2.0.4
-     * 
-     **/
-
-    public String getFilePath()
-    {
-        return _fileItem.getName();
-    }
-
-    public InputStream getStream()
-    {
-        try
-        {
-            return _fileItem.getInputStream();
-        }
-        catch (IOException ex)
-        {
-            throw new ApplicationRuntimeException(
-                Tapestry.format("UploadPart.unable-to-open-content-file", _fileItem.getName()),
-                ex);
-        }
-    }
-
-    /**
-     *  Deletes the external content file, if one exists.
-     * 
-     **/
-
-    public void cleanup()
-    {
-        _fileItem.delete();
-    }
-
-    /**
-     * Writes the uploaded content to a file.  This should be invoked at most once
-     * (perhaps we should add a check for this).  This will often
-     * be a simple file rename.
-     * 
-     * @since 3.0
-     */
-    public void write(File file)
-    {
-        try
-        {
-            _fileItem.write(file);
-        }
-        catch (Exception ex)
-        {
-            throw new ApplicationRuntimeException(
-                Tapestry.format("UploadPart.write-failure", file, ex.getMessage()),
-                ex);
-        }
-    }
-
-    /**
-     * @since 3.0
-     */
-    public long getSize()
-    {
-        return _fileItem.getSize();
-    }
-
-    /**
-     * @since 3.0
-     */
-    public boolean isInMemory()
-    {
-        return _fileItem.isInMemory();
-    }
-
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/multipart/ValuePart.java b/3.0.4/framework/src/org/apache/tapestry/multipart/ValuePart.java
deleted file mode 100644
index efe27e1..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/multipart/ValuePart.java
+++ /dev/null
@@ -1,104 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.multipart;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- *  A portion of a multipart request that stores a value, or values, for
- *  a parameter.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 2.0.1
- *
- **/
-
-public class ValuePart implements IPart
-{
-    private int _count;
-    // Stores either String or List of String
-    private Object _value;
-
-    public ValuePart(String value)
-    {
-        _count = 1;
-        _value = value;
-    }
-
-    public int getCount()
-    {
-        return _count;
-    }
-
-    /**
-     *  Returns the value, or the first value (if multi-valued).
-     * 
-     **/
-
-    public String getValue()
-    {
-        if (_count == 1)
-            return (String) _value;
-
-        List l = (List) _value;
-
-        return (String) l.get(0);
-    }
-
-    /**
-     *  Returns the values as an array of strings.  If there is only one value,
-     *  it is returned wrapped as a single element array.
-     * 
-     **/
-
-    public String[] getValues()
-    {
-        if (_count == 1)
-            return new String[] {(String) _value };
-
-        List l = (List) _value;
-
-        return (String[]) l.toArray(new String[_count]);
-    }
-
-    public void add(String newValue)
-    {
-        if (_count == 1)
-        {
-            List l = new ArrayList();
-            l.add(_value);
-            l.add(newValue);
-
-            _value = l;
-            _count++;
-            return;
-        }
-
-        List l = (List) _value;
-        l.add(newValue);
-        _count++;
-    }
-
-    /**
-     *  Does nothing.
-     * 
-     **/
-
-    public void cleanup()
-    {
-    }
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/multipart/org.apache.tapestry.multipart.patch b/3.0.4/framework/src/org/apache/tapestry/multipart/org.apache.tapestry.multipart.patch
deleted file mode 100644
index 47ceda0..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/multipart/org.apache.tapestry.multipart.patch
+++ /dev/null
@@ -1,1156 +0,0 @@
-Index: DefaultMultipartDecoder.java

-===================================================================

-RCS file: /home/cvspublic/jakarta-tapestry/framework/src/org/apache/tapestry/multipart/DefaultMultipartDecoder.java,v

-retrieving revision 1.1

-diff -c -r1.1 DefaultMultipartDecoder.java

-*** DefaultMultipartDecoder.java	5 Mar 2003 22:59:49 -0000	1.1

---- DefaultMultipartDecoder.java	21 Mar 2003 22:51:11 -0000

-***************

-*** 1,75 ****

-! /* ====================================================================

-!  * The Apache Software License, Version 1.1

-!  *

-!  * Copyright (c) 2000-2003 The Apache Software Foundation.  All rights

-!  * reserved.

-!  *

-!  * Redistribution and use in source and binary forms, with or without

-!  * modification, are permitted provided that the following conditions

-!  * are met:

-!  *

-!  * 1. Redistributions of source code must retain the above copyright

-!  *    notice, this list of conditions and the following disclaimer.

-!  *

-!  * 2. Redistributions in binary form must reproduce the above copyright

-!  *    notice, this list of conditions and the following disclaimer in

-!  *    the 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://apache.org/)."

-!  *    Alternately, this acknowledgment may appear in the software itself,

-!  *    if and wherever such third-party acknowledgments normally appear.

-!  *

-!  * 4. The names "Apache" and "Apache Software Foundation", "Tapestry" 

-!  *    must not be used to endorse or promote products derived from this

-!  *    software without prior written permission. For written

-!  *    permission, please contact apache@apache.org.

-!  *

-!  * 5. Products derived from this software may not be called "Apache" 

-!  *    or "Tapestry", nor may "Apache" or "Tapestry" 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 TAPESTRY CONTRIBUTOR COMMUNITY

-!  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

-!  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

-!  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF

-!  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND

-!  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,

-!  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT

-!  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF

-!  * SUCH DAMAGE.

-!  * ====================================================================

-!  *

-!  * This software consists of voluntary contributions made by many

-!  * individuals on behalf of the Apache Software Foundation.  For more

-!  * information on the Apache Software Foundation, please see

-!  * <http://www.apache.org/>.

-!  *

-   */

-- 

-  package org.apache.tapestry.multipart;

-  

-- import java.io.ByteArrayOutputStream;

-- import java.io.File;

-- import java.io.IOException;

-- import java.io.InputStream;

-- import java.io.OutputStream;

-  import java.util.HashMap;

-  import java.util.Iterator;

-  import java.util.Map;

-- 

-  import javax.servlet.http.HttpServletRequest;

-  

-  import org.apache.tapestry.ApplicationRuntimeException;

-- import org.apache.tapestry.Tapestry;

-  import org.apache.tapestry.request.IUploadFile;

-! import org.apache.tapestry.util.StringSplitter;

-  import org.apache.commons.logging.Log;

-  import org.apache.commons.logging.LogFactory;

-  

---- 1,72 ----

-! /*

-!  *  ====================================================================

-!  *  The Apache Software License, Version 1.1

-!  *

-!  *  Copyright (c) 2002 The Apache Software Foundation.  All rights

-!  *  reserved.

-!  *

-!  *  Redistribution and use in source and binary forms, with or without

-!  *  modification, are permitted provided that the following conditions

-!  *  are met:

-!  *

-!  *  1. Redistributions of source code must retain the above copyright

-!  *  notice, this list of conditions and the following disclaimer.

-!  *

-!  *  2. Redistributions in binary form must reproduce the above copyright

-!  *  notice, this list of conditions and the following disclaimer in

-!  *  the 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 "Apache" and "Apache Software Foundation" and

-!  *  "Apache Tapestry" must not be used to endorse or promote products

-!  *  derived from this software without prior written permission. For

-!  *  written permission, please contact apache@apache.org.

-!  *

-!  *  5. Products derived from this software may not be called "Apache",

-!  *  "Apache Tapestry", 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.  For more

-!  *  information on the Apache Software Foundation, please see

-!  *  <http://www.apache.org/>.

-   */

-  package org.apache.tapestry.multipart;

-  

-  import java.util.HashMap;

-  import java.util.Iterator;

-+ import java.util.List;

-  import java.util.Map;

-  import javax.servlet.http.HttpServletRequest;

-  

-  import org.apache.tapestry.ApplicationRuntimeException;

-  import org.apache.tapestry.request.IUploadFile;

-! 

-! import org.apache.commons.fileupload.FileItem;

-! import org.apache.commons.fileupload.FileUpload;

-! import org.apache.commons.fileupload.FileUploadException;

-! 

-  import org.apache.commons.logging.Log;

-  import org.apache.commons.logging.LogFactory;

-  

-***************

-*** 78,475 ****

-   *  file uploads and multi-valued parameters.  After decoding, the class is used

-   *  to access the parameter values.

-   * 

-!  *  <p>This implementation is partially based on the MultipartRequest from

-!  *  <a href="http://sf.net/projects/jetty">Jetty</a> (which is LGPL), and

-!  *  partly from research on the web, including a discussion of the 

-!  *  <a href="http://www.cis.ohio-state.edu/cgi-bin/rfc/rfc1867.html">RFC</a>.

-   *  

-   *  <p>Supports single valued parameters, multi-valued parameters and individual

-   *  file uploads.  That is, for file uploads, each upload must be a unique parameter

-!  *  (that is all the {@link org.apache.tapestry.form.Upload} component needs).

-  

-   *

-!  *  @author Howard Lewis Ship

-!  *  @version $Id: DefaultMultipartDecoder.java,v 1.1 2003/03/05 22:59:49 hlship Exp $

-   *  @since 2.0.1

-   *

-   **/

-! 

-! public class DefaultMultipartDecoder implements IMultipartDecoder

-  {

-!     private static final Log LOG = LogFactory.getLog(DefaultMultipartDecoder.class);

-! 

-!     public static final String MULTIPART_FORM_DATA_CONTENT_TYPE = "multipart/form-data";

-! 

-!     private static final String QUOTE = "\"";

-! 

-!     private Map partMap = new HashMap();

-! 

-!     public static boolean isMultipartRequest(HttpServletRequest request)

-!     {

-!         String contentType = request.getContentType();

-! 

-!         if (contentType == null)

-!             return false;

-! 

-!         return contentType.startsWith(MULTIPART_FORM_DATA_CONTENT_TYPE);

-!     }

-! 

-!     private void close(InputStream stream)

-!     {

-!         try

-!         {

-!             if (stream != null)

-!                 stream.close();

-!         }

-!         catch (IOException ex)

-!         {

-!             // Ignore.

-!         }

-!     }

-! 

-!     private static final String BOUNDARY = "boundary=";

-! 

-!     public void decode(HttpServletRequest request)

-!     {

-!         if (!isMultipartRequest(request))

-!             throw new ApplicationRuntimeException(

-!                 Tapestry.getString(

-!                     "MultipartDecoder.wrong-content-type",

-!                     request.getContentType()));

-! 

-!         String contentType = request.getContentType();

-!         int pos = contentType.indexOf(BOUNDARY);

-! 

-!         String boundaryString = "--" + contentType.substring(pos + BOUNDARY.length());

-!         byte[] boundary = (boundaryString + "--").getBytes();

-! 

-!         LineInput input = null;

-! 

-!         try

-!         {

-!             input = new LineInput(request.getInputStream());

-! 

-!             checkForInitialBoundary(input, boundaryString);

-! 

-!             boolean last = false;

-! 

-!             while (!last)

-!             {

-!                 last = readNextPart(input, boundary);

-!             }

-!         }

-!         catch (IOException ex)

-!         {

-!             LOG.error(

-!                 Tapestry.getString("MultipartDecoder.io-exception-reading-input", ex.getMessage()),

-!                 ex);

-! 

-!             // Cleanup any partial upload files.

-! 

-!             cleanup();

-! 

-!             throw new ApplicationRuntimeException(ex);

-!         }

-!         finally

-!         {

-!             //		close(input);

-!         }

-! 

-!     }

-! 

-!     private void checkForInitialBoundary(LineInput input, String boundary) throws IOException

-!     {

-!         String line = input.readLine();

-! 

-!         if (line != null && line.equals(boundary))

-!             return;

-! 

-!         throw new ApplicationRuntimeException(

-!             Tapestry.getString("MultipartDecoder.missing-initial-boundary"));

-!     }

-! 

-!     private boolean readNextPart(LineInput input, byte[] boundary) throws IOException

-!     {

-!         String disposition = null;

-!         String contentType = null;

-! 

-!         // First read the various headers (before the content)

-! 

-!         while (true)

-!         {

-!             String line = input.readLine();

-! 

-!             if (line == null || line.length() == 0)

-!                 break;

-! 

-!             int colonx = line.indexOf(':');

-! 

-!             if (colonx > 0)

-!             {

-!                 String key = line.substring(0, colonx).toLowerCase();

-! 

-!                 if (key.equals("content-disposition"))

-!                 {

-!                     disposition = line.substring(colonx + 1).trim();

-!                     continue;

-!                 }

-! 

-!                 if (key.equals("content-type"))

-!                 {

-!                     contentType = line.substring(colonx + 1).trim();

-!                     continue;

-!                 }

-!             }

-! 

-!         }

-! 

-!         if (disposition == null)

-!             throw new ApplicationRuntimeException(

-!                 Tapestry.getString("MultipartDecoder.missing-content-disposition"));

-! 

-!         Map dispositionMap = explodeDisposition(disposition);

-!         String name = (String) dispositionMap.get("name");

-! 

-!         if (Tapestry.isNull(name))

-!             throw new ApplicationRuntimeException(

-!                 Tapestry.getString("MultipartDecoder.invalid-content-disposition", disposition));

-! 

-!         if (!dispositionMap.containsKey("filename"))

-!             return readValuePart(input, boundary, name);

-! 

-!         String fileName = (String) dispositionMap.get("filename");

-! 

-!         return readFilePart(input, boundary, name, fileName, contentType);

-!     }

-! 

-!     private static StringSplitter splitter = new StringSplitter(';');

-! 

-!     private Map explodeDisposition(String disposition)

-!     {

-!         Map result = new HashMap();

-! 

-!         String[] elements = splitter.splitToArray(disposition);

-! 

-!         for (int i = 0; i < elements.length; i++)

-!         {

-!             String element = elements[i];

-!             int x = element.indexOf('=');

-! 

-!             if (x < 0)

-!                 continue;

-! 

-!             String key = element.substring(0, x).trim();

-!             String rawValue = element.substring(x + 1);

-! 

-!             if (!(rawValue.startsWith(QUOTE) && rawValue.endsWith(QUOTE)))

-!                 throw new ApplicationRuntimeException(

-!                     Tapestry.getString(

-!                         "MultipartDecoder.invalid-content-disposition",

-!                         disposition));

-! 

-!             result.put(key, rawValue.substring(1, rawValue.length() - 1));

-! 

-!         }

-! 

-!         return result;

-!     }

-! 

-!     private boolean readFilePart(

-!         LineInput input,

-!         byte[] boundary,

-!         String name,

-!         String fileName,

-!         String contentType)

-!         throws IOException

-!     {

-!         UploadOutputStream uploadStream = new UploadOutputStream();

-! 

-!         boolean last = readIntoStream(input, boundary, uploadStream);

-! 

-!         uploadStream.close();

-! 

-!         File file = uploadStream.getContentFile();

-! 

-!         UploadPart p;

-! 

-!         if (LOG.isDebugEnabled())

-!             LOG.debug("Read file part '" + name + "'.");

-! 

-!         if (file != null)

-!             p = new UploadPart(fileName, contentType, file);

-!         else

-!             p = new UploadPart(fileName, contentType, uploadStream.getContent());

-! 

-!         partMap.put(name, p);

-! 

-!         return last;

-!     }

-! 

-!     private boolean readValuePart(LineInput input, byte[] boundary, String name) throws IOException

-!     {

-!         ByteArrayOutputStream baos = new ByteArrayOutputStream();

-! 

-!         boolean last = readIntoStream(input, boundary, baos);

-! 

-!         baos.close();

-! 

-!         String value = baos.toString();

-! 

-!         if (LOG.isDebugEnabled())

-!             LOG.debug("Read value part '" + name + "' with value: " + value);

-! 

-!         ValuePart p = (ValuePart) partMap.get(name);

-! 

-!         if (p == null)

-!         {

-!             p = new ValuePart(value);

-!             partMap.put(name, p);

-!         }

-!         else

-!             p.add(value);

-! 

-!         return last;

-!     }

-! 

-!     private static final int CR = 13;

-!     private static final int LF = 10;

-!     private static final int SPECIAL = -2;

-! 

-!     /**

-!      *  Copies the input stream into the output stream, stopping once the boundary is seen

-!      *  (the boundary is not copied).  Returns true when the input stream is exhausted,

-!      *  false otherwise.

-!      * 

-!      *  This is an ugly cut and past of ugly code from Jetty.  This really needs to be fixed!

-!      * 

-!      **/

-! 

-!     private boolean readIntoStream(LineInput input, byte[] boundary, OutputStream stream)

-!         throws IOException

-!     {

-!         boolean result = false;

-!         int c = 0;

-!         boolean cr = false;

-!         boolean lf = false;

-!         int _char = SPECIAL;

-!         boolean more = true;

-! 

-!         while (true)

-!         {

-!             int b = 0;

-! 

-!             while (more)

-!             {

-!                 c = (_char != SPECIAL) ? _char : input.read();

-! 

-!                 if (c == -1)

-!                 {

-!                     more = false;

-!                     continue;

-!                 }

-! 

-!                 _char = SPECIAL;

-! 

-!                 // look for CR and/or LF

-!                 if (c == CR || c == LF)

-!                 {

-!                     if (c == CR)

-!                         _char = input.read();

-!                     break;

-!                 }

-! 

-!                 // look for boundary

-!                 if (b >= 0 && b < boundary.length && c == boundary[b])

-!                     b++;

-!                 else

-!                 {

-!                     // this is not a boundary

-!                     if (cr)

-!                         stream.write(CR);

-!                     if (lf)

-!                         stream.write(LF);

-!                     cr = lf = false;

-! 

-!                     if (b > 0)

-!                         stream.write(boundary, 0, b);

-!                     b = -1;

-! 

-!                     stream.write(c);

-!                 }

-!             }

-! 

-!             // check partial boundary

-!             if ((b > 0 && b < boundary.length - 2) || (b == boundary.length - 1))

-!             {

-!                 stream.write(boundary, 0, b);

-!                 b = -1;

-!             }

-! 

-!             // boundary match

-!             if (b > 0 || c == -1)

-!             {

-!                 if (b == boundary.length)

-!                     result = true;

-! 

-!                 if (_char == LF)

-!                     _char = SPECIAL;

-! 

-!                 break;

-!             }

-! 

-!             // handle CR LF

-!             if (cr)

-!                 stream.write(CR);

-!             if (lf)

-!                 stream.write(LF);

-! 

-!             cr = (c == CR);

-!             lf = (c == LF || _char == LF);

-! 

-!             if (_char == LF)

-!                 _char = SPECIAL;

-!         }

-! 

-!         return result;

-!     }

-  

-      /**

-       *  Invokes {@link IPart#cleanup()} on each part.

-       * 

-       **/

-- 

-      public void cleanup()

-      {

-!         Iterator i = partMap.values().iterator();

-          while (i.hasNext())

-          {

-              IPart part = (IPart) i.next();

-              part.cleanup();

-          }

-      }

-  

-!     public String getString(String name)

-!     {

-!         ValuePart p = (ValuePart) partMap.get(name);

-! 

-!         if (p == null)

-!             return null;

-! 

-!         return p.getValue();

-!     }

-! 

-!     public String[] getStrings(String name)

-!     {

-!         ValuePart p = (ValuePart) partMap.get(name);

-! 

-!         if (p == null)

-!             return null;

-! 

-!         return p.getValues();

-!     }

-! 

-!     public IUploadFile getUploadFile(String name)

-!     {

-!         return (UploadPart) partMap.get(name);

-!     }

-! }

-\ No newline at end of file

---- 75,266 ----

-   *  file uploads and multi-valued parameters.  After decoding, the class is used

-   *  to access the parameter values.

-   * 

-!  *  <p>This implementation is a thin wrapper around the Apache Jakarta

-!  *  <a href="http://jakarta.apache.org/commons/fileupload/">FileUpload</a>. 

-   *  

-   *  <p>Supports single valued parameters, multi-valued parameters and individual

-   *  file uploads.  That is, for file uploads, each upload must be a unique parameter

-!  *  (that is all the {@link net.sf.tapestry.form.Upload} component needs).

-  

-   *

-!  *  @author Joe Panico

-!  *  @version $Id: DefaultMultipartDecoder.java,v 1.1 2003/01/16 00:53:56 hlship Exp $

-   *  @since 2.0.1

-   *

-   **/

-! public class DefaultMultipartDecoder

-! 	extends Object

-! 	implements IMultipartDecoder

-  {

-! 	public static final int DEFAULT_MAX_SIZE = 10000000;

-! 	public static final int DEFAULT_THRESHOLD_SIZE = 1024;

-! 	public static final String DEFAULT_REPOSITORY_PATH = System.getProperty("java.io.tmpdir");

-! 	 	

-! 	private static final Log LOG =

-! 		LogFactory.getLog(DefaultMultipartDecoder.class);

-! 		

-! 	private static int _maxSize = DEFAULT_MAX_SIZE;

-! 	private static int _thresholdSize = DEFAULT_THRESHOLD_SIZE;

-! 	private static String _repositoryPath = DEFAULT_REPOSITORY_PATH;

-! 	

-! 	private Map _partMap = new HashMap();

-! 

-! 

-! 	public static void setMaxSize(int maxSize)

-! 	{

-! 		_maxSize = maxSize;

-! 	}

-! 	

-! 	public static int getMaxSize()

-! 	{

-! 		return _maxSize;

-! 	}

-! 	

-! 	public static  void setThresholdSize(int thresholdSize)

-! 	{

-! 		_thresholdSize = thresholdSize;

-! 	}

-! 	

-! 	public static int getThresholdSize()

-! 	{

-! 		return _thresholdSize;

-! 	}

-! 	

-! 	public static void setRepositoryPath(String repositoryPath)

-! 	{

-! 		_repositoryPath = repositoryPath;

-! 	}

-! 	

-! 	public static String getRepositoryPath()

-! 	{

-! 		return _repositoryPath;

-! 	}

-! 	

-! 	public static boolean isMultipartRequest(HttpServletRequest request)

-! 	{

-! 		return FileUpload.isMultipartContent(request);

-! 	}

-  

-      /**

-       *  Invokes {@link IPart#cleanup()} on each part.

-       * 

-       **/

-      public void cleanup()

-      {

-!         Iterator i = _partMap.values().iterator();

-          while (i.hasNext())

-          {

-              IPart part = (IPart) i.next();

-              part.cleanup();

-          }

-      }

-+ 	

-+ 	/**

-+ 	 * @see net.sf.tapestry.multipart.IMultipartDecoder#decode(HttpServletRequest)

-+ 	 * 

-+ 	 * @throws ApplicationRuntimeException if decode fails, for instance the

-+ 	 * request exceeds getMaxSize()

-+ 	 */

-+ 	public void decode(HttpServletRequest request)

-+ 	{

-+ 		if (request != null)

-+ 		{

-+ 			try

-+ 			{

-+ 				FileUpload aFileUpload = new FileUpload();

-+ 

-+ 				aFileUpload.setSizeMax(_maxSize);

-+ 				aFileUpload.setSizeThreshold(_thresholdSize);

-+ 				aFileUpload.setRepositoryPath(_repositoryPath);

-+ 

-+ 				List someParts = aFileUpload.parseRequest(request);

-+ 

-+ 				if ((someParts != null) && (someParts.size() > 0))

-+ 				{

-+ 					Iterator aPartIterator = someParts.iterator();

-+ 					while (aPartIterator.hasNext())

-+ 					{

-+ 						FileItem aPart = (FileItem) aPartIterator.next();

-+ 						if (aPart.isFormField())

-+ 						{

-+ 							String aPartName = aPart.getFieldName();

-+ 							ValuePart aValuePart = (ValuePart) _partMap.get(aPartName);

-+ 							if (aValuePart != null)

-+ 							{

-+ 								aValuePart.add(aPart.getString());

-+ 							}

-+ 							else

-+ 							{

-+ 								aValuePart = new ValuePart(aPart.getString());

-+ 								_partMap.put(aPartName, aValuePart);

-+ 							}

-+ 						}

-+ 						else

-+ 						{

-+ 							UploadPart aFile = new UploadPart(aPart);

-+ 

-+ 							_partMap.put(aPart.getFieldName(), aFile);

-+ 						}

-+ 					}

-+ 				}

-+ 			}

-+ 			catch (FileUploadException e)

-+ 			{

-+ 				LOG.warn("decode", e);

-+ 				throw new ApplicationRuntimeException(e);

-+ 			}

-+ 		}

-+ 

-+ 	}

-+ 

-+ 	/**

-+ 	 * @see net.sf.tapestry.multipart.IMultipartDecoder#getString(String)

-+ 	 */

-+ 	public String getString(String name)

-+ 	{

-+ 		String getString = null;

-+ 

-+ 		if (name != null)

-+ 		{

-+ 			ValuePart aPart = (ValuePart) _partMap.get(name);

-+ 			if (aPart != null)

-+ 			{

-+ 				getString = aPart.getValue();

-+ 			}

-+ 		}

-+ 		return getString;

-+ 	}

-+ 

-+ 	/**

-+ 	 * @see net.sf.tapestry.multipart.IMultipartDecoder#getStrings(String)

-+ 	 */

-+ 	public String[] getStrings(String name)

-+ 	{

-+ 		String[] getStrings = null;

-+ 

-+ 		if (name != null)

-+ 		{

-+ 			ValuePart aPart = (ValuePart) _partMap.get(name);

-+ 			if (aPart != null)

-+ 			{

-+ 				getStrings = aPart.getValues();

-+ 			}

-+ 		}

-+ 		return getStrings;

-+ 	}

-+ 

-+ 	/**

-+ 	 * @see net.sf.tapestry.multipart.IMultipartDecoder#getUploadFile(String)

-+ 	 */

-+ 	public IUploadFile getUploadFile(String name)

-+ 	{

-+ 		IUploadFile getUploadFile = null;

-+ 

-+ 		if (name != null)

-+ 		{

-+ 			getUploadFile = (IUploadFile) _partMap.get(name);

-+ 		}

-+ 		return getUploadFile;

-+ 	}

-  

-! }

-Index: UploadPart.java

-===================================================================

-RCS file: /home/cvspublic/jakarta-tapestry/framework/src/org/apache/tapestry/multipart/UploadPart.java,v

-retrieving revision 1.1

-diff -c -r1.1 UploadPart.java

-*** UploadPart.java	5 Mar 2003 22:59:49 -0000	1.1

---- UploadPart.java	21 Mar 2003 22:51:11 -0000

-***************

-*** 1,193 ****

-! /* ====================================================================

-!  * The Apache Software License, Version 1.1

-!  *

-!  * Copyright (c) 2000-2003 The Apache Software Foundation.  All rights

-!  * reserved.

-!  *

-!  * Redistribution and use in source and binary forms, with or without

-!  * modification, are permitted provided that the following conditions

-!  * are met:

-!  *

-!  * 1. Redistributions of source code must retain the above copyright

-!  *    notice, this list of conditions and the following disclaimer.

-!  *

-!  * 2. Redistributions in binary form must reproduce the above copyright

-!  *    notice, this list of conditions and the following disclaimer in

-!  *    the 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://apache.org/)."

-!  *    Alternately, this acknowledgment may appear in the software itself,

-!  *    if and wherever such third-party acknowledgments normally appear.

-!  *

-!  * 4. The names "Apache" and "Apache Software Foundation", "Tapestry" 

-!  *    must not be used to endorse or promote products derived from this

-!  *    software without prior written permission. For written

-!  *    permission, please contact apache@apache.org.

-!  *

-!  * 5. Products derived from this software may not be called "Apache" 

-!  *    or "Tapestry", nor may "Apache" or "Tapestry" 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 TAPESTRY CONTRIBUTOR COMMUNITY

-!  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

-!  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

-!  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF

-!  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND

-!  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,

-!  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT

-!  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF

-!  * SUCH DAMAGE.

-!  * ====================================================================

-!  *

-!  * This software consists of voluntary contributions made by many

-!  * individuals on behalf of the Apache Software Foundation.  For more

-!  * information on the Apache Software Foundation, please see

-!  * <http://www.apache.org/>.

-!  *

-   */

-- 

-  package org.apache.tapestry.multipart;

-  

-- import java.io.ByteArrayInputStream;

-  import java.io.File;

-- import java.io.FileInputStream;

-  import java.io.IOException;

-  import java.io.InputStream;

-  

-  import org.apache.commons.logging.Log;

-  import org.apache.commons.logging.LogFactory;

-  

-- import org.apache.tapestry.ApplicationRuntimeException;

-- import org.apache.tapestry.Tapestry;

-- import org.apache.tapestry.request.IUploadFile;

-  

-  /**

-   *  Portion of a multi-part request representing an uploaded file.

-   *

-!  *  @author Howard Lewis Ship

-!  *  @version $Id: UploadPart.java,v 1.1 2003/03/05 22:59:49 hlship Exp $

-   *  @since 2.0.1

-   *

-   **/

-! 

-! public class UploadPart implements IUploadFile, IPart

-  {

-!     private static final Log LOG = LogFactory.getLog(UploadPart.class);

-  

-!     private byte[] _content;

-!     private File _contentFile;

-!     private String _filePath;

-!     private String _contentType;

-! 

-!     public UploadPart(String filePath, String contentType, byte[] content)

-!     {

-!         _filePath = filePath;

-!         _contentType = contentType;

-!         _content = content;

-!     }

-! 

-!     public UploadPart(String filePath, String contentType, File contentFile)

-!     {

-!         _filePath = filePath;

-!         _contentType = contentType;        

-!         _contentFile = contentFile;

-!     }

-  

-  	/**

-  	 *  @since 2.0.4

-  	 * 

-  	 **/

-! 	

-!     public String getFilePath()

-!     {

-!         return _filePath;

-!     }

-  

-  	/**

-! 	 *  Always returns false, at least so far.  Future enhancements

-! 	 *  may involve truncating the input if it exceeds a certain

-! 	 *  size or upload time (such things may be used for denial

-! 	 *  of service attacks).

-! 	 * 

-! 	 **/

-! 	

-!     public boolean isTruncated()

-!     {

-!         return false;

-!     }

-! 

-!     public InputStream getStream()

-!     {

-!         if (_content != null)

-!             return new ByteArrayInputStream(_content);

-! 

-!         try

-!         {

-!             return new FileInputStream(_contentFile);

-!         }

-!         catch (IOException ex)

-!         {

-!             throw new ApplicationRuntimeException(

-!                 Tapestry.getString(

-!                     "UploadPart.unable-to-open-content-file",

-!                     _filePath,

-!                     _contentFile.getAbsolutePath()),

-!                 ex);

-!         }

-!     }

-  

-!     /**

-!      *  Deletes the external content file, if one exists.

-!      * 

-!      **/

-  

--     public void cleanup()

--     {

--         if (_contentFile != null)

--         {

--             if (LOG.isDebugEnabled())

--                 LOG.debug("Deleting upload file " + _contentFile + ".");

-- 

--             boolean success = _contentFile.delete();

-- 

--             if (!success)

--                 LOG.warn(

--                     Tapestry.getString(

--                         "UploadPart.temporary-file-not-deleted",

--                         _contentFile.getAbsolutePath()));

-- 

--             // In rare cases (when exceptions are thrown while the request

--             // is decoded), cleanup() may be called multiple times.

-- 

--             _contentFile = null;

--         }

-- 

--     }

--     

--     

-      /**

-!      *  Leverages {@link File} to convert the full file path and extract

-!      *  the name.

-       * 

-       **/

-!     

-!     public String getFileName()

-!     {

-!   		File file = new File(_filePath);

-!   		

-!   		return file.getName();

-!     }

-! 

-!     public String getContentType()

-!     {

-!         return _contentType;

-!     }

-  

-! }

-\ No newline at end of file

---- 1,201 ----

-! /*

-!  *  ====================================================================

-!  *  The Apache Software License, Version 1.1

-!  *

-!  *  Copyright (c) 2002 The Apache Software Foundation.  All rights

-!  *  reserved.

-!  *

-!  *  Redistribution and use in source and binary forms, with or without

-!  *  modification, are permitted provided that the following conditions

-!  *  are met:

-!  *

-!  *  1. Redistributions of source code must retain the above copyright

-!  *  notice, this list of conditions and the following disclaimer.

-!  *

-!  *  2. Redistributions in binary form must reproduce the above copyright

-!  *  notice, this list of conditions and the following disclaimer in

-!  *  the 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 "Apache" and "Apache Software Foundation" and

-!  *  "Apache Tapestry" must not be used to endorse or promote products

-!  *  derived from this software without prior written permission. For

-!  *  written permission, please contact apache@apache.org.

-!  *

-!  *  5. Products derived from this software may not be called "Apache",

-!  *  "Apache Tapestry", 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.  For more

-!  *  information on the Apache Software Foundation, please see

-!  *  <http://www.apache.org/>.

-   */

-  package org.apache.tapestry.multipart;

-  

-  import java.io.File;

-  import java.io.IOException;

-  import java.io.InputStream;

-  

-+ import org.apache.tapestry.ApplicationRuntimeException;

-+ import org.apache.tapestry.request.IUploadFile;

-+ 

-+ import org.apache.commons.fileupload.DefaultFileItem;

-+ import org.apache.commons.fileupload.FileItem;

-  import org.apache.commons.logging.Log;

-  import org.apache.commons.logging.LogFactory;

-  

-  

-  /**

-   *  Portion of a multi-part request representing an uploaded file.

-   *

-!  *  @author Joe Panico

-!  *  @version $Id: UploadPart.java,v 1.10 2003/01/13 03:33:23 hlship Exp $

-   *  @since 2.0.1

-   *

-   **/

-! public class UploadPart extends Object 

-! 	implements IUploadFile, IPart

-  {

-! 	private static final Log LOG =

-! 		LogFactory.getLog(UploadPart.class);

-! 		

-! 	FileItem _fileItem;

-! 	

-! 	public UploadPart(FileItem fileItem)

-! 	{

-! 		if( fileItem != null)

-! 		{

-! 			_fileItem = fileItem;

-! 		}

-! 		else

-! 		{

-! 			String aMessage = "UploadPart(FileItem) does not accept null args";

-! 			throw new IllegalArgumentException( aMessage);

-! 		}

-! 	}

-! 	

-! 	public static UploadPart newInstance(

-! 		String path,

-! 		String name,

-! 		String contentType,

-! 		int requestSize,

-! 		int threshold)

-! 	{

-! 		UploadPart newInstance = null;

-! 		FileItem aFileItem =

-! 			DefaultFileItem.newInstance(

-! 				path,

-! 				name,

-! 				contentType,

-! 				requestSize,

-! 				threshold);

-! 		

-! 		if( aFileItem != null)

-! 		{

-! 			newInstance = new UploadPart( aFileItem);

-! 		}

-! 		return newInstance;

-! 	}

-!                                        

-! 	/**

-! 	 * @see net.sf.tapestry.IUploadFile#getContentType()

-! 	 */

-! 	public String getContentType()

-! 	{

-! 		return _fileItem.getContentType();

-! 	}

-  

-!     /**

-!      *  Leverages {@link File} to convert the full file path and extract

-!      *  the name.

-!      * 

-!      **/

-! 	public String getFileName()

-! 	{

-!   		File aFile = new File( this.getFilePath() );

-!   		

-!   		return aFile.getName();

-! 	}

-  

-  	/**

-  	 *  @since 2.0.4

-  	 * 

-  	 **/

-! 	public String getFilePath()

-! 	{

-! 		return _fileItem.getName();

-! 	}

-  

-  	/**

-! 	 * @see net.sf.tapestry.IUploadFile#getStream()

-! 	 */

-! 	public InputStream getStream()

-! 	{

-! 		InputStream getStream = null;

-! 		

-! 		try

-! 		{

-! 			getStream = _fileItem.getInputStream();

-! 		}

-! 		catch (IOException e)

-! 		{

-! 			LOG.warn("getStream", e);

-! 			

-! 			throw new ApplicationRuntimeException(

-! 				"Unable to open uploaded file",

-! 				e);

-! 		}

-! 		

-! 		return getStream;

-! 	}

-  

-! 	/**

-! 	 * The current implementation does not truncate. Parts that are too

-! 	 * large cause a decode failure

-! 	 */

-! 	public boolean isTruncated()

-! 	{

-! 		return false;

-! 	}

-  

-      /**

-!      *  Deletes the external content file, if one exists.

-       * 

-       **/

-! 	public void cleanup()

-! 	{

-! 		_fileItem.delete();

-! 		// unfortunately FileItem.delete() does not signal success, so

-! 		// we rely on a little more internal knowledge than is ideal

-! 		File aStorageLocation = _fileItem.getStoreLocation();

-! 		if( (aStorageLocation != null) && (aStorageLocation.exists()) )

-! 		{

-! 			String aMessage = "Unable to delete FileItem: " + _fileItem;

-! 			

-! 			throw new ApplicationRuntimeException(aMessage);

-! 		}

-! 	}

-  

-! }

diff --git a/3.0.4/framework/src/org/apache/tapestry/package.html b/3.0.4/framework/src/org/apache/tapestry/package.html
deleted file mode 100644
index 2821b51..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/package.html
+++ /dev/null
@@ -1,45 +0,0 @@
-<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN">
-<!-- $Id$ -->
-<html>
-<head>
-<title>Tapestry: Web Application Framework</title>
-</head>
-<body>
-
-<b>Tapestry</b> is a comprehensive web application framework, written in Java.
-
-<p>Tapestry is not an application server.
-It is designed to be used inside an application server.
-
-<p>Tapestry is not an application.
-Tapestry is a framework for creating web applications.
-
-<p>Tapestry is not a way of using JavaServer Pages.
-Tapestry is an <i>alternative to</i> using JavaServer Pages.
-
-<p>Tapestry is not a scripting environment.
-Tapestry uses a component object model, not simple scripting,
-to create highly dynamic, interactive web pages.
-
-<p>Tapestry is based on the Java Servlet API version 2.2.
-
-<p>Tapestry uses a sophisticated component model to divide a web application into
-a hierarchy of {@link org.apache.tapestry.IComponent components}.
-Each component has specific responsibilities for rendering web pages
-(that is, generating a portion of an HTML page) and responding to HTML queries
-(such as clicking on a link, or submitting a form).
-
-<p>The Tapestry framework takes on virtually all of the responsibilities
-for managing application flow and server-side client state.  
-This allows developers to concentrate on the business and presentation aspects of the application.
-
-<hr>
-
-<p>Visit Tapestry's home page at
-<a href="http://jakarta.apache.org/tapestry">http://jakarta.apache.org/tapestry</a>
-for more details on licensing.
-
-@author Howard Ship <a href="mailto:hlship@apache.org">hlship@apache.org</a>
-
-</body>
-</html>
diff --git a/3.0.4/framework/src/org/apache/tapestry/pageload/ComponentTreeWalker.java b/3.0.4/framework/src/org/apache/tapestry/pageload/ComponentTreeWalker.java
deleted file mode 100644
index f309497..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/pageload/ComponentTreeWalker.java
+++ /dev/null
@@ -1,61 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.pageload;
-
-import java.util.Collection;
-import java.util.Iterator;
-
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.Tapestry;
-
-/**
- *  Walks through the tree of components and invokes the visitors on each of 
- *  of the components in the tree.
- * 
- *  @author mindbridge
- *  @version $Id$
- *  @since 3.0
- */
-public class ComponentTreeWalker
-{
-    private IComponentVisitor[] _visitors;
-    
-    public ComponentTreeWalker(IComponentVisitor[] visitors)
-    {
-        _visitors = visitors;
-    }
-
-    public void walkComponentTree(IComponent component)
-    {
-        // Invoke visitors
-        for (int i = 0; i < _visitors.length; i++)
-        {
-            IComponentVisitor visitor = _visitors[i];
-            visitor.visitComponent(component);
-        }
-
-        // Recurse into the embedded components
-        Collection components = component.getComponents().values();
-
-        if (Tapestry.size(components) == 0)
-            return;
-
-        for (Iterator it = components.iterator(); it.hasNext();)
-        {
-            IComponent embedded = (IComponent) it.next();
-            walkComponentTree(embedded);
-        }
-    }
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/pageload/EstablishDefaultParameterValuesVisitor.java b/3.0.4/framework/src/org/apache/tapestry/pageload/EstablishDefaultParameterValuesVisitor.java
deleted file mode 100644
index 11a355b..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/pageload/EstablishDefaultParameterValuesVisitor.java
+++ /dev/null
@@ -1,83 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.pageload;
-
-import java.util.Iterator;
-
-import org.apache.tapestry.ApplicationRuntimeException;
-import org.apache.tapestry.IBinding;
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.IResourceResolver;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.binding.ExpressionBinding;
-import org.apache.tapestry.spec.IComponentSpecification;
-import org.apache.tapestry.spec.IParameterSpecification;
-
-/**
- *  For all parameters in the examined component that have default values, but are not bound,
- *  automatically add an ExpressionBinding with the default value.
- *   
- *  @author mindbridge
- *  @version $Id$
- *  @since 3.0
- */
-public class EstablishDefaultParameterValuesVisitor implements IComponentVisitor
-{
-    private IResourceResolver _resolver;
-    
-    public EstablishDefaultParameterValuesVisitor(IResourceResolver resolver)
-    {
-        _resolver = resolver;
-    }
-    
-    /**
-     * @see org.apache.tapestry.pageload.IComponentVisitor#visitComponent(org.apache.tapestry.IComponent)
-     */
-    public void visitComponent(IComponent component)
-    {
-        IComponentSpecification spec = component.getSpecification();
-
-        Iterator i = spec.getParameterNames().iterator();
-
-        while (i.hasNext())
-        {
-            String name = (String) i.next();
-            IParameterSpecification parameterSpec = spec.getParameter(name);
-
-            String defaultValue = parameterSpec.getDefaultValue();
-            if (defaultValue == null)
-                continue;
-            
-            // the parameter has a default value, so it must not be required
-            if (parameterSpec.isRequired())
-            throw new ApplicationRuntimeException(
-                Tapestry.format(
-                    "EstablishDefaultParameterValuesVisitor.parameter-must-have-no-default-value",
-                    component.getExtendedId(),
-                    name),
-                component,
-                parameterSpec.getLocation(),
-                null);
-            
-            // if there is no binding for this parameter, bind it to the default value
-            if (component.getBinding(name) == null) {
-                IBinding binding = new ExpressionBinding(_resolver, component, defaultValue, parameterSpec.getLocation());
-                component.setBinding(name, binding);
-            }
-                
-        }
-    }
-
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/pageload/IComponentVisitor.java b/3.0.4/framework/src/org/apache/tapestry/pageload/IComponentVisitor.java
deleted file mode 100644
index 6ca0365..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/pageload/IComponentVisitor.java
+++ /dev/null
@@ -1,29 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.pageload;
-
-import org.apache.tapestry.IComponent;
-
-/**
- *  An interface defining an entity that is interested in examining a particular component 
- * 
- *  @author mindbridge
- *  @version $Id$
- *  @since 3.0
- */
-public interface IComponentVisitor
-{
-    void visitComponent(IComponent component);
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/pageload/PageLoader.java b/3.0.4/framework/src/org/apache/tapestry/pageload/PageLoader.java
deleted file mode 100644
index d48d4fa..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/pageload/PageLoader.java
+++ /dev/null
@@ -1,964 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.pageload;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Locale;
-
-import javax.servlet.http.HttpServletRequest;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.tapestry.ApplicationRuntimeException;
-import org.apache.tapestry.BaseComponent;
-import org.apache.tapestry.IAsset;
-import org.apache.tapestry.IBinding;
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.IEngine;
-import org.apache.tapestry.ILocation;
-import org.apache.tapestry.INamespace;
-import org.apache.tapestry.IPage;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.IResourceLocation;
-import org.apache.tapestry.IResourceResolver;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.asset.ContextAsset;
-import org.apache.tapestry.asset.ExternalAsset;
-import org.apache.tapestry.asset.PrivateAsset;
-import org.apache.tapestry.binding.ExpressionBinding;
-import org.apache.tapestry.binding.FieldBinding;
-import org.apache.tapestry.binding.ListenerBinding;
-import org.apache.tapestry.binding.StaticBinding;
-import org.apache.tapestry.binding.StringBinding;
-import org.apache.tapestry.engine.IComponentClassEnhancer;
-import org.apache.tapestry.engine.IPageLoader;
-import org.apache.tapestry.engine.ISpecificationSource;
-import org.apache.tapestry.engine.ITemplateSource;
-import org.apache.tapestry.event.PageDetachListener;
-import org.apache.tapestry.html.BasePage;
-import org.apache.tapestry.request.RequestContext;
-import org.apache.tapestry.resolver.ComponentSpecificationResolver;
-import org.apache.tapestry.resource.ClasspathResourceLocation;
-import org.apache.tapestry.resource.ContextResourceLocation;
-import org.apache.tapestry.spec.AssetType;
-import org.apache.tapestry.spec.BindingType;
-import org.apache.tapestry.spec.IAssetSpecification;
-import org.apache.tapestry.spec.IBindingSpecification;
-import org.apache.tapestry.spec.IComponentSpecification;
-import org.apache.tapestry.spec.IContainedComponent;
-import org.apache.tapestry.spec.IListenerBindingSpecification;
-import org.apache.tapestry.spec.IPropertySpecification;
-
-/**
- *  Runs the process of building the component hierarchy for an entire page.
- * 
- *  <p>
- *  This class is not threadsafe; however, {@link org.apache.tapestry.pageload.PageSource}
- *  creates a new instance of it for each page to be loaded, which bypasses
- *  multithreading issues.
- *
- *  @author Howard Lewis Ship
- * 
- **/
-
-public class PageLoader implements IPageLoader
-{
-    private static final Log LOG = LogFactory.getLog(PageLoader.class);
-
-    private IEngine _engine;
-    private IResourceResolver _resolver;
-    private IComponentClassEnhancer _enhancer;
-    private ISpecificationSource _specificationSource;
-    private ComponentSpecificationResolver _componentResolver;
-    private List _inheritedBindingQueue = new ArrayList();
-    private List _propertyInitializers = new ArrayList();
-    private ComponentTreeWalker _establishDefaultParameterValuesWalker;
-    private ComponentTreeWalker _verifyRequiredParametersWalker;
-
-    /**
-     * The locale of the application, which is also the locale
-     * of the page being loaded.
-     *
-     **/
-
-    private Locale _locale;
-
-    /**
-     *  Number of components instantiated, excluding the page itself.
-     *
-     **/
-
-    private int _count;
-
-    /**
-     *  The recursion depth.  A page with no components is zero.  A component on
-     *  a page is one.
-     *
-     **/
-
-    private int _depth;
-
-    /**
-     *  The maximum depth reached while building the page.
-     *
-     **/
-
-    private int _maxDepth;
-
-    /**
-     *  Used to figure relative paths for context assets.
-     * 
-     **/
-
-    private IResourceLocation _servletLocation;
-
-    private static interface IQueuedInheritedBinding
-    {
-        void connect();
-    }
-
-    private static class QueuedInheritedBinding implements IQueuedInheritedBinding
-    {
-        private IComponent _component;
-        private String _containerParameterName;
-        private String _parameterName;
-
-        private QueuedInheritedBinding(
-            IComponent component,
-            String containerParameterName,
-            String parameterName)
-        {
-            _component = component;
-            _containerParameterName = containerParameterName;
-            _parameterName = parameterName;
-        }
-
-        public void connect()
-        {
-            IBinding binding = _component.getContainer().getBinding(_containerParameterName);
-
-            if (binding == null)
-                return;
-
-            _component.setBinding(_parameterName, binding);
-        }
-    }
-
-    private static class QueuedInheritInformalBindings implements IQueuedInheritedBinding
-    {
-        private IComponent _component;
-
-        private QueuedInheritInformalBindings(IComponent component)
-        {
-            _component = component;
-        }
-
-        public void connect()
-        {
-
-            IComponent container = _component.getContainer();
-
-            for (Iterator it = container.getBindingNames().iterator(); it.hasNext();)
-            {
-                String bindingName = (String) it.next();
-                connectInformalBinding(container, _component, bindingName);
-            }
-        }
-
-        private void connectInformalBinding(
-            IComponent container,
-            IComponent component,
-            String bindingName)
-        {
-            IComponentSpecification componentSpec = component.getSpecification();
-            IComponentSpecification containerSpec = container.getSpecification();
-
-            // check if binding already exists in the component
-            if (component.getBinding(bindingName) != null)
-                return;
-
-            // check if parameter is informal for the component
-            if (componentSpec.getParameter(bindingName) != null
-                || componentSpec.isReservedParameterName(bindingName))
-                return;
-
-            // check if parameter is informal for the container
-            if (containerSpec.getParameter(bindingName) != null
-                || containerSpec.isReservedParameterName(bindingName))
-                return;
-
-            // if everything passes, establish binding
-            IBinding binding = container.getBinding(bindingName);
-            component.setBinding(bindingName, binding);
-        }
-    }
-
-    /**
-     *  Constructor.
-     *
-     **/
-
-    public PageLoader(IRequestCycle cycle)
-    {
-        IEngine engine = cycle.getEngine();
-
-        _specificationSource = engine.getSpecificationSource();
-        _resolver = engine.getResourceResolver();
-        _enhancer = engine.getComponentClassEnhancer();
-        _componentResolver = new ComponentSpecificationResolver(cycle);
-
-        RequestContext context = cycle.getRequestContext();
-
-        // Need the location of the servlet within the context as the basis
-        // for building relative context asset paths.
-
-        HttpServletRequest request = context.getRequest();
-
-        String servletPath = request.getServletPath();
-
-        _servletLocation =
-            new ContextResourceLocation(context.getServlet().getServletContext(), servletPath);
-
-        // Create the mechanisms for walking the component tree when it is complete
-        IComponentVisitor verifyRequiredParametersVisitor = new VerifyRequiredParametersVisitor();
-        _verifyRequiredParametersWalker = new ComponentTreeWalker(new IComponentVisitor[] { verifyRequiredParametersVisitor });
-
-        IComponentVisitor establishDefaultParameterValuesVisitor =
-            new EstablishDefaultParameterValuesVisitor(_resolver);
-        _establishDefaultParameterValuesWalker = new ComponentTreeWalker(new IComponentVisitor[] { establishDefaultParameterValuesVisitor });
-    }
-
-    /**
-     *  Binds properties of the component as defined by the container's specification.
-     *
-     * <p>This implementation is very simple, we will need a lot more
-     *  sanity checking and eror checking in the final version.
-     *
-     *  @param container The containing component.  For a dynamic
-     *  binding ({@link ExpressionBinding}) the property name
-     *  is evaluated with the container as the root.
-     *  @param component The contained component being bound.
-     *  @param spec The specification of the contained component.
-     *  @param contained The contained component specification (from the container's
-     *  {@link IComponentSpecification}).
-     *
-     **/
-
-    private void bind(IComponent container, IComponent component, IContainedComponent contained)
-    {
-        IComponentSpecification spec = component.getSpecification();
-        boolean formalOnly = !spec.getAllowInformalParameters();
-
-        IComponentSpecification containerSpec = container.getSpecification();
-        boolean containerFormalOnly = !containerSpec.getAllowInformalParameters();
-
-        if (contained.getInheritInformalParameters())
-        {
-            if (formalOnly)
-                throw new ApplicationRuntimeException(
-                    Tapestry.format(
-                        "PageLoader.inherit-informal-invalid-component-formal-only",
-                        component.getExtendedId()),
-                    component,
-                    contained.getLocation(),
-                    null);
-
-            if (containerFormalOnly)
-                throw new ApplicationRuntimeException(
-                    Tapestry.format(
-                        "PageLoader.inherit-informal-invalid-container-formal-only",
-                        container.getExtendedId(),
-                        component.getExtendedId()),
-                    component,
-                    contained.getLocation(),
-                    null);
-
-            IQueuedInheritedBinding queued = new QueuedInheritInformalBindings(component);
-            _inheritedBindingQueue.add(queued);
-        }
-
-        Iterator i = contained.getBindingNames().iterator();
-
-        while (i.hasNext())
-        {
-            String name = (String) i.next();
-
-            boolean isFormal = spec.getParameter(name) != null;
-
-            IBindingSpecification bspec = contained.getBinding(name);
-
-            // If not allowing informal parameters, check that each binding matches
-            // a formal parameter.
-
-            if (formalOnly && !isFormal)
-                throw new ApplicationRuntimeException(
-                    Tapestry.format(
-                        "PageLoader.formal-parameters-only",
-                        component.getExtendedId(),
-                        name),
-                    component,
-                    bspec.getLocation(),
-                    null);
-
-            // If an informal parameter that conflicts with a reserved name, then
-            // skip it.
-
-            if (!isFormal && spec.isReservedParameterName(name))
-                continue;
-
-            // The type determines how to interpret the value:
-            // As a simple static String
-            // As a nested property name (relative to the component)
-            // As the name of a binding inherited from the containing component.
-            // As the name of a public field
-            // As a script for a listener
-
-            BindingType type = bspec.getType();
-
-            // For inherited bindings, defer until later.  This gives components
-            // a chance to setup bindings from static values and expressions in the
-            // template.  The order of operations is tricky, template bindings come
-            // later.
-
-            if (type == BindingType.INHERITED)
-            {
-                QueuedInheritedBinding queued =
-                    new QueuedInheritedBinding(component, bspec.getValue(), name);
-                _inheritedBindingQueue.add(queued);
-                continue;
-            }
-
-            if (type == BindingType.LISTENER)
-            {
-                constructListenerBinding(component, name, (IListenerBindingSpecification) bspec);
-                continue;
-            }
-
-            IBinding binding = convert(container, bspec);
-
-            if (binding != null)
-                component.setBinding(name, binding);
-        }
-    }
-
-    private IBinding convert(IComponent container, IBindingSpecification spec)
-    {
-        BindingType type = spec.getType();
-        ILocation location = spec.getLocation();
-        String value = spec.getValue();
-
-        // The most common type. 
-        // TODO These bindings should be created somehow using the SpecFactory in SpecificationParser
-        if (type == BindingType.DYNAMIC)
-            return new ExpressionBinding(_resolver, container, value, location);
-
-        // String bindings are new in 2.0.4.  For the momement,
-        // we don't even try to cache and share them ... they
-        // are most often unique within a page.
-
-        if (type == BindingType.STRING)
-            return new StringBinding(container, value, location);
-
-        // static and field bindings are pooled.  This allows the
-        // same instance to be used with many components.
-
-        if (type == BindingType.STATIC)
-            return new StaticBinding(value, location);
-
-        // BindingType.FIELD is on the way out, it is in the
-        // 1.3 DTD but not the 1.4 DTD.
-
-        if (type == BindingType.FIELD)
-            return new FieldBinding(_resolver, value, location);
-
-        // This code is unreachable, at least until a new type
-        // of binding is created.
-
-        throw new ApplicationRuntimeException("Unexpected type: " + type + ".");
-    }
-
-    /**
-     *  Construct a {@link ListenerBinding} for the component, and add it.
-     * 
-     *  @since 3.0
-     * 
-     **/
-
-    private void constructListenerBinding(
-        IComponent component,
-        String bindingName,
-        IListenerBindingSpecification spec)
-    {
-        String language = spec.getLanguage();
-
-        // If not provided in the page or component specification, then
-        // search for a default (factory default is "jython").
-
-        if (Tapestry.isBlank(language))
-            language =
-                _engine.getPropertySource().getPropertyValue(
-                    "org.apache.tapestry.default-script-language");
-
-        // Construct the binding.  The first parameter is the compononent
-        // (not the DirectLink or Form, but the page or component containing the link or form).
-
-        IBinding binding =
-            new ListenerBinding(
-                component.getContainer(),
-                language,
-                spec.getScript(),
-                spec.getLocation());
-
-        component.setBinding(bindingName, binding);
-    }
-
-    /**
-     *  Sets up a component.  This involves:
-     *  <ul>
-     * <li>Instantiating any contained components.
-     * <li>Add the contained components to the container.
-     * <li>Setting up bindings between container and containees.
-     * <li>Construct the containees recursively.
-     * <li>Invoking {@link IComponent#finishLoad(IRequestCycle, IPageLoader, IComponentSpecification)}
-     * </ul>
-     *
-     *  @param cycle the request cycle for which the page is being (initially) constructed
-     *  @param page The page on which the container exists.
-     *  @param container The component to be set up.
-     *  @param containerSpec The specification for the container.
-     *  @param the namespace of the container
-     *
-     **/
-
-    private void constructComponent(
-        IRequestCycle cycle,
-        IPage page,
-        IComponent container,
-        IComponentSpecification containerSpec,
-        INamespace namespace)
-    {
-        _depth++;
-        if (_depth > _maxDepth)
-            _maxDepth = _depth;
-
-        List ids = new ArrayList(containerSpec.getComponentIds());
-        int count = ids.size();
-
-        try
-        {
-            for (int i = 0; i < count; i++)
-            {
-                String id = (String) ids.get(i);
-
-                // Get the sub-component specification from the
-                // container's specification.
-
-                IContainedComponent contained = containerSpec.getComponent(id);
-
-                String type = contained.getType();
-                ILocation location = contained.getLocation();
-
-                _componentResolver.resolve(cycle, namespace, type, location);
-
-                IComponentSpecification componentSpecification =
-                    _componentResolver.getSpecification();
-                INamespace componentNamespace = _componentResolver.getNamespace();
-
-                // Instantiate the contained component.
-
-                IComponent component =
-                    instantiateComponent(
-                        page,
-                        container,
-                        id,
-                        componentSpecification,
-                        componentNamespace,
-                        location);
-
-                // Add it, by name, to the container.
-
-                container.addComponent(component);
-
-                // Set up any bindings in the IContainedComponent specification
-
-                bind(container, component, contained);
-
-                // Now construct the component recusively; it gets its chance
-                // to create its subcomponents and set their bindings.
-
-                constructComponent(
-                    cycle,
-                    page,
-                    component,
-                    componentSpecification,
-                    componentNamespace);
-            }
-
-            addAssets(container, containerSpec);
-
-            // Finish the load of the component; most components (which
-            // subclass BaseComponent) load their templates here.
-            // That may cause yet more components to be created, and more
-            // bindings to be set, so we defer some checking until
-            // later.
-
-            container.finishLoad(cycle, this, containerSpec);
-
-            // Finally, we create an initializer for each
-            // specified property.
-
-            createPropertyInitializers(page, container, containerSpec);
-        }
-        catch (ApplicationRuntimeException ex)
-        {
-            throw ex;
-        }
-        catch (RuntimeException ex)
-        {
-            throw new ApplicationRuntimeException(
-                Tapestry.format(
-                    "PageLoader.unable-to-instantiate-component",
-                    container.getExtendedId(),
-                    ex.getMessage()),
-                container,
-                null,
-                ex);
-        }
-
-        _depth--;
-    }
-
-    /**
-     *  Invoked to create an implicit component (one which is defined in the
-     *  containing component's template, rather that in the containing component's
-     *  specification).
-     * 
-     *  @see org.apache.tapestry.BaseComponentTemplateLoader
-     *  @since 3.0
-     * 
-     **/
-
-    public IComponent createImplicitComponent(
-        IRequestCycle cycle,
-        IComponent container,
-        String componentId,
-        String componentType,
-        ILocation location)
-    {
-        IPage page = container.getPage();
-
-        _componentResolver.resolve(cycle, container.getNamespace(), componentType, location);
-
-        INamespace componentNamespace = _componentResolver.getNamespace();
-        IComponentSpecification spec = _componentResolver.getSpecification();
-
-        IComponent result =
-            instantiateComponent(page, container, componentId, spec, componentNamespace, location);
-
-        container.addComponent(result);
-
-        // Recusively build the component.
-
-        constructComponent(cycle, page, result, spec, componentNamespace);
-
-        return result;
-    }
-
-    /**
-     *  Instantiates a component from its specification. We instantiate
-     *  the component object, then set its specification, page, container and id.
-     *
-     *  @see AbstractComponent
-     * 
-     **/
-
-    private IComponent instantiateComponent(
-        IPage page,
-        IComponent container,
-        String id,
-        IComponentSpecification spec,
-        INamespace namespace,
-        ILocation location)
-    {
-        IComponent result = null;
-        String className = spec.getComponentClassName();
-
-        if (Tapestry.isBlank(className))
-            className = BaseComponent.class.getName();
-
-        Class componentClass = _enhancer.getEnhancedClass(spec, className);
-        String enhancedClassName = componentClass.getName();
-
-        try
-        {
-            result = (IComponent) componentClass.newInstance();
-
-        }
-        catch (ClassCastException ex)
-        {
-            throw new ApplicationRuntimeException(
-                Tapestry.format("PageLoader.class-not-component", enhancedClassName),
-                container,
-                spec.getLocation(),
-                ex);
-        }
-        catch (Throwable ex)
-        {
-            throw new ApplicationRuntimeException(
-                Tapestry.format("PageLoader.unable-to-instantiate", enhancedClassName),
-                container,
-                spec.getLocation(),
-                ex);
-        }
-
-        if (result instanceof IPage)
-            throw new ApplicationRuntimeException(
-                Tapestry.format("PageLoader.page-not-allowed", result.getExtendedId()),
-                result,
-                null,
-                null);
-
-        result.setNamespace(namespace);
-        result.setSpecification(spec);
-        result.setPage(page);
-        result.setContainer(container);
-        result.setId(id);
-        result.setLocation(location);
-
-        _count++;
-
-        return result;
-    }
-
-    /**
-     *  Instantitates a page from its specification.
-     *
-     *  @param name the unqualified, simple, name for the page
-     *  @param namespace the namespace containing the page's specification
-     *  @param spec the page's specification
-     * 
-     *  We instantiate the page object, then set its specification,
-     *  names and locale.
-     *
-     *  @see IEngine
-     *  @see ChangeObserver
-     **/
-
-    private IPage instantiatePage(String name, INamespace namespace, IComponentSpecification spec)
-    {
-        IPage result = null;
-
-        String pageName = namespace.constructQualifiedName(name);
-        String className = spec.getComponentClassName();
-        ILocation location = spec.getLocation();
-
-        if (Tapestry.isBlank(className))
-        {
-            if (LOG.isDebugEnabled())
-                LOG.debug(
-                    "Page "
-                        + namespace.constructQualifiedName(name)
-                        + " does not specify a component class.");
-
-            className =
-                _engine.getPropertySource().getPropertyValue(
-                    "org.apache.tapestry.default-page-class");
-
-            if (className == null)
-                className = BasePage.class.getName();
-
-            if (LOG.isDebugEnabled())
-                LOG.debug("Defaulting to class " + className);
-        }
-
-        Class pageClass = _enhancer.getEnhancedClass(spec, className);
-        String enhancedClassName = pageClass.getName();
-
-        try
-        {
-            result = (IPage) pageClass.newInstance();
-
-            result.setNamespace(namespace);
-            result.setSpecification(spec);
-            result.setPageName(pageName);
-            result.setPage(result);
-            result.setLocale(_locale);
-            result.setLocation(location);
-        }
-        catch (ClassCastException ex)
-        {
-            throw new ApplicationRuntimeException(
-                Tapestry.format("PageLoader.class-not-page", enhancedClassName),
-                location,
-                ex);
-        }
-        catch (Exception ex)
-        {
-            throw new ApplicationRuntimeException(
-                Tapestry.format("PageLoader.unable-to-instantiate", enhancedClassName),
-                location,
-                ex);
-        }
-
-        return result;
-    }
-
-    /**
-     *  Invoked by the {@link PageSource} to load a specific page.  This
-     *  method is not reentrant ... the PageSource ensures that
-     *  any given instance of PageLoader is loading only a single page at a time.
-     *  The page is immediately attached to the {@link IEngine engine}.
-     *
-     *  @param name the simple (unqualified) name of the page to load
-     *  @param namespace from which the page is to be loaded (used
-     *  when resolving components embedded by the page)
-     *  @param cycle the request cycle the page is 
-     *  initially loaded for (this is used
-     *  to define the locale of the new page, and provide access
-     *  to the corect specification source, etc.).
-     *  @param specification the specification for the page
-     *
-     **/
-
-    public IPage loadPage(
-        String name,
-        INamespace namespace,
-        IRequestCycle cycle,
-        IComponentSpecification specification)
-    {
-        IPage page = null;
-
-        _engine = cycle.getEngine();
-
-        _locale = _engine.getLocale();
-
-        _count = 0;
-        _depth = 0;
-        _maxDepth = 0;
-
-        try
-        {
-            page = instantiatePage(name, namespace, specification);
-
-            page.attach(_engine);
-            
-            // As of 3.0.1, this is done now, rather than after constructing the page and its 
-            // components.
-            
-            page.setRequestCycle(cycle);
-
-            constructComponent(cycle, page, page, specification, namespace);
-
-            // Walk through the complete component tree to set up the default parameter values.
-            _establishDefaultParameterValuesWalker.walkComponentTree(page);
-
-            establishInheritedBindings();
-
-            // Walk through the complete component tree to ensure that required parameters are bound 
-            _verifyRequiredParametersWalker.walkComponentTree(page);
-            
-            establishDefaultPropertyValues();
-        }
-        finally
-        {
-            _locale = null;
-            _engine = null;
-            _inheritedBindingQueue.clear();
-            _propertyInitializers.clear();
-        }
-
-        if (LOG.isDebugEnabled())
-            LOG.debug(
-                "Loaded page "
-                    + page
-                    + " with "
-                    + _count
-                    + " components (maximum depth "
-                    + _maxDepth
-                    + ")");
-
-        return page;
-    }
-
-    private void establishInheritedBindings()
-    {
-        LOG.debug("Establishing inherited bindings");
-
-        int count = _inheritedBindingQueue.size();
-
-        for (int i = 0; i < count; i++)
-        {
-            IQueuedInheritedBinding queued =
-                (IQueuedInheritedBinding) _inheritedBindingQueue.get(i);
-
-            queued.connect();
-        }
-    }
-    
-    private void establishDefaultPropertyValues()
-    {
-        LOG.debug("Setting default property values");
-
-        int count = _propertyInitializers.size();
-
-        for (int i = 0; i < count; i++)
-        {
-            PageDetachListener initializer =
-                (PageDetachListener) _propertyInitializers.get(i);
-
-            initializer.pageDetached(null);
-        }
-    }
-
-    private void addAssets(IComponent component, IComponentSpecification specification)
-    {
-        List names = specification.getAssetNames();
-
-        if (names.isEmpty())
-            return;
-
-        IResourceLocation specLocation = specification.getSpecificationLocation();
-
-        Iterator i = names.iterator();
-
-        while (i.hasNext())
-        {
-            String name = (String) i.next();
-            IAssetSpecification assetSpec = specification.getAsset(name);
-            IAsset asset = convert(name, component, assetSpec, specLocation);
-
-            component.addAsset(name, asset);
-        }
-    }
-
-    /**
-     *  Invoked from 
-     *  {@link #constructComponent(IRequestCycle, IPage, IComponent, IComponentSpecification, INamespace)}
-     *  after {@link IComponent#finishLoad(IRequestCycle, IPageLoader, IComponentSpecification)}
-     *  is invoked.  This iterates over any
-     *  {@link org.apache.tapestry.spec.IPropertySpecification}s for the component,
-     *  create an initializer for each.
-     * 
-     **/
-
-    private void createPropertyInitializers(
-        IPage page,
-        IComponent component,
-        IComponentSpecification spec)
-    {
-        List names = spec.getPropertySpecificationNames();
-        int count = names.size();
-
-        for (int i = 0; i < count; i++)
-        {
-            String name = (String) names.get(i);
-            IPropertySpecification ps = spec.getPropertySpecification(name);
-            String expression = ps.getInitialValue();
-
-            PageDetachListener initializer =
-                new PropertyInitializer(_resolver, component, name, expression, ps.getLocation());
-
-            _propertyInitializers.add(initializer);
-            page.addPageDetachListener(initializer);
-        }
-
-    }
-
-    /**
-     *  Builds an instance of {@link IAsset} from the specification.
-     *
-     **/
-
-    private IAsset convert(
-        String assetName,
-        IComponent component,
-        IAssetSpecification spec,
-        IResourceLocation specificationLocation)
-    {
-        AssetType type = spec.getType();
-        String path = spec.getPath();
-        ILocation location = spec.getLocation();
-
-        if (type == AssetType.EXTERNAL)
-            return new ExternalAsset(path, location);
-
-        if (type == AssetType.PRIVATE)
-        {
-            IResourceLocation baseLocation = specificationLocation;
-
-            // Fudge a special case for private assets with complete paths.  The specificationLocation
-            // can't be used because it is often a ContextResourceLocation,
-            // not a ClasspathResourceLocation.
-
-            if (path.startsWith("/"))
-            {
-                baseLocation = new ClasspathResourceLocation(_resolver, "/");
-                path = path.substring(1);
-            }
-
-            return new PrivateAsset(
-                (ClasspathResourceLocation) findAsset(assetName,
-                    component,
-                    baseLocation,
-                    path,
-                    location),
-                location);
-        }
-
-        return new ContextAsset(
-            (ContextResourceLocation) findAsset(assetName,
-                component,
-                _servletLocation,
-                path,
-                location),
-            location);
-    }
-
-    private IResourceLocation findAsset(
-        String assetName,
-        IComponent component,
-        IResourceLocation baseLocation,
-        String path,
-        ILocation location)
-    {
-        IResourceLocation assetLocation = baseLocation.getRelativeLocation(path);
-        IResourceLocation localizedLocation = assetLocation.getLocalization(_locale);
-
-        if (localizedLocation == null)
-            throw new ApplicationRuntimeException(
-                Tapestry.format(
-                    "PageLoader.missing-asset",
-                    assetName,
-                    component.getExtendedId(),
-                    assetLocation),
-                component,
-                location,
-                null);
-
-        return localizedLocation;
-    }
-
-    public IEngine getEngine()
-    {
-        return _engine;
-    }
-
-    public ITemplateSource getTemplateSource()
-    {
-        return _engine.getTemplateSource();
-    }
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/pageload/PageSource.java b/3.0.4/framework/src/org/apache/tapestry/pageload/PageSource.java
deleted file mode 100644
index d72c25d..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/pageload/PageSource.java
+++ /dev/null
@@ -1,280 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.pageload;
-
-import org.apache.commons.lang.builder.ToStringBuilder;
-import org.apache.tapestry.IEngine;
-import org.apache.tapestry.IPage;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.IResourceResolver;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.engine.IMonitor;
-import org.apache.tapestry.engine.IPageSource;
-import org.apache.tapestry.resolver.PageSpecificationResolver;
-import org.apache.tapestry.util.MultiKey;
-import org.apache.tapestry.util.pool.Pool;
-
-/**
- *  A source for pages for a particular application.  Each application
- *  should have its own <code>PageSource</code>, storing it into the
- *  {@link javax.servlet.ServletContext} using a unique key (usually built from
- *  the application name).
- *
- *  <p>The <code>PageSource</code> acts as a pool for {@link IPage} instances.
- *  Pages are retrieved from the pool using {@link #getPage(IRequestCycle, String, IMonitor)}
- *  and are later returned to the pool using {@link #releasePage(IPage)}.
- *
- *
- *  <p>TBD: Pooled pages stay forever.  Need a strategy for cleaning up the pool,
- *  tracking which pages have been in the pool the longest, etc.  A mechanism
- *  for reporting pool statistics would be useful.
- *
- *  @author Howard Lewis Ship
- * 
- **/
-
-public class PageSource implements IPageSource
-{
-    /**
-     *  Key used to find PageLoader instances in the Pool.
-     * 
-     **/
-
-    private static final String PAGE_LOADER_POOL_KEY = "org.apache.tapestry.PageLoader";
-
-    /**
-     * Key used to find {@link PageSpecificationResolver} instance
-     * in the pool.
-     */
-
-    private static final String PAGE_SPECIFICATION_RESOLVER_KEY =
-        "org.apache.tapestry.PageSpecificationResolver";
-
-    private IResourceResolver _resolver;
-
-    /**
-     *  The pool of {@link IPage}s.  The key is a {@link MultiKey},
-     *  built from the page name and the page locale.  This is a reference
-     *  to a shared pool.
-     * 
-     *  @see IEngine#getPool()
-     *
-     **/
-
-    private Pool _pool;
-
-    public PageSource(IEngine engine)
-    {
-        _resolver = engine.getResourceResolver();
-        _pool = engine.getPool();
-    }
-
-    public IResourceResolver getResourceResolver()
-    {
-        return _resolver;
-    }
-
-    /**
-     *  Builds a key for a named page in the application's current locale.
-     *
-     **/
-
-    protected MultiKey buildKey(IEngine engine, String pageName)
-    {
-        Object[] keys;
-
-        keys = new Object[] { pageName, engine.getLocale()};
-
-        // Don't make a copy, this array is just for the MultiKey.
-
-        return new MultiKey(keys, false);
-    }
-
-    /**
-     *  Builds a key from an existing page, using the page's name and locale.  This is
-     *  used when storing a page into the pool.
-     *
-     **/
-
-    protected MultiKey buildKey(IPage page)
-    {
-        Object[] keys;
-
-        keys = new Object[] { page.getPageName(), page.getLocale()};
-
-        // Don't make a copy, this array is just for the MultiKey.
-
-        return new MultiKey(keys, false);
-    }
-
-    /**
-     *  Gets the page from a pool, or otherwise loads the page.  This operation
-     *  is threadsafe.
-     *
-     **/
-
-    public IPage getPage(IRequestCycle cycle, String pageName, IMonitor monitor)
-    {
-        IEngine engine = cycle.getEngine();
-        Object key = buildKey(engine, pageName);
-        IPage result = (IPage) _pool.retrieve(key);
-
-        if (result == null)
-        {
-            monitor.pageCreateBegin(pageName);
-
-            // Resolvers are not threadsafe, so we get one from
-            // the pool or create as needed.
-
-            PageSpecificationResolver pageSpecificationResolver =
-                getPageSpecificationResolver(cycle);
-
-            pageSpecificationResolver.resolve(cycle, pageName);
-
-            // Likewise PageLoader
-
-            PageLoader loader = getPageLoader(cycle);
-
-            try
-            {
-                result =
-                    loader.loadPage(
-                        pageSpecificationResolver.getSimplePageName(),
-                        pageSpecificationResolver.getNamespace(),
-                        cycle,
-                        pageSpecificationResolver.getSpecification());
-            }
-            finally
-            {
-                discardPageLoader(loader);
-                discardPageSpecificationResolver(pageSpecificationResolver);
-            }
-
-            monitor.pageCreateEnd(pageName);
-        }
-        else
-        {
-            // The page loader attaches the engine, but a page from
-            // the pool needs to be explicitly attached.
-
-            result.attach(engine);
-            result.setRequestCycle(cycle);
-        }
-
-        return result;
-    }
-
-    /**
-     *  Invoked to obtain an instance of 
-     *  {@link PageLoader}.  An instance if aquired from the pool or,
-     *  if none are available, created fresh.
-     * 
-     *  @since 3.0
-     * 
-     **/
-
-    protected PageLoader getPageLoader(IRequestCycle cycle)
-    {
-        PageLoader result = (PageLoader) _pool.retrieve(PAGE_LOADER_POOL_KEY);
-
-        if (result == null)
-            result = new PageLoader(cycle);
-
-        return result;
-    }
-
-    /**
-     *  Invoked once the {@link PageLoader} is not
-     *  longer needed; it is then returned to the pool.
-     * 
-     *  @since 3.0
-     * 
-     **/
-
-    protected void discardPageLoader(PageLoader loader)
-    {
-        _pool.store(PAGE_LOADER_POOL_KEY, loader);
-    }
-
-    /**
-     * Invoked to obtain an instance of {@link PageSpecificationResolver}.
-     * An instance is acquired form the pool or, if none are available,
-     * a new one is instantiated.
-     * 
-     * @since 3.0
-     */
-
-    protected PageSpecificationResolver getPageSpecificationResolver(IRequestCycle cycle)
-    {
-        PageSpecificationResolver result =
-            (PageSpecificationResolver) _pool.retrieve(PAGE_SPECIFICATION_RESOLVER_KEY);
-
-        if (result == null)
-            result = new PageSpecificationResolver(cycle);
-
-        return result;
-    }
-
-    /**
-     * Invoked once the {@link PageSpecificationResolver} is no longer
-     * needed, it is returned to the pool.
-     * 
-     * @since 3.0
-     */
-
-    protected void discardPageSpecificationResolver(PageSpecificationResolver resolver)
-    {
-        _pool.store(PAGE_SPECIFICATION_RESOLVER_KEY, resolver);
-    }
-
-    /**
-     *  Returns the page to the appropriate pool.  Invokes
-     *  {@link IPage#detach()}.
-     *
-     **/
-
-    public void releasePage(IPage page)
-    {
-        Tapestry.clearMethodInvocations();
-
-        page.detach();
-
-        Tapestry.checkMethodInvocation(Tapestry.ABSTRACTPAGE_DETACH_METHOD_ID, "detach()", page);
-
-        _pool.store(buildKey(page), page);
-    }
-
-    /**
-     *  Invoked (during testing primarily) to release the entire pool
-     *  of pages, and the caches of bindings and assets.
-     *
-     **/
-
-    public synchronized void reset()
-    {
-        _pool.clear();
-    }
-
-    public String toString()
-    {
-        ToStringBuilder builder = new ToStringBuilder(this);
-
-        builder.append("pool", _pool);
-        builder.append("resolver", _resolver);
-
-        return builder.toString();
-    }
-
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/pageload/PropertyInitializer.java b/3.0.4/framework/src/org/apache/tapestry/pageload/PropertyInitializer.java
deleted file mode 100644
index 2d3d9eb..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/pageload/PropertyInitializer.java
+++ /dev/null
@@ -1,126 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.pageload;
-
-import ognl.Ognl;
-
-import org.apache.tapestry.ApplicationRuntimeException;
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.ILocation;
-import org.apache.tapestry.IResourceResolver;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.event.PageDetachListener;
-import org.apache.tapestry.event.PageEvent;
-import org.apache.tapestry.util.prop.OgnlUtils;
-
-/**
- *  Given a component, a property and a value, this object will
- *  reset the property to the value whenever the page
- *  (containing the component) is detached.  This is related
- *  to support for {@link org.apache.tapestry.spec.IPropertySpecification}s.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 3.0
- **/
-
-public class PropertyInitializer implements PageDetachListener
-{
-    private IResourceResolver _resolver;
-    private IComponent _component;
-    private String _propertyName;
-    private String _expression;
-    private boolean _invariant;
-    private Object _value;
-    private ILocation _location;
-
-    public PropertyInitializer(
-        IResourceResolver resolver,
-        IComponent component,
-        String propertyName,
-        String expression,
-        ILocation location)
-    {
-        _resolver = resolver;
-        _component = component;
-        _propertyName = propertyName;
-        _expression = expression;
-        _location = location;
-
-        prepareInvariant();
-    }
-
-    public void prepareInvariant()
-    {
-        _invariant = false;
-
-        try
-        {
-            // If no initial value expression is provided, then read the current
-            // property of the expression.  This may be null, or may be
-            // a value set in finishLoad() (via an abstract accessor).
-
-            if (Tapestry.isBlank(_expression))
-            {
-                _invariant = true;
-                _value = OgnlUtils.get(_propertyName, _resolver, _component);
-            }
-            else
-                if (Ognl.isConstant(_expression, Ognl.createDefaultContext(_component, _resolver)))
-                {
-                    // If the expression is a constant, evaluate it and remember the value 
-                    _invariant = true;
-                    _value = OgnlUtils.get(_expression, _resolver, _component);
-                }
-        }
-        catch (Exception ex)
-        {
-            throw new ApplicationRuntimeException(
-                Tapestry.format(
-                    "PageLoader.unable-to-initialize-property",
-                    _propertyName,
-                    _component,
-                    ex.getMessage()),
-                _location,
-                ex);
-        }
-    }
-
-    public void pageDetached(PageEvent event)
-    {
-        try
-        {
-            if (_invariant)
-                OgnlUtils.set(_propertyName, _resolver, _component, _value);
-            else
-            {
-                Object value = OgnlUtils.get(_expression, _resolver, _component);
-                OgnlUtils.set(_propertyName, _resolver, _component, value);
-            }
-        }
-        catch (Exception ex)
-        {
-            throw new ApplicationRuntimeException(
-                Tapestry.format(
-                    "PageLoader.unable-to-initialize-property",
-                    _propertyName,
-                    _component,
-                    ex.getMessage()),
-                _location,
-                ex);
-        }
-    }
-
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/pageload/VerifyRequiredParametersVisitor.java b/3.0.4/framework/src/org/apache/tapestry/pageload/VerifyRequiredParametersVisitor.java
deleted file mode 100644
index 6368cad..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/pageload/VerifyRequiredParametersVisitor.java
+++ /dev/null
@@ -1,61 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.pageload;
-
-import java.util.Iterator;
-
-import org.apache.tapestry.ApplicationRuntimeException;
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.spec.IComponentSpecification;
-import org.apache.tapestry.spec.IParameterSpecification;
-
-/**
- *  Verify whether all required parameters in the examined component are bound,
- *  and if they are not, throw an exception.
- * 
- *  @author mindbridge
- *  @version $Id$
- *  @since 3.0
- */
-public class VerifyRequiredParametersVisitor implements IComponentVisitor
-{
-    /**
-     * @see org.apache.tapestry.pageload.IComponentVisitor#visitComponent(org.apache.tapestry.IComponent)
-     */
-    public void visitComponent(IComponent component)
-    {
-        IComponentSpecification spec = component.getSpecification();
-
-        Iterator i = spec.getParameterNames().iterator();
-
-        while (i.hasNext())
-        {
-            String name = (String) i.next();
-            IParameterSpecification parameterSpec = spec.getParameter(name);
-
-            if (parameterSpec.isRequired() && component.getBinding(name) == null)
-                throw new ApplicationRuntimeException(
-                    Tapestry.format(
-                        "PageLoader.required-parameter-not-bound",
-                        name,
-                        component.getExtendedId()),
-                    component,
-                    component.getLocation(),
-                    null);
-        }
-    }
-
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/pageload/package.html b/3.0.4/framework/src/org/apache/tapestry/pageload/package.html
deleted file mode 100644
index 7e5a4db..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/pageload/package.html
+++ /dev/null
@@ -1,15 +0,0 @@
-<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN">
-<!-- $Id$ -->
-<html>
-<head>
-<title>Tapestry: Web Application Framework</title>
-</head>
-<body>
-
-<p>Classes used when loading pages (and thier heirarchies of components) from thier
-specifications, as well as organizaing thier templates.
-
-@author Howard Lewis Ship <a href="mailto:hlship@apache.org">hlship@apache.org</a>
-
-</body>
-</html>
diff --git a/3.0.4/framework/src/org/apache/tapestry/pages/Exception.css b/3.0.4/framework/src/org/apache/tapestry/pages/Exception.css
deleted file mode 100644
index 1bcec19..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/pages/Exception.css
+++ /dev/null
@@ -1,152 +0,0 @@
-P  {}

-

-H1  {}

-

-H2  {}

-

-H3  {}

-

-A  {}

-

-A:Visited  {}

-

-A:Active  {}

-

-A:Hover  {}

-

-BODY  {}

-

-TABLE.exception-display TR.even  {

-	top : auto;

-}

-

-TABLE.exception-display TR.odd  {

-	top : auto;

-	background-color : #C0C0FF;

-}

-

-TABLE.exception-display TH  {

-	text-align : right;

-	font-weight : bold;

-}

-

-TABLE.exception-display TD  {

-	text-align : left;

-	width : 100%;	

-}

-

-TABLE.exception-display TR.stack-trace  {

-	font-size : small;

-	font-family : sans-serif;

-	text-align : left;

-}

-

-SPAN.exception-header  {

-	font-size : large;

-	font-weight : bold;

-	color : Red;

-}

-

-SPAN.exception-message {

-	font-weight: bold;

-}

-

-TABLE.request-context-border  {

-	border-width : 1;

-	border-color : Black;

-}

-

-SPAN.request-context-object  {

-	font-size : large;

-	font-family : sans-serif;

-	font-weight : bold;

-	text-align : left;

-}

-

-TR.request-context-section TH  {

-	font-size : medium;

-	font-family : sans-serif;

-	font-weight : bold;

-	text-align : center;

-	color : White;

-	background-color : Blue;

-}

-

-TR.request-context-header TH  {

-	font-size : small;

-	font-family : sans-serif;

-	font-weight : bold;

-	text-align : center;

-	color : White;

-	background-color : Blue;

-}

-

-TABLE.request-context-object TD

-{

-	width: 100%;

-}

-

-TABLE.request-context-object TR.odd TD  {

-	text-align : left;

-	color : Black;

-	background-color : #C0C0FF;

-	width: 100%;

-}

-

-TABLE.request-context-object TR.odd TH  {

-	color : Black;

-	background-color : #C0C0FF;

-	text-align : right;

-}

-

-TABLE.request-context-object TR.even TD  {

-	text-align : left;

-}

-

-TABLE.request-context-object TR.even TH  {

-	text-align : right;

-}

-

-TABLE.request-context-object  {

-	width : 100%;

-}

-

-TABLE.request-context-object TR  {

-	vertical-align : text-top;

-}

-

-UL  {

-	margin-top : 0px;

-	margin-bottom : 0px;

-	margin-left : 20px;

-}

-

-TABLE.exception-display TR.exception-name TD  {

-	font-size : larger;

-	font-weight : bold;

-	text-align : center;

-	background-color : Blue;

-	color : White;

-}

-

-TABLE.exception-display  {

-	width : 100%;

-}

-

-TABLE.exception-display TR.exception-message TD  {

-	border-width : 1;

-	border-color : Black;

-	border-style : solid;

-	padding : 2;

-	text-align : left;

-	font-style : italic;

-}

-

-TABLE.exception-display TR.strack-trace-label TD  {

-	margin : 2;

-	border-width : 1;

-	border-color : Black;

-	border-style : solid;

-	text-align : center;

-}

-

diff --git a/3.0.4/framework/src/org/apache/tapestry/pages/Exception.html b/3.0.4/framework/src/org/apache/tapestry/pages/Exception.html
deleted file mode 100644
index de41efc..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/pages/Exception.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<!-- $Id$ -->
-
-<span jwcid="@Shell" title="Exception" stylesheet="ognl:assets.stylesheet">
-<body>
-
-<span class="exception-header">
-An exception has occurred.
-</span>
-
-<p>You may continue by <b><a jwcid="restart">restarting</a></b> the session.
-
-<span jwcid="@ExceptionDisplay" exceptions="ognl:exceptions"/>
-
-<p>
-
-<span jwcid="@Delegator" delegate="ognl:requestCycle.requestContext"/>
-
-</body>
-</span>
diff --git a/3.0.4/framework/src/org/apache/tapestry/pages/Exception.java b/3.0.4/framework/src/org/apache/tapestry/pages/Exception.java
deleted file mode 100644
index d7390c7..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/pages/Exception.java
+++ /dev/null
@@ -1,54 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.pages;
-
-import org.apache.tapestry.html.BasePage;
-import org.apache.tapestry.util.exception.ExceptionAnalyzer;
-import org.apache.tapestry.util.exception.ExceptionDescription;
-
-/**
- *  Default exception reporting page.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- * 
- **/
-
-public class Exception extends BasePage
-{
-    private ExceptionDescription[] _exceptions;
-
-    public void detach()
-    {
-        _exceptions = null;
-
-        super.detach();
-    }
-
-    public ExceptionDescription[] getExceptions()
-    {
-        return _exceptions;
-    }
-
-    public void setException(Throwable value)
-    {
-        ExceptionAnalyzer analyzer;
-
-        analyzer = new ExceptionAnalyzer();
-
-        _exceptions = analyzer.analyze(value);
-    }
-
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/pages/Exception.page b/3.0.4/framework/src/org/apache/tapestry/pages/Exception.page
deleted file mode 100644
index f4e8f5b..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/pages/Exception.page
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<page-specification class="org.apache.tapestry.pages.Exception">
-  
-  <component id="restart" type="ServiceLink">
-    <binding name="service" expression="@org.apache.tapestry.Tapestry@RESTART_SERVICE"/>
-  </component>
-  
-  <private-asset name="stylesheet" resource-path="Exception.css"/>
-</page-specification>
diff --git a/3.0.4/framework/src/org/apache/tapestry/pages/StaleLink.html b/3.0.4/framework/src/org/apache/tapestry/pages/StaleLink.html
deleted file mode 100644
index e1ced61..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/pages/StaleLink.html
+++ /dev/null
@@ -1,25 +0,0 @@
-<!-- $Id$ -->
-
-<span jwcid="@Shell" stylesheet="ognl:assets.stylesheet" title="Stale Link">
-
-<body>
-
-You have clicked on a <i>stale link</i>.  
-
-<p>
-<span jwcid="@Insert" value="ognl:message" class="exception-message">
-Exception message goes here.
-</span>
-
-<p>This is most likely the result of using your
-browser's <b>back</b> button, but can also be an application error.
-
-<p>You may continue by returning to the
-application's
-
-<b>
-<a jwcid="home">home page</a></b>.
-
-</body>
-
-</span>
diff --git a/3.0.4/framework/src/org/apache/tapestry/pages/StaleLink.java b/3.0.4/framework/src/org/apache/tapestry/pages/StaleLink.java
deleted file mode 100644
index 6357455..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/pages/StaleLink.java
+++ /dev/null
@@ -1,32 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.pages;
-
-import org.apache.tapestry.html.BasePage;
-
-/**
- *  Stores a message (taken from the {@link org.apache.tapestry.StaleLinkException})
- *  that is displayed as part of the page.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 3.0
- *
- **/
-
-public abstract class StaleLink extends BasePage
-{
-    public abstract void setMessage(String message);
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/pages/StaleLink.page b/3.0.4/framework/src/org/apache/tapestry/pages/StaleLink.page
deleted file mode 100644
index c55a99d..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/pages/StaleLink.page
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-  
-<page-specification class="org.apache.tapestry.pages.StaleLink">
-  
-  <property-specification name="message" type="java.lang.String"/>
-  
-  <component id="home" type="ServiceLink">
-    <binding name="service" expression="@org.apache.tapestry.Tapestry@HOME_SERVICE"/>
-  </component>
-  
-  <private-asset name="stylesheet" resource-path="Exception.css"/>
-
-</page-specification>
diff --git a/3.0.4/framework/src/org/apache/tapestry/pages/StaleSession.html b/3.0.4/framework/src/org/apache/tapestry/pages/StaleSession.html
deleted file mode 100644
index 9fc09ac..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/pages/StaleSession.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<!-- $Id$ -->
-
-<span jwcid="@Shell" title="Stale Session" stylesheet="ognl:assets.stylesheet">
-
-<body>
-Your session has timed out.
-
-<p>Web applications store information about what you are doing on the server.  This information
-is called the <em>session</em>.
-
-<p>Web servers must track many, many sessions.  If you
-are inactive for a long enough time (usually, a few minutes), this information is discarded to
-make room for active users.
-
-<p>At this point you may <b>
-<a jwcid="restart">restart</a></b> the session to continue.
-
-</body>
-</span>
diff --git a/3.0.4/framework/src/org/apache/tapestry/pages/StaleSession.page b/3.0.4/framework/src/org/apache/tapestry/pages/StaleSession.page
deleted file mode 100644
index 911b6f2..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/pages/StaleSession.page
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-    Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<page-specification>
-  
-  <component id="restart" type="ServiceLink">
-    <binding name="service" expression="@org.apache.tapestry.Tapestry@RESTART_SERVICE"/>
-  </component>
-  
-  <private-asset name="stylesheet" resource-path="Exception.css"/>
-</page-specification>
diff --git a/3.0.4/framework/src/org/apache/tapestry/pages/package.html b/3.0.4/framework/src/org/apache/tapestry/pages/package.html
deleted file mode 100644
index aeade4d..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/pages/package.html
+++ /dev/null
@@ -1,15 +0,0 @@
-<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN">
-<!-- $Id$ -->
-<html>
-<head>
-<title>Tapestry: Web Application Framework</title>
-</head>
-<body>
-
-Basic pages used for errors, stale links and stale sessions.  These can all be
-overriden in the application specification.
-
-@author Howard Lewis Ship <a href="mailto:hlship@apache.org">hlship@apache.org</a>
-
-</body>
-</html>
diff --git a/3.0.4/framework/src/org/apache/tapestry/param/AbstractParameterConnector.java b/3.0.4/framework/src/org/apache/tapestry/param/AbstractParameterConnector.java
deleted file mode 100644
index 7aa1918..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/param/AbstractParameterConnector.java
+++ /dev/null
@@ -1,189 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.param;
-
-import org.apache.tapestry.IBinding;
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.IForm;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.IResourceResolver;
-import org.apache.tapestry.form.Form;
-import org.apache.tapestry.form.IFormComponent;
-import org.apache.tapestry.spec.Direction;
-import org.apache.tapestry.spec.IParameterSpecification;
-import org.apache.tapestry.util.prop.OgnlUtils;
-
-/**
- *  Standard implementation of {@link IParameterConnector}.
- *  Subclasses add in the ability to clear parameters.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 2.0.3
- * 
- **/
-
-public abstract class AbstractParameterConnector implements IParameterConnector
-{
-    private String _parameterName;
-    private String _propertyName;
-    private IBinding _binding;
-    private IComponent _component;
-    private boolean _required;
-    private Object _clearValue;
-    private Direction _direction;
-    private IResourceResolver _resolver;
-
-    /**
-     *  Creates a connector.  In addition, obtains the current value
-     *  of the component property; this value will be used to
-     *  restore the component property.
-     * 
-     **/
-
-    protected AbstractParameterConnector(IComponent component, String parameterName, IBinding binding)
-    {
-        _component = component;
-        _parameterName = parameterName;
-        _binding = binding;
-
-        _resolver = component.getPage().getEngine().getResourceResolver();
-
-        IParameterSpecification pspec = _component.getSpecification().getParameter(_parameterName);
-        _required = pspec.isRequired();
-        _propertyName = pspec.getPropertyName();
-        _direction = pspec.getDirection();
-
-        _clearValue = readCurrentPropertyValue();
-    }
-
-    /** @since 2.2 **/
-
-    private Object readCurrentPropertyValue()
-    {
-        return OgnlUtils.get(_propertyName, _resolver, _component);
-    }
-
-    /**
-     *  Sets the property of the component to the specified value.
-     * 
-     **/
-
-    protected void setPropertyValue(Object value)
-    {
-        OgnlUtils.set(_propertyName, _resolver, _component, value);
-    }
-
-    /**
-     *  Gets the value of the binding.
-     *  @param requiredType if not null, the expected type of the value object.
-     * 
-     * 
-     *  @see IBinding#getObject()
-     *  @see IBinding#getObject(String, Class)
-     **/
-
-    protected Object getBindingValue(Class requiredType)
-    {
-        Object result;
-
-        if (requiredType == null)
-            result = _binding.getObject();
-        else
-            result = _binding.getObject(_parameterName, requiredType);
-
-        return result;
-    }
-
-    protected IBinding getBinding()
-    {
-        return _binding;
-    }
-
-    public String toString()
-    {
-        StringBuffer buffer = new StringBuffer(super.toString());
-        buffer.append('[');
-        buffer.append(_component.getExtendedId());
-        buffer.append(' ');
-        buffer.append(_parameterName);
-        buffer.append(' ');
-        buffer.append(_binding);
-
-        buffer.append(' ');
-        buffer.append(_direction.getName());
-
-        if (_required)
-            buffer.append(" required");
-
-        buffer.append(']');
-
-        return buffer.toString();
-    }
-
-    /**
-     *  Restores the property to its default value.  For
-     *  {@link Direction#FORM} parameters, extracts the
-     *  property value and sets the binding form it
-     *  (when appropriate).
-     * 
-     **/
-
-    public void resetParameter(IRequestCycle cycle)
-    {
-        if (_direction == Direction.FORM && cycle.isRewinding())
-        {
-            IFormComponent component = (IFormComponent) _component;
-
-            if (!component.isDisabled())
-            {
-                IForm form = Form.get(cycle);
-
-                if (form != null && form.isRewinding())
-                {
-                    Object value = readCurrentPropertyValue();
-
-                    _binding.setObject(value);
-                }
-            }
-        }
-
-        // Either way, clear the value.
-
-        setPropertyValue(_clearValue);
-    }
-
-    /**
-     *  Returns true if the connector should update the property value from
-     *  the binding.  For {@link org.apache.tapestry.spec.Direction#IN}, this
-     *  always returns true.  For {@link org.apache.tapestry.spec.Direction#FORM},
-     *  this returns true only if the request cycle and the active form
-     *  are rewinding.
-     * 
-     *  @since 2.2
-     * 
-     **/
-
-    protected boolean shouldSetPropertyValue(IRequestCycle cycle)
-    {
-        if (_direction == Direction.IN)
-            return true;
-
-        // Must be FORM
-
-        return !cycle.isRewinding();
-    }
-
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/param/BooleanParameterConnector.java b/3.0.4/framework/src/org/apache/tapestry/param/BooleanParameterConnector.java
deleted file mode 100644
index bd32e5a..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/param/BooleanParameterConnector.java
+++ /dev/null
@@ -1,57 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.param;
-
-import org.apache.tapestry.IBinding;
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.IRequestCycle;
-
-/**
- *   Connector for boolean parameters.
- * 
- *   @see IBinding#getBoolean()
- * 
- *   @author Howard Lewis Ship
- *   @version $Id$
- *   @since 2.0.3
- * 
- **/
-
-public class BooleanParameterConnector extends AbstractParameterConnector
-{
-
-    protected BooleanParameterConnector(IComponent component, String parameterName, IBinding binding)
-    {
-        super(component, parameterName, binding);
-    }
-
-    /**
-     *  Invokes {@link IBinding#getBoolean()}, which always
-     *  returns true or false (there is no concept of a null
-     *  value).
-     * 
-     **/
-
-    public void setParameter(IRequestCycle cycle)
-    {
-        if (shouldSetPropertyValue(cycle))
-        {
-            boolean value = getBinding().getBoolean();
-
-            setPropertyValue(value ? Boolean.TRUE : Boolean.FALSE);
-        }
-    }
-
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/param/ConnectedParameterException.java b/3.0.4/framework/src/org/apache/tapestry/param/ConnectedParameterException.java
deleted file mode 100644
index 968189d..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/param/ConnectedParameterException.java
+++ /dev/null
@@ -1,70 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.param;
-
-import org.apache.tapestry.ApplicationRuntimeException;
-import org.apache.tapestry.ILocation;
-
-/**
- *  Identifies exceptions in connected parameters (parameters that
- *  are automatically assigned to component properties by the framework).
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 2.0.3
- *
- **/
-
-public class ConnectedParameterException extends ApplicationRuntimeException
-{
-    private String _parameterName;
-    private String _propertyName;
-
-    public ConnectedParameterException(
-        String message,
-        Object component,
-        String parameterName,
-        String propertyName,
-        Throwable rootCause)
-    {
-        this(message, component, parameterName, propertyName, null, rootCause);
-    }
-
-    /** @since 3.0 **/
-
-    public ConnectedParameterException(
-        String message,
-        Object component,
-        String parameterName,
-        String propertyName,
-        ILocation location,
-        Throwable rootCause)
-    {
-        super(message, location, rootCause);
-
-        _parameterName = parameterName;
-        _propertyName = propertyName;
-    }
-
-    public String getParameterName()
-    {
-        return _parameterName;
-    }
-
-    public String getPropertyName()
-    {
-        return _propertyName;
-    }
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/param/DoubleParameterConnector.java b/3.0.4/framework/src/org/apache/tapestry/param/DoubleParameterConnector.java
deleted file mode 100644
index ac76e30..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/param/DoubleParameterConnector.java
+++ /dev/null
@@ -1,54 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.param;
-
-import org.apache.tapestry.IBinding;
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.IRequestCycle;
-
-/**
- *  Connects a parameter to a property of type double.
- * 
- *  @author Howard Lewis Ship 
- *  @version $Id$
- *  @since 2.0.3
- * 
- **/
-
-public class DoubleParameterConnector extends AbstractParameterConnector
-{
-
-    protected DoubleParameterConnector(IComponent component, String parameterName, IBinding binding)
-    {
-        super(component, parameterName, binding);
-    }
-
-    /**
-     *  Invokes {@link IBinding#getDouble()} to obtain the value
-     *  to assign to the property.
-     * 
-     **/
-
-    public void setParameter(IRequestCycle cycle)
-    {
-        if (shouldSetPropertyValue(cycle))
-        {
-            double scalar = getBinding().getDouble();
-
-            setPropertyValue(new Double(scalar));
-        }
-    }
-
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/param/IParameterConnector.java b/3.0.4/framework/src/org/apache/tapestry/param/IParameterConnector.java
deleted file mode 100644
index 87be635..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/param/IParameterConnector.java
+++ /dev/null
@@ -1,51 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.param;
-
-import org.apache.tapestry.IRequestCycle;
-
-/**
- *  Define a type of connector between a binding of a component and a JavaBeans
- *  property of the component (with the same name).  Allows
- *  for the parameter to be set before the component is rendered,
- *  then cleared after the component is rendered.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 2.0.3
- * 
- **/
-
-public interface IParameterConnector
-{
-    /**
-     *  Sets the parameter from the binding.
-     *  
-     *  @throws RequiredParameterException if the parameter is
-     *  required, but the {@link org.apache.tapestry.IBinding}
-     *  supplies a null value.
-     * 
-     **/
-    
-	public void setParameter(IRequestCycle cycle);
-	
-	/**
-	 *  Clears the parameters to a null, 0 or false value
-	 *  (depending on type).
-	 * 
-	 **/
-	
-	public void resetParameter(IRequestCycle cycle);
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/param/IntParameterConnector.java b/3.0.4/framework/src/org/apache/tapestry/param/IntParameterConnector.java
deleted file mode 100644
index 6e9950e..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/param/IntParameterConnector.java
+++ /dev/null
@@ -1,54 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.param;
-
-import org.apache.tapestry.IBinding;
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.IRequestCycle;
-
-/**
- *  Connects a parameter to an int property.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 2.0.3
- *
- **/
-
-public class IntParameterConnector extends AbstractParameterConnector
-{
-
-    protected IntParameterConnector(IComponent component, String parameterName, IBinding binding)
-    {
-        super(component, parameterName, binding);
-    }
-
-    /**
-     *  Invokes {@link IBinding#getInt()} to obtain
-     *  an int value to assign.
-     * 
-     **/
-
-    public void setParameter(IRequestCycle cycle)
-    {
-        if (shouldSetPropertyValue(cycle))
-        {
-            int scalar = getBinding().getInt();
-
-            setPropertyValue(new Integer(scalar));
-        }
-    }
-
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/param/ObjectParameterConnector.java b/3.0.4/framework/src/org/apache/tapestry/param/ObjectParameterConnector.java
deleted file mode 100644
index 1c02003..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/param/ObjectParameterConnector.java
+++ /dev/null
@@ -1,55 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.param;
-
-import org.apache.tapestry.IBinding;
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.IRequestCycle;
-
-/**
- *  Implements {@link IParameterConnector} for object parameters.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 2.0.3
- *
- **/
-
-public class ObjectParameterConnector extends AbstractParameterConnector
-{
-    private Class _requiredType;
-
-    protected ObjectParameterConnector(
-        IComponent component,
-        String parameterName,
-        IBinding binding,
-        Class requiredType)
-    {
-        super(component, parameterName, binding);
-
-        _requiredType = requiredType;
-    }
-
-    /**
-     *  Sets the parameter property to null.
-     * 
-     **/
-
-    public void setParameter(IRequestCycle cycle)
-    {
-        if (shouldSetPropertyValue(cycle))
-            setPropertyValue(getBindingValue(_requiredType));
-    }
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/param/ParameterManager.java b/3.0.4/framework/src/org/apache/tapestry/param/ParameterManager.java
deleted file mode 100644
index d7ab3c9..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/param/ParameterManager.java
+++ /dev/null
@@ -1,355 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.param;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.tapestry.BindingException;
-import org.apache.tapestry.IBinding;
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.IResourceResolver;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.spec.Direction;
-import org.apache.tapestry.spec.IComponentSpecification;
-import org.apache.tapestry.spec.IParameterSpecification;
-import org.apache.tapestry.util.prop.PropertyFinder;
-import org.apache.tapestry.util.prop.PropertyInfo;
-
-/**
- *  Manages a set of {@link IParameterConnector}s for a
- *  {@link IComponent}.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 2.0.3
- *
- **/
-
-public class ParameterManager
-{
-    private static final Log LOG = LogFactory.getLog(ParameterManager.class);
-
-    /**
-     *  Special types that aren't resolved by class lookups, including
-     *  scalars, arrays of scalars, etc.
-     * 
-     *  <p>
-     *  There's some overlap here with ComponentClassFactory.
-     * 
-     **/
-
-    private static final Map SPECIAL_TYPE_MAP = new HashMap();
-
-    static {
-        SPECIAL_TYPE_MAP.put("boolean", boolean.class);
-        SPECIAL_TYPE_MAP.put("boolean[]", boolean[].class);
-        SPECIAL_TYPE_MAP.put("byte", byte.class);
-        SPECIAL_TYPE_MAP.put("byte[]", byte[].class);
-        SPECIAL_TYPE_MAP.put("char", char.class);
-        SPECIAL_TYPE_MAP.put("char[]", char[].class);
-        SPECIAL_TYPE_MAP.put("short", short.class);
-        SPECIAL_TYPE_MAP.put("short[]", short[].class);
-        SPECIAL_TYPE_MAP.put("int", int.class);
-        SPECIAL_TYPE_MAP.put("int[]", int[].class);
-        SPECIAL_TYPE_MAP.put("long", long.class);
-        SPECIAL_TYPE_MAP.put("long[]", long[].class);
-        SPECIAL_TYPE_MAP.put("float", float.class);
-        SPECIAL_TYPE_MAP.put("float[]", float[].class);
-        SPECIAL_TYPE_MAP.put("double", double.class);
-        SPECIAL_TYPE_MAP.put("double[]", double[].class);
-
-        SPECIAL_TYPE_MAP.put("java.lang.Object[]", Object[].class);
-        SPECIAL_TYPE_MAP.put("java.lang.String[]", String[].class);
-    }
-
-    private IComponent _component;
-    private IParameterConnector[] _connectors;
-
-    public ParameterManager(IComponent component)
-    {
-        _component = component;
-    }
-
-    /**
-     *  Invoked just before a component renders.  Converts bindings to values
-     *  that are assigned to connected properties.
-     * 
-     **/
-
-    public void setParameters(IRequestCycle cycle)
-    {
-        if (_connectors == null)
-            setup(cycle);
-
-        for (int i = 0; i < _connectors.length; i++)
-            _connectors[i].setParameter(cycle);
-    }
-
-    /**
-     *  Invoked just after the component renders.  Returns component properties
-     *  back to initial values (unless the corresponding binding is
-     *  {@link IBinding#isInvariant() invariant}).  In addition, for
-     *  {@link Direction#FORM} parameters, the property is read and the binding
-     *  is set from the property value (if the cycle is rewinding and the current
-     *  form is rewinding).
-     * 
-     **/
-
-    public void resetParameters(IRequestCycle cycle)
-    {
-        if (_connectors == null)
-            return;
-
-        for (int i = 0; i < _connectors.length; i++)
-            _connectors[i].resetParameter(cycle);
-    }
-
-    private void setup(IRequestCycle cycle)
-    {
-        boolean debug = LOG.isDebugEnabled();
-
-        if (debug)
-            LOG.debug(_component + ": connecting parameters and properties");
-
-        List list = new ArrayList();
-        IComponentSpecification spec = _component.getSpecification();
-        IResourceResolver resolver = _component.getPage().getEngine().getResourceResolver();
-
-        IParameterConnector disabledConnector = null;
-
-        Collection names = spec.getParameterNames();
-        Iterator i = names.iterator();
-        while (i.hasNext())
-        {
-            String name = (String) i.next();
-
-            if (debug)
-                LOG.debug("Connecting parameter " + name + ".");
-
-            IBinding binding = _component.getBinding(name);
-            if (binding == null)
-            {
-                if (debug)
-                    LOG.debug("Not bound.");
-
-                continue;
-            }
-
-            IParameterSpecification pspec = spec.getParameter(name);
-            Direction direction = pspec.getDirection();
-
-            if (direction != Direction.IN && direction != Direction.FORM)
-            {
-                if (debug)
-                    LOG.debug("Parameter is " + pspec.getDirection().getName() + ".");
-
-                continue;
-            }
-
-            if (!direction.getAllowInvariant() && binding.isInvariant())
-                throw new ConnectedParameterException(
-                    Tapestry.format(
-                        "ParameterManager.incompatible-direction-and-binding",
-                        new Object[] {
-                            name,
-                            _component.getExtendedId(),
-                            direction.getDisplayName(),
-                            binding }),
-                    _component,
-                    name,
-                    null,
-                    binding.getLocation(),
-                    null);
-
-            String propertyName = pspec.getPropertyName();
-
-            if (debug && !name.equals(propertyName))
-                LOG.debug("Connecting to property " + propertyName + ".");
-
-            // Next,verify that there is a writable property with the same
-            // name as the parameter.
-
-            PropertyInfo propertyInfo =
-                PropertyFinder.getPropertyInfo(_component.getClass(), propertyName);
-
-            if (propertyInfo == null)
-            {
-                throw new ConnectedParameterException(
-                    Tapestry.format(
-                        "ParameterManager.no-accessor",
-                        _component.getExtendedId(),
-                        propertyName),
-                    _component,
-                    name,
-                    propertyName,
-                    binding.getLocation(),
-                    null);
-            }
-
-            if (!propertyInfo.isReadWrite())
-            {
-                throw new ConnectedParameterException(
-                    Tapestry.format(
-                        "ParameterManager.property-not-read-write",
-                        _component.getExtendedId(),
-                        propertyName),
-                    _component,
-                    name,
-                    propertyName,
-                    binding.getLocation(),
-                    null);
-            }
-
-            // Check if the parameter type matches the property type
-
-            Class propertyType = propertyInfo.getType();
-            Class parameterType = getType(pspec.getType(), resolver);
-
-            if (parameterType == null)
-            {
-                throw new ConnectedParameterException(
-                    Tapestry.format(
-                        "ParameterManager.java-type-not-specified",
-                        name,
-                        _component.getExtendedId()),
-                    _component,
-                    name,
-                    propertyName,
-                    binding.getLocation(),
-                    null);
-            }
-
-            if (!propertyType.equals(parameterType))
-            {
-                throw new ConnectedParameterException(
-                    Tapestry.format(
-                        "ParameterManager.type-mismatch",
-                        new String[] {
-                            name,
-                            _component.getExtendedId(),
-                            parameterType.toString(),
-                            propertyType.toString()}),
-                    _component,
-                    name,
-                    propertyName,
-                    binding.getLocation(),
-                    null);
-            }
-
-            // Here's where we will sniff it for type, for the moment
-            // assume its some form of object (not scalar) type.
-
-            IParameterConnector connector =
-                createConnector(_component, name, binding, propertyType, parameterType);
-
-            // Static bindings are set here and then forgotten
-            // about.  Dynamic bindings are kept for later.
-
-            if (binding.isInvariant())
-            {
-                if (debug)
-                    LOG.debug("Setting invariant value using " + connector + ".");
-
-                try
-                {
-                    connector.setParameter(cycle);
-                }
-                catch (BindingException ex)
-                {
-                    throw new ConnectedParameterException(
-                        Tapestry.format(
-                            "ParameterManager.static-initialization-failure",
-                            propertyName,
-                            _component.getExtendedId(),
-                            binding.toString()),
-                        _component,
-                        name,
-                        propertyName,
-                        ex);
-                }
-
-                continue;
-            }
-
-            if (debug)
-                LOG.debug("Adding " + connector + ".");
-
-            // To properly support forms elements, the disabled parameter
-            // must always be processed last.
-
-            if (name.equals("disabled"))
-                disabledConnector = connector;
-            else
-                list.add(connector);
-
-        }
-
-        if (disabledConnector != null)
-            list.add(disabledConnector);
-
-        // Convert for List to array
-
-        _connectors = (IParameterConnector[]) list.toArray(new IParameterConnector[list.size()]);
-
-    }
-
-    private IParameterConnector createConnector(
-        IComponent component,
-        String parameterName,
-        IBinding binding,
-        Class propertyType,
-        Class requiredType)
-    {
-        // Could convert this code to use a Decorator, but then I'd need
-        // some kind of factory for these parameter connectors.
-
-        if (propertyType.equals(Boolean.TYPE))
-            return new BooleanParameterConnector(component, parameterName, binding);
-
-        if (propertyType.equals(Integer.TYPE))
-            return new IntParameterConnector(component, parameterName, binding);
-
-        if (propertyType.equals(Double.TYPE))
-            return new DoubleParameterConnector(component, parameterName, binding);
-
-        if (propertyType.equals(String.class))
-            return new StringParameterConnector(component, parameterName, binding);
-
-        // The default is for any kind of object type
-
-        return new ObjectParameterConnector(component, parameterName, binding, requiredType);
-    }
-
-    private Class getType(String name, IResourceResolver resolver)
-    {
-        if (Tapestry.isBlank(name))
-            return null;
-
-        Class result = (Class) SPECIAL_TYPE_MAP.get(name);
-
-        if (result != null)
-            return result;
-
-        return resolver.findClass(name);
-    }
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/param/StringParameterConnector.java b/3.0.4/framework/src/org/apache/tapestry/param/StringParameterConnector.java
deleted file mode 100644
index e636ad1..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/param/StringParameterConnector.java
+++ /dev/null
@@ -1,52 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.param;
-
-import org.apache.tapestry.IBinding;
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.IRequestCycle;
-
-/**
- *  Creates a connection between a parameter and a property of type {@link String}.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 2.0.3
- *
- **/
-
-public class StringParameterConnector extends AbstractParameterConnector
-{
-
-    protected StringParameterConnector(
-        IComponent component,
-        String parameterName,
-        IBinding binding)
-    {
-        super(component, parameterName, binding);
-    }
-
-    /**
-     *  Invokes {@link IBinding#getString()} to obtain the property
-     *  value.
-     * 
-     **/
-
-    public void setParameter(IRequestCycle cycle)
-    {
-        if (shouldSetPropertyValue(cycle))
-            setPropertyValue(getBinding().getString());
-    }
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/param/package.html b/3.0.4/framework/src/org/apache/tapestry/param/package.html
deleted file mode 100644
index 1a44a94..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/param/package.html
+++ /dev/null
@@ -1,15 +0,0 @@
-<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN">
-<!-- $Id$ -->
-<html>
-<head>
-<title>Tapestry: Web Application Framework</title>
-</head>
-<body>
-
-Code to assist {@link org.apache.tapestry.IComponent} in setting JavaBeans properties 
-from bound parameters.
-
-@author Howard Lewis Ship <a href="mailto:hlship@apache.org">hlship@apache.org</a>
-
-</body>
-</html>
diff --git a/3.0.4/framework/src/org/apache/tapestry/parse/AbstractSpecificationRule.java b/3.0.4/framework/src/org/apache/tapestry/parse/AbstractSpecificationRule.java
deleted file mode 100644
index 89e30e6..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/parse/AbstractSpecificationRule.java
+++ /dev/null
@@ -1,82 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.parse;
-
-import org.apache.commons.beanutils.PropertyUtils;
-import org.apache.commons.digester.Rule;
-import org.apache.tapestry.ILocation;
-import org.apache.tapestry.IResourceLocation;
-import org.apache.tapestry.Tapestry;
-import org.xml.sax.Attributes;
-
-/**
- *  Placeholder for utility methods needed by the various
- *  specification-oriented {@link org.apache.commons.digester.Rule}s.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 3.0
- *
- **/
-
-public abstract class AbstractSpecificationRule extends Rule
-{
-
-    protected String getValue(Attributes attributes, String name)
-    {
-        int count = attributes.getLength();
-
-        for (int i = 0; i < count; i++)
-        {
-        	String attributeName = attributes.getLocalName(i);
-        	
-        	if (Tapestry.isBlank(attributeName))
-        		attributeName = attributes.getQName(i);
-        	
-            if (attributeName.equals(name))
-                return attributes.getValue(i);
-        }
-
-        return null;
-    }
-    
-    protected void setProperty(String propertyName, Object value)
-    throws Exception
-    {
-    	PropertyUtils.setProperty(digester.peek(), propertyName, value);
-    }
-
-    /**
-     *  Gets the current location tag.  This requires that the
-     *  rule's digester be {@link SpecificationDigester}.
-     * 
-     **/
-
-    protected ILocation getLocation()
-    {
-        SpecificationDigester locatableDigester = (SpecificationDigester) digester;
-
-        return locatableDigester.getLocationTag();
-    }
-
-    // Temporary, until DocumentParseException is fixed.
-
-    protected IResourceLocation getResourceLocation()
-    {
-        SpecificationDigester locatableDigester = (SpecificationDigester) digester;
-
-        return locatableDigester.getResourceLocation();
-    }
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/parse/AttributeType.java b/3.0.4/framework/src/org/apache/tapestry/parse/AttributeType.java
deleted file mode 100644
index 1724447..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/parse/AttributeType.java
+++ /dev/null
@@ -1,70 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.parse;
-
-import org.apache.commons.lang.enum.Enum;
-
-/**
- *  The type of an {@link org.apache.tapestry.parse.TemplateAttribute}.
- *  New types can be created by modifying
- *  {@link org.apache.tapestry.parse.TemplateParser} to recognize
- *  the attribute prefix in compnent tags, and
- *  by modifying
- *  {@link org.apache.tapestry.BaseComponentTemplateLoader}
- *  to actually do something with the TemplateAttribute, based on type.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 3.0
- *
- **/
-
-public class AttributeType extends Enum
-{
-	/**
-	 *  Indicates the attribute is simple, literal text.  This is
-	 *  the default for any attributes without a recognized
-	 *  prefix.
-	 * 
-	 *  @see org.apache.tapestry.binding.StaticBinding
-	 * 
-	 **/
-	
-	public static final AttributeType LITERAL = new AttributeType("LITERAL");
-
-	/**
-	 *  Indicates the attribute is a OGNL expression.
-	 * 
-	 *  @see org.apache.tapestry.binding.ExpressionBinding
-	 * 
-	 **/
-	
-	public static final AttributeType OGNL_EXPRESSION = new AttributeType("OGNL_EXPRESSION");
-	
-	/**
-	 *  Indicates the attribute is a localization key.
-	 * 
-	 *  @see org.apache.tapestry.binding.StringBinding
-	 * 
-	 **/
-	
-	public static final AttributeType LOCALIZATION_KEY = new AttributeType("LOCALIZATION_KEY");
-
-    private AttributeType(String name)
-    {
-        super(name);
-    }
-
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/parse/BaseDocumentRule.java b/3.0.4/framework/src/org/apache/tapestry/parse/BaseDocumentRule.java
deleted file mode 100644
index 30233b9..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/parse/BaseDocumentRule.java
+++ /dev/null
@@ -1,53 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.parse;
-
-import org.xml.sax.Attributes;
-
-/**
- *  Base implementation of {@link org.apache.tapestry.parse.IDocumentRule}.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 3.0
- *
- **/
-public class BaseDocumentRule implements IDocumentRule
-{
-	private SpecificationDigester _digester;
-	
-	public SpecificationDigester getDigester()
-	{
-		return _digester;
-	}
-	
-    public void setDigester(SpecificationDigester digester)
-    {
-    	_digester = digester;
-    }
-
-    public void startDocument(String namespace, String name, Attributes attributes) throws Exception
-    {
-    }
-
-    public void endDocument() throws Exception
-    {
-    }
-
-    public void finish() throws Exception
-    {
-    }
-
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/parse/BodyRule.java b/3.0.4/framework/src/org/apache/tapestry/parse/BodyRule.java
deleted file mode 100644
index 56f5895..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/parse/BodyRule.java
+++ /dev/null
@@ -1,43 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.parse;
-
-/**
- *  Variation of {@link org.apache.commons.digester.BeanPropertySetterRule}
- *  that does <em>not</em> trim the body text of leading and trailing
- *  whitespace.  This is important for {@link org.apache.tapestry.spec.IListenerBindingSpecification}s,
- *  where the whitespace may be relevant!
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 3.0
- *
- **/
-
-public class BodyRule extends AbstractSpecificationRule
-{
-	private String _propertyName;
-	
-	public BodyRule(String propertyName)
-	{
-		_propertyName = propertyName;
-	}	
-
-    public void body(String namespace, String name, String text) throws Exception
-    {
-		setProperty(_propertyName, text);
-    }
-
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/parse/CloseToken.java b/3.0.4/framework/src/org/apache/tapestry/parse/CloseToken.java
deleted file mode 100644
index 4b1b42b..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/parse/CloseToken.java
+++ /dev/null
@@ -1,51 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.parse;
-
-import org.apache.commons.lang.builder.ToStringBuilder;
-import org.apache.tapestry.ILocation;
-
-/**
- *  Represents the closing tag of a component element in the template.
- *
- *  @see TokenType#CLOSE
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 3.0
- *
- **/
-
-public class CloseToken extends TemplateToken
-{
-    private String _tag;
-    
-    public CloseToken(String tag, ILocation location)
-    {
-        super(TokenType.CLOSE, location);
-        
-        _tag = tag;
-    }
-    
-    public String getTag()
-    {
-        return _tag;
-    }
-       
-    protected void extendDescription(ToStringBuilder builder)
-    {
-        builder.append("tag", _tag);
-    }
-
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/parse/ComponentCopyOfRule.java b/3.0.4/framework/src/org/apache/tapestry/parse/ComponentCopyOfRule.java
deleted file mode 100644
index 0877ec8..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/parse/ComponentCopyOfRule.java
+++ /dev/null
@@ -1,89 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.parse;
-
-import java.util.Iterator;
-
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.spec.IBindingSpecification;
-import org.apache.tapestry.spec.IComponentSpecification;
-import org.apache.tapestry.spec.IContainedComponent;
-import org.apache.tapestry.util.xml.DocumentParseException;
-import org.xml.sax.Attributes;
-
-/**
- *  A rule for processing the copy-of attribute
- *  of the &lt;component&gt; element (in a page
- *  or component specification).
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 3.0
- *
- **/
-
-public class ComponentCopyOfRule extends AbstractSpecificationRule
-{
-    /**
-     *  Validates that the element has either type or copy-of (not both, not neither).
-     *  Uses the copy-of attribute to find a previously declared component
-     *  and copies its type and bindings into the new component (on top of the stack).
-     * 
-     **/
-
-    public void begin(String namespace, String name, Attributes attributes) throws Exception
-    {
-        String id = getValue(attributes, "id");
-        String copyOf = getValue(attributes, "copy-of");
-        String type = getValue(attributes, "type");
-
-        if (Tapestry.isBlank(copyOf))
-        {
-            if (Tapestry.isBlank(type))
-                throw new DocumentParseException(
-                    Tapestry.format("SpecificationParser.missing-type-or-copy-of", id),
-                    getResourceLocation());
-
-            return;
-        }
-
-        if (Tapestry.isNonBlank(type))
-            throw new DocumentParseException(
-                Tapestry.format("SpecificationParser.both-type-and-copy-of", id),
-                getResourceLocation());
-
-        IComponentSpecification spec = (IComponentSpecification) digester.getRoot();
-
-        IContainedComponent source = spec.getComponent(copyOf);
-        if (source == null)
-            throw new DocumentParseException(
-                Tapestry.format("SpecificationParser.unable-to-copy", copyOf),
-                getResourceLocation());
-
-        IContainedComponent target = (IContainedComponent) digester.peek();
-
-        target.setType(source.getType());
-        target.setCopyOf(copyOf);
-
-        Iterator i = source.getBindingNames().iterator();
-        while (i.hasNext())
-        {
-            String bindingName = (String) i.next();
-            IBindingSpecification binding = source.getBinding(bindingName);
-            target.setBinding(bindingName, binding);
-        }
-    }
-
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/parse/ComponentTemplate.java b/3.0.4/framework/src/org/apache/tapestry/parse/ComponentTemplate.java
deleted file mode 100644
index 1837a0a..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/parse/ComponentTemplate.java
+++ /dev/null
@@ -1,74 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.parse;
-
-/**
- *  Enapsulates a parsed component template, allowing access to the
- *  tokens parsed.
- *
- *  <p>TBD:  Record the name of the resource (or other location) from which
- *  the template was parsed (useful during debugging).
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- * 
- **/
-
-public class ComponentTemplate
-{
-    /**
-     *  The HTML template from which the tokens were generated.  This is a string
-     *  read from a resource.  The tokens represents offsets and lengths into
-     *  this string.
-     *
-     **/
-
-    private char[] _templateData;
-
-    private TemplateToken[] _tokens;
-
-    /**
-     *  Creates a new ComponentTemplate.
-     *
-     *  @param templateData The template data.  This is <em>not</em> copied, so
-     *  the array passed in should not be modified further.
-     *
-     *  @param tokens  The tokens making up the template.  This is also
-     *  retained (<em>not</em> copied), and so should not
-     *  be modified once passed to the constructor.
-     *
-     **/
-
-    public ComponentTemplate(char[] templateData, TemplateToken[] tokens)
-    {
-        _templateData = templateData;
-        _tokens = tokens;
-    }
-
-    public char[] getTemplateData()
-    {
-        return _templateData;
-    }
-
-    public TemplateToken getToken(int index)
-    {
-        return _tokens[index];
-    }
-
-    public int getTokenCount()
-    {
-        return _tokens.length;
-    }
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/parse/ConnectChildRule.java b/3.0.4/framework/src/org/apache/tapestry/parse/ConnectChildRule.java
deleted file mode 100644
index cf13890..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/parse/ConnectChildRule.java
+++ /dev/null
@@ -1,67 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.parse;
-
-import org.apache.commons.beanutils.MethodUtils;
-import org.xml.sax.Attributes;
-
-/**
- *  Connects a child object to a parent object using a named method.  The method
- *  takes two parameters: the name of the child object and the child object itself.
- *  The child object name is taken from an attribute.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 3.0
- *
- **/
-
-public class ConnectChildRule extends AbstractSpecificationRule
-{
-    private String _methodName;
-    private String _attributeName;
-
-    private String _attributeValue;
-
-    public ConnectChildRule(String methodName, String attributeName)
-    {
-        _methodName = methodName;
-        _attributeName = attributeName;
-    }
-
-    public void begin(String namespace, String name, Attributes attributes) throws Exception
-    {
-        _attributeValue = getValue(attributes, _attributeName);
-
-        // Check for null?
-    }
-
-    /**
-     *  Performs the add.  This is done in <code>end()</code> to ensure
-     *  that the child object (on top of the stack) is fully initialized.
-     * 
-     **/
-
-    public void end(String namespace, String name) throws Exception
-    {
-        Object child = digester.peek();
-        Object parent = digester.peek(1);
-
-        MethodUtils.invokeMethod(parent, _methodName, new Object[] { _attributeValue, child });
-
-        _attributeValue = null;
-    }
-
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/parse/DisallowFrameworkNamespaceRule.java b/3.0.4/framework/src/org/apache/tapestry/parse/DisallowFrameworkNamespaceRule.java
deleted file mode 100644
index b632e5a..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/parse/DisallowFrameworkNamespaceRule.java
+++ /dev/null
@@ -1,47 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.parse;
-
-import org.apache.tapestry.INamespace;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.util.xml.DocumentParseException;
-import org.xml.sax.Attributes;
-
-/**
- *  Special purpose rule that simple validates that a library does
- *  not use the reserved framework namespace.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 3.0
- *
- **/
-
-public class DisallowFrameworkNamespaceRule extends AbstractSpecificationRule
-{
-
-    public void begin(String namespace, String name, Attributes attributes) throws Exception
-    {
-        String id = getValue(attributes, "id");
-
-        if (id.equals(INamespace.FRAMEWORK_NAMESPACE))
-            throw new DocumentParseException(
-                Tapestry.format(
-                    "SpecificationParser.framework-library-id-is-reserved",
-                    INamespace.FRAMEWORK_NAMESPACE),
-                getResourceLocation());
-    }
-
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/parse/IDocumentRule.java b/3.0.4/framework/src/org/apache/tapestry/parse/IDocumentRule.java
deleted file mode 100644
index b7ebd5f..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/parse/IDocumentRule.java
+++ /dev/null
@@ -1,45 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.parse;
-
-import org.xml.sax.Attributes;
-
-/**
- *  A {@link org.apache.tapestry.parse.SpecificationDigester} rule that executes
- *  at the start and end of the document.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 3.0
- *
- **/
-
-public interface IDocumentRule
-{
-    public void setDigester(SpecificationDigester digester);
-
-	/**
-	 *  Invoked at the time the first element in the document is parsed.
-	 * 
-	 *  By this time, the publicId will be known.
-	 * 
-	 **/
-	
-    public void startDocument(String namespace, String name, Attributes attributes) throws Exception;
-
-    public void endDocument() throws Exception;
-
-    public void finish() throws Exception;
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/parse/ITemplateParserDelegate.java b/3.0.4/framework/src/org/apache/tapestry/parse/ITemplateParserDelegate.java
deleted file mode 100644
index 01cf54c..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/parse/ITemplateParserDelegate.java
+++ /dev/null
@@ -1,63 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.parse;
-
-import org.apache.tapestry.ILocation;
-
-/**
- *  Provides a {@link TemplateParser} with additional information about
- *  dynamic components.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- * 
- **/
-
-public interface ITemplateParserDelegate
-{
-    /**
-     *  Returns true if the component id is valid, false if the
-     *  component id is not recognized.
-     *
-     **/
-
-    public boolean getKnownComponent(String componentId);
-
-    /**
-     *  Returns true if the specified component allows a body, false
-     *  otherwise.  The parser uses this information to determine
-     *  if it should ignore the body of a tag.
-     *
-     *  @throws org.apache.tapestry.ApplicationRuntimeException if no such component exists
-     * 
-     **/
-
-    public boolean getAllowBody(String componentId, ILocation location);
-
-    /**
-     *  Used with implicit components to determine if the component
-     *  allows a body or not.
-     * 
-     *  @param libraryId the specified library id, possibly null
-     *  @param type the component type
-     * 
-     *  @throws org.apache.tapestry.ApplicationRuntimeException if the specification cannot be found
-     * 
-     *  @since 3.0
-     * 
-     **/
-
-    public boolean getAllowBody(String libraryId, String type, ILocation location);
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/parse/InitializePropertyRule.java b/3.0.4/framework/src/org/apache/tapestry/parse/InitializePropertyRule.java
deleted file mode 100644
index dc76c82..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/parse/InitializePropertyRule.java
+++ /dev/null
@@ -1,46 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.parse;
-
-import org.xml.sax.Attributes;
-
-/**
- *  Used to initialize a property of an object on the top of the digester stack.
- *  This should come after the {@link org.apache.commons.digester.ObjectCreateRule}
- *  (or variation) and before and property setting for the object.  Remember
- *  that rules order matters with the digester.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 3.0
- *
- **/
-
-public class InitializePropertyRule extends AbstractSpecificationRule
-{
-    private String _propertyName;
-    private Object _value;
-
-    public InitializePropertyRule(String propertyName, Object value)
-    {
-        _propertyName = propertyName;
-        _value = value;
-    }
-
-    public void begin(String namespace, String name, Attributes attributes) throws Exception
-    {
-        setProperty(_propertyName, _value);
-    }
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/parse/LocalizationToken.java b/3.0.4/framework/src/org/apache/tapestry/parse/LocalizationToken.java
deleted file mode 100644
index ba026b9..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/parse/LocalizationToken.java
+++ /dev/null
@@ -1,87 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.parse;
-
-import java.util.Map;
-
-import org.apache.tapestry.ILocation;
-
-/**
- *  Represents localized text from the template.
- *
- *  @see TokenType#LOCALIZATION
- * 
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 3.0
- *
- **/
-
-public class LocalizationToken extends TemplateToken
-{
-    private String _tag;
-    private String _key;
-    private boolean _raw;
-    private Map _attributes;
-    
-    /**
-     *  Creates a new token.
-     * 
-     * 
-     *  @param tag the tag of the element from the template
-     *  @param key the localization key specified
-     *  @param raw if true, then the localized value contains markup that should not be escaped
-     *  @param attributes any additional attributes (beyond those used to define key and raw)
-     *  that were specified.  This value is retained, not copied.
-     *  @param location location of the tag which defines this token
-     * 
-     **/
-    
-    public LocalizationToken(String tag, String key, boolean raw, Map attributes, ILocation location)
-    {
-        super(TokenType.LOCALIZATION, location);
-        
-        _tag = tag;
-        _key = key;
-        _raw = raw;
-        _attributes = attributes;
-    }
-    
-    /**
-     *  Returns any attributes for the token, which may be null.  Do not modify
-     *  the return value.
-     * 
-     **/
-    
-    public Map getAttributes()
-    {
-        return _attributes;
-    }
-
-    public boolean isRaw()
-    {
-        return _raw;
-    }
-
-    public String getTag()
-    {
-        return _tag;
-    }
-
-    public String getKey()
-    {
-        return _key;
-    }
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/parse/OpenToken.java b/3.0.4/framework/src/org/apache/tapestry/parse/OpenToken.java
deleted file mode 100644
index dfec6ff..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/parse/OpenToken.java
+++ /dev/null
@@ -1,128 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.parse;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import org.apache.commons.lang.builder.ToStringBuilder;
-import org.apache.tapestry.ILocation;
-
-/**
- *  Token representing the open tag for a component.  Components may be either
- *  specified or implicit.  Specified components (the traditional type, dating
- *  back to the origin of Tapestry) are matched by an entry in the
- *  containing component's specification.  Implicit components specify their
- *  type in the component template and must not have an entry in
- *  the containing component's specification.
- *
- *  @see TokenType#OPEN
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 3.0
- *
- **/
-
-public class OpenToken extends TemplateToken
-{
-    private String _tag;
-    private String _id;
-    private String _componentType;
-    private Map _attributes;
-
-    /**
-     *  Creates a new token with the given tag, id and type 
-     * 
-     *  @param tag the template tag which represents the component, typically "span"
-     *  @param id the id for the component, which may be assigned by the template
-     *  parser for implicit components
-     *  @param  componentType the type of component, if an implicit component, or null for
-     *  a specified component
-     *  @param location location of tag represented by this token
-     * 
-     **/
-
-    public OpenToken(String tag, String id, String componentType, ILocation location)
-    {
-        super(TokenType.OPEN, location);
-
-        _tag = tag;
-        _id = id;
-        _componentType = componentType;
-    }
-
-    /**
-     *  Returns the id for the component.
-     * 
-     **/
-    
-    public String getId()
-    {
-        return _id;
-    }
-
-    /**
-     *  Returns the tag used to represent the component within the template.
-     * 
-     **/
-    
-    public String getTag()
-    {
-        return _tag;
-    }
-    
-    /**
-     *  Returns the specified component type, or null for a component where the type
-     *  is not defined in the template.  The type may include a library id prefix.
-     * 
-     **/
-    
-    public String getComponentType()
-    {
-        return _componentType;
-    }
-
-	public void addAttribute(String name, AttributeType type, String value)
-	{
-		TemplateAttribute attribute = new TemplateAttribute(type, value);
-		
-		if (_attributes == null)
-		_attributes = new HashMap();
-		
-		_attributes.put(name, attribute);
-	}
-	
-	/**
-	 *  Returns a Map of attributes.  Key is the attribute name, value
-	 *  is an instance of {@link org.apache.tapestry.parse.TemplateAttribute}.
-	 *  The caller should not modify the Map.  Returns null if
-	 *  this OpenToken contains no attributes.
-	 * 
-	 **/
-	
-	public Map getAttributesMap()
-	{
-		return _attributes;
-	}
-
-    protected void extendDescription(ToStringBuilder builder)
-    {
-        builder.append("id", _id);
-        builder.append("componentType", _componentType);
-        builder.append("tag", _tag);
-        builder.append("attributes", _attributes);
-    }
-
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/parse/SetBooleanPropertyRule.java b/3.0.4/framework/src/org/apache/tapestry/parse/SetBooleanPropertyRule.java
deleted file mode 100644
index 5808b9c..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/parse/SetBooleanPropertyRule.java
+++ /dev/null
@@ -1,51 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.parse;
-
-import org.xml.sax.Attributes;
-
-/**
- *  Sets a boolean property from an attribute of the current element.
- *  The value must be either "yes" or "no" (or not present).
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 3.0
- *
- **/
-public class SetBooleanPropertyRule extends AbstractSpecificationRule
-{
-    private String _attributeName;
-    private String _propertyName;
-
-    public SetBooleanPropertyRule(String attributeName, String propertyName)
-    {
-        _attributeName = attributeName;
-        _propertyName = propertyName;
-    }
-
-    public void begin(String namespace, String name, Attributes attributes) throws Exception
-    {
-        String attributeValue = getValue(attributes, _attributeName);
-
-        if (attributeValue == null)
-            return;
-
-        Boolean propertyValue = attributeValue.equals("yes") ? Boolean.TRUE : Boolean.FALSE;
-
-        setProperty(_propertyName, propertyValue);
-    }
-
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/parse/SetConvertedPropertyRule.java b/3.0.4/framework/src/org/apache/tapestry/parse/SetConvertedPropertyRule.java
deleted file mode 100644
index 6516971..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/parse/SetConvertedPropertyRule.java
+++ /dev/null
@@ -1,59 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.parse;
-
-import java.util.Map;
-
-import org.xml.sax.Attributes;
-
-/**
- *  Rule that applies a conversion of a string value from an attribute into
- *  an object value before assigning it to the property.  This is used
- *  to translate values from strings to
- *  {@link org.apache.commons.lang.enum.Enum}s.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 3.0
- *
- **/
-
-public class SetConvertedPropertyRule extends AbstractSpecificationRule
-{
-    private Map _map;
-    private String _attributeName;
-    private String _propertyName;
-
-    public SetConvertedPropertyRule(Map map, String attributeName, String propertyName)
-    {
-        _map = map;
-        _attributeName = attributeName;
-        _propertyName = propertyName;
-    }
-
-    public void begin(String namespace, String name, Attributes attributes) throws Exception
-    {
-        String attributeValue = getValue(attributes, _attributeName);
-        if (attributeValue == null)
-            return;
-
-        Object propertyValue = _map.get(attributeValue);
-
-        // Check for null here?
-
-        setProperty(_propertyName, propertyValue);
-    }
-
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/parse/SetExtendedPropertyRule.java b/3.0.4/framework/src/org/apache/tapestry/parse/SetExtendedPropertyRule.java
deleted file mode 100644
index 28964d9..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/parse/SetExtendedPropertyRule.java
+++ /dev/null
@@ -1,92 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.parse;
-
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.util.xml.DocumentParseException;
-import org.xml.sax.Attributes;
-
-/**
- *  Sets a property from an extended attribute.  An extended attribute
- *  is a value that may either be specified inside an XML attribute or,
- *  if the attribute is not present, in the body of the element.
- *  It is not allowed that the value be specified in both places.
- *  The value may be optional or required.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 3.0
- *
- **/
-
-public class SetExtendedPropertyRule extends AbstractSpecificationRule
-{
-    private String _attributeName;
-    private String _propertyName;
-    private boolean _required;
-
-    private boolean _valueSet;
-
-    public SetExtendedPropertyRule(String attributeName, String propertyName, boolean required)
-    {
-        _attributeName = attributeName;
-        _propertyName = propertyName;
-        _required = required;
-    }
-
-    public void begin(String namespace, String name, Attributes attributes) throws Exception
-    {
-        String value = getValue(attributes, _attributeName);
-
-        if (value != null)
-        {
-            setProperty(_propertyName, value);
-            _valueSet = true;
-        }
-    }
-
-    public void body(String namespace, String name, String text) throws Exception
-    {
-        if (Tapestry.isBlank(text))
-            return;
-
-        if (_valueSet)
-        {
-            throw new DocumentParseException(
-                Tapestry.format(
-                    "SpecificationParser.no-attribute-and-body",
-                    _attributeName,
-                    name),
-                getResourceLocation());
-        }
-
-        setProperty(_propertyName, text.trim());
-        _valueSet = true;
-    }
-
-    public void end(String namespace, String name) throws Exception
-    {
-        if (!_valueSet && _required)
-            throw new DocumentParseException(
-                Tapestry.format(
-                    "SpecificationParser.required-extended-attribute",
-                    name,
-                    _attributeName),
-                getResourceLocation());
-
-        _valueSet = false;
-    }
-
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/parse/SetLimitedPropertiesRule.java b/3.0.4/framework/src/org/apache/tapestry/parse/SetLimitedPropertiesRule.java
deleted file mode 100644
index 4d5ef44..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/parse/SetLimitedPropertiesRule.java
+++ /dev/null
@@ -1,77 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.parse;
-
-import org.apache.commons.beanutils.PropertyUtils;
-import org.apache.tapestry.Tapestry;
-import org.xml.sax.Attributes;
-
-/**
- *  Much like {@link org.apache.commons.digester.SetPropertiesRule}, but
- *  only properties that are declared will be copied; other properties
- *  will be ignored.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 3.0
- *
- **/
-public class SetLimitedPropertiesRule extends AbstractSpecificationRule
-{
-    private String[] _attributeNames;
-    private String[] _propertyNames;
-
-    public SetLimitedPropertiesRule(String attributeName, String propertyName)
-    {
-        this(new String[] { attributeName }, new String[] { propertyName });
-    }
-
-    public SetLimitedPropertiesRule(String[] attributeNames, String[] propertyNames)
-    {
-        _attributeNames = attributeNames;
-        _propertyNames = propertyNames;
-    }
-
-    public void begin(String namespace, String name, Attributes attributes) throws Exception
-    {
-        Object top = digester.peek();
-
-        int count = attributes.getLength();
-
-        for (int i = 0; i < count; i++)
-        {
-            String attributeName = attributes.getLocalName(i);
-
-            if (Tapestry.isBlank(attributeName))
-                attributeName = attributes.getQName(i);
-
-            for (int x = 0; x < _attributeNames.length; x++)
-            {
-                if (_attributeNames[x].equals(attributeName))
-                {
-                    String value = attributes.getValue(i);
-                    String propertyName = _propertyNames[x];
-
-                    PropertyUtils.setProperty(top, propertyName, value);
-
-                    // Terminate inner loop when attribute name is found.
-
-                    break;
-                }
-            }
-        }
-    }
-
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/parse/SetMetaPropertyRule.java b/3.0.4/framework/src/org/apache/tapestry/parse/SetMetaPropertyRule.java
deleted file mode 100644
index 47f21e4..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/parse/SetMetaPropertyRule.java
+++ /dev/null
@@ -1,78 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.parse;
-
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.util.IPropertyHolder;
-import org.apache.tapestry.util.xml.DocumentParseException;
-import org.xml.sax.Attributes;
-
-/**
- *  Handles the &lt;property&gt; element in Tapestry specifications, which is 
- *  designed to hold meta-data about specifications.
- *  Expects the top object on the stack to be a {@link org.apache.tapestry.util.IPropertyHolder}.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 3.0
- *
- **/
-
-public class SetMetaPropertyRule extends AbstractSpecificationRule
-{
-    private String _name;
-    private String _value;
-
-    public void begin(String namespace, String name, Attributes attributes) throws Exception
-    {
-        _name = getValue(attributes, "name");
-
-        // First, get the value from the attribute, if present
-
-        _value = getValue(attributes, "value");
-
-    }
-
-    public void body(String namespace, String name, String text) throws Exception
-    {
-        if (Tapestry.isBlank(text))
-            return;
-
-        if (_value != null)
-        {
-            throw new DocumentParseException(
-                Tapestry.format("SpecificationParser.no-attribute-and-body", "value", name),
-                getResourceLocation());
-        }
-
-        _value = text.trim();
-    }
-
-    public void end(String namespace, String name) throws Exception
-    {
-        if (_value == null)
-            throw new DocumentParseException(
-                Tapestry.format("SpecificationParser.required-extended-attribute", name, "value"),
-                getResourceLocation());
-
-        IPropertyHolder holder = (IPropertyHolder) digester.peek();
-
-        holder.setProperty(_name, _value);
-
-        _name = null;
-        _value = null;
-    }
-
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/parse/SetPublicIdRule.java b/3.0.4/framework/src/org/apache/tapestry/parse/SetPublicIdRule.java
deleted file mode 100644
index ae64893..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/parse/SetPublicIdRule.java
+++ /dev/null
@@ -1,37 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.parse;
-
-import org.xml.sax.Attributes;
-
-/**
- *  Sets the publicId
- *  property of the parsed specification.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 3.0
- *
- **/
-
-public class SetPublicIdRule extends AbstractSpecificationRule
-{
-
-    public void begin(String namespace, String name, Attributes attributes) throws Exception
-    {
-        setProperty("publicId", digester.getPublicId());
-    }
-
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/parse/SpecificationDigester.java b/3.0.4/framework/src/org/apache/tapestry/parse/SpecificationDigester.java
deleted file mode 100644
index 9847d6a..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/parse/SpecificationDigester.java
+++ /dev/null
@@ -1,300 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.parse;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.commons.digester.Digester;
-import org.apache.tapestry.ILocation;
-import org.apache.tapestry.IResourceLocation;
-import org.apache.tapestry.Location;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.util.RegexpMatcher;
-import org.xml.sax.Attributes;
-import org.xml.sax.Locator;
-import org.xml.sax.SAXException;
-import org.xml.sax.SAXParseException;
-
-/**
- *  Extension of {@link org.apache.commons.digester.Digester} with additional rules, hooks
- *  and methods needed when parsing Tapestry specifications.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 3.0
- *
- **/
-
-public class SpecificationDigester extends Digester
-{
-    private List _documentRules;
-    private IResourceLocation _resourceLocation;
-    private RegexpMatcher _matcher;
-
-    private ILocation _lastLocation;
-    private int _lastLine;
-    private int _lastColumn;
-
-    /**
-     *  Notifications are sent with the very first element.
-     * 
-     **/
-
-    private boolean _firstElement = true;
-
-    public void addDocumentRule(IDocumentRule rule)
-    {
-        if (_documentRules == null)
-            _documentRules = new ArrayList();
-
-        rule.setDigester(this);
-
-        _documentRules.add(rule);
-    }
-
-    public void addSetBooleanProperty(String pattern, String attributeName, String propertyName)
-    {
-        addRule(pattern, new SetBooleanPropertyRule(attributeName, propertyName));
-    }
-
-    public void addSetExtendedProperty(
-        String pattern,
-        String attributeName,
-        String propertyName,
-        boolean required)
-    {
-        addRule(pattern, new SetExtendedPropertyRule(attributeName, propertyName, required));
-    }
-
-    public void addValidate(
-        String pattern,
-        String attributeName,
-        String valuePattern,
-        String errorKey)
-    {
-        addRule(pattern, new ValidateRule(getMatcher(), attributeName, valuePattern, errorKey));
-    }
-
-    public void addSetConvertedProperty(
-        String pattern,
-        Map map,
-        String attributeName,
-        String propertyName)
-    {
-        addRule(pattern, new SetConvertedPropertyRule(map, attributeName, propertyName));
-    }
-
-    public void addConnectChild(String pattern, String methodName, String attributeName)
-    {
-        addRule(pattern, new ConnectChildRule(methodName, attributeName));
-    }
-
-    public void addInitializeProperty(String pattern, String propertyName, Object value)
-    {
-        addRule(pattern, new InitializePropertyRule(propertyName, value));
-    }
-
-    public void addSetLimitedProperties(String pattern, String attributeName, String propertyName)
-    {
-        addRule(pattern, new SetLimitedPropertiesRule(attributeName, propertyName));
-    }
-
-    public void addSetLimitedProperties(
-        String pattern,
-        String[] attributeNames,
-        String[] propertyNames)
-    {
-        addRule(pattern, new SetLimitedPropertiesRule(attributeNames, propertyNames));
-    }
-
-    public void addBody(String pattern, String propertyName)
-    {
-        addRule(pattern, new BodyRule(propertyName));
-    }
-
-    /**
-     *  Returns the {@link org.xml.sax.Locator} for the Digester.  This object
-     *  is provided by the underlying SAX parser to identify where in the
-     *  document the parse is currently located; this information can be
-     *  used to build a {@link org.apache.tapestry.ILocation}.
-     * 
-     **/
-
-    public Locator getLocator()
-    {
-        return locator;
-    }
-
-    public ILocation getLocationTag()
-    {
-        int line = -1;
-        int column = -1;
-
-        if (locator != null)
-        {
-            line = locator.getLineNumber();
-            column = locator.getColumnNumber();
-        }
-
-        if (_lastLine != line || _lastColumn != column)
-            _lastLocation = null;
-
-        if (_lastLocation == null)
-        {
-            _lastLine = line;
-            _lastColumn = column;
-            _lastLocation = new Location(_resourceLocation, line, column);
-        }
-
-        return _lastLocation;
-    }
-
-    public IResourceLocation getResourceLocation()
-    {
-        return _resourceLocation;
-    }
-
-    public void setResourceLocation(IResourceLocation resourceLocation)
-    {
-        _resourceLocation = resourceLocation;
-
-        _lastLocation = null;
-        _lastLine = -1;
-        _lastColumn = -1;
-    }
-
-    public RegexpMatcher getMatcher()
-    {
-        if (_matcher == null)
-            _matcher = new RegexpMatcher();
-
-        return _matcher;
-    }
-
-    public void endDocument() throws SAXException
-    {
-        int count = Tapestry.size(_documentRules);
-
-        for (int i = 0; i < count; i++)
-        {
-            IDocumentRule rule = (IDocumentRule) _documentRules.get(i);
-
-            try
-            {
-
-                rule.endDocument();
-            }
-            catch (Exception ex)
-            {
-                throw createSAXException(ex);
-            }
-        }
-
-        super.endDocument();
-
-        for (int i = 0; i < count; i++)
-        {
-            IDocumentRule rule = (IDocumentRule) _documentRules.get(i);
-
-            try
-            {
-                rule.finish();
-            }
-            catch (Exception ex)
-            {
-                throw createSAXException(ex);
-            }
-        }
-    }
-
-    public void startDocument() throws SAXException
-    {
-        _firstElement = true;
-
-        super.startDocument();
-    }
-
-    public void startElement(
-        String namespaceURI,
-        String localName,
-        String qName,
-        Attributes attributes)
-        throws SAXException
-    {
-        if (_firstElement)
-        {
-            sendStartDocumentNotification(namespaceURI, localName, qName, attributes);
-
-            _firstElement = false;
-        }
-
-        super.startElement(namespaceURI, localName, qName, attributes);
-    }
-
-    private void sendStartDocumentNotification(
-        String namespaceURI,
-        String localName,
-        String qName,
-        Attributes attributes)
-        throws SAXException
-    {
-        int count = Tapestry.size(_documentRules);
-
-        String name = Tapestry.isBlank(localName) ? qName : localName;
-
-        for (int i = 0; i < count; i++)
-        {
-            IDocumentRule rule = (IDocumentRule) _documentRules.get(i);
-
-            try
-            {
-                rule.startDocument(namespaceURI, name, attributes);
-            }
-            catch (Exception ex)
-            {
-                throw createSAXException(ex);
-            }
-        }
-
-    }
-
-    /**
-     * Invokes {@link #fatalError(SAXParseException)}.
-     */
-    public void error(SAXParseException exception) throws SAXException
-    {
-        fatalError(exception);
-    }
-
-    /**
-     * Simply re-throws the exception.  All exceptions when parsing
-     * documents are fatal.
-     */
-    public void fatalError(SAXParseException exception) throws SAXException
-    {
-        throw exception;
-    }
-
-    /**
-     * Invokes {@link #fatalError(SAXParseException)}.
-     */
-    public void warning(SAXParseException exception) throws SAXException
-    {
-        fatalError(exception);
-    }
-
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/parse/SpecificationParser.java b/3.0.4/framework/src/org/apache/tapestry/parse/SpecificationParser.java
deleted file mode 100644
index 01c9318..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/parse/SpecificationParser.java
+++ /dev/null
@@ -1,1295 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.parse;
-
-import java.net.URL;
-import java.util.HashMap;
-import java.util.Map;
-
-import org.apache.commons.digester.Rule;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.tapestry.ILocationHolder;
-import org.apache.tapestry.IResourceLocation;
-import org.apache.tapestry.IResourceResolver;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.spec.AssetType;
-import org.apache.tapestry.spec.BeanLifecycle;
-import org.apache.tapestry.spec.BindingType;
-import org.apache.tapestry.spec.Direction;
-import org.apache.tapestry.spec.IApplicationSpecification;
-import org.apache.tapestry.spec.IComponentSpecification;
-import org.apache.tapestry.spec.IExtensionSpecification;
-import org.apache.tapestry.spec.ILibrarySpecification;
-import org.apache.tapestry.spec.SpecFactory;
-import org.apache.tapestry.util.xml.DocumentParseException;
-import org.xml.sax.Attributes;
-import org.xml.sax.InputSource;
-import org.xml.sax.SAXParseException;
-
-/**
- *  Used to parse an application or component specification into a
- *  {@link org.apache.tapestry.spec.ApplicationSpecification} or {@link IComponentSpecification}.
- *
- *
- *  <table border=1
- *	<tr>
- *	  <th>Version</th> <th>PUBLIC ID</th> <th>SYSTEM ID</th> <th>Description</th>
- *  </tr>
- *
- * 
- *  <tr valign="top">
- *  <td>1.3</td>
- *  <td><code>-//Howard Lewis Ship//Tapestry Specification 1.3//EN</code></td>
- * <td><code>http://tapestry.sf.net/dtd/Tapestry_1_3.dtd</code></td>
- *  <td>
- *  Version of specification introduced in release 2.2.
- * </td>
- * </tr>
- *
- *  <tr valign="top">
- *  <td>3.0</td>
- *  <td><code>-//Howard Lewis Ship//Tapestry Specification 3.0//EN</code></td>
- * <td><code>http://tapestry.sf.net/dtd/Tapestry_3_0.dtd</code></td>
- *  <td>
- *  Version of specification introduced in release 3.0.
- *  <br/>
- *  Note: Future DTD versions will track Tapestry release numbers.
- * </td>
- * </tr>
- * 
- * 
- *  </table>
- *
- *  @version $Id$
- *  @author Howard Lewis Ship
- * 
- **/
-
-public class SpecificationParser
-{
-    private static final Log LOG = LogFactory.getLog(SpecificationParser.class);
-
-    /** @since 2.2 **/
-
-    public static final String TAPESTRY_DTD_1_3_PUBLIC_ID =
-        "-//Howard Lewis Ship//Tapestry Specification 1.3//EN";
-
-    /** @since 3.0 **/
-
-    public static final String TAPESTRY_DTD_3_0_PUBLIC_ID =
-        "-//Apache Software Foundation//Tapestry Specification 3.0//EN";
-
-    /**
-     *  Like modified property name, but allows periods in the name as
-     *  well.
-     * 
-     *  @since 2.2
-     * 
-     **/
-
-    public static final String EXTENDED_PROPERTY_NAME_PATTERN = "^_?[a-zA-Z](\\w|-|\\.)*$";
-
-    /**
-     *  Perl5 pattern that parameter names must conform to.  
-     *  Letter, followed by letter, number or underscore.
-     * 
-     *  @since 2.2
-     * 
-     **/
-
-    public static final String PARAMETER_NAME_PATTERN = Tapestry.SIMPLE_PROPERTY_NAME_PATTERN;
-
-    /**
-     *  Perl5 pattern that property names (that can be connected to
-     *  parameters) must conform to.  
-     *  Letter, followed by letter, number or underscore.
-     *  
-     * 
-     *  @since 2.2
-     * 
-     **/
-
-    public static final String PROPERTY_NAME_PATTERN = Tapestry.SIMPLE_PROPERTY_NAME_PATTERN;
-
-    /**
-     *  Perl5 pattern for page names.  Letter
-     *  followed by letter, number, dash, underscore or period.
-     * 
-     *  @since 2.2
-     * 
-     **/
-
-    public static final String PAGE_NAME_PATTERN = EXTENDED_PROPERTY_NAME_PATTERN;
-
-    /**
-     *  Perl5 pattern for component alias. 
-     *  Letter, followed by letter, number, or underscore.
-     *  This is used to validate component types registered
-     *  in the application or library specifications.
-     * 
-     *  @since 2.2
-     * 
-     **/
-
-    public static final String COMPONENT_ALIAS_PATTERN = Tapestry.SIMPLE_PROPERTY_NAME_PATTERN;
-
-    /**
-     *  Perl5 pattern for helper bean names.  
-     *  Letter, followed by letter, number or underscore.
-     * 
-     *  @since 2.2
-     * 
-     **/
-
-    public static final String BEAN_NAME_PATTERN = Tapestry.SIMPLE_PROPERTY_NAME_PATTERN;
-
-    /**
-     *  Perl5 pattern for component ids.  Letter, followed by
-     *  letter, number or underscore.
-     * 
-     *  @since 2.2
-     * 
-     **/
-
-    public static final String COMPONENT_ID_PATTERN = Tapestry.SIMPLE_PROPERTY_NAME_PATTERN;
-
-    /**
-     *  Perl5 pattern for asset names.  Letter, followed by
-     *  letter, number or underscore.  Also allows
-     *  the special "$template" value.
-     * 
-     *  @since 2.2
-     * 
-     **/
-
-    public static final String ASSET_NAME_PATTERN =
-        "(\\$template)|(" + Tapestry.SIMPLE_PROPERTY_NAME_PATTERN + ")";
-
-    /**
-     *  Perl5 pattern for service names.  Letter
-     *  followed by letter, number, dash, underscore or period.
-     * 
-     *  @since 2.2
-     * 
-     **/
-
-    public static final String SERVICE_NAME_PATTERN = EXTENDED_PROPERTY_NAME_PATTERN;
-
-    /**
-     *  Perl5 pattern for library ids.  Letter followed
-     *  by letter, number or underscore.
-     * 
-     *  @since 2.2
-     * 
-     **/
-
-    public static final String LIBRARY_ID_PATTERN = Tapestry.SIMPLE_PROPERTY_NAME_PATTERN;
-
-    /**
-     *  Per5 pattern for extension names.  Letter followed
-     *  by letter, number, dash, period or underscore. 
-     * 
-     *  @since 2.2
-     * 
-     **/
-
-    public static final String EXTENSION_NAME_PATTERN = EXTENDED_PROPERTY_NAME_PATTERN;
-
-    /**
-     *  Perl5 pattern for component types.  Component types are an optional
-     *  namespace prefix followed by a normal identifier.
-     * 
-     *  @since 2.2
-     **/
-
-    public static final String COMPONENT_TYPE_PATTERN = "^(_?[a-zA-Z]\\w*:)?[a-zA-Z_](\\w)*$";
-
-    /**
-     *  We can share a single map for all the XML attribute to object conversions,
-     *  since the keys are unique.
-     * 
-     **/
-
-    private static final Map CONVERSION_MAP = new HashMap();
-
-    /** @since 1.0.9 **/
-
-    private SpecFactory _factory;
-
-    /** 
-     *   Digester used for component specifications.
-     * 
-     *  @since 3.0 
-     * 
-     **/
-
-    private SpecificationDigester _componentDigester;
-
-    /**
-     *  Digestger used for page specifications.
-     * 
-     *  @since 3.0
-     * 
-     **/
-
-    private SpecificationDigester _pageDigester;
-
-    /**
-     *  Digester use for library specifications.
-     * 
-     *  @since 3.0
-     * 
-     **/
-
-    private SpecificationDigester _libraryDigester;
-
-    /**
-     *  @since 3.0 
-     * 
-     **/
-
-    private IResourceResolver _resolver;
-
-    private interface IConverter
-    {
-        public Object convert(String value) throws DocumentParseException;
-    }
-
-    private static class BooleanConverter implements IConverter
-    
-    {
-        public Object convert(String value) throws DocumentParseException
-        {
-            Object result = CONVERSION_MAP.get(value.toLowerCase());
-
-            if (result == null || !(result instanceof Boolean))
-                throw new DocumentParseException(
-                    Tapestry.format("SpecificationParser.fail-convert-boolean", value));
-
-            return result;
-        }
-    }
-
-    private static class IntConverter implements IConverter
-    {
-        public Object convert(String value) throws DocumentParseException
-        {
-            try
-            {
-                return new Integer(value);
-            }
-            catch (NumberFormatException ex)
-            {
-                throw new DocumentParseException(
-                    Tapestry.format("SpecificationParser.fail-convert-int", value),
-                    ex);
-            }
-        }
-    }
-
-    private static class LongConverter implements IConverter
-    {
-        public Object convert(String value) throws DocumentParseException
-        {
-            try
-            {
-                return new Long(value);
-            }
-            catch (NumberFormatException ex)
-            {
-                throw new DocumentParseException(
-                    Tapestry.format("SpecificationParser.fail-convert-long", value),
-                    ex);
-            }
-        }
-    }
-
-    private static class DoubleConverter implements IConverter
-    {
-        public Object convert(String value) throws DocumentParseException
-        {
-            try
-            {
-                return new Double(value);
-            }
-            catch (NumberFormatException ex)
-            {
-                throw new DocumentParseException(
-                    Tapestry.format("SpecificationParser.fail-convert-double", value),
-                    ex);
-            }
-        }
-    }
-
-    private static class StringConverter implements IConverter
-    {
-        public Object convert(String value)
-        {
-            return value.trim();
-        }
-    }
-
-    /** 
-     *  Base class for creating locatable objects using the 
-     *  {@link SpecFactory}.
-     * 
-     **/
-
-    private abstract static class SpecFactoryCreateRule extends AbstractSpecificationRule
-    {
-        /**
-         *  Implement in subclass to create correct locatable object.
-         * 
-         **/
-
-        public abstract ILocationHolder create();
-
-        public void begin(String namespace, String name, Attributes attributes) throws Exception
-        {
-            ILocationHolder holder = create();
-
-            holder.setLocation(getLocation());
-
-            digester.push(holder);
-        }
-
-        public void end(String namespace, String name) throws Exception
-        {
-            digester.pop();
-        }
-
-    }
-
-    private class CreateExpressionBeanInitializerRule extends SpecFactoryCreateRule
-    {
-        public ILocationHolder create()
-        {
-            return _factory.createExpressionBeanInitializer();
-        }
-    }
-
-    private class CreateStringBeanInitializerRule extends SpecFactoryCreateRule
-    {
-        public ILocationHolder create()
-        {
-            return _factory.createMessageBeanInitializer();
-        }
-    }
-
-    private class CreateContainedComponentRule extends SpecFactoryCreateRule
-    {
-        public ILocationHolder create()
-        {
-            return _factory.createContainedComponent();
-        }
-    }
-
-    private class CreateParameterSpecificationRule extends SpecFactoryCreateRule
-    {
-        public ILocationHolder create()
-        {
-            return _factory.createParameterSpecification();
-        }
-    }
-
-    private class CreateComponentSpecificationRule extends SpecFactoryCreateRule
-    {
-        public ILocationHolder create()
-        {
-            return _factory.createComponentSpecification();
-        }
-    }
-
-    private class CreateBindingSpecificationRule extends SpecFactoryCreateRule
-    {
-        public ILocationHolder create()
-        {
-            return _factory.createBindingSpecification();
-        }
-    }
-
-    private class CreateBeanSpecificationRule extends SpecFactoryCreateRule
-    {
-        public ILocationHolder create()
-        {
-            return _factory.createBeanSpecification();
-        }
-    }
-
-    private class CreateListenerBindingSpecificationRule extends SpecFactoryCreateRule
-    {
-        public ILocationHolder create()
-        {
-            return _factory.createListenerBindingSpecification();
-        }
-    }
-
-    private class CreateAssetSpecificationRule extends SpecFactoryCreateRule
-    {
-        public ILocationHolder create()
-        {
-            return _factory.createAssetSpecification();
-        }
-    }
-
-    private class CreatePropertySpecificationRule extends SpecFactoryCreateRule
-    {
-        public ILocationHolder create()
-        {
-            return _factory.createPropertySpecification();
-        }
-    }
-
-    private class CreateApplicationSpecificationRule extends SpecFactoryCreateRule
-    {
-        public ILocationHolder create()
-        {
-            return _factory.createApplicationSpecification();
-        }
-    }
-
-    private class CreateLibrarySpecificationRule extends SpecFactoryCreateRule
-    {
-        public ILocationHolder create()
-        {
-            return _factory.createLibrarySpecification();
-        }
-    }
-
-    private class CreateExtensionSpecificationRule extends SpecFactoryCreateRule
-    {
-        public ILocationHolder create()
-        {
-            return _factory.createExtensionSpecification();
-        }
-    }
-
-    private static class ProcessExtensionConfigurationRule extends AbstractSpecificationRule
-    {
-        private String _value;
-        private String _propertyName;
-        private IConverter _converter;
-
-        public void begin(String namespace, String name, Attributes attributes) throws Exception
-        {
-            _propertyName = getValue(attributes, "property-name");
-            _value = getValue(attributes, "value");
-
-            String type = getValue(attributes, "type");
-
-            _converter = (IConverter) CONVERSION_MAP.get(type);
-
-            if (_converter == null)
-                throw new DocumentParseException(
-                    Tapestry.format("SpecificationParser.unknown-static-value-type", type),
-                    getResourceLocation());
-
-        }
-
-        public void body(String namespace, String name, String text) throws Exception
-        {
-            if (Tapestry.isBlank(text))
-                return;
-
-            if (_value != null)
-                throw new DocumentParseException(
-                    Tapestry.format("SpecificationParser.no-attribute-and-body", "value", name),
-                    getResourceLocation());
-
-            _value = text.trim();
-        }
-
-        public void end(String namespace, String name) throws Exception
-        {
-            if (_value == null)
-                throw new DocumentParseException(
-                    Tapestry.format(
-                        "SpecificationParser.required-extended-attribute",
-                        name,
-                        "value"),
-                    getResourceLocation());
-
-            Object objectValue = _converter.convert(_value);
-
-            IExtensionSpecification top = (IExtensionSpecification) digester.peek();
-
-            top.addConfiguration(_propertyName, objectValue);
-
-            _converter = null;
-            _value = null;
-            _propertyName = null;
-
-        }
-
-    }
-
-    // Identify all the different acceptible values.
-    // We continue to sneak by with a single map because
-    // there aren't conflicts;  when we have 'foo' meaning
-    // different things in different places in the DTD, we'll
-    // need multiple maps.
-
-    static {
-
-        CONVERSION_MAP.put("true", Boolean.TRUE);
-        CONVERSION_MAP.put("t", Boolean.TRUE);
-        CONVERSION_MAP.put("1", Boolean.TRUE);
-        CONVERSION_MAP.put("y", Boolean.TRUE);
-        CONVERSION_MAP.put("yes", Boolean.TRUE);
-        CONVERSION_MAP.put("on", Boolean.TRUE);
-
-        CONVERSION_MAP.put("false", Boolean.FALSE);
-        CONVERSION_MAP.put("f", Boolean.FALSE);
-        CONVERSION_MAP.put("0", Boolean.FALSE);
-        CONVERSION_MAP.put("off", Boolean.FALSE);
-        CONVERSION_MAP.put("no", Boolean.FALSE);
-        CONVERSION_MAP.put("n", Boolean.FALSE);
-
-        CONVERSION_MAP.put("none", BeanLifecycle.NONE);
-        CONVERSION_MAP.put("request", BeanLifecycle.REQUEST);
-        CONVERSION_MAP.put("page", BeanLifecycle.PAGE);
-        CONVERSION_MAP.put("render", BeanLifecycle.RENDER);
-
-        CONVERSION_MAP.put("boolean", new BooleanConverter());
-        CONVERSION_MAP.put("int", new IntConverter());
-        CONVERSION_MAP.put("double", new DoubleConverter());
-        CONVERSION_MAP.put("String", new StringConverter());
-        CONVERSION_MAP.put("long", new LongConverter());
-
-        CONVERSION_MAP.put("in", Direction.IN);
-        CONVERSION_MAP.put("form", Direction.FORM);
-        CONVERSION_MAP.put("custom", Direction.CUSTOM);
-        CONVERSION_MAP.put("auto", Direction.AUTO);
-    }
-
-    public SpecificationParser(IResourceResolver resolver)
-    {
-        _resolver = resolver;
-        setFactory(new SpecFactory());
-    }
-
-    /**
-     *  Parses an input stream containing a page or component specification and assembles
-     *  an {@link IComponentSpecification} from it.  
-     *
-     *  @throws DocumentParseException if the input stream cannot be fully
-     *  parsed or contains invalid data.
-     *
-     **/
-
-    public IComponentSpecification parseComponentSpecification(IResourceLocation resourceLocation)
-        throws DocumentParseException
-    {
-        if (_componentDigester == null)
-            _componentDigester = constructComponentDigester();
-
-        try
-        {
-            IComponentSpecification result =
-                (IComponentSpecification) parse(_componentDigester, resourceLocation);
-
-            result.setSpecificationLocation(resourceLocation);
-
-            return result;
-        }
-        catch (DocumentParseException ex)
-        {
-            _componentDigester = null;
-
-            throw ex;
-        }
-    }
-
-    /**
-     *  Parses a resource using a particular digester.
-     * 
-     *  @since 3.0
-     * 
-     **/
-
-    protected Object parse(SpecificationDigester digester, IResourceLocation location)
-        throws DocumentParseException
-    {
-        try
-        {
-            if (LOG.isDebugEnabled())
-                LOG.debug("Parsing " + location);
-
-            URL url = location.getResourceURL();
-
-            if (url == null)
-                throw new DocumentParseException(
-                    Tapestry.format("AbstractDocumentParser.missing-resource", location),
-                    location);
-
-            InputSource source = new InputSource(url.toExternalForm());
-
-            digester.setResourceLocation(location);
-
-            Object result = digester.parse(source);
-
-            if (LOG.isDebugEnabled())
-                LOG.debug("Result: " + result);
-
-            return result;
-        }
-        catch (SAXParseException ex)
-        {
-            throw new DocumentParseException(ex);
-        }
-        catch (DocumentParseException ex)
-        {
-            throw ex;
-        }
-        catch (Exception ex)
-        {
-            throw new DocumentParseException(
-                Tapestry.format(
-                    "SpecificationParser.error-reading-resource",
-                    location,
-                    ex.getMessage()),
-                location,
-                ex);
-        }
-        finally
-        {
-            digester.setResourceLocation(null);
-        }
-    }
-
-    /**
-     *  Parses an input stream containing a page specification and assembles
-     *  an {@link IComponentSpecification} from it.  
-     *
-     *  @throws DocumentParseException if the input stream cannot be fully
-     *  parsed or contains invalid data.
-     * 
-     *  @since 2.2
-     *
-     **/
-
-    public IComponentSpecification parsePageSpecification(IResourceLocation resourceLocation)
-        throws DocumentParseException
-    {
-        if (_pageDigester == null)
-            _pageDigester = constructPageDigester();
-
-        try
-        {
-            IComponentSpecification result =
-                (IComponentSpecification) parse(_pageDigester, resourceLocation);
-
-            result.setSpecificationLocation(resourceLocation);
-
-            return result;
-        }
-        catch (DocumentParseException ex)
-        {
-            _pageDigester = null;
-
-            throw ex;
-        }
-    }
-
-    /**
-     *  Parses an resource containing an application specification and assembles
-     *  an {@link org.apache.tapestry.spec.ApplicationSpecification} from it.
-     *
-     *  @throws DocumentParseException if the input stream cannot be fully
-     *  parsed or contains invalid data.
-     *
-     **/
-
-    public IApplicationSpecification parseApplicationSpecification(IResourceLocation resourceLocation)
-        throws DocumentParseException
-    {
-
-        // Use a one-shot digester, because you only parse the app spec
-        // once.
-
-        IApplicationSpecification result =
-            (IApplicationSpecification) parse(constructApplicationDigester(), resourceLocation);
-
-        result.setResourceResolver(_resolver);
-        result.setSpecificationLocation(resourceLocation);
-        result.instantiateImmediateExtensions();
-
-        return result;
-    }
-
-    /**
-     *  Parses an input stream containing a library specification and assembles
-     *  a {@link org.apache.tapestry.spec.LibrarySpecification} from it.
-     *
-     *  @throws DocumentParseException if the input stream cannot be fully
-     *  parsed or contains invalid data.
-     * 
-     *  @since 2.2
-     *
-     **/
-
-    public ILibrarySpecification parseLibrarySpecification(IResourceLocation resourceLocation)
-        throws DocumentParseException
-    {
-        if (_libraryDigester == null)
-            _libraryDigester = constructLibraryDigester();
-
-        try
-        {
-            ILibrarySpecification result =
-                (ILibrarySpecification) parse(_libraryDigester, resourceLocation);
-
-            result.setResourceResolver(_resolver);
-            result.setSpecificationLocation(resourceLocation);
-            result.instantiateImmediateExtensions();
-
-            return result;
-        }
-        catch (DocumentParseException ex)
-        {
-            _libraryDigester = null;
-
-            throw ex;
-        }
-    }
-
-    /**
-     *  Sets the SpecFactory which instantiates Tapestry spec objects.
-     * 
-     *  @since 1.0.9
-     **/
-
-    public void setFactory(SpecFactory factory)
-    {
-        _factory = factory;
-    }
-
-    /**
-     *  Returns the current SpecFactory which instantiates Tapestry spec objects.
-     * 
-     *  @since 1.0.9
-     * 
-     **/
-
-    public SpecFactory getFactory()
-    {
-        return _factory;
-    }
-
-    /**
-     *  Constructs a digester, registerring the known DTDs and the
-     *  global rules (for &lt;property&gt; and &lt;description&gt;).
-     * 
-     *  @since 3.0
-     * 
-     **/
-
-    protected SpecificationDigester constructBaseDigester(String rootElement)
-    {
-        SpecificationDigester result = new SpecificationDigester();
-
-        // <description>
-
-        result.addBeanPropertySetter("*/description", "description");
-
-        // <property> 
-
-        result.addRule("*/property", new SetMetaPropertyRule());
-
-        result.register(TAPESTRY_DTD_1_3_PUBLIC_ID, getURL("Tapestry_1_3.dtd"));
-        result.register(TAPESTRY_DTD_3_0_PUBLIC_ID, getURL("Tapestry_3_0.dtd"));
-
-        result.addDocumentRule(
-            new ValidatePublicIdRule(
-                new String[] { TAPESTRY_DTD_1_3_PUBLIC_ID, TAPESTRY_DTD_3_0_PUBLIC_ID },
-                rootElement));
-
-        result.setValidating(true);
-
-        return result;
-
-    }
-
-    /**
-     *  Constructs a digester configued to parse application specifications.
-     * 
-     *  @since 3.0
-     * 
-     **/
-
-    protected SpecificationDigester constructApplicationDigester()
-    {
-        SpecificationDigester result = constructBaseDigester("application");
-
-        String pattern = "application";
-
-        result.addRule(pattern, new CreateApplicationSpecificationRule());
-        result.addSetLimitedProperties(
-            pattern,
-            new String[] { "name", "engine-class" },
-            new String[] { "name", "engineClassName" });
-        result.addRule(pattern, new SetPublicIdRule());
-
-        configureLibraryCommon(result, "application");
-
-        return result;
-    }
-
-    /**
-     *  Constructs a digester configured to parse library specifications.
-     * 
-     *  @since 3.0
-     * 
-     **/
-
-    protected SpecificationDigester constructLibraryDigester()
-    {
-        SpecificationDigester result = constructBaseDigester("library-specification");
-
-        String pattern = "library-specification";
-
-        result.addRule(pattern, new CreateLibrarySpecificationRule());
-        result.addRule(pattern, new SetPublicIdRule());
-
-        // Has no attributes
-
-        configureLibraryCommon(result, "library-specification");
-
-        return result;
-    }
-
-    /**
-     *  Configures a digester to parse the common elements of
-     *  a &lt;application&gt; or &lt;library-specification&gt;.
-     * 
-     *  @since 3.0
-     * 
-     **/
-
-    protected void configureLibraryCommon(SpecificationDigester digester, String rootElementName)
-    {
-        String pattern = rootElementName + "/page";
-
-        // <page>
-
-        digester.addValidate(
-            pattern,
-            "name",
-            PAGE_NAME_PATTERN,
-            "SpecificationParser.invalid-page-name");
-        digester.addCallMethod(pattern, "setPageSpecificationPath", 2);
-        digester.addCallParam(pattern, 0, "name");
-        digester.addCallParam(pattern, 1, "specification-path");
-
-        // <component-type>
-
-        pattern = rootElementName + "/component-type";
-        digester.addValidate(
-            pattern,
-            "type",
-            COMPONENT_ALIAS_PATTERN,
-            "SpecificationParser.invalid-component-type");
-        digester.addCallMethod(pattern, "setComponentSpecificationPath", 2);
-        digester.addCallParam(pattern, 0, "type");
-        digester.addCallParam(pattern, 1, "specification-path");
-
-        // <component-alias>
-        // From 1.3 DTD, replaced with <component-type> in 3.0 DTD
-
-        pattern = rootElementName + "/component-alias";
-        digester.addValidate(
-            pattern,
-            "type",
-            COMPONENT_ALIAS_PATTERN,
-            "SpecificationParser.invalid-component-type");
-        digester.addCallMethod(pattern, "setComponentSpecificationPath", 2);
-        digester.addCallParam(pattern, 0, "type");
-        digester.addCallParam(pattern, 1, "specification-path");
-
-        // <service>
-
-        pattern = rootElementName + "/service";
-
-        digester.addValidate(
-            pattern,
-            "name",
-            SERVICE_NAME_PATTERN,
-            "SpecificationParser.invalid-service-name");
-        digester.addCallMethod(pattern, "setServiceClassName", 2);
-        digester.addCallParam(pattern, 0, "name");
-        digester.addCallParam(pattern, 1, "class");
-
-        // <library>
-
-        pattern = rootElementName + "/library";
-
-        digester.addValidate(
-            pattern,
-            "id",
-            LIBRARY_ID_PATTERN,
-            "SpecificationParser.invalid-library-id");
-        digester.addRule(pattern, new DisallowFrameworkNamespaceRule());
-        digester.addCallMethod(pattern, "setLibrarySpecificationPath", 2);
-        digester.addCallParam(pattern, 0, "id");
-        digester.addCallParam(pattern, 1, "specification-path");
-
-        // <extension>
-
-        pattern = rootElementName + "/extension";
-
-        digester.addRule(pattern, new CreateExtensionSpecificationRule());
-        digester.addValidate(
-            pattern,
-            "name",
-            EXTENSION_NAME_PATTERN,
-            "SpecificationParser.invalid-extension-name");
-        digester.addSetBooleanProperty(pattern, "immediate", "immediate");
-        digester.addSetLimitedProperties(pattern, "class", "className");
-        digester.addConnectChild(pattern, "addExtensionSpecification", "name");
-
-        // <configure> within <extension>
-
-        pattern = rootElementName + "/extension/configure";
-        digester.addValidate(
-            pattern,
-            "property-name",
-            PROPERTY_NAME_PATTERN,
-            "SpecificationParser.invalid-property-name");
-        digester.addRule(pattern, new ProcessExtensionConfigurationRule());
-
-    }
-
-    /**
-     *  Returns a digester configured to parse page specifications.
-     * 
-     *  @since 3.0
-     * 
-     **/
-
-    protected SpecificationDigester constructPageDigester()
-    {
-        SpecificationDigester result = constructBaseDigester("page-specification");
-
-        // <page-specification>
-
-        String pattern = "page-specification";
-
-        result.addRule(pattern, new CreateComponentSpecificationRule());
-        result.addRule(pattern, new SetPublicIdRule());
-        result.addInitializeProperty(pattern, "pageSpecification", Boolean.TRUE);
-        result.addInitializeProperty(pattern, "allowBody", Boolean.TRUE);
-        result.addInitializeProperty(pattern, "allowInformalParameters", Boolean.FALSE);
-        result.addSetLimitedProperties(pattern, "class", "componentClassName");
-
-        configureCommon(result, "page-specification");
-
-        return result;
-    }
-
-    /**
-     *  Returns a digester configured to parse component specifications.
-     * 
-     **/
-
-    protected SpecificationDigester constructComponentDigester()
-    {
-        SpecificationDigester result = constructBaseDigester("component-specification");
-
-        // <component-specification>
-
-        String pattern = "component-specification";
-
-        result.addRule(pattern, new CreateComponentSpecificationRule());
-        result.addRule(pattern, new SetPublicIdRule());
-
-        result.addSetBooleanProperty(pattern, "allow-body", "allowBody");
-        result.addSetBooleanProperty(
-            pattern,
-            "allow-informal-parameters",
-            "allowInformalParameters");
-        result.addSetLimitedProperties(pattern, "class", "componentClassName");
-
-        // TODO: publicId
-
-        // <parameter>
-
-        pattern = "component-specification/parameter";
-
-        result.addRule(pattern, new CreateParameterSpecificationRule());
-        result.addValidate(
-            pattern,
-            "name",
-            PARAMETER_NAME_PATTERN,
-            "SpecificationParser.invalid-parameter-name");
-
-        result.addValidate(
-            pattern,
-            "property-name",
-            PROPERTY_NAME_PATTERN,
-            "SpecificationParser.invalid-property-name");
-
-        // We use a slight kludge to set the default propertyName from the 
-        // name attribute.  If the spec includes a property-name attribute, that
-        // will overwrite the default property name).
-        // Remember that digester rule order counts!
-
-        result.addSetLimitedProperties(pattern, "name", "propertyName");
-
-        // java-type is a holdover from the 1.3 DTD and will eventually be removed.
-
-        result.addSetLimitedProperties(
-            pattern,
-            new String[] { "property-name", "type", "java-type", "default-value" },
-            new String[] { "propertyName", "type", "type", "defaultValue" });
-
-        result.addSetBooleanProperty(pattern, "required", "required");
-
-        result.addSetConvertedProperty(pattern, CONVERSION_MAP, "direction", "direction");
-
-        result.addConnectChild(pattern, "addParameter", "name");
-
-        // <reserved-parameter>
-
-        pattern = "component-specification/reserved-parameter";
-
-        result.addCallMethod(pattern, "addReservedParameterName", 1);
-        result.addCallParam(pattern, 0, "name");
-
-        configureCommon(result, "component-specification");
-
-        return result;
-    }
-
-    /**
-     *  Configure the common elements shared by both &lt;page-specification&gt;
-     *  and &lt;component-specification&gt;.
-     * 
-     **/
-
-    protected void configureCommon(SpecificationDigester digester, String rootElementName)
-    {
-        // <bean>
-
-        String pattern = rootElementName + "/bean";
-
-        digester.addRule(pattern, new CreateBeanSpecificationRule());
-        digester.addValidate(
-            pattern,
-            "name",
-            BEAN_NAME_PATTERN,
-            "SpecificationParser.invalid-bean-name");
-        digester.addSetConvertedProperty(pattern, CONVERSION_MAP, "lifecycle", "lifecycle");
-        digester.addSetLimitedProperties(pattern, "class", "className");
-        digester.addConnectChild(pattern, "addBeanSpecification", "name");
-
-        // <set-property> inside <bean>
-
-        pattern = rootElementName + "/bean/set-property";
-
-        digester.addRule(pattern, new CreateExpressionBeanInitializerRule());
-        digester.addSetLimitedProperties(pattern, "name", "propertyName");
-        digester.addSetExtendedProperty(pattern, "expression", "expression", true);
-        digester.addSetNext(pattern, "addInitializer");
-
-        // <set-string-property> inside <bean>
-        // This is for compatibility with the 1.3 DTD
-
-        pattern = rootElementName + "/bean/set-string-property";
-
-        digester.addRule(pattern, new CreateStringBeanInitializerRule());
-        digester.addSetLimitedProperties(
-            pattern,
-            new String[] { "name", "key" },
-            new String[] { "propertyName", "key" });
-
-        digester.addSetNext(pattern, "addInitializer");
-
-        // It's now set-message-property in the 3.0 DTD
-
-        pattern = rootElementName + "/bean/set-message-property";
-
-        digester.addRule(pattern, new CreateStringBeanInitializerRule());
-        digester.addSetLimitedProperties(
-            pattern,
-            new String[] { "name", "key" },
-            new String[] { "propertyName", "key" });
-
-        digester.addSetNext(pattern, "addInitializer");
-
-        // <component>
-
-        pattern = rootElementName + "/component";
-
-        digester.addRule(pattern, new CreateContainedComponentRule());
-        digester.addValidate(
-            pattern,
-            "id",
-            COMPONENT_ID_PATTERN,
-            "SpecificationParser.invalid-component-id");
-        digester.addValidate(
-            pattern,
-            "type",
-            COMPONENT_TYPE_PATTERN,
-            "SpecificationParser.invalid-component-type");
-        digester.addSetLimitedProperties(pattern, "type", "type");
-        digester.addRule(pattern, new ComponentCopyOfRule());
-        digester.addConnectChild(pattern, "addComponent", "id");
-        digester.addSetBooleanProperty(
-            pattern,
-            "inherit-informal-parameters",
-            "inheritInformalParameters");
-
-        // <binding> inside <component>
-
-        pattern = rootElementName + "/component/binding";
-
-        Rule createBindingSpecificationRule = new CreateBindingSpecificationRule();
-
-        digester.addRule(pattern, createBindingSpecificationRule);
-        digester.addInitializeProperty(pattern, "type", BindingType.DYNAMIC);
-        digester.addSetExtendedProperty(pattern, "expression", "value", true);
-        digester.addConnectChild(pattern, "setBinding", "name");
-
-        // <field-binding> inside <component>
-        // For compatibility with 1.3 DTD only, removed in 3.0 DTD
-
-        pattern = rootElementName + "/component/field-binding";
-
-        digester.addRule(pattern, createBindingSpecificationRule);
-        digester.addInitializeProperty(pattern, "type", BindingType.FIELD);
-        digester.addSetExtendedProperty(pattern, "field-name", "value", true);
-        digester.addConnectChild(pattern, "setBinding", "name");
-
-        // <inherited-binding> inside <component>
-
-        pattern = rootElementName + "/component/inherited-binding";
-
-        digester.addRule(pattern, createBindingSpecificationRule);
-        digester.addInitializeProperty(pattern, "type", BindingType.INHERITED);
-        digester.addSetLimitedProperties(pattern, "parameter-name", "value");
-        digester.addConnectChild(pattern, "setBinding", "name");
-
-        // <static-binding> inside <component>
-
-        pattern = rootElementName + "/component/static-binding";
-
-        digester.addRule(pattern, createBindingSpecificationRule);
-        digester.addInitializeProperty(pattern, "type", BindingType.STATIC);
-        digester.addSetExtendedProperty(pattern, "value", "value", true);
-        digester.addConnectChild(pattern, "setBinding", "name");
-
-        // <string-binding> inside <component>
-        // Maintained just for 1.3 DTD compatibility
-
-        pattern = rootElementName + "/component/string-binding";
-
-        digester.addRule(pattern, createBindingSpecificationRule);
-        digester.addInitializeProperty(pattern, "type", BindingType.STRING);
-        digester.addSetLimitedProperties(pattern, "key", "value");
-        digester.addConnectChild(pattern, "setBinding", "name");
-
-        // Renamed to <message-binding> in the 3.0 DTD
-
-        pattern = rootElementName + "/component/message-binding";
-
-        digester.addRule(pattern, createBindingSpecificationRule);
-        digester.addInitializeProperty(pattern, "type", BindingType.STRING);
-        digester.addSetLimitedProperties(pattern, "key", "value");
-        digester.addConnectChild(pattern, "setBinding", "name");
-
-        // <listener-binding> inside <component>
-
-        pattern = rootElementName + "/component/listener-binding";
-
-        digester.addRule(pattern, new CreateListenerBindingSpecificationRule());
-        digester.addSetLimitedProperties(pattern, "language", "language");
-        digester.addBody(pattern, "value");
-        digester.addConnectChild(pattern, "setBinding", "name");
-
-        // <external-asset>
-
-        pattern = rootElementName + "/external-asset";
-
-        Rule createAssetSpecificationRule = new CreateAssetSpecificationRule();
-
-        digester.addRule(pattern, createAssetSpecificationRule);
-        digester.addInitializeProperty(pattern, "type", AssetType.EXTERNAL);
-        digester.addValidate(
-            pattern,
-            "name",
-            ASSET_NAME_PATTERN,
-            "SpecificationParser.invalid-asset-name");
-        digester.addSetLimitedProperties(pattern, "URL", "path");
-        digester.addConnectChild(pattern, "addAsset", "name");
-
-        // <context-asset>
-
-        pattern = rootElementName + "/context-asset";
-
-        digester.addRule(pattern, createAssetSpecificationRule);
-        digester.addInitializeProperty(pattern, "type", AssetType.CONTEXT);
-        digester.addValidate(
-            pattern,
-            "name",
-            ASSET_NAME_PATTERN,
-            "SpecificationParser.invalid-asset-name");
-
-        // TODO: $template$
-
-        digester.addSetLimitedProperties(pattern, "path", "path");
-        digester.addConnectChild(pattern, "addAsset", "name");
-
-        // <private-asset>
-
-        pattern = rootElementName + "/private-asset";
-
-        digester.addRule(pattern, createAssetSpecificationRule);
-        digester.addInitializeProperty(pattern, "type", AssetType.PRIVATE);
-        digester.addValidate(
-            pattern,
-            "name",
-            ASSET_NAME_PATTERN,
-            "SpecificationParser.invalid-asset-name");
-
-        // TODO: $template$
-
-        digester.addSetLimitedProperties(pattern, "resource-path", "path");
-        digester.addConnectChild(pattern, "addAsset", "name");
-
-        // <property-specification>
-
-        pattern = rootElementName + "/property-specification";
-
-        digester.addRule(pattern, new CreatePropertySpecificationRule());
-        digester.addValidate(
-            pattern,
-            "name",
-            PROPERTY_NAME_PATTERN,
-            "SpecificationParser.invalid-property-name");
-        digester.addSetLimitedProperties(
-            pattern,
-            new String[] { "name", "type" },
-            new String[] { "name", "type" });
-        digester.addSetBooleanProperty(pattern, "persistent", "persistent");
-        digester.addSetExtendedProperty(pattern, "initial-value", "initialValue", false);
-        digester.addSetNext(pattern, "addPropertySpecification");
-    }
-
-    private String getURL(String resource)
-    {
-        return getClass().getResource(resource).toExternalForm();
-    }
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/parse/Tapestry_1_3.dtd b/3.0.4/framework/src/org/apache/tapestry/parse/Tapestry_1_3.dtd
deleted file mode 100644
index 2a2fd14..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/parse/Tapestry_1_3.dtd
+++ /dev/null
@@ -1,549 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>

-<!-- $Id: Tapestry_1_3.dtd,v 1.18 2002/09/19 17:25:28 hship Exp $ -->

-<!--

-

-The DTD for Tapestry application, page and component specifications.

-Associated with the public identifier:

-

-	-//Howard Lewis Ship//Tapestry Specification 1.3//EN

-	

-The canonical location for the DTD is:

-

-	http://tapestry.sf.net/dtd/Tapestry_1_3.dtd

-

-For application specifications, the root element is application.

-

-For component specifications, the root element is component-specification.

-

-For page specifications, the root element is page-specification.

-

-For library specifiations, the root element is library-specification.

-

-This DTD is backwards compatible with the 1.2 DTD, with the following exceptions:

-- specification (in 1.1) has been split into page-specification and component-specification

-- added string-value element

-- added library-specification root element

-- added library element

-- added extension element

-- added static value type 'long'

-- allow <property> within <bean>, <component>, <extension>, <private-asset>, <context-asset> and <external-asset>

-- add "render" to bean lifecycle value

-- rename <binding>'s property-path attribute to expression

-- simplify set-property to use OGNL expressions

-- add "form" as parameter direction

--->

-

-<!-- =======================================================

-Entity: attribute-flag

-

-For entity attributesthat take a boolean value, defines 'yes' and 'no'.

-The default varies, so isn't included here.

--->

-<!ENTITY % attribute-flag "(yes|no)">

-

-

-<!-- =======================================================

-Entity: static-value-type

-

-For entity attributes that take a string but convert it to a real

-type.  Defaults to String.

-

--->

-<!ENTITY % static-value-type "(boolean|int|long|double|String) 'String'">

-

-<!ENTITY % library-content "(description*, property*, (page|component-alias|service|library|extension)*)">

-

-<!-- =======================================================

-Element: application

-Root element

-

-Defines a Tapestry application.

-

-Attributes:

-  name: A textual name used to uniquely identify the application.

-  engine-class:  The Java class to instantiate as the application engine.

--->

-<!ELEMENT application %library-content;>

-<!ATTLIST application

-  name CDATA #REQUIRED

-  engine-class CDATA #REQUIRED

->

-

-<!-- =======================================================

-Element: bean

-Appears in: component-specification, page-specification

-

-Defines a JavaBean that will be used in some way by the component.  Beans

-are accessible via the components' beans property (which contains a property

-for each bean).  Beans are created as needed, and are discarded based on

-the lifecycle attribute.  Beans are typically used to extend the

-implementation of a component via aggregation.

-

-Attributes:

-  name: the name of the bean

-  class: the Java class to instantiate

-  lifecycle: when the reference to the bean should be discard

-  	"none" no lifecycle, the bean is created and returned, but not stored

-  	"request" the bean is retained until the end of the request cycle

-  	"page" the bean is retained for the lifespan of the page

-  	"render" the bean is retained until the end of the current page render

-  	

-Nothing prevents a bean for storing state; however, such state will

-not be associated with any particular session (unlike persistant page

-properties).  Further, because of page pooling, subsequent requests

-from the same client may be serviced by different instances of a page and

-(therefore) different bean instances.

-

-Beans that have the "request" lifecycle may be stored into a pool

-for later re-use (in the same or different page).

-

-The bean may have its properties set.  Properties are set on both

-newly instantiated beans, and beans that are retrieved from a pool.

-

--->

-<!ELEMENT bean (description*, property*, (set-property | set-string-property)*)>

-<!ATTLIST bean

-  name CDATA #REQUIRED

-  class CDATA #REQUIRED

-  lifecycle (none|request|page|render) "request"

->

-

-<!-- =======================================================

-Element: binding

-Appears in: component

-

-Binds a parameter of the component to a property of its container.

-

-Attributes:

-  name: The name of the component parameter to bind.

-  expression: The OGNL expression.

--->

-<!ELEMENT binding EMPTY>

-<!ATTLIST binding

-  name CDATA #REQUIRED

-  expression CDATA #REQUIRED

->

-

-<!-- =======================================================

-Element: configure

-Appears in: extension

-

-Configures one JavaBean property of an extension.

-

-Attributes:

-  property-name:  The name of the property to configure.

-  type: Conversion of property value.

-  

- 

--->

-

-<!ELEMENT configure (#PCDATA)>

-<!ATTLIST configure 

-  property-name CDATA #REQUIRED

-  type %static-value-type;

->

-  

-<!-- =======================================================

-Element: component

-Contained by: component-specification, page-specification

-

-Defines a component contained by the component being specified.

-

-Attribute:

-  id: A unique identifier for the component within the container.

-  type: The type of component, either a well known logical name, or the complete path

-    to the component's specification.

-  copy-of: The id of a previously defined component; this component will be a copy

-    of the other component.

-

-The Tapestry page loader ensures that either type or copy-of is specified, but not both.

--->

-<!ELEMENT component (property*, (binding | field-binding | inherited-binding | static-binding | string-binding)*)>

-<!ATTLIST component

-  id ID #REQUIRED

-  type CDATA #IMPLIED

-  copy-of IDREF #IMPLIED

->

-

-<!-- =======================================================

-Element: component-alias

-Contained by: application

-

-Establishes a short logic name for a particular component that is used

-within the application.

-

-Attributes:

-  type: The logical name for the component.

-  specification-path:  The complete path to the component's specification.

--->

-<!ELEMENT component-alias EMPTY>

-<!ATTLIST component-alias

-  type CDATA #REQUIRED

-  specification-path CDATA #REQUIRED

->

-

-<!-- =======================================================

-Element: component-specification

-Root element

-

-A component specification.  It's attributes define the Java class to

-instantiate, whether the component may wrap other elements, and whether

-informal (undeclared) parameters are allowed.  Very similar to a page-specification,

-except that component-specification allows for parameters (formal and informal).

-

-Attributes:

-  class: The Java class to instantiate for the component.

-  allow-body:  If yes (the default), the component may wrap other elements (have a body).

-  allow-informal-parameters:  If yes (the default), informal parameters (parameters that are not

-    explictily defined) are allowed.

--->

-<!ELEMENT component-specification 

-	(description*, parameter*, reserved-parameter*, property*,

-	(bean |	component | external-asset | context-asset | private-asset)*)>

-<!ATTLIST component-specification

-  class CDATA #REQUIRED

-  allow-body %attribute-flag; "yes"

-  allow-informal-parameters %attribute-flag; "yes"

->

-

-<!-- =======================================================

-Element: context-asset

-Contained by: component-specification, page-specification

-

-An asset located in the same web application context as the running

-application.

-

-Attributes:

-  name: The name of the asset.

-  path: The path, relative to the web application context, of the resource.

--->

-<!ELEMENT context-asset (property*)>

-<!ATTLIST context-asset

-  name CDATA #REQUIRED

-  path CDATA #REQUIRED

->

-

-<!-- =======================================================

-Element: description

-Appears in: many

-

-Several elements may contain descriptions; these descriptions are

-optional.  The eventual goal is to provide help in some form of IDE.

-Currently, descriptions are optional and ignored.

-

-Attributes:

-  xml:lang the language that the description is expressed in.

--->

-<!ELEMENT description (#PCDATA)>

-<!ATTLIST description

-  xml:lang NMTOKEN "en"

->

-

-<!-- =======================================================

-Element: extension

-Contained by: application, library-specification

-

-Defines an extension, an object that is instantiated and configured

-(like a helper bean) and is then accessible, by name, from the

-containing library (or application).

-

-Attributes:

-  name: Name of the extension.

-  class: Java class to instantiate.

-  immediate: If true, the extension is instantiated early instead of as-needed.

-  

--->

-<!ELEMENT extension (property*, configure*)>

-<!ATTLIST extension

-  name CDATA #REQUIRED

-  class CDATA #REQUIRED

-  immediate %attribute-flag; "no"

->

-

-<!-- =======================================================

-Element: external-asset

-Contained by: component-specification, page-specification

-

-Defines an asset at some external source.

-

-Attributes:

-  name: The name of the asset.

-  URL: The URL used to reference the asset.

--->

-<!ELEMENT external-asset (property*)>

-<!ATTLIST external-asset

-  name CDATA #REQUIRED

-  URL CDATA #REQUIRED

->

-

-<!-- =======================================================

-Element: field-binding

-Appears in: component

-

-Binds a parameter of the component to a public static field of

-some Java object.

-

-Attributes:

-  name: The name of the component parameter to bind.

-  field-name:  The name of the field, of the form [package.]class.field.

-    The package may be ommitted if it is "java.lang".

--->

-<!ELEMENT field-binding EMPTY>

-<!ATTLIST field-binding

-  name CDATA #REQUIRED

-  field-name CDATA #REQUIRED

->

-

-<!-- =======================================================

-Element: inherited-binding

-Appears in: component

-

-Binds a parameter of the component to a parameter of the container.

-

-Attributes:

-  name: The name of the component parameter to bind.

-  parameter-name: The name of the container parameter to bind the

-    component parameter to.

--->

-<!ELEMENT inherited-binding EMPTY>

-<!ATTLIST inherited-binding

-  name CDATA #REQUIRED

-  parameter-name CDATA #REQUIRED

->

-

-<!-- =======================================================

-Element: library

-Appears in: application-specification, library-specification

-

-Defines a library used in the construction of the container

-(either another library, or the application itself).

-

-Attributes:

-  id: An identifier used to reference pages and components

-    provided by the library.

-  specification-path: The path to the resource that provides

-    the library specification.

--->

-<!ELEMENT library EMPTY>

-<!ATTLIST library

-  id CDATA #REQUIRED

-  specification-path CDATA #REQUIRED

->

-

-<!-- =======================================================

-Element: library-specification

-Root element

-

-Defines a library that may be used in the construction 

-of an application (or another library).  An application can

-be thought of as a specialized kind of library.

-

--->

-<!ELEMENT library-specification %library-content;>

-

-<!-- =======================================================

-Element: page

-Contained by: application, library-specification

-

-Defines a single page within the application.  Each application will contain

-at least one of these, to define the Home page.

-

-Attributes:

-  name: A unique name for the application.

-  specification-path:  The resource classpath of the component specification

-    for the page.

--->

-<!ELEMENT page EMPTY>

-<!ATTLIST page

-  name CDATA #REQUIRED

-  specification-path CDATA #REQUIRED

->

-

-<!-- =======================================================

-Element: page-specification

-Root element

-

-A page specification.  It's attributes define the Java class to

-instantiate.  Pages are like components, except they always allow

-a body, and never allow parameters (formal or otherwise).

-

-Attributes:

-  class: The Java class to instantiate for the component.

--->

-<!ELEMENT page-specification (description*, property*,

-    (bean | component | external-asset | context-asset | private-asset)*)>

-<!ATTLIST page-specification

-  class CDATA #REQUIRED

->

-

-<!-- =======================================================

-Element: parameter

-Contained by: component-specification

-

-Defines a formal parameter for the component.

-

-Attributes:

-  name: A unqiue name for the parameter.

-  java-type: The name of a Java class or primitive type expected by the parameter.

-    This is for documentation purposes only, it is not enforced.

-  required: If yes, then the parameter must be bound.  If no (the default),

-    then the parameter is optional.

-  property-name: The name to use, instead of the parameter name, for the

-    JavaBean property connected to this parameter.

-  direction: The normal flow of data through the component.

--->

-

-<!ELEMENT parameter (description*)>

-<!ATTLIST parameter

-  name CDATA #REQUIRED

-  java-type CDATA #IMPLIED

-  required %attribute-flag; "no"

-  property-name CDATA #IMPLIED

-  direction (in|form|custom) "custom"

->

-

-<!-- =======================================================

-Element: private-asset

-Contained by: component-specification, page-specification

-

-An asset available within the Java classpath (i.e., bundled inside a JAR or WAR).

-

-Attributes:

-  name: The name of the asset.

-  resource-path: The complete pathname of the resource.

--->

-<!ELEMENT private-asset (property*)>

-<!ATTLIST private-asset

-  name CDATA #REQUIRED

-  resource-path CDATA #REQUIRED

->

-

-<!-- =======================================================

-Element: property

-Contained by: (many other elements)

-

-Defines a key/value pair associated with the application or component specification.  Properties

-are used to capture information that doesn't fit into the DTD.  The value for the property is

-the PCDATA wrapped by the property tag (which is trimmed of leading and trailing whitespace).

-

-This should not be confused with several other tags which are used to set JavaBeans properties

-of various objects.  The <property> tag exists to allow meta-data to be stored in the specification.

-

-Attributes:

-  name: The name of the property to set.

-  

--->

-<!ELEMENT property (#PCDATA)>

-<!ATTLIST property

-  name CDATA #REQUIRED

->

-

-<!-- =======================================================

-Element: reserved-parameter

-Appears in: component-specification

-

-Identifies a name which may not be used as an informal parameter.

-Informal parameters are typically HTML attribute names; this

-list identifies HTML attributes that are written exclusively

-by the component and may not be affected by informal parameters.

-

-Attributes:

-  name: The parameter name to reserve.

--->

-

-<!ELEMENT reserved-parameter EMPTY>

-<!ATTLIST reserved-parameter

-  name CDATA #REQUIRED

->

-

-<!-- =======================================================

-Element: service

-Appears in: application

-

-Defines an engine service.  You may override the default

-set of engine services or provide completely new services.

-

-Attributes:

-  name: The name of the service.

-  class: The Java class to instantiate for the service.

-

--->

-

-<!ELEMENT service EMPTY>

-<!ATTLIST service

-  name CDATA #REQUIRED

-  class CDATA #REQUIRED

->

-

-<!-- =======================================================

-Element: set-property

-Appears in: bean

-

-Used to initialize a property of a helper bean.

-

-Attributes:

-  name: The name of the property to be set.

-  expression: The OGNL expression that provides a value.

--->

-

-<!ELEMENT set-property EMPTY>

-<!ATTLIST set-property

-  name CDATA #REQUIRED

-  expression CDATA #REQUIRED

->

-

-

-<!-- =======================================================

-Element: set-string-property

-Appears in: bean

-

-A localized string.

-

-Attributes:

-  key:  Sets a property of a string from a localized string.

-

--->

-

-<!ELEMENT set-string-property EMPTY>

-<!ATTLIST set-string-property

-  name CDATA #REQUIRED

-  key CDATA #REQUIRED

->

-

-

-<!-- =======================================================

-Element: static-binding

-Appears in: component

-

-Binds a parameter of the component to a static value defined directly

-within this specification. The value is the PCDATA wrapped by the element

-(with leading and trailing whitespace removed).

-

-Attributes:

-  name: The name of the component parameter to bind.

-

--->

-<!ELEMENT static-binding (#PCDATA)>

-<!ATTLIST static-binding

-  name CDATA #REQUIRED

->

-

-<!-- =======================================================

-Element: string-binding

-Appears in: component

-

-Binds a parameter of the component to a localized string of

-its container.

-

-Attributes:

-  name: The name of the component parameter to bind.

-  key: The key used to access a localized string.

-  

--->

-

-<!ELEMENT string-binding EMPTY>

-<!ATTLIST string-binding

-  name CDATA #REQUIRED

-  key CDATA #REQUIRED

->

-

diff --git a/3.0.4/framework/src/org/apache/tapestry/parse/Tapestry_3_0.dtd b/3.0.4/framework/src/org/apache/tapestry/parse/Tapestry_3_0.dtd
deleted file mode 100644
index 3036a5b..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/parse/Tapestry_3_0.dtd
+++ /dev/null
@@ -1,547 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>

-<!-- $Id: Tapestry_1_3.dtd,v 1.18 2002/09/19 17:25:28 hship Exp $ -->

-<!--

-

-The DTD for Tapestry application, library, page and component specifications.

-Associated with the public identifier:

-

-	-//Apache Software Foundation//Tapestry Specification 3.0//EN

-	

-The canonical location for the DTD is:

-

-	http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd

-

-For application specifications, the root element is application.

-

-For component specifications, the root element is component-specification.

-

-For page specifications, the root element is page-specification.

-

-For library specifiations, the root element is library-specification.

-

-This DTD is backwards compatible with the 1.3 DTD, with the following exceptions:

-- <field-binding> has been removed

-- attribute class of <component-specification> and <page-specification is now optional

-- attributes name and engine-class of <application> are now optional

-- added value attribute to <static-binding>

-- added value attribute to <property>

-- renamed <component-alias> to <component-type>

-- rename <set-string-property> to <set-message-property>

-- added <listener-binding> element

-- added <property-specification> element

-- renamed java-type to type inside <parameter>

-- allow values to be specified as attributes or wrapped character data in many elements

-- allow only a single <description> per element

--->

-<!-- =======================================================

-Entity: attribute-flag

-

-For entity attributes that take a boolean value, defines 'yes' and 'no'.

-The default varies, so isn't included here.

--->

-<!ENTITY % attribute-flag "(yes|no)">

-<!-- =======================================================

-Entity: static-value-type

-

-For entity attributes that take a string but convert it to a real

-type.  Defaults to String.

-

--->

-<!ENTITY % static-value-type "(boolean|int|long|double|String) 'String'">

-<!ENTITY % library-content "(description?, property*, (page|component-type|service|library|extension)*)">

-<!-- =======================================================

-Element: application

-Root element

-

-Defines a Tapestry application.

-

-Attributes:

-  name: A textual name used to uniquely identify the application.

-  engine-class:  The Java class to instantiate as the application engine.

--->

-<!ELEMENT application %library-content;>

-<!ATTLIST application

-	name CDATA #IMPLIED

-	engine-class CDATA #IMPLIED

->

-<!-- =======================================================

-Element: bean

-Appears in: component-specification, page-specification

-

-Defines a JavaBean that will be used in some way by the component.  Beans

-are accessible via the components' beans property (which contains a property

-for each bean).  Beans are created as needed, and are discarded based on

-the lifecycle attribute.  Beans are typically used to extend the

-implementation of a component via aggregation.

-

-Attributes:

-  name: the name of the bean

-  class: the Java class to instantiate

-  lifecycle: when the reference to the bean should be discard

-  	"none" no lifecycle, the bean is created and returned, but not stored

-  	"request" the bean is retained until the end of the request cycle

-  	"page" the bean is retained for the lifespan of the page

-  	"render" the bean is retained until the end of the current page render

-  	

-Nothing prevents a bean for storing state; however, such state will

-not be associated with any particular session (unlike persistant page

-properties).  Further, because of page pooling, subsequent requests

-from the same client may be serviced by different instances of a page and

-(therefore) different bean instances.

-

-Beans that have the "request" lifecycle may be stored into a pool

-for later re-use (in the same or different page).

-

-The bean may have its properties set.  Properties are set on both

-newly instantiated beans, and beans that are retrieved from a pool.

-

--->

-<!ELEMENT bean (description?, property*, (set-property | set-message-property)*)>

-<!ATTLIST bean

-	name CDATA #REQUIRED

-	class CDATA #REQUIRED

-	lifecycle (none | request | page | render) "request"

->

-<!-- =======================================================

-Element: binding

-Appears in: component

-

-Binds a parameter of the component to a OGNL expression, relative

-to its container.  The expression may be provided as an attribute, or 

-as the body of the element.  The latter case is useful when the 

-expression is long, or uses problematic characters (such as a 

-mix of single and double quotes).

-

-Attributes:

-  name: The name of the component parameter to bind.

-  expression: The OGNL expression.

--->

-<!ELEMENT binding (#PCDATA)>

-<!ATTLIST binding

-	name CDATA #REQUIRED

-	expression CDATA #IMPLIED

->

-<!-- =======================================================

-Element: configure

-Appears in: extension

-

-Configures one JavaBean property of an extension.

-

-Attributes:

-  property-name:  The name of the property to configure.

-  type: Conversion of property value.

-  value: The value to be converted and applied.  If not 

-    specified, the element's character data is

-    used.  

- 

--->

-<!ELEMENT configure (#PCDATA)>

-<!ATTLIST configure

-	property-name CDATA #REQUIRED

-	type %static-value-type;

-	value CDATA #IMPLIED

->

-<!-- =======================================================

-Element: component

-Contained by: component-specification, page-specification

-

-Defines a component contained by the component being specified.

-

-Attribute:

-  id: A unique identifier for the component within the container.

-  type: The type of component, either a well known logical name, or the complete path

-    to the component's specification.

-  copy-of: The id of a previously defined component; this component will be a copy

-    of the other component.

-

-The Tapestry page loader ensures that either type or copy-of is specified, but not both.

--->

-<!ELEMENT component (property*, (binding | inherited-binding | listener-binding | static-binding | message-binding)*)>

-<!ATTLIST component

-	id ID #REQUIRED

-	type CDATA #IMPLIED

-	copy-of IDREF #IMPLIED

-	inherit-informal-parameters %attribute-flag; "no"

->

-<!-- =======================================================

-Element: component-type

-Contained by: application

-

-Establishes a short logic name for a particular component that is used

-within the application.

-

-Attributes:

-  type: The logical name for the component.

-  specification-path:  The complete path to the component's specification.

--->

-<!ELEMENT component-type EMPTY>

-<!ATTLIST component-type

-	type CDATA #REQUIRED

-	specification-path CDATA #REQUIRED

->

-<!-- =======================================================

-Element: component-specification

-Root element

-

-A component specification.  It's attributes define the Java class to

-instantiate, whether the component may wrap other elements, and whether

-informal (undeclared) parameters are allowed.  Very similar to a page-specification,

-except that component-specification allows for parameters (formal and informal).

-

-Attributes:

-  class: The Java class to instantiate for the component.

-  allow-body:  If yes (the default), the component may wrap other elements (have a body).

-  allow-informal-parameters:  If yes (the default), informal parameters (parameters that are not

-    explictily defined) are allowed.

--->

-<!ELEMENT component-specification (description?, parameter*, reserved-parameter*, property*, (bean | component | external-asset | context-asset | private-asset | property-specification)*)>

-<!ATTLIST component-specification

-	class CDATA #IMPLIED

-	allow-body %attribute-flag; "yes"

-	allow-informal-parameters %attribute-flag; "yes"

->

-<!-- =======================================================

-Element: context-asset

-Contained by: component-specification, page-specification

-

-An asset located in the same web application context as the running

-application.

-

-Attributes:

-  name: The name of the asset.

-  path: The path, relative to the web application context, of the resource.

--->

-<!ELEMENT context-asset (property*)>

-<!ATTLIST context-asset

-	name CDATA #REQUIRED

-	path CDATA #REQUIRED

->

-<!-- =======================================================

-Element: description

-Appears in: many

-

-Several elements may contain descriptions; these descriptions are

-optional.  The eventual goal is to provide help in some form of IDE.

-Currently, descriptions are optional and ignored.

-

--->

-<!ELEMENT description (#PCDATA)>

-<!-- =======================================================

-Element: extension

-Contained by: application, library-specification

-

-Defines an extension, an object that is instantiated and configured

-(like a helper bean) and is then accessible, by name, from the

-containing library (or application).

-

-Attributes:

-  name: Name of the extension.

-  class: Java class to instantiate.

-  immediate: If true, the extension is instantiated early instead of as-needed.

-  

--->

-<!ELEMENT extension (property*, configure*)>

-<!ATTLIST extension

-	name CDATA #REQUIRED

-	class CDATA #REQUIRED

-	immediate %attribute-flag; "no"

->

-<!-- =======================================================

-Element: external-asset

-Contained by: component-specification, page-specification

-

-Defines an asset at some external source.

-

-Attributes:

-  name: The name of the asset.

-  URL: The URL used to reference the asset.

--->

-<!ELEMENT external-asset (property*)>

-<!ATTLIST external-asset

-	name CDATA #REQUIRED

-	URL CDATA #REQUIRED

->

-<!-- =======================================================

-Element: inherited-binding

-Appears in: component

-

-Binds a parameter of the component to a parameter of the container.

-

-Attributes:

-  name: The name of the component parameter to bind.

-  parameter-name: The name of the container parameter to bind the

-    component parameter to.

--->

-<!ELEMENT inherited-binding EMPTY>

-<!ATTLIST inherited-binding

-	name CDATA #REQUIRED

-	parameter-name CDATA #REQUIRED

->

-<!-- =======================================================

-Element: library

-Appears in: application-specification, library-specification

-

-Defines a library used in the construction of the container

-(either another library, or the application itself).

-

-Attributes:

-  id: An identifier used to reference pages and components

-    provided by the library.

-  specification-path: The path to the resource that provides

-    the library specification.

--->

-<!ELEMENT library EMPTY>

-<!ATTLIST library

-	id CDATA #REQUIRED

-	specification-path CDATA #REQUIRED

->

-<!-- =======================================================

-Element: library-specification

-Root element

-

-Defines a library that may be used in the construction 

-of an application (or another library).  An application can

-be thought of as a specialized kind of library.

-

--->

-<!ELEMENT library-specification %library-content;>

-<!-- =======================================================

-Element: page

-Contained by: application, library-specification

-

-Defines a single page within the application.  Each application will contain

-at least one of these, to define the Home page.

-

-Attributes:

-  name: A unique name for the application.

-  specification-path:  The resource classpath of the component specification

-    for the page.

--->

-<!ELEMENT page EMPTY>

-<!ATTLIST page

-	name CDATA #REQUIRED

-	specification-path CDATA #REQUIRED

->

-<!-- =======================================================

-Element: listener-binding

-Appears in: component

-

-Defines an in-place script using the scripting language

-supported by Bean Scripting Framework (http://jakarta.apache.org/bsf).

-The script itself is the element's character data (often, inside

-a CDATA block).

-

-The default language is jython, though this can be overridden.

-

-Attributes:

-  name: The name of the component parameter to bind.

-  language: The language the script is written in.

--->

-<!ELEMENT listener-binding (#PCDATA)>

-<!ATTLIST listener-binding

-	name CDATA #REQUIRED

-	language CDATA #IMPLIED

->

-<!-- =======================================================

-Element: page-specification

-Root element

-

-A page specification.  It's attributes define the Java class to

-instantiate.  Pages are like components, except they always allow

-a body, and never allow parameters (formal or otherwise).

-

-Attributes:

-  class: The Java class to instantiate for the component.

--->

-<!ELEMENT page-specification (description?, property*, (bean | component | external-asset | context-asset | private-asset | property-specification)*)>

-<!ATTLIST page-specification

-	class CDATA #IMPLIED

->

-<!-- =======================================================

-Element: parameter

-Contained by: component-specification

-

-Defines a formal parameter for the component.

-

-Attributes:

-  name: A unique name for the parameter.

-  type: The name of a Java class or primitive type expected by the parameter.

-  required: If yes, then the parameter must be bound.  If no (the default),

-    then the parameter is optional.

-  property-name: The name to use, instead of the parameter name, for the

-    JavaBean property connected to this parameter.

-  direction: The normal flow of data through the component 

-  			(in, form, custom, auto).

-  default-value: Specifies the default value for the parameter, 

-  				if the parameter is not bound.

--->

-<!ELEMENT parameter (description?)>

-<!ATTLIST parameter

-	name CDATA #REQUIRED

-	type CDATA #IMPLIED

-	required %attribute-flag; "no"

-	property-name CDATA #IMPLIED

-	default-value CDATA #IMPLIED

-	direction (in | form | custom | auto) "custom"

->

-<!-- =======================================================

-Element: private-asset

-Contained by: component-specification, page-specification

-

-An asset available within the Java classpath (i.e., bundled inside a JAR or WAR).

-

-Attributes:

-  name: The name of the asset.

-  resource-path: The complete pathname of the resource.

--->

-<!ELEMENT private-asset (property*)>

-<!ATTLIST private-asset

-	name CDATA #REQUIRED

-	resource-path CDATA #REQUIRED

->

-<!-- =======================================================

-Element: property

-Contained by: (many other elements)

-

-Defines a key/value pair associated with the application or component specification.  Properties

-are used to capture information that doesn't fit into the DTD.  The value for the property is

-the PCDATA wrapped by the property tag (which is trimmed of leading and trailing whitespace).

-

-This should not be confused with several other tags which are used to set JavaBeans properties

-of various objects.  The <property> tag exists to allow meta-data to be stored in the specification.

-

-Attributes:

-  name: The name of the property to set.

-  value: If specified, is the value of the property, otherwise, the PCDATA is used.

-  

--->

-<!ELEMENT property (#PCDATA)>

-<!ATTLIST property

-	name CDATA #REQUIRED

-	value CDATA #IMPLIED

->

-<!-- =======================================================

-Element: property-specification

-Appears in: page-specification, component-specification

-

-Identifies a transient or persistent property.

-

-Attributes:

-  name: The name of the property.

-  type: The type of the value, either the name of a scalar type,

-    or the fully qualified name of a class.  If omitted,

-    java.lang.Object is used.

-  persistent: If "yes", the value will be made persistant.  Default

-    is "no".

-  initial-value:  If provided, this is an OGNL expression used

-    to initialize the property.  If not specified, the

-    body of the element is used as the initial value.

-    

--->

-<!ELEMENT property-specification (#PCDATA)>

-<!ATTLIST property-specification

-	name CDATA #REQUIRED

-	type CDATA #IMPLIED

-	persistent %attribute-flag; "no"

-	initial-value CDATA #IMPLIED

->

-<!-- =======================================================

-Element: reserved-parameter

-Appears in: component-specification

-

-Identifies a name which may not be used as an informal parameter.

-Informal parameters are typically HTML attribute names; this

-list identifies HTML attributes that are written exclusively

-by the component and may not be affected by informal parameters.

-

-Attributes:

-  name: The parameter name to reserve.

--->

-<!ELEMENT reserved-parameter EMPTY>

-<!ATTLIST reserved-parameter

-	name CDATA #REQUIRED

->

-<!-- =======================================================

-Element: service

-Appears in: application

-

-Defines an engine service.  You may override the default

-set of engine services or provide completely new services.

-

-Attributes:

-  name: The name of the service.

-  class: The Java class to instantiate for the service.

-

--->

-<!ELEMENT service EMPTY>

-<!ATTLIST service

-	name CDATA #REQUIRED

-	class CDATA #REQUIRED

->

-<!-- =======================================================

-Element: set-property

-Appears in: bean

-

-Used to initialize a property of a helper bean.  An OGNL expression

-is provided as the expression attribute, or as wrapped

-character data.

-

-Attributes:

-  name: The name of the property to be set.

-  expression: The OGNL expression that provides a value.

--->

-<!ELEMENT set-property (#PCDATA)>

-<!ATTLIST set-property

-	name CDATA #REQUIRED

-	expression CDATA #IMPLIED

->

-<!-- =======================================================

-Element: set-message-property

-Appears in: bean

-

-A localized string.

-

-Attributes:

-  key:  Sets a property of a string from a localized string.

-

--->

-<!ELEMENT set-message-property EMPTY>

-<!ATTLIST set-message-property

-	name CDATA #REQUIRED

-	key CDATA #REQUIRED

->

-<!-- =======================================================

-Element: static-binding

-Appears in: component

-

-Binds a parameter of the component to a static value defined directly

-within this specification. The value either the value ttribute, or

-the PCDATA wrapped by the element (with leading and trailing whitespace removed).

-

-Attributes:

-  name: The name of the component parameter to bind.

-  value: The value of the binding.  If not specied, the PCDATA wrapped

-    by the element is the binding.

--->

-<!ELEMENT static-binding (#PCDATA)>

-<!ATTLIST static-binding

-	name CDATA #REQUIRED

-	value CDATA #IMPLIED

->

-<!-- =======================================================

-Element: message-binding

-Appears in: component

-

-Binds a parameter of the component to a localized message of

-its container.

-

-Attributes:

-  name: The name of the component parameter to bind.

-  key: The key used to access a localized string.

-  

--->

-<!ELEMENT message-binding EMPTY>

-<!ATTLIST message-binding

-	name CDATA #REQUIRED

-	key CDATA #REQUIRED

->

diff --git a/3.0.4/framework/src/org/apache/tapestry/parse/TemplateAttribute.java b/3.0.4/framework/src/org/apache/tapestry/parse/TemplateAttribute.java
deleted file mode 100644
index 3be1a12..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/parse/TemplateAttribute.java
+++ /dev/null
@@ -1,59 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.parse;
-
-import org.apache.commons.lang.builder.ToStringBuilder;
-
-/**
- *  An attribute, associated with a {@link org.apache.tapestry.parse.OpenToken}, taken
- *  from a template.  Each attribute has a type and a value.  The interpretation of the
- *  value is based on the type.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 3.0
- *
- **/
-
-public class TemplateAttribute
-{
-	private AttributeType _type;
-	private String _value;
-	
-	public TemplateAttribute(AttributeType type, String value)
-	{
-		_type = type;
-		_value = value;
-	}
-	
-	public AttributeType getType()
-	{
-		return _type;
-	}
-	
-	public String getValue()
-	{
-		return _value;
-	}
-	
-	public String toString()
-	{
-		ToStringBuilder builder = new ToStringBuilder(this);
-		builder.append("type", _type);
-		builder.append("value", _value);
-		
-		return builder.toString();
-	}
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/parse/TemplateParseException.java b/3.0.4/framework/src/org/apache/tapestry/parse/TemplateParseException.java
deleted file mode 100644
index 5c861fe..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/parse/TemplateParseException.java
+++ /dev/null
@@ -1,63 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.parse;
-
-import org.apache.tapestry.ILocatable;
-import org.apache.tapestry.ILocation;
-
-/**
- *  Exception thrown indicating a problem parsing an HTML template.
- *
- *  @author Howard Ship
- *  @version $Id$
- * 
- **/
-
-public class TemplateParseException extends Exception implements ILocatable
-{
-    private ILocation _location;
-    private Throwable _rootCause;
-
-    public TemplateParseException(String message)
-    {
-        this(message, null, null);
-    }
-
-    public TemplateParseException(String message, ILocation location)
-    {
-        this(message, location, null);
-    }
-
-    public TemplateParseException(String message, ILocation location, Throwable rootCause)
-    {
-        super(message);
-
-        _location = location;
-
-        _rootCause = rootCause;
-
-    }
-
-    public ILocation getLocation()
-    {
-        return _location;
-    }
-
-    public Throwable getRootCause()
-    {
-        return _rootCause;
-    }
-
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/parse/TemplateParser.java b/3.0.4/framework/src/org/apache/tapestry/parse/TemplateParser.java
deleted file mode 100644
index 0e92805..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/parse/TemplateParser.java
+++ /dev/null
@@ -1,1615 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.parse;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.oro.text.regex.MalformedPatternException;
-import org.apache.oro.text.regex.MatchResult;
-import org.apache.oro.text.regex.Pattern;
-import org.apache.oro.text.regex.PatternMatcher;
-import org.apache.oro.text.regex.Perl5Compiler;
-import org.apache.oro.text.regex.Perl5Matcher;
-import org.apache.tapestry.ApplicationRuntimeException;
-import org.apache.tapestry.ILocation;
-import org.apache.tapestry.IResourceLocation;
-import org.apache.tapestry.Location;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.util.IdAllocator;
-
-/**
- *  Parses Tapestry templates, breaking them into a series of
- *  {@link org.apache.tapestry.parse.TemplateToken tokens}.
- *  Although often referred to as an "HTML template", there is no real
- *  requirement that the template be HTML.  This parser can handle
- *  any reasonable SGML derived markup (including XML), 
- *  but specifically works around the ambiguities
- *  of HTML reasonably.
- * 
- *  <p>Dynamic markup in Tapestry attempts to be invisible.
- *  Components are arbitrary tags containing a <code>jwcid</code> attribute.
- *  Such components must be well balanced (have a matching close tag, or
- *  end the tag with "<code>/&gt;</code>".
- * 
- *  <p>Generally, the id specified in the template is matched against
- *  an component defined in the specification.  However, implicit
- *  components are also possible.  The jwcid attribute uses
- *  the syntax "<code>@Type</code>" for implicit components.
- *  Type is the component type, and may include a library id prefix.  Such
- *  a component is anonymous (but is given a unique id).
- * 
- *  <p>
- *  (The unique ids assigned start with a dollar sign, which is normally
- *  no allowed for component ids ... this helps to make them stand out
- *  and assures that they do not conflict with
- *  user-defined component ids.  These ids tend to propagate
- *  into URLs and become HTML element names and even JavaScript
- *  variable names ... the dollar sign is acceptible in these contexts as 
- *  well).
- * 
- *  <p>Implicit component may also be given a name using the syntax
- *  "<code>componentId:@Type</code>".  Such a component should
- *  <b>not</b> be defined in the specification, but may still be
- *  accessed via {@link org.apache.tapestry.IComponent#getComponent(String)}.
- * 
- *  <p>
- *  Both defined and implicit components may have additional attributes
- *  defined, simply by including them in the template.  They set formal or
- *  informal parameters of the component to static strings.
- *  {@link org.apache.tapestry.spec.IComponentSpecification#getAllowInformalParameters()},
- *  if false, will cause such attributes to be simply ignored.  For defined
- *  components, conflicting values defined in the template are ignored.
- * 
- *  <p>Attributes in component tags will become formal and informal parameters
- *  of the corresponding component.  Most attributes will be
- *
- *  <p>The parser removes
- *  the body of some tags (when the corresponding component doesn't
- *  {@link org.apache.tapestry.spec.IComponentSpecification#getAllowBody() allow a body},
- *  and allows
- *  portions of the template to be completely removed.
- *
- *  <p>The parser does a pretty thorough lexical analysis of the template,
- *  and reports a great number of errors, including improper nesting
- *  of tags.
- *
- *  <p>The parser supports <em>invisible localization</em>:
- *  The parser recognizes HTML of the form:
- *  <code>&lt;span key="<i>value</i>"&gt; ... &lt;/span&gt;</code>
- *  and converts them into a {@link TokenType#LOCALIZATION}
- *  token.  You may also specifify a <code>raw</code> attribute ... if the value
- *  is <code>true</code>, then the localized value is 
- *  sent to the client without filtering, which is appropriate if the
- *  value has any markup that should not be escaped.
- *
- *  @author Howard Lewis Ship, Geoff Longman
- *  @version $Id$
- * 
- **/
-
-public class TemplateParser
-{
-    /**
-     *  A Factory used by {@link org.apache.tapestry.parse.TemplateParser} to create 
-     *  {@link org.apache.tapestry.parse.TemplateToken} objects.
-     * 
-     *  <p>
-     *  This class is extended by Spindle - the Eclipse Plugin for Tapestry.
-     *  <p>
-     *  @author glongman@intelligentworks.com
-     *  @since 3.0
-     */
-    protected static class TemplateTokenFactory
-    {
-
-        public OpenToken createOpenToken(String tagName, String jwcId, String type, ILocation location)
-        {
-            return new OpenToken(tagName, jwcId, type, location);
-        }
-
-        public CloseToken createCloseToken(String tagName, ILocation location)
-        {
-            return new CloseToken(tagName, location);
-        }
-
-        public TextToken createTextToken(char[] templateData, int blockStart, int end, ILocation templateLocation)
-        {
-            return new TextToken(templateData, blockStart, end, templateLocation);
-        }
-
-        public LocalizationToken createLocalizationToken(
-            String tagName,
-            String localizationKey,
-            boolean raw,
-            Map attributes,
-            ILocation startLocation)
-        {
-            return new LocalizationToken(tagName, localizationKey, raw, attributes, startLocation);
-        }
-    }
-
-    /**
-     *  Attribute value prefix indicating that the attribute is an OGNL expression.
-     * 
-     *  @since 3.0
-     **/
-
-    public static final String OGNL_EXPRESSION_PREFIX = "ognl:";
-
-    /**
-     *  Attribute value prefix indicating that the attribute is a localization
-     *  key.
-     * 
-     *  @since 3.0
-     * 
-     **/
-
-    public static final String LOCALIZATION_KEY_PREFIX = "message:";
-
-    /**
-     *  A "magic" component id that causes the tag with the id and its entire
-     *  body to be ignored during parsing.
-     *
-     **/
-
-    private static final String REMOVE_ID = "$remove$";
-
-    /**
-     * A "magic" component id that causes the tag to represent the true
-     * content of the template.  Any content prior to the tag is discarded,
-     * and any content after the tag is ignored.  The tag itself is not
-     * included.
-     *
-     **/
-
-    private static final String CONTENT_ID = "$content$";
-
-    /**
-     *  
-     *  The attribute, checked for in &lt;span&gt; tags, that signfies
-     *  that the span is being used as an invisible localization.
-     * 
-     *  @since 2.0.4
-     * 
-     **/
-
-    public static final String LOCALIZATION_KEY_ATTRIBUTE_NAME = "key";
-
-    /**
-     *  Used with {@link #LOCALIZATION_KEY_ATTRIBUTE_NAME} to indicate a string
-     *  that should be rendered "raw" (without escaping HTML).  If not specified,
-     *  defaults to "false".  The value must equal "true" (caselessly).
-     * 
-     *  @since 2.3
-     * 
-     **/
-
-    public static final String RAW_ATTRIBUTE_NAME = "raw";
-
-    /**
-     *  Attribute used to identify components.
-     * 
-     *  @since 2.3
-     * 
-     **/
-
-    public static final String JWCID_ATTRIBUTE_NAME = "jwcid";
-
-    private static final String PROPERTY_NAME_PATTERN = "_?[a-zA-Z]\\w*";
-
-    /**
-     *  Pattern used to recognize ordinary components (defined in the specification).
-     * 
-     *  @since 3.0
-     * 
-     **/
-
-    public static final String SIMPLE_ID_PATTERN = "^(" + PROPERTY_NAME_PATTERN + ")$";
-
-    /**
-     *  Pattern used to recognize implicit components (whose type is defined in
-     *  the template).  Subgroup 1 is the id (which may be null) and subgroup 2
-     *  is the type (which may be qualified with a library prefix).
-     *  Subgroup 4 is the library id, Subgroup 5 is the simple component type.
-     * 
-     *  @since 3.0
-     * 
-     **/
-
-    public static final String IMPLICIT_ID_PATTERN =
-        "^(" + PROPERTY_NAME_PATTERN + ")?@(((" + PROPERTY_NAME_PATTERN + "):)?(" + PROPERTY_NAME_PATTERN + "))$";
-
-    private static final int IMPLICIT_ID_PATTERN_ID_GROUP = 1;
-    private static final int IMPLICIT_ID_PATTERN_TYPE_GROUP = 2;
-    private static final int IMPLICIT_ID_PATTERN_LIBRARY_ID_GROUP = 4;
-    private static final int IMPLICIT_ID_PATTERN_SIMPLE_TYPE_GROUP = 5;
-
-    private Pattern _simpleIdPattern;
-    private Pattern _implicitIdPattern;
-    private PatternMatcher _patternMatcher;
-
-    private IdAllocator _idAllocator = new IdAllocator();
-
-    private ITemplateParserDelegate _delegate;
-
-    /**
-     *  Identifies the template being parsed; used with error messages.
-     *
-     **/
-
-    private IResourceLocation _resourceLocation;
-
-    /**
-     *  Shared instance of {@link Location} used by
-     *  all {@link TextToken} instances in the template.
-     * 
-     **/
-
-    private ILocation _templateLocation;
-
-    /**
-     *  Location with in the resource for the current line.
-     * 
-     **/
-
-    private ILocation _currentLocation;
-
-    /**
-     *  Local reference to the template data that is to be parsed.
-     *
-     **/
-
-    private char[] _templateData;
-
-    /**
-     *  List of Tag
-     *
-     **/
-
-    private List _stack = new ArrayList();
-
-    private static class Tag
-    {
-        // The element, i.e., <jwc> or virtually any other element (via jwcid attribute)
-        String _tagName;
-        // If true, the tag is a placeholder for a dynamic element
-        boolean _component;
-        // If true, the body of the tag is being ignored, and the
-        // ignore flag is cleared when the close tag is reached
-        boolean _ignoringBody;
-        // If true, then the entire tag (and its body) is being ignored
-        boolean _removeTag;
-        // If true, then the tag must have a balanced closing tag.
-        // This is always true for components.
-        boolean _mustBalance;
-        // The line on which the start tag exists
-        int _line;
-        // If true, then the parse ends when the closing tag is found.
-        boolean _content;
-
-        Tag(String tagName, int line)
-        {
-            _tagName = tagName;
-            _line = line;
-        }
-
-        boolean match(String matchTagName)
-        {
-            return _tagName.equalsIgnoreCase(matchTagName);
-        }
-    }
-
-    /**
-     *  List of {@link TemplateToken}, this forms the ultimate response.
-     *
-     **/
-
-    private List _tokens = new ArrayList();
-
-    /**
-     *  The location of the 'cursor' within the template data.  The
-     *  advance() method moves this forward.
-     *
-     **/
-
-    private int _cursor;
-
-    /**
-     *  The start of the current block of static text, or -1 if no block
-     *  is active.
-     *
-     **/
-
-    private int _blockStart;
-
-    /**
-     *  The current line number; tracked by advance().  Starts at 1.
-     *
-     **/
-
-    private int _line;
-
-    /**
-     *  Set to true when the body of a tag is being ignored.  This is typically
-     *  used to skip over the body of a tag when its corresponding
-     *  component doesn't allow a body, or whe the special
-     *  jwcid of $remove$ is used.
-     *
-     **/
-
-    private boolean _ignoring;
-
-    /**
-     *  A {@link Map} of {@link String}s, used to store attributes collected
-     *  while parsing a tag.
-     *
-     **/
-
-    private Map _attributes = new HashMap();
-
-    /**
-     *  A factory used to create template tokens.
-     * <p>
-     * author glongman@intelligentworks.com
-     */
-
-    protected TemplateTokenFactory _factory;
-
-    public TemplateParser()
-    {
-        Perl5Compiler compiler = new Perl5Compiler();
-
-        try
-        {
-            _simpleIdPattern = compiler.compile(SIMPLE_ID_PATTERN);
-            _implicitIdPattern = compiler.compile(IMPLICIT_ID_PATTERN);
-        } catch (MalformedPatternException ex)
-        {
-            throw new ApplicationRuntimeException(ex);
-        }
-
-        _patternMatcher = new Perl5Matcher();
-
-        _factory = new TemplateTokenFactory();
-    }
-
-    /**
-     *  Parses the template data into an array of {@link TemplateToken}s.
-     *
-     *  <p>The parser is <i>decidedly</i> not threadsafe, so care should be taken
-     *  that only a single thread accesses it.
-     *
-     *  @param templateData the HTML template to parse.  Some tokens will hold
-     *  a reference to this array.
-     *  @param delegate  object that "knows" about defined components
-     *  @param resourceLocation a description of where the template originated from,
-     *  used with error messages.
-     *
-     **/
-
-    public TemplateToken[] parse(
-        char[] templateData,
-        ITemplateParserDelegate delegate,
-        IResourceLocation resourceLocation)
-        throws TemplateParseException
-    {
-        TemplateToken[] result = null;
-
-        try
-        {
-            beforeParse(templateData, delegate, resourceLocation);
-
-            parse();
-
-            result = (TemplateToken[]) _tokens.toArray(new TemplateToken[_tokens.size()]);
-        } finally
-        {
-            afterParse();
-        }
-
-        return result;
-    }
-
-    /**
-     *  perform default initialization of the parser.
-     *  <p>
-     *  author glongman@intelligentworks.com
-     */
-
-    protected void beforeParse(
-        char[] templateData,
-        ITemplateParserDelegate delegate,
-        IResourceLocation resourceLocation)
-    {
-        _templateData = templateData;
-        _resourceLocation = resourceLocation;
-        _templateLocation = new Location(resourceLocation);
-        _delegate = delegate;
-        _ignoring = false;
-        _line = 1;
-    }
-
-    /**
-     *  Perform default cleanup after parsing completes.
-     *  <p>
-     *  author glongman@intelligentworks.com
-     */
-
-    protected void afterParse()
-    {
-        _delegate = null;
-        _templateData = null;
-        _resourceLocation = null;
-        _templateLocation = null;
-        _currentLocation = null;
-        _stack.clear();
-        _tokens.clear();
-        _attributes.clear();
-        _idAllocator.clear();
-    }
-
-    /**
-     * Used by the parser to report problems in the parse.
-     * Parsing <b>must</b> stop when a problem is reported.
-     * <p>
-     * The default implementation simply throws an exception that contains
-     * the message and location parameters.
-     * <p>
-     * Subclasses may override but <b>must</b> ensure they throw the required exception.
-     * <p>
-     *
-     * author glongman@intelligentworks.com
-     *  
-     * @param message
-     * @param location
-     * @param line ignored by the default impl
-     * @param cursor ignored by the default impl
-     * @throws TemplateParseException always thrown in order to terminate the parse.
-     */
-
-    protected void templateParseProblem(String message, ILocation location, int line, int cursor)
-        throws TemplateParseException
-    {
-        throw new TemplateParseException(message, location);
-    }
-
-    /**
-     * Used by the parser to report tapestry runtime specific problems in the parse.
-     * Parsing <b>must</b> stop when a problem is reported.
-     * <p>
-     * The default implementation simply rethrows the exception.
-     * <p>
-     * Subclasses may override but <b>must</b> ensure they rethrow the exception.
-     * <p>
-     *
-     * author glongman@intelligentworks.com
-     *  
-     * @param exception
-     * @param line ignored by the default impl
-     * @param cursor ignored by the default impl
-     * @throws ApplicationRuntimeException always rethrown in order to terminate the parse.
-     */
-
-    protected void templateParseProblem(ApplicationRuntimeException exception, int line, int cursor)
-        throws ApplicationRuntimeException
-    {
-        throw exception;
-    }
-
-    /**
-     * Give subclasses access to the parse results.
-     * <p>
-     *
-     * author glongman@intelligentworks.com
-     */
-    protected List getTokens()
-    {
-        if (_tokens == null)
-            return Collections.EMPTY_LIST;
-
-        return _tokens;
-    }
-
-    /**
-     *  Checks to see if the next few characters match a given pattern.
-     *
-     **/
-
-    private boolean lookahead(char[] match)
-    {
-        try
-        {
-            for (int i = 0; i < match.length; i++)
-            {
-                if (_templateData[_cursor + i] != match[i])
-                    return false;
-            }
-
-            // Every character matched.
-
-            return true;
-        } catch (IndexOutOfBoundsException ex)
-        {
-            return false;
-        }
-    }
-
-    private static final char[] COMMENT_START = new char[] { '<', '!', '-', '-' };
-    private static final char[] COMMENT_END = new char[] { '-', '-', '>' };
-    private static final char[] CLOSE_TAG = new char[] { '<', '/' };
-
-    protected void parse() throws TemplateParseException
-    {
-        _cursor = 0;
-        _blockStart = -1;
-        int length = _templateData.length;
-
-        while (_cursor < length)
-        {
-            if (_templateData[_cursor] != '<')
-            {
-                if (_blockStart < 0 && !_ignoring)
-                    _blockStart = _cursor;
-
-                advance();
-                continue;
-            }
-
-            // OK, start of something.
-
-            if (lookahead(CLOSE_TAG))
-            {
-                closeTag();
-                continue;
-            }
-
-            if (lookahead(COMMENT_START))
-            {
-                skipComment();
-                continue;
-            }
-
-            // The start of some tag.
-
-            startTag();
-        }
-
-        // Usually there's some text at the end of the template (after the last closing tag) that should
-        // be added.  Often the last few tags are static tags so we definately
-        // need to end the text block.
-
-        addTextToken(_templateData.length - 1);
-    }
-
-    /**
-     *  Advance forward in the document until the end of the comment is reached.
-     *  In addition, skip any whitespace following the comment.
-     *
-     **/
-
-    private void skipComment() throws TemplateParseException
-    {
-        int length = _templateData.length;
-        int startLine = _line;
-
-        if (_blockStart < 0 && !_ignoring)
-            _blockStart = _cursor;
-
-        while (true)
-        {
-            if (_cursor >= length)
-                templateParseProblem(
-                    Tapestry.format("TemplateParser.comment-not-ended", Integer.toString(startLine)),
-                    new Location(_resourceLocation, startLine),
-                    startLine,
-                    _cursor);
-
-            if (lookahead(COMMENT_END))
-                break;
-
-            // Not the end of the comment, advance over it.
-
-            advance();
-        }
-
-        _cursor += COMMENT_END.length;
-        advanceOverWhitespace();
-    }
-
-    private void addTextToken(int end)
-    {
-        // No active block to add to.
-
-        if (_blockStart < 0)
-            return;
-
-        if (_blockStart <= end)
-        {
-            TemplateToken token = _factory.createTextToken(_templateData, _blockStart, end, _templateLocation);
-
-            _tokens.add(token);
-        }
-
-        _blockStart = -1;
-    }
-
-    private static final int WAIT_FOR_ATTRIBUTE_NAME = 0;
-    private static final int COLLECT_ATTRIBUTE_NAME = 1;
-    private static final int ADVANCE_PAST_EQUALS = 2;
-    private static final int WAIT_FOR_ATTRIBUTE_VALUE = 3;
-    private static final int COLLECT_QUOTED_VALUE = 4;
-    private static final int COLLECT_UNQUOTED_VALUE = 5;
-
-    private void startTag() throws TemplateParseException
-    {
-        int cursorStart = _cursor;
-        int length = _templateData.length;
-        String tagName = null;
-        boolean endOfTag = false;
-        boolean emptyTag = false;
-        int startLine = _line;
-        ILocation startLocation = new Location(_resourceLocation, startLine);
-
-        tagBeginEvent(startLine, _cursor);
-
-        advance();
-
-        // Collect the element type
-
-        while (_cursor < length)
-        {
-            char ch = _templateData[_cursor];
-
-            if (ch == '/' || ch == '>' || Character.isWhitespace(ch))
-            {
-                tagName = new String(_templateData, cursorStart + 1, _cursor - cursorStart - 1);
-
-                break;
-            }
-
-            advance();
-        }
-
-        String attributeName = null;
-        int attributeNameStart = -1;
-        int attributeValueStart = -1;
-        int state = WAIT_FOR_ATTRIBUTE_NAME;
-        char quoteChar = 0;
-
-        _attributes.clear();
-
-        // Collect each attribute
-
-        while (!endOfTag)
-        {
-            if (_cursor >= length)
-            {
-                String key = (tagName == null) ? "TemplateParser.unclosed-unknown-tag" : "TemplateParser.unclosed-tag";
-
-                templateParseProblem(
-                    Tapestry.format(key, tagName, Integer.toString(startLine)),
-                    startLocation,
-                    startLine,
-                    cursorStart);
-
-            }
-
-            char ch = _templateData[_cursor];
-
-            switch (state)
-            {
-                case WAIT_FOR_ATTRIBUTE_NAME :
-
-                    // Ignore whitespace before the next attribute name, while
-                    // looking for the end of the current tag.
-
-                    if (ch == '/')
-                    {
-                        emptyTag = true;
-                        advance();
-                        break;
-                    }
-
-                    if (ch == '>')
-                    {
-                        endOfTag = true;
-                        break;
-                    }
-
-                    if (Character.isWhitespace(ch))
-                    {
-                        advance();
-                        break;
-                    }
-
-                    // Found non-whitespace, assume its the attribute name.
-                    // Note: could use a check here for non-alpha.
-
-                    attributeNameStart = _cursor;
-                    state = COLLECT_ATTRIBUTE_NAME;
-                    advance();
-                    break;
-
-                case COLLECT_ATTRIBUTE_NAME :
-
-                    // Looking for end of attribute name.
-
-                    if (ch == '=' || ch == '/' || ch == '>' || Character.isWhitespace(ch))
-                    {
-                        attributeName = new String(_templateData, attributeNameStart, _cursor - attributeNameStart);
-
-                        state = ADVANCE_PAST_EQUALS;
-                        break;
-                    }
-
-                    // Part of the attribute name
-
-                    advance();
-                    break;
-
-                case ADVANCE_PAST_EQUALS :
-
-                    // Looking for the '=' sign.  May hit the end of the tag, or (for bare attributes),
-                    // the next attribute name.
-
-                    if (ch == '/' || ch == '>')
-                    {
-                        // A bare attribute, which is not interesting to
-                        // us.
-
-                        state = WAIT_FOR_ATTRIBUTE_NAME;
-                        break;
-                    }
-
-                    if (Character.isWhitespace(ch))
-                    {
-                        advance();
-                        break;
-                    }
-
-                    if (ch == '=')
-                    {
-                        state = WAIT_FOR_ATTRIBUTE_VALUE;
-                        quoteChar = 0;
-                        attributeValueStart = -1;
-                        advance();
-                        break;
-                    }
-
-                    // Otherwise, an HTML style "bare" attribute (such as <select multiple>).
-                    // We aren't interested in those (we're just looking for the id or jwcid attribute).
-
-                    state = WAIT_FOR_ATTRIBUTE_NAME;
-                    break;
-
-                case WAIT_FOR_ATTRIBUTE_VALUE :
-
-                    if (ch == '/' || ch == '>')
-                        templateParseProblem(
-                            Tapestry.format(
-                                "TemplateParser.missing-attribute-value",
-                                tagName,
-                                Integer.toString(_line),
-                                attributeName),
-                            getCurrentLocation(),
-                            _line,
-                            _cursor);
-
-                    // Ignore whitespace between '=' and the attribute value.  Also, look
-                    // for initial quote.
-
-                    if (Character.isWhitespace(ch))
-                    {
-                        advance();
-                        break;
-                    }
-
-                    if (ch == '\'' || ch == '"')
-                    {
-                        quoteChar = ch;
-
-                        state = COLLECT_QUOTED_VALUE;
-                        advance();
-                        attributeValueStart = _cursor;
-                        attributeBeginEvent(attributeName, _line, attributeValueStart);
-                        break;
-                    }
-
-                    // Not whitespace or quote, must be start of unquoted attribute.
-
-                    state = COLLECT_UNQUOTED_VALUE;
-                    attributeValueStart = _cursor;
-                    attributeBeginEvent(attributeName, _line, attributeValueStart);
-                    break;
-
-                case COLLECT_QUOTED_VALUE :
-
-                    // Start collecting the quoted attribute value.  Stop at the matching quote character,
-                    // unless bare, in which case, stop at the next whitespace.
-
-                    if (ch == quoteChar)
-                    {
-                        String attributeValue =
-                            new String(_templateData, attributeValueStart, _cursor - attributeValueStart);
-                        
-                       
-                        attributeEndEvent(_cursor);
-                        
-                        if (_attributes.containsKey(attributeName))
-                        	templateParseProblem(
-                                    Tapestry.format(
-                                        "TemplateParser.duplicate-tag-attribute",
-                                        tagName,
-                                        Integer.toString(_line),
-                                        attributeName),
-                                    getCurrentLocation(),
-                                    _line,
-                                    _cursor);
-                            
-                          _attributes.put(attributeName, attributeValue);
-
-                        // Advance over the quote.
-                        advance();
-                        state = WAIT_FOR_ATTRIBUTE_NAME;
-                        break;
-                    }
-
-                    advance();
-                    break;
-
-                case COLLECT_UNQUOTED_VALUE :
-
-                    // An unquoted attribute value ends with whitespace 
-                    // or the end of the enclosing tag.
-
-                    if (ch == '/' || ch == '>' || Character.isWhitespace(ch))
-                    {
-                        String attributeValue =
-                            new String(_templateData, attributeValueStart, _cursor - attributeValueStart);
-
-                        attributeEndEvent(_cursor);
-                        
-                        if (_attributes.containsKey(attributeName))
-                        	templateParseProblem(
-                                    Tapestry.format(
-                                        "TemplateParser.duplicate-tag-attribute",
-                                        tagName,
-                                        Integer.toString(_line),
-                                        attributeName),
-                                    getCurrentLocation(),
-                                    _line,
-                                    _cursor);
-                            
-                          _attributes.put(attributeName, attributeValue);
-
-                        state = WAIT_FOR_ATTRIBUTE_NAME;
-                        break;
-                    }
-
-                    advance();
-                    break;
-            }
-        }
-        
-        tagEndEvent(_cursor);
-
-        // Check for invisible localizations
-
-        String localizationKey = findValueCaselessly(LOCALIZATION_KEY_ATTRIBUTE_NAME, _attributes);
-        String jwcId = findValueCaselessly(JWCID_ATTRIBUTE_NAME, _attributes);
-
-        if (localizationKey != null && tagName.equalsIgnoreCase("span") && jwcId == null)
-        {
-            if (_ignoring)
-                templateParseProblem(
-                    Tapestry.format(
-                        "TemplateParser.component-may-not-be-ignored",
-                        tagName,
-                        Integer.toString(startLine)),
-                    startLocation,
-                    startLine,
-                    cursorStart);
-
-            // If the tag isn't empty, then create a Tag instance to ignore the
-            // body of the tag.
-
-            if (!emptyTag)
-            {
-                Tag tag = new Tag(tagName, startLine);
-
-                tag._component = false;
-                tag._removeTag = true;
-                tag._ignoringBody = true;
-                tag._mustBalance = true;
-
-                _stack.add(tag);
-
-                // Start ignoring content until the close tag.
-
-                _ignoring = true;
-            } else
-            {
-                // Cursor is at the closing carat, advance over it and any whitespace.                
-                advance();
-                advanceOverWhitespace();
-            }
-
-            // End any open block.
-
-            addTextToken(cursorStart - 1);
-
-            boolean raw = checkBoolean(RAW_ATTRIBUTE_NAME, _attributes);
-
-            Map attributes = filter(_attributes, new String[] { LOCALIZATION_KEY_ATTRIBUTE_NAME, RAW_ATTRIBUTE_NAME });
-
-            TemplateToken token =
-                _factory.createLocalizationToken(tagName, localizationKey, raw, attributes, startLocation);
-
-            _tokens.add(token);
-
-            return;
-        }
-
-        if (jwcId != null)
-        {
-            processComponentStart(tagName, jwcId, emptyTag, startLine, cursorStart, startLocation);
-            return;
-        }
-
-        // A static tag (not a tag without a jwcid attribute).
-        // We need to record this so that we can match close tags later.
-
-        if (!emptyTag)
-        {
-            Tag tag = new Tag(tagName, startLine);
-            _stack.add(tag);
-        }
-
-        // If there wasn't an active block, then start one.
-
-        if (_blockStart < 0 && !_ignoring)
-            _blockStart = cursorStart;
-
-        advance();
-    }
-
-    /**
-     *  Processes a tag that is the open tag for a component (but also handles
-     *  the $remove$ and $content$ tags).
-     * 
-     **/
-
-    /**
-     * Notify that the beginning of a tag has been detected.
-     * <p>
-     * Default implementation does nothing.
-     * <p>
-     *
-     * author glongman@intelligentworks.com
-     */
-    protected void tagBeginEvent(int startLine, int cursorPosition)
-    {
-    }
-
-    /**
-     * Notify that the end of the current tag has been detected.
-     * <p>
-     * Default implementation does nothing.
-     * <p>
-     * author glongman@intelligentworks.com
-     */
-    protected void tagEndEvent(int cursorPosition)
-    {
-    }
-
-    /**
-     * Notify that the beginning of an attribute value has been detected.
-     * <p>
-     * Default implementation does nothing.
-     * <p>
-     * author glongman@intelligentworks.com
-     */
-    protected void attributeBeginEvent(String attributeName, int startLine, int cursorPosition)
-    {
-    }
-
-    /**
-     * Notify that the end of the current attribute value has been detected.
-     * <p>
-     * Default implementation does nothing.
-     * <p>
-     * author glongman@intelligentworks.com
-     */
-    protected void attributeEndEvent(int cursorPosition)
-    {
-    }
-
-    private void processComponentStart(
-        String tagName,
-        String jwcId,
-        boolean emptyTag,
-        int startLine,
-        int cursorStart,
-        ILocation startLocation)
-        throws TemplateParseException
-    {
-        if (jwcId.equalsIgnoreCase(CONTENT_ID))
-        {
-            processContentTag(tagName, startLine, cursorStart, emptyTag);
-
-            return;
-        }
-
-        boolean isRemoveId = jwcId.equalsIgnoreCase(REMOVE_ID);
-
-        if (_ignoring && !isRemoveId)
-            templateParseProblem(
-                Tapestry.format("TemplateParser.component-may-not-be-ignored", tagName, Integer.toString(startLine)),
-                startLocation,
-                startLine,
-                cursorStart);
-
-        String type = null;
-        boolean allowBody = false;
-
-        if (_patternMatcher.matches(jwcId, _implicitIdPattern))
-        {
-            MatchResult match = _patternMatcher.getMatch();
-
-            jwcId = match.group(IMPLICIT_ID_PATTERN_ID_GROUP);
-            type = match.group(IMPLICIT_ID_PATTERN_TYPE_GROUP);
-
-            String libraryId = match.group(IMPLICIT_ID_PATTERN_LIBRARY_ID_GROUP);
-            String simpleType = match.group(IMPLICIT_ID_PATTERN_SIMPLE_TYPE_GROUP);
-
-            // If (and this is typical) no actual component id was specified,
-            // then generate one on the fly.
-            // The allocated id for anonymous components is
-            // based on the simple (unprefixed) type, but starts
-            // with a leading dollar sign to ensure no conflicts
-            // with user defined component ids (which don't allow dollar signs
-            // in the id).
-
-            if (jwcId == null)
-                jwcId = _idAllocator.allocateId("$" + simpleType);
-
-            try
-            {
-                allowBody = _delegate.getAllowBody(libraryId, simpleType, startLocation);
-            } catch (ApplicationRuntimeException e)
-            {
-                // give subclasses a chance to handle and rethrow
-                templateParseProblem(e, startLine, cursorStart);
-            }
-
-        } else
-        {
-            if (!isRemoveId)
-            {
-                if (!_patternMatcher.matches(jwcId, _simpleIdPattern))
-                    templateParseProblem(
-                        Tapestry.format(
-                            "TemplateParser.component-id-invalid",
-                            tagName,
-                            Integer.toString(startLine),
-                            jwcId),
-                        startLocation,
-                        startLine,
-                        cursorStart);
-
-                if (!_delegate.getKnownComponent(jwcId))
-                    templateParseProblem(
-                        Tapestry.format(
-                            "TemplateParser.unknown-component-id",
-                            tagName,
-                            Integer.toString(startLine),
-                            jwcId),
-                        startLocation,
-                        startLine,
-                        cursorStart);
-
-                try
-                {
-                    allowBody = _delegate.getAllowBody(jwcId, startLocation);
-                } catch (ApplicationRuntimeException e)
-                {
-                    // give subclasses a chance to handle and rethrow
-                    templateParseProblem(e, startLine, cursorStart);
-                }
-            }
-        }
-
-        // Ignore the body if we're removing the entire tag,
-        // of if the corresponding component doesn't allow
-        // a body.
-
-        boolean ignoreBody = !emptyTag && (isRemoveId || !allowBody);
-
-        if (_ignoring && ignoreBody)
-            templateParseProblem(
-                Tapestry.format("TemplateParser.nested-ignore", tagName, Integer.toString(startLine)),
-                new Location(_resourceLocation, startLine),
-                startLine,
-                cursorStart);
-
-        if (!emptyTag)
-            pushNewTag(tagName, startLine, isRemoveId, ignoreBody);
-
-        // End any open block.
-
-        addTextToken(cursorStart - 1);
-
-        if (!isRemoveId)
-        {
-            addOpenToken(tagName, jwcId, type, startLocation);
-
-            if (emptyTag)
-                _tokens.add(_factory.createCloseToken(tagName, getCurrentLocation()));
-        }
-
-        advance();
-    }
-
-    private void pushNewTag(String tagName, int startLine, boolean isRemoveId, boolean ignoreBody)
-    {
-        Tag tag = new Tag(tagName, startLine);
-
-        tag._component = !isRemoveId;
-        tag._removeTag = isRemoveId;
-
-        tag._ignoringBody = ignoreBody;
-
-        _ignoring = tag._ignoringBody;
-
-        tag._mustBalance = true;
-
-        _stack.add(tag);
-    }
-
-    private void processContentTag(String tagName, int startLine, int cursorStart, boolean emptyTag)
-        throws TemplateParseException
-    {
-        if (_ignoring)
-            templateParseProblem(
-                Tapestry.format(
-                    "TemplateParser.content-block-may-not-be-ignored",
-                    tagName,
-                    Integer.toString(startLine)),
-                new Location(_resourceLocation, startLine),
-                startLine,
-                cursorStart);
-
-        if (emptyTag)
-            templateParseProblem(
-                Tapestry.format("TemplateParser.content-block-may-not-be-empty", tagName, Integer.toString(startLine)),
-                new Location(_resourceLocation, startLine),
-                startLine,
-                cursorStart);
-
-        _tokens.clear();
-        _blockStart = -1;
-
-        Tag tag = new Tag(tagName, startLine);
-
-        tag._mustBalance = true;
-        tag._content = true;
-
-        _stack.clear();
-        _stack.add(tag);
-
-        advance();
-    }
-
-    private void addOpenToken(String tagName, String jwcId, String type, ILocation location)
-    {
-        OpenToken token = _factory.createOpenToken(tagName, jwcId, type, location);
-        _tokens.add(token);
-
-        if (_attributes.isEmpty())
-            return;
-
-        Iterator i = _attributes.entrySet().iterator();
-        while (i.hasNext())
-        {
-            Map.Entry entry = (Map.Entry) i.next();
-
-            String key = (String) entry.getKey();
-
-            if (key.equalsIgnoreCase(JWCID_ATTRIBUTE_NAME))
-                continue;
-
-            String value = (String) entry.getValue();
-
-            addAttributeToToken(token, key, value);
-        }
-    }
-
-    /**
-     *  Analyzes the attribute value, looking for possible prefixes that indicate
-     *  the value is not a literal.  Adds the attribute to the
-     *  token.
-     * 
-     *  @since 3.0
-     * 
-     **/
-
-    private void addAttributeToToken(OpenToken token, String name, String attributeValue)
-    {
-        int pos = attributeValue.indexOf(":");
-
-        if (pos > 0)
-        {
-
-            String prefix = attributeValue.substring(0, pos + 1);
-
-            if (prefix.equals(OGNL_EXPRESSION_PREFIX))
-            {
-                token.addAttribute(
-                    name,
-                    AttributeType.OGNL_EXPRESSION,
-                    extractExpression(attributeValue.substring(pos + 1)));
-                return;
-            }
-
-            if (prefix.equals(LOCALIZATION_KEY_PREFIX))
-            {
-                token.addAttribute(name, AttributeType.LOCALIZATION_KEY, attributeValue.substring(pos + 1).trim());
-                return;
-
-            }
-        }
-
-        token.addAttribute(name, AttributeType.LITERAL, attributeValue);
-    }
-
-    /**
-     *  Invoked to handle a closing tag, i.e., &lt;/foo&gt;.  When a tag closes, it will match against
-     *  a tag on the open tag start.  Preferably the top tag on the stack (if everything is well balanced), but this
-     *  is HTML, not XML, so many tags won't balance.
-     *
-     *  <p>Once the matching tag is located, the question is ... is the tag dynamic or static?  If static, then
-     * the current text block is extended to include this close tag.  If dynamic, then the current text block
-     * is ended (before the '&lt;' that starts the tag) and a close token is added.
-     *
-     * <p>In either case, the matching static element and anything above it is removed, and the cursor is left
-     * on the character following the '&gt;'.
-     *
-     **/
-
-    private void closeTag() throws TemplateParseException
-    {
-        int cursorStart = _cursor;
-        int length = _templateData.length;
-        int startLine = _line;
-
-        ILocation startLocation = getCurrentLocation();
-
-        _cursor += CLOSE_TAG.length;
-
-        int tagStart = _cursor;
-
-        while (true)
-        {
-            if (_cursor >= length)
-                templateParseProblem(
-                    Tapestry.format("TemplateParser.incomplete-close-tag", Integer.toString(startLine)),
-                    startLocation,
-                    startLine,
-                    cursorStart);
-
-            char ch = _templateData[_cursor];
-
-            if (ch == '>')
-                break;
-
-            advance();
-        }
-
-        String tagName = new String(_templateData, tagStart, _cursor - tagStart);
-
-        int stackPos = _stack.size() - 1;
-        Tag tag = null;
-
-        while (stackPos >= 0)
-        {
-            tag = (Tag) _stack.get(stackPos);
-
-            if (tag.match(tagName))
-                break;
-
-            if (tag._mustBalance)
-                templateParseProblem(
-                    Tapestry.format(
-                        "TemplateParser.improperly-nested-close-tag",
-                        new Object[] {
-                            tagName,
-                            Integer.toString(startLine),
-                            tag._tagName,
-                            Integer.toString(tag._line)}),
-                    startLocation,
-                    startLine,
-                    cursorStart);
-
-            stackPos--;
-        }
-
-        if (stackPos < 0)
-            templateParseProblem(
-                Tapestry.format("TemplateParser.unmatched-close-tag", tagName, Integer.toString(startLine)),
-                startLocation,
-                startLine,
-                cursorStart);
-
-        // Special case for the content tag
-
-        if (tag._content)
-        {
-            addTextToken(cursorStart - 1);
-
-            // Advance the cursor right to the end.
-
-            _cursor = length;
-            _stack.clear();
-            return;
-        }
-
-        // When a component closes, add a CLOSE tag.
-        if (tag._component)
-        {
-            addTextToken(cursorStart - 1);
-
-            _tokens.add(_factory.createCloseToken(tagName, getCurrentLocation()));
-        } else
-        {
-            // The close of a static tag.  Unless removing the tag
-            // entirely, make sure the block tag is part of a text block.
-
-            if (_blockStart < 0 && !tag._removeTag && !_ignoring)
-                _blockStart = cursorStart;
-        }
-
-        // Remove all elements at stackPos or above.
-
-        for (int i = _stack.size() - 1; i >= stackPos; i--)
-            _stack.remove(i);
-
-        // Advance cursor past '>'
-
-        advance();
-
-        // If editting out the tag (i.e., $remove$) then kill any whitespace.
-        // For components that simply don't contain a body, removeTag will
-        // be false.
-
-        if (tag._removeTag)
-            advanceOverWhitespace();
-
-        // If we were ignoring the body of the tag, then clear the ignoring
-        // flag, since we're out of the body.
-
-        if (tag._ignoringBody)
-            _ignoring = false;
-    }
-
-    /**
-     *  Advances the cursor to the next character.
-     *  If the end-of-line is reached, then increments
-     *  the line counter.
-     *
-     **/
-
-    private void advance()
-    {
-        int length = _templateData.length;
-
-        if (_cursor >= length)
-            return;
-
-        char ch = _templateData[_cursor];
-
-        _cursor++;
-
-        if (ch == '\n')
-        {
-            _line++;
-            _currentLocation = null;
-            return;
-        }
-
-        // A \r, or a \r\n also counts as a new line.
-
-        if (ch == '\r')
-        {
-            _line++;
-            _currentLocation = null;
-
-            if (_cursor < length && _templateData[_cursor] == '\n')
-                _cursor++;
-
-            return;
-        }
-
-        // Not an end-of-line character.
-
-    }
-
-    private void advanceOverWhitespace()
-    {
-        int length = _templateData.length;
-
-        while (_cursor < length)
-        {
-            char ch = _templateData[_cursor];
-            if (!Character.isWhitespace(ch))
-                return;
-
-            advance();
-        }
-    }
-
-    /**
-     *  Returns a new Map that is a copy of the input Map with some
-     *  key/value pairs removed.  A list of keys is passed in
-     *  and matching keys (caseless comparison) from the input
-     *  Map are excluded from the output map.  May return null
-     *  (rather than return an empty Map).
-     * 
-     **/
-
-    private Map filter(Map input, String[] removeKeys)
-    {
-        if (input == null || input.isEmpty())
-            return null;
-
-        Map result = null;
-
-        Iterator i = input.entrySet().iterator();
-
-        nextkey : while (i.hasNext())
-        {
-            Map.Entry entry = (Map.Entry) i.next();
-
-            String key = (String) entry.getKey();
-
-            for (int j = 0; j < removeKeys.length; j++)
-            {
-                if (key.equalsIgnoreCase(removeKeys[j]))
-                    continue nextkey;
-            }
-
-            if (result == null)
-                result = new HashMap(input.size());
-
-            result.put(key, entry.getValue());
-        }
-
-        return result;
-    }
-
-    /**
-     *  Searches a Map for given key, caselessly.  The Map is expected to consist of Strings for keys and
-     *  values.  Returns the value for the first key found that matches (caselessly) the input key.  Returns null
-     *  if no value found.
-     * 
-     **/
-
-    protected String findValueCaselessly(String key, Map map)
-    {
-        String result = (String) map.get(key);
-
-        if (result != null)
-            return result;
-
-        Iterator i = map.entrySet().iterator();
-        while (i.hasNext())
-        {
-            Map.Entry entry = (Map.Entry) i.next();
-
-            String entryKey = (String) entry.getKey();
-
-            if (entryKey.equalsIgnoreCase(key))
-                return (String) entry.getValue();
-        }
-
-        return null;
-    }
-
-    /**
-     *  Conversions needed by {@link #extractExpression(String)}
-     * 
-     **/
-
-    private static final String[] CONVERSIONS = { "&lt;", "<", "&gt;", ">", "&quot;", "\"", "&amp;", "&" };
-
-    /**
-     *  Provided a raw input string that has been recognized to be an expression,
-     *  this removes excess white space and converts &amp;amp;, &amp;quot; &amp;lt; and &amp;gt;
-     *  to their normal character values (otherwise its impossible to specify
-     *  those values in expressions in the template).
-     * 
-     **/
-
-    private String extractExpression(String input)
-    {
-        int inputLength = input.length();
-
-        StringBuffer buffer = new StringBuffer(inputLength);
-
-        int cursor = 0;
-
-        outer : while (cursor < inputLength)
-        {
-            for (int i = 0; i < CONVERSIONS.length; i += 2)
-            {
-                String entity = CONVERSIONS[i];
-                int entityLength = entity.length();
-                String value = CONVERSIONS[i + 1];
-
-                if (cursor + entityLength > inputLength)
-                    continue;
-
-                if (input.substring(cursor, cursor + entityLength).equals(entity))
-                {
-                    buffer.append(value);
-                    cursor += entityLength;
-                    continue outer;
-                }
-            }
-
-            buffer.append(input.charAt(cursor));
-            cursor++;
-        }
-
-        return buffer.toString().trim();
-    }
-
-    /**
-     *  Returns true if the  map contains the given key (caseless search) and the value
-     *  is "true" (caseless comparison).
-     * 
-     **/
-
-    private boolean checkBoolean(String key, Map map)
-    {
-        String value = findValueCaselessly(key, map);
-
-        if (value == null)
-            return false;
-
-        return value.equalsIgnoreCase("true");
-    }
-
-    /**
-     *  Gets the current location within the file.  This allows the location to be
-     *  created only as needed, and multiple objects on the same line can share
-     *  the same Location instance.
-     * 
-     *  @since 3.0
-     * 
-     **/
-
-    protected ILocation getCurrentLocation()
-    {
-        if (_currentLocation == null)
-            _currentLocation = new Location(_resourceLocation, _line);
-
-        return _currentLocation;
-    }
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/parse/TemplateToken.java b/3.0.4/framework/src/org/apache/tapestry/parse/TemplateToken.java
deleted file mode 100644
index cc21928..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/parse/TemplateToken.java
+++ /dev/null
@@ -1,77 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.parse;
-
-import org.apache.commons.lang.builder.ToStringBuilder;
-import org.apache.tapestry.ILocatable;
-import org.apache.tapestry.ILocation;
-
-/**
- *  Base class for a number of different types of tokens that can be extracted
- *  from a page/component template.  This class defines the
- *  type of the token,
- *  subclasses provide interpretations on the token.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- * 
- **/
-
-public abstract class TemplateToken implements ILocatable
-{
-    private TokenType _type;
-    private ILocation _location;
-
-    protected TemplateToken(TokenType type, ILocation location)
-    {
-        _type = type;
-        _location = location;
-    }
-
-    public TokenType getType()
-    {
-        return _type;
-    }
-    
-    public ILocation getLocation()
-    {
-    	return _location;
-    }
-
-    public String toString()
-    {
-        ToStringBuilder builder = new ToStringBuilder(this);
-
-        builder.append("type", _type.getName());
-        builder.append("location", _location);
-
-        extendDescription(builder);
-
-        return builder.toString();
-    }
-
-    /**
-     *  Overridden in subclasses to append additional fields (defined in the subclass)
-     *  to the description.  Subclasses may override this method without invoking
-     *  this implementation, which is empty.
-     * 
-     *  @since 3.0
-     * 
-     **/
-
-    protected void extendDescription(ToStringBuilder builder)
-    {
-    }
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/parse/TextToken.java b/3.0.4/framework/src/org/apache/tapestry/parse/TextToken.java
deleted file mode 100644
index 4840891..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/parse/TextToken.java
+++ /dev/null
@@ -1,183 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.parse;
-
-import org.apache.commons.lang.builder.ToStringBuilder;
-import org.apache.tapestry.ILocation;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRender;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.Tapestry;
-
-/**
- *  Represents static text in the template that may be passed through
- *  to the client unchanged (except, perhaps, for the removal of
- *  some whitespace).
- *
- *  @see TokenType#TEXT
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 3.0
- *
- **/
-
-public class TextToken extends TemplateToken implements IRender
-{
-    private char[] _templateData;
-
-    private int _startIndex = -1;
-    private int _endIndex = -1;
-
-    private int _offset;
-    private int _length;
-    private boolean _needsTrim = true;
-
-    public TextToken(char[] templateData, int startIndex, int endIndex, ILocation location)
-    {
-        super(TokenType.TEXT, location);
-
-        if (startIndex < 0
-            || endIndex < 0
-            || startIndex > templateData.length
-            || endIndex > templateData.length)
-            throw new IllegalArgumentException(
-                Tapestry.format(
-                    "TextToken.range-error",
-                    this,
-                    Integer.toString(templateData.length)));
-
-        _templateData = templateData;
-        _startIndex = startIndex;
-        _endIndex = endIndex;
-
-        // Values actually used to render, may be adjusted to remove excess
-        // leading and trailing whitespace.
-
-        _offset = startIndex;
-        _length = endIndex - startIndex + 1;
-    }
-
-    public synchronized void render(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        if (_needsTrim)
-        {
-            trim();
-            _needsTrim = false;
-        }
-
-        if (_length == 0)
-            return;
-
-        // At one time, we would check to see if the cycle was rewinding and
-        // only invoke printRaw() if it was.  However, that slows down
-        // normal rendering (microscopically) and, with the new
-        // NullResponseWriter class, the "cost" of invoking cycle.isRewinding()
-        // is approximately the same as the "cost" of invoking writer.printRaw().
-
-        writer.printRaw(_templateData, _offset, _length);
-    }
-
-    /**
-      *  Strip off all leading and trailing whitespace by adjusting offset and length.
-      *
-      **/
-
-    private void trim()
-    {
-        if (_length == 0)
-            return;
-
-        try
-        {
-            boolean didTrim = false;
-
-            // Shave characters off the end until we hit a non-whitespace
-            // character.
-
-            while (_length > 0)
-            {
-                char ch = _templateData[_offset + _length - 1];
-
-                if (!Character.isWhitespace(ch))
-                    break;
-
-                _length--;
-                didTrim = true;
-            }
-
-            // Restore one character of whitespace to the end
-
-            if (didTrim)
-                _length++;
-
-            didTrim = false;
-
-            // Strip characters off the front until we hit a non-whitespace
-            // character.
-
-            while (_length > 0)
-            {
-                char ch = _templateData[_offset];
-
-                if (!Character.isWhitespace(ch))
-                    break;
-
-                _offset++;
-                _length--;
-                didTrim = true;
-            }
-
-            // Again, restore one character of whitespace.
-
-            if (didTrim)
-            {
-                _offset--;
-                _length++;
-            }
-
-        }
-        catch (IndexOutOfBoundsException ex)
-        {
-            throw new RuntimeException(Tapestry.format("TextToken.error-trimming", this));
-        }
-
-        // Ok, this isn't perfect.  I don't want to write into templateData[] even
-        // though I'd prefer that my single character of whitespace was always a space.
-        // It would also be kind of neat to shave whitespace within the static HTML, rather
-        // than just on the edges.
-    }
-
-    protected void extendDescription(ToStringBuilder builder)
-    {
-        builder.append("startIndex", _startIndex);
-        builder.append("endIndex", _endIndex);
-    }
-
-    public int getEndIndex()
-    {
-        return _endIndex;
-    }
-
-    public int getStartIndex()
-    {
-        return _startIndex;
-    }
-
-    public char[] getTemplateData()
-    {
-        return _templateData;
-    }
-
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/parse/TokenType.java b/3.0.4/framework/src/org/apache/tapestry/parse/TokenType.java
deleted file mode 100644
index 20c8540..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/parse/TokenType.java
+++ /dev/null
@@ -1,74 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.parse;
-
-import org.apache.commons.lang.enum.Enum;
-
-/**
- * An {@link Enum} of the different possible token types.
- *
- * @see TemplateToken
- *
- * @author Howard Lewis Ship
- * @version $Id$
- * 
- **/
-
-public class TokenType extends Enum
-{
-    /**
-     *  Raw HTML text.
-     * 
-     *  @see TextToken
-     * 
-     *
-     **/
-
-    public static final TokenType TEXT = new TokenType("TEXT");
-
-    /**
-     *  The opening tag of an element.
-     * 
-     *  @see OpenToken
-     *
-     **/
-
-    public static final TokenType OPEN = new TokenType("OPEN");
-
-    /**
-     *  The closing tag of an element.
-     * 
-     *  @see CloseToken
-     *
-     **/
-
-    public static final TokenType CLOSE = new TokenType("CLOSE");
-
-    /**
-     * 
-     *  A reference to a localized string.
-     * 
-     *  @since 2.0.4
-     * 
-     **/
-    
-    public static final TokenType LOCALIZATION = new TokenType("LOCALIZATION");
-    
-    private TokenType(String name)
-    {
-        super(name);
-    }
-
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/parse/ValidatePublicIdRule.java b/3.0.4/framework/src/org/apache/tapestry/parse/ValidatePublicIdRule.java
deleted file mode 100644
index 254585e..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/parse/ValidatePublicIdRule.java
+++ /dev/null
@@ -1,76 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.parse;
-
-import org.apache.tapestry.IResourceLocation;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.util.xml.DocumentParseException;
-import org.xml.sax.Attributes;
-
-/**
- *  Rule used to validate the public id of the document, ensuring that
- *  it is not null, and that it matches an expected value.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 3.0
- *
- **/
-
-public class ValidatePublicIdRule extends BaseDocumentRule
-{
-    private String[] _publicIds;
-    private String _rootElement;
-
-    public ValidatePublicIdRule(String[] publicIds, String rootElement)
-    {
-        _publicIds = publicIds;
-        _rootElement = rootElement;
-    }
-
-    public void startDocument(String namespace, String name, Attributes attributes)
-        throws Exception
-    {
-        SpecificationDigester digester = getDigester();
-        IResourceLocation location = digester.getResourceLocation();
-
-        String publicId = digester.getPublicId();
-
-		// publicId will never be null because we use a validating parser.
-
-        for (int i = 0; i < _publicIds.length; i++)
-        {
-            if (_publicIds[i].equals(publicId))
-            {
-
-                if (!name.equals(_rootElement))
-                    throw new DocumentParseException(
-                        Tapestry.format(
-                            "AbstractDocumentParser.incorrect-document-type",
-                            _rootElement,
-                            name),
-                        location);
-
-                return;
-            }
-
-        }
-
-        throw new DocumentParseException(
-            Tapestry.format("AbstractDocumentParser.unknown-public-id", location, publicId),
-            location);
-    }
-
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/parse/ValidateRule.java b/3.0.4/framework/src/org/apache/tapestry/parse/ValidateRule.java
deleted file mode 100644
index ee07e5a..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/parse/ValidateRule.java
+++ /dev/null
@@ -1,68 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.parse;
-
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.util.RegexpMatcher;
-import org.apache.tapestry.util.xml.InvalidStringException;
-import org.xml.sax.Attributes;
-
-/**
- *  Validates that an attribute matches a specified pattern.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 3.0
- *
- **/
-
-public class ValidateRule extends AbstractSpecificationRule
-{
-    private RegexpMatcher _matcher;
-    private String _attributeName;
-    private String _pattern;
-    private String _errorKey;
-
-	public ValidateRule(RegexpMatcher matcher, String attributeName, String pattern, String errorKey)
-	{
-		_matcher = matcher;
-		_attributeName = attributeName;
-		_pattern = pattern;
-		_errorKey = errorKey;
-	}
-
-	/**
-	 *  Validates that the attribute, if provided, matches the pattern.
-	 * 
-	 *  @throws InvalidStringException if the value does not match the pattern.
-	 * 
-	 **/
-	
-    public void begin(String namespace, String name, Attributes attributes) throws Exception
-    {
-        String value = getValue(attributes, _attributeName);
-        if (value == null)
-            return;
-
-        if (_matcher.matches(_pattern, value))
-            return;
-
-        throw new InvalidStringException(
-            Tapestry.format(_errorKey, value),
-            value,
-            getResourceLocation());
-    }
-
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/parse/package.html b/3.0.4/framework/src/org/apache/tapestry/parse/package.html
deleted file mode 100644
index 1f6422c..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/parse/package.html
+++ /dev/null
@@ -1,14 +0,0 @@
-<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN">
-<!-- $Id$ -->
-<html>
-<head>
-<title>Tapestry: Web Application Framework</title>
-</head>
-<body>
-
-<p>Classes used when parsing templates, application and component specifications.
-
-@author Howard Lewis Ship <a href="mailto:hlship@apache.org">hlship@apache.org</a>
-
-</body>
-</html>
diff --git a/3.0.4/framework/src/org/apache/tapestry/record/ChangeKey.java b/3.0.4/framework/src/org/apache/tapestry/record/ChangeKey.java
deleted file mode 100644
index 39e61b7..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/record/ChangeKey.java
+++ /dev/null
@@ -1,92 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.record;
-
-import org.apache.commons.lang.builder.EqualsBuilder;
-import org.apache.commons.lang.builder.HashCodeBuilder;
-
-/**
- *  Used to identify a property change.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- * 
- **/
-
-public class ChangeKey
-{
-    private int _hashCode = -1;
-    private String _componentPath;
-    private String _propertyName;
-
-    public ChangeKey(String componentPath, String propertyName)
-    {
-        _componentPath = componentPath;
-        _propertyName = propertyName;
-    }
-
-    public boolean equals(Object object)
-    {
-        if (object == null)
-            return false;
-
-        if (this == object)
-            return true;
-
-        if (!(object instanceof ChangeKey))
-            return false;
-
-        ChangeKey other = (ChangeKey) object;
-
-        EqualsBuilder builder = new EqualsBuilder();
-
-        builder.append(_propertyName, other._propertyName);
-        builder.append(_componentPath, other._componentPath);
-
-        return builder.isEquals();
-    }
-
-    public String getComponentPath()
-    {
-        return _componentPath;
-    }
-
-    public String getPropertyName()
-    {
-        return _propertyName;
-    }
-
-    /**
-     *
-     *  Returns a hash code computed from the
-     *  property name and component path.
-     *
-     **/
-
-    public int hashCode()
-    {
-        if (_hashCode == -1)
-        {
-            HashCodeBuilder builder = new HashCodeBuilder(257, 23); // Random
-
-            builder.append(_propertyName);
-            builder.append(_componentPath);
-
-            _hashCode = builder.toHashCode();
-        }
-
-        return _hashCode;
-    }
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/record/IPageChange.java b/3.0.4/framework/src/org/apache/tapestry/record/IPageChange.java
deleted file mode 100644
index 7866125..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/record/IPageChange.java
+++ /dev/null
@@ -1,48 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.record;
-
-/**
- *  Represents a change to a component on a page, this represents
- *  a datum of information stored by a {@link org.apache.tapestry.engine.IPageRecorder}.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- **/
-
-public interface IPageChange
-{
-    /**
-     *  The path to the component on the page, or null if the property is a property
-     *  of the page.
-     *
-     **/
-
-    public String getComponentPath();
-
-    /**
-     *  The new value for the property, which may be null.
-     *
-     **/
-
-    public Object getNewValue();
-
-    /**
-     *  The name of the property that changed.
-     *
-     **/
-
-    public String getPropertyName();
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/record/PageChange.java b/3.0.4/framework/src/org/apache/tapestry/record/PageChange.java
deleted file mode 100644
index fe196b0..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/record/PageChange.java
+++ /dev/null
@@ -1,82 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.record;
-
-import org.apache.commons.lang.builder.ToStringBuilder;
-
-
-/**
- *  Represents a change to a component on a page.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- * 
- **/
-
-public class PageChange implements IPageChange
-{
-    private String _componentPath;
-    private String _propertyName;
-    private Object _newValue;
-
-    public PageChange(String componentPath, String propertyName, Object newValue)
-    {
-        _componentPath = componentPath;
-        _propertyName = propertyName;
-        _newValue = newValue;
-    }
-
-    /**
-     *  The path to the component on the page, or null if the property
-     *  is a property of the page.
-     *
-     **/
-
-    public String getComponentPath()
-    {
-        return _componentPath;
-    }
-
-    /**
-     *  The new value for the property, which may be null.
-     *
-     **/
-
-    public Object getNewValue()
-    {
-        return _newValue;
-    }
-
-    /**
-     *  The name of the property that changed.
-     *
-     **/
-
-    public String getPropertyName()
-    {
-        return _propertyName;
-    }
-
-    public String toString()
-    {
-        ToStringBuilder builder = new ToStringBuilder(this);
-        
-        builder.append("componentPath", _componentPath);
-        builder.append("propertyName", _propertyName);
-        builder.append("newValue", _newValue);
-        
-        return builder.toString();
-    }
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/record/PageRecorder.java b/3.0.4/framework/src/org/apache/tapestry/record/PageRecorder.java
deleted file mode 100644
index ad03155..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/record/PageRecorder.java
+++ /dev/null
@@ -1,238 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.record;
-
-import java.util.Collection;
-import java.util.Iterator;
-
-import org.apache.tapestry.ApplicationRuntimeException;
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.IPage;
-import org.apache.tapestry.IResourceResolver;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.engine.IPageRecorder;
-import org.apache.tapestry.event.ObservedChangeEvent;
-import org.apache.tapestry.util.prop.OgnlUtils;
-
-/**
- *  Tracks changes to components on a page, allowing changes to be persisted across
- *  request cycles, and restoring the state of a page and component when needed.
- *
- *  <p>This is an abstract implementation; specific implementations can choose where
- *  and how to persist the data.
- *
- * @author Howard Ship
- * @version $Id$
- * 
- **/
-
-public abstract class PageRecorder implements IPageRecorder
-{
-    private boolean _dirty = false;
-    private boolean _locked = false;
-    private boolean _discard = false;
-
-    /**
-     *  Invoked to persist all changes that have been accumulated.  If the recorder
-     *  saves change incrementally, this should ensure that all changes have been persisted.
-     *
-     *  <p>Subclasses should check the dirty flag.  If the recorder is dirty, changes
-     *  should be recorded and the dirty flag cleared.
-     *
-     **/
-
-    public abstract void commit();
-
-    /**
-     *  Returns a <code>Collection</code> of 
-     *  {@link IPageChange} objects
-     *  identifying changes to the page and its components.
-     *
-     **/
-
-    public abstract Collection getChanges();
-
-    /**
-     *  Returns true if the page has observed a change.
-     *  The dirty flag is cleared by
-     *  {@link #commit()}.
-     *
-     **/
-
-    public boolean isDirty()
-    {
-        return _dirty;
-    }
-
-    /**
-     *  Returns true if the recorder is locked.  The locked flag
-     *  is set by {@link #commit()}.
-     *
-     **/
-
-    public boolean isLocked()
-    {
-        return _locked;
-    }
-
-    public void setLocked(boolean value)
-    {
-        _locked = value;
-    }
-
-    /**
-     *  Observes the change.  The object of the event is expected to
-     *  be an {@link IComponent}.  Ignores the change if not active,
-     *  otherwise, sets invokes {@link #recordChange(String, String,
-     *  Object)}.
-     *
-     *  <p>If the property name in the event is null, then the recorder
-     *  is marked dirty (but 
-     *  {@link #recordChange(String, String,
-     *  Object)} is not invoked.  This is how a "distant" property changes
-     *  are propogated to the page recorder (a distant property change is a change to
-     *  a property of an object that is itself a property of the page).
-     *
-     *  <p>If the recorder is not active (typically, when a page is
-     *  being rewound), then the event is simply ignored.
-     *
-     **/
-
-    public void observeChange(ObservedChangeEvent event)
-    {
-        IComponent component = event.getComponent();
-        String propertyName = event.getPropertyName();
-
-        if (_locked)
-            throw new ApplicationRuntimeException(
-                Tapestry.format(
-                    "PageRecorder.change-after-lock",
-                    component.getPage().getPageName(),
-                    propertyName,
-                    component.getExtendedId()));
-
-        if (propertyName == null)
-            throw new ApplicationRuntimeException(
-                Tapestry.format("PageRecorder.null-property-name", component.getExtendedId()));
-
-        Object activeValue = event.getNewValue();
-
-        try
-        {
-            recordChange(component.getIdPath(), propertyName, activeValue);
-        }
-        catch (Throwable t)
-        {
-            t.printStackTrace();
-            throw new ApplicationRuntimeException(
-                Tapestry.format(
-                    "PageRecorder.unable-to-persist",
-                    propertyName,
-                    component.getExtendedId(),
-                    activeValue),
-                t);
-        }
-    }
-
-    /**
-     *  Records a change to a particular component.  Subclasses may
-     *  cache these in memory, or record them externally at this time.
-     *
-     *  <p>This method is responsible for setting the dirty flag if
-     *  the described change is real.
-     *
-     *  @param componentPath the name of the component relative to the
-     *  page which contains it.  May be null if the change was to a
-     *  property of the page itself.
-     *
-     *  @param propertyName the name of the property which changed.
-     *
-     *  @param newValue the new value for the property, which may also
-     *  be null.
-     *
-     *  @see IComponent#getIdPath()
-     *
-     **/
-
-    protected abstract void recordChange(
-        String componentPath,
-        String propertyName,
-        Object newValue);
-
-    /**
-     *  Rolls back the page to the currently persisted state.
-     *
-     **/
-
-    public void rollback(IPage page)
-    {
-        Collection changes = getChanges();
-
-        if (changes.isEmpty())
-            return;
-
-        IResourceResolver resolver = page.getEngine().getResourceResolver();
-        Iterator i = changes.iterator();
-
-        while (i.hasNext())
-        {
-            PageChange change = (PageChange) i.next();
-
-            String propertyName = change.getPropertyName();
-
-            IComponent component = page.getNestedComponent(change.getComponentPath());
-
-            Object storedValue = change.getNewValue();
-
-            try
-            {
-                OgnlUtils.set(propertyName, resolver, component, storedValue);
-            }
-            catch (Throwable t)
-            {
-                throw new ApplicationRuntimeException(
-                    Tapestry.format(
-                        "PageRecorder.unable-to-rollback",
-                        new Object[] { propertyName, component, storedValue, t.getMessage()}),
-                    t);
-            }
-        }
-    }
-
-    /** @since 2.0.2 **/
-
-    public boolean isMarkedForDiscard()
-    {
-        return _discard;
-    }
-
-    /** @since 2.0.2 **/
-
-    public void markForDiscard()
-    {
-        _discard = true;
-    }
-
-    protected void setDirty(boolean dirty)
-    {
-        _dirty = dirty;
-    }
-
-    protected boolean getDirty()
-    {
-        return _dirty;
-    }
-
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/record/SessionPageRecorder.java b/3.0.4/framework/src/org/apache/tapestry/record/SessionPageRecorder.java
deleted file mode 100644
index a3fc705..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/record/SessionPageRecorder.java
+++ /dev/null
@@ -1,248 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.record;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Enumeration;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Map;
-
-import javax.servlet.http.HttpSession;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.request.RequestContext;
-import org.apache.tapestry.util.StringSplitter;
-
-/**
- * Simple implementation of {@link org.apache.tapestry.engine.IPageRecorder}that stores page
- * changes as {@link javax.servlet.http.HttpSession}attributes.
- * 
- * @author Howard Ship
- * @version $Id$
- */
-
-public class SessionPageRecorder extends PageRecorder
-{
-    private static final Log LOG = LogFactory.getLog(SessionPageRecorder.class);
-
-    /**
-     * Dictionary of changes, keyed on an instance of {@link ChangeKey}(which enapsulates component
-     * path and property name). The value is the new value for the object. The same information is
-     * stored into the {@link HttpSession}, which is used as a kind of write-behind cache.
-     */
-
-    private Map _changes;
-
-    /**
-     * The session into which changes are recorded.
-     * 
-     * @since 3.0
-     */
-
-    private HttpSession _session;
-
-    /**
-     * The fully qualified name of the page being recorded.
-     * 
-     * @since 3.0
-     */
-
-    private String _pageName;
-
-    /**
-     * The prefix (for {@link HttpSession}attributes) used by this page recorder.
-     */
-
-    private String _attributePrefix;
-
-    public void initialize(String pageName, IRequestCycle cycle)
-    {
-        if (LOG.isDebugEnabled())
-            LOG.debug("Initializing for " + pageName);
-
-        RequestContext context = cycle.getRequestContext();
-
-        _pageName = pageName;
-        _session = context.getSession();
-
-        _attributePrefix = context.getServlet().getServletName() + "/" + _pageName + "/";
-
-        restorePageChanges();
-    }
-
-    public void discard()
-    {
-        if (Tapestry.isEmpty(_changes))
-            return;
-
-        Iterator i = _changes.keySet().iterator();
-
-        while (i.hasNext())
-        {
-            ChangeKey key = (ChangeKey) i.next();
-
-            String attributeKey = constructAttributeKey(key.getComponentPath(), key
-                    .getPropertyName());
-
-            if (LOG.isDebugEnabled())
-                LOG.debug("Removing session attribute " + attributeKey);
-
-            _session.removeAttribute(attributeKey);
-        }
-    }
-
-    /**
-     * Simply clears the dirty flag, because there is no external place to store changed page
-     * properties. Sets the locked flag to prevent subsequent changes from occuring now.
-     */
-
-    public void commit()
-    {
-        setDirty(false);
-        setLocked(true);
-    }
-
-    /**
-     * Returns true if the recorder has any changes recorded.
-     */
-
-    public boolean getHasChanges()
-    {
-        if (_changes == null)
-            return false;
-
-        return (_changes.size() > 0);
-    }
-
-    public Collection getChanges()
-    {
-        if (_changes == null)
-            return Collections.EMPTY_LIST;
-
-        int count = _changes.size();
-        Collection result = new ArrayList(count);
-
-        Iterator i = _changes.entrySet().iterator();
-        while (i.hasNext())
-        {
-            Map.Entry entry = (Map.Entry) i.next();
-
-            ChangeKey key = (ChangeKey) entry.getKey();
-
-            Object value = entry.getValue();
-
-            PageChange change = new PageChange(key.getComponentPath(), key.getPropertyName(), value);
-
-            result.add(change);
-        }
-
-        return result;
-    }
-
-    protected void recordChange(String componentPath, String propertyName, Object newValue)
-    {
-        ChangeKey key = new ChangeKey(componentPath, propertyName);
-
-        if (_changes == null)
-            _changes = new HashMap();
-
-        setDirty(true);
-
-        _changes.put(key, newValue);
-
-        // Now, build a key used to store the new value
-        // in the HttpSession
-
-        String attributeKey = constructAttributeKey(componentPath, propertyName);
-
-        if (newValue == null)
-            _session.removeAttribute(attributeKey);
-        else
-            _session.setAttribute(attributeKey, newValue);
-
-        if (LOG.isDebugEnabled())
-            LOG.debug("Stored session attribute " + attributeKey + " = " + newValue);
-    }
-
-    private String constructAttributeKey(String componentPath, String propertyName)
-    {
-        StringBuffer buffer = new StringBuffer(_attributePrefix);
-
-        if (componentPath != null)
-        {
-            buffer.append(componentPath);
-            buffer.append('/');
-        }
-
-        buffer.append(propertyName);
-
-        return buffer.toString();
-    }
-
-    private void restorePageChanges()
-    {
-        int count = 0;
-        Enumeration e = _session.getAttributeNames();
-        StringSplitter splitter = null;
-
-        while (e.hasMoreElements())
-        {
-            String key = (String) e.nextElement();
-
-            if (!key.startsWith(_attributePrefix))
-                continue;
-
-            if (LOG.isDebugEnabled())
-                LOG.debug("Restoring page change from session attribute " + key);
-
-            if (_changes == null)
-            {
-                _changes = new HashMap();
-
-                splitter = new StringSplitter('/');
-            }
-
-            String[] names = splitter.splitToArray(key);
-
-            // The first name is the servlet name, which allows
-            // multiple Tapestry apps to share a HttpSession, even
-            // when they use the same page names. The second name
-            // is the page name, which we already know.
-
-            int i = 2;
-
-            String componentPath = (names.length == 4) ? names[i++] : null;
-            String propertyName = names[i++];
-            Object value = _session.getAttribute(key);
-
-            ChangeKey changeKey = new ChangeKey(componentPath, propertyName);
-
-            _changes.put(changeKey, value);
-
-            count++;
-        }
-
-        if (LOG.isDebugEnabled())
-            LOG.debug(count == 0 ? "No recorded changes." : "Restored " + count
-                    + " recorded changes.");
-    }
-
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/record/package.html b/3.0.4/framework/src/org/apache/tapestry/record/package.html
deleted file mode 100644
index 54a0a95..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/record/package.html
+++ /dev/null
@@ -1,15 +0,0 @@
-<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN">
-<!-- $Id$ -->
-<html>
-<head>
-<title>Tapestry: Web Application Framework</title>
-</head>
-<body>
-
-<p>Abstract and simple (memory-based) implementations of
-{@link org.apache.tapestry.engine.IPageRecorder}.
-
-@author Howard Lewis Ship <a href="mailto:hlship@apache.org">hlship@apache.org</a>
-
-</body>
-</html>
diff --git a/3.0.4/framework/src/org/apache/tapestry/request/DecodedRequest.java b/3.0.4/framework/src/org/apache/tapestry/request/DecodedRequest.java
deleted file mode 100644
index 5c2101b..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/request/DecodedRequest.java
+++ /dev/null
@@ -1,85 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.request;
-
-/**
- *  Contains properties of an {@link javax.servlet.http.HttpServletRequest}
- *  that have been extracted from the request (or otherwise determined).
- * 
- *  <p>An alternative idea would have been to create a new 
- *  {@link javax.servlet.http.HttpServletRequest}
- *  wrapper that overode the various methods.  That struck me as causing
- *  more confusion; instead (in the few places it counts), classes will
- *  get the decoded properties from the {@link RequestContext}.
- *
- *  @see IRequestDecoder
- *  @see RequestContext#getScheme()
- *  @see RequestContext#getServerName()
- *  @see RequestContext#getServerPort()
- *  @see RequestContext#getRequestURI()
- * 
- *  @author Howard Lewis Ship
- *  @version DecodedRequest.java,v 1.1 2002/08/20 21:49:58 hship Exp
- *  @since 2.2
- * 
- **/
-
-public class DecodedRequest
-{
-    private String _scheme;
-    private String _serverName;
-    private String _requestURI;
-    private int _serverPort;
-
-    public int getServerPort()
-    {
-        return _serverPort;
-    }
-
-    public String getScheme()
-    {
-        return _scheme;
-    }
-
-    public String getServerName()
-    {
-        return _serverName;
-    }
-
-    public String getRequestURI()
-    {
-        return _requestURI;
-    }
-
-    public void setServerPort(int serverPort)
-    {
-        _serverPort = serverPort;
-    }
-
-    public void setScheme(String scheme)
-    {
-        _scheme = scheme;
-    }
-
-    public void setServerName(String serverName)
-    {
-        _serverName = serverName;
-    }
-
-    public void setRequestURI(String URI)
-    {
-        _requestURI = URI;
-    }
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/request/IRequestDecoder.java b/3.0.4/framework/src/org/apache/tapestry/request/IRequestDecoder.java
deleted file mode 100644
index 5743019..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/request/IRequestDecoder.java
+++ /dev/null
@@ -1,44 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.request;
-
-import javax.servlet.http.HttpServletRequest;
-
-/**
- *  Given a {@link javax.servlet.http.HttpServletRequest}, identifies
- *  the correct request properties (server, scheme, URI and port).
- * 
- *  <p>An implementation of this class may be necessary when using
- *  Tapestry with specific firewalls which may obscure
- *  the scheme, server, etc. visible to the client web browser
- *  (the request appears to arrive from the firewall server, not the
- *  client web browser).
- *
- *  @author Howard Lewis Ship
- *  @version IRequestDecoder.java,v 1.1 2002/08/20 21:49:58 hship Exp
- *  @since 2.2
- * 
- **/
-
-public interface IRequestDecoder
-{
-
-    /**
-     *  Invoked to identify the actual properties from the request.
-     * 
-     **/
-
-    public DecodedRequest decodeRequest(HttpServletRequest request);
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/request/IUploadFile.java b/3.0.4/framework/src/org/apache/tapestry/request/IUploadFile.java
deleted file mode 100644
index 951271a..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/request/IUploadFile.java
+++ /dev/null
@@ -1,99 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.request;
-
-import java.io.File;
-import java.io.InputStream;
-
-/**
- *  Represents a file uploaded from a client side form.
- * 
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 1.0.8
- *
- **/
-
-public interface IUploadFile
-{
-	/**
-	 *  Returns the name of the file that was uploaded.  This
-	 *  is just the filename portion of the complete path.
-	 * 
-	 **/
-
-	public String getFileName();
-
-	/**
-	 *  Returns the complete path, as reported by the client
-	 *  browser.  Different browsers report different things
-	 *  here.
-	 * 
-	 * 
-	 *  @since 2.0.4
-	 * 
-	 **/
-	
-	public String getFilePath();
-
-	/**
-	 *  Returns an input stream of the content of the file.  There is no guarantee
-	 *  that this stream will be valid after the end of the current request cycle,
-	 *  so it should be processed immediately.
-	 * 
-	 *  <p>As of release 1.0.8, this will be a a {@link java.io.ByteArrayInputStream},
-	 *  but that, too, may change (a future implementation may upload the stream
-	 *  to a temporary file and return an input stream from that).
-	 * 
-	 **/
-
-	public InputStream getStream();
-    
-    /**
-     *  Returns the MIME type specified when the file was uploaded.  May return null
-     *  if the content type is not known.
-     * 
-     *  @since 2.2
-     * 
-     **/
-    
-    public String getContentType();
-    
-    /**
-     * Writes the content of the file to a known location.  This should
-     * be invoked at most once.  In a standard
-     * implementation based on Jakarta FileUpload, this will often
-     * be implemented efficiently as a file rename.
-     * 
-     * @since 3.0
-     */
-    
-    public void write(File file);
-    
-    /**
-     * Returns true if the uploaded content is in memory.  False generally
-     * means the content is stored in a temporary file.
-     */
-    
-    public boolean isInMemory();
-    
-    /**
-     * Returns the size, in bytes, of the uploaded content.
-     * 
-     * @since 3.0
-     **/
-    
-    public long getSize(); 
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/request/RequestContext.java b/3.0.4/framework/src/org/apache/tapestry/request/RequestContext.java
deleted file mode 100644
index edffc0c..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/request/RequestContext.java
+++ /dev/null
@@ -1,1096 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.request;
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Date;
-import java.util.Enumeration;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Properties;
-import java.util.StringTokenizer;
-
-import javax.servlet.ServletConfig;
-import javax.servlet.ServletContext;
-import javax.servlet.http.Cookie;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import javax.servlet.http.HttpSession;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.tapestry.ApplicationServlet;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRender;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.multipart.DefaultMultipartDecoder;
-import org.apache.tapestry.multipart.IMultipartDecoder;
-import org.apache.tapestry.spec.IApplicationSpecification;
-import org.apache.tapestry.util.IRenderDescription;
-
-/**
- *  This class encapsulates all the relevant data for one request cycle of an
- *  {@link ApplicationServlet}.  This includes:
- *  <ul>
- *  	<li>{@link HttpServletRequest}
- *		<li>{@link HttpServletResponse}
- *		<li>{@link HttpSession}
- * 		<li>{@link javax.servlet.http.HttpServlet}
- *  </ul>
- *  <p>It also provides methods for:
- *  <ul>
- *  <li>Retrieving the request parameters (even if a file upload is involved)
- *  <li>Getting, setting and removing request attributes
- *  <li>Forwarding requests
- *  <li>Redirecting requests
- *  <li>Getting and setting Cookies
- *  <li>Intepreting the request path info
- *  <li>Writing an HTML description of the <code>RequestContext</code> (for debugging).
- *  </ul>
- *
- * 
- *  <p>
- *  If some cases, it is necesary to provide an implementation of
- *  {@link IRequestDecoder} (often, due to a firewall).
- *  If the application specifification
- *  provides an extension named
- *  <code>org.apache.tapestry.request-decoder</code>
- *  then it will be used, instead of a default decoder.
- * 
- *  <p>This class is not a component, but does implement {@link IRender}.  When asked to render
- *  (perhaps as the delegate of a {@link org.apache.tapestry.components.Delegator} component}
- *  it simply invokes {@link #write(IMarkupWriter)} to display all debugging output.
- *
- *  <p>This class is derived from the original class 
- *  <code>com.primix.servlet.RequestContext</code>,
- *  part of the <b>ServletUtils</b> framework available from
- *  <a href="http://www.gjt.org/servlets/JCVSlet/list/gjt/com/primix/servlet">The Giant 
- *  Java Tree</a>.
- *
- *
- *  @version $Id$
- *  @author Howard Lewis Ship
- * 
- **/
-
-public class RequestContext implements IRender
-{
-    /** @since 2.2 **/
-
-    private static class DefaultRequestDecoder implements IRequestDecoder
-    {
-        public DecodedRequest decodeRequest(HttpServletRequest request)
-        {
-            DecodedRequest result = new DecodedRequest();
-
-            result.setRequestURI(request.getRequestURI());
-            result.setScheme(request.getScheme());
-            result.setServerName(request.getServerName());
-            result.setServerPort(request.getServerPort());
-
-            return result;
-        }
-    }
-
-    private static final Log LOG = LogFactory.getLog(RequestContext.class);
-
-    private HttpSession _session;
-    private HttpServletRequest _request;
-    private HttpServletResponse _response;
-    private ApplicationServlet _servlet;
-    private DecodedRequest _decodedRequest;
-    private IMultipartDecoder _decoder;
-    private boolean _decoded;
-
-    /**
-     * A mapping of the cookies available in the request.
-     *
-     **/
-
-    private Map _cookieMap;
-
-    /**
-     *  Used during {@link #write(IMarkupWriter)}.
-     * 
-     **/
-
-    private boolean _evenRow;
-
-    /**
-     * Creates a <code>RequestContext</code> from its components.
-     *
-     **/
-
-    public RequestContext(
-        ApplicationServlet servlet,
-        HttpServletRequest request,
-        HttpServletResponse response)
-        throws IOException
-    {
-        _servlet = servlet;
-        _request = request;
-        _response = response;
-
-        // All three parameters may be null if created from
-        // AbstractEngine.cleanupEngine().
-
-        if (_request != null && DefaultMultipartDecoder.isMultipartRequest(request))
-        {
-            IMultipartDecoder decoder = obtainMultipartDecoder(servlet, request);
-            setDecoder(decoder);
-        }
-    }
-
-    /**
-     *  Invoked from the constructor to create a {@link DefaultMultipartDecoder} instance.
-     *  Applications with specific upload needs may need to override this to
-     *  provide a subclass instance instead.  The caller will invoke
-     *  {@link IMultipartDecoder#decode(HttpServletRequest)} on the
-     *  returned object.
-     * 
-     *  <p>
-     *  This implementation checks for application extension
-     *  {@link Tapestry#MULTIPART_DECODER_EXTENSION_NAME}.  If that is not
-     *  defined, a shared instance of {@link DefaultMultipartDecoder}
-     *  is returned.  
-     *
-     * 
-     *  @see ApplicationServlet#createRequestContext(HttpServletRequest, HttpServletResponse)
-     *  @since 3.0
-     * 
-     **/
-
-    protected IMultipartDecoder obtainMultipartDecoder(
-        ApplicationServlet servlet,
-        HttpServletRequest request)
-        throws IOException
-    {
-        IApplicationSpecification spec = servlet.getApplicationSpecification();
-
-        if (spec.checkExtension(Tapestry.MULTIPART_DECODER_EXTENSION_NAME))
-            return (IMultipartDecoder) spec.getExtension(
-                Tapestry.MULTIPART_DECODER_EXTENSION_NAME,
-                IMultipartDecoder.class);
-
-        return DefaultMultipartDecoder.getSharedInstance();
-    }
-
-    /**
-     * Adds a simple {@link Cookie}. To set a Cookie with attributes,
-     * use {@link #addCookie(Cookie)}.
-     *
-     **/
-
-    public void addCookie(String name, String value)
-    {
-        addCookie(new Cookie(name, value));
-    }
-
-    /**
-     * Adds a {@link Cookie} to the response. Once added, the
-     * Cookie will also be available to {@link #getCookie(String)} method.
-     *
-     * <p>Cookies should only be added <em>before</em> invoking
-     * {@link HttpServletResponse#getWriter()}..
-     *
-     **/
-
-    public void addCookie(Cookie cookie)
-    {
-        if (LOG.isDebugEnabled())
-            LOG.debug("Adding cookie " + cookie);
-
-        _response.addCookie(cookie);
-
-        if (_cookieMap == null)
-            readCookieMap();
-
-        _cookieMap.put(cookie.getName(), cookie);
-    }
-
-    private void datePair(IMarkupWriter writer, String name, long value)
-    {
-        pair(writer, name, new Date(value));
-    }
-
-    /** @since 2.2 **/
-
-    private DecodedRequest getDecodedRequest()
-    {
-        if (_decodedRequest != null)
-            return _decodedRequest;
-
-        IApplicationSpecification spec = _servlet.getApplicationSpecification();
-        IRequestDecoder decoder = null;
-
-        if (!spec.checkExtension(Tapestry.REQUEST_DECODER_EXTENSION_NAME))
-            decoder = new DefaultRequestDecoder();
-        else
-            decoder =
-                (IRequestDecoder) spec.getExtension(
-                    Tapestry.REQUEST_DECODER_EXTENSION_NAME,
-                    IRequestDecoder.class);
-
-        _decodedRequest = decoder.decodeRequest(_request);
-
-        return _decodedRequest;
-    }
-
-    /** 
-     * 
-     *  Returns the actual scheme, possibly decoded from the request.
-     * 
-     *  @see IRequestDecoder
-     *  @see javax.servlet.ServletRequest#getScheme()
-     *  @since 2.2  
-     * 
-     **/
-
-    public String getScheme()
-    {
-        return getDecodedRequest().getScheme();
-    }
-
-    /** 
-     * 
-     *  Returns the actual server name, possibly decoded from the request.
-     * 
-     *  @see IRequestDecoder
-     *  @see javax.servlet.ServletRequest#getServerName()
-     *  @since 2.2  
-     * 
-     **/
-
-    public String getServerName()
-    {
-        return getDecodedRequest().getServerName();
-    }
-
-    /** 
-     * 
-     *  Returns the actual server port, possibly decoded from the request.
-     * 
-     *  @see IRequestDecoder
-     *  @see javax.servlet.ServletRequest#getServerPort()
-     *  @since 2.2  
-     * 
-     **/
-
-    public int getServerPort()
-    {
-        return getDecodedRequest().getServerPort();
-    }
-
-    /** 
-     * 
-     *  Returns the actual request URI, possibly decoded from the request.
-     * 
-     *  @see IRequestDecoder
-     *  @see HttpServletRequest#getRequestURI()
-     *  @since 2.2  
-     * 
-     **/
-
-    public String getRequestURI()
-    {
-        return getDecodedRequest().getRequestURI();
-    }
-
-    /**
-     * Builds an absolute URL from the given URI, using the {@link HttpServletRequest}
-     * as the source for scheme, server name and port.
-     *
-     * @see #getAbsoluteURL(String, String, String, int)
-     * 
-     **/
-
-    public String getAbsoluteURL(String URI)
-    {
-        String scheme = getScheme();
-        String server = getServerName();
-        int port = getServerPort();
-
-        // Keep things simple ... port 80 is accepted as the
-        // standard port for http so it can be ommitted.
-        // Some of the Tomcat code indicates that port 443 is the default
-        // for https, and that needs to be researched.
-
-        if (scheme.equals("http") && port == 80)
-            port = 0;
-
-        return getAbsoluteURL(URI, scheme, server, port);
-    }
-
-    /**
-     * Does some easy checks to turn a path (or URI) into an absolute URL. We assume
-     * <ul>
-     * <li>The presense of a colon means the path is complete already (any other colons
-     * in the URI portion should have been converted to %3A).
-     *
-     * <li>A leading pair of forward slashes means the path is simply missing
-     * the scheme.
-     * <li>Otherwise, we assemble the scheme, server, port (if non-zero) and the URI
-     * as given.
-     * </ul>
-     *
-     **/
-
-    public String getAbsoluteURL(String URI, String scheme, String server, int port)
-    {
-        StringBuffer buffer = new StringBuffer();
-
-        // Though, really, what does a leading colon with no scheme before it
-        // mean?
-
-        if (URI.indexOf(':') >= 0)
-            return URI;
-
-        // Should check the length here, first.
-
-        if (URI.substring(0, 1).equals("//"))
-        {
-            buffer.append(scheme);
-            buffer.append(':');
-            buffer.append(URI);
-            return buffer.toString();
-        }
-
-        buffer.append(scheme);
-        buffer.append("://");
-        buffer.append(server);
-
-        if (port > 0)
-        {
-            buffer.append(':');
-            buffer.append(port);
-        }
-
-        if (URI.charAt(0) != '/')
-            buffer.append('/');
-
-        buffer.append(URI);
-
-        return buffer.toString();
-    }
-
-    /**
-     * Gets a named {@link Cookie}.
-     *
-     * @param name The name of the Cookie.
-     * @return The Cookie, or null if no Cookie with that
-     * name exists.
-     *
-     **/
-
-    public Cookie getCookie(String name)
-    {
-        if (_cookieMap == null)
-            readCookieMap();
-
-        return (Cookie) _cookieMap.get(name);
-    }
-
-    /**
-     * Reads the named {@link Cookie} and returns its value (if it exists), or
-     * null if it does not exist.
-     **/
-
-    public String getCookieValue(String name)
-    {
-        Cookie cookie;
-
-        cookie = getCookie(name);
-
-        if (cookie == null)
-            return null;
-
-        return cookie.getValue();
-    }
-
-    /**
-     *  Returns the named parameter from the {@link HttpServletRequest}.
-     *
-     *  <p>Use {@link #getParameters(String)} for parameters that may
-     *  include multiple values.
-     * 
-     *  <p>This is the preferred way to obtain parameter values (rather than
-     *  obtaining the {@link HttpServletRequest} itself).  For form/multipart-data
-     *  encoded requests, this method will still work.
-     *
-     **/
-
-    public String getParameter(String name)
-    {
-        IMultipartDecoder decoder = getDecoder();
-        if (decoder != null)
-            return decoder.getString(_request, name);
-
-        return _request.getParameter(name);
-    }
-
-    /**
-     *  Convienience method for getting a {@link HttpServletRequest} attribute.
-     * 
-     *  @since 2.3
-     * 
-     **/
-
-    public Object getAttribute(String name)
-    {
-        return _request.getAttribute(name);
-    }
-
-    /**
-     * For parameters that are, or are possibly, multi-valued, this
-     * method returns all the values as an array of Strings.
-     * 
-     *  @see #getParameter(String)
-     *
-     **/
-
-    public String[] getParameters(String name)
-    {
-        // Note: this may not be quite how we want it to work; we'll have to see.
-
-        IMultipartDecoder decoder = getDecoder();
-        if (decoder != null)
-            return decoder.getStrings(_request, name);
-
-        return _request.getParameterValues(name);
-    }
-
-    /**
-     * Returns the named {@link IUploadFile}, if it exists, or null if it doesn't.
-     * Uploads require an encoding of <code>multipart/form-data</code>
-     * (this is specified in the
-     * form's enctype attribute).  If the encoding type
-     * is not so, or if no upload matches the name, then this method returns null.
-     * 
-     **/
-
-    public IUploadFile getUploadFile(String name)
-    {
-        IMultipartDecoder decoder = getDecoder();
-        if (decoder == null)
-            return null;
-
-        return decoder.getUploadFile(_request, name);
-    }
-
-    /**
-     *  Invoked at the end of the request cycle to cleanup and temporary resources.
-     *  This is chained to the {@link DefaultMultipartDecoder}, if there is one.
-     * 
-     *  @since 2.0.1
-     **/
-
-    public void cleanup()
-    {
-        if (_decoder != null)
-            _decoder.cleanup(_request);
-    }
-
-    /**
-     *  Returns the request which initiated the current request cycle.  Note that
-     *  the methods {@link #getParameter(String)} and {@link #getParameters(String)}
-     *  should be used, rather than obtaining parameters directly from the request
-     *  (since the RequestContext handles the differences between normal and multipart/form
-     *  requests).
-     * 
-     **/
-
-    public HttpServletRequest getRequest()
-    {
-        return _request;
-    }
-
-    public HttpServletResponse getResponse()
-    {
-        return _response;
-    }
-
-    private String getRowClass()
-    {
-        String result;
-
-        result = _evenRow ? "even" : "odd";
-
-        _evenRow = !_evenRow;
-
-        return result;
-    }
-
-    public ApplicationServlet getServlet()
-    {
-        return _servlet;
-    }
-
-    /**
-     *  Returns the {@link HttpSession}, if necessary, invoking
-     * {@link HttpServletRequest#getSession(boolean)}.  However,
-     * this method will <em>not</em> create a session.
-     *
-     **/
-
-    public HttpSession getSession()
-    {
-        if (_session == null)
-            _session = _request.getSession(false);
-
-        return _session;
-    }
-
-    /**
-     *  Like {@link #getSession()}, but forces the creation of
-     *  the {@link HttpSession}, if necessary.
-     *
-     **/
-
-    public HttpSession createSession()
-    {
-        if (_session == null)
-        {
-            if (LOG.isDebugEnabled())
-                LOG.debug("Creating HttpSession");
-
-            _session = _request.getSession(true);
-        }
-
-        return _session;
-    }
-
-    private void header(IMarkupWriter writer, String valueName, String dataName)
-    {
-        writer.begin("tr");
-        writer.attribute("class", "request-context-header");
-
-        writer.begin("th");
-        writer.print(valueName);
-        writer.end();
-
-        writer.begin("th");
-        writer.print(dataName);
-        writer.end("tr");
-
-        _evenRow = true;
-    }
-
-    private void object(IMarkupWriter writer, String objectName)
-    {
-        writer.begin("span");
-        writer.attribute("class", "request-context-object");
-        writer.print(objectName);
-        writer.end();
-    }
-
-    private void pair(IMarkupWriter writer, String name, int value)
-    {
-        pair(writer, name, Integer.toString(value));
-    }
-
-    private void pair(IMarkupWriter writer, String name, Object value)
-    {
-        if (value == null)
-            return;
-
-        if (value instanceof IRenderDescription)
-        {
-            IRenderDescription renderValue = (IRenderDescription) value;
-
-            writer.begin("tr");
-            writer.attribute("class", getRowClass());
-
-            writer.begin("th");
-            writer.print(name);
-            writer.end();
-
-            writer.begin("td");
-
-            renderValue.renderDescription(writer);
-
-            writer.end("tr");
-            writer.println();
-            return;
-        }
-
-        pair(writer, name, value.toString());
-    }
-
-    private void pair(IMarkupWriter writer, String name, String value)
-    {
-        if (value == null)
-            return;
-
-        if (value.length() == 0)
-            return;
-
-        writer.begin("tr");
-        writer.attribute("class", getRowClass());
-
-        writer.begin("th");
-        writer.print(name);
-        writer.end();
-
-        writer.begin("td");
-        writer.print(value);
-        writer.end("tr");
-        writer.println();
-    }
-
-    private void pair(IMarkupWriter writer, String name, boolean value)
-    {
-        pair(writer, name, value ? "yes" : "no");
-    }
-
-    private void readCookieMap()
-    {
-        _cookieMap = new HashMap();
-
-        Cookie[] cookies = _request.getCookies();
-
-        if (cookies != null)
-            for (int i = 0; i < cookies.length; i++)
-                _cookieMap.put(cookies[i].getName(), cookies[i]);
-    }
-
-    /**
-     *  Invokes {@link HttpServletResponse#sendRedirect(String)}</code>, 
-     *  but massages <code>path</code>, supplying missing elements to
-     *  make it an absolute URL (i.e., specifying scheme, server, port, etc.).
-     *
-     *  <p>The 2.2 Servlet API will do this automatically, and a little more,
-     *  according to the early documentation.
-     *
-     **/
-
-    public void redirect(String path) throws IOException
-    {
-        // Now a little magic to convert path into a complete URL. The Servlet
-        // 2.2 API does this automatically.
-
-        String absolutePath = getAbsoluteURL(path);
-
-        String encodedURL = _response.encodeRedirectURL(absolutePath);
-
-        _response.sendRedirect(encodedURL);
-    }
-
-    private void section(IMarkupWriter writer, String sectionName)
-    {
-        writer.begin("tr");
-        writer.attribute("class", "request-context-section");
-        writer.begin("th");
-        writer.attribute("colspan", 2);
-
-        writer.print(sectionName);
-        writer.end("tr");
-    }
-
-    private List getSorted(Enumeration e)
-    {
-        List result = new ArrayList();
-
-        // JDK 1.4 includes a helper method in Collections for
-        // this; but we want 1.2 compatibility for the
-        // forseable future.
-
-        while (e.hasMoreElements())
-            result.add(e.nextElement());
-
-        Collections.sort(result);
-
-        return result;
-    }
-
-    /**
-     * Writes the state of the context to the writer, typically for inclusion
-     * in a HTML page returned to the user. This is useful
-     * when debugging.  The Inspector uses this as well.
-     *
-     **/
-
-    public void write(IMarkupWriter writer)
-    {
-        // Create a box around all of this stuff ...
-
-        writer.begin("table");
-        writer.attribute("class", "request-context-border");
-        writer.begin("tr");
-        writer.begin("td");
-
-        // Get the session, if it exists, and display it.
-
-        HttpSession session = getSession();
-
-        if (session != null)
-        {
-            object(writer, "Session");
-            writer.begin("table");
-            writer.attribute("class", "request-context-object");
-
-            section(writer, "Properties");
-            header(writer, "Name", "Value");
-
-            pair(writer, "id", session.getId());
-            datePair(writer, "creationTime", session.getCreationTime());
-            datePair(writer, "lastAccessedTime", session.getLastAccessedTime());
-            pair(writer, "maxInactiveInterval", session.getMaxInactiveInterval());
-            pair(writer, "new", session.isNew());
-
-            List names = getSorted(session.getAttributeNames());
-            int count = names.size();
-
-            for (int i = 0; i < count; i++)
-            {
-                if (i == 0)
-                {
-                    section(writer, "Attributes");
-                    header(writer, "Name", "Value");
-                }
-
-                String name = (String) names.get(i);
-                pair(writer, name, session.getAttribute(name));
-            }
-
-            writer.end(); // Session
-
-        }
-
-        object(writer, "Request");
-        writer.begin("table");
-        writer.attribute("class", "request-context-object");
-
-        // Parameters ...
-
-        List parameters = getSorted(_request.getParameterNames());
-        int count = parameters.size();
-
-        for (int i = 0; i < count; i++)
-        {
-
-            if (i == 0)
-            {
-                section(writer, "Parameters");
-                header(writer, "Name", "Value(s)");
-            }
-
-            String name = (String) parameters.get(i);
-            String[] values = _request.getParameterValues(name);
-
-            writer.begin("tr");
-            writer.attribute("class", getRowClass());
-            writer.begin("th");
-            writer.print(name);
-            writer.end();
-            writer.begin("td");
-
-            if (values.length > 1)
-                writer.begin("ul");
-
-            for (int j = 0; j < values.length; j++)
-            {
-                if (values.length > 1)
-                    writer.beginEmpty("li");
-
-                writer.print(values[j]);
-
-            }
-
-            writer.end("tr");
-        }
-
-        section(writer, "Properties");
-        header(writer, "Name", "Value");
-
-        pair(writer, "authType", _request.getAuthType());
-        pair(writer, "characterEncoding", _request.getCharacterEncoding());
-        pair(writer, "contentLength", _request.getContentLength());
-        pair(writer, "contentType", _request.getContentType());
-        pair(writer, "method", _request.getMethod());
-        pair(writer, "pathInfo", _request.getPathInfo());
-        pair(writer, "pathTranslated", _request.getPathTranslated());
-        pair(writer, "protocol", _request.getProtocol());
-        pair(writer, "queryString", _request.getQueryString());
-        pair(writer, "remoteAddr", _request.getRemoteAddr());
-        pair(writer, "remoteHost", _request.getRemoteHost());
-        pair(writer, "remoteUser", _request.getRemoteUser());
-        pair(writer, "requestedSessionId", _request.getRequestedSessionId());
-        pair(writer, "requestedSessionIdFromCookie", _request.isRequestedSessionIdFromCookie());
-        pair(writer, "requestedSessionIdFromURL", _request.isRequestedSessionIdFromURL());
-        pair(writer, "requestedSessionIdValid", _request.isRequestedSessionIdValid());
-        pair(writer, "requestURI", _request.getRequestURI());
-        pair(writer, "scheme", _request.getScheme());
-        pair(writer, "serverName", _request.getServerName());
-        pair(writer, "serverPort", _request.getServerPort());
-        pair(writer, "contextPath", _request.getContextPath());
-        pair(writer, "servletPath", _request.getServletPath());
-
-        // Now deal with any headers
-
-        List headers = getSorted(_request.getHeaderNames());
-        count = headers.size();
-
-        for (int i = 0; i < count; i++)
-        {
-            if (i == 0)
-            {
-                section(writer, "Headers");
-                header(writer, "Name", "Value");
-            }
-
-            String name = (String) headers.get(i);
-            String value = _request.getHeader(name);
-
-            pair(writer, name, value);
-        }
-
-        // Attributes
-
-        List attributes = getSorted(_request.getAttributeNames());
-        count = attributes.size();
-
-        for (int i = 0; i < count; i++)
-        {
-            if (i == 0)
-            {
-                section(writer, "Attributes");
-                header(writer, "Name", "Value");
-            }
-
-            String name = (String) attributes.get(i);
-
-            pair(writer, name, _request.getAttribute(name));
-        }
-
-        // Cookies ...
-
-        Cookie[] cookies = _request.getCookies();
-
-        if (cookies != null)
-        {
-            for (int i = 0; i < cookies.length; i++)
-            {
-
-                if (i == 0)
-                {
-                    section(writer, "Cookies");
-                    header(writer, "Name", "Value");
-                }
-
-                Cookie cookie = cookies[i];
-
-                pair(writer, cookie.getName(), cookie.getValue());
-
-            } // Cookies loop
-        }
-
-        writer.end(); // Request
-
-        object(writer, "Servlet");
-        writer.begin("table");
-        writer.attribute("class", "request-context-object");
-
-        section(writer, "Properties");
-        header(writer, "Name", "Value");
-
-        pair(writer, "servlet", _servlet);
-        pair(writer, "name", _servlet.getServletName());
-        pair(writer, "servletInfo", _servlet.getServletInfo());
-
-        ServletConfig config = _servlet.getServletConfig();
-
-        List names = getSorted(config.getInitParameterNames());
-        count = names.size();
-
-        for (int i = 0; i < count; i++)
-        {
-
-            if (i == 0)
-            {
-                section(writer, "Init Parameters");
-                header(writer, "Name", "Value");
-            }
-
-            String name = (String) names.get(i);
-            ;
-            pair(writer, name, config.getInitParameter(name));
-
-        }
-
-        writer.end(); // Servlet
-
-        ServletContext context = config.getServletContext();
-
-        object(writer, "Servlet Context");
-        writer.begin("table");
-        writer.attribute("class", "request-context-object");
-
-        section(writer, "Properties");
-        header(writer, "Name", "Value");
-
-        pair(writer, "majorVersion", context.getMajorVersion());
-        pair(writer, "minorVersion", context.getMinorVersion());
-        pair(writer, "serverInfo", context.getServerInfo());
-
-        names = getSorted(context.getInitParameterNames());
-        count = names.size();
-        for (int i = 0; i < count; i++)
-        {
-            if (i == 0)
-            {
-                section(writer, "Initial Parameters");
-                header(writer, "Name", "Value");
-            }
-
-            String name = (String) names.get(i);
-            pair(writer, name, context.getInitParameter(name));
-        }
-
-        names = getSorted(context.getAttributeNames());
-        count = names.size();
-        for (int i = 0; i < count; i++)
-        {
-            if (i == 0)
-            {
-                section(writer, "Attributes");
-                header(writer, "Name", "Value");
-            }
-
-            String name = (String) names.get(i);
-            pair(writer, name, context.getAttribute(name));
-        }
-
-        writer.end(); // Servlet Context
-
-        writeSystemProperties(writer);
-
-        writer.end("table"); // The enclosing border
-    }
-
-    private void writeSystemProperties(IMarkupWriter writer)
-    {
-        Properties properties = null;
-
-        object(writer, "JVM System Properties");
-
-        try
-        {
-            properties = System.getProperties();
-        }
-        catch (SecurityException se)
-        {
-            writer.print("<p>");
-            writer.print(se.toString());
-            return;
-        }
-
-        String pathSeparator = System.getProperty("path.separator", ";");
-
-        writer.begin("table");
-        writer.attribute("class", "request-context-object");
-
-        List names = new ArrayList(properties.keySet());
-        Collections.sort(names);
-        int count = names.size();
-
-        for (int i = 0; i < count; i++)
-        {
-
-            if (i == 0)
-                header(writer, "Name", "Value");
-
-            String name = (String) names.get(i);
-
-            String property = properties.getProperty(name);
-
-            if (property != null && property.indexOf(pathSeparator) > 0 && name.endsWith(".path"))
-            {
-                writer.begin("tr");
-                writer.attribute("class", getRowClass());
-
-                writer.begin("th");
-                writer.print(name);
-                writer.end();
-
-                writer.begin("td");
-                writer.begin("ul");
-
-                StringTokenizer tokenizer = new StringTokenizer(property, pathSeparator);
-
-                while (tokenizer.hasMoreTokens())
-                {
-                    writer.beginEmpty("li");
-                    writer.print(tokenizer.nextToken());
-                }
-
-                writer.end("tr");
-            }
-            else
-            {
-                pair(writer, name, property);
-            }
-        }
-
-        writer.end(); // System Properties
-    }
-
-    /**
-     *  Invokes {@link #write(IMarkupWriter)}, which is used for debugging.
-     *  Does nothing if the cycle is rewinding.
-     *
-     **/
-
-    public void render(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        if (!cycle.isRewinding())
-            write(writer);
-    }
-
-    /**
-     *  Returns the multipart decoder and lazily decodes the request parameters.
-     *  This allows both for this operation to be performed only when really needed
-     *  and for opening the request for reading much later, so that the Engine can
-     *  have a chance to set the encoding that the request needs to use.
-     * 
-     *  @return the multipart decoder or null if not needed for this request
-     *  @since 3.0
-     **/
-    private IMultipartDecoder getDecoder()
-    {
-        if (_decoder != null && !_decoded) {
-            _decoder.decode(_request);
-            _decoded = true;
-        }
-
-        return _decoder;
-    }
-
-    /**
-     *  Sets the multipart decoder to be used for the request.
-     * 
-     *  @param decoder the multipart decoder
-     *  @since 3.0
-     **/
-    public void setDecoder(IMultipartDecoder decoder)
-    {
-        _decoder = decoder;
-        _decoded = false;
-    }
-
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/request/ResponseOutputStream.java b/3.0.4/framework/src/org/apache/tapestry/request/ResponseOutputStream.java
deleted file mode 100644
index d220510..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/request/ResponseOutputStream.java
+++ /dev/null
@@ -1,298 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.request;
-
-import java.io.IOException;
-import java.io.OutputStream;
-import java.net.SocketException;
-
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.tapestry.Tapestry;
-
-/**
- *  A special output stream works with a {@link HttpServletResponse}, buffering
- *  data so as to defer opening the response's output stream.
- *
- *  <p>The buffering is pretty simple because the code
- *  between {@link org.apache.tapestry.IMarkupWriter} and this shows lots of buffering
- *  after the <code>PrintWriter</code> and inside the <code>OutputStreamWriter</code> that
- *  can't be configured.
- *
- *  <p>This class performs some buffering, but it is not all that
- *  useful because the 
- *  {@link org.apache.tapestry.html.Body} component (which will
- *  be used on virtually all Tapestry pages), buffers its wrapped contents
- *  (that is, evertyhing inside the &lt;body&gt; tag in the generated HTML).
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- * 
- **/
-
-public class ResponseOutputStream extends OutputStream
-{
-    private static final Log LOG = LogFactory.getLog(ResponseOutputStream.class);
-
-    /**
-     *  Default size for the buffer (2000 bytes).
-     *
-     **/
-
-    public static final int DEFAULT_SIZE = 2000;
-
-    private int _pos;
-    private int _maxSize;
-    private byte[] _buffer;
-
-    private String _contentType;
-    private HttpServletResponse _response;
-    private OutputStream _out;
-
-    private boolean _discard = false;
-
-    /**
-     *  Creates the stream with the default maximum buffer size.
-     *
-     **/
-
-    public ResponseOutputStream(HttpServletResponse response)
-    {
-        this(response, DEFAULT_SIZE);
-    }
-
-    /**
-     *  Standard constructor.
-     *
-     **/
-
-    public ResponseOutputStream(HttpServletResponse response, int maxSize)
-    {
-        _response = response;
-        _maxSize = maxSize;
-    }
-
-    /**
-     *  Does nothing.  This is because of chaining of <code>close()</code> from
-     *  {@link org.apache.tapestry.IMarkupWriter#close()} ... see {@link #flush()}.
-     * 
-     **/
-
-    public void close() throws IOException
-    {
-        // Does nothing.
-    }
-
-    /**
-     *  Flushes the underlying output stream, if is has been opened.  
-     *
-     *  <p>This method explicitly <em>does not</em> flush the internal buffer ...
-     *  that's because when an {@link org.apache.tapestry.IMarkupWriter} is closed (for instance, because
-     *  an exception is thrown), that <code>close()</code> spawns <code>flush()</code>es
-     *  and <code>close()</code>s throughout the output stream chain, eventually
-     *  reaching this method.
-     *
-     *  @see #forceFlush()
-     *
-     **/
-
-    public void flush() throws IOException
-    {
-        try
-        {
-            if (_out != null)
-                _out.flush();
-        }
-        catch (SocketException ex)
-        {
-            LOG.debug("Socket exception.");
-        }
-    }
-
-    /**
-     *  Writes the internal buffer to the output stream, opening it if necessary, then
-     *  flushes the output stream.  Future writes will go directly to the output stream.
-     *
-     **/
-
-    public void forceFlush() throws IOException
-    {
-        if (_out == null)
-        {
-
-            // In certain cases (such as when the Tapestry service sends a redirect),
-            // there is no output to send back (and no content type set).  In this
-            // case, forceFlush() does nothing.
-
-            if (_buffer == null)
-                return;
-
-            open();
-        }
-
-        try
-        {
-            _out.flush();
-        }
-        catch (SocketException ex)
-        {
-            LOG.debug("Socket exception.");
-        }
-    }
-
-    public String getContentType()
-    {
-        return _contentType;
-    }
-
-    public boolean getDiscard()
-    {
-        return _discard;
-    }
-
-    /**
-     *  Sets the response type to from the contentType property (which
-     *  defaults to "text/html") and gets an output stream
-     *  from the response, then writes the current buffer to it and
-     *  releases the buffer.
-     *
-     *  @throws IOException if the content type has never been set.
-     *
-     **/
-
-    private void open() throws IOException
-    {
-        if (_contentType == null)
-            throw new IOException(Tapestry.getMessage("ResponseOutputStream.content-type-not-set"));
-
-        _response.setContentType(_contentType);
-
-        _out = _response.getOutputStream();
-
-        innerWrite(_buffer, 0, _pos);
-
-        _pos = 0;
-        _buffer = null;
-    }
-
-    /**
-     *  Discards all output in the buffer.  This is used after an error to
-     *  restart the output (so that the error may be presented).
-     *
-     *  <p>Clears the discard flag.
-     *
-     **/
-
-    public void reset() throws IOException
-    {
-        _pos = 0;
-        _discard = false;
-    }
-
-    /**
-     *  Changes the maximum buffer size.  If the new buffer size is smaller
-     *  than the number of
-     *  bytes already in the buffer, the buffer is immediately flushed.
-     *
-     **/
-
-    public void setBufferSize(int value) throws IOException
-    {
-        if (value < _pos)
-        {
-            open();
-            return;
-        }
-
-        _maxSize = value;
-    }
-
-    public void setContentType(String value)
-    {
-        _contentType = value;
-    }
-
-    /**
-     *  Indicates whether the stream should ignore all data written to it.
-     *
-     **/
-
-    public void setDiscard(boolean value)
-    {
-        _discard = value;
-    }
-
-    private void innerWrite(byte[] b, int off, int len) throws IOException
-    {
-        if (b == null || len == 0 || _discard)
-            return;
-
-        try
-        {
-            _out.write(b, off, len);
-        }
-        catch (SocketException ex)
-        {
-            LOG.debug("Socket exception.");
-        }
-    }
-
-    public void write(byte b[], int off, int len) throws IOException
-    {
-        if (len == 0 || _discard)
-            return;
-
-        if (_out != null)
-        {
-            _out.write(b, off, len);
-            return;
-        }
-
-        // If too large for the maximum size buffer, then open the output stream
-        // write out and free the buffer, and write out the new stuff.
-
-        if (_pos + len >= _maxSize)
-        {
-            open();
-            innerWrite(b, off, len);
-            return;
-        }
-
-        // Allocate the buffer when it is initially needed.
-
-        if (_buffer == null)
-            _buffer = new byte[_maxSize];
-
-        // Copy the new bytes into the buffer and advance the position.
-
-        System.arraycopy(b, off, _buffer, _pos, len);
-        _pos += len;
-    }
-
-    public void write(int b) throws IOException
-    {
-        if (_discard)
-            return;
-
-        // This method is rarely called so this little inefficiency is better than
-        // maintaining that ugly buffer expansion code in two places.
-
-        byte[] tiny = new byte[] {(byte) b };
-
-        write(tiny, 0, 1);
-    }
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/resolver/AbstractSpecificationResolver.java b/3.0.4/framework/src/org/apache/tapestry/resolver/AbstractSpecificationResolver.java
deleted file mode 100644
index ac4cafe..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/resolver/AbstractSpecificationResolver.java
+++ /dev/null
@@ -1,200 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.resolver;
-
-import org.apache.tapestry.IEngine;
-import org.apache.tapestry.INamespace;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.IResourceLocation;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.engine.ISpecificationSource;
-import org.apache.tapestry.spec.IApplicationSpecification;
-import org.apache.tapestry.spec.IComponentSpecification;
-import org.apache.tapestry.util.pool.IPoolable;
-
-/**
- *  Base class for resolving a {@link org.apache.tapestry.spec.IComponentSpecification}
- *  for a particular page or component, within a specified 
- *  {@link org.apache.tapestry.INamespace}.  In some cases, a search is necessary.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 3.0
- *
- **/
-
-public class AbstractSpecificationResolver implements IPoolable
-{
-    private ISpecificationSource _specificationSource;
-
-    private INamespace _namespace;
-
-    private IComponentSpecification _specification;
-
-    private IResourceLocation _applicationRootLocation;
-
-    private IResourceLocation _webInfLocation;
-
-    private IResourceLocation _webInfAppLocation;
-
-    private ISpecificationResolverDelegate _delegate;
-
-    public AbstractSpecificationResolver(IRequestCycle cycle)
-    {
-        IEngine engine = cycle.getEngine();
-
-        _specificationSource = engine.getSpecificationSource();
-
-        _applicationRootLocation = Tapestry.getApplicationRootLocation(cycle);
-
-        String servletName =
-            cycle.getRequestContext().getServlet().getServletConfig().getServletName();
-
-        _webInfLocation = _applicationRootLocation.getRelativeLocation("/WEB-INF/");
-
-        _webInfAppLocation = _webInfLocation.getRelativeLocation(servletName + "/");
-
-        IApplicationSpecification specification = engine.getSpecification();
-
-        if (specification.checkExtension(Tapestry.SPECIFICATION_RESOLVER_DELEGATE_EXTENSION_NAME))
-            _delegate =
-                (ISpecificationResolverDelegate) engine.getSpecification().getExtension(
-                    Tapestry.SPECIFICATION_RESOLVER_DELEGATE_EXTENSION_NAME,
-                    ISpecificationResolverDelegate.class);
-        else
-            _delegate = NullSpecificationResolverDelegate.getSharedInstance();
-    }
-
-    /**
-     *  Returns the {@link ISpecificationResolverDelegate} instance registered
-     *  in the application specification as extension
-     *  {@link Tapestry#SPECIFICATION_RESOLVER_DELEGATE_EXTENSION_NAME},
-     *  or null if no such extension exists.
-     * 
-     **/
-
-    public ISpecificationResolverDelegate getDelegate()
-    {
-        return _delegate;
-    }
-
-    /**
-     *  Returns the location of the servlet, within the
-     *  servlet context.
-     * 
-     **/
-
-    protected IResourceLocation getApplicationRootLocation()
-    {
-        return _applicationRootLocation;
-    }
-
-    /**
-     *  Invoked in subclasses to identify the resolved namespace.
-     * 
-     **/
-
-    protected void setNamespace(INamespace namespace)
-    {
-        _namespace = namespace;
-    }
-
-    /**
-     *  Returns the resolve namespace.
-     * 
-     **/
-
-    public INamespace getNamespace()
-    {
-        return _namespace;
-    }
-
-    /**
-     *  Returns the specification source for the running application.
-     * 
-     **/
-
-    protected ISpecificationSource getSpecificationSource()
-    {
-        return _specificationSource;
-    }
-
-    /**
-     *  Returns the location of /WEB-INF/, in the servlet context.
-     * 
-     **/
-
-    protected IResourceLocation getWebInfLocation()
-    {
-        return _webInfLocation;
-    }
-
-    /**
-     *  Returns the location of the application-specific subdirectory, under
-     *  /WEB-INF/, in the servlet context.
-     * 
-     **/
-
-    protected IResourceLocation getWebInfAppLocation()
-    {
-        return _webInfAppLocation;
-    }
-
-    /**
-     *  Returns the resolved specification.
-     * 
-     **/
-
-    public IComponentSpecification getSpecification()
-    {
-        return _specification;
-    }
-
-    /**
-     *  Invoked in subclass to set the final specification the initial
-     *  inputs are resolved to.
-     * 
-     **/
-
-    protected void setSpecification(IComponentSpecification specification)
-    {
-        _specification = specification;
-    }
-
-    /**
-     *  Clears the namespace, specification and simpleName properties.
-     * 
-     **/
-
-    protected void reset()
-    {
-        _namespace = null;
-        _specification = null;
-    }
-
-    /** Does nothing. */
-    public void discardFromPool()
-    {
-
-    }
-
-    /** Invokes {@link #reset()} */
-
-    public void resetForPool()
-    {
-        reset();
-    }
-
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/resolver/ComponentSpecificationResolver.java b/3.0.4/framework/src/org/apache/tapestry/resolver/ComponentSpecificationResolver.java
deleted file mode 100644
index e28b3dc..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/resolver/ComponentSpecificationResolver.java
+++ /dev/null
@@ -1,259 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.resolver;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.tapestry.ApplicationRuntimeException;
-import org.apache.tapestry.ILocation;
-import org.apache.tapestry.INamespace;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.IResourceLocation;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.spec.IComponentSpecification;
-
-/**
- *  Utility class that understands the rules of component types (which
- *  may optionally have a library prefix) and can resolve 
- *  the type to a {@link org.apache.tapestry.INamespace} and a 
- *  {@link org.apache.tapestry.spec.IComponentSpecification}.
- * 
- *  <p>Like {@link org.apache.tapestry.resolver.PageSpecificationResolver},
- *  if the component is not defined explicitly in the namespace, a search
- *  may occur:
- * 
- *  Performs the tricky work of resolving a page name to a page specification.
- *  The search for pages in the application namespace is the most complicated,
- *  since Tapestry searches for pages that aren't explicitly defined in the
- *  application specification.  The search, based on the <i>simple-name</i>
- *  of the page, goes as follows:
- * 
- *  <ul>
- *  <li>As declared in the application specification
- *  <li><i>type</i>.jwc in the same folder as the application specification
- *  <li><i>type</i> jwc in the WEB-INF/<i>servlet-name</i> directory of the context root
- *  <li><i>type</i>.jwc in WEB-INF
- *  <li><i>type</i>.jwc in the application root (within the context root)
- *  <li>By searching the framework namespace
- *  </ul> 
- * 
- *  The search for components in library namespaces is more abbreviated:
- *  <li>As declared in the library specification
- *  <li><i>type</i>.jwc in the same folder as the library specification
- *  <li>By searching the framework namespace
- *  </ul>
- *
- * 
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 3.0
- *
- **/
-
-public class ComponentSpecificationResolver extends AbstractSpecificationResolver
-{
-    private static final Log LOG = LogFactory.getLog(ComponentSpecificationResolver.class);
-
-    private String _type;
-
-    public ComponentSpecificationResolver(IRequestCycle cycle)
-    {
-        super(cycle);
-    }
-
-    protected void reset()
-    {
-        _type = null;
-
-        super.reset();
-    }
-
-    /**
-     *  Passed the namespace of a container (to resolve the type in)
-     *  and the type to resolve, performs the processing.  A "bare type"
-     *  (without a library prefix) may be in the containerNamespace,
-     *  or the framework namespace
-     *  (a search occurs in that order).
-     * 
-     *  @param cycle current request cycle
-     *  @param containerNamespace namespace that may contain
-     *  a library referenced in the type
-     *  @param type the component specification
-     *  to  find, either a simple name, or prefixed with a library id
-     *  (defined for the container namespace)
-     * 
-     *  @see #getNamespace()
-     *  @see #getSpecification()
-     * 
-     **/
-
-    public void resolve(
-        IRequestCycle cycle,
-        INamespace containerNamespace,
-        String type,
-        ILocation location)
-    {
-        int colonx = type.indexOf(':');
-
-        if (colonx > 0)
-        {
-            String libraryId = type.substring(0, colonx);
-            String simpleType = type.substring(colonx + 1);
-
-            resolve(cycle, containerNamespace, libraryId, simpleType, location);
-        }
-        else
-            resolve(cycle, containerNamespace, null, type, location);
-    }
-
-    /**
-     *  Like {@link #resolve(org.apache.tapestry.IRequestCycle, org.apache.tapestry.INamespace, java.lang.String, org.apache.tapestry.ILocation)},
-     *  but used when the type has already been parsed into a library id and a simple type.
-     * 
-     *  @param cycle current request cycle
-     *  @param containerNamespace namespace that may contain
-     *  a library referenced in the type
-     *  @param libraryId the library id within the container namespace, or null
-     *  @param type the component specification
-     *  to  find as a simple name (without a library prefix)
-     *  @param location of reference to be resolved
-     *  @throws ApplicationRuntimeException if the type cannot be resolved
-     * 
-     **/
-
-    public void resolve(
-        IRequestCycle cycle,
-        INamespace containerNamespace,
-        String libraryId,
-        String type,
-        ILocation location)
-    {
-        reset();
-        _type = type;
-
-        INamespace namespace = null;
-
-        if (libraryId != null)
-            namespace = containerNamespace.getChildNamespace(libraryId);
-        else
-            namespace = containerNamespace;
-
-        setNamespace(namespace);
-
-        if (namespace.containsComponentType(type))
-            setSpecification(namespace.getComponentSpecification(type));
-        else
-            searchForComponent(cycle);
-
-        // If not found after search, check to see if it's in
-        // the framework instead.
-
-        if (getSpecification() == null)
-        {
-
-            throw new ApplicationRuntimeException(
-                Tapestry.format(
-                    "Namespace.no-such-component-type",
-                    type,
-                    namespace.getNamespaceId()),
-                location,
-                null);
-
-        }
-    }
-
-    private void searchForComponent(IRequestCycle cycle)
-    {
-        INamespace namespace = getNamespace();
-
-        if (LOG.isDebugEnabled())
-            LOG.debug("Resolving unknown component '" + _type + "' in " + namespace);
-
-        String expectedName = _type + ".jwc";
-        IResourceLocation namespaceLocation = namespace.getSpecificationLocation();
-
-        // Look for appropriate file in same folder as the library (or application)
-        // specificaiton.
-
-        if (found(namespaceLocation.getRelativeLocation(expectedName)))
-            return;
-
-        if (namespace.isApplicationNamespace())
-        {
-
-            // The application namespace gets some extra searching.
-
-            if (found(getWebInfAppLocation().getRelativeLocation(expectedName)))
-                return;
-
-            if (found(getWebInfLocation().getRelativeLocation(expectedName)))
-                return;
-
-            if (found(getApplicationRootLocation().getRelativeLocation(expectedName)))
-                return;
-        }
-
-        // Not in the library or app spec; does it match a component
-        // provided by the Framework?
-
-        INamespace framework = getSpecificationSource().getFrameworkNamespace();
-
-        if (framework.containsComponentType(_type))
-        {
-            setSpecification(framework.getComponentSpecification(_type));
-            return;
-        }
-
-        IComponentSpecification specification =
-            getDelegate().findComponentSpecification(cycle, namespace, _type);
-
-        setSpecification(specification);
-
-        // If not found by here, an exception will be thrown.
-    }
-
-    private boolean found(IResourceLocation location)
-    {
-        if (LOG.isDebugEnabled())
-            LOG.debug("Checking: " + location);
-
-        if (location.getResourceURL() == null)
-            return false;
-
-        setSpecification(getSpecificationSource().getComponentSpecification(location));
-
-        install();
-
-        return true;
-    }
-
-    private void install()
-    {
-        INamespace namespace = getNamespace();
-        IComponentSpecification specification = getSpecification();
-
-        if (LOG.isDebugEnabled())
-            LOG.debug(
-                "Installing component type "
-                    + _type
-                    + " into "
-                    + namespace
-                    + " as "
-                    + specification);
-
-        namespace.installComponentSpecification(_type, specification);
-    }
-
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/resolver/ISpecificationResolverDelegate.java b/3.0.4/framework/src/org/apache/tapestry/resolver/ISpecificationResolverDelegate.java
deleted file mode 100644
index 1cf1525..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/resolver/ISpecificationResolverDelegate.java
+++ /dev/null
@@ -1,72 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.resolver;
-
-import org.apache.tapestry.INamespace;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.spec.IComponentSpecification;
-
-/**
- *  Delegate interface used when a page or component specification
- *  can not be found by the normal means.  This allows hooks
- *  to support specifications from unusual locations, or generated
- *  on the fly.
- * 
- *  <p>The delegate must be coded in a threadsafe manner.
- * 
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 3.0
- *
- **/
-
-public interface ISpecificationResolverDelegate
-{
-    /**
-     *  Invoked by {@link PageSpecificationResolver} to find the indicated
-     *  page specification.  Returns
-     *  the specification, or null.  The specification, if returned, is not cached by Tapestry
-     *  (it is up to the delegate to cache the specification if desired).
-     * 
-     *  @param cycle used to gain access to framework and Servlet API objects
-     *  @param namespace the namespace containing the page
-     *  @param simplePageName the name of the page (without any namespace prefix)
-     * 
-     **/
-
-    public IComponentSpecification findPageSpecification(
-        IRequestCycle cycle,
-        INamespace namespace,
-        String simplePageName);
-
-    /**
-     *  Invoked by {@link PageSpecificationResolver} to find the indicated
-     *  component specification.  Returns
-     *  the specification, or null.  The specification, if returned, is not cached by Tapestry
-     *  (it is up to the delegate to cache the specification if desired).
-     * 
-     *  <p>The delegate must be coded in a threadsafe manner.
-     * 
-     *  @param cycle used to gain access to framework and Servlet API objects
-     *  @param namespace the namespace containing the component
-     *  @param type the component type (without any namespace prefix)
-     * 
-     **/
-
-    public IComponentSpecification findComponentSpecification(
-        IRequestCycle cycle,
-        INamespace namespace,
-        String type);
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/resolver/NullSpecificationResolverDelegate.java b/3.0.4/framework/src/org/apache/tapestry/resolver/NullSpecificationResolverDelegate.java
deleted file mode 100644
index d4731d6..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/resolver/NullSpecificationResolverDelegate.java
+++ /dev/null
@@ -1,68 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.resolver;
-
-import org.apache.tapestry.INamespace;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.spec.IComponentSpecification;
-
-/**
- *  Stand-in class used when the application fails to specify an actual delegate.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 3.0
- *
- **/
-
-public class NullSpecificationResolverDelegate implements ISpecificationResolverDelegate
-{
-    private static NullSpecificationResolverDelegate _shared;
-
-    public static NullSpecificationResolverDelegate getSharedInstance()
-    {
-        if (_shared == null)
-            _shared = new NullSpecificationResolverDelegate();
-
-        return _shared;
-    }
-
-    /**
-     *  Returns null.
-     * 
-     **/
-
-    public IComponentSpecification findPageSpecification(
-        IRequestCycle cycle,
-        INamespace namespace,
-        String simplePageName)
-    {
-        return null;
-    }
-
-    /**
-     *  Returns null.
-     * 
-     **/
-
-    public IComponentSpecification findComponentSpecification(
-        IRequestCycle cycle,
-        INamespace namespace,
-        String type)
-    {
-        return null;
-    }
-
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/resolver/PageSpecificationResolver.java b/3.0.4/framework/src/org/apache/tapestry/resolver/PageSpecificationResolver.java
deleted file mode 100644
index 5c3cfa1..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/resolver/PageSpecificationResolver.java
+++ /dev/null
@@ -1,273 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.resolver;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.tapestry.ApplicationRuntimeException;
-import org.apache.tapestry.INamespace;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.IResourceLocation;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.spec.ComponentSpecification;
-import org.apache.tapestry.spec.IComponentSpecification;
-
-/**
- *  Performs the tricky work of resolving a page name to a page specification.
- *  The search for pages in the application namespace is the most complicated,
- *  since Tapestry searches for pages that aren't explicitly defined in the
- *  application specification.  The search, based on the <i>simple-name</i>
- *  of the page, goes as follows:
- * 
- *  <ul>
- *  <li>As declared in the application specification
- *  <li><i>simple-name</i>.page in the same folder as the application specification
- *  <li><i>simple-name</i> page in the WEB-INF/<i>servlet-name</i> directory of the context root
- *  <li><i>simple-name</i>.page in WEB-INF
- *  <li><i>simple-name</i>.page in the application root (within the context root)
- *  <li><i>simple-name</i>.html as a template in the application root, 
- *      for which an implicit specification is generated
- *  <li>By searching the framework namespace
- *  <li>By invoking {@link org.apache.tapestry.resolver.ISpecificationResolverDelegate#findPageSpecification(IRequestCycle, INamespace, String)}
- *  </ul>
- * 
- *  <p>Pages in a component library are searched for in a more abbreviated fashion:
- *  <ul>
- *  <li>As declared in the library specification
- *  <li><i>simple-name</i>.page in the same folder as the library specification
- *  <li>By searching the framework namespace
- *  <li>By invoking {@link org.apache.tapestry.resolver.ISpecificationResolverDelegate#findPageSpecification(IRequestCycle, INamespace, String)}
- *  </ul>
- *
- *  @see org.apache.tapestry.engine.IPageSource
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 3.0
- *
- **/
-
-public class PageSpecificationResolver extends AbstractSpecificationResolver
-{
-    private static final Log LOG = LogFactory.getLog(PageSpecificationResolver.class);
-
-    private String _simpleName;
-
-    public PageSpecificationResolver(IRequestCycle cycle)
-    {
-        super(cycle);
-    }
-
-    /**
-     *  Resolve the name (which may have a library id prefix) to a namespace
-     *  (see {@link #getNamespace()}) and a specification (see {@link #getSpecification()}).
-     * 
-     *  @throws ApplicationRuntimeException if the name cannot be resolved
-     * 
-     **/
-
-    public void resolve(IRequestCycle cycle, String prefixedName)
-    {
-        reset();
-
-        INamespace namespace = null;
-
-        int colonx = prefixedName.indexOf(':');
-
-        if (colonx > 0)
-        {
-            _simpleName = prefixedName.substring(colonx + 1);
-            String namespaceId = prefixedName.substring(0, colonx);
-
-            if (namespaceId.equals(INamespace.FRAMEWORK_NAMESPACE))
-                namespace = getSpecificationSource().getFrameworkNamespace();
-            else
-                namespace =
-                    getSpecificationSource().getApplicationNamespace().getChildNamespace(
-                        namespaceId);
-        }
-        else
-        {
-            _simpleName = prefixedName;
-
-            namespace = getSpecificationSource().getApplicationNamespace();
-        }
-
-        setNamespace(namespace);
-
-        if (namespace.containsPage(_simpleName))
-        {
-            setSpecification(namespace.getPageSpecification(_simpleName));
-            return;
-        }
-
-        // Not defined in the specification, so it's time to hunt it down.
-
-        searchForPage(cycle);
-
-        if (getSpecification() == null)
-            throw new ApplicationRuntimeException(
-                Tapestry.format(
-                    "Namespace.no-such-page",
-                    _simpleName,
-                    namespace.getNamespaceId()));
-
-    }
-
-    public String getSimplePageName()
-    {
-        return _simpleName;
-    }
-
-    private void searchForPage(IRequestCycle cycle)
-    {
-        INamespace namespace = getNamespace();
-
-        if (LOG.isDebugEnabled())
-            LOG.debug("Resolving unknown page '" + _simpleName + "' in " + namespace);
-
-        String expectedName = _simpleName + ".page";
-
-        IResourceLocation namespaceLocation = namespace.getSpecificationLocation();
-
-        // See if there's a specification file in the same folder
-        // as the library or application specification that's
-        // supposed to contain the page.
-
-        if (found(namespaceLocation.getRelativeLocation(expectedName)))
-            return;
-
-        if (namespace.isApplicationNamespace())
-        {
-
-            // The application namespace gets some extra searching.
-
-            if (found(getWebInfAppLocation().getRelativeLocation(expectedName)))
-                return;
-
-            if (found(getWebInfLocation().getRelativeLocation(expectedName)))
-                return;
-
-            if (found(getApplicationRootLocation().getRelativeLocation(expectedName)))
-                return;
-
-            // The wierd one ... where we see if there's a template in the application root location.
-
-            String templateName = _simpleName + "." + getTemplateExtension();
-
-            IResourceLocation templateLocation =
-                getApplicationRootLocation().getRelativeLocation(templateName);
-
-            if (templateLocation.getResourceURL() != null)
-            {
-                setupImplicitPage(templateLocation);
-                return;
-            }
-
-            // Not found in application namespace, so maybe its a framework page.
-
-            INamespace framework = getSpecificationSource().getFrameworkNamespace();
-
-            if (framework.containsPage(_simpleName))
-            {
-                if (LOG.isDebugEnabled())
-                    LOG.debug("Found " + _simpleName + " in framework namespace.");
-
-                setNamespace(framework);
-
-                // Note:  This implies that normal lookup rules don't work
-                // for the framework!  Framework pages must be
-                // defined in the framework library specification.
-
-                setSpecification(framework.getPageSpecification(_simpleName));
-                return;
-            }
-        }
-
-        // Not found by any normal rule, so its time to
-        // consult the delegate.
-
-        IComponentSpecification specification =
-            getDelegate().findPageSpecification(cycle, namespace, _simpleName);
-            
-        setSpecification(specification);
-    }
-
-    private void setupImplicitPage(IResourceLocation location)
-    {
-        if (LOG.isDebugEnabled())
-            LOG.debug("Found HTML template at " + location);
-		// TODO The SpecFactory in Specification parser should be used in some way to create an IComponentSpecifciation!
-        IComponentSpecification specification = new ComponentSpecification();
-        specification.setPageSpecification(true);
-        specification.setSpecificationLocation(location);
-
-        setSpecification(specification);
-
-        install();
-    }
-
-    private boolean found(IResourceLocation location)
-    {
-        if (LOG.isDebugEnabled())
-            LOG.debug("Checking: " + location);
-
-        if (location.getResourceURL() == null)
-            return false;
-
-        setSpecification(getSpecificationSource().getPageSpecification(location));
-
-        install();
-
-        return true;
-    }
-
-    private void install()
-    {
-        INamespace namespace = getNamespace();
-        IComponentSpecification specification = getSpecification();
-
-        if (LOG.isDebugEnabled())
-            LOG.debug(
-                "Installing page " + _simpleName + " into " + namespace + " as " + specification);
-
-        namespace.installPageSpecification(_simpleName, specification);
-    }
-
-    /**
-     *  If the namespace defines the template extension (as property
-     *  {@link Tapestry#TEMPLATE_EXTENSION_PROPERTY}, then that is used, otherwise
-     *  the default is used.
-     * 
-     **/
-
-    private String getTemplateExtension()
-    {
-        String extension =
-            getNamespace().getSpecification().getProperty(Tapestry.TEMPLATE_EXTENSION_PROPERTY);
-
-        if (extension == null)
-            extension = Tapestry.DEFAULT_TEMPLATE_EXTENSION;
-
-        return extension;
-    }
-    
-    protected void reset()
-    {
-    	_simpleName = null;
-    	
-        super.reset();
-    }
-
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/resource/AbstractResourceLocation.java b/3.0.4/framework/src/org/apache/tapestry/resource/AbstractResourceLocation.java
deleted file mode 100644
index 0aff8d5..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/resource/AbstractResourceLocation.java
+++ /dev/null
@@ -1,108 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.resource;
-
-import java.util.Locale;
-
-import org.apache.tapestry.IResourceLocation;
-
-public abstract class AbstractResourceLocation implements IResourceLocation
-{
-    private String _path;
-    private String _name;
-    private String _folderPath;
-    private Locale _locale;
-
-    protected AbstractResourceLocation(String path)
-    {
-        this(path, null);
-    }
-
-    protected AbstractResourceLocation(String path, Locale locale)
-    {
-        _path = path;
-        _locale = locale;
-    }
-
-    public String getName()
-    {
-        if (_name == null)
-            split();
-
-        return _name;
-    }
-
-    public IResourceLocation getRelativeLocation(String name)
-    {
-        if (name.startsWith("/"))
-        {
-            if (name.equals(_path))
-                return this;
-
-            return buildNewResourceLocation(name);
-        }
-
-        if (_folderPath == null)
-            split();
-
-        if (name.equals(_name))
-            return this;
-
-        return buildNewResourceLocation(_folderPath + name);
-    }
-
-    public String getPath()
-    {
-        return _path;
-    }
-
-    public Locale getLocale()
-    {
-        return _locale;
-    }
-
-
-    protected abstract IResourceLocation buildNewResourceLocation(String path);
-
-    private void split()
-    {
-        int lastSlashx = _path.lastIndexOf('/');
-
-        _folderPath = _path.substring(0, lastSlashx + 1);
-        _name = _path.substring(lastSlashx + 1);
-    }
-
-
-    /**
-     *  Returns true if the other object is an instance of the
-     *  same class, and the paths are equal.
-     * 
-     **/
-
-    public boolean equals(Object obj)
-    {
-        if (obj == null)
-            return false;
-
-        if (obj.getClass().equals(getClass()))
-        {
-            AbstractResourceLocation otherLocation = (AbstractResourceLocation) obj;
-
-            return _path.equals(otherLocation._path);
-        }
-
-        return false;
-    }
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/resource/ClasspathResourceLocation.java b/3.0.4/framework/src/org/apache/tapestry/resource/ClasspathResourceLocation.java
deleted file mode 100644
index 5586dc1..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/resource/ClasspathResourceLocation.java
+++ /dev/null
@@ -1,110 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.resource;
-
-import java.net.URL;
-import java.util.Locale;
-
-import org.apache.commons.lang.builder.HashCodeBuilder;
-import org.apache.tapestry.IResourceLocation;
-import org.apache.tapestry.IResourceResolver;
-import org.apache.tapestry.util.LocalizedResource;
-import org.apache.tapestry.util.LocalizedResourceFinder;
-
-/**
- *  Implementation of {@link org.apache.tapestry.IResourceLocation}
- *  for resources found within the classpath.
- * 
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 3.0
- *
- **/
-
-public class ClasspathResourceLocation extends AbstractResourceLocation
-{
-    private IResourceResolver _resolver;
-
-    public ClasspathResourceLocation(IResourceResolver resolver, String path)
-    {
-        this(resolver, path, null);
-    }
-
-    public ClasspathResourceLocation(IResourceResolver resolver, String path, Locale locale)
-    {
-        super(path, locale);
-
-        _resolver = resolver;
-    }
-
-    /**
-     *  Locates the localization of the
-     *  resource using {@link org.apache.tapestry.util.LocalizedResourceFinder}
-     * 
-     **/
-
-    public IResourceLocation getLocalization(Locale locale)
-    {
-        String path = getPath();
-        LocalizedResourceFinder finder = new LocalizedResourceFinder(_resolver);
-
-        LocalizedResource localizedResource = finder.resolve(path, locale);
-
-        if (localizedResource == null)
-            return null;
-
-        String localizedPath = localizedResource.getResourcePath();
-        Locale pathLocale = localizedResource.getResourceLocale();
-
-        if (localizedPath == null)
-            return null;
-
-        if (path.equals(localizedPath))
-            return this;
-
-        return new ClasspathResourceLocation(_resolver, localizedPath, pathLocale);
-    }
-
-    /**
-     *  Invokes {@link IResourceResolver#getResource(String)}
-     * 
-     **/
-
-    public URL getResourceURL()
-    {
-        return _resolver.getResource(getPath());
-    }
-
-    public String toString()
-    {
-        return "classpath:" + getPath();
-    }
-
-    public int hashCode()
-    {
-        HashCodeBuilder builder = new HashCodeBuilder(4783, 23);
-
-        builder.append(getPath());
-
-        return builder.toHashCode();
-    }
-
-    protected IResourceLocation buildNewResourceLocation(String path)
-    {
-        return new ClasspathResourceLocation(_resolver, path);
-    }
-
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/resource/ContextResourceLocation.java b/3.0.4/framework/src/org/apache/tapestry/resource/ContextResourceLocation.java
deleted file mode 100644
index 4dfbb31..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/resource/ContextResourceLocation.java
+++ /dev/null
@@ -1,125 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.resource;
-
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.util.Locale;
-
-import javax.servlet.ServletContext;
-
-import org.apache.commons.lang.builder.HashCodeBuilder;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.tapestry.IResourceLocation;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.util.LocalizedContextResourceFinder;
-import org.apache.tapestry.util.LocalizedResource;
-
-/**
- *  Implementation of {@link org.apache.tapestry.IResourceLocation}
- *  for resources found within the web application context.
- * 
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 3.0
- *
- **/
-
-public class ContextResourceLocation extends AbstractResourceLocation
-{
-    private static final Log LOG = LogFactory.getLog(ContextResourceLocation.class);
-
-    private ServletContext _context;
-
-    public ContextResourceLocation(ServletContext context, String path)
-    {
-        this(context, path, null);
-    }
-
-    public ContextResourceLocation(ServletContext context, String path, Locale locale)
-    {
-        super(path, locale);
-
-        _context = context;
-    }
-
-    /**
-     *  Locates the resource using {@link LocalizedContextResourceFinder}
-     *  and {@link ServletContext#getResource(java.lang.String)}.
-     * 
-     **/
-
-    public IResourceLocation getLocalization(Locale locale)
-    {
-        LocalizedContextResourceFinder finder = new LocalizedContextResourceFinder(_context);
-
-        String path = getPath();
-        LocalizedResource localizedResource = finder.resolve(path, locale);
-
-        if (localizedResource == null)
-            return null;
-
-        String localizedPath = localizedResource.getResourcePath();
-        Locale pathLocale = localizedResource.getResourceLocale();
-
-        if (localizedPath == null)
-            return null;
-
-        if (path.equals(localizedPath))
-            return this;
-
-        return new ContextResourceLocation(_context, localizedPath, pathLocale);
-    }
-
-    public URL getResourceURL()
-    {
-        try
-        {
-            return _context.getResource(getPath());
-        }
-        catch (MalformedURLException ex)
-        {
-            LOG.warn(
-                Tapestry.format(
-                    "ContextResourceLocation.unable-to-reference-context-path",
-                    getPath()),
-                ex);
-
-            return null;
-        }
-    }
-
-    public String toString()
-    {
-        return "context:" + getPath();
-    }
-
-    public int hashCode()
-    {
-        HashCodeBuilder builder = new HashCodeBuilder(3265, 143);
-
-        builder.append(getPath());
-
-        return builder.toHashCode();
-    }
-
-    protected IResourceLocation buildNewResourceLocation(String path)
-    {
-        return new ContextResourceLocation(_context, path);
-    }
-
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/script/AbstractToken.java b/3.0.4/framework/src/org/apache/tapestry/script/AbstractToken.java
deleted file mode 100644
index 77e5570..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/script/AbstractToken.java
+++ /dev/null
@@ -1,99 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.script;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-import org.apache.tapestry.ApplicationRuntimeException;
-import org.apache.tapestry.ILocation;
-import org.apache.tapestry.IResourceResolver;
-import org.apache.tapestry.util.prop.OgnlUtils;
-
-/**
- *  Base class for creating tokens which may contain other tokens.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 0.2.9
- * 
- **/
-
-abstract class AbstractToken implements IScriptToken
-{
-    private List _tokens;
-    private ILocation _location;
-    private IResourceResolver _resolver;
-
-    protected AbstractToken(ILocation location)
-    {
-        _location = location;
-    }
-
-    public ILocation getLocation()
-    {
-        return _location;
-    }
-
-    public void addToken(IScriptToken token)
-    {
-        if (_tokens == null)
-            _tokens = new ArrayList();
-
-        _tokens.add(token);
-    }
-
-    /**
-     *  Invokes {@link IScriptToken#write(StringBuffer,ScriptSession)}
-     *  on each child token (if there are any).
-     *
-     **/
-
-    protected void writeChildren(StringBuffer buffer, ScriptSession session)
-    {
-        if (_tokens == null)
-            return;
-
-        Iterator i = _tokens.iterator();
-
-        while (i.hasNext())
-        {
-            IScriptToken token = (IScriptToken) i.next();
-
-            token.write(buffer, session);
-        }
-    }
-
-    /**
-     * Evaluates the expression against the session's symbols, using
-     * {@link OgnlUtils#get(String, ClassResolver, Object)} and
-     * returns the result.
-     */
-    protected Object evaluate(String expression, ScriptSession session)
-    {
-        if (_resolver == null)
-            _resolver = session.getRequestCycle().getEngine().getResourceResolver();
-
-        try
-        {
-            return OgnlUtils.get(expression, _resolver, session.getSymbols());
-        }
-        catch (Exception ex)
-        {
-            throw new ApplicationRuntimeException(ex.getMessage(), _location, ex);
-        }
-    }
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/script/AbstractTokenRule.java b/3.0.4/framework/src/org/apache/tapestry/script/AbstractTokenRule.java
deleted file mode 100644
index 1ed6139..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/script/AbstractTokenRule.java
+++ /dev/null
@@ -1,192 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.script;
-
-import org.apache.tapestry.ILocation;
-import org.apache.tapestry.util.xml.BaseRule;
-import org.apache.tapestry.util.xml.RuleDirectedParser;
-
-/**
- * Base class for the rules that build {@link org.apache.tapestry.script.IScriptToken}s.
- * Used with classes that can contain a mix of text and elements (those that
- * accept "full content").
- * 
- *
- * @author Howard Lewis Ship
- * @version $Id$
- * @since 3.0
- **/
-
-abstract class AbstractTokenRule extends BaseRule
-{
-
-    /**
-     * Adds a token to its parent, the top object on the stack.
-     */
-    protected void addToParent(RuleDirectedParser parser, IScriptToken token)
-    {
-        IScriptToken parent = (IScriptToken) parser.peek();
-
-        parent.addToken(token);
-    }
-
-    /**
-     * Peeks at the top object on the stack (which must be a {@link IScriptToken}),
-     * and converts the text into a series of {@link org.apache.tapestry.script.StaticToken} and
-     * {@link org.apache.tapestry.script.InsertToken}s.
-     */
-
-    public void content(RuleDirectedParser parser, String content)
-    {
-        IScriptToken token = (IScriptToken) parser.peek();
-
-        addTextTokens(token, content, parser.getLocation());
-    }
-
-    private static final int STATE_START = 0;
-    private static final int STATE_DOLLAR = 1;
-    private static final int STATE_COLLECT_EXPRESSION = 2;
-
-    /**
-     * Parses the provided text and converts it into a series of 
-     */
-    protected void addTextTokens(IScriptToken token, String text, ILocation location)
-    {
-        char[] buffer = text.toCharArray();
-        int state = STATE_START;
-        int blockStart = 0;
-        int blockLength = 0;
-        int expressionStart = -1;
-        int expressionLength = 0;
-        int i = 0;
-        int braceDepth = 0;
-
-        while (i < buffer.length)
-        {
-            char ch = buffer[i];
-
-            switch (state)
-            {
-                case STATE_START :
-
-                    if (ch == '$')
-                    {
-                        state = STATE_DOLLAR;
-                        i++;
-                        continue;
-                    }
-
-                    blockLength++;
-                    i++;
-                    continue;
-
-                case STATE_DOLLAR :
-
-                    if (ch == '{')
-                    {
-                        state = STATE_COLLECT_EXPRESSION;
-                        i++;
-
-                        expressionStart = i;
-                        expressionLength = 0;
-                        braceDepth = 1;
-
-                        continue;
-                    }
-
-                    // The '$' was just what it was, not the start of a ${} expression
-                    // block, so include it as part of the static text block.
-
-                    blockLength++;
-
-                    state = STATE_START;
-                    continue;
-
-                case STATE_COLLECT_EXPRESSION :
-
-                    if (ch != '}')
-                    {
-                        if (ch == '{')
-                            braceDepth++;
-
-                        i++;
-                        expressionLength++;
-                        continue;
-                    }
-
-                    braceDepth--;
-
-                    if (braceDepth > 0)
-                    {
-                        i++;
-                        expressionLength++;
-                        continue;
-                    }
-
-                    // Hit the closing brace of an expression.
-
-                    // Degenerate case:  the string "${}".
-
-                    if (expressionLength == 0)
-                        blockLength += 3;
-
-                    if (blockLength > 0)
-                        token.addToken(constructStatic(text, blockStart, blockLength, location));
-
-                    if (expressionLength > 0)
-                    {
-                        String expression =
-                            text.substring(expressionStart, expressionStart + expressionLength);
-
-                        token.addToken(new InsertToken(expression, location));
-                    }
-
-                    i++;
-                    blockStart = i;
-                    blockLength = 0;
-
-                    // And drop into state start
-
-                    state = STATE_START;
-
-                    continue;
-            }
-
-        }
-
-        // OK, to handle the end.  Couple of degenerate cases where
-        // a ${...} was incomplete, so we adust the block length.
-
-        if (state == STATE_DOLLAR)
-            blockLength++;
-
-        if (state == STATE_COLLECT_EXPRESSION)
-            blockLength += expressionLength + 2;
-
-        if (blockLength > 0)
-            token.addToken(constructStatic(text, blockStart, blockLength, location));
-    }
-
-    private IScriptToken constructStatic(
-        String text,
-        int blockStart,
-        int blockLength,
-        ILocation location)
-    {
-        String literal = text.substring(blockStart, blockStart + blockLength);
-
-        return new StaticToken(literal, location);
-    }
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/script/BodyRule.java b/3.0.4/framework/src/org/apache/tapestry/script/BodyRule.java
deleted file mode 100644
index 0e0ddfe..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/script/BodyRule.java
+++ /dev/null
@@ -1,43 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.script;
-
-import org.apache.tapestry.util.xml.RuleDirectedParser;
-import org.xml.sax.Attributes;
-
-/**
- * Constructs a {@link org.apache.tapestry.script.BodyToken} from
- * a &lt;body&gt; element, which contains full content.
- *
- * @author Howard Lewis Ship
- * @version $Id$
- * @since 3.0
- */
-class BodyRule extends AbstractTokenRule
-{
-    public void startElement(RuleDirectedParser parser, Attributes attributes)
-    {
-        BodyToken token = new BodyToken(parser.getLocation());
-        addToParent(parser, token);
-
-        parser.push(token);
-    }
-
-    public void endElement(RuleDirectedParser parser)
-    {
-        parser.pop();
-    }
-
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/script/BodyToken.java b/3.0.4/framework/src/org/apache/tapestry/script/BodyToken.java
deleted file mode 100644
index 2bb18d3..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/script/BodyToken.java
+++ /dev/null
@@ -1,55 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.script;
-
-import org.apache.tapestry.ILocation;
-
-
-/**
- *  Generates a String from its child tokens, then applies it
- *  to {@link ScriptSession#setBody(String)}.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 0.2.9
- * 
- **/
-
-class BodyToken extends AbstractToken
-{
-    private int _bufferLengthHighwater = 100;
-
-	public BodyToken(ILocation location)
-	{
-		super(location);
-	}
-
-    public void write(StringBuffer buffer, ScriptSession session)
-    {
-        if (buffer != null)
-            throw new IllegalArgumentException();
-
-        buffer = new StringBuffer(_bufferLengthHighwater);
-
-        writeChildren(buffer, session);
-
-		session.getProcessor().addBodyScript(buffer.toString());
-
-        // Store the buffer length from this run for the next run, since its
-        // going to be approximately the right size.
-
-        _bufferLengthHighwater = Math.max(_bufferLengthHighwater, buffer.length());
-    }
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/script/ForeachRule.java b/3.0.4/framework/src/org/apache/tapestry/script/ForeachRule.java
deleted file mode 100644
index e28c885..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/script/ForeachRule.java
+++ /dev/null
@@ -1,55 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.script;
-
-import org.apache.tapestry.util.xml.RuleDirectedParser;
-import org.xml.sax.Attributes;
-
-/**
- * Constructs a {@link org.apache.tapestry.script.ForeachToken}
- * from a &lt;foreach&gt; element, which contains full content.
- * 
- * <p>As of 3.0, then index attribute has been added to foreach to keep 
- * track of the current index of the iterating collection.</p>
- *
- * @author Howard Lewis Ship, Harish Krishnaswamy
- * @version $Id$
- * @since 3.0
- */
-class ForeachRule extends AbstractTokenRule
-{
-
-    public void endElement(RuleDirectedParser parser)
-    {
-        parser.pop();
-    }
-
-    public void startElement(RuleDirectedParser parser, Attributes attributes)
-    {
-        String key = getAttribute(attributes, "key");
-        String index = getAttribute(attributes, "index");
-        String expression = getAttribute(attributes, "expression");
-
-        if (expression == null)
-            expression = getAttribute(attributes, "property-path"); // 1.0, 1.1 DTD
-
-        IScriptToken token = new ForeachToken(key, index, expression, parser.getLocation());
-
-        addToParent(parser, token);
-
-        parser.push(token);
-    }
-
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/script/ForeachToken.java b/3.0.4/framework/src/org/apache/tapestry/script/ForeachToken.java
deleted file mode 100644
index 472fcf9..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/script/ForeachToken.java
+++ /dev/null
@@ -1,82 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.script;
-
-import java.util.Iterator;
-import java.util.Map;
-
-import org.apache.tapestry.ILocation;
-import org.apache.tapestry.Tapestry;
-
-/**
- *  A looping operator, modeled after the Foreach component.  It takes
- *  as its source as property and iterates through the values, updating
- *  a symbol on each pass.
- * 
- *  <p>As of 3.0, the index attribute has been added to foreach to keep 
- *  track of the current index of the iterating collection.</p>
- *
- *  @author Howard Lewis Ship, Harish Krishnaswamy
- *  @version $Id$
- *  @since 1.0.1
- * 
- **/
-
-class ForeachToken extends AbstractToken
-{
-    private String _key;
-    private String _index;
-    private String _expression;
-
-    ForeachToken(String key, String index, String expression, ILocation location)
-    {
-        super(location);
-
-        _key = key;
-        _index = index;
-        _expression = expression;
-    }
-
-    public void write(StringBuffer buffer, ScriptSession session)
-    {
-        Map symbols = session.getSymbols();
-
-        Object rawSource = evaluate(_expression, session);
-
-        Iterator i = Tapestry.coerceToIterator(rawSource);
-        
-        if (i == null)
-            return;
-
-        int index = 0;
-
-        while (i.hasNext())
-        {
-            Object newValue = i.next();
-
-            symbols.put(_key, newValue);
-            
-            if (_index != null)
-            	symbols.put(_index, String.valueOf(index));
-
-            writeChildren(buffer, session);
-            
-            index++;
-        }
-
-        // We leave the last value as a symbol; don't know if that's
-        // good or bad.
-    }
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/script/IScriptToken.java b/3.0.4/framework/src/org/apache/tapestry/script/IScriptToken.java
deleted file mode 100644
index a181da5..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/script/IScriptToken.java
+++ /dev/null
@@ -1,51 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.script;
-
-import org.apache.tapestry.ILocatable;
-
-
-/**
- *  Defines the responsibilities of a template token used by a
- *  {@link org.apache.tapestry.IScript}.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- * 
- **/
-
-public interface IScriptToken extends ILocatable
-{
-	/**
-	 *  Invoked to have the token
-	 *  add its text to the buffer.  A token may need access
-	 *  to the symbols in order to produce its output.
-	 *
-	 *  <p>Top level tokens (such as BodyToken) can expect that
-	 *  buffer will be null.
-	 *
-	 **/
-
-	public void write(StringBuffer buffer, ScriptSession session);
-
-	/**
-	 *  Invoked during parsing to add the token parameter as a child
-	 *  of this token.
-	 *
-	 *  @since 0.2.9
-	 **/
-
-	public void addToken(IScriptToken token);
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/script/IfRule.java b/3.0.4/framework/src/org/apache/tapestry/script/IfRule.java
deleted file mode 100644
index 244d202..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/script/IfRule.java
+++ /dev/null
@@ -1,57 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.script;
-
-import org.apache.tapestry.util.xml.RuleDirectedParser;
-import org.xml.sax.Attributes;
-
-/**
- * Constructs an {@link org.apache.tapestry.script.IfToken}
- * from an &lt;if&gt; or &lt;if-not&gt; element, which
- * contains full content.
- *
- * @author Howard Lewis Ship
- * @version $Id$
- * @since 3.0
- */
-class IfRule extends AbstractTokenRule
-{
-    private boolean _condition;
-
-    public IfRule(boolean condition)
-    {
-        _condition = condition;
-    }
-
-    public void endElement(RuleDirectedParser parser)
-    {
-        parser.pop();
-    }
-
-    public void startElement(RuleDirectedParser parser, Attributes attributes)
-    {
-        String expression = getAttribute(attributes, "expression");
-
-        if (expression == null)
-            expression = getAttribute(attributes, "property-path"); // 1.0, 1.1 DTD
-    
-    	IScriptToken token = new IfToken(_condition, expression, parser.getLocation());
-    	
-    	addToParent(parser, token);
-    	
-    	parser.push(token);
-    }
-
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/script/IfToken.java b/3.0.4/framework/src/org/apache/tapestry/script/IfToken.java
deleted file mode 100644
index 06ec384..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/script/IfToken.java
+++ /dev/null
@@ -1,54 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.script;
-
-import org.apache.tapestry.ILocation;
-import org.apache.tapestry.Tapestry;
-
-/**
- *  A conditional portion of the generated script.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 1.0.1
- *
- **/
-
-class IfToken extends AbstractToken
-{
-    private boolean _condition;
-    private String _expression;
-
-    IfToken(boolean condition, String expression, ILocation location)
-    {
-        super(location);
-
-        _condition = condition;
-        _expression = expression;
-    }
-
-    private boolean evaluate(ScriptSession session)
-    {
-        Object value = evaluate(_expression, session);
-
-        return Tapestry.evaluateBoolean(value);
-    }
-
-    public void write(StringBuffer buffer, ScriptSession session)
-    {
-        if (evaluate(session) == _condition)
-            writeChildren(buffer, session);
-    }
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/script/IncludeScriptRule.java b/3.0.4/framework/src/org/apache/tapestry/script/IncludeScriptRule.java
deleted file mode 100644
index 02c74f2..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/script/IncludeScriptRule.java
+++ /dev/null
@@ -1,42 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.script;
-
-import org.apache.tapestry.util.xml.BaseRule;
-import org.apache.tapestry.util.xml.RuleDirectedParser;
-import org.xml.sax.Attributes;
-
-/**
- * Constructs an {@link org.apache.tapestry.script.IncludeScriptToken}
- * from a &lt;include-script&gt; element, which contains no content.
- *
- * @author Howard Lewis Ship
- * @version $Id$
- * @since 3.0
- */
-class IncludeScriptRule extends BaseRule
-{
-
-    public void startElement(RuleDirectedParser parser, Attributes attributes)
-    {
-        String path = getAttribute(attributes, "resource-path");
-        
-        IncludeScriptToken token = new IncludeScriptToken(path, parser.getLocation());
-
-		IScriptToken parent = (IScriptToken) parser.peek();
-        parent.addToken(token);
-    }
-
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/script/IncludeScriptToken.java b/3.0.4/framework/src/org/apache/tapestry/script/IncludeScriptToken.java
deleted file mode 100644
index 49a694c..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/script/IncludeScriptToken.java
+++ /dev/null
@@ -1,63 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.script;
-
-import org.apache.tapestry.ILocation;
-import org.apache.tapestry.IResourceLocation;
-import org.apache.tapestry.resource.ClasspathResourceLocation;
-
-/**
- *  A token for included scripts.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 1.0.5
- * 
- **/
-
-class IncludeScriptToken extends AbstractToken
-{
-    private String _resourcePath;
-
-    public IncludeScriptToken(String resourcePath, ILocation location)
-    {
-        super(location);
-
-        _resourcePath = resourcePath;
-    }
-
-    public void write(StringBuffer buffer, ScriptSession session)
-    {
-        IResourceLocation includeLocation = null;
-
-        if (_resourcePath.startsWith("/"))
-        {
-            includeLocation =
-                new ClasspathResourceLocation(
-                    session.getRequestCycle().getEngine().getResourceResolver(),
-                    _resourcePath);
-        }
-        else
-        {
-            IResourceLocation baseLocation = session.getScriptPath();
-            includeLocation = baseLocation.getRelativeLocation(_resourcePath);
-        }
-
-        // TODO: Allow for scripts relative to context resources!
-
-        session.getProcessor().addExternalScript(includeLocation);
-    }
-
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/script/InitRule.java b/3.0.4/framework/src/org/apache/tapestry/script/InitRule.java
deleted file mode 100644
index 8872f99..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/script/InitRule.java
+++ /dev/null
@@ -1,46 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.script;
-
-import org.apache.tapestry.util.xml.RuleDirectedParser;
-import org.xml.sax.Attributes;
-
-/**
- * Constructs an {@link org.apache.tapestry.script.InitToken}
- * from an &lt;initialization&gt; element, which
- * contains full content.
- *
- * @author Howard Lewis Ship
- * @version $Id$
- * @since 3.0
- */
-public class InitRule extends AbstractTokenRule
-{
-
-    public void endElement(RuleDirectedParser parser)
-    {
-		parser.pop();
-    }
-
-    public void startElement(RuleDirectedParser parser, Attributes attributes)
-    {
-		IScriptToken token = new InitToken(parser.getLocation());
-		
-		addToParent(parser, token);
-		
-		parser.push(token);
-    }
-
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/script/InitToken.java b/3.0.4/framework/src/org/apache/tapestry/script/InitToken.java
deleted file mode 100644
index 882a995..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/script/InitToken.java
+++ /dev/null
@@ -1,54 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.script;
-
-import org.apache.tapestry.ILocation;
-
-/**
- *  Generates a String from its child tokens, then applies it
- *  to {@link ScriptSession#setInitialization(String)}.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 0.2.9
- *
- **/
-
-class InitToken extends AbstractToken
-{
-    private int _bufferLengthHighwater = 100;
-
-    public InitToken(ILocation location)
-    {
-        super(location);
-    }
-
-    public void write(StringBuffer buffer, ScriptSession session)
-    {
-        if (buffer != null)
-            throw new IllegalArgumentException();
-
-        buffer = new StringBuffer(_bufferLengthHighwater);
-
-        writeChildren(buffer, session);
-
-        session.getProcessor().addInitializationScript(buffer.toString());
-
-        // Store the buffer length from this run for the next run, since its
-        // going to be approximately the right size.
-
-        _bufferLengthHighwater = Math.max(_bufferLengthHighwater, buffer.length());
-    }
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/script/InputSymbolRule.java b/3.0.4/framework/src/org/apache/tapestry/script/InputSymbolRule.java
deleted file mode 100644
index 042f4f3..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/script/InputSymbolRule.java
+++ /dev/null
@@ -1,77 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.script;
-
-import org.apache.tapestry.IResourceResolver;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.util.xml.BaseRule;
-import org.apache.tapestry.util.xml.DocumentParseException;
-import org.apache.tapestry.util.xml.RuleDirectedParser;
-import org.xml.sax.Attributes;
-
-/**
- * Constructs an {@link org.apache.tapestry.script.InputSymbolToken}
- * from an &lt;input-symbol&gt; element.
- *
- * @author Howard Lewis Ship
- * @version $Id$
- * @since 3.0
- */
-class InputSymbolRule extends BaseRule
-{
-    private IResourceResolver _resolver;
-
-    public InputSymbolRule(IResourceResolver resolver)
-    {
-        _resolver = resolver;
-    }
-
-    public void startElement(RuleDirectedParser parser, Attributes attributes)
-    {
-        String key = getAttribute(attributes, "key");
-
-        parser.validate(key, Tapestry.SIMPLE_PROPERTY_NAME_PATTERN, "ScriptParser.invalid-key");
-
-        String className = getAttribute(attributes, "class");
-        Class expectedClass = lookupClass(parser, className);
-
-        String required = getAttribute(attributes, "required");
-
-        InputSymbolToken token =
-            new InputSymbolToken(key, expectedClass, required.equals("yes"), parser.getLocation());
-
-        IScriptToken parent = (IScriptToken) parser.peek();
-        parent.addToken(token);
-    }
-
-    private Class lookupClass(RuleDirectedParser parser, String className)
-    {
-        if (Tapestry.isBlank(className))
-            return null;
-
-        try
-        {
-            return _resolver.findClass(className);
-        }
-        catch (Exception ex)
-        {
-            throw new DocumentParseException(
-                Tapestry.format("ScriptParser.unable-to-resolve-class", className),
-                parser.getDocumentLocation(),
-                parser.getLocation(),
-                ex);
-        }
-    }
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/script/InputSymbolToken.java b/3.0.4/framework/src/org/apache/tapestry/script/InputSymbolToken.java
deleted file mode 100644
index dbecfd6..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/script/InputSymbolToken.java
+++ /dev/null
@@ -1,68 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.script;
-
-import org.apache.tapestry.ApplicationRuntimeException;
-import org.apache.tapestry.ILocation;
-import org.apache.tapestry.Tapestry;
-
-/**
- *  A token that validates that an input symbol exists or is of a
- *  declared type.
- *
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 2.2
- * 
- **/
-
-class InputSymbolToken extends AbstractToken
-{
-    private String _key;
-    private Class _class;
-    private boolean _required;
-
-    InputSymbolToken(String key, Class clazz, boolean required, ILocation location)
-    {
-        super(location);
-
-        _key = key;
-        _class = clazz;
-        _required = required;
-    }
-
-    public void write(StringBuffer buffer, ScriptSession session)
-    {
-        Object value = session.getSymbols().get(_key);
-
-        if (_required && value == null)
-            throw new ApplicationRuntimeException(
-                Tapestry.format("InputSymbolToken.required", _key),
-                getLocation(),
-                null);
-
-        if (value != null && _class != null && !_class.isAssignableFrom(value.getClass()))
-            throw new ApplicationRuntimeException(
-                Tapestry.format(
-                    "InputSymbolToken.wrong-type",
-                    _key,
-                    value.getClass().getName(),
-                    _class.getName()),
-                getLocation(),
-                null);
-    }
-
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/script/InsertRule.java b/3.0.4/framework/src/org/apache/tapestry/script/InsertRule.java
deleted file mode 100644
index c3b919f..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/script/InsertRule.java
+++ /dev/null
@@ -1,53 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.script;
-
-import org.apache.tapestry.util.xml.RuleDirectedParser;
-import org.xml.sax.Attributes;
-
-/**
- * Constructs an {@link org.apache.tapestry.script.InsertToken}
- * from an &lt;insert&gt; element, which contains full content.
- * &lt;insert&gt; is a throwback to the 1.0 and 1.1 DTDs.
- *
- * @author Howard Lewis Ship
- * @version $Id$
- * @since 3.0
- */
-class InsertRule extends AbstractTokenRule
-{
-
-    public void endElement(RuleDirectedParser parser)
-    {
-        parser.pop();
-    }
-
-    public void startElement(RuleDirectedParser parser, Attributes attributes)
-    {
-        // property-path is really an OGNL expression.
-        String expression = getAttribute(attributes, "property-path");
-
-        // Was called key in the 1.0 DTD
-        if (expression == null)
-            expression = getAttribute(attributes, "key");
-
-        IScriptToken token = new InsertToken(expression, parser.getLocation());
-
-        addToParent(parser, token);
-
-        parser.push(token);
-    }
-
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/script/InsertToken.java b/3.0.4/framework/src/org/apache/tapestry/script/InsertToken.java
deleted file mode 100644
index fb34dc7..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/script/InsertToken.java
+++ /dev/null
@@ -1,58 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.script;
-
-import org.apache.tapestry.ILocation;
-
-/**
- *  A token that writes the value of a property using a property path
- *  routed in the symbols..
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *
- **/
-
-class InsertToken extends AbstractToken
-{
-    private String _expression;
-
-    InsertToken(String expression, ILocation location)
-    {
-        super(location);
-
-        _expression = expression;
-    }
-
-    /**
-     *  Gets the named symbol from the symbols {@link Map}, verifies that
-     *  it is a String, and writes it to the {@link Writer}.
-     *
-     **/
-
-    public void write(StringBuffer buffer, ScriptSession session)
-    {
-        Object value = evaluate(_expression, session);
-
-        if (value != null)
-            buffer.append(value);
-    }
-
-    public void addToken(IScriptToken token)
-    {
-        // Should never be invoked.
-    }
-
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/script/LetRule.java b/3.0.4/framework/src/org/apache/tapestry/script/LetRule.java
deleted file mode 100644
index 63aef50..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/script/LetRule.java
+++ /dev/null
@@ -1,53 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.script;
-
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.util.xml.RuleDirectedParser;
-import org.xml.sax.Attributes;
-
-/**
- * Constructs an {@link org.apache.tapestry.script.LetToken}
- * from a &lt;let&gt; element, which may contain full content.
- *
- * @author Howard Lewis Ship
- * @version $Id$
- * @since 3.0
- */
-class LetRule extends AbstractTokenRule
-{
-
-    public void startElement(RuleDirectedParser parser, Attributes attributes)
-    {
-        String key = getAttribute(attributes, "key");
-        
-        String unique = getAttribute(attributes, "unique");
-        boolean uniqueFlag = unique != null && unique.equals("yes"); 
-
-        parser.validate(key, Tapestry.SIMPLE_PROPERTY_NAME_PATTERN, "ScriptParser.invalid-key");
-
-        LetToken token = new LetToken(key, uniqueFlag, parser.getLocation());
-
-        addToParent(parser, token);
-
-        parser.push(token);
-    }
-
-    public void endElement(RuleDirectedParser parser)
-    {
-        parser.pop();
-    }
-
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/script/LetToken.java b/3.0.4/framework/src/org/apache/tapestry/script/LetToken.java
deleted file mode 100644
index 8561ec4..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/script/LetToken.java
+++ /dev/null
@@ -1,73 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.script;
-
-import java.util.Map;
-
-import org.apache.tapestry.ILocation;
-
-/**
- *  Allows for the creation of new symbols that can be used in the script
- *  or returned to the caller.
- *
- *  <p>The &lt;let&gt; tag wraps around static text and &lt;insert&gt;
- *  elements.  The results are trimmed.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 0.2.9
- * 
- **/
-
-class LetToken extends AbstractToken
-{
-    private String _key;
-    private boolean _unique;
-    private int _bufferLengthHighwater = 20;
-
-    public LetToken(String key, boolean unique, ILocation location)
-    {
-        super(location);
-
-        _key = key;
-        _unique = unique;
-    }
-
-    public void write(StringBuffer buffer, ScriptSession session)
-    {
-        if (buffer != null)
-            throw new IllegalArgumentException();
-
-        buffer = new StringBuffer(_bufferLengthHighwater);
-
-        writeChildren(buffer, session);
-
-        // Store the symbol back into the root set of symbols.
-
-        Map symbols = session.getSymbols();
-
-        String value = buffer.toString().trim();
-
-        if (_unique)
-            value = session.getProcessor().getUniqueString(value);
-
-        symbols.put(_key, value);
-
-        // Store the buffer length from this run for the next run, since its
-        // going to be approximately the right size.
-
-        _bufferLengthHighwater = Math.max(_bufferLengthHighwater, buffer.length());
-    }
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/script/ParsedScript.java b/3.0.4/framework/src/org/apache/tapestry/script/ParsedScript.java
deleted file mode 100644
index 94e7036..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/script/ParsedScript.java
+++ /dev/null
@@ -1,68 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.script;
-
-import java.util.Map;
-
-import org.apache.tapestry.ILocation;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.IResourceLocation;
-import org.apache.tapestry.IScript;
-import org.apache.tapestry.IScriptProcessor;
-
-/**
- *  A top level container for a number of {@link IScriptToken script tokens}.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 0.2.9
- * 
- **/
-
-public class ParsedScript extends AbstractToken implements IScript
-{
-    private IResourceLocation _scriptLocation;
-
-    public ParsedScript(ILocation location)
-    {
- 		super(location);
- 		
- 		_scriptLocation = location.getResourceLocation();
-    }
-
-    public IResourceLocation getScriptLocation()
-    {
-        return _scriptLocation;
-    }
-
-	/**
-	 * Creates the {@link ScriptSession} and invokes 
-	 * {@link org.apache.tapestry.script.AbstractToken#writeChildren(java.lang.StringBuffer, org.apache.tapestry.script.ScriptSession)}.
-	 */
-    public void execute(IRequestCycle cycle, IScriptProcessor processor, Map symbols)
-    {
-        ScriptSession session = new ScriptSession(_scriptLocation, cycle, processor, symbols);
-		writeChildren(null, session);
-    }
-    
-    /** 
-     * Does nothing; never invoked. 
-     */
-    public void write(StringBuffer buffer, ScriptSession session)
-    {
-
-    }
-
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/script/ScriptParser.java b/3.0.4/framework/src/org/apache/tapestry/script/ScriptParser.java
deleted file mode 100644
index 5efe0de..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/script/ScriptParser.java
+++ /dev/null
@@ -1,118 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.script;
-
-import org.apache.tapestry.IResourceLocation;
-import org.apache.tapestry.IResourceResolver;
-import org.apache.tapestry.IScript;
-import org.apache.tapestry.util.xml.DocumentParseException;
-import org.apache.tapestry.util.xml.RuleDirectedParser;
-
-/**
- *  Parses a Tapestry Script, an XML file defined by one of the following
- *  public identifiers:
- *  <ul>
- *  <li><code>-//Primix Solutions//Tapestry Script 1.0//EN</code></li> 
- *  <li><code>-//Howard Ship//Tapestry Script 1.1//EN</code></li>
- *  <li><code>-//Howard Lewis Ship//Tapestry Script 1.2//EN</code></li>
- * .
- *
- *  <p>The version 1.1, is largely backwards compatible to the
- *  old script, but adds a number of new features (if, if-not, foreach
- *  and the use of property paths with insert).
- * 
- *  <p>Version 1.2 removes the &lt;insert&gt; element, using an Ant-like
- *  syntax (<code>${<i>expression</i>}</code>).  It also replaces
- *  the attribute name <code>property-path</code> with <code>expression</code>
- *  (because OGNL is used).
- *
- *  <p>A Tapestry Script is used, in association with the 
- *  {@link org.apache.tapestry.html.Body} and/or 
- *  {@link org.apache.tapestry.html.Script} components,
- *  to generate JavaScript for use with a Tapestry component.  Two seperate pieces
- *  of JavaScript can be generated.  The body section (associated with the <code>body</code>
- *  element of the XML document) is typically used to define JavaScript functions
- *  (most often, event handlers).  The initialization section
- *  (associated with the <code>initialization</code> element of the XML document)
- *  is used to add JavaScript that will be evaluated when the page finishes loading
- *  (i.e., from the HTML &lt;body&gt; element's onLoad event handler).
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- * 
- **/
-
-public class ScriptParser
-{
-    private RuleDirectedParser _parser;
-
-    public static final String SCRIPT_DTD_1_0_PUBLIC_ID =
-        "-//Primix Solutions//Tapestry Script 1.0//EN";
-
-    public static final String SCRIPT_DTD_1_1_PUBLIC_ID = "-//Howard Ship//Tapestry Script 1.1//EN";
-
-    public static final String SCRIPT_DTD_1_2_PUBLIC_ID =
-        "-//Howard Lewis Ship//Tapestry Script 1.2//EN";
-
-    /** @since 3.0 */
-    public static final String SCRIPT_DTD_3_0_PUBLIC_ID =
-        "-//Apache Software Foundation//Tapestry Script Specification 3.0//EN";
-
-    public ScriptParser(IResourceResolver resolver)
-    {
-        _parser = new RuleDirectedParser();
-
-        _parser.registerEntity(
-            SCRIPT_DTD_1_0_PUBLIC_ID,
-            "/org/apache/tapestry/script/Script_1_0.dtd");
-        _parser.registerEntity(
-            SCRIPT_DTD_1_1_PUBLIC_ID,
-            "/org/apache/tapestry/script/Script_1_1.dtd");
-        _parser.registerEntity(
-            SCRIPT_DTD_1_2_PUBLIC_ID,
-            "/org/apache/tapestry/script/Script_1_2.dtd");
-        _parser.registerEntity(
-            SCRIPT_DTD_3_0_PUBLIC_ID,
-            "/org/apache/tapestry/script/Script_3_0.dtd");
-
-        _parser.addRule("script", new ScriptRule());
-        _parser.addRule("let", new LetRule());
-        _parser.addRule("set", new SetRule());
-        _parser.addRule("include-script", new IncludeScriptRule());
-        _parser.addRule("input-symbol", new InputSymbolRule(resolver));
-        _parser.addRule("body", new BodyRule());
-        _parser.addRule("initialization", new InitRule());
-        _parser.addRule("if", new IfRule(true));
-        _parser.addRule("if-not", new IfRule(false));
-        _parser.addRule("foreach", new ForeachRule());
-        _parser.addRule("unique", new UniqueRule());
-
-        // This will go away when the 1.1 and earler DTDs are retired.
-        _parser.addRule("insert", new InsertRule());
-
-    }
-
-    /**
-     *  Parses the given input stream to produce a parsed script,
-     *  ready to execute.
-     *
-     **/
-
-    public IScript parse(IResourceLocation resourceLocation) throws DocumentParseException
-    {
-        return (IScript) _parser.parse(resourceLocation);
-    }
-
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/script/ScriptRule.java b/3.0.4/framework/src/org/apache/tapestry/script/ScriptRule.java
deleted file mode 100644
index 7eccad8..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/script/ScriptRule.java
+++ /dev/null
@@ -1,43 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.script;
-
-import org.apache.tapestry.util.xml.BaseRule;
-import org.apache.tapestry.util.xml.RuleDirectedParser;
-import org.xml.sax.Attributes;
-
-/**
- * Rule for &lt;script&gt; element.  Creates a {@link org.apache.tapestry.script.ParsedScript}.
- *
- * @author Howard Lewis Ship
- * @version $Id$
- * @since 3.0
- */
-public class ScriptRule extends BaseRule
-{
-
-    public void endElement(RuleDirectedParser parser)
-    {
-        parser.pop();
-    }
-
-    public void startElement(RuleDirectedParser parser, Attributes attributes)
-    {
-        ParsedScript script = new ParsedScript(parser.getLocation());
-
-        parser.push(script);
-    }
-
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/script/ScriptSession.java b/3.0.4/framework/src/org/apache/tapestry/script/ScriptSession.java
deleted file mode 100644
index a8dae06..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/script/ScriptSession.java
+++ /dev/null
@@ -1,84 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.script;
-
-import java.util.Map;
-
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.IResourceLocation;
-import org.apache.tapestry.IScriptProcessor;
-
-/**
- *  The result of executing a script, the session is used during the parsing
- *  process as well.  Following {@link org.apache.tapestry.IScript#execute(org.apache.tapestry.IRequestCycle, org.apache.tapestry.IScriptProcessor, java.util.Map)}, the session
- *  provides access to output symbols as well as the body and initialization
- *  blocks created by the script tokens.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 0.2.9
- * 
- **/
-
-public class ScriptSession
-{
-    private IRequestCycle _cycle;
-    private IScriptProcessor _processor;
-    private IResourceLocation _scriptLocation;
-    private Map _symbols;
-
-    public ScriptSession(
-        IResourceLocation scriptLocation,
-        IRequestCycle cycle,
-        IScriptProcessor processor,
-        Map symbols)
-    {
-        _scriptLocation = scriptLocation;
-        _cycle = cycle;
-        _processor = processor;
-        _symbols = symbols;
-    }
-
-    public IResourceLocation getScriptPath()
-    {
-        return _scriptLocation;
-    }
-
-    public Map getSymbols()
-    {
-        return _symbols;
-    }
-
-	public IRequestCycle getRequestCycle()
-	{
-		return _cycle;
-	}
-
-    public IScriptProcessor getProcessor()
-    {
-        return _processor;
-    }
-
-    public String toString()
-    {
-        StringBuffer buffer = new StringBuffer();
-
-        buffer.append("ScriptSession[");
-        buffer.append(_scriptLocation);
-        buffer.append(']');
-
-        return buffer.toString();
-    }
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/script/Script_1_0.dtd b/3.0.4/framework/src/org/apache/tapestry/script/Script_1_0.dtd
deleted file mode 100644
index 5c91d5d..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/script/Script_1_0.dtd
+++ /dev/null
@@ -1,64 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>

-<!-- $Id: Script_1_0.dtd,v 1.3 2002/05/02 17:52:39 hship Exp $ -->

-<!--DTD for the files used with the ScriptGenerator class and Script component.  This is recognized with the public identifier:

-

-	-//Primix Solutions//Tapestry Script 1.0//EN

-

--->

-

-<!--

-

-Element: script

-

-Root element.

-

--->

-

-<!ELEMENT script (let*, body?, initialization?)>

-

-<!--

-

-Element: let

-Contained by: script

-

-Used to create a new symbol.

-

--->

-

-<!ELEMENT let (#PCDATA | insert)*>

-<!ATTLIST let

-	key CDATA #REQUIRED

->

-

-<!--

-

-Element: body

-Contained by: script

-

-Allows a mix of text and insert elements.  This text is added to

-the large scripting block just before the <body> tag.

--->

-

-<!ELEMENT body (#PCDATA | insert)*>

-

-<!--

-Element: initialization

-Contained by: script

-

-Text in this block is added to the event handler for the <body>

-tag's onLoad event.

--->

-

-<!ELEMENT initialization (#PCDATA | insert)*>

-

-<!--

-Element: insert

-Contained by: body, initialization

-

-Allows an arbitrary symbol to be inserted.

--->

-

-<!ELEMENT insert (#PCDATA)>

-<!ATTLIST insert

-	key CDATA #REQUIRED

->

diff --git a/3.0.4/framework/src/org/apache/tapestry/script/Script_1_1.dtd b/3.0.4/framework/src/org/apache/tapestry/script/Script_1_1.dtd
deleted file mode 100644
index 911624c..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/script/Script_1_1.dtd
+++ /dev/null
@@ -1,137 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>

-<!-- $Id: Script_1_1.dtd,v 1.3 2002/05/02 17:52:39 hship Exp $ -->

-<!--

-

-DTD for the files used with the ScriptGenerator class and Script component.  

-This is recognized with the public identifier:

-

-	-//Howard Ship//Tapestry Script 1.1//EN

-

-The canonical location for the DTD is:

-

-	http://tapestry.sf.net/dtd/Tapestry_1_1.dtd

-

-The root element is always script.

-	

--->

-<!-- =======================================================

-

-Entity: full-content

-

-Identifies the contents of most of the other elements.

-

--->

-<!ENTITY % full-content "(#PCDATA | foreach | insert | if | if-not)*">

-<!-- =======================================================

-

-Element: body

-Contained by: script

-

-Allows a mix of text and insert elements.  This text is added to

-the large scripting block just before the <body> tag.

--->

-<!ELEMENT body %full-content;>

-<!-- =======================================================

-

-Element: foreach

-Appears in: %full-content;

-

-Iterates over a list of items; this is modeled after the

-Foreach component.  No iteration occurs if the value

-from the property path is null.

-

-Attributes:

-  key: Defines the symbol into which each succesive value is stored.

-  property-path: The source of values.

--->

-<!ELEMENT foreach %full-content;>

-<!ATTLIST foreach

-  key CDATA #REQUIRED

-  property-path CDATA #REQUIRED

->

-

-<!-- =======================================================

-Element: include-script

-Contained by: script

-

-Inserts a reference to an external, static, JavaScript file.

-

-Attributes:

-  resource-path: The path to the script within the classpath.

--->

-<!ELEMENT include-script EMPTY>

-<!ATTLIST include-script

-  resource-path CDATA #REQUIRED

->

-

-<!-- =======================================================

-

-Element: if

-Appears in: %full-content;

-

-Creates a conditional portion of the script; The body of the element 

-is only included if the property-path evaulates to true.

-

--->

-<!ELEMENT if %full-content;>

-<!ATTLIST if

-  property-path CDATA #REQUIRED

->

-<!-- =======================================================

-

-Element: if-not

-Appears in: %full-content;

-

-Creates a conditional portion of the script; The body of the element 

-is only included if the property-path evaulates to false.

-

--->

-<!ELEMENT if-not %full-content;>

-<!ATTLIST if-not

-  property-path CDATA #REQUIRED

->

-<!-- =======================================================

-Element: initialization

-Contained by: script

-

-Text in this block is added to the event handler for the <body>

-tag's onLoad event.

--->

-<!ELEMENT initialization %full-content;>

-<!-- =======================================================

-Element: insert

-Contained by: body, initialization

-

-Allows an arbitrary symbol to be inserted.

-

-Attributes:

-  property-path: The path to the value to insert.

--->

-<!ELEMENT insert EMPTY>

-<!ATTLIST insert

-  property-path CDATA #REQUIRED

->

-

-<!-- =======================================================

-

-Element: let

-Contained by: script

-

-Used to create a new symbol.

-

--->

-<!ELEMENT let %full-content;>

-<!ATTLIST let

-  key CDATA #REQUIRED

->

-<!-- =======================================================

-

-Element: script

-

-Root element.

-

-Allows zero or more let elements (to establish new symbols),

-followed by a body and/or initialization element.

-

--->

-<!ELEMENT script (include-script*, let*, body?, initialization?)>

diff --git a/3.0.4/framework/src/org/apache/tapestry/script/Script_1_2.dtd b/3.0.4/framework/src/org/apache/tapestry/script/Script_1_2.dtd
deleted file mode 100644
index 52ef476..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/script/Script_1_2.dtd
+++ /dev/null
@@ -1,168 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>

-<!-- $Id: Script_1_2.dtd,v 1.3 2002/09/16 19:33:02 hship Exp $ -->

-<!--

-

-DTD for the files used with the ScriptParser class and Script component.  

-This is recognized with the public identifier:

-

-	-//Howard Lewis Ship//Tapestry Script 1.2//EN

-

-The canonical location for the DTD is:

-

-	http://tapestry.sf.net/dtd/Script_1_2.dtd

-

-The root element is always script.

-	

--->

-<!-- =======================================================

-

-Entity: full-content

-

-Identifies the contents of most of the other elements.

-

--->

-<!ENTITY % full-content "(#PCDATA | foreach | if | if-not)*">

-<!-- =======================================================

-

-Element: body

-Contained by: script

-

-Allows a mix of text and insert elements.  This text is added to

-the large scripting block just before the <body> tag.

--->

-<!ELEMENT body %full-content;>

-<!-- =======================================================

-

-Element: foreach

-Appears in: %full-content;

-

-Iterates over a list of items; this is modeled after the

-Foreach component.  No iteration occurs if the value

-from the property path is null.

-

-Attributes:

-  key: Defines the symbol into which each succesive value is stored.

-  expression: The source of values, as an OGNL expression rooted in the symbols Map.

--->

-<!ELEMENT foreach %full-content;>

-<!ATTLIST foreach

-  key CDATA #REQUIRED

-  expression CDATA #REQUIRED

->

-

-<!-- =======================================================

-Element: include-script

-Contained by: script

-

-Inserts a reference to an external, static, JavaScript file.

-

-Attributes:

-  resource-path: The path to the script within the classpath.

--->

-<!ELEMENT include-script EMPTY>

-<!ATTLIST include-script

-  resource-path CDATA #REQUIRED

->

-

-<!-- =======================================================

-

-Element: if

-Appears in: %full-content;

-

-Creates a conditional portion of the script; The body of the element 

-is only included if the expression evaulates to true.

-

-Attributes:

-  expression: The trigger expression, as an OGNL expression rooted in 

-    the symbols Map.

-

--->

-<!ELEMENT if %full-content;>

-<!ATTLIST if

-  expression CDATA #REQUIRED

->

-<!-- =======================================================

-

-Element: if-not

-Appears in: %full-content;

-

-Creates a conditional portion of the script; The body of the element 

-is only included if the property-path evaulates to false.

-

-Attributes:

-  expression: The trigger expression, as an OGNL expression rooted in 

-    the symbols Map.

-

--->

-<!ELEMENT if-not %full-content;>

-<!ATTLIST if-not

-  expression CDATA #REQUIRED

->

-<!-- =======================================================

-Element: initialization

-Contained by: script

-

-Text in this block is added to the event handler for the <body>

-tag's onLoad event.

--->

-<!ELEMENT initialization %full-content;>

-

-

-

-<!-- =======================================================

-Element: input-symbol

-Contained by: script

-

-Defines an input symbol used by the script.

-Attributes:

-  key: The name of the symbol.

-  class:  If specified, the exected class or interface for the symbol.

-  required: If yes, then the symbol must be non-null.

--->

-

-<!ELEMENT input-symbol EMPTY>

-<!ATTLIST input-symbol

-  key CDATA #REQUIRED

-  class CDATA #IMPLIED

-  required (yes|no) "no"

->

-

-<!-- =======================================================

-

-Element: let

-Contained by: script

-

-Used to create a new symbol.

-

--->

-<!ELEMENT let %full-content;>

-<!ATTLIST let

-  key CDATA #REQUIRED

->

-<!-- =======================================================

-

-Element: script

-

-Root element.

-

-Allows zero or more let elements (to establish new symbols),

-followed by a body and/or initialization element.

-

--->

-<!ELEMENT script (include-script*, input-symbol*, 

-	(let | set)*, body?, initialization?)>

-

-

-<!-- =======================================================

-

-Element: set

-Contained by: script

-

-Creates a new symbol as the result of evaluating an OGNL expression.

-

--->

-<!ELEMENT set EMPTY>

-<!ATTLIST set

-  key CDATA #REQUIRED

-  expression CDATA #REQUIRED

->
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/script/Script_3_0.dtd b/3.0.4/framework/src/org/apache/tapestry/script/Script_3_0.dtd
deleted file mode 100644
index e36a857..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/script/Script_3_0.dtd
+++ /dev/null
@@ -1,197 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>

-<!-- $Id: Script_1_2.dtd,v 1.3 2002/09/16 19:33:02 hship Exp $ -->

-<!--

-

-DTD for the files used with the ScriptParser class and Script component.  

-This is recognized with the public identifier:

-

-	-//Apache Software Foundation//Tapestry Script Specification 1.3//EN

-

-The canonical location for the DTD is:

-

-	http://jakarta.apache.org/tapestry/dtd/Script_1_3.dtd

-

-The root element is always script.

-	

-This DTD is backwards compatible with the 1.2 DTD, with the following exceptions:

-- Addition of <unique> element

-- Addition of unique attribute to <let> element

-- Addition of index attribute to <foreach> element

--->

-<!-- =======================================================

-

-Entity: full-content

-

-Identifies the contents of most of the other elements.

-

--->

-<!ENTITY % full-content "(#PCDATA | foreach | if | if-not | unique)*">

-<!-- =======================================================

-

-Element: body

-Contained by: script

-

-Allows a mix of text and insert elements.  This text is added to

-the large scripting block just before the <body> tag.

--->

-<!ELEMENT body %full-content;>

-<!-- =======================================================

-

-Element: foreach

-Appears in: %full-content;

-

-Iterates over a list of items; this is modeled after the

-Foreach component.  No iteration occurs if the value

-from the property path is null.

-

-Attributes:

-  key: Defines the symbol into which each succesive value is stored.

-  index: Defines the symbol into which the index of the value of the current iteration is stored.

-  expression: The source of values, as an OGNL expression rooted in the symbols Map.

--->

-<!ELEMENT foreach %full-content;>

-<!ATTLIST foreach

-  key CDATA #IMPLIED

-  index CDATA #IMPLIED

-  expression CDATA #REQUIRED

->

-

-<!-- =======================================================

-Element: include-script

-Contained by: script

-

-Inserts a reference to an external, static, JavaScript file.

-

-Attributes:

-  resource-path: The path to the script within the classpath.

--->

-<!ELEMENT include-script EMPTY>

-<!ATTLIST include-script

-  resource-path CDATA #REQUIRED

->

-

-<!-- =======================================================

-

-Element: if

-Appears in: %full-content;

-

-Creates a conditional portion of the script; The body of the element 

-is only included if the expression evaulates to true.

-

-Attributes:

-  expression: The trigger expression, as an OGNL expression rooted in 

-    the symbols Map.

-

--->

-<!ELEMENT if %full-content;>

-<!ATTLIST if

-  expression CDATA #REQUIRED

->

-<!-- =======================================================

-

-Element: if-not

-Appears in: %full-content;

-

-Creates a conditional portion of the script; The body of the element 

-is only included if the property-path evaulates to false.

-

-Attributes:

-  expression: The trigger expression, as an OGNL expression rooted in 

-    the symbols Map.

-

--->

-<!ELEMENT if-not %full-content;>

-<!ATTLIST if-not

-  expression CDATA #REQUIRED

->

-<!-- =======================================================

-Element: initialization

-Contained by: script

-

-Text in this block is added to the event handler for the <body>

-tag's onLoad event.

--->

-<!ELEMENT initialization %full-content;>

-

-

-

-<!-- =======================================================

-Element: input-symbol

-Contained by: script

-

-Defines an input symbol used by the script.

-Attributes:

-  key: The name of the symbol.

-  class:  If specified, the exected class or interface for the symbol.

-  required: If yes, then the symbol must be non-null.

--->

-

-<!ELEMENT input-symbol EMPTY>

-<!ATTLIST input-symbol

-  key CDATA #REQUIRED

-  class CDATA #IMPLIED

-  required (yes|no) "no"

->

-

-<!-- =======================================================

-

-Element: let

-Contained by: script

-

-Used to create a new symbol. The content of the tag

-is used to create a string that is the name.  If the

-unique flag is enabled, the name is ensured to be unique

-(a suffix may be appended to ensure it is unique

-among all names so generated).

-

-Attributes:

-  key: The name of the symbol to create.

-  unique: If yes, the name is ensured to be unique.

-  The default is no.

-

--->

-<!ELEMENT let %full-content;>

-<!ATTLIST let

-  key CDATA #REQUIRED

-  unique (yes|no) "no"

->

-<!-- =======================================================

-

-Element: script

-

-Root element.

-

-Allows zero or more let elements (to establish new symbols),

-followed by a body and/or initialization element.

-

--->

-<!ELEMENT script (include-script*, input-symbol*, 

-	(let | set)*, body?, initialization?)>

-

-

-<!-- =======================================================

-

-Element: set

-Contained by: script

-

-Creates a new symbol as the result of evaluating an OGNL expression.

-

--->

-<!ELEMENT set EMPTY>

-<!ATTLIST set

-  key CDATA #REQUIRED

-  expression CDATA #REQUIRED

->

-

-<!-- =======================================================

-

-Element: unique

-Appears in: %full-content;

-

-Defines a block that only is rendered once per page.

-This is appropriate to certain kinds of initialization code

-that should not be duplicated, even if the script is

-executed multiple times.

-

--->

-<!ELEMENT unique %full-content;>

diff --git a/3.0.4/framework/src/org/apache/tapestry/script/SetRule.java b/3.0.4/framework/src/org/apache/tapestry/script/SetRule.java
deleted file mode 100644
index 8de003c..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/script/SetRule.java
+++ /dev/null
@@ -1,53 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.script;
-
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.util.xml.BaseRule;
-import org.apache.tapestry.util.xml.RuleDirectedParser;
-import org.xml.sax.Attributes;
-
-/**
- * Constructs at {@link org.apache.tapestry.script.SetToken} from at &lt;set&gt; element,
- * which contains full content.
- *
- * @author Howard Lewis Ship
- * @version $Id$
- * @since 3.0
- */
-
-class SetRule extends BaseRule
-{
-    public void startElement(RuleDirectedParser parser, Attributes attributes)
-    {
-        String key = getAttribute(attributes, "key");
-
-        parser.validate(key, Tapestry.SIMPLE_PROPERTY_NAME_PATTERN, "ScriptParser.invalid-key");
-
-        String expression = getAttribute(attributes, "expression");
-
-        SetToken token = new SetToken(key, expression, parser.getLocation());
-
-        IScriptToken parent = (IScriptToken) parser.peek();
-        parent.addToken(token);
-
-        parser.push(token);
-    }
-
-    public void endElement(RuleDirectedParser parser)
-    {
-        parser.pop();
-    }
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/script/SetToken.java b/3.0.4/framework/src/org/apache/tapestry/script/SetToken.java
deleted file mode 100644
index 52038ef..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/script/SetToken.java
+++ /dev/null
@@ -1,57 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.script;
-
-import org.apache.tapestry.ILocation;
-
-/**
- *  
- *  Like {@link org.apache.tapestry.script.LetToken}, but sets the value
- *  from an expression attribute, rather than a body of full content.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 2.2
- *
- **/
-
-class SetToken extends AbstractToken
-{
-    private String _key;
-    private String _expression;
-
-    SetToken(String key, String expression, ILocation location)
-    {
-        super(location);
-        _key = key;
-        _expression = expression;
-    }
-
-    /**
-     *   
-     *  Doesn't <em>write</em>, it evaluates the expression and assigns
-     *  the result back to the key. 
-     * 
-     **/
-
-    public void write(StringBuffer buffer, ScriptSession session)
-    {
-
-        Object value = evaluate(_expression, session);
-
-        session.getSymbols().put(_key, value);
-    }
-
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/script/StaticToken.java b/3.0.4/framework/src/org/apache/tapestry/script/StaticToken.java
deleted file mode 100644
index 9a1b525..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/script/StaticToken.java
+++ /dev/null
@@ -1,53 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.script;
-
-import org.apache.tapestry.ILocation;
-
-
-/**
- *  A token for static portions of the template.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *
- **/
-
-class StaticToken extends AbstractToken
-{
-    private String _text;
-
-    StaticToken(String text, ILocation location	)
-    {
-    	super(location);
-    	
-        _text = text;
-    }
-
-    /**
-     *  Writes the text to the writer.
-     *
-     **/
-
-    public void write(StringBuffer buffer, ScriptSession session)
-    {
-        buffer.append(_text);
-    }
-
-    public void addToken(IScriptToken token)
-    {
-        // Should never be invoked.
-    }
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/script/UniqueRule.java b/3.0.4/framework/src/org/apache/tapestry/script/UniqueRule.java
deleted file mode 100644
index 6294f2e..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/script/UniqueRule.java
+++ /dev/null
@@ -1,45 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.script;
-
-import org.apache.tapestry.util.xml.RuleDirectedParser;
-import org.xml.sax.Attributes;
-
-/**
- * Constructs a {@link org.apache.tapestry.script.UniqueToken}
- * from an &lt;unique&gt; element, which contains full content.
- *
- * @author Howard Lewis Ship
- * @version $Id$
- * @since 3.0
- */
-
-public class UniqueRule extends AbstractTokenRule
-{
-
-    public void endElement(RuleDirectedParser parser)
-    {
-        parser.pop();
-    }
-
-    public void startElement(RuleDirectedParser parser, Attributes attributes)
-    {
-        IScriptToken token = new UniqueToken(parser.getLocation());
-
-        addToParent(parser, token);
-        parser.push(token);
-    }
-
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/script/UniqueToken.java b/3.0.4/framework/src/org/apache/tapestry/script/UniqueToken.java
deleted file mode 100644
index 8441991..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/script/UniqueToken.java
+++ /dev/null
@@ -1,53 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.script;
-
-import org.apache.tapestry.ILocation;
-import org.apache.tapestry.IRequestCycle;
-
-/**
- * Writes out its child tokens only the first time it executes
- * (with a given tag).  Uses
- * {@link org.apache.tapestry.IRequestCycle#setAttribute(String, Object)}
- * to identify whether a particular block has rendered yet.
- *
- * @author Howard Lewis Ship
- * @version $Id$
- * @since 3.0
- */
-
-class UniqueToken extends AbstractToken
-{
-    public UniqueToken(ILocation location)
-    {
-        super(location);
-    }
-
-    public void write(StringBuffer buffer, ScriptSession session)
-    {
-        IRequestCycle cycle = session.getRequestCycle();
-
-        ILocation location = getLocation();
-        String tag = "<unique> " + location.toString();
-
-        if (cycle.getAttribute(tag) != null)
-            return;
-
-        cycle.setAttribute(tag, Boolean.TRUE);
-
-        writeChildren(buffer, session);
-    }
-
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/script/package.html b/3.0.4/framework/src/org/apache/tapestry/script/package.html
deleted file mode 100644
index d27729c..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/script/package.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN">
-<!-- $Id$ -->
-<html>
-<head>
-<title>Tapestry: Web Application Framework</title>
-</head>
-<body>
-
-<p>Parser and related classes for dynamically generating JavaScript for
-inclusion in an HTML response.  This is used by a number of
-tapestry components, including 
-{@link org.apache.tapestry.html.Rollover}, as well
-as {@link org.apache.tapestry.html.Script} (used for
-including arbitrary user-written JavaScript).
-
-@author Howard Lewis Ship <a href="mailto:hlship@apache.org">hlship@apache.org</a>
-
-</body>
-</html>
diff --git a/3.0.4/framework/src/org/apache/tapestry/spec/ApplicationSpecification.java b/3.0.4/framework/src/org/apache/tapestry/spec/ApplicationSpecification.java
deleted file mode 100644
index ce9687b..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/spec/ApplicationSpecification.java
+++ /dev/null
@@ -1,62 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.spec;
-
-import org.apache.commons.lang.builder.ToStringBuilder;
-
-/**
- *  Defines the configuration for a Tapestry application.  An ApplicationSpecification
- *  extends {@link LibrarySpecification} by adding new properties
- *  name and engineClassName.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *
- **/
-
-public class ApplicationSpecification
-    extends LibrarySpecification
-    implements IApplicationSpecification
-{
-    private String _name;
-    private String _engineClassName;
-
-    public String getName()
-    {
-        return _name;
-    }
-
-    public void setEngineClassName(String value)
-    {
-        _engineClassName = value;
-    }
-
-    public String getEngineClassName()
-    {
-        return _engineClassName;
-    }
-
-    public void setName(String name)
-    {
-        _name = name;
-    }
-
-    protected void extendDescription(ToStringBuilder builder)
-    {
-        builder.append("name", _name);
-        builder.append("engineClassName", _engineClassName);
-    }
-
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/spec/AssetSpecification.java b/3.0.4/framework/src/org/apache/tapestry/spec/AssetSpecification.java
deleted file mode 100644
index a069c6f..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/spec/AssetSpecification.java
+++ /dev/null
@@ -1,60 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.spec;
-
-/**
- *  Defines an internal, external or private asset.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *
- **/
-
-public class AssetSpecification extends LocatablePropertyHolder implements IAssetSpecification
-{
-    private AssetType type;
-    protected String path;
-
-    /**
-     *  Returns the base path for the asset.  This may be interpreted as a URL, relative URL
-     *  or the path to a resource, depending on the type of asset.
-     *
-     **/
-
-    public String getPath()
-    {
-        return path;
-    }
-
-    public AssetType getType()
-    {
-        return type;
-    }
-
-    /** @since 3.0 **/
-
-    public void setPath(String path)
-    {
-        this.path = path;
-    }
-
-    /** @since 3.0 **/
-
-    public void setType(AssetType type)
-    {
-        this.type = type;
-    }
-
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/spec/AssetType.java b/3.0.4/framework/src/org/apache/tapestry/spec/AssetType.java
deleted file mode 100644
index 1dbd468..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/spec/AssetType.java
+++ /dev/null
@@ -1,58 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.spec;
-
-import org.apache.commons.lang.enum.Enum;
-
-/**
- *  Defines the types of assets.
- *
- *  @see IAssetSpecification
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- * 
- **/
-
-public final class AssetType extends Enum
-{
-    /**
-     *  An external resource.
-     *
-     **/
-
-    public static final AssetType EXTERNAL = new AssetType("EXTERNAL");
-
-    /**
-     *  A resource visible to the {@link javax.servlet.ServletContext}.
-     *
-     **/
-
-    public static final AssetType CONTEXT = new AssetType("CONTEXT");
-
-    /**
-     *  An internal resource visible only on the classpath.  Typically,
-     *  a resource package in a WAR or JAR file alongside the classes.
-     *
-     **/
-
-    public static final AssetType PRIVATE = new AssetType("PRIVATE");
-
-    private AssetType(String name)
-    {
-        super(name);
-    }
-
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/spec/BaseLocatable.java b/3.0.4/framework/src/org/apache/tapestry/spec/BaseLocatable.java
deleted file mode 100644
index e44e6f0..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/spec/BaseLocatable.java
+++ /dev/null
@@ -1,45 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.spec;
-
-import org.apache.tapestry.ILocation;
-import org.apache.tapestry.ILocationHolder;
-
-/**
- *  Base class for classes which implement
- *  {@link org.apache.tapestry.ILocationHolder}.
- * 
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 3.0
- *
- **/
-
-public class BaseLocatable implements ILocationHolder
-{
-	private ILocation _location;
-	
-    public void setLocation(ILocation location)
-    {
-    	_location = location;
-    }
-
-    public ILocation getLocation()
-    {
-        return _location;
-    }
-
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/spec/BeanLifecycle.java b/3.0.4/framework/src/org/apache/tapestry/spec/BeanLifecycle.java
deleted file mode 100644
index 8b617c2..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/spec/BeanLifecycle.java
+++ /dev/null
@@ -1,70 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.spec;
-
-import org.apache.commons.lang.enum.Enum;
-
-
-/**
- *  An {@link Enum} of the different possible lifecycles for a JavaBean.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 1.0.4
- * 
- **/
-
-public class BeanLifecycle extends Enum
-{
-	/**
-	 *  No lifecycle; the bean is created fresh on each reference and not retained.
-	 *
-	 **/
-
-	public static final BeanLifecycle NONE = new BeanLifecycle("NONE");
-
-	/**
-	 * The standard lifecycle; the bean is retained for the
-	 * duration of the request cycle and is discarded at the end of the
-	 * request cycle.
-	 *
-	 **/
-
-	public static final BeanLifecycle REQUEST = new BeanLifecycle("REQUEST");
-
-	/**
-	 * The bean is created once and reused for the lifespan of the page
-	 * containing the component.
-	 *
-	 **/
-
-	public static final BeanLifecycle PAGE = new BeanLifecycle("PAGE");
-
-    /**
-     *  The bean is create and reused until the end of the current render,
-     *  at which point it is discarded.
-     * 
-     *  @since 2.2
-     * 
-     **/
-    
-    public static final BeanLifecycle RENDER = new BeanLifecycle("RENDER");
-    
-	private BeanLifecycle(String name)
-	{
-		super(name);
-	}
-
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/spec/BeanSpecification.java b/3.0.4/framework/src/org/apache/tapestry/spec/BeanSpecification.java
deleted file mode 100644
index 6935e44..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/spec/BeanSpecification.java
+++ /dev/null
@@ -1,127 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.spec;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.apache.tapestry.bean.IBeanInitializer;
-
-/**
- *  A specification of a helper bean for a component.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 1.0.4
- * 
- **/
-
-public class BeanSpecification extends LocatablePropertyHolder implements IBeanSpecification
-{
-    protected String className;
-    protected BeanLifecycle lifecycle;
-
-    /** @since 1.0.9 **/
-    private String description;
-
-    /**
-     *  A List of {@link IBeanInitializer}.
-     *
-     **/
-
-    protected List initializers;
-
-    public String getClassName()
-    {
-        return className;
-    }
-
-    public BeanLifecycle getLifecycle()
-    {
-        return lifecycle;
-    }
-
-    /**
-     *  @since 1.0.5
-     *
-     **/
-
-    public void addInitializer(IBeanInitializer initializer)
-    {
-        if (initializers == null)
-            initializers = new ArrayList();
-
-        initializers.add(initializer);
-    }
-
-    /**
-     *  Returns the {@link List} of {@link IBeanInitializer}s.  The caller
-     *  should not modify this value!.  May return null if there
-     *  are no initializers.
-     *
-     *  @since 1.0.5
-     *
-     **/
-
-    public List getInitializers()
-    {
-        return initializers;
-    }
-
-    public String toString()
-    {
-        StringBuffer buffer = new StringBuffer("BeanSpecification[");
-
-        buffer.append(className);
-        buffer.append(", lifecycle ");
-        buffer.append(lifecycle.getName());
-
-        if (initializers != null && initializers.size() > 0)
-        {
-            buffer.append(", ");
-            buffer.append(initializers.size());
-            buffer.append(" initializers");
-        }
-
-        buffer.append(']');
-
-        return buffer.toString();
-    }
-
-    public String getDescription()
-    {
-        return description;
-    }
-
-    public void setDescription(String desc)
-    {
-        description = desc;
-    }
-
-    /** @since 3.0 **/
-
-    public void setClassName(String className)
-    {
-        this.className = className;
-    }
-    
-    /** @since 3.0 **/
-    
-    public void setLifecycle(BeanLifecycle lifecycle)
-    {
-        this.lifecycle = lifecycle;
-    }
-
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/spec/BindingSpecification.java b/3.0.4/framework/src/org/apache/tapestry/spec/BindingSpecification.java
deleted file mode 100644
index 01c40e0..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/spec/BindingSpecification.java
+++ /dev/null
@@ -1,51 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.spec;
-
-/**
- *  Stores a binding specification, which identifies the static value
- *  or OGNL expression for the binding.  The name of the binding (which
- *  matches a bindable property of the contined component) is implicitly known.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- * 
- **/
-
-public class BindingSpecification extends BaseLocatable implements IBindingSpecification
-{
-    private BindingType _type;
-    private String _value;
-	
-    public BindingType getType()
-    {
-        return _type;
-    }
-
-    public String getValue()
-    {
-        return _value;
-    }
-
-    public void setType(BindingType type)
-    {
-        _type = type;
-    }
-
-    public void setValue(String value)
-    {
-        _value = value;
-    }
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/spec/BindingType.java b/3.0.4/framework/src/org/apache/tapestry/spec/BindingType.java
deleted file mode 100644
index 190ae4b..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/spec/BindingType.java
+++ /dev/null
@@ -1,94 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.spec;
-
-import org.apache.commons.lang.enum.Enum;
-
-/**
- *  Defines the different types of bindings possible for a component.
- *  These are used in the {@link IBindingSpecification} and ultimately
- *  used to create an instance of {@link org.apache.tapestry.IBinding}.
- *
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- * 
- **/
-
-public final class BindingType extends Enum
-{
-    /**
-     *  Indicates a {@link org.apache.tapestry.binding.StaticBinding}.
-     *
-     **/
-
-    public static final BindingType STATIC = new BindingType("STATIC");
-
-    /**
-     *  Indicates a standard {@link org.apache.tapestry.binding.ExpressionBinding}.
-     *
-     **/
-
-    public static final BindingType DYNAMIC = new BindingType("DYNAMIC");
-
-    /**
-     *  Indicates that an existing binding (from the container) will be
-     *  re-used.
-     *
-     **/
-
-    public static final BindingType INHERITED = new BindingType("INHERITED");
-
-    /**
-     *  Indicates a {@link org.apache.tapestry.binding.FieldBinding}.
-     *
-     *  <p>
-     *  Field bindings are only available in the 1.3 DTD.  The 1.4 DTD
-     *  does not support them (since OGNL expressions can do the same thing).
-     * 
-     **/
-
-    public static final BindingType FIELD = new BindingType("FIELD");
-
-    /**
-     *  Indicates a {@link org.apache.tapestry.binding.ListenerBinding}, a
-     *  specialized kind of binding that encapsulates a component listener
-     *  as a script.  Uses a subclass of {@link BindingSpecification},
-     *  {@link ListenerBindingSpecification}.
-     *  {@link IListenerBindingSpecification}.
-     * 
-     *  @since 3.0
-     * 
-     **/
-    
-    public static final BindingType LISTENER = new BindingType("LISTENER");
-
-	/**
-	 *  A binding to one of a component's localized strings.
-	 * 
-	 *  @see org.apache.tapestry.IComponent#getString(String)
-	 * 
-	 *  @since 2.0.4
-	 * 
-	 **/
-	
-	public static final BindingType STRING = new BindingType("STRING");
-	
-    private BindingType(String name)
-    {
-        super(name);
-    }
-
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/spec/ComponentSpecification.java b/3.0.4/framework/src/org/apache/tapestry/spec/ComponentSpecification.java
deleted file mode 100644
index 40ee214..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/spec/ComponentSpecification.java
+++ /dev/null
@@ -1,603 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.spec;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import org.apache.commons.lang.builder.ToStringBuilder;
-import org.apache.tapestry.IResourceLocation;
-import org.apache.tapestry.Tapestry;
-
-/**
- *  A specification for a component, as read from an XML specification file.
- *
- *  <p>A specification consists of
- *  <ul>
- *  <li>An implementing class
- *  <li>An optional template
- *  <li>An optional description
- *  <li>A set of contained components
- *  <li>Bindings for the properties of each contained component
- *  <li>A set of named assets
- *  <li>Definitions for helper beans
- *  <li>Any reserved names (used for HTML attributes)
- *  </ul>
- *
- *  <p>From this information, an actual component may be instantiated and
- *  initialized.  Instantiating a component is usually a recursive process, since
- *  to initialize a container component, it is necessary to instantiate and initialize
- *  its contained components as well.
- *
- *  @see org.apache.tapestry.IComponent
- *  @see IContainedComponent
- *  @see org.apache.tapestry.engine.IPageLoader
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *
- **/
-
-public class ComponentSpecification extends LocatablePropertyHolder implements IComponentSpecification
-{
-    private String _componentClassName; 
-
-    /** @since 1.0.9 **/
-
-    private String _description;
-
-    /**
-     *  Keyed on component id, value is {@link IContainedComponent}.
-     *
-     **/
-
-    protected Map _components;
-
-    /**
-     *  Keyed on asset name, value is {@link IAssetSpecification}.
-     *
-     **/
-
-    protected Map _assets;
-
-    /**
-     *  Defines all formal parameters.  Keyed on parameter name, value is
-     * {@link IParameterSpecification}.
-     *
-     **/
-
-    protected Map _parameters;
-
-    /**
-     *  Defines all helper beans.  Keyed on name, value is {@link IBeanSpecification}.
-     *
-     *  @since 1.0.4
-     **/
-
-    protected Map _beans;
-
-    /**
-     *  The names of all reserved informal parameter names (as lower-case).  This
-     *  allows the page loader to filter out any informal parameters during page load,
-     *  rather than during render.
-     *
-     *   @since 1.0.5
-     *
-     **/
-
-    protected Set _reservedParameterNames;
-
-    /**
-     *  Is the component allowed to have a body (that is, wrap other elements?).
-     *
-     **/
-
-    private boolean _allowBody = true;
-
-    /**
-     *  Is the component allow to have informal parameter specified.
-     *
-     **/
-
-    private boolean _allowInformalParameters = true;
-
-    /**
-     *  The XML Public Id used when the page or component specification was read
-     *  (if applicable).
-     * 
-     *  @since 2.2
-     * 
-     **/
-
-    private String _publicId;
-
-    /**
-     *  Indicates that the specification is for a page, not a component.
-     * 
-     *  @since 2.2
-     * 
-     **/
-
-    private boolean _pageSpecification;
-
-    /**
-     *  The location from which the specification was obtained.
-     * 
-     *  @since 3.0
-     * 
-     **/
-
-    private IResourceLocation _specificationLocation;
-
-    /**
-     *  A Map of {@link IPropertySpecification} keyed on the name
-     *  of the property.
-     *
-     *  @since 3.0
-     * 
-     **/
-
-    private Map _propertySpecifications;
-
-    /**
-     * @throws IllegalArgumentException if the name already exists.
-     *
-     **/
-
-    public void addAsset(String name, IAssetSpecification asset)
-    {
-        if (_assets == null)
-            _assets = new HashMap();
-
-        if (_assets.containsKey(name))
-            throw new IllegalArgumentException(
-                Tapestry.format("ComponentSpecification.duplicate-asset", this, name));
-
-        _assets.put(name, asset);
-    }
-
-    /**
-     *  @throws IllegalArgumentException if the id is already defined.
-     *
-     **/
-
-    public void addComponent(String id, IContainedComponent component)
-    {
-        if (_components == null)
-            _components = new HashMap();
-
-        if (_components.containsKey(id))
-            throw new IllegalArgumentException(
-                Tapestry.format("ComponentSpecification.duplicate-component", this, id));
-
-        _components.put(id, component);
-    }
-
-    /**
-     *  Adds the parameter.   The name is added as a reserved name.
-     *
-     *  @throws IllegalArgumentException if the name already exists.
-     **/
-
-    public void addParameter(String name, IParameterSpecification spec)
-    {
-        if (_parameters == null)
-            _parameters = new HashMap();
-
-        if (_parameters.containsKey(name))
-            throw new IllegalArgumentException(
-                Tapestry.format("ComponentSpecification.duplicate-parameter", this, name));
-
-        _parameters.put(name, spec);
-
-        addReservedParameterName(name);
-    }
-
-    /**
-     *  Returns true if the component is allowed to wrap other elements (static HTML
-     *  or other components).  The default is true.
-     *
-     *  @see #setAllowBody(boolean)
-     *
-     **/
-
-    public boolean getAllowBody()
-    {
-        return _allowBody;
-    }
-
-    /**
-     *  Returns true if the component allows informal parameters (parameters
-     *  not formally defined).  Informal parameters are generally used to create
-     *  additional HTML attributes for an HTML tag rendered by the
-     *  component.  This is often used to specify JavaScript event handlers or the class
-     *  of the component (for Cascarding Style Sheets).
-     *
-     * <p>The default value is true.
-     *
-     *  @see #setAllowInformalParameters(boolean)
-     **/
-
-    public boolean getAllowInformalParameters()
-    {
-        return _allowInformalParameters;
-    }
-
-    /**
-     *  Returns the {@link IAssetSpecification} with the given name, or null
-     *  if no such specification exists.
-     *
-     *  @see #addAsset(String,IAssetSpecification)
-     **/
-
-    public IAssetSpecification getAsset(String name)
-    {
-
-        return (IAssetSpecification) get(_assets, name);
-    }
-
-    /**
-     *  Returns a <code>List</code>
-     *  of the String names of all assets, in alphabetical
-     *  order
-     *
-     **/
-
-    public List getAssetNames()
-    {
-        return sortedKeys(_assets);
-    }
-
-    /**
-     *  Returns the specification of a contained component with the given id, or
-     *  null if no such contained component exists.
-     *
-     *  @see #addComponent(String, IContainedComponent)
-     *
-     **/
-
-    public IContainedComponent getComponent(String id)
-    {
-        return (IContainedComponent) get(_components, id);
-    }
-
-    public String getComponentClassName()
-    {
-        return _componentClassName;
-    }
-
-    /**
-     *  Returns an <code>List</code>
-     *  of the String names of the {@link IContainedComponent}s
-     *  for this component.
-     *
-     *  @see #addComponent(String, IContainedComponent)
-     *
-     **/
-
-    public List getComponentIds()
-    {
-        return sortedKeys(_components);
-    }
-
-    /**
-     *  Returns the specification of a parameter with the given name, or
-     *  null if no such parameter exists.
-     *
-     *  @see #addParameter(String, IParameterSpecification)
-     *
-     **/
-
-    public IParameterSpecification getParameter(String name)
-    {
-        return (IParameterSpecification) get(_parameters, name);
-    }
-
-    /**
-     *  Returns a List of
-     *  of String names of all parameters.  This list
-     *  is in alphabetical order.
-     *
-     *  @see #addParameter(String, IParameterSpecification)
-     *
-     **/
-
-    public List getParameterNames()
-    {
-        return sortedKeys(_parameters);
-    }
-
-    public void setAllowBody(boolean value)
-    {
-        _allowBody = value;
-    }
-
-    public void setAllowInformalParameters(boolean value)
-    {
-        _allowInformalParameters = value;
-    }
-
-    public void setComponentClassName(String value)
-    {
-        _componentClassName = value;
-    }
-
-    /**
-     *  @since 1.0.4
-     *
-     *  @throws IllegalArgumentException if the bean already has a specification.
-     **/
-
-    public void addBeanSpecification(String name, IBeanSpecification specification)
-    {
-        if (_beans == null)
-            _beans = new HashMap();
-
-        else
-            if (_beans.containsKey(name))
-                throw new IllegalArgumentException(
-                    Tapestry.format("ComponentSpecification.duplicate-bean", this, name));
-
-        _beans.put(name, specification);
-    }
-
-    /**
-     * Returns the {@link IBeanSpecification} for the given name, or null
-     * if not such specification exists.
-     *
-     * @since 1.0.4
-     *
-     **/
-
-    public IBeanSpecification getBeanSpecification(String name)
-    {
-        if (_beans == null)
-            return null;
-
-        return (IBeanSpecification) _beans.get(name);
-    }
-
-    /**
-     *  Returns an unmodifiable collection of the names of all beans.
-     *
-     **/
-
-    public Collection getBeanNames()
-    {
-        if (_beans == null)
-            return Collections.EMPTY_LIST;
-
-        return Collections.unmodifiableCollection(_beans.keySet());
-    }
-
-    /**
-     *  Adds the value as a reserved name.  Reserved names are not allowed
-     *  as the names of informal parameters.  Since the comparison is
-     *  caseless, the value is converted to lowercase before being
-     *  stored.
-     *
-     *  @since 1.0.5
-     *
-     **/
-
-    public void addReservedParameterName(String value)
-    {
-        if (_reservedParameterNames == null)
-            _reservedParameterNames = new HashSet();
-
-        _reservedParameterNames.add(value.toLowerCase());
-    }
-
-    /**
-     *  Returns true if the value specified is in the reserved name list.
-     *  The comparison is caseless.  All formal parameters are automatically
-     *  in the reserved name list, as well as any additional
-     *  reserved names specified in the component specification.  The latter
-     *  refer to HTML attributes generated directly by the component.
-     *
-     *  @since 1.0.5
-     *
-     **/
-
-    public boolean isReservedParameterName(String value)
-    {
-        if (_reservedParameterNames == null)
-            return false;
-
-        return _reservedParameterNames.contains(value.toLowerCase());
-    }
-
-    public String toString()
-    {
-        ToStringBuilder builder = new ToStringBuilder(this);
-
-        builder.append("componentClassName", _componentClassName);
-        builder.append("pageSpecification", _pageSpecification);
-        builder.append("specificationLocation", _specificationLocation);
-        builder.append("allowBody", _allowBody);
-        builder.append("allowInformalParameter", _allowInformalParameters);
-
-        return builder.toString();
-    }
-
-    /**
-     *  Returns the documentation for this component.
-     * 
-     *  @since 1.0.9
-     **/
-
-    public String getDescription()
-    {
-        return _description;
-    }
-
-    /**
-     *  Sets the documentation for this component.
-     * 
-     *  @since 1.0.9
-     **/
-
-    public void setDescription(String description)
-    {
-        _description = description;
-    }
-
-    /**
-     *  Returns the XML Public Id for the specification file, or null
-     *  if not applicable.
-     * 
-     *  <p>
-     *  This method exists as a convienience for the Spindle plugin.
-     *  A previous method used an arbitrary version string, the
-     *  public id is more useful and less ambiguous.
-     *  
-     *  @since 2.2
-     * 
-     **/
-
-    public String getPublicId()
-    {
-        return _publicId;
-    }
-
-    /** @since 2.2 **/
-
-    public void setPublicId(String publicId)
-    {
-        _publicId = publicId;
-    }
-
-    /** 
-     * 
-     *  Returns true if the specification is known to be a page
-     *  specification and not a component specification.  Earlier versions
-     *  of the framework did not distinguish between the two, but starting
-     *  in 2.2, there are seperate XML entities for pages and components.
-     *  Pages omit several attributes and entities related
-     *  to parameters, as parameters only make sense for components.
-     *  
-     *  @since 2.2 
-     * 
-     **/
-
-    public boolean isPageSpecification()
-    {
-        return _pageSpecification;
-    }
-
-    /** @since 2.2 **/
-
-    public void setPageSpecification(boolean pageSpecification)
-    {
-        _pageSpecification = pageSpecification;
-    }
-
-    /** @since 2.2 **/
-
-    private List sortedKeys(Map input)
-    {
-        if (input == null)
-            return Collections.EMPTY_LIST;
-
-        List result = new ArrayList(input.keySet());
-
-        Collections.sort(result);
-
-        return result;
-    }
-
-    /** @since 2.2 **/
-
-    private Object get(Map map, Object key)
-    {
-        if (map == null)
-            return null;
-
-        return map.get(key);
-    }
-
-    /** @since 3.0 **/
-
-    public IResourceLocation getSpecificationLocation()
-    {
-        return _specificationLocation;
-    }
-
-    /** @since 3.0 **/
-
-    public void setSpecificationLocation(IResourceLocation specificationLocation)
-    {
-        _specificationLocation = specificationLocation;
-    }
-
-    /**
-     *  Adds a new property specification.  The name of the property must
-     *  not already be defined (and must not change after being added).
-     * 
-     *  @since 3.0
-     * 
-     **/
-
-    public void addPropertySpecification(IPropertySpecification spec)
-    {
-        if (_propertySpecifications == null)
-            _propertySpecifications = new HashMap();
-
-        String name = spec.getName();
-
-        if (_propertySpecifications.containsKey(name))
-            throw new IllegalArgumentException(
-                Tapestry.format(
-                    "ComponentSpecification.duplicate-property-specification",
-                    this,
-                    name));
-
-        _propertySpecifications.put(name, spec);
-    }
-
-    /**
-     *  Returns a sorted, immutable list of the names of all 
-     *  {@link org.apache.tapestry.spec.IPropertySpecification}s.
-     * 
-     *  @since 3.0
-     * 
-     **/
-
-    public List getPropertySpecificationNames()
-    {
-        return sortedKeys(_propertySpecifications);
-    }
-
-    /**
-     *  Returns the named {@link org.apache.tapestry.spec.IPropertySpecification},
-     *  or null  if no such specification exist.
-     * 
-     *  @since 3.0
-     *  @see #addPropertySpecification(IPropertySpecification)
-     * 
-     **/
-
-    public IPropertySpecification getPropertySpecification(String name)
-    {
-        return (IPropertySpecification) get(_propertySpecifications, name);
-    }
-
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/spec/ContainedComponent.java b/3.0.4/framework/src/org/apache/tapestry/spec/ContainedComponent.java
deleted file mode 100644
index 89d6713..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/spec/ContainedComponent.java
+++ /dev/null
@@ -1,137 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.spec;
-
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * Defines a contained component.  This includes the information needed to
- * get the contained component's specification, as well as any bindings
- * for the component.
- *
- * @author Howard Lewis Ship
- * @version $Id$
- * 
- **/
-
-public class ContainedComponent extends LocatablePropertyHolder implements IContainedComponent
-{
-	private String type;
-
-	private String copyOf;
-    
-    private boolean inheritInformalParameters;
-
-	protected Map bindings;
-
-	private static final int MAP_SIZE = 3;
-
-	/**
-	 *  Returns the named binding, or null if the binding does not
-	 *  exist.
-	 *
-	 **/
-
-	public IBindingSpecification getBinding(String name)
-	{
-		if (bindings == null)
-			return null;
-
-		return (IBindingSpecification) bindings.get(name);
-	}
-
-	/**
-	 *  Returns an umodifiable <code>Collection</code>
-	 *  of Strings, each the name of one binding
-	 *  for the component.
-	 *
-	 **/
-
-	public Collection getBindingNames()
-	{
-		if (bindings == null)
-			return Collections.EMPTY_LIST;
-
-		return Collections.unmodifiableCollection(bindings.keySet());
-	}
-
-	public String getType()
-	{
-		return type;
-	}
-
-	public void setBinding(String name, IBindingSpecification spec)
-	{
-		if (bindings == null)
-			bindings = new HashMap(MAP_SIZE);
-
-		bindings.put(name, spec);
-	}
-
-	public void setType(String value)
-	{
-		type = value;
-	}
-
-	/**
-	 * 	Sets the String Id of the component being copied from.
-	 *  For use by IDE tools like Spindle.
-	 * 
-	 *  @since 1.0.9
-	 **/
-
-	public void setCopyOf(String id)
-	{
-		copyOf = id;
-	}
-
-	/**
-	 * 	Returns the id of the component being copied from.
-	 *  For use by IDE tools like Spindle.
-	 * 
-	 *  @since 1.0.9
-	 **/
-
-	public String getCopyOf()
-	{
-		return copyOf;
-	}
-
-	/**
-     * Returns whether the contained component will inherit 
-     * the informal parameters of its parent. 
-     * 
-	 * @since 3.0
-	 **/
-	public boolean getInheritInformalParameters()
-	{
-		return inheritInformalParameters;
-	}
-
-	/**
-     * Sets whether the contained component will inherit 
-     * the informal parameters of its parent. 
-     * 
-     * @since 3.0
-	 */
-	public void setInheritInformalParameters(boolean value)
-	{
-		inheritInformalParameters = value;
-	}
-
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/spec/Direction.java b/3.0.4/framework/src/org/apache/tapestry/spec/Direction.java
deleted file mode 100644
index aa92714..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/spec/Direction.java
+++ /dev/null
@@ -1,121 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.spec;
-
-import org.apache.commons.lang.enum.Enum;
-import org.apache.tapestry.Tapestry;
-
-/**
- *  Represents different types of parameters.  Currently only 
- *  in and custom are supported, but this will likely change
- *  when Tapestry supports out parameters is some form (that reflects
- *  form style processing).
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 2.0.3
- *
- */
- 
-public class Direction extends Enum
-{
-    /**
-     *  The parameter value is input only; the component property value
-     *  is unchanged or not relevant after the component renders.
-     *  The property is set from the binding before the component renders,
-     *  then reset to initial value after the component renders.
-     * 
-     */
-    
-	public static final Direction IN = new Direction("IN");
-	
-    
-    /**
-     *  Encapsulates the semantics of a form component's value parameter.
-     * 
-     *  <p>The parameter is associated with a {@link org.apache.tapestry.form.IFormComponent}.
-     *  The property value is set from the binding before the component renders (when renderring,
-     *  but not when rewinding).
-     *  The binding is updated from the property value
-     *  after after the component renders when the
-     *  <b>containing form</b> is <b>rewinding</b>, <i>and</i>
-     *  the component is not {@link org.apache.tapestry.form.IFormComponent#isDisabled() disabled}.
-     * 
-     *  @since 2.2
-     * 
-     */
-
-    public static final Direction FORM = new Direction("FORM", false);    
-    
-	/**
-	 *  Processing of the parameter is entirely the responsibility
-	 *  of the component, which must obtain an manipulate
-	 *  the {@link org.apache.tapestry.IBinding} (if any) for the parameter.
-	 * 
-	 **/
-	
-	public static final Direction CUSTOM = new Direction("CUSTOM");
-
-
-	/**
-	 *  Causes a synthetic property to be created that automatically
-	 *  references and de-references the underlying binding.
-	 * 
-	 *  @since 3.0
-	 * 
-	 */
-	
-	public static final Direction AUTO = new Direction("AUTO");
-	
-	/**
-	 * If true, then this direction is allowed with invariant bindings (the usual case).
-	 * If false, then {@link org.apache.tapestry.param.ParameterManager} will not allow
-	 * an invariant binding.
-	 * 
-	 * @since 3.0
-	 */
-	
-	private boolean _allowInvariant;
-	
-    protected Direction(String name)
-    {
-        this(name, true);
-    }
-
-	protected Direction(String name, boolean allowInvariant)
-	{
-		super(name);
-		
-		_allowInvariant = allowInvariant;
-	}
-	
-	/**
-	 * @since 3.0
-	 */
-	public boolean getAllowInvariant()
-	{
-		return _allowInvariant;
-	}
-
-    /**
-     *  Returns a user-presentable name for the direction.
-     * 
-     */
-    
-    public String getDisplayName()
-    {
-        return Tapestry.getMessage("Direction." + getName());
-    }
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/spec/ExtensionSpecification.java b/3.0.4/framework/src/org/apache/tapestry/spec/ExtensionSpecification.java
deleted file mode 100644
index 4fe8e7e..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/spec/ExtensionSpecification.java
+++ /dev/null
@@ -1,182 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.spec;
-
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Map;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.tapestry.ApplicationRuntimeException;
-import org.apache.tapestry.IResourceResolver;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.util.prop.OgnlUtils;
-
-/**
- *  Defines an "extension", which is much like a helper bean, but 
- *  is part of a library or application specification (and has the same
- *  lifecycle as the application).
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 2.2
- * 
- **/
-
-public class ExtensionSpecification
-    extends LocatablePropertyHolder
-    implements IExtensionSpecification
-{
-    private static final Log LOG = LogFactory.getLog(ExtensionSpecification.class);
-
-    private String _className;
-    protected Map _configuration = new HashMap();
-    private boolean _immediate;
-
-    public String getClassName()
-    {
-        return _className;
-    }
-
-    public void setClassName(String className)
-    {
-        _className = className;
-    }
-
-    public void addConfiguration(String propertyName, Object value)
-    {
-        if (_configuration.containsKey(propertyName))
-            throw new IllegalArgumentException(
-                Tapestry.format(
-                    "ExtensionSpecification.duplicate-property",
-                    this,
-                    propertyName));
-
-        _configuration.put(propertyName, value);
-    }
-
-    /**
-     *  Returns an immutable Map of the configuration; keyed on property name,
-     *  with values as properties to assign.
-     * 
-     **/
-
-    public Map getConfiguration()
-    {
-        return Collections.unmodifiableMap(_configuration);
-    }
-
-    /**
-     *  Invoked to instantiate an instance of the extension and return it.
-     *  It also configures properties of the extension.
-     * 
-     **/
-
-    public Object instantiateExtension(IResourceResolver resolver)
-    {
-        if (LOG.isDebugEnabled())
-            LOG.debug("Instantiating extension class " + _className + ".");
-        Class extensionClass = null;
-        Object result = null;
-
-        try
-        {
-            extensionClass = resolver.findClass(_className);
-        }
-        catch (Exception ex)
-        {
-            throw new ApplicationRuntimeException(
-                Tapestry.format("ExtensionSpecification.bad-class", _className),
-                getLocation(),
-                ex);
-        }
-
-        result = instantiateInstance(extensionClass, result);
-
-        initializeProperties(resolver, result);
-
-        return result;
-    }
-
-    private void initializeProperties(IResourceResolver resolver, Object extension)
-    {
-        if (_configuration.isEmpty())
-            return;
-
-        Iterator i = _configuration.entrySet().iterator();
-        while (i.hasNext())
-        {
-            Map.Entry entry = (Map.Entry) i.next();
-
-            String propertyName = (String) entry.getKey();
-
-            OgnlUtils.set(propertyName, resolver, extension, entry.getValue());
-        }
-    }
-
-    private Object instantiateInstance(Class extensionClass, Object result)
-    {
-        try
-        {
-            result = extensionClass.newInstance();
-        }
-        catch (Exception ex)
-        {
-            throw new ApplicationRuntimeException(ex.getMessage(), getLocation(), ex);
-        }
-
-        return result;
-    }
-
-    public String toString()
-    {
-        StringBuffer buffer = new StringBuffer("ExtensionSpecification@");
-        buffer.append(Integer.toHexString(hashCode()));
-        buffer.append('[');
-        buffer.append(_className);
-
-        if (_configuration != null)
-        {
-            buffer.append(' ');
-            buffer.append(_configuration);
-        }
-
-        buffer.append(']');
-
-        return buffer.toString();
-    }
-
-    /**
-     *  Returns true if the extensions should be instantiated
-     *  immediately after the containing 
-     *  {@link org.apache.tapestry.spec.LibrarySpecification}
-     *  if parsed.  Non-immediate extensions are instantiated
-     *  only as needed.
-     * 
-     **/
-
-    public boolean isImmediate()
-    {
-        return _immediate;
-    }
-
-    public void setImmediate(boolean immediate)
-    {
-        _immediate = immediate;
-    }
-
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/spec/IApplicationSpecification.java b/3.0.4/framework/src/org/apache/tapestry/spec/IApplicationSpecification.java
deleted file mode 100644
index 96c679e..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/spec/IApplicationSpecification.java
+++ /dev/null
@@ -1,49 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.spec;
-
-
-
-/**
- *  Defines and interface for the configuration for a Tapestry application.  An ApplicationSpecification
- *  extends {@link ILibrarySpecification} by adding new properties 
- *  name and engineClassName.
- *
- *  @author Geoffrey Longman
- *  @version $Id$
- *
- **/
-
-public interface IApplicationSpecification extends ILibrarySpecification
-{
-    /**
-     *  Returns a "user friendly" name for the application (which is optional).
-     * 
-     **/
-    
-    public String getName();
-
-    public void setEngineClassName(String value);
-    
-    /**
-     *  Returns the name of the class (which implements {@link org.apache.tapestry.IEngine}).
-     *  May return null, in which case a default is used.
-     * 
-     **/
-    
-    public String getEngineClassName();
-    
-    public void setName(String name);
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/spec/IAssetSpecification.java b/3.0.4/framework/src/org/apache/tapestry/spec/IAssetSpecification.java
deleted file mode 100644
index 05d44b8..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/spec/IAssetSpecification.java
+++ /dev/null
@@ -1,40 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.spec;
-
-import org.apache.tapestry.ILocatable;
-import org.apache.tapestry.ILocationHolder;
-import org.apache.tapestry.util.IPropertyHolder;
-
-/**
- *  Defines an internal, external or private asset.
- * 
- * @author glongman@intelligentworks.com
- * @version $Id$
- */
-public interface IAssetSpecification extends IPropertyHolder, ILocationHolder, ILocatable
-{
-    /**
-     *  Returns the base path for the asset.  This may be interpreted as a URL, relative URL
-     *  or the path to a resource, depending on the type of asset.
-     *
-     **/
-    public abstract String getPath();
-    public abstract AssetType getType();
-    /** @since 3.0 **/
-    public abstract void setPath(String path);
-    /** @since 3.0 **/
-    public abstract void setType(AssetType type);
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/spec/IBeanSpecification.java b/3.0.4/framework/src/org/apache/tapestry/spec/IBeanSpecification.java
deleted file mode 100644
index 1127b6f..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/spec/IBeanSpecification.java
+++ /dev/null
@@ -1,55 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.spec;
-
-import java.util.List;
-
-import org.apache.tapestry.ILocatable;
-import org.apache.tapestry.ILocationHolder;
-import org.apache.tapestry.bean.IBeanInitializer;
-import org.apache.tapestry.util.IPropertyHolder;
-
-/**
- *  A specification of a helper bean for a component.
- *
- * @author glongman@intelligentworks.com
- * @version $Id$
- */
-public interface IBeanSpecification extends IPropertyHolder, ILocationHolder, ILocatable
-{
-    public abstract String getClassName();
-    public abstract BeanLifecycle getLifecycle();
-    /**
-     *  @since 1.0.5
-     *
-     **/
-    public abstract void addInitializer(IBeanInitializer initializer);
-    /**
-     *  Returns the {@link List} of {@link IBeanInitializer}s.  The caller
-     *  should not modify this value!.  May return null if there
-     *  are no initializers.
-     *
-     *  @since 1.0.5
-     *
-     **/
-    public abstract List getInitializers();
-    public abstract String toString();
-    public abstract String getDescription();
-    public abstract void setDescription(String desc);
-    /** @since 3.0 **/
-    public abstract void setClassName(String className);
-    /** @since 3.0 **/
-    public abstract void setLifecycle(BeanLifecycle lifecycle);
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/spec/IBindingSpecification.java b/3.0.4/framework/src/org/apache/tapestry/spec/IBindingSpecification.java
deleted file mode 100644
index 07e427a..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/spec/IBindingSpecification.java
+++ /dev/null
@@ -1,34 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.spec;
-
-import org.apache.tapestry.ILocatable;
-import org.apache.tapestry.ILocationHolder;
-
-/**
- *  Stores a binding specification, which identifies the static value
- *  or OGNL expression for the binding.  The name of the binding (which
- *  matches a bindable property of the contined component) is implicitly known.
- *
- * @author glongman@intelligentworks.com
- * @version $Id$
- */
-public interface IBindingSpecification extends ILocationHolder, ILocatable
-{
-    public abstract BindingType getType();
-    public abstract String getValue();
-    public abstract void setType(BindingType type);
-    public abstract void setValue(String value);
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/spec/IComponentSpecification.java b/3.0.4/framework/src/org/apache/tapestry/spec/IComponentSpecification.java
deleted file mode 100644
index 28fdf07..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/spec/IComponentSpecification.java
+++ /dev/null
@@ -1,254 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.spec;
-
-import java.util.Collection;
-import java.util.List;
-
-import org.apache.tapestry.ILocatable;
-import org.apache.tapestry.ILocationHolder;
-import org.apache.tapestry.IResourceLocation;
-import org.apache.tapestry.util.IPropertyHolder;
-
-/**
- *  A specification for a component, as read from an XML specification file.
- *
- *  <p>A specification consists of
- *  <ul>
- *  <li>An implementing class
- *  <li>An optional template
- *  <li>An optional description
- *  <li>A set of contained components
- *  <li>Bindings for the properties of each contained component
- *  <li>A set of named assets
- *  <li>Definitions for helper beans
- *  <li>Any reserved names (used for HTML attributes)
- *  </ul>
- *
- *  <p>From this information, an actual component may be instantiated and
- *  initialized.  Instantiating a component is usually a recursive process, since
- *  to initialize a container component, it is necessary to instantiate and initialize
- *  its contained components as well.
- *
- *  @see org.apache.tapestry.IComponent
- *  @see IContainedComponent
- *  @see IComponentSpecification
- *  @see org.apache.tapestry.engine.IPageLoader
- * 
- * @author glongman@intelligentworks.com
- * @version $Id$
- */
-public interface IComponentSpecification extends IPropertyHolder, ILocationHolder, ILocatable
-{
-    /**
-     * @throws IllegalArgumentException if the name already exists.
-     *
-     **/
-    public abstract void addAsset(String name, IAssetSpecification asset);
-    /**
-     *  @throws IllegalArgumentException if the id is already defined.
-     *
-     **/
-    public abstract void addComponent(String id, IContainedComponent component);
-    /**
-     *  Adds the parameter.   The name is added as a reserved name.
-     *
-     *  @throws IllegalArgumentException if the name already exists.
-     **/
-    public abstract void addParameter(String name, IParameterSpecification spec);
-    /**
-     *  Returns true if the component is allowed to wrap other elements (static HTML
-     *  or other components).  The default is true.
-     *
-     *  @see #setAllowBody(boolean)
-     *
-     **/
-    public abstract boolean getAllowBody();
-    /**
-     *  Returns true if the component allows informal parameters (parameters
-     *  not formally defined).  Informal parameters are generally used to create
-     *  additional HTML attributes for an HTML tag rendered by the
-     *  component.  This is often used to specify JavaScript event handlers or the class
-     *  of the component (for Cascarding Style Sheets).
-     *
-     * <p>The default value is true.
-     *
-     *  @see #setAllowInformalParameters(boolean)
-     **/
-    public abstract boolean getAllowInformalParameters();
-    /**
-     *  Returns the {@link IAssetSpecification} with the given name, or null
-     *  if no such specification exists.
-     *
-     *  @see #addAsset(String,IAssetSpecification)
-     **/
-    public abstract IAssetSpecification getAsset(String name);
-    /**
-     *  Returns a <code>List</code>
-     *  of the String names of all assets, in alphabetical
-     *  order
-     *
-     **/
-    public abstract List getAssetNames();
-    /**
-     *  Returns the specification of a contained component with the given id, or
-     *  null if no such contained component exists.
-     *
-     *  @see #addComponent(String, IContainedComponent)
-     *
-     **/
-    public abstract IContainedComponent getComponent(String id);
-    public abstract String getComponentClassName();
-    /**
-     *  Returns an <code>List</code>
-     *  of the String names of the {@link IContainedComponent}s
-     *  for this component.
-     *
-     *  @see #addComponent(String, IContainedComponent)
-     *
-     **/
-    public abstract List getComponentIds();
-    /**
-     *  Returns the specification of a parameter with the given name, or
-     *  null if no such parameter exists.
-     *
-     *  @see #addParameter(String, IParameterSpecification)
-     *
-     **/
-    public abstract IParameterSpecification getParameter(String name);
-    /**
-     *  Returns a List of
-     *  of String names of all parameters.  This list
-     *  is in alphabetical order.
-     *
-     *  @see #addParameter(String, IParameterSpecification)
-     *
-     **/
-    public abstract List getParameterNames();
-    public abstract void setAllowBody(boolean value);
-    public abstract void setAllowInformalParameters(boolean value);
-    public abstract void setComponentClassName(String value);
-    /**
-     *  @since 1.0.4
-     *
-     *  @throws IllegalArgumentException if the bean already has a specification.
-     **/
-    public abstract void addBeanSpecification(String name, IBeanSpecification specification);
-    /**
-     * Returns the {@link IBeanSpecification} for the given name, or null
-     * if not such specification exists.
-     *
-     * @since 1.0.4
-     *
-     **/
-    public abstract IBeanSpecification getBeanSpecification(String name);
-    /**
-     *  Returns an unmodifiable collection of the names of all beans.
-     *
-     **/
-    public abstract Collection getBeanNames();
-    /**
-     *  Adds the value as a reserved name.  Reserved names are not allowed
-     *  as the names of informal parameters.  Since the comparison is
-     *  caseless, the value is converted to lowercase before being
-     *  stored.
-     *
-     *  @since 1.0.5
-     *
-     **/
-    public abstract void addReservedParameterName(String value);
-    /**
-     *  Returns true if the value specified is in the reserved name list.
-     *  The comparison is caseless.  All formal parameters are automatically
-     *  in the reserved name list, as well as any additional
-     *  reserved names specified in the component specification.  The latter
-     *  refer to HTML attributes generated directly by the component.
-     *
-     *  @since 1.0.5
-     *
-     **/
-    public abstract boolean isReservedParameterName(String value);
-    /**
-     *  Returns the documentation for this component.
-     * 
-     *  @since 1.0.9
-     **/
-    public abstract String getDescription();
-    /**
-     *  Sets the documentation for this component.
-     * 
-     *  @since 1.0.9
-     **/
-    public abstract void setDescription(String description);
-    /**
-     *  Returns the XML Public Id for the specification file, or null
-     *  if not applicable.
-     * 
-     *  <p>
-     *  This method exists as a convienience for the Spindle plugin.
-     *  A previous method used an arbitrary version string, the
-     *  public id is more useful and less ambiguous.
-     *  
-     *  @since 2.2
-     * 
-     **/
-    public abstract String getPublicId();
-    /** @since 2.2 **/
-    public abstract void setPublicId(String publicId);
-    /** 
-     * 
-     *  Returns true if the specification is known to be a page
-     *  specification and not a component specification.  Earlier versions
-     *  of the framework did not distinguish between the two, but starting
-     *  in 2.2, there are seperate XML entities for pages and components.
-     *  Pages omit several attributes and entities related
-     *  to parameters, as parameters only make sense for components.
-     *  
-     *  @since 2.2 
-     * 
-     **/
-    public abstract boolean isPageSpecification();
-    /** @since 2.2 **/
-    public abstract void setPageSpecification(boolean pageSpecification);
-    /** @since 3.0 **/
-    public abstract IResourceLocation getSpecificationLocation();
-    /** @since 3.0 **/
-    public abstract void setSpecificationLocation(IResourceLocation specificationLocation);
-    /**
-     *  Adds a new property specification.  The name of the property must
-     *  not already be defined (and must not change after being added).
-     * 
-     *  @since 3.0
-     * 
-     **/
-    public abstract void addPropertySpecification(IPropertySpecification spec);
-    /**
-     *  Returns a sorted, immutable list of the names of all 
-     *  {@link org.apache.tapestry.spec.IPropertySpecification}s.
-     * 
-     *  @since 3.0
-     * 
-     **/
-    public abstract List getPropertySpecificationNames();
-    /**
-     *  Returns the named {@link org.apache.tapestry.spec.IPropertySpecification},
-     *  or null  if no such specification exist.
-     * 
-     *  @since 3.0
-     *  @see #addPropertySpecification(IPropertySpecification)
-     * 
-     **/
-    public abstract IPropertySpecification getPropertySpecification(String name);
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/spec/IContainedComponent.java b/3.0.4/framework/src/org/apache/tapestry/spec/IContainedComponent.java
deleted file mode 100644
index 8a30f81..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/spec/IContainedComponent.java
+++ /dev/null
@@ -1,79 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.spec;
-
-import java.util.Collection;
-
-import org.apache.tapestry.ILocatable;
-import org.apache.tapestry.ILocationHolder;
-import org.apache.tapestry.util.IPropertyHolder;
-
-/**
- * Defines a contained component.  This includes the information needed to
- * get the contained component's specification, as well as any bindings
- * for the component.
-
- * @author glongman@intelligentworks.com
- * @version $Id$
- */
-public interface IContainedComponent extends IPropertyHolder, ILocationHolder, ILocatable
-{
-    /**
-     *  Returns the named binding, or null if the binding does not
-     *  exist.
-     *
-     **/
-    public abstract IBindingSpecification getBinding(String name);
-    /**
-     *  Returns an umodifiable <code>Collection</code>
-     *  of Strings, each the name of one binding
-     *  for the component.
-     *
-     **/
-    public abstract Collection getBindingNames();
-    public abstract String getType();
-    public abstract void setBinding(String name, IBindingSpecification spec);
-    public abstract void setType(String value);
-    /**
-     * 	Sets the String Id of the component being copied from.
-     *  For use by IDE tools like Spindle.
-     * 
-     *  @since 1.0.9
-     **/
-    public abstract void setCopyOf(String id);
-    /**
-     * 	Returns the id of the component being copied from.
-     *  For use by IDE tools like Spindle.
-     * 
-     *  @since 1.0.9
-     **/
-    public abstract String getCopyOf();
-
-    /**
-     * Returns whether the contained component will inherit 
-     * the informal parameters of its parent. 
-     * 
-     * @since 3.0
-     **/
-    public abstract boolean getInheritInformalParameters();
-
-    /**
-     * Sets whether the contained component will inherit 
-     * the informal parameters of its parent. 
-     * 
-     * @since 3.0
-     */
-    public abstract void setInheritInformalParameters(boolean value);
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/spec/IExtensionSpecification.java b/3.0.4/framework/src/org/apache/tapestry/spec/IExtensionSpecification.java
deleted file mode 100644
index 5326f39..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/spec/IExtensionSpecification.java
+++ /dev/null
@@ -1,59 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.spec;
-
-import java.util.Map;
-
-import org.apache.tapestry.ILocatable;
-import org.apache.tapestry.ILocationHolder;
-import org.apache.tapestry.IResourceResolver;
-import org.apache.tapestry.util.IPropertyHolder;
-
-/**
- *  Defines an "extension", which is much like a helper bean, but 
- *  is part of a library or application specification (and has the same
- *  lifecycle as the application).
- * 
- * @author glongman@intelligentworks.com
- * @version $Id$
- */
-public interface IExtensionSpecification extends IPropertyHolder, ILocationHolder, ILocatable
-{
-    public abstract String getClassName();
-    public abstract void setClassName(String className);
-    public abstract void addConfiguration(String propertyName, Object value);
-    /**
-     *  Returns an immutable Map of the configuration; keyed on property name,
-     *  with values as properties to assign.
-     * 
-     **/
-    public abstract Map getConfiguration();
-    /**
-     *  Invoked to instantiate an instance of the extension and return it.
-     *  It also configures properties of the extension.
-     * 
-     **/
-    public abstract Object instantiateExtension(IResourceResolver resolver);
-    /**
-     *  Returns true if the extensions should be instantiated
-     *  immediately after the containing 
-     *  {@link org.apache.tapestry.spec.LibrarySpecification}
-     *  if parsed.  Non-immediate extensions are instantiated
-     *  only as needed.
-     * 
-     **/
-    public abstract boolean isImmediate();
-    public abstract void setImmediate(boolean immediate);
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/spec/ILibrarySpecification.java b/3.0.4/framework/src/org/apache/tapestry/spec/ILibrarySpecification.java
deleted file mode 100644
index f92a3d1..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/spec/ILibrarySpecification.java
+++ /dev/null
@@ -1,215 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.spec;
-
-import java.util.List;
-import java.util.Map;
-
-import org.apache.tapestry.ILocationHolder;
-import org.apache.tapestry.IResourceLocation;
-import org.apache.tapestry.IResourceResolver;
-import org.apache.tapestry.util.IPropertyHolder;
-
-/**
- *  Interface for the Specification for a library.  {@link org.apache.tapestry.spec.ApplicationSpecification}
- *  is a specialized kind of library.
- *
- *  @author Geoffrey Longman
- *  @version $Id$
- *  @since 2.2
- *
- **/
-
-public interface ILibrarySpecification extends IPropertyHolder, ILocationHolder
-{
-
-    /**
-     *  Returns the specification path (within the classpath) for
-     *  an embedded library, or null if
-     *  no such library has been defined.
-     * 
-     **/
-    
-    public String getLibrarySpecificationPath(String id);
-
-    /**
-     *  Sets the specification path for an embedded library.
-     * 
-     *  @throws IllegalArgumentException if a library with the given
-     *  id already exists
-     * 
-     **/
-
-    public void setLibrarySpecificationPath(String id, String path);
-
-    /**
-     *  Returns a sorted list of library ids (or the empty list, but not null).
-     * 
-     **/
-    
-    public List getLibraryIds();
-    
-    public String getPageSpecificationPath(String name);
-
-    public void setPageSpecificationPath(String name, String path);
-
-    /**
-     *  Returns a sorted list of page names explicitly defined by this library,
-     *  or an empty list (but not null).
-     * 
-     **/
-    
-    public List getPageNames();
-    
-    public void setComponentSpecificationPath(String type, String path);
-
-    public String getComponentSpecificationPath(String type);
-
-    /**
-     *  Returns the simple types of all components defined in
-     *  this library.  Returns a list of strings in sorted order,
-     *  or an empty list (but not null).
-     * 
-     *  @since 3.0
-     * 
-     **/
-
-    public List getComponentTypes();
-    
-    public String getServiceClassName(String name);
-
-    /**
-     *  Returns a sorted list of service names (or an empty list, but
-     *  not null).
-     * 
-     **/
-    
-    public List getServiceNames();
-
-    public void setServiceClassName(String name, String className);
-
-
-    /**
-     * 
-     *  Returns the documentation for this library..
-     * 
-     * 
-     **/
-
-    public String getDescription();
-
-    /**
-     *  
-     *  Sets the documentation for this library.
-     * 
-     * 
-     **/
-
-    public void setDescription(String description);
-    
-    /**
-     *  Returns a Map of extensions; key is extension name, value is
-     *  {@link org.apache.tapestry.spec.IExtensionSpecification}.
-     *  May return null.  The returned Map is immutable.
-     * 
-     **/
-
-    public Map getExtensionSpecifications();
-
-    /**
-     *  Adds another extension specification.
-     *  
-     **/
-
-    public void addExtensionSpecification(String name, IExtensionSpecification extension);
-    
-    /**
-     *  Returns a sorted List of the names of all extensions.  May return the empty list,
-     *  but won't return null.
-     * 
-     **/
-
-    public List getExtensionNames();
-    
-    /**
-     *  Returns the named IExtensionSpecification, or null if it doesn't exist.
-     * 
-     **/
-
-    public IExtensionSpecification getExtensionSpecification(String name);
-    
-
-    /**
-     *  Returns an instantiated extension.  Extensions are created as needed and
-     *  cached for later use.
-     * 
-     *  @throws IllegalArgumentException if no extension specification exists for the
-     *  given name.
-     * 
-     **/
-
-    public Object getExtension(String name);
-
-    /**
-     *  Returns an instantiated extension, performing a check to ensure
-     *  that the extension is a subtype of the given class (or extends the given
-     *  interface).
-     * 
-     *  @throws IllegalArgumentException if no extension specification exists for
-     *  the given name, or if the extension fails the type check.
-     * 
-     *  @since 3.0
-     * 
-     **/
-    
-    public Object getExtension(String name, Class typeConstraint);
-
-    /**
-     *  Returns true if the named extension exists (or can be instantiated),
-     *  returns false if the named extension has no specification.
-     * 
-     **/
-    
-    public boolean checkExtension(String name);
-
-    /**
-     *  Invoked after the entire specification has been constructed
-     *  to instantiate any extensions marked immediate.
-     * 
-     **/
-
-    public void instantiateImmediateExtensions();
-
-    public IResourceResolver getResourceResolver();
-
-    public void setResourceResolver(IResourceResolver resolver);
-    
-    public String getPublicId();
-    
-    public void setPublicId(String value);
-
-    /**
-     *  Returns the location from which the specification was read.
-     * 
-     *  @since 3.0
-     * 
-     **/
-    
-    public IResourceLocation getSpecificationLocation();
-    
-    /** @since 3.0 **/
-    
-    public void setSpecificationLocation(IResourceLocation specificationLocation);    
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/spec/IListenerBindingSpecification.java b/3.0.4/framework/src/org/apache/tapestry/spec/IListenerBindingSpecification.java
deleted file mode 100644
index ecd70f4..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/spec/IListenerBindingSpecification.java
+++ /dev/null
@@ -1,35 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.spec;
-
-/**
- *  Special interface of {@link org.apache.tapestry.spec.IBindingSpecification} used
- *  to encapsulate additional information the additional information 
- *  specific to listener bindings.  In an IListenerBindingSpecification, the
- *  value property is the actual script (and is aliased as property script), 
- *  but an additional property,
- *  language, (which may be null) is needed.  This is the language
- *  the script is written in. * 
- * 
- * @author glongman@intelligentworks.com
- * @version $Id$
- * @since 3.0
- */
-public interface IListenerBindingSpecification extends IBindingSpecification
-{
-    public abstract String getLanguage();
-    public abstract String getScript();
-    public abstract void setLanguage(String language);
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/spec/IParameterSpecification.java b/3.0.4/framework/src/org/apache/tapestry/spec/IParameterSpecification.java
deleted file mode 100644
index 6f7723b..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/spec/IParameterSpecification.java
+++ /dev/null
@@ -1,93 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.spec;
-
-import org.apache.tapestry.ILocationHolder;
-
-/**
- *  Defines a formal parameter to a component.  An <code>IParameterSpecification</code>
- *  is contained by a {@link IComponentSpecification}.
- *
- *  <p>TBD: Identify arrays in some way.
- * 
- * @author glongman@intelligentworks.com
- * @version $Id$
- */
-public interface IParameterSpecification extends ILocationHolder
-{
-    /**
-     *  Returns the class name of the expected type of the parameter.  The default value
-     *  is <code>java.lang.Object</code> which matches anything.
-     *
-     **/
-    public abstract String getType();
-    /**
-     *  Returns true if the parameter is required by the component.
-     *  The default is false, meaning the parameter is optional.
-     *
-     **/
-    public abstract boolean isRequired();
-    public abstract void setRequired(boolean value);
-    /**
-     *  Sets the type of value expected for the parameter.  This can be
-     *  left blank to indicate any type.
-     * 
-     **/
-    public abstract void setType(String value);
-    /**
-     *  Returns the documentation for this parameter.
-     * 
-     *  @since 1.0.9
-     * 
-     **/
-    public abstract String getDescription();
-    /**
-     *  Sets the documentation for this parameter.
-     * 
-     *  @since 1.0.9
-     *    	 
-     **/
-    public abstract void setDescription(String description);
-    /**
-     *  Sets the property name (of the component class)
-     *  to connect the parameter to.
-     * 
-     **/
-    public abstract void setPropertyName(String propertyName);
-    /**
-     *  Returns the name of the JavaBeans property to connect the
-     *  parameter to.
-     * 
-     **/
-    public abstract String getPropertyName();
-    /**
-     *  Returns the parameter value direction, defaulting to {@link Direction#CUSTOM}
-     *  if not otherwise specified.
-     * 
-     **/
-    public abstract Direction getDirection();
-    public abstract void setDirection(Direction direction);
-    /**
-     *  Returns the default value of the JavaBeans property if no binding is provided
-     *  or null if it has not been specified
-     **/
-    public abstract String getDefaultValue();
-    /**
-     *  Sets the default value of the JavaBeans property if no binding is provided
-     * 
-     **/
-    public abstract void setDefaultValue(String defaultValue);
-    
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/spec/IPropertySpecification.java b/3.0.4/framework/src/org/apache/tapestry/spec/IPropertySpecification.java
deleted file mode 100644
index cec6eaa..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/spec/IPropertySpecification.java
+++ /dev/null
@@ -1,43 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.spec;
-
-import org.apache.tapestry.ILocationHolder;
-
-/**
- *  Defines a transient or persistant property of a component or page.  
- *  A {@link org.apache.tapestry.engine.IComponentClassEnhancer} uses this information
- *  to create a subclass with the necessary instance variables and methods.  
- *  
- * @author glongman@intelligentworks.com
- * @version $Id$
- */
-public interface IPropertySpecification extends ILocationHolder
-{
-    public abstract String getInitialValue();
-    public abstract String getName();
-    public abstract boolean isPersistent();
-    public abstract String getType();
-    public abstract void setInitialValue(String initialValue);
-    /**
-     *  Sets the name of the property.  This should not be changed
-     *  once this IPropertySpecification is added to
-     *  a {@link org.apache.tapestry.spec.IComponentSpecification}.
-     * 
-     **/
-    public abstract void setName(String name);
-    public abstract void setPersistent(boolean persistant);
-    public abstract void setType(String type);
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/spec/LibrarySpecification.java b/3.0.4/framework/src/org/apache/tapestry/spec/LibrarySpecification.java
deleted file mode 100644
index 0e60a4a..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/spec/LibrarySpecification.java
+++ /dev/null
@@ -1,637 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.spec;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.commons.lang.builder.ToStringBuilder;
-import org.apache.tapestry.ApplicationRuntimeException;
-import org.apache.tapestry.ILocation;
-import org.apache.tapestry.IResourceLocation;
-import org.apache.tapestry.IResourceResolver;
-import org.apache.tapestry.Tapestry;
-
-/**
- *  Specification for a library.  {@link org.apache.tapestry.spec.ApplicationSpecification}
- *  is a specialized kind of library.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 2.2
- *
- **/
-
-public class LibrarySpecification extends LocatablePropertyHolder implements ILibrarySpecification
-{
-    /**
-     *  Resource resolver (used to instantiate extensions).
-     * 
-     **/
-
-    private IResourceResolver _resolver;
-
-    /**
-     *  Map of page name to page specification path.
-     * 
-     **/
-
-    private Map _pages;
-
-    /**
-     *  Map of component alias to component specification path.
-     * 
-     **/
-    private Map _components;
-
-    /**
-     *  Map of service name to service class name.
-     * 
-     **/
-
-    private Map _services;
-
-    /**
-     *  Map of library id to library specification path.
-     * 
-     **/
-
-    private Map _libraries;
-
-    private String _description;
-
-    /**
-     *  Map of extension name to {@link IExtensionSpecification}.
-     * 
-     **/
-
-    private Map _extensions;
-
-    /**
-     *  Map of extension name to Object for instantiated extensions.
-     * 
-     **/
-
-    private Map _instantiatedExtensions;
-
-    /**
-     *  The XML Public Id used when the library specification was read
-     *  (if applicable).
-     * 
-     *  @since 2.2
-     * 
-     **/
-
-    private String _publicId;
-
-    /**
-     *  The location of the specification.
-     * 
-     **/
-
-    private IResourceLocation _specificationLocation;
-
-    public String getLibrarySpecificationPath(String id)
-    {
-        return (String) get(_libraries, id);
-    }
-
-    /**
-     *  Sets the specification path for an embedded library.
-     * 
-     *  @throws IllegalArgumentException if a library with the given
-     *  id already exists
-     * 
-     **/
-
-    public void setLibrarySpecificationPath(String id, String path)
-    {
-        if (_libraries == null)
-            _libraries = new HashMap();
-
-        if (_libraries.containsKey(id))
-            throw new IllegalArgumentException(
-                Tapestry.format("LibrarySpecification.duplicate-child-namespace-id", id));
-
-        _libraries.put(id, path);
-    }
-
-    public List getLibraryIds()
-    {
-        return sortedKeys(_libraries);
-    }
-
-    public String getPageSpecificationPath(String name)
-    {
-        return (String) get(_pages, name);
-    }
-
-    public void setPageSpecificationPath(String name, String path)
-    {
-        if (_pages == null)
-            _pages = new HashMap();
-
-        if (_pages.containsKey(name))
-            throw new IllegalArgumentException(
-                Tapestry.format("LibrarySpecification.duplicate-page-name", name));
-
-        _pages.put(name, path);
-    }
-
-    public List getPageNames()
-    {
-        return sortedKeys(_pages);
-    }
-
-    public void setComponentSpecificationPath(String alias, String path)
-    {
-        if (_components == null)
-            _components = new HashMap();
-
-        if (_components.containsKey(alias))
-            throw new IllegalArgumentException(
-                Tapestry.format("LibrarySpecification.duplicate-component-alias", alias));
-
-        _components.put(alias, path);
-    }
-
-    public String getComponentSpecificationPath(String alias)
-    {
-        return (String) get(_components, alias);
-    }
-
-    /**
-     *  @since 3.0
-     * 
-     **/
-
-    public List getComponentTypes()
-    {
-        return sortedKeys(_components);
-    }
-
-    public String getServiceClassName(String name)
-    {
-        return (String) get(_services, name);
-    }
-
-    public List getServiceNames()
-    {
-        return sortedKeys(_services);
-    }
-
-    public void setServiceClassName(String name, String className)
-    {
-        if (_services == null)
-            _services = new HashMap();
-
-        if (_services.containsKey(name))
-            throw new IllegalArgumentException(
-                Tapestry.format("LibrarySpecification.duplicate-service-name", name));
-
-        _services.put(name, className);
-    }
-
-    private List sortedKeys(Map map)
-    {
-        if (map == null)
-            return Collections.EMPTY_LIST;
-
-        List result = new ArrayList(map.keySet());
-
-        Collections.sort(result);
-
-        return result;
-    }
-
-    private Object get(Map map, Object key)
-    {
-        if (map == null)
-            return null;
-
-        return map.get(key);
-    }
-
-    /**
-     * 
-     *  Returns the documentation for this library..
-     * 
-     * 
-     **/
-
-    public String getDescription()
-    {
-        return _description;
-    }
-
-    /**
-     *  
-     *  Sets the documentation for this library.
-     * 
-     * 
-     **/
-
-    public void setDescription(String description)
-    {
-        _description = description;
-    }
-
-    /**
-     *  Returns a Map of extensions; key is extension name, value is
-     *  {@link org.apache.tapestry.spec.IExtensionSpecification}.
-     *  May return null.  The returned Map is immutable.
-     * 
-     **/
-
-    public Map getExtensionSpecifications()
-    {
-        if (_extensions == null)
-            return null;
-
-        return Collections.unmodifiableMap(_extensions);
-    }
-
-    /**
-     *  Adds another extension specification.
-     * 
-     *  @throws IllegalArgumentException if an extension with the given name already exists.
-     * 
-     **/
-
-    public void addExtensionSpecification(String name, IExtensionSpecification extension)
-    {
-        if (_extensions == null)
-            _extensions = new HashMap();
-
-        if (_extensions.containsKey(name))
-            throw new IllegalArgumentException(
-                Tapestry.format("LibrarySpecification.duplicate-extension-name", this, name));
-
-        _extensions.put(name, extension);
-    }
-
-    /**
-     *  Returns a sorted List of the names of all extensions.  May return the empty list,
-     *  but won't return null.
-     * 
-     **/
-
-    public synchronized List getExtensionNames()
-    {
-        return sortedKeys(_instantiatedExtensions);
-    }
-
-    /**
-     *  Returns the named IExtensionSpecification, or null if it doesn't exist.
-     * 
-     **/
-
-    public IExtensionSpecification getExtensionSpecification(String name)
-    {
-        if (_extensions == null)
-            return null;
-
-        return (IExtensionSpecification) _extensions.get(name);
-    }
-
-    /**
-     *  Returns true if this library specification has a specification
-     *  for the named extension.
-     * 
-     **/
-
-    public boolean checkExtension(String name)
-    {
-        if (_extensions == null)
-            return false;
-
-        return _extensions.containsKey(name);
-    }
-
-    /**
-     *  Returns an instantiated extension.  Extensions are created as needed and
-     *  cached for later use.
-     * 
-     *  @throws IllegalArgumentException if no extension specification exists for the
-     *  given name.
-     * 
-     **/
-
-    public synchronized Object getExtension(String name)
-    {
-        return getExtension(name, null);
-    }
-
-    /** @since 3.0 **/
-
-    public synchronized Object getExtension(String name, Class typeConstraint)
-    {
-        if (_instantiatedExtensions == null)
-            _instantiatedExtensions = new HashMap();
-
-        Object result = _instantiatedExtensions.get(name);
-        IExtensionSpecification spec = getExtensionSpecification(name);
-
-        if (spec == null)
-            throw new IllegalArgumentException(
-                Tapestry.format("LibrarySpecification.no-such-extension", name));
-
-        if (result == null)
-        {
-
-            result = spec.instantiateExtension(_resolver);
-
-            _instantiatedExtensions.put(name, result);
-        }
-
-        if (typeConstraint != null)
-            applyTypeConstraint(name, result, typeConstraint, spec.getLocation());
-
-        return result;
-    }
-
-    /**
-     *  Checks that an extension conforms to the supplied type constraint.
-     * 
-     *  @throws IllegalArgumentException if the extension fails the check.
-     * 
-     *  @since 3.0
-     *  
-     **/
-
-    protected void applyTypeConstraint(
-        String name,
-        Object extension,
-        Class typeConstraint,
-        ILocation location)
-    {
-        Class extensionClass = extension.getClass();
-
-        // Can you assign an instance of the extension to a variable
-        // of type typeContraint legally?
-
-        if (typeConstraint.isAssignableFrom(extensionClass))
-            return;
-
-        String key =
-            typeConstraint.isInterface()
-                ? "LibrarySpecification.extension-does-not-implement-interface"
-                : "LibrarySpecification.extension-not-a-subclass";
-
-        throw new ApplicationRuntimeException(
-            Tapestry.format(key, name, extensionClass.getName(), typeConstraint.getName()),
-            location,
-            null);
-    }
-
-    /**
-     *  Invoked after the entire specification has been constructed
-     *  to instantiate any extensions marked immediate.
-     * 
-     **/
-
-    public synchronized void instantiateImmediateExtensions()
-    {
-        if (_extensions == null)
-            return;
-
-        Iterator i = _extensions.entrySet().iterator();
-
-        while (i.hasNext())
-        {
-            Map.Entry entry = (Map.Entry) i.next();
-
-            IExtensionSpecification spec = (IExtensionSpecification) entry.getValue();
-
-            if (!spec.isImmediate())
-                continue;
-
-            String name = (String) entry.getKey();
-
-            getExtension(name);
-        }
-
-    }
-
-    public IResourceResolver getResourceResolver()
-    {
-        return _resolver;
-    }
-
-    public void setResourceResolver(IResourceResolver resolver)
-    {
-        _resolver = resolver;
-    }
-
-    /**
-     *  Returns the extensions map.
-     *  @return Map of objects.
-     * 
-     **/
-
-    protected Map getExtensions()
-    {
-        return _extensions;
-    }
-
-    /**
-     *  Updates the extension map.
-     *  @param extension A Map of extension specification paths
-     *  keyed on extension id.
-     * 
-     * <p>The map is retained, not copied.
-     *
-     **/
-
-    protected void setExtensions(Map extension)
-    {
-        _extensions = extension;
-    }
-
-    /**
-     *  Returns the libraries map.
-     *  @return Map of {@link LibrarySpecification}.
-     * 
-     **/
-
-    protected Map getLibraries()
-    {
-        return _libraries;
-    }
-
-    /**
-     *  Updates the library map.
-     *  @param libraries A Map of library specification paths 
-     *  keyed on library id.
-     * 
-     *  <p>The map is retained, not copied.
-     *
-     **/
-
-    protected void setLibraries(Map libraries)
-    {
-        _libraries = libraries;
-    }
-
-    /**
-     *  Returns the pages map.
-     *  @return Map of {@link IComponentSpecification}.
-     * 
-     **/
-
-    protected Map getPages()
-    {
-        return _pages;
-    }
-
-    /**
-     *  Updates the page map.
-     *  @param pages A Map of page specification paths 
-     *  keyed on page id.
-     * 
-     *  <p>The map is retained, not copied.
-     *
-     **/
-
-    protected void setPages(Map pages)
-    {
-        _pages = pages;
-    }
-
-    /**
-     * Returns the services.
-     * @return Map of service class names.
-     * 
-     **/
-
-    protected Map getServices()
-    {
-        return _services;
-    }
-
-    /**
-     *  Updates the services map.
-     *  @param services A Map of the fully qualified names of classes 
-     *  which implement
-     *  {@link org.apache.tapestry.engine.IEngineService}
-     *  keyed on service id.
-     * 
-     *  <p>The map is retained, not copied.
-     *
-     **/
-
-    protected void setServices(Map services)
-    {
-        _services = services;
-    }
-
-    /**
-     *  Returns the components map.
-     *  @return Map of {@link IContainedComponent}.
-     * 
-     **/
-
-    protected Map getComponents()
-    {
-        return _components;
-    }
-
-    /**
-     *  Updates the components map.
-     *  @param components A Map of {@link IContainedComponent} keyed on component id.
-     *  The map is retained, not copied.
-     *
-     **/
-
-    protected void setComponents(Map components)
-    {
-        _components = components;
-    }
-
-    /**
-     *  Returns the XML Public Id for the library file, or null
-     *  if not applicable.
-     * 
-     *  <p>
-     *  This method exists as a convienience for the Spindle plugin.
-     *  A previous method used an arbitrary version string, the
-     *  public id is more useful and less ambiguous.
-     *  
-     * 
-     **/
-
-    public String getPublicId()
-    {
-        return _publicId;
-    }
-
-    public void setPublicId(String publicId)
-    {
-        _publicId = publicId;
-    }
-
-    /** @since 3.0 **/
-
-    public IResourceLocation getSpecificationLocation()
-    {
-        return _specificationLocation;
-    }
-
-    /** @since 3.0 **/
-
-    public void setSpecificationLocation(IResourceLocation specificationLocation)
-    {
-        _specificationLocation = specificationLocation;
-    }
-
-    /** @since 3.0 **/
-
-    public synchronized String toString()
-    {
-        ToStringBuilder builder = new ToStringBuilder(this);
-
-        builder.append("components", _components);
-        builder.append("description", _description);
-        builder.append("instantiatedExtensions", _instantiatedExtensions);
-        builder.append("libraries", _libraries);
-        builder.append("pages", _pages);
-        builder.append("publicId", _publicId);
-        builder.append("resolver", _resolver);
-        builder.append("services", _services);
-        builder.append("specificationLocation", _specificationLocation);
-
-        extendDescription(builder);
-
-        return builder.toString();
-    }
-
-    /**
-     *  Does nothing, subclasses may override to add additional
-     *  description.
-     * 
-     *  @see #toString()
-     *  @since 3.0
-     * 
-     **/
-
-    protected void extendDescription(ToStringBuilder builder)
-    {
-    }
-
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/spec/ListenerBindingSpecification.java b/3.0.4/framework/src/org/apache/tapestry/spec/ListenerBindingSpecification.java
deleted file mode 100644
index a5fd468..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/spec/ListenerBindingSpecification.java
+++ /dev/null
@@ -1,56 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.spec;
-
-/**
- *  Special subclass of {@link org.apache.tapestry.spec.BindingSpecification} used
- *  to encapsulate the additional information 
- *  specific to listener bindings.  In a ListenerBindingSpecification, the
- *  value property is the actual script (and is aliased as property script), 
- *  but an additional property,
- *  language, (which may be null) is needed.  This is the language
- *  the script is written in.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 3.0
- *
- **/
-
-public class ListenerBindingSpecification extends BindingSpecification implements IListenerBindingSpecification
-{
-    protected String _language;
-    
-    public ListenerBindingSpecification()
-    {
-    	setType(BindingType.LISTENER);
-    }
-    
-    public String getLanguage()
-    {
-        return _language;
-    }
-    
-    public String getScript()
-    {
-        return getValue();
-    }
-    
-    public void setLanguage(String language)
-    {
-        _language = language;
-    }
-
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/spec/LocatablePropertyHolder.java b/3.0.4/framework/src/org/apache/tapestry/spec/LocatablePropertyHolder.java
deleted file mode 100644
index cbf7f5f..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/spec/LocatablePropertyHolder.java
+++ /dev/null
@@ -1,47 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.spec;
-
-import org.apache.tapestry.ILocation;
-import org.apache.tapestry.ILocationHolder;
-import org.apache.tapestry.util.BasePropertyHolder;
-
-/**
- *  Base class for implementing both
- *  interfaces {@link org.apache.tapestry.util.IPropertyHolder} and
- *  {@link org.apache.tapestry.ILocationHolder}.  This is
- *  used by all the specification classes.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 3.0
- *
- **/
-
-public class LocatablePropertyHolder extends BasePropertyHolder implements ILocationHolder
-{
-	private ILocation _location;
-	
-    public ILocation getLocation()
-    {
-        return _location;
-    }
-
-    public void setLocation(ILocation location)
-    {
-        _location = location;
-    }
-
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/spec/ParameterSpecification.java b/3.0.4/framework/src/org/apache/tapestry/spec/ParameterSpecification.java
deleted file mode 100644
index 0115043..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/spec/ParameterSpecification.java
+++ /dev/null
@@ -1,164 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.spec;
-
-/**
- *  Defines a formal parameter to a component.  A <code>IParameterSpecification</code>
- *  is contained by a {@link IComponentSpecification}.
- *
- *  <p>TBD: Identify arrays in some way.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- * 
- **/
-
-public class ParameterSpecification extends BaseLocatable implements IParameterSpecification
-{
-    private boolean required = false;
-    private String type;
-
-    /** @since 1.0.9 **/
-    private String description;
-    
-    /** @since 2.0.3 **/
-    private String propertyName;
-    
-    /** @since 3.0 **/
-    private String defaultValue = null;
-
-	private Direction direction = Direction.CUSTOM;
-	
-    /**
-     *  Returns the class name of the expected type of the parameter.  The default value
-     *  is <code>java.lang.Object</code> which matches anything.
-     *
-     **/
-
-    public String getType()
-    {
-        return type;
-    }
-
-    /**
-     *  Returns true if the parameter is required by the component.
-     *  The default is false, meaning the parameter is optional.
-     *
-     **/
-
-    public boolean isRequired()
-    {
-        return required;
-    }
-
-    public void setRequired(boolean value)
-    {
-        required = value;
-    }
-
-	/**
-	 *  Sets the type of value expected for the parameter.  This can be
-	 *  left blank to indicate any type.
-	 * 
-	 **/
-	
-    public void setType(String value)
-    {
-        type = value;
-    }
-
-    /**
-     *  Returns the documentation for this parameter.
-     * 
-     *  @since 1.0.9
-     * 
-     **/
-
-    public String getDescription()
-    {
-        return description;
-    }
-
-    /**
-     *  Sets the documentation for this parameter.
-     * 
-     *  @since 1.0.9
-     *    	 
-     **/
-
-    public void setDescription(String description)
-    {
-        this.description = description;
-    }
-    
-    /**
-     *  Sets the property name (of the component class)
-     *  to connect the parameter to.
-     * 
-     **/
-    
-    public void setPropertyName(String propertyName)
-    {
-        this.propertyName = propertyName;
-    }
-    
-    /**
-     *  Returns the name of the JavaBeans property to connect the
-     *  parameter to.
-     * 
-     **/
-    
-    public String getPropertyName()
-    {
-       return propertyName;
-    }
-
-	/**
-	 *  Returns the parameter value direction, defaulting to {@link Direction#CUSTOM}
-	 *  if not otherwise specified.
-	 * 
-	 **/
-	
-    public Direction getDirection()
-    {
-        return direction;
-    }
-
-    public void setDirection(Direction direction)
-    {
-        if (direction == null)
-        	throw new IllegalArgumentException("direction may not be null.");
-        	
-        this.direction = direction;
-    }
-
-
-    /**
-     * @see org.apache.tapestry.spec.IParameterSpecification#getDefaultValue()
-     */
-    public String getDefaultValue()
-    {
-        return defaultValue;
-    }
-
-    /**
-     * @see org.apache.tapestry.spec.IParameterSpecification#setDefaultValue(java.lang.String)
-     */
-    public void setDefaultValue(String defaultValue)
-    {
-        this.defaultValue = defaultValue;
-    }
-
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/spec/PropertySpecification.java b/3.0.4/framework/src/org/apache/tapestry/spec/PropertySpecification.java
deleted file mode 100644
index 566a364..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/spec/PropertySpecification.java
+++ /dev/null
@@ -1,81 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.spec;
-/**
- *  Defines a transient or persistant property of a component or page.  
- *  A {@link org.apache.tapestry.engine.IComponentClassEnhancer} uses this information
- *  to create a subclass with the necessary instance variables and methods.  
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 3.0
- * 
- **/
-
-public class PropertySpecification extends BaseLocatable implements IPropertySpecification
-{
-	private String _name;
-	private String _type = "java.lang.Object";
-	private boolean _persistent;
-	private String _initialValue;
-	
-    public String getInitialValue()
-    {
-        return _initialValue;
-    }
-
-    public String getName()
-    {
-        return _name;
-    }
-
-    public boolean isPersistent()
-    {
-        return _persistent;
-    }
-
-    public String getType()
-    {
-        return _type;
-    }
-
-    public void setInitialValue(String initialValue)
-    {
-        _initialValue = initialValue;
-    }
-
-	/**
-	 *  Sets the name of the property.  This should not be changed
-	 *  once this IPropertySpecification is added to
-	 *  a {@link org.apache.tapestry.spec.ComponentSpecification}.
-	 * 
-	 **/
-	
-    public void setName(String name)
-    {
-        _name = name;
-    }
-
-    public void setPersistent(boolean persistant)
-    {
-        _persistent = persistant;
-    }
-
-    public void setType(String type)
-    {
-        _type = type;
-    }
-
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/spec/SpecFactory.java b/3.0.4/framework/src/org/apache/tapestry/spec/SpecFactory.java
deleted file mode 100644
index 2210b0a..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/spec/SpecFactory.java
+++ /dev/null
@@ -1,180 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.spec;
-
-import org.apache.tapestry.bean.ExpressionBeanInitializer;
-import org.apache.tapestry.bean.IBeanInitializer;
-import org.apache.tapestry.bean.MessageBeanInitializer;
-
-/**
- *  A Factory used by {@link org.apache.tapestry.parse.SpecificationParser} to create Tapestry
- *  domain objects.
- * 
- *  <p>
- *  The default implementation here creates the expected runtime
- *  instances of classes in packages:
- *  <ul>
- *  <li>org.apache.tapestry.spec</li>
- *  <li>org.apache.tapestry.bean</li>
- *  </ul>
- * 
- *  <p>
- *  This class is extended by Spindle - the Eclipse Plugin for Tapestry
- * 
- *  @author GWL
- *  @since 1.0.9
- * 
- **/
-
-public class SpecFactory
-{
-    /**
-     * Creates a concrete instance of {@link ApplicationSpecification}.
-     **/
-
-    public IApplicationSpecification createApplicationSpecification()
-    {
-        return new ApplicationSpecification();
-    }
-
-    /**
-     *  Creates an instance of {@link LibrarySpecification}.
-     * 
-     *  @since 2.2
-     * 
-     **/
-
-    public ILibrarySpecification createLibrarySpecification()
-    {
-        return new LibrarySpecification();
-    }
-
-	/**
-	 *  Returns a new instance of {@link IAssetSpecification}.
-	 * 
-	 *  @since 3.0
-	 * 
-	 **/
-	
-	public IAssetSpecification createAssetSpecification()
-	{
-		return new AssetSpecification();
-	}
-
-	/**
-	 *  Creates a new instance of {@link IBeanSpecification}.
-	 * 
-	 *  @since 3.0
-	 * 
-	 **/
-	
-	public IBeanSpecification createBeanSpecification()
-	{
-		return new BeanSpecification();
-	}
-
-	public IBindingSpecification createBindingSpecification() 
-	{
-		return new BindingSpecification();
-	}
-
-    /**
-     *  Creates a new concrete instance of {@link IListenerBindingSpecification} for the
-     *  given language (which is option) and script.
-     * 
-     *  @since 3.0
-     *  
-     **/
-
-    public IListenerBindingSpecification createListenerBindingSpecification()
-    {
-        return new ListenerBindingSpecification();
-    }
-
-    /**
-     * Creates a concrete instance of {@link IComponentSpecification}.
-     **/
-
-    public IComponentSpecification createComponentSpecification()
-    {
-        return new ComponentSpecification();
-    }
-
-    /**
-     * Creates a concrete instance of {@link IContainedComponent}.
-     **/
-
-    public IContainedComponent createContainedComponent()
-    {
-        return new ContainedComponent();
-    }
-
-    /**
-     * Creates a concrete instance of {@link ParameterSpecification}.
-     **/
-
-    public IParameterSpecification createParameterSpecification()
-    {
-        return new ParameterSpecification();
-    }
-
-	/**
-	 *  Creates a new instance of {@link ExpressionBeanInitializer}.
-	 * 
-	 *  @since 3.0
-	 * 
-	 **/
-	
-	public IBeanInitializer createExpressionBeanInitializer()
-	{
-		return new ExpressionBeanInitializer();
-	}
-
-	/**
-	 *  Returns a new instance of {@link MessageBeanInitializer}.
-	 * 
-	 *  @since 3.0
-	 * 
-	 **/
-	
-	public IBeanInitializer createMessageBeanInitializer()
-	{
-		return new MessageBeanInitializer();
-	}
-
-    /**
-     *  Creates a concrete instance of {@link org.apache.tapestry.spec.IExtensionSpecification}.
-     * 
-     *  @since 2.2
-     * 
-     **/
-
-    public IExtensionSpecification createExtensionSpecification()
-    {
-        return new ExtensionSpecification();
-    }
-    
-    /**
-     *  Creates a concrete instance of {@link org.apache.tapestry.spec.IPropertySpecification}.
-     * 
-     *  @since 3.0
-     * 
-     **/
-    
-    public IPropertySpecification createPropertySpecification()
-    {
-    	return new PropertySpecification();
-    }
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/spec/package.html b/3.0.4/framework/src/org/apache/tapestry/spec/package.html
deleted file mode 100644
index 2dfaa02..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/spec/package.html
+++ /dev/null
@@ -1,14 +0,0 @@
-<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN">
-<!-- $Id$ -->
-<html>
-<head>
-<title>Tapestry: Web Application Framework</title>
-</head>
-<body>
-
-<p>Classes to represent application and component specifications.
-
-@author Howard Lewis Ship <a href="mailto:hlship@apache.org">hlship@apache.org</a>
-
-</body>
-</html>
diff --git a/3.0.4/framework/src/org/apache/tapestry/util/AdaptorRegistry.java b/3.0.4/framework/src/org/apache/tapestry/util/AdaptorRegistry.java
deleted file mode 100644
index 01ad478..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/util/AdaptorRegistry.java
+++ /dev/null
@@ -1,319 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.util;
-
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.LinkedList;
-import java.util.Map;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.tapestry.Tapestry;
-
-/**
- *  An implementation of the <b>Adaptor</b> pattern.  The adaptor
- *  pattern allows new functionality to be assigned to an existing class.
- *  As implemented here, this is a smart lookup between
- *  a particular class (the class to be adapted, called
- *  the <em>subject class</em>) and some object instance
- *  that can provide the extra functionality (called the
- *  <em>adaptor</em>).  The implementation of the adaptor is not relevant
- *  to the AdaptorRegistry class.
- *
- *  <p>Adaptors are registered before they can be used; the registration maps a
- *  particular class to an adaptor instance.  The adaptor instance will be used
- *  when the subject class matches the registered class, or the subject class
- *  inherits from the registered class.
- *
- *  <p>This means that a search must be made that walks the inheritance tree
- *  (upwards from the subject class) to find a registered mapping.
- *
- *  <p>In addition, adaptors can be registered against <em>interfaces</em>.
- *  Searching of interfaces occurs after searching of classes.  The exact order is:
- *
- *  <ul>
- *  <li>Search for the subject class, then each super-class of the subject class
- *      (excluding java.lang.Object)
- *  <li>Search interfaces, starting with interfaces implemented by the subject class,
- *  continuing with interfaces implemented by the super-classes, then
- *  interfaces extended by earlier interfaces (the exact order is a bit fuzzy)
- *  <li>Search for a match for java.lang.Object, if any
- *  </ul>
- *
- *  <p>The first match terminates the search.
- *
- *  <p>The AdaptorRegistry caches the results of search; a subsequent search for the
- *  same subject class will be resolved immediately.
- * 
- *  <p>AdaptorRegistry does a minor tweak of the "natural" inheritance.
- *  Normally, the parent class of an object array (i.e., <code>Foo[]</code>) is
- *  simply <code>Object</code>, even though you may assign 
- *  <code>Foo[]</code> to a variable of type <code>Object[]</code>.  AdaptorRegistry
- *  "fixes" this by searching for <code>Object[]</code> as if it was the superclass of
- *  any object array.  This means that the search path for <code>Foo[]</code> is
- *  <code>Foo[]</code>, <code>Object[]</code>, then a couple of interfaces 
- *  {@link java.lang.Cloneable}, {@link java.io.Serializable}, etc. that are\
- *  implicitily implemented by arrarys), and then, finally, <code>Object</code>
- * 
- *  <p>
- *  This tweak doesn't apply to scalar arrays, since scalar arrays may <em>not</em>
- *  be assigned to <code>Object[]</code>. 
- *
- *  <p>This class is thread safe.
- *
- *
- *  @version $Id$
- *  @author Howard Lewis Ship
- * 
- **/
-
-public class AdaptorRegistry
-{
-    private static final Log LOG = LogFactory.getLog(AdaptorRegistry.class);
-
-    /**
-     *  A Map of adaptor objects, keyed on registration Class.
-     *
-     **/
-
-    private Map registrations = new HashMap();
-
-    /**
-     *  A Map of adaptor objects, keyed on subject Class.
-     *
-     **/
-
-    private Map cache = new HashMap();
-
-    /**
-     *  Registers an adaptor for a registration class.
-     *
-     *  @throws IllegalArgumentException if an adaptor has already
-     *  been registered for the given class.
-     **/
-
-    public synchronized void register(Class registrationClass, Object adaptor)
-    {
-        if (registrations.containsKey(registrationClass))
-            throw new IllegalArgumentException(
-                Tapestry.format(
-                    "AdaptorRegistry.duplicate-registration",
-                    Tapestry.getClassName(registrationClass)));
-
-        registrations.put(registrationClass, adaptor);
-
-        if (LOG.isDebugEnabled())
-            LOG.debug("Registered " + adaptor + " for " + Tapestry.getClassName(registrationClass));
-
-        // Can't tell what is and isn't valid in the cache.
-        // Also, normally all registrations occur before any adaptors
-        // are searched for, so this is not a big deal.
-
-        cache.clear();
-    }
-
-    /**
-     *  Gets the adaptor for the specified subjectClass.
-     *
-     *  @throws IllegalArgumentException if no adaptor could be found.
-     *
-     **/
-
-    public synchronized Object getAdaptor(Class subjectClass)
-    {
-        Object result;
-
-        if (LOG.isDebugEnabled())
-            LOG.debug("Getting adaptor for class " + Tapestry.getClassName(subjectClass));
-
-        result = cache.get(subjectClass);
-
-        if (result != null)
-        {
-            if (LOG.isDebugEnabled())
-                LOG.debug("Found " + result + " in cache");
-
-            return result;
-        }
-
-        result = searchForAdaptor(subjectClass);
-
-        // Record the result in the cache
-
-        cache.put(subjectClass, result);
-
-        if (LOG.isDebugEnabled())
-            LOG.debug("Found " + result);
-
-        return result;
-    }
-
-    /**
-     * Searches the registration Map for a match, based on inheritance.
-     *
-     * <p>Searches class inheritance first, then interfaces (in a rather vague order).
-     * Really should match the order from the JVM spec.
-     *
-     * <p>There's a degenerate case where we may check the same interface more than once:
-     * <ul>
-     * <li>Two interfaces, I1 and I2
-     * <li>Two classes, C1 and C2
-     * <li>I2 extends I1
-     * <li>C2 extends C1
-     * <li>C1 implements I1
-     * <li>C2 implements I2
-     * <li>The search will be: C2, C1, I2, I1, I1
-     * <li>I1 is searched twice, because C1 implements it, and I2 extends it
-     * <li>There are other such cases, but none of them cause infinite loops
-     * and most are rare (we could guard against it, but its relatively expensive).
-     * <li>Multiple checks only occur if we don't find a registration
-     * </ul>
-     *
-     *  <p>
-     *  This method is only called from a synchronized block, so it is
-     *  implicitly synchronized.
-     * 
-     **/
-
-    private Object searchForAdaptor(Class subjectClass)
-    {
-        LinkedList queue = null;
-        Object result = null;
-
-        if (LOG.isDebugEnabled())
-            LOG.debug("Searching for adaptor for class " + Tapestry.getClassName(subjectClass));
-
-        // Step one: work up through the class inheritance.
-
-        Class searchClass = subjectClass;
-
-        // Primitive types have null, not Object, as their parent
-        // class.
-
-        while (searchClass != Object.class && searchClass != null)
-        {
-            result = registrations.get(searchClass);
-            if (result != null)
-                return result;
-
-            // Not an exact match.  If the search class
-            // implements any interfaces, add them to the queue.
-
-            Class[] interfaces = searchClass.getInterfaces();
-            int length = interfaces.length;
-
-            if (queue == null && length > 0)
-                queue = new LinkedList();
-
-            for (int i = 0; i < length; i++)
-                queue.addLast(interfaces[i]);
-
-            // Advance up to the next superclass
-
-            searchClass = getSuperclass(searchClass);
-
-        }
-
-        // Ok, the easy part failed, lets start searching
-        // interfaces.
-
-        if (queue != null)
-        {
-            while (!queue.isEmpty())
-            {
-                searchClass = (Class) queue.removeFirst();
-
-                result = registrations.get(searchClass);
-                if (result != null)
-                    return result;
-
-                // Interfaces can extend other interfaces; add them
-                // to the queue.
-
-                Class[] interfaces = searchClass.getInterfaces();
-                int length = interfaces.length;
-
-                for (int i = 0; i < length; i++)
-                    queue.addLast(interfaces[i]);
-            }
-        }
-
-        // Not a match on interface; our last gasp is to check
-        // for a registration for java.lang.Object
-
-        result = registrations.get(Object.class);
-        if (result != null)
-            return result;
-
-        // No match?  That's rare ... and an error.
-
-        throw new IllegalArgumentException(
-            Tapestry.format(
-                "AdaptorRegistry.adaptor-not-found",
-                Tapestry.getClassName(subjectClass)));
-    }
-
-    /**
-     *  Returns the superclass of the given class, with a single tweak:  If the 
-     *  search class is an array class, and the component type is an object class
-     *  (but not Object), then the simple Object array class is returned.  This reflects
-     *  the fact that an array of any class may be assignable to <code>Object[]</code>,
-     *  even though the superclass of an array is always simply <code>Object</code>.
-     * 
-     **/
-
-    private Class getSuperclass(Class searchClass)
-    {
-        if (searchClass.isArray())
-        {
-            Class componentType = searchClass.getComponentType();
-
-            if (!componentType.isPrimitive() && componentType != Object.class)
-                return Object[].class;
-        }
-
-        return searchClass.getSuperclass();
-    }
-
-    public synchronized String toString()
-    {
-        StringBuffer buffer = new StringBuffer();
-        buffer.append("AdaptorRegistry[");
-
-        Iterator i = registrations.entrySet().iterator();
-        boolean showSep = false;
-
-        while (i.hasNext())
-        {
-            if (showSep)
-                buffer.append(' ');
-
-            Map.Entry entry = (Map.Entry) i.next();
-
-            Class registeredClass = (Class) entry.getKey();
-
-            buffer.append(Tapestry.getClassName(registeredClass));
-            buffer.append("=");
-            buffer.append(entry.getValue());
-
-            showSep = true;
-        }
-
-        buffer.append("]");
-
-        return buffer.toString();
-    }
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/util/BasePropertyHolder.java b/3.0.4/framework/src/org/apache/tapestry/util/BasePropertyHolder.java
deleted file mode 100644
index 35746ea..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/util/BasePropertyHolder.java
+++ /dev/null
@@ -1,79 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.util;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-/**
- *  Base class implementation for the {@link IPropertyHolder} interface.
- *
- *
- *  @version $Id$
- *  @author Howard Lewis Ship
- *
- **/
-
-public class BasePropertyHolder implements IPropertyHolder
-{
-    private static final int MAP_SIZE = 7;
-    private Map properties;
-
-    public String getProperty(String name)
-    {
-        if (properties == null)
-            return null;
-
-        return (String) properties.get(name);
-    }
-
-    public void setProperty(String name, String value)
-    {
-        if (value == null)
-        {
-            removeProperty(name);
-            return;
-        }
-
-        if (properties == null)
-            properties = new HashMap(MAP_SIZE);
-
-        properties.put(name, value);
-    }
-
-    public void removeProperty(String name)
-    {
-        if (properties == null)
-            return;
-
-        properties.remove(name);
-    }
-
-    public List getPropertyNames()
-    {
-        if (properties == null)
-            return Collections.EMPTY_LIST;
-
-        List result = new ArrayList(properties.keySet());
-        
-        Collections.sort(result);
-        
-        return result;
-    }
-
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/util/ComponentAddress.java b/3.0.4/framework/src/org/apache/tapestry/util/ComponentAddress.java
deleted file mode 100644
index 38e2818..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/util/ComponentAddress.java
+++ /dev/null
@@ -1,145 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.util;
-
-import java.io.Serializable;
-
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.INamespace;
-import org.apache.tapestry.IPage;
-import org.apache.tapestry.IRequestCycle;
-
-/**
- * The ComponentAddress class contains the path to a component, allowing it to  
- * locate an instance of that component in a different 
- * {@link org.apache.tapestry.IRequestCycle}.
- * 
- * <p>This class needs to be used mostly when working with components
- * accessed via the {@link org.apache.tapestry.IRender} interface. 
- * It allows those components to serialize and
- * pass as a service parameter information about what component they have to 
- * talk to if control returns back to them. 
- * 
- * <p>This situation often occurs when the component used via IRender contains
- * Direct or Action links.
- * 
- * @version $Id$
- * @author mindbridge
- * @since 2.2
- * 
- */
-public class ComponentAddress implements Serializable
-{
-    private String _pageName;
-    private String _idPath;
-
-    /**
-     * Creates a new ComponentAddress object that carries the identification 
-     * information of the given component (the page name and the ID path).
-     * @param component the component to get the address of
-     */
-    public ComponentAddress(IComponent component)
-    {
-        this(component.getPage().getPageName(), component.getIdPath());
-    }
-
-    /**
-     * Creates a new ComponentAddress using the given Page Name and ID Path
-     * @param pageName the name of the page that contains the component
-     * @param idPath the ID Path of the component
-     */
-    public ComponentAddress(String pageName, String idPath)
-    {
-        _pageName = pageName;
-        _idPath = idPath;
-    }
-
-    /**
-     * Creates a new ComponentAddress using the given Page Name and ID Path
-     * relative on the provided Namespace
-     * @param namespace the namespace of the page that contains the component
-     * @param pageName the name of the page that contains the component
-     * @param idPath the ID Path of the component
-     */
-    public ComponentAddress(
-        INamespace namespace,
-        String pageName,
-        String idPath)
-    {
-        this(namespace.constructQualifiedName(pageName), idPath);
-    }
-
-    /**
-     * Finds a component with the current address using the given RequestCycle.
-     * @param cycle the RequestCycle to use to locate the component
-     * @return IComponent a component that has been initialized for the given RequestCycle
-     */
-    public IComponent findComponent(IRequestCycle cycle)
-    {
-        IPage objPage = cycle.getPage(_pageName);
-        return objPage.getNestedComponent(_idPath);
-    }
-
-    /**
-     * Returns the idPath of the component.
-     * @return String the ID path of the component
-     */
-    public String getIdPath()
-    {
-        return _idPath;
-    }
-
-    /**
-     * Returns the Page Name of the component.
-     * @return String the Page Name of the component
-     */
-    public String getPageName()
-    {
-        return _pageName;
-    }
-
-    /**
-     * @see java.lang.Object#hashCode()
-     */
-    public int hashCode()
-    {
-        int hash = _pageName.hashCode() * 31;
-        if (_idPath != null)
-            hash += _idPath.hashCode();
-        return hash;
-    }
-
-    /**
-     * @see java.lang.Object#equals(Object)
-     */
-    public boolean equals(Object obj)
-    {
-        if (!(obj instanceof ComponentAddress))
-            return false;
-
-        if (obj == this)
-            return true;
-
-        ComponentAddress objAddress = (ComponentAddress) obj;
-        if (!getPageName().equals(objAddress.getPageName()))
-            return false;
-
-        String idPath1 = getIdPath();
-        String idPath2 = objAddress.getIdPath();
-        return (idPath1 == idPath2)
-            || (idPath1 != null && idPath1.equals(idPath2));
-    }
-
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/util/ContentType.java b/3.0.4/framework/src/org/apache/tapestry/util/ContentType.java
deleted file mode 100644
index bafb558..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/util/ContentType.java
+++ /dev/null
@@ -1,189 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.util;
-
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Set;
-import java.util.StringTokenizer;
-
-/**
- *  Represents an HTTP content type. Allows to set various elements like
- *  the mime type, the character set, and other parameters.
- *  This is similar to a number of other implementations of the same concept in JAF, etc.
- *  We have created this simple implementation to avoid including the whole libraries. 
- * 
- *  @version $Id$
- *  @author mindbridge
- *  @since 3.0
- **/
-public class ContentType
-{
-    private String _baseType;
-    private String _subType;
-    private Map _parameters;
-
-    /**
-     * Creates a new empty content type
-     */
-    public ContentType()
-    {
-        initialize();
-    }
-    
-    /**
-     * Creates a new content type from the argument.
-     * The format of the argument has to be basetype/subtype(;key=value)* 
-     * 
-     * @param contentType the content type that needs to be represented
-     */
-    public ContentType(String contentType)
-    {
-        this();
-        parse(contentType);
-    }
-    
-    private void initialize()
-    {
-        _baseType = "";
-        _subType = "";
-        _parameters = new HashMap();
-    }
-    
-    /**
-     * @return the base type of the content type
-     */
-    public String getBaseType()
-    {
-        return _baseType;
-    }
-
-    /**
-     * @param baseType
-     */
-    public void setBaseType(String baseType)
-    {
-        _baseType = baseType;
-    }
-
-    /**
-     * @return the sub-type of the content type
-     */
-    public String getSubType()
-    {
-        return _subType;
-    }
-
-    /**
-     * @param subType
-     */
-    public void setSubType(String subType)
-    {
-        _subType = subType;
-    }
-
-    /**
-     * @return the MIME type of the content type
-     */
-    public String getMimeType()
-    {
-        return _baseType + "/" + _subType;
-    }
-
-    /**
-     * @return the list of names of parameters in this content type 
-     */
-    public String[] getParameterNames()
-    {
-        Set parameterNames = _parameters.keySet(); 
-        return (String[]) parameterNames.toArray(new String[parameterNames.size()]);
-    }
-
-    /**
-     * @param key the name of the content type parameter
-     * @return the value of the content type parameter
-     */
-    public String getParameter(String key)
-    {
-        return (String) _parameters.get(key);
-    }
-
-    /**
-     * @param key the name of the content type parameter
-     * @param value the value of the content type parameter
-     */
-    public void setParameter(String key, String value)
-    {
-        _parameters.put(key.toLowerCase(), value);
-    }
-
-    /**
-     * Parses the argument and configures the content type accordingly.
-     * The format of the argument has to be type/subtype(;key=value)* 
-     * 
-     * @param contentType the content type that needs to be represented
-     */
-    public void parse(String contentType)
-    {
-        initialize();
-
-        StringTokenizer tokens = new StringTokenizer(contentType, ";");
-        if (!tokens.hasMoreTokens()) 
-            return;
-        
-        String mimeType = tokens.nextToken();
-        StringTokenizer mimeTokens = new StringTokenizer(mimeType, "/");
-        setBaseType(mimeTokens.hasMoreTokens() ? mimeTokens.nextToken() : "");
-        setSubType(mimeTokens.hasMoreTokens() ? mimeTokens.nextToken() : "");
-        
-        while (tokens.hasMoreTokens()) {
-            String parameter = tokens.nextToken();
-
-            StringTokenizer parameterTokens = new StringTokenizer(parameter, "=");
-            String key = parameterTokens.hasMoreTokens() ? parameterTokens.nextToken() : "";
-            String value = parameterTokens.hasMoreTokens() ? parameterTokens.nextToken() : "";
-            setParameter(key, value);
-        }
-    }
-
-    
-
-    /**
-     * @return the string representation of this content type
-     */
-    public String unparse()
-    {
-        StringBuffer buf = new StringBuffer(getMimeType());
-
-        String[] parameterNames = getParameterNames();
-        for (int i = 0; i < parameterNames.length; i++)
-        {
-            String key = parameterNames[i];
-            String value = getParameter(key);
-            buf.append(";" + key + "=" + value);
-        } 
-        
-        return buf.toString();
-    }
-    
-    /**
-     * @return the string representation of this content type. Same as unparse().
-     */
-    public String toString()
-    {
-        return unparse();
-    }
-
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/util/DefaultResourceResolver.java b/3.0.4/framework/src/org/apache/tapestry/util/DefaultResourceResolver.java
deleted file mode 100644
index 9f04c7c..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/util/DefaultResourceResolver.java
+++ /dev/null
@@ -1,131 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.util;
-
-import java.net.URL;
-import java.util.Map;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.tapestry.ApplicationRuntimeException;
-import org.apache.tapestry.IResourceResolver;
-import org.apache.tapestry.Tapestry;
-
-/**
- *  Default implementation of {@link org.apache.tapestry.IResourceResolver} based
- *  around {@link Thread#getContextClassLoader()} (which is set by the
- *  servlet container).
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 2.3
- * 
- **/
-
-public class DefaultResourceResolver implements IResourceResolver
-{
-    private static final Log LOG = LogFactory.getLog(DefaultResourceResolver.class);
-
-    private ClassLoader _loader;
-
-    /**
-     *  Constructs a new instance using
-     *  {@link Thread#getContextClassLoader()}.
-     * 
-     **/
-    
-    public DefaultResourceResolver()
-    {
-        this(Thread.currentThread().getContextClassLoader());
-    }
-
-    public DefaultResourceResolver(ClassLoader loader)
-    {
-        _loader = loader;
-    }
-
-    public URL getResource(String name)
-    {
-        boolean debug = LOG.isDebugEnabled();
-
-        if (debug)
-            LOG.debug("getResource(" + name + ")");
-
-        String stripped = removeLeadingSlash(name);
-
-        URL result = _loader.getResource(stripped);
-
-        if (debug)
-        {
-            if (result == null)
-                LOG.debug("Not found.");
-            else
-                LOG.debug("Found as " + result);
-        }
-
-        return result;
-    }
-
-    private String removeLeadingSlash(String name)
-    {
-        if (name.startsWith("/"))
-            return name.substring(1);
-
-        return name;
-    }
-
-    /**
-     *  Invokes {@link Class#forName(java.lang.String, boolean, java.lang.ClassLoader)}.
-     *  
-     *  @param name the complete class name to locate and load
-     *  @return The loaded class
-     *  @throws ApplicationRuntimeException if loading the class throws an exception
-     *  (typically  {@link ClassNotFoundException} or a security exception)
-     * 
-     **/
-    
-    public Class findClass(String name)
-    {
-        try
-        {
-            return Class.forName(name, true, _loader);
-        }
-        catch (Throwable t)
-        {
-            throw new ApplicationRuntimeException(
-                Tapestry.format("ResourceResolver.unable-to-load-class", name, _loader, t.getMessage()),
-                t);
-        }
-    }
-
-    /**
-     * 
-     *  OGNL Support for dynamic class loading.  Simply invokes {@link #findClass(String)}.
-     * 
-     **/
-    
-    public Class classForName(String name, Map map) throws ClassNotFoundException
-    {
-        return findClass(name);
-    }
-
-    /** @since 3.0 **/
-    
-    public ClassLoader getClassLoader()
-    {
-        return _loader;
-    }
-
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/util/DelegatingPropertySource.java b/3.0.4/framework/src/org/apache/tapestry/util/DelegatingPropertySource.java
deleted file mode 100644
index 0085007..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/util/DelegatingPropertySource.java
+++ /dev/null
@@ -1,82 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.util;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.apache.tapestry.engine.IPropertySource;
-
-/**
- *  An implementation of {@link IPropertySource}
- *  that delegates to a list of other implementations.  This makes
- *  it possible to create a search path for property values.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 2.3
- *
- **/
-
-public class DelegatingPropertySource implements IPropertySource
-{
-    private List _sources = new ArrayList();
-    
-    public DelegatingPropertySource()
-    {
-    }
-    
-    public DelegatingPropertySource(IPropertySource delegate)
-    {
-        addSource(delegate);
-    }
-    
-    /**
-     *  Adds another source to the list of delegate property sources.
-     *  This is typically only done during initialization
-     *  of this DelegatingPropertySource.
-     * 
-     **/
-    
-    public void addSource(IPropertySource source)
-    {
-        _sources.add(source);
-    }
-    
-    /**
-     *  Re-invokes the method on each delegate property source, 
-     *  in order, return the first non-null value found.
-     * 
-     **/
-    
-    public String getPropertyValue(String propertyName)
-    {
-        String result = null;
-        int count = _sources.size();
-        
-        for (int i = 0; i < count; i++)
-        {
-            IPropertySource source = (IPropertySource)_sources.get(i);
-            
-            result = source.getPropertyValue(propertyName);
-            
-            if (result != null)
-                break;
-        }
-        
-        return result;        
-    }
-
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/util/ICleanable.java b/3.0.4/framework/src/org/apache/tapestry/util/ICleanable.java
deleted file mode 100644
index 62c0585..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/util/ICleanable.java
+++ /dev/null
@@ -1,44 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.util;
-
-/**
- *  An interface implemented by objects that can be
- *  cleaned up, which is to say, can release unneeded
- *  object references.  This is useful for many classes which
- *  provide a pooling or caching function.  Over time, 
- *  some pooled or cached objects may no longer be useful
- *  to keep and can be released. 
- *  references to unneeded objects.
- *  This interface is the bridge between
- *  the {@link JanitorThread} class and an object that
- *  wishes to be periodically told to "clean up".
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 1.0.5
- *
- **/
-
-public interface ICleanable
-{
-    /**
-     *  Invoked periodically by the {@link JanitorThread}
-     *  to perform whatever memory cleanups are reasonable.
-     *
-     **/
-
-    public void executeCleanup();
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/util/IPropertyHolder.java b/3.0.4/framework/src/org/apache/tapestry/util/IPropertyHolder.java
deleted file mode 100644
index 07df9db..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/util/IPropertyHolder.java
+++ /dev/null
@@ -1,63 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.util;
-
-import java.util.List;
-
-/**
- *  An interface that defines an object that can store named propertys.  The names
- *  and the properties are Strings.
- *
- *  @version $Id$
- *  @author Howard Lewis Ship
- *
- **/
-
-public interface IPropertyHolder
-{
-    /**
-     *  Returns a List of Strings, the names of all
-     *  properties held by the receiver.  May return an empty list.
-     *  The List is sorted alphabetically.  The List may be modified
-     *  without affecting this property holder.
-     *
-     *  <p>Prior to release 2.2, this method returned Collection.
-     * 
-     **/
-
-    public List getPropertyNames();
-
-    /**
-     *  Sets a named property.  The new value replaces the existing value, if any.
-     *  Setting a property to null is the same as removing the property.
-     *
-     **/
-
-    public void setProperty(String name, String value);
-
-    /**
-     *  Removes the named property, if present.
-     *
-     **/
-
-    public void removeProperty(String name);
-
-    /**
-     *  Retrieves the named property, or null if the property is not defined.
-     *
-     **/
-
-    public String getProperty(String name);
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/util/IRenderDescription.java b/3.0.4/framework/src/org/apache/tapestry/util/IRenderDescription.java
deleted file mode 100644
index 6c0211f..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/util/IRenderDescription.java
+++ /dev/null
@@ -1,37 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.util;
-
-import org.apache.tapestry.IMarkupWriter;
-
-/**
- *  An object which may render a description of itself, which is used in debugging
- *  (i.e., by the Inspector).
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 1.0.6
- * 
- **/
-
-public interface IRenderDescription
-{
-	/**
-	 *  Object should render a description of itself to the writer.
-	 *
-	 **/
-
-	public void renderDescription(IMarkupWriter writer);
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/util/IdAllocator.java b/3.0.4/framework/src/org/apache/tapestry/util/IdAllocator.java
deleted file mode 100644
index d7bbbe0..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/util/IdAllocator.java
+++ /dev/null
@@ -1,90 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.util;
-
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- *  Used to "uniquify" names within a given context.  A base name
- *  is passed in, and the return value is the base name, or the base name
- *  extended with a suffix to make it unique.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 3.0
- *
- **/
-
-public class IdAllocator
-{
-    private Map _generatorMap = new HashMap();
-
-    private static class NameGenerator
-    {
-        private String _baseId;
-        private int _index;
-
-        NameGenerator(String baseId)
-        {
-            _baseId = baseId + "$";
-        }
-
-        public String nextId()
-        {
-            return _baseId + _index++;
-        }
-    }
-
-    /**
-     *  Allocates the id.  Repeated calls for the same name will return
-     *  "name", "name_0", "name_1", etc.
-     * 
-     **/
-
-    public String allocateId(String name)
-    {
-        NameGenerator g = (NameGenerator) _generatorMap.get(name);
-        String result = null;
-
-        if (g == null)
-        {
-            g = new NameGenerator(name);
-            result = name;
-        }
-        else
-            result = g.nextId();
-
-        // Handle the degenerate case, where a base name of the form "foo$0" has been
-        // requested.  Skip over any duplicates thus formed.
-        
-        while (_generatorMap.containsKey(result))
-            result = g.nextId();
-
-        _generatorMap.put(result, g);
-
-        return result;
-    }
-    
-    /**
-     *  Clears the allocator, resetting it to freshly allocated state.
-     * 
-     **/
-    
-    public void clear()
-    {
-        _generatorMap.clear();
-    }
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/util/JanitorThread.java b/3.0.4/framework/src/org/apache/tapestry/util/JanitorThread.java
deleted file mode 100644
index 2967472..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/util/JanitorThread.java
+++ /dev/null
@@ -1,216 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.util;
-
-import java.lang.ref.WeakReference;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-import org.apache.tapestry.Tapestry;
-
-/**
- * A basic kind of janitor, an object that periodically invokes {@link ICleanable#executeCleanup()}
- * on a set of objects.
- * <p>
- * The JanitorThread holds a <em>weak reference</em> to the objects it operates on.
- * 
- * @author Howard Lewis Ship
- * @version $Id$
- * @since 1.0.5
- */
-
-public class JanitorThread extends Thread
-{
-    /**
-     * Default number of seconds between janitor runs, about 30 seconds.
-     */
-
-    public static final long DEFAULT_INTERVAL_MILLIS = 30 * 1024;
-
-    private long interval = DEFAULT_INTERVAL_MILLIS;
-
-    private boolean lockInterval = false;
-
-    private static JanitorThread shared = null;
-
-    /**
-     * A {@link List}of {@link WeakReference}s to {@link ICleanable}instances.
-     */
-
-    private List references = new ArrayList();
-
-    /**
-     * Creates a new daemon Janitor.
-     */
-
-    public JanitorThread()
-    {
-        this(null);
-    }
-
-    /**
-     * Creates new Janitor with the given name. The thread will have minimum priority and be a
-     * daemon.
-     */
-
-    public JanitorThread(String name)
-    {
-        super(name);
-
-        setDaemon(true);
-        setPriority(MIN_PRIORITY);
-    }
-
-    /**
-     * Returns a shared instance of JanitorThread. In most cases, the shared instance should be
-     * used, rather than creating a new instance; the exception being when particular scheduling is
-     * of concern. It is also bad policy to change the sleep interval on the shared janitor (though
-     * nothing prevents this, either).
-     */
-
-    public synchronized static JanitorThread getSharedJanitorThread()
-    {
-        if (shared == null)
-        {
-            shared = new JanitorThread("Shared-JanitorThread");
-            shared.lockInterval = true;
-
-            shared.start();
-        }
-
-        return shared;
-    }
-
-    public long getInterval()
-    {
-        return interval;
-    }
-
-    /**
-     * Updates the property, which may not take effect until the next time the thread finishes
-     * sleeping.
-     * 
-     * @param value
-     *            the interval, in milliseconds, between sweeps.
-     * @throws IllegalStateException
-     *             always, if the receiver is the shared JanitorThread
-     * @throws IllegalArgumentException
-     *             if value is less than 1
-     */
-
-    public void setInterval(long value)
-    {
-        if (lockInterval)
-            throw new IllegalStateException(Tapestry.getMessage("JanitorThread.interval-locked"));
-
-        if (value < 1)
-            throw new IllegalArgumentException(Tapestry
-                    .getMessage("JanitorThread.illegal-interval"));
-
-        interval = value;
-    }
-
-    /**
-     * Adds a new cleanable object to the list of references. Care should be taken that objects are
-     * not added multiple times; they will be cleaned too often.
-     */
-
-    public void add(ICleanable cleanable)
-    {
-        WeakReference reference = new WeakReference(cleanable);
-
-        synchronized (references)
-        {
-            references.add(reference);
-        }
-    }
-
-    /**
-     * Runs through the list of targets and invokes {@link ICleanable#executeCleanup()}on each of
-     * them. {@link WeakReference}s that have been invalidated are weeded out.
-     */
-
-    protected void sweep()
-    {
-        synchronized (references)
-        {
-            Iterator i = references.iterator();
-
-            while (i.hasNext())
-            {
-                WeakReference ref = (WeakReference) i.next();
-
-                ICleanable cleanable = (ICleanable) ref.get();
-
-                if (cleanable == null)
-                    i.remove();
-                else
-                    cleanable.executeCleanup();
-            }
-        }
-    }
-
-    /**
-     * Waits for the next run, by sleeping for the desired period. Returns true if the sleep was
-     * successful, or false if the thread was interrupted (and should shut down).
-     */
-
-    protected void waitForNextPass()
-    {
-        try
-        {
-            sleep(interval);
-        }
-        catch (InterruptedException ex)
-        {
-            interrupt();
-        }
-    }
-
-    /**
-     * Alternates between {@link #waitForNextPass()}and {@link #sweep()}.
-     */
-
-    public void run()
-    {
-        while (!isInterrupted())
-        {
-            waitForNextPass();
-
-            sweep();
-        }
-    }
-
-    public String toString()
-    {
-        StringBuffer buffer = new StringBuffer("JanitorThread@");
-        buffer.append(Integer.toHexString(hashCode()));
-
-        buffer.append("[interval=");
-        buffer.append(interval);
-
-        buffer.append(" count=");
-
-        synchronized (references)
-        {
-            buffer.append(references.size());
-        }
-
-        buffer.append(']');
-
-        return buffer.toString();
-    }
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/util/LocalizedContextResourceFinder.java b/3.0.4/framework/src/org/apache/tapestry/util/LocalizedContextResourceFinder.java
deleted file mode 100644
index ee11fbf..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/util/LocalizedContextResourceFinder.java
+++ /dev/null
@@ -1,92 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.util;
-
-import java.net.MalformedURLException;
-import java.util.Locale;
-
-import javax.servlet.ServletContext;
-
-/**
- *  Finds localized resources within the web application context.
- * 
- *  @see javax.servlet.ServletContext
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 3.0
- *
- **/
-
-public class LocalizedContextResourceFinder
-{
-    private ServletContext _context;
-
-    public LocalizedContextResourceFinder(ServletContext context)
-    {
-        _context = context;
-    }
-
-    /**
-     *  Resolves the resource, returning a path representing
-     *  the closest match (with respect to the provided locale).
-     *  Returns null if no match.
-     * 
-     *  <p>The provided path is split into a base path
-     *  and a suffix (at the last period character).  The locale
-     *  will provide different suffixes to the base path
-     *  and the first match is returned.
-     * 
-     **/
-
-    public LocalizedResource resolve(String contextPath, Locale locale)
-    {
-        int dotx = contextPath.lastIndexOf('.');
-        String basePath = null;
-        String suffix = null;
-        // This handles assets without extensions - still allows them to be localized.
-        if (dotx > -1) {
-          basePath = contextPath.substring(0, dotx);
-          suffix = contextPath.substring(dotx);
-        } else {
-          basePath = contextPath;
-          suffix = "";
-        }
-
-        LocalizedNameGenerator generator = new LocalizedNameGenerator(basePath, locale, suffix);
-
-        while (generator.more())
-        {
-            String candidatePath = generator.next();
-
-            if (isExistingResource(candidatePath))
-                return new LocalizedResource(candidatePath, generator.getCurrentLocale());
-        }
-
-        return null;
-    }
-
-    private boolean isExistingResource(String path)
-    {
-        try
-        {
-            return _context.getResource(path) != null;
-        }
-        catch (MalformedURLException ex)
-        {
-            return false;
-        }
-    }
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/util/LocalizedNameGenerator.java b/3.0.4/framework/src/org/apache/tapestry/util/LocalizedNameGenerator.java
deleted file mode 100644
index 7b4fcc5..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/util/LocalizedNameGenerator.java
+++ /dev/null
@@ -1,208 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.util;
-
-import java.util.Locale;
-import java.util.NoSuchElementException;
-
-import org.apache.tapestry.Tapestry;
-
-/**
- *  Used in a wide variety of resource searches.  Generates
- *  a series of name variations from a base name, a 
- *  {@link java.util.Locale} and an optional suffix.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 3.0
- *
- **/
-
-public class LocalizedNameGenerator
-{
-    private int _baseNameLength;
-    private String _suffix;
-    private StringBuffer _buffer;
-    private String _language;
-    private String _country;
-    private String _variant;
-    private int _state;
-    private int _prevState;
-
-    private static final int INITIAL = 0;
-    private static final int LCV = 1;
-    private static final int LC = 2;
-    private static final int LV = 3;
-    private static final int L = 4;
-    private static final int BARE = 5;
-    private static final int EXHAUSTED = 6;
-
-    public LocalizedNameGenerator(String baseName, Locale locale, String suffix)
-    {
-        _baseNameLength = baseName.length();
-
-        if (locale != null)
-        {
-            _language = locale.getLanguage();
-            _country = locale.getCountry();
-            _variant = locale.getVariant();
-        }
-
-        _state = INITIAL;
-        _prevState = INITIAL;
-
-        _suffix = suffix;
-
-        _buffer = new StringBuffer(baseName);
-
-        advance();
-    }
-
-    private void advance()
-    {
-        _prevState = _state;
-
-        while (_state != EXHAUSTED)
-        {
-            _state++;
-
-            switch (_state)
-            {
-                case LCV :
-
-                    if (Tapestry.isBlank(_variant))
-                        continue;
-
-                    return;
-
-                case LC :
-
-                    if (Tapestry.isBlank(_country))
-                        continue;
-
-                    return;
-
-                case LV :
-
-                    // If _country is null, then we've already generated this string
-                    // as state LCV and we can continue directly to state L
-
-                    if (Tapestry.isBlank(_variant) || Tapestry.isBlank(_country))
-                        continue;
-
-                    return;
-
-                case L :
-
-                    if (Tapestry.isBlank(_language))
-                        continue;
-
-                    return;
-
-                default :
-                    return;
-            }
-        }
-    }
-
-    /**
-     *  Returns true if there are more name variants to be
-     *  returned, false otherwise.
-     * 
-     **/
-
-    public boolean more()
-    {
-        return _state != EXHAUSTED;
-    }
-
-    /**
-     *  Returns the next localized variant.
-     * 
-     *  @throws NoSuchElementException if all variants have been
-     *  returned.
-     * 
-     **/
-
-    public String next()
-    {
-        if (_state == EXHAUSTED)
-            throw new NoSuchElementException();
-
-        String result = build();
-
-        advance();
-
-        return result;
-    }
-
-    private String build()
-    {
-        _buffer.setLength(_baseNameLength);
-
-        if (_state == LC || _state == LCV || _state == L)
-        {
-            _buffer.append('_');
-            _buffer.append(_language);
-        }
-
-        // For LV, we want two underscores between language
-        // and variant.
-
-        if (_state == LC || _state == LCV || _state == LV)
-        {
-            _buffer.append('_');
-
-            if (_state != LV)
-                _buffer.append(_country);
-        }
-
-        if (_state == LV || _state == LCV)
-        {
-            _buffer.append('_');
-            _buffer.append(_variant);
-        }
-
-        if (_suffix != null)
-            _buffer.append(_suffix);
-
-        return _buffer.toString();
-    }
-
-    public Locale getCurrentLocale()
-    {
-        switch (_prevState)
-        {
-            case LCV :
-
-                return new Locale(_language, _country, _variant);
-
-            case LC :
-
-                return new Locale(_language, _country, "");
-
-            case LV :
-
-                return new Locale(_language, "", _variant);
-
-            case L :
-
-                return new Locale(_language, "", "");
-
-            default :
-                return null;
-        }
-    }
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/util/LocalizedPropertySource.java b/3.0.4/framework/src/org/apache/tapestry/util/LocalizedPropertySource.java
deleted file mode 100644
index 6cf64c5..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/util/LocalizedPropertySource.java
+++ /dev/null
@@ -1,107 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.util;
-
-import java.util.Locale;
-
-import org.apache.tapestry.engine.IPropertySource;
-
-/**
- *  A PropertySource extending the DelegatingPropertySources and adding the 
- *  capability of searching for localized versions of the desired property.
- *  Useful when peoperties related to localization are needed.
- * 
- *  @author mindbridge
- *  @version $Id$
- *  @since 3.0
- */
-public class LocalizedPropertySource extends DelegatingPropertySource
-{
-    private Locale _locale;
-    
-    /**
-     *  Creates a LocalizedPropertySource with the default locale
-     */
-    public LocalizedPropertySource()
-    {
-        this(Locale.getDefault());
-    }
-
-    /**
-     *  Creates a LocalizedPropertySource with the provided locale
-     */
-    public LocalizedPropertySource(Locale locale)
-    {
-        super();
-        setLocale(locale);
-    }
-
-    /**
-     *  Creates a LocalizedPropertySource with the default locale and the provided delegate
-     */
-    public LocalizedPropertySource(IPropertySource delegate)
-    {
-        this(Locale.getDefault(), delegate);
-    }
-
-    /**
-     *  Creates a LocalizedPropertySource with the provided locale and delegate
-     */
-    public LocalizedPropertySource(Locale locale, IPropertySource delegate)
-    {
-        super(delegate);
-        setLocale(locale);
-    }
-
-
-    /**
-     * @return the locale currently used 
-     */
-    public Locale getLocale()
-    {
-        return _locale;
-    }
-
-    /**
-     * @param locale the locale currently used
-     */
-    public void setLocale(Locale locale)
-    {
-        _locale = locale;
-    }
-
-    
-    /**
-     *  Examines the properties localized using the provided locale in the order
-     *  of more specific to more general and returns the first that has a value. 
-     *  @see org.apache.tapestry.util.DelegatingPropertySource#getPropertyValue(java.lang.String)
-     */
-    public String getPropertyValue(String propertyName)
-    {
-        LocalizedNameGenerator generator = new LocalizedNameGenerator(propertyName, getLocale(), "");
-
-        while (generator.more())
-        {
-            String candidateName = generator.next();
-
-            String value = super.getPropertyValue(candidateName); 
-            if (value != null)
-                return value;
-        }
-
-        return null;
-    }
-
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/util/LocalizedResource.java b/3.0.4/framework/src/org/apache/tapestry/util/LocalizedResource.java
deleted file mode 100644
index d23f10a..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/util/LocalizedResource.java
+++ /dev/null
@@ -1,55 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.util;
-
-import java.util.Locale;
-
-/**
- *  Contains the path to a localized resource and the locale for which it has been localized.
- *  This object is immutable.
- * 
- *  @author Mindbridge
- *  @version $Id$
- *  @since 3.0
- */
-public class LocalizedResource
-{
-    private String _resourcePath;
-    private Locale _resourceLocale;
-
-
-    public LocalizedResource(String resourcePath, Locale resourceLocale)
-    {
-        _resourcePath = resourcePath;
-        _resourceLocale = resourceLocale;
-    }
-    
-    /**
-     * @return the locale for which this resource has been localized or null if it has not been localized at all
-     */
-    public Locale getResourceLocale()
-    {
-        return _resourceLocale;
-    }
-
-    /**
-     * @return the path to the localized resource
-     */
-    public String getResourcePath()
-    {
-        return _resourcePath;
-    }
-
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/util/LocalizedResourceFinder.java b/3.0.4/framework/src/org/apache/tapestry/util/LocalizedResourceFinder.java
deleted file mode 100644
index 751ce03..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/util/LocalizedResourceFinder.java
+++ /dev/null
@@ -1,73 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.util;
-
-import java.util.Locale;
-
-import org.apache.tapestry.IResourceResolver;
-
-/**
- *  
- *  Searches for a localization of a
- *  particular resource in the classpath (using
- *  a {@link org.apache.tapestry.IResourceResolver}. 
- * 
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 3.0
- *
- **/
-
-public class LocalizedResourceFinder
-{
-    private IResourceResolver _resolver;
-
-    public LocalizedResourceFinder(IResourceResolver resolver)
-    {
-        _resolver = resolver;
-    }
-
-    /**
-     *  Resolves the resource, returning a path representing
-     *  the closest match (with respect to the provided locale).
-     *  Returns null if no match.
-     * 
-     *  <p>The provided path is split into a base path
-     *  and a suffix (at the last period character).  The locale
-     *  will provide different suffixes to the base path
-     *  and the first match is returned.
-     * 
-     **/
-    
-    public LocalizedResource resolve(String resourcePath, Locale locale)
-    {
-        int dotx = resourcePath.lastIndexOf('.');
-        String basePath = resourcePath.substring(0, dotx);
-        String suffix = resourcePath.substring(dotx);
-
-        LocalizedNameGenerator generator = new LocalizedNameGenerator(basePath, locale, suffix);
-
-        while (generator.more())
-        {
-            String candidatePath = generator.next();
-
-            if (_resolver.getResource(candidatePath) != null)
-                return new LocalizedResource(candidatePath, generator.getCurrentLocale());
-        }
-
-        return null;
-    }
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/util/MultiKey.java b/3.0.4/framework/src/org/apache/tapestry/util/MultiKey.java
deleted file mode 100644
index df247a0..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/util/MultiKey.java
+++ /dev/null
@@ -1,234 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.util;
-
-import java.io.Externalizable;
-import java.io.IOException;
-import java.io.ObjectInput;
-import java.io.ObjectOutput;
-
-import org.apache.tapestry.Tapestry;
-
-/**
- *  A complex key that may be used as an alternative to nested
- *  {@link java.util.Map}s.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *
- **/
-
-public class MultiKey implements Externalizable
-{
-    /**
-     *  @since 2.0.4
-     * 
-     **/
-    
-    private static final long serialVersionUID = 4465448607415788806L;
-    
-    private static final int HASH_CODE_UNSET = -1;
-
-    private transient int hashCode = HASH_CODE_UNSET;
-
-    private Object[] keys;
-
-    /**
-     *  Public no-arguments constructor needed to be compatible with
-     *  {@link Externalizable}; this leaves the new MultiKey in a
-     *  non-usable state and shouldn't be used by user code.
-     *
-     **/
-
-    public MultiKey()
-    {
-    }
-
-    /**
-     *  Builds a <code>MultiKey</code> from an array of keys.  If the array is not
-     *  copied, then it must not be modified.
-     * 
-     *  @param keys The components of the key.
-     *  @param makeCopy If true, a copy of the keys is created.  If false,
-     *  the keys are simple retained by the <code>MultiKey</code>.
-     *
-     *  @throws IllegalArgumentException if keys is null, of if the
-     *  first element of keys is null.
-     *
-     **/
-
-    public MultiKey(Object[] keys, boolean makeCopy)
-    {
-        super();
-
-        if (keys == null || keys.length == 0)
-            throw new IllegalArgumentException(Tapestry.getMessage("MultiKey.null-keys"));
-
-        if (keys[0] == null)
-            throw new IllegalArgumentException(Tapestry.getMessage("MultiKey.first-element-may-not-be-null"));
-
-        if (makeCopy)
-        {
-            this.keys = new Object[keys.length];
-            System.arraycopy(keys, 0, this.keys, 0, keys.length);
-        }
-        else
-            this.keys = keys;
-    }
-
-    /**
-     *  Returns true if:
-     *  <ul>
-     *  <li>The other object is a <code>MultiKey</code>
-     *  <li>They have the same number of key elements
-     *  <li>Every element is an exact match or is equal
-     *  </ul>
-     *
-     **/
-
-    public boolean equals(Object other)
-    {
-        int i;
-
-        if (other == null)
-            return false;
-
-        if (keys == null)
-            throw new IllegalStateException(Tapestry.getMessage("MultiKey.no-keys"));
-
-        // Would a hashCode check be worthwhile here?
-
-        try
-        {
-            MultiKey otherMulti = (MultiKey) other;
-
-            if (keys.length != otherMulti.keys.length)
-                return false;
-
-            for (i = 0; i < keys.length; i++)
-            {
-                // On an exact match, continue.  This means that null matches
-                // null.
-
-                if (keys[i] == otherMulti.keys[i])
-                    continue;
-
-                // If either is null, but not both, then
-                // not a match.
-
-                if (keys[i] == null || otherMulti.keys[i] == null)
-                    return false;
-
-                if (!keys[i].equals(otherMulti.keys[i]))
-                    return false;
-
-            }
-
-            // Every key equal.  A match.
-
-            return true;
-        }
-        catch (ClassCastException e)
-        {
-        }
-
-        return false;
-    }
-
-    /**
-     *  Returns the hash code of the receiver, which is computed from all the
-     *  non-null key elements.  This value is computed once and
-     *  then cached, so elements should not change their hash codes 
-     *  once created (note that this
-     *  is the same constraint that would be used if the individual 
-     *  key elements were
-     *  themselves {@link java.util.Map} keys.
-     * 
-     *
-     **/
-
-    public int hashCode()
-    {
-        if (hashCode == HASH_CODE_UNSET)
-        {
-            hashCode = keys[0].hashCode();
-
-            for (int i = 1; i < keys.length; i++)
-            {
-                if (keys[i] != null)
-                    hashCode ^= keys[i].hashCode();
-            }
-        }
-
-        return hashCode;
-    }
-
-    /**
-    *  Identifies all the keys stored by this <code>MultiKey</code>.
-    *
-    **/
-
-    public String toString()
-    {
-        StringBuffer buffer;
-        int i;
-
-        buffer = new StringBuffer("MultiKey[");
-
-        for (i = 0; i < keys.length; i++)
-        {
-            if (i > 0)
-                buffer.append(", ");
-
-            if (keys[i] == null)
-                buffer.append("<null>");
-            else
-                buffer.append(keys[i]);
-        }
-
-        buffer.append(']');
-
-        return buffer.toString();
-    }
-
-    /**
-     *  Writes a count of the keys, then writes each individual key.
-     *
-     **/
-
-    public void writeExternal(ObjectOutput out) throws IOException
-    {
-        out.writeInt(keys.length);
-
-        for (int i = 0; i < keys.length; i++)
-            out.writeObject(keys[i]);
-    }
-
-    /**
-     *  Reads the state previously written by {@link #writeExternal(ObjectOutput)}.
-     *
-     **/
-
-    public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException
-    {
-        int count;
-
-        count = in.readInt();
-        keys = new Object[count];
-
-        for (int i = 0; i < count; i++)
-            keys[i] = in.readObject();
-    }
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/util/PropertyHolderPropertySource.java b/3.0.4/framework/src/org/apache/tapestry/util/PropertyHolderPropertySource.java
deleted file mode 100644
index ec1093f..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/util/PropertyHolderPropertySource.java
+++ /dev/null
@@ -1,43 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.util;
-
-import org.apache.tapestry.engine.IPropertySource;
-
-/**
- *  Implements the {@link IPropertySource} interface
- *  for instances that implement {@link org.apache.tapestry.util.IPropertyHolder}.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 2.3
- *
- **/
-
-public class PropertyHolderPropertySource implements IPropertySource
-{
-    private IPropertyHolder _holder;
-    
-    public PropertyHolderPropertySource(IPropertyHolder holder)
-    {
-        _holder = holder;
-    }
-
-    public String getPropertyValue(String propertyName)
-    {
-        return _holder.getProperty(propertyName);
-    }
-
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/util/RegexpMatcher.java b/3.0.4/framework/src/org/apache/tapestry/util/RegexpMatcher.java
deleted file mode 100644
index 1716b9d..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/util/RegexpMatcher.java
+++ /dev/null
@@ -1,123 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.util;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import org.apache.oro.text.regex.MalformedPatternException;
-import org.apache.oro.text.regex.Pattern;
-import org.apache.oro.text.regex.PatternCompiler;
-import org.apache.oro.text.regex.PatternMatcher;
-import org.apache.oro.text.regex.Perl5Compiler;
-import org.apache.oro.text.regex.Perl5Matcher;
-import org.apache.tapestry.ApplicationRuntimeException;
-
-/**
- *  Streamlines the interface to ORO by implicitly constructing the
- *  necessary compilers and matchers, and by
- *  caching compiled patterns.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 3.0
- *
- **/
-
-public class RegexpMatcher
-{
-    private PatternCompiler _patternCompiler;
-
-    private PatternMatcher _matcher;
-
-    private Map _compiledPatterns = new HashMap();
-
-    private Map _escapedPatternStrings = new HashMap();
-
-    protected Pattern compilePattern(String pattern)
-    {
-        if (_patternCompiler == null)
-            _patternCompiler = new Perl5Compiler();
-
-        try
-        {
-            return _patternCompiler.compile(pattern, Perl5Compiler.SINGLELINE_MASK);
-        }
-        catch (MalformedPatternException ex)
-        {
-            throw new ApplicationRuntimeException(ex);
-        }
-    }
-
-    protected Pattern getCompiledPattern(String pattern)
-    {
-        Pattern result = (Pattern) _compiledPatterns.get(pattern);
-
-        if (result == null)
-        {
-            result = compilePattern(pattern);
-            _compiledPatterns.put(pattern, result);
-        }
-
-        return result;
-    }
-
-    /**
-     *  Clears any previously compiled patterns.
-     * 
-     **/
-
-    public void clear()
-    {
-        _compiledPatterns.clear();
-    }
-
-    protected PatternMatcher getPatternMatcher()
-    {
-        if (_matcher == null)
-            _matcher = new Perl5Matcher();
-
-        return _matcher;
-    }
-
-    public boolean matches(String pattern, String input)
-    {
-        Pattern compiledPattern = getCompiledPattern(pattern);
-
-        return getPatternMatcher().matches(input, compiledPattern);
-    }
-
-    public boolean contains(String pattern, String input)
-    {
-        Pattern compiledPattern = getCompiledPattern(pattern);
-
-        return getPatternMatcher().contains(input, compiledPattern);
-    }
-
-    public String getEscapedPatternString(String pattern)
-    {
-        String result = (String) _escapedPatternStrings.get(pattern);
-
-        if (result == null)
-        {
-            result = Perl5Compiler.quotemeta(pattern);
-
-            _escapedPatternStrings.put(pattern, result);
-        }
-
-        return result;
-    }
-
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/util/ResourceBundlePropertySource.java b/3.0.4/framework/src/org/apache/tapestry/util/ResourceBundlePropertySource.java
deleted file mode 100644
index b98b637..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/util/ResourceBundlePropertySource.java
+++ /dev/null
@@ -1,61 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.util;
-
-import java.util.MissingResourceException;
-import java.util.ResourceBundle;
-
-import org.apache.tapestry.engine.IPropertySource;
-
-/**
- *  A property source that is based on a {@link java.util.ResourceBundle}.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 3.0
- *
- **/
-
-public class ResourceBundlePropertySource implements IPropertySource
-{
-    private ResourceBundle _bundle;
-
-    public ResourceBundlePropertySource(ResourceBundle bundle)
-    {
-        _bundle = bundle;
-    }
-
-    /**
-     *  Gets the value from the bundle by invoking
-     *  {@link ResourceBundle#getString(java.lang.String)}.  If
-     *  the bundle does not contain the key (that is, it it
-     *  throws {@link java.util.MissingResourceException}), then
-     *  null is returned.
-     * 
-     **/
-    
-    public String getPropertyValue(String propertyName)
-    {
-        try
-        {
-            return _bundle.getString(propertyName);
-        }
-        catch (MissingResourceException ex)
-        {
-            return null;
-        }
-    }
-
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/util/ServletContextPropertySource.java b/3.0.4/framework/src/org/apache/tapestry/util/ServletContextPropertySource.java
deleted file mode 100644
index 1c6c768..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/util/ServletContextPropertySource.java
+++ /dev/null
@@ -1,52 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.util;
-
-/**
- *  Implementation of {@link IPropertySource}
- *  that returns values defined as ServletContext initialization parameters
- *  (defined as <code>&lt;init-param&gt;</code> in the
- *  <code>web.xml</code> deployment descriptor.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 2.3
- *
- **/
-
-import javax.servlet.ServletContext;
-
-import org.apache.tapestry.engine.IPropertySource;
-
-public class ServletContextPropertySource implements IPropertySource
-{
-    private ServletContext _context;
-
-    public ServletContextPropertySource(ServletContext context)
-    {
-        _context = context;
-    }
-
-    /**
-     *  Invokes {@link ServletContext#getInitParameter(java.lang.String)}.
-     *
-     **/
-
-    public String getPropertyValue(String propertyName)
-    {
-        return _context.getInitParameter(propertyName);
-    }
-
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/util/ServletPropertySource.java b/3.0.4/framework/src/org/apache/tapestry/util/ServletPropertySource.java
deleted file mode 100644
index d5dca28..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/util/ServletPropertySource.java
+++ /dev/null
@@ -1,52 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.util;
-
-import javax.servlet.ServletConfig;
-
-import org.apache.tapestry.engine.IPropertySource;
-
-/**
- *  Implementation of {@link IPropertySource}
- *  that returns values defined as Servlet initialization parameters
- *  (defined as <code>&lt;init-param&gt;</code> in the
- *  <code>web.xml</code> deployment descriptor.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 2.3
- *
- **/ 
-
-public class ServletPropertySource implements IPropertySource
-{
-    private ServletConfig _config;
-    
-    public ServletPropertySource(ServletConfig config)
-    {
-        _config = config;
-    }   
-    
-    /**
-     *  Invokes {@link ServletConfig#getInitParameter(java.lang.String)}.
-     * 
-     **/
-    
-    public String getPropertyValue(String propertyName)
-    {
-        return _config.getInitParameter(propertyName);
-    }
-
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/util/StringSplitter.java b/3.0.4/framework/src/org/apache/tapestry/util/StringSplitter.java
deleted file mode 100644
index 7e725a8..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/util/StringSplitter.java
+++ /dev/null
@@ -1,124 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.util;
-
-/**
- *  Used to split a string into substrings based on a single character
- *  delimiter.  A fast, simple version of
- *  {@link java.util.StringTokenizer}.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- * 
- **/
-
-public class StringSplitter
-{
-    private char delimiter;
-
-    public StringSplitter(char delimiter)
-    {
-        this.delimiter = delimiter;
-    }
-
-    public char getDelimiter()
-    {
-        return delimiter;
-    }
-
-    /**
-     *  Splits a string on the delimter into an array of String
-     *  tokens.  The delimiters are not included in the tokens.  Null
-     *  tokens (caused by two consecutive delimiter) are reduced to an
-     *  empty string. Leading delimiters are ignored.
-     *
-     **/
-
-    public String[] splitToArray(String value)
-    {
-        char[] buffer;
-        int i;
-        String[] result;
-        int resultCount = 0;
-        int start;
-        int length;
-        String token;
-        String[] newResult;
-        boolean first = true;
-
-        buffer = value.toCharArray();
-
-        result = new String[3];
-
-        start = 0;
-        length = 0;
-
-        for (i = 0; i < buffer.length; i++)
-        {
-            if (buffer[i] != delimiter)
-            {
-                length++;
-                continue;
-            }
-
-            // This is used to ignore leading delimiter(s).
-
-            if (length > 0 || !first)
-            {
-                token = new String(buffer, start, length);
-
-                if (resultCount == result.length)
-                {
-                    newResult = new String[result.length * 2];
-
-                    System.arraycopy(result, 0, newResult, 0, result.length);
-
-                    result = newResult;
-                }
-
-                result[resultCount++] = token;
-
-                first = false;
-            }
-
-            start = i + 1;
-            length = 0;
-        }
-
-        // Special case:  if the string contains no delimiters
-        // then it isn't really split.  Wrap the input string
-        // in an array and return.  This is a little optimization
-        // to prevent a new String instance from being
-        // created unnecessarily.
-
-        if (start == 0 && length == buffer.length)
-        {
-            result = new String[1];
-            result[0] = value;
-            return result;
-        }
-
-        // If the string is all delimiters, then this
-        // will result in a single empty token.
-
-        token = new String(buffer, start, length);
-
-        newResult = new String[resultCount + 1];
-        System.arraycopy(result, 0, newResult, 0, resultCount);
-        newResult[resultCount] = token;
-
-        return newResult;
-    }
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/util/SystemPropertiesPropertySource.java b/3.0.4/framework/src/org/apache/tapestry/util/SystemPropertiesPropertySource.java
deleted file mode 100644
index 315d271..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/util/SystemPropertiesPropertySource.java
+++ /dev/null
@@ -1,51 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.util;
-
-import org.apache.tapestry.engine.IPropertySource;
-
-/**
- *  Obtain properties from JVM system properties.
- * 
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 2.3
- *
- **/
-
-public class SystemPropertiesPropertySource implements IPropertySource
-{
-    private static IPropertySource _shared;
-    
-    public static synchronized IPropertySource getInstance()
-    {
-        if (_shared == null)
-            _shared = new SystemPropertiesPropertySource();
-            
-        return _shared; 
-    }
-
-    /**
-     *  Delegates to {@link System#getProperty(java.lang.String)}.
-     * 
-     **/
-    
-    public String getPropertyValue(String propertyName)
-    {
-        return System.getProperty(propertyName);
-    }
-
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/util/exception/ExceptionAnalyzer.java b/3.0.4/framework/src/org/apache/tapestry/util/exception/ExceptionAnalyzer.java
deleted file mode 100644
index 4056dc5..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/util/exception/ExceptionAnalyzer.java
+++ /dev/null
@@ -1,435 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.util.exception;
-
-import java.beans.BeanInfo;
-import java.beans.IntrospectionException;
-import java.beans.Introspector;
-import java.beans.PropertyDescriptor;
-import java.io.CharArrayWriter;
-import java.io.IOException;
-import java.io.LineNumberReader;
-import java.io.PrintStream;
-import java.io.PrintWriter;
-import java.io.StringReader;
-import java.lang.reflect.Method;
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- *  Analyzes an exception, creating one or more 
- *  {@link ExceptionDescription}s
- *  from it.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- * 
- **/
-
-public class ExceptionAnalyzer
-{
-    private List exceptionDescriptions;
-    private List propertyDescriptions;
-    private CharArrayWriter writer;
-
-    private static final int LIST_SIZE = 3;
-
-    private boolean exhaustive = false;
-
-    /**
-     *  If true, then stack trace is extracted for each exception.  If false,
-     *  the default, then stack trace is extracted for only the deepest exception.
-     *
-     **/
-
-    public boolean isExhaustive()
-    {
-        return exhaustive;
-    }
-
-    public void setExhaustive(boolean value)
-    {
-        exhaustive = value;
-    }
-
-    /**
-     *  Analyzes the exceptions.  This builds an {@link ExceptionDescription} for the
-     *  exception.  It also looks for a non-null {@link Throwable}
-     *  property.  If one exists, then a second {@link ExceptionDescription} 
-     *  is created.  This continues until no more nested exceptions can be found.
-     *
-     *  <p>The description includes a set of name/value properties 
-     *  (as {@link ExceptionProperty}) object.  This list contains all
-     *  non-null properties that are not, themselves, {@link Throwable}.
-     *
-     *  <p>The name is the display name (not the logical name) of the property.  The value
-     *  is the <code>toString()</code> value of the property.
-     *
-     *  Only properties defined in subclasses of {@link Throwable} are included.
-     *
-     *  <p>A future enhancement will be to alphabetically sort the properties by name.
-     **/
-
-    public ExceptionDescription[] analyze(Throwable exception)
-    {
-        ExceptionDescription[] result;
-
-        if (writer == null)
-            writer = new CharArrayWriter();
-
-        if (propertyDescriptions == null)
-            propertyDescriptions = new ArrayList(LIST_SIZE);
-
-        if (exceptionDescriptions == null)
-            exceptionDescriptions = new ArrayList(LIST_SIZE);
-
-        while (exception != null)
-        {
-            exception = buildDescription(exception);
-        }
-
-        result = new ExceptionDescription[exceptionDescriptions.size()];
-        result = (ExceptionDescription[]) exceptionDescriptions.toArray(result);
-
-        exceptionDescriptions.clear();
-        propertyDescriptions.clear();
-
-        writer.reset();
-
-        // We never actually close() the writer which is bad ... I'm expecting that
-        // the finalize() method will close them, or that they don't need to
-        // close.
-
-        return result;
-    }
-
-    protected Throwable buildDescription(Throwable exception)
-    {
-        BeanInfo info;
-        Class exceptionClass;
-        ExceptionProperty property;
-        PropertyDescriptor[] descriptors;
-        PropertyDescriptor descriptor;
-        Throwable next = null;
-        int i;
-        Object value;
-        Method method;
-        ExceptionProperty[] properties;
-        ExceptionDescription description;
-        String stringValue;
-        String message;
-        String[] stackTrace = null;
-
-        propertyDescriptions.clear();
-
-        message = exception.getMessage();
-        exceptionClass = exception.getClass();
-
-        // Get properties, ignoring those in Throwable and higher
-        // (including the 'message' property).
-
-        try
-        {
-            info = Introspector.getBeanInfo(exceptionClass, Throwable.class);
-        }
-        catch (IntrospectionException e)
-        {
-            return null;
-        }
-
-        descriptors = info.getPropertyDescriptors();
-
-        for (i = 0; i < descriptors.length; i++)
-        {
-            descriptor = descriptors[i];
-
-            method = descriptor.getReadMethod();
-            if (method == null)
-                continue;
-
-            try
-            {
-                value = method.invoke(exception, null);
-            }
-            catch (Exception e)
-            {
-                continue;
-            }
-
-            if (value == null)
-                continue;
-
-            // Some annoying exceptions duplicate the message property
-            // (I'm talking to YOU SAXParseException), so just edit that out.
-
-            if (message != null && message.equals(value))
-                continue;
-
-            // Skip Throwables ... but the first non-null
-            // found is the next exception.  We kind of count
-            // on there being no more than one Throwable
-            // property per Exception.
-
-            if (value instanceof Throwable)
-            {
-                if (next == null)
-                    next = (Throwable) value;
-
-                continue;
-            }
-
-            stringValue = value.toString().trim();
-
-            if (stringValue.length() == 0)
-                continue;
-
-            property = new ExceptionProperty(descriptor.getDisplayName(), value.toString());
-
-            propertyDescriptions.add(property);
-        }
-
-        // If exhaustive, or in the deepest exception (where there's no next)
-        // the extract the stack trace.
-
-        if (next == null || exhaustive)
-            stackTrace = getStackTrace(exception);
-
-        // Would be nice to sort the properties here.
-
-        properties = new ExceptionProperty[propertyDescriptions.size()];
-
-        ExceptionProperty[] propArray =
-            (ExceptionProperty[]) propertyDescriptions.toArray(properties);
-
-        description =
-            new ExceptionDescription(
-                exceptionClass.getName(),
-                message,
-                propArray,
-                stackTrace);
-
-        exceptionDescriptions.add(description);
-
-        return next;
-    }
-
-    /**
-     *  Gets the stack trace for the exception, and converts it into an array of strings.
-     *
-     *  <p>This involves parsing the 
-     *   string generated indirectly from
-     *  <code>Throwable.printStackTrace(PrintWriter)</code>.  This method can get confused
-     *  if the message (presumably, the first line emitted by printStackTrace())
-     *  spans multiple lines.
-     *
-     *  <p>Different JVMs format the exception in different ways.
-     *
-     *  <p>A possible expansion would be more flexibility in defining the pattern
-     *  used.  Hopefully all 'mainstream' JVMs are close enough for this to continue
-     *  working.
-     *
-     **/
-
-    protected String[] getStackTrace(Throwable exception)
-    {
-        writer.reset();
-
-        PrintWriter printWriter = new PrintWriter(writer);
-
-        exception.printStackTrace(printWriter);
-
-        printWriter.close();
-
-        String fullTrace = writer.toString();
-
-        writer.reset();
-
-        // OK, the trick is to convert the full trace into an array of stack frames.
-
-        StringReader stringReader = new StringReader(fullTrace);
-        LineNumberReader lineReader = new LineNumberReader(stringReader);
-        int lineNumber = 0;
-        List frames = new ArrayList();
-
-        try
-        {
-            while (true)
-            {
-                String line = lineReader.readLine();
-
-                if (line == null)
-                    break;
-
-                // Always ignore the first line.
-
-                if (++lineNumber == 1)
-                    continue;
-
-                frames.add(stripFrame(line));
-            }
-
-            lineReader.close();
-        }
-        catch (IOException ex)
-        {
-            // Not likely to happen with this particular set
-            // of readers.
-        }
-
-        String result[] = new String[frames.size()];
-
-        return (String[]) frames.toArray(result);
-    }
-
-    private static final int SKIP_LEADING_WHITESPACE = 0;
-    private static final int SKIP_T = 1;
-    private static final int SKIP_OTHER_WHITESPACE = 2;
-
-    /**
-     *  Sun's JVM prefixes each line in the stack trace
-     *  with "<tab>at ", other JVMs don't.  This method
-     *  looks for and strips such stuff.
-     *
-     **/
-
-    private String stripFrame(String frame)
-    {
-        char array[] = frame.toCharArray();
-
-        int i = 0;
-        int state = SKIP_LEADING_WHITESPACE;
-        boolean more = true;
-
-        while (more)
-        {
-            // Ran out of characters to skip?  Return the empty string.
-
-            if (i == array.length)
-                return "";
-
-            char ch = array[i];
-
-            switch (state)
-            {
-                // Ignore whitespace at the start of the line.
-
-                case SKIP_LEADING_WHITESPACE :
-
-                    if (Character.isWhitespace(ch))
-                    {
-                        i++;
-                        continue;
-                    }
-
-                    if (ch == 'a')
-                    {
-                        state = SKIP_T;
-                        i++;
-                        continue;
-                    }
-
-                    // Found non-whitespace, not 'a'
-                    more = false;
-                    break;
-
-                    // Skip over the 't' after an 'a'
-
-                case SKIP_T :
-
-                    if (ch == 't')
-                    {
-                        state = SKIP_OTHER_WHITESPACE;
-                        i++;
-                        continue;
-                    }
-
-                    // Back out the skipped-over 'a'
-
-                    i--;
-                    more = false;
-                    break;
-
-                    // Skip whitespace between 'at' and the name of the class
-
-                case SKIP_OTHER_WHITESPACE :
-
-                    if (Character.isWhitespace(ch))
-                    {
-                        i++;
-                        continue;
-                    }
-
-                    // Not whitespace
-                    more = false;
-                    break;
-            }
-
-        }
-
-        // Found nothing to strip out.
-
-        if (i == 0)
-            return frame;
-
-        return frame.substring(i);
-    }
-
-    /**
-     *  Produces a text based exception report to the provided stream.
-     *
-     **/
-
-    public void reportException(Throwable exception, PrintStream stream)
-    {
-        int i;
-        int j;
-        ExceptionDescription[] descriptions;
-        ExceptionProperty[] properties;
-        String[] stackTrace;
-        String message;
-
-        descriptions = analyze(exception);
-
-        for (i = 0; i < descriptions.length; i++)
-        {
-            message = descriptions[i].getMessage();
-
-            if (message == null)
-                stream.println(descriptions[i].getExceptionClassName());
-            else
-                stream.println(
-                    descriptions[i].getExceptionClassName() + ": " + descriptions[i].getMessage());
-
-            properties = descriptions[i].getProperties();
-
-            for (j = 0; j < properties.length; j++)
-                stream.println(
-                    "   " + properties[j].getName() + ": " + properties[j].getValue());
-
-            // Just show the stack trace on the deepest exception.
-
-            if (i + 1 == descriptions.length)
-            {
-                stackTrace = descriptions[i].getStackTrace();
-
-                for (j = 0; j < stackTrace.length; j++)
-                    stream.println(stackTrace[j]);
-            }
-            else
-                stream.println();
-        }
-    }
-
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/util/exception/ExceptionDescription.java b/3.0.4/framework/src/org/apache/tapestry/util/exception/ExceptionDescription.java
deleted file mode 100644
index d39f3b3..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/util/exception/ExceptionDescription.java
+++ /dev/null
@@ -1,76 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.util.exception;
-
-import java.io.Serializable;
-
-/**
- *  A description of an <code>Exception</code>.  This is useful when presenting an
- *  exception (in output or on a web page).
- *
- *  <p>We capture all the information about an exception as
- *  Strings.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- * 
- **/
-
-public class ExceptionDescription implements Serializable
-{
-    /**
-     *  @since 2.0.4
-     * 
-     **/
-
-    private static final long serialVersionUID = -4874930784340781514L;
-
-    private String exceptionClassName;
-    private String message;
-    private ExceptionProperty[] properties;
-    private String[] stackTrace;
-
-    public ExceptionDescription(
-        String exceptionClassName,
-        String message,
-        ExceptionProperty[] properties,
-        String[] stackTrace)
-    {
-        this.exceptionClassName = exceptionClassName;
-        this.message = message;
-        this.properties = properties;
-        this.stackTrace = stackTrace;
-    }
-
-    public String getExceptionClassName()
-    {
-        return exceptionClassName;
-    }
-
-    public String getMessage()
-    {
-        return message;
-    }
-
-    public ExceptionProperty[] getProperties()
-    {
-        return properties;
-    }
-
-    public String[] getStackTrace()
-    {
-        return stackTrace;
-    }
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/util/exception/ExceptionProperty.java b/3.0.4/framework/src/org/apache/tapestry/util/exception/ExceptionProperty.java
deleted file mode 100644
index 7bcc484..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/util/exception/ExceptionProperty.java
+++ /dev/null
@@ -1,54 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.util.exception;
-
-import java.io.Serializable;
-
-/**
- *  Captures a name/value property pair from an exception.  Part of
- *  an {@link ExceptionDescription}.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- * 
- **/
-
-public class ExceptionProperty implements Serializable
-{
-    /**
-     *  @since 2.0.4
-     * 
-     **/
-    
-    private static final long serialVersionUID = -4598312382467505134L;
-    private String name;
-    private String value;
-
-    public ExceptionProperty(String name, String value)
-    {
-        this.name = name;
-        this.value = value;
-    }
-
-    public String getName()
-    {
-        return name;
-    }
-
-    public String getValue()
-    {
-        return value;
-    }
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/util/exception/package.html b/3.0.4/framework/src/org/apache/tapestry/util/exception/package.html
deleted file mode 100644
index d40c47b..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/util/exception/package.html
+++ /dev/null
@@ -1,17 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<!-- $Id$ -->
-<html>
-<head>
-<title>Tapestry: Web Application Framework</title>
-</head>
-<body>
-
-<p>A basic framework for analyzing a reporting exceptions.  The 
-{@link org.apache.tapestry.util.exception.ExceptionAnalyzer} class will identify
-the type, message and other properties of an exception, and understands about nested
-exceptions.
-
-@author Howard Lewis Ship <a href="mailto:hlship@apache.org">hlship@apache.org</a>
-
-</body>
-</html>
diff --git a/3.0.4/framework/src/org/apache/tapestry/util/io/BinaryDumpOutputStream.java b/3.0.4/framework/src/org/apache/tapestry/util/io/BinaryDumpOutputStream.java
deleted file mode 100644
index 8fbd5a4..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/util/io/BinaryDumpOutputStream.java
+++ /dev/null
@@ -1,308 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.util.io;
-
-import java.io.IOException;
-import java.io.OutputStream;
-import java.io.PrintWriter;
-import java.io.Writer;
-
-/**
- *  A kind of super-formatter.  It is sent a stream of binary data and
- *  formats it in a human-readable dump format which is forwarded to
- *  its output stream.
- *
- * <p>Currently, output is in hex though options to change that may
- * be introduced.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- * 
- **/
-
-public class BinaryDumpOutputStream extends OutputStream
-{
-    private PrintWriter out;
-
-    private boolean locked = false;
-
-    private boolean showOffset = true;
-    private int bytesPerLine = 16;
-    private int spacingInterval = 4;
-    private char substituteChar = '.';
-    private String offsetSeperator = ": ";
-    private int offset = 0;
-    private int lineCount = 0;
-    private int bytesSinceSpace = 0;
-    private char[] ascii = null;
-    private boolean showAscii = true;
-    private String asciiBegin = "  |";
-    private String asciiEnd = "|";
-
-    private static final char[] HEX =
-        {
-            '0',
-            '1',
-            '2',
-            '3',
-            '4',
-            '5',
-            '6',
-            '7',
-            '8',
-            '9',
-            'a',
-            'b',
-            'c',
-            'd',
-            'e',
-            'f' };
-
-    /**
-     *  Creates a <code>PrintWriter</code> for <code>System.out</code>.
-     *
-     **/
-
-    public BinaryDumpOutputStream()
-    {
-        this(new PrintWriter(System.out, true));
-    }
-
-    public BinaryDumpOutputStream(PrintWriter out)
-    {
-        this.out = out;
-    }
-
-    public BinaryDumpOutputStream(Writer out)
-    {
-        this.out = new PrintWriter(out);
-    }
-
-    public void close() throws IOException
-    {
-        if (out != null)
-        {
-            if (lineCount > 0)
-                finishFinalLine();
-
-            out.close();
-        }
-
-        out = null;
-    }
-
-    private void finishFinalLine()
-    {
-        // Since we only finish the final line after at least one byte has
-        // been written to it, we don't need to worry about
-        // the offset.
-
-        while (lineCount < bytesPerLine)
-        {
-            // After every <n> bytes, emit a space.
-
-            if (spacingInterval > 0 && bytesSinceSpace == spacingInterval)
-            {
-                out.print(' ');
-                bytesSinceSpace = 0;
-            }
-
-            // Two spaces to substitute for the two hex digits.
-
-            out.print("  ");
-
-            if (showAscii)
-                ascii[lineCount] = ' ';
-
-            lineCount++;
-            bytesSinceSpace++;
-        }
-
-        if (showAscii)
-        {
-            out.print(asciiBegin);
-            out.print(ascii);
-            out.print(asciiEnd);
-        }
-
-        out.println();
-    }
-
-    /**
-     *  Forwards the <code>flush()</code> to the <code>PrintWriter</code>.
-     *
-     **/
-
-    public void flush() throws IOException
-    {
-        out.flush();
-    }
-
-    public String getAsciiBegin()
-    {
-        return asciiBegin;
-    }
-
-    public String getAsciiEnd()
-    {
-        return asciiEnd;
-    }
-
-    public int getBytesPerLine()
-    {
-        return bytesPerLine;
-    }
-
-    public String getOffsetSeperator()
-    {
-        return offsetSeperator;
-    }
-
-    public boolean getShowAscii()
-    {
-        return showAscii;
-    }
-
-    public char getSubstituteChar()
-    {
-        return substituteChar;
-    }
-
-    public void setAsciiBegin(String value)
-    {
-        if (locked)
-            throw new IllegalStateException();
-
-        asciiBegin = value;
-    }
-
-    public void setAsciiEnd(String value)
-    {
-        if (locked)
-            throw new IllegalStateException();
-
-        asciiEnd = value;
-    }
-
-    public void setBytesPerLine(int value)
-    {
-        if (locked)
-            throw new IllegalStateException();
-
-        bytesPerLine = value;
-
-        ascii = null;
-    }
-
-    public void setOffsetSeperator(String value)
-    {
-        if (locked)
-            throw new IllegalStateException();
-
-        offsetSeperator = value;
-    }
-
-    public void setShowAscii(boolean value)
-    {
-        if (locked)
-            throw new IllegalStateException();
-
-        showAscii = value;
-    }
-
-    /**
-     *  Sets the character used in the ASCII dump that substitutes for characters
-     *  outside the range of 32..126.
-     *
-     **/
-
-    public void setSubstituteChar(char value)
-    {
-        if (locked)
-            throw new IllegalStateException();
-
-        substituteChar = value;
-    }
-
-    public void write(int b) throws IOException
-    {
-        char letter;
-
-        if (showAscii && ascii == null)
-            ascii = new char[bytesPerLine];
-
-        // Prevent further customization after output starts being written.
-
-        locked = true;
-
-        if (lineCount == bytesPerLine)
-        {
-            if (showAscii)
-            {
-                out.print(asciiBegin);
-                out.print(ascii);
-                out.print(asciiEnd);
-            }
-
-            out.println();
-
-            bytesSinceSpace = 0;
-            lineCount = 0;
-            offset += bytesPerLine;
-        }
-
-        if (lineCount == 0 && showOffset)
-        {
-            writeHex(offset, 4);
-            out.print(offsetSeperator);
-        }
-
-        // After every <n> bytes, emit a space.
-
-        if (spacingInterval > 0 && bytesSinceSpace == spacingInterval)
-        {
-            out.print(' ');
-            bytesSinceSpace = 0;
-        }
-
-        writeHex(b, 2);
-
-        if (showAscii)
-        {
-            if (b < 32 | b > 127)
-                letter = substituteChar;
-            else
-                letter = (char) b;
-
-            ascii[lineCount] = letter;
-        }
-
-        lineCount++;
-        bytesSinceSpace++;
-    }
-
-    private void writeHex(int value, int digits)
-    {
-        int i;
-        int nybble;
-
-        for (i = 0; i < digits; i++)
-        {
-            nybble = (value >> 4 * (digits - i - 1)) & 0x0f;
-
-            out.print(HEX[nybble]);
-        }
-    }
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/util/io/BooleanAdaptor.java b/3.0.4/framework/src/org/apache/tapestry/util/io/BooleanAdaptor.java
deleted file mode 100644
index ba397f1..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/util/io/BooleanAdaptor.java
+++ /dev/null
@@ -1,70 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.util.io;
-
-/**
- *  Squeezes a {@link Boolean}.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *
- **/
-
-class BooleanAdaptor implements ISqueezeAdaptor
-{
-    private static final String PREFIX = "TF";
-
-    /**
-     *  Registers using the prefixes 'T' and 'F' (for TRUE and FALSE).
-     *
-     **/
-
-    public void register(DataSqueezer squeezer)
-    {
-        squeezer.register(PREFIX, Boolean.class, this);
-    }
-
-    /**
-     *  Squeezes the {@link Boolean} data to either 'T' or 'F'.
-     *
-     **/
-
-    public String squeeze(DataSqueezer squeezer, Object data)
-    {
-        Boolean bool = (Boolean) data;
-
-        if (bool.booleanValue())
-            return "T";
-        else
-            return "F";
-    }
-
-    /**
-     *  Unsqueezes the string to either {@link Boolean#TRUE} or {@link Boolean#FALSE},
-     *  depending on the prefix character.
-     *
-     **/
-
-    public Object unsqueeze(DataSqueezer squeezer, String string)
-    {
-        char ch = string.charAt(0);
-
-        if (ch == 'T')
-            return Boolean.TRUE;
-
-        return Boolean.FALSE;
-    }
-
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/util/io/ByteAdaptor.java b/3.0.4/framework/src/org/apache/tapestry/util/io/ByteAdaptor.java
deleted file mode 100644
index d6cf466..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/util/io/ByteAdaptor.java
+++ /dev/null
@@ -1,61 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.util.io;
-
-/**
- *  Squeezes a {@link Byte}. 
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *
- **/
-
-class ByteAdaptor implements ISqueezeAdaptor
-{
-    private static final String PREFIX = "b";
-
-    /**
-     *  Registers using the prefix 'b'.
-     *
-     **/
-
-    public void register(DataSqueezer squeezer)
-    {
-        squeezer.register(PREFIX, Byte.class, this);
-    }
-
-    /**
-     *  Invoked <code>toString()</code> on data (which is type {@link Byte}),
-     *  and prefixs the result.
-     *
-     **/
-
-    public String squeeze(DataSqueezer squeezer, Object data)
-    {
-        return PREFIX + data.toString();
-    }
-
-    /**
-     *  Constructs an {@link Byte} from the string, after stripping
-     *  the prefix.
-     *
-     **/
-
-    public Object unsqueeze(DataSqueezer squeezer, String string)
-    {
-        return new Byte(string.substring(1));
-    }
-
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/util/io/CharacterAdaptor.java b/3.0.4/framework/src/org/apache/tapestry/util/io/CharacterAdaptor.java
deleted file mode 100644
index 0703a0f..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/util/io/CharacterAdaptor.java
+++ /dev/null
@@ -1,56 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.util.io;
-
-import java.io.IOException;
-
-/**
- *  Squeezes a Character.
- * 
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 2.2
- * 
- **/
-
-public class CharacterAdaptor implements ISqueezeAdaptor
-{
-    private static final String PREFIX = "c";
-    private static final char PREFIX_CH = 'c';
-    
-    public String squeeze(DataSqueezer squeezer, Object data) throws IOException
-    {
-        Character charData = (Character)data;
-        char value = charData.charValue();
-        
-        char[] buffer = new char[]
-        {
-            PREFIX_CH, value
-        };
-        
-        return new String(buffer);
-    }
-
-    public Object unsqueeze(DataSqueezer squeezer, String string) throws IOException
-    {
-        return new Character(string.charAt(1));
-    }
-
-    public void register(DataSqueezer squeezer)
-    {
-        squeezer.register(PREFIX, Character.class, this);
-    }
-
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/util/io/ComponentAddressAdaptor.java b/3.0.4/framework/src/org/apache/tapestry/util/io/ComponentAddressAdaptor.java
deleted file mode 100644
index 8b0ac52..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/util/io/ComponentAddressAdaptor.java
+++ /dev/null
@@ -1,67 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.util.io;
-
-import java.io.IOException;
-
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.util.ComponentAddress;
-
-/**
- *  Squeezes a org.apache.tapestry.ComponentAddress.
- * 
- *  @author mindbridge
- *  @version $Id$
- *  @since 2.2
- * 
- **/
-
-public class ComponentAddressAdaptor implements ISqueezeAdaptor
-{
-    private static final String PREFIX = "A";
-    private static final char SEPARATOR = '/';
-    
-    public String squeeze(DataSqueezer squeezer, Object data) throws IOException
-    {
-        ComponentAddress address = (ComponentAddress) data;
-
-        // a 'null' id path is encoded as an empty string
-        String idPath = address.getIdPath();
-        if (idPath == null)
-        	idPath = "";
-
-        return PREFIX + address.getPageName() + SEPARATOR + idPath;
-    }
-
-    public Object unsqueeze(DataSqueezer squeezer, String string) throws IOException
-    {
-        int separator = string.indexOf(SEPARATOR);
-        if (separator < 0) 
-            throw new IOException(Tapestry.getMessage("ComponentAddressAdaptor.no-separator"));
-
-        String pageName = string.substring(1, separator);
-        String idPath = string.substring(separator + 1);
-        if (idPath.equals(""))
-        	idPath = null;
-
-        return new ComponentAddress(pageName, idPath);
-    }
-
-    public void register(DataSqueezer squeezer)
-    {
-        squeezer.register(PREFIX, ComponentAddress.class, this);
-    }
-
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/util/io/DataSqueezer.java b/3.0.4/framework/src/org/apache/tapestry/util/io/DataSqueezer.java
deleted file mode 100644
index 1bab14b..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/util/io/DataSqueezer.java
+++ /dev/null
@@ -1,299 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.util.io;
-
-import java.io.IOException;
-
-import org.apache.tapestry.IResourceResolver;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.util.AdaptorRegistry;
-
-/**
- *  A class used to convert arbitrary objects to Strings and back.
- *  This has particular uses involving HTTP URLs and Cookies.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *
- **/
-
-public class DataSqueezer
-{
-    private static final String NULL_PREFIX = "X";
-    private static final char NULL_PREFIX_CH = 'X';
-
-    private static final int ARRAY_SIZE = 90;
-    private static final int FIRST_ADAPTOR_OFFSET = 33;
-
-    /**
-     *  An array of adaptors; this is used as a cheap lookup-table when unsqueezing.  
-     *  Each adaptor is identified by a single ASCII character, in the range of
-     *  33 ('!') to 122 (the letter 'z').  The offset into this table
-     *  is the character minus 33.
-     *
-     **/
-
-    private ISqueezeAdaptor[] _adaptorByPrefix = new ISqueezeAdaptor[ARRAY_SIZE];
-
-    /**
-     *  AdaptorRegistry cache of adaptors.
-     *
-     **/
-
-    private AdaptorRegistry _adaptors = new AdaptorRegistry();
-
-    /**
-     *  Resource resolver used to deserialize classes.
-     * 
-     **/
-
-    private IResourceResolver _resolver;
-
-    /**
-     *  Creates a new squeezer with the default set of adaptors.
-     *
-     **/
-
-    public DataSqueezer(IResourceResolver resolver)
-    {
-        this(resolver, null);
-    }
-
-    /**
-     *  Creates a new data squeezer, which will have the default set of
-     *  adaptors, and may add additional adaptors.
-     *
-     *  @param adaptors an optional list of adaptors that will be registered to
-     *  the data squeezer (it may be null or empty)
-     *
-     **/
-
-    public DataSqueezer(IResourceResolver resolver, ISqueezeAdaptor[] adaptors)
-    {
-        _resolver = resolver;
-
-        registerDefaultAdaptors();
-
-        if (adaptors != null)
-            for (int i = 0; i < adaptors.length; i++)
-                adaptors[i].register(this);
-    }
-
-    private void registerDefaultAdaptors()
-    {
-        new CharacterAdaptor().register(this);
-        new StringAdaptor().register(this);
-        new IntegerAdaptor().register(this);
-        new DoubleAdaptor().register(this);
-        new ByteAdaptor().register(this);
-        new FloatAdaptor().register(this);
-        new LongAdaptor().register(this);
-        new ShortAdaptor().register(this);
-        new BooleanAdaptor().register(this);
-        new SerializableAdaptor().register(this);
-        new ComponentAddressAdaptor().register(this);
-        new EnumAdaptor().register(this);
-    }
-
-    /**
-     *  Registers the adaptor with one or more single-character prefixes.
-     *
-     *  @param prefix one or more characters, each of which will be a prefix for
-     *  the adaptor.
-     *  @param dataClass the class (or interface) which can be encoded by the adaptor.
-     *  @param adaptor the adaptor which to be registered.
-     *
-     **/
-
-    public synchronized void register(String prefix, Class dataClass, ISqueezeAdaptor adaptor)
-    {
-        int prefixLength = prefix.length();
-        int offset;
-
-        if (prefixLength < 1)
-            throw new IllegalArgumentException(Tapestry.getMessage("DataSqueezer.short-prefix"));
-
-        if (dataClass == null)
-            throw new IllegalArgumentException(Tapestry.getMessage("DataSqueezer.null-class"));
-
-        if (adaptor == null)
-            throw new IllegalArgumentException(Tapestry.getMessage("DataSqueezer.null-adaptor"));
-
-        for (int i = 0; i < prefixLength; i++)
-        {
-            char ch = prefix.charAt(i);
-
-            if (ch < '!' | ch > 'z')
-                throw new IllegalArgumentException(
-                    Tapestry.getMessage("DataSqueezer.prefix-out-of-range"));
-
-            offset = ch - FIRST_ADAPTOR_OFFSET;
-
-            if (_adaptorByPrefix[offset] != null)
-                throw new IllegalArgumentException(
-                    Tapestry.format(
-                        "DataSqueezer.adaptor-prefix-taken",
-                        prefix.substring(i, i)));
-
-            _adaptorByPrefix[offset] = adaptor;
-
-        }
-
-        _adaptors.register(dataClass, adaptor);
-    }
-
-    /**
-     *  Squeezes the data object into a String by locating an appropriate
-     *  adaptor that can perform the conversion.  data may be null.
-     *
-     **/
-
-    public String squeeze(Object data) throws IOException
-    {
-        ISqueezeAdaptor adaptor;
-
-        if (data == null)
-            return NULL_PREFIX;
-
-        adaptor = (ISqueezeAdaptor) _adaptors.getAdaptor(data.getClass());
-
-        return adaptor.squeeze(this, data);
-    }
-
-    /**
-     *  A convience; invokes {@link #squeeze(Object)} for each element in the
-     *  data array.  If data is null, returns null.
-     *
-     **/
-
-    public String[] squeeze(Object[] data) throws IOException
-    {
-        if (data == null)
-            return null;
-
-        int length = data.length;
-        String[] result;
-
-        result = new String[length];
-
-        for (int i = 0; i < length; i++)
-            result[i] = squeeze(data[i]);
-
-        return result;
-    }
-
-    /**
-     *  Unsqueezes the string.  Note that in a special case, where the first
-     *  character of the string is not a recognized prefix, it is assumed
-     *  that the string is simply a string, and return with no
-     *  change.
-     *
-     **/
-
-    public Object unsqueeze(String string) throws IOException
-    {
-        ISqueezeAdaptor adaptor = null;
-
-        if (string.equals(NULL_PREFIX))
-            return null;
-
-        int offset = string.charAt(0) - FIRST_ADAPTOR_OFFSET;
-
-        if (offset >= 0 && offset < _adaptorByPrefix.length)
-            adaptor = _adaptorByPrefix[offset];
-
-        // If the adaptor is not otherwise recognized, the it is simply
-        // an encoded String (the StringAdaptor may not have added
-        // a prefix).
-
-        if (adaptor == null)
-            return string;
-
-        // Adaptor should never be null, because we always supply
-        // an adaptor for String
-
-        return adaptor.unsqueeze(this, string);
-    }
-
-    /**
-     *  Convienience method for unsqueezing many strings (back into objects).
-     *  
-     *  <p>If strings is null, returns null.
-     * 
-     **/
-
-    public Object[] unsqueeze(String[] strings) throws IOException
-    {
-        if (strings == null)
-            return null;
-
-        int length = strings.length;
-        Object[] result;
-
-        result = new Object[length];
-
-        for (int i = 0; i < length; i++)
-            result[i] = unsqueeze(strings[i]);
-
-        return result;
-    }
-
-    /**
-     *  Checks to see if a given prefix character has a registered
-     *  adaptor.  This is used by the String adaptor to
-     *  determine whether it needs to put a prefix on its String.
-     *
-     **/
-
-    public boolean isPrefixRegistered(char prefix)
-    {
-        int offset = prefix - FIRST_ADAPTOR_OFFSET;
-
-        // Special case for handling nulls.
-
-        if (prefix == NULL_PREFIX_CH)
-            return true;
-
-        if (offset < 0 || offset >= _adaptorByPrefix.length)
-            return false;
-
-        return _adaptorByPrefix[offset] != null;
-    }
-
-    public String toString()
-    {
-        StringBuffer buffer;
-
-        buffer = new StringBuffer();
-        buffer.append("DataSqueezer[adaptors=<");
-        buffer.append(_adaptors.toString());
-        buffer.append(">]");
-
-        return buffer.toString();
-    }
-
-    /**
-     *  Returns the resource resolver used with this squeezer.
-     * 
-     *  @since 2.2
-     * 
-     **/
-
-    public IResourceResolver getResolver()
-    {
-        return _resolver;
-    }
-
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/util/io/DoubleAdaptor.java b/3.0.4/framework/src/org/apache/tapestry/util/io/DoubleAdaptor.java
deleted file mode 100644
index fe55923..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/util/io/DoubleAdaptor.java
+++ /dev/null
@@ -1,61 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.util.io;
-
-/**
- *  Squeezes a {@link Double}. 
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *
- **/
-
-class DoubleAdaptor implements ISqueezeAdaptor
-{
-    private static final String PREFIX = "d";
-
-    /**
-     *  Registers using the prefix 'd'.
-     *
-     **/
-
-    public void register(DataSqueezer squeezer)
-    {
-        squeezer.register(PREFIX, Double.class, this);
-    }
-
-    /**
-     *  Invoked <code>toString()</code> on data (which is type {@link Double}),
-     *  and prefixs the result.
-     *
-     **/
-
-    public String squeeze(DataSqueezer squeezer, Object data)
-    {
-        return PREFIX + data.toString();
-    }
-
-    /**
-     *  Constructs an {@link Double} from the string, after stripping
-     *  the prefix.
-     *
-     **/
-
-    public Object unsqueeze(DataSqueezer squeezer, String string)
-    {
-        return new Double(string.substring(1));
-    }
-
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/util/io/EnumAdaptor.java b/3.0.4/framework/src/org/apache/tapestry/util/io/EnumAdaptor.java
deleted file mode 100644
index 63bbbeb..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/util/io/EnumAdaptor.java
+++ /dev/null
@@ -1,65 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.util.io;
-
-import java.io.IOException;
-
-import org.apache.commons.lang.enum.Enum;
-import org.apache.commons.lang.enum.EnumUtils;
-
-/**
- *  Adaptor for {@link Enum} classes.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 3.0
- *
- **/
-public class EnumAdaptor implements ISqueezeAdaptor
-{
-    private static final String PREFIX = "E";
-    private static final char SEPARATOR = '@';
-
-    public String squeeze(DataSqueezer squeezer, Object o) throws IOException
-    {
-        Enum e = (Enum) o;
-        return PREFIX + e.getClass().getName() + SEPARATOR + e.getName();
-    }
-
-    public Object unsqueeze(DataSqueezer squeezer, String str) throws IOException
-    {
-        int pos = str.indexOf(SEPARATOR);
-
-        String className = str.substring(1, pos);
-        String name = str.substring(pos + 1, str.length());
-
-		Class enumClass = squeezer.getResolver().findClass(className);
-		
-        try
-        {        	
-            return EnumUtils.getEnum(enumClass, name);
-        }
-        catch (IllegalArgumentException ex)
-        {
-            throw new IOException(ex.getMessage());
-        }
-    }
-
-    public void register(DataSqueezer squeezer)
-    {
-        squeezer.register(PREFIX, Enum.class, this);
-    }
-
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/util/io/FloatAdaptor.java b/3.0.4/framework/src/org/apache/tapestry/util/io/FloatAdaptor.java
deleted file mode 100644
index 420e629..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/util/io/FloatAdaptor.java
+++ /dev/null
@@ -1,61 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.util.io;
-
-/**
- *  Squeezes a {@link Float}.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *
- **/
-
-class FloatAdaptor implements ISqueezeAdaptor
-{
-    private static final String PREFIX = "f";
-
-    /**
-     *  Registers using the prefix 'f'.
-     *
-     **/
-
-    public void register(DataSqueezer squeezer)
-    {
-        squeezer.register(PREFIX, Float.class, this);
-    }
-
-    /**
-     *  Invoked <code>toString()</code> on data (which is type {@link Float}),
-     *  and prefixs the result.
-     *
-     **/
-
-    public String squeeze(DataSqueezer squeezer, Object data)
-    {
-        return PREFIX + data.toString();
-    }
-
-    /**
-     *  Constructs a {@link Float} from the string, after stripping
-     *  the prefix.
-     *
-     **/
-
-    public Object unsqueeze(DataSqueezer squeezer, String string)
-    {
-        return new Float(string.substring(1));
-    }
-
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/util/io/ISqueezeAdaptor.java b/3.0.4/framework/src/org/apache/tapestry/util/io/ISqueezeAdaptor.java
deleted file mode 100644
index 3ef6014..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/util/io/ISqueezeAdaptor.java
+++ /dev/null
@@ -1,55 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.util.io;
-
-import java.io.IOException;
-
-/**
- *  Interface which defines a class used to convert data for a specific
- *  Java type into a String format (squeeze it),
- *  or convert from a String back into a Java type (unsqueeze).
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- * 
- **/
-
-public interface ISqueezeAdaptor
-{
-    /**
-     *  Converts the data object into a String.
-     *
-     *  @throws IOException if the object can't be converted.
-     **/
-
-    public String squeeze(DataSqueezer squeezer, Object data) throws IOException;
-
-    /**
-     *  Converts a String back into an appropriate object.
-     *
-     *  @throws IOException if the String can't be converted.
-     *
-     **/
-
-    public Object unsqueeze(DataSqueezer squeezer, String string)
-        throws IOException;
-
-    /**
-     *  Invoked to ask an adaptor to register itself to the squeezer.
-     *
-     **/
-
-    public void register(DataSqueezer squeezer);
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/util/io/IntegerAdaptor.java b/3.0.4/framework/src/org/apache/tapestry/util/io/IntegerAdaptor.java
deleted file mode 100644
index 1b1fe82..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/util/io/IntegerAdaptor.java
+++ /dev/null
@@ -1,59 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.util.io;
-
-/**
- *  Squeezes a {@link Integer}.  This adaptor claims all the digits as prefix
- *  characters, so its the very simplest conversion of all!
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *
- **/
-
-class IntegerAdaptor implements ISqueezeAdaptor
-{
-    /**
-     *  Registers this adaptor using all nine digits and the minus sign.
-     *
-     **/
-
-    public void register(DataSqueezer squeezer)
-    {
-        squeezer.register("-0123456789", Integer.class, this);
-    }
-
-    /**
-     *  Simply invokes <code>toString()</code> on the data,
-     *  which is actually type {@link Integer}.
-     *
-     **/
-
-    public String squeeze(DataSqueezer squeezer, Object data)
-    {
-        return data.toString();
-    }
-
-    /**
-     *  Constructs an {@link Integer} from the string.
-     *
-     **/
-
-    public Object unsqueeze(DataSqueezer squeezer, String string)
-    {
-        return new Integer(string);
-    }
-
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/util/io/LongAdaptor.java b/3.0.4/framework/src/org/apache/tapestry/util/io/LongAdaptor.java
deleted file mode 100644
index 7e116a7..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/util/io/LongAdaptor.java
+++ /dev/null
@@ -1,61 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.util.io;
-
-/**
- *  Squeezes a {@link Long}. 
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *
- **/
-
-class LongAdaptor implements ISqueezeAdaptor
-{
-    private static final String PREFIX = "l";
-
-    /**
-     *  Registers using the prefix 'l'.
-     *
-     **/
-
-    public void register(DataSqueezer squeezer)
-    {
-        squeezer.register(PREFIX, Long.class, this);
-    }
-
-    /**
-     *  Invoked <code>toString()</code> on data (which is type {@link Long}),
-     *  and prefixs the result.
-     *
-     **/
-
-    public String squeeze(DataSqueezer squeezer, Object data)
-    {
-        return PREFIX + data.toString();
-    }
-
-    /**
-     *  Constructs a {@link Long} from the string, after stripping
-     *  the prefix.
-     *
-     **/
-
-    public Object unsqueeze(DataSqueezer squeezer, String string)
-    {
-        return new Long(string.substring(1));
-    }
-
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/util/io/ResolvingObjectInputStream.java b/3.0.4/framework/src/org/apache/tapestry/util/io/ResolvingObjectInputStream.java
deleted file mode 100644
index 4c8f20e..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/util/io/ResolvingObjectInputStream.java
+++ /dev/null
@@ -1,57 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.util.io;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.ObjectInputStream;
-import java.io.ObjectStreamClass;
-
-import org.apache.tapestry.IResourceResolver;
-
-/**
- *  Specialized subclass of {@link java.io.ObjectInputStream}
- *  that knows how to resolve classes with a non-default
- *  class loader (represented by an instance of
- *  {@link org.apache.tapestry.IResourceResolver}).
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 3.0
- *
- **/
-
-public class ResolvingObjectInputStream extends ObjectInputStream
-{
-    private IResourceResolver _resolver;
-
-    public ResolvingObjectInputStream(IResourceResolver resolver, InputStream input) throws IOException
-    {
-        super(input);
-
-        _resolver = resolver;
-    }
-
-    /**
-     *  Overrides the default implementation to
-     *  have the resource resolver find the class.
-     * 
-     **/
-
-    protected Class resolveClass(ObjectStreamClass v) throws IOException, ClassNotFoundException
-    {
-        return _resolver.findClass(v.getName());
-    }
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/util/io/SerializableAdaptor.java b/3.0.4/framework/src/org/apache/tapestry/util/io/SerializableAdaptor.java
deleted file mode 100644
index 986596e..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/util/io/SerializableAdaptor.java
+++ /dev/null
@@ -1,283 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.util.io;
-
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.ObjectInputStream;
-import java.io.ObjectOutputStream;
-import java.io.OutputStream;
-import java.io.Serializable;
-import java.util.zip.GZIPInputStream;
-import java.util.zip.GZIPOutputStream;
-
-import org.apache.tapestry.Tapestry;
-
-/**
- *  The most complicated of the adaptors, this one takes an arbitrary serializable
- *  object, serializes it to binary, and encodes it in a Base64 encoding.
- *
- *  <p>Encoding and decoding of Base64 strings uses code adapted from work in the public
- *  domain originally written by Jonathan Knudsen and published in
- *  O'reilly's "Java Cryptography". Note that we use a <em>modified</em> form of Base64 encoding,
- *  with URL-safe characters to encode the 62 and 63 values and the pad character.
- *
- *  <p>TBD:  Work out some class loader issues involved in deserializing.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- * 
- **/
-
-class SerializableAdaptor implements ISqueezeAdaptor
-{
-    private static final String PREFIX = "O";
-
-    /**
-     *  The PAD character, appended to the end of the string to make things
-     *  line up.  In normal Base64, this is the character '='.
-     *
-     **/
-
-    private static final char PAD = '.';
-
-    /**
-     *  Representation for the 6-bit code 63, normally '+' in Base64.
-     *
-     **/
-
-    private static final char CH_62 = '-';
-
-    /**
-     *  Representation for the 6-bit code 64, normally '/' in Base64.
-     *
-     **/
-
-    private static final char CH_63 = '_';
-
-    public String squeeze(DataSqueezer squeezer, Object data) throws IOException
-    {
-        ByteArrayOutputStream bos = null;
-        GZIPOutputStream gos = null;
-        ObjectOutputStream oos = null;
-        byte[] byteData = null;
-
-        try
-        {
-            bos = new ByteArrayOutputStream();
-            gos = new GZIPOutputStream(bos);
-            oos = new ObjectOutputStream(gos);
-
-            oos.writeObject(data);
-            oos.close();
-        }
-        finally
-        {
-            close(oos);
-            close(gos);
-            close(bos);
-        }
-
-        byteData = bos.toByteArray();
-
-        StringBuffer encoded = new StringBuffer(2 * byteData.length);
-        char[] base64 = new char[4];
-
-        encoded.append(PREFIX);
-
-        for (int i = 0; i < byteData.length; i += 3)
-        {
-            encodeBlock(byteData, i, base64);
-            encoded.append(base64);
-        }
-
-        return encoded.toString();
-    }
-
-    private void close(OutputStream stream)
-    {
-        if (stream != null)
-        {
-            try
-            {
-                stream.close();
-            }
-            catch (IOException ex)
-            {
-                // Ignore.
-            }
-        }
-    }
-
-    private void close(InputStream stream)
-    {
-        if (stream != null)
-        {
-            try
-            {
-                stream.close();
-            }
-            catch (IOException ex)
-            {
-                // Ignore.
-            }
-        }
-    }
-    public Object unsqueeze(DataSqueezer squeezer, String string) throws IOException
-    {
-        ByteArrayInputStream bis = null;
-        GZIPInputStream gis = null;
-        ObjectInputStream ois = null;
-        byte[] byteData;
-
-        // Strip off the first character and decode the rest.
-
-        byteData = decode(string.substring(1));
-
-        try
-        {
-            bis = new ByteArrayInputStream(byteData);
-            gis = new GZIPInputStream(bis);
-            ois = new ResolvingObjectInputStream(squeezer.getResolver(), gis);
-
-            return ois.readObject();
-        }
-        catch (ClassNotFoundException ex)
-        {
-            // The message is the name of the class.
-
-            throw new IOException(
-                Tapestry.format("SerializableAdaptor.class-not-found", ex.getMessage()));
-        }
-        finally
-        {
-            close(ois);
-            close(gis);
-            close(bis);
-        }
-    }
-
-    public void register(DataSqueezer squeezer)
-    {
-        squeezer.register(PREFIX, Serializable.class, this);
-    }
-
-    private static void encodeBlock(byte[] raw, int offset, char[] base64) throws IOException
-    {
-        int block = 0;
-        int slack = raw.length - offset - 1;
-        int end = (slack >= 2) ? 2 : slack;
-
-        for (int i = 0; i <= end; i++)
-        {
-            byte b = raw[offset + i];
-            int neuter = (b < 0) ? b + 256 : b;
-            block += neuter << (8 * (2 - i));
-        }
-
-        for (int i = 0; i < 4; i++)
-        {
-            int sixbit = (block >>> (6 * (3 - i))) & 0x3f;
-            base64[i] = getChar(sixbit);
-        }
-
-        if (slack < 1)
-            base64[2] = PAD;
-
-        if (slack < 2)
-            base64[3] = PAD;
-    }
-
-    protected static char getChar(int sixBit) throws IOException
-    {
-        if (sixBit >= 0 && sixBit <= 25)
-            return (char) ('A' + sixBit);
-
-        if (sixBit >= 26 && sixBit <= 51)
-            return (char) ('a' + (sixBit - 26));
-
-        if (sixBit >= 52 && sixBit <= 61)
-            return (char) ('0' + (sixBit - 52));
-
-        if (sixBit == 62)
-            return CH_62;
-
-        if (sixBit == 63)
-            return CH_63;
-
-        throw new IOException(
-            Tapestry.format("SerializableAdaptor.unable-to-convert", Integer.toString(sixBit)));
-    }
-
-    public static byte[] decode(String string) throws IOException
-    {
-        int pad = 0;
-        char[] base64 = string.toCharArray();
-
-        for (int i = base64.length - 1; base64[i] == PAD; i--)
-            pad++;
-
-        int length = base64.length * 6 / 8 - pad;
-        byte[] raw = new byte[length];
-        int rawIndex = 0;
-
-        for (int i = 0; i < base64.length; i += 4)
-        {
-            int block =
-                (getValue(base64[i]) << 18)
-                    + (getValue(base64[i + 1]) << 12)
-                    + (getValue(base64[i + 2]) << 6)
-                    + (getValue(base64[i + 3]));
-
-            for (int j = 0; j < 3 && rawIndex + j < raw.length; j++)
-                raw[rawIndex + j] = (byte) ((block >> (8 * (2 - j))) & 0xff);
-
-            rawIndex += 3;
-        }
-
-        return raw;
-    }
-
-    private static int getValue(char c) throws IOException
-    {
-        if (c >= 'A' && c <= 'Z')
-            return c - 'A';
-
-        if (c >= 'a' && c <= 'z')
-            return c - 'a' + 26;
-
-        if (c >= '0' && c <= '9')
-            return c - '0' + 52;
-
-        if (c == CH_62)
-            return 62;
-
-        if (c == CH_63)
-            return 63;
-
-        // Pad character
-
-        if (c == PAD)
-            return 0;
-
-        throw new IOException(
-            Tapestry.format(
-                "SerializableAdaptor.unable-to-interpret-char",
-                new String(new char[] { c })));
-    }
-
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/util/io/ShortAdaptor.java b/3.0.4/framework/src/org/apache/tapestry/util/io/ShortAdaptor.java
deleted file mode 100644
index 8f7a1b4..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/util/io/ShortAdaptor.java
+++ /dev/null
@@ -1,61 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.util.io;
-
-/**
- *  Squeezes a {@link Short}.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *
- **/
-
-class ShortAdaptor implements ISqueezeAdaptor
-{
-    private static final String PREFIX = "s";
-
-    /**
-     *  Registers using the prefix 's'.
-     *
-     **/
-
-    public void register(DataSqueezer squeezer)
-    {
-        squeezer.register(PREFIX, Short.class, this);
-    }
-
-    /**
-     *  Invoked <code>toString()</code> on data (which is type {@link Short}),
-     *  and prefixs the result.
-     *
-     **/
-
-    public String squeeze(DataSqueezer squeezer, Object data)
-    {
-        return PREFIX + data.toString();
-    }
-
-    /**
-     *  Constructs a {@link Short} from the string, after stripping
-     *  the prefix.
-     *
-     **/
-
-    public Object unsqueeze(DataSqueezer squeezer, String string)
-    {
-        return new Short(string.substring(1));
-    }
-
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/util/io/StringAdaptor.java b/3.0.4/framework/src/org/apache/tapestry/util/io/StringAdaptor.java
deleted file mode 100644
index c7e6f03..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/util/io/StringAdaptor.java
+++ /dev/null
@@ -1,55 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.util.io;
-
-/**
- *  Squeezes a String (which is pretty simple, most of the time).
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *
- **/
-
-class StringAdaptor implements ISqueezeAdaptor
-{
-    private static final String PREFIX = "S";
-
-    public void register(DataSqueezer squeezer)
-    {
-        squeezer.register(PREFIX, String.class, this);
-    }
-
-    public String squeeze(DataSqueezer squeezer, Object data)
-    {
-        String string = (String) data;
-
-        return PREFIX + string;
-    }
-
-    /**
-     *  Strips the prefix from the string.  This method is only
-     *  invoked by the {@link DataSqueezer} if the string leads
-     *  with its normal prefix (an 'S').
-     *
-     **/
-
-    public Object unsqueeze(DataSqueezer squeezer, String string)
-    {
-        if (string.length() == 1)
-            return "";
-
-        return string.substring(1);
-    }
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/util/io/package.html b/3.0.4/framework/src/org/apache/tapestry/util/io/package.html
deleted file mode 100644
index 2f4e8be..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/util/io/package.html
+++ /dev/null
@@ -1,22 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<!-- $Id$ -->
-<html>
-<head>
-<title>Tapestry: Web Application Framework</title>
-</head>
-
-
-<body>
-
-<p>Some interesting I/O classes.  {@link org.apache.tapestry.util.io.BinaryDumpOutputStream}
-formats a stream of bytes into a human readable presentation, much like
-the Unix command line tool <code>od</code>.
-
-<p>{@link org.apache.tapestry.util.io.DataSqueezer} is used to squeeze and unsqueeze 
-basic scalar types, Strings and serializable objects into a String format.  The eventual
-purpose is to safely encode information into URLs or as HTTP Cookies.
-
-@author Howard Lewis Ship <a href="mailto:hlship@apache.org">hlship@apache.org</a>
-
-</body>
-</html>
diff --git a/3.0.4/framework/src/org/apache/tapestry/util/package.html b/3.0.4/framework/src/org/apache/tapestry/util/package.html
deleted file mode 100644
index a533dac..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/util/package.html
+++ /dev/null
@@ -1,15 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<!-- $Id$ -->
-<html>
-<head>
-<title>Tapestry: Web Application Framework</title>
-</head>
-
-<body>
-
-<p>A general set of resuable classes and utilities for creating Internet and XML applications.
-
-@author Howard Lewis Ship <a href="mailto:hlship@apache.org">hlship@apache.org</a>
-
-</body>
-</html>
diff --git a/3.0.4/framework/src/org/apache/tapestry/util/pool/DefaultPoolableAdaptor.java b/3.0.4/framework/src/org/apache/tapestry/util/pool/DefaultPoolableAdaptor.java
deleted file mode 100644
index 66ee7c4..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/util/pool/DefaultPoolableAdaptor.java
+++ /dev/null
@@ -1,44 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.util.pool;
-
-/**
- *  Implementation for objects that implement
- *  the {@link org.apache.tapestry.util.pool.IPoolable} interface.
- * 
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 3.0
- *
- **/
-
-public class DefaultPoolableAdaptor implements IPoolableAdaptor
-{
-
-    public void resetForPool(Object object)
-    {
-        IPoolable poolable = (IPoolable)object;
-        
-        poolable.resetForPool();
-    }
-
-    public void discardFromPool(Object object)
-    {
-        IPoolable poolable = (IPoolable)object;
-        
-        poolable.discardFromPool();        
-    }
-
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/util/pool/IPoolable.java b/3.0.4/framework/src/org/apache/tapestry/util/pool/IPoolable.java
deleted file mode 100644
index cfd1da4..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/util/pool/IPoolable.java
+++ /dev/null
@@ -1,48 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.util.pool;
-
-/**
- *  Marks an object as being aware that is to be stored into a {@link Pool}.
- *  This gives the object a last chance to reset any state.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 1.0.4
- * 
- **/
-
-public interface IPoolable
-{
-    /**
-     *  Invoked by a {@link org.apache.tapestry.util.pool.Pool} 
-     *  just before the object is added to the pool.
-     *  The object should return its state to how it was when freshly instantiated
-     *  (or at least, its state should be indistinguishable from a freshly
-     *  instantiated instance).
-     *
-     **/
-
-    public void resetForPool();
-    
-    /**
-     *  Invoked just as a Pool discards an object (for lack of use).
-     *  This allows a last chance to perform final cleanup
-     *  on the object while it is still referencable.
-     * 
-     **/
-    
-    public void discardFromPool();
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/util/pool/IPoolableAdaptor.java b/3.0.4/framework/src/org/apache/tapestry/util/pool/IPoolableAdaptor.java
deleted file mode 100644
index e93ee70..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/util/pool/IPoolableAdaptor.java
+++ /dev/null
@@ -1,44 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.util.pool;
-
-/**
- *  Defines methods that define an adaptor to provide
- *  {@link org.apache.tapestry.util.pool.IPoolable}
- *  type behavior to arbitrary objects.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 3.0
- *
- **/
-
-public interface IPoolableAdaptor
-{
-    /**
-     *  Invoked just as an object is returned to the pool; this
-     *  allows it to reset any state back to newly initialized.
-     * 
-     **/
-    
-    public void resetForPool(Object object);
-    
-    /**
-     *  Invoked when a pooled object is discarded from the pool.
-     * 
-     **/
-    
-    public void discardFromPool(Object object);
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/util/pool/NullPoolableAdaptor.java b/3.0.4/framework/src/org/apache/tapestry/util/pool/NullPoolableAdaptor.java
deleted file mode 100644
index ae439e2..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/util/pool/NullPoolableAdaptor.java
+++ /dev/null
@@ -1,38 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.util.pool;
-
-/**
- *  A default, empty implementation, for objects that
- *  have no special behavior related to being pooled.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 3.0
- *
- **/
-
-public class NullPoolableAdaptor implements IPoolableAdaptor
-{
-
-    public void resetForPool(Object object)
-    {
-    }
-
-    public void discardFromPool(Object object)
-    {
-    }
-
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/util/pool/Pool.java b/3.0.4/framework/src/org/apache/tapestry/util/pool/Pool.java
deleted file mode 100644
index 7d96ea2..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/util/pool/Pool.java
+++ /dev/null
@@ -1,516 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.util.pool;
-
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Map;
-
-import org.apache.commons.lang.builder.ToStringBuilder;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.tapestry.ApplicationRuntimeException;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.util.AdaptorRegistry;
-import org.apache.tapestry.util.ICleanable;
-import org.apache.tapestry.util.IRenderDescription;
-import org.apache.tapestry.util.JanitorThread;
-
-/**
- *  A Pool is used to pool instances of a useful class.  It uses
- *  keys, much like a {@link Map}, to identify a list of pooled objects.
- *  Retrieving an object from the Pool atomically removes it from the
- *  pool.  It can then be stored again later.  In this way, a single
- *  Pool instance can manage many different types of pooled objects,
- *  filed under different keys.
- * 
- *  <p>
- *  Unlike traditional Pools, this class does not create new instances of
- *  the objects it stores (with the exception of simple Java Beans,
- *  via {@link #retrieve(Class)}.  The usage pattern is to retrieve an instance
- *  from the Pool, and if the instance is null, create a new instance.
- *
- *  <p>The implementation of Pool is threadsafe.
- *
- *  <p>Pool implements {@link ICleanable}, with a goal of
- *  only keeping pooled objects that have been needed within
- *  a recent time frame.  A generational system is used, where each
- *  pooled object is assigned a generation count.  {@link #executeCleanup}
- *  discards objects whose generation count is too old (outside of a
- *  {@link #getWindow() window}).
- * 
- *  <p>
- *  Objects in the pool can receive two notifications: one notification
- *  when they are {@link #store(Object, Object) stored} into the pool,
- *  and one when they are discarded from the pool.
- * 
- *  <p>
- *  Classes that implement {@link org.apache.tapestry.util.pool.IPoolable}
- *  receive notifications directly, as per the two methods
- *  of that interface.
- * 
- *  <p>
- *  Alternately, an adaptor for the other classes can be
- *  registerered (using {@link #registerAdaptor(Class, IPoolableAdaptor)}.
- *  The adaptor will be invoked to handle the notification when a 
- *  pooled object is stored or discarded.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *
- **/
-
-public class Pool implements ICleanable, IRenderDescription
-{
-    private static final Log LOG = LogFactory.getLog(Pool.class);
-
-    private AdaptorRegistry _adaptors = new AdaptorRegistry();
-
-    /**
-     *  The generation, used to cull unused pooled items.
-     *
-     *  @since 1.0.5
-     **/
-
-    private int _generation;
-
-    /**
-     *  The generation window, used to identify which
-     *  items should be culled.
-     *
-     *  @since 1.0.5
-     **/
-
-    private int _window = 10;
-
-    /**
-     *  The number of objects pooled.
-     *
-     **/
-
-    private int _pooledCount;
-
-    /**
-     *  A map of PoolLists, keyed on an arbitrary object.
-     *
-     **/
-
-    private Map _map;
-
-    /**
-     *  Creates a new Pool using the default map size.  Creation of the map is deferred.
-     *
-     *
-     **/
-
-    public Pool()
-    {
-        this(true);
-    }
-
-    /**
-     *  Creates a new Pool using the specified map size.  The map is created immediately.
-     *
-     *  @deprecated Use {@link #Pool()} instead.
-     * 
-     **/
-
-    public Pool(int mapSize)
-    {
-        this(mapSize, true);
-    }
-
-    /**
-     *  @param useSharedJanitor if true, then the Pool is added to
-     *  the {@link JanitorThread#getSharedJanitorThread() shared janitor}.
-     *
-     *  @since 1.0.5
-     *
-     **/
-
-    public Pool(boolean useSharedJanitor)
-    {
-        if (useSharedJanitor)
-            JanitorThread.getSharedJanitorThread().add(this);
-
-        registerAdaptors();
-    }
-
-    /**
-     *  Standard constructor.
-     *
-     *  @param mapSize initial size of the map.
-     *  @param useSharedJanitor if true, then the Pool is added to
-     *  the {@link JanitorThread#getSharedJanitorThread() shared janitor}.
-     *
-     *  @since 1.0.5
-     *  @deprecated Use {@link #Pool(boolean)} instead.
-     * 
-     **/
-
-    public Pool(int mapSize, boolean useSharedJanitor)
-    {
-        this(useSharedJanitor);
-
-        _map = new HashMap(mapSize);
-    }
-
-    /**
-     *  Returns the window used to cull pooled objects during a cleanup.
-     *  The default is 10, which works out to about five minutes with
-     *  a standard janitor (on a 30 second cycle).
-     *
-     *  @since 1.0.5
-     *
-     **/
-
-    public int getWindow()
-    {
-        return _window;
-    }
-
-    /**
-     *  Sets the window, or number of generations that an object may stay
-     *  in the pool before being culled.
-     *
-     *  @throws IllegalArgumentException if value is less than 1.
-     *
-     *  @since 1.0.5
-     **/
-
-    public void setWindow(int value)
-    {
-        if (value < 1)
-            throw new IllegalArgumentException("Pool window may not be less than 1.");
-
-        _window = value;
-    }
-
-    /**
-     *  Returns a previously pooled object with the given key, or null if no
-     *  such object exists.  Getting an object from a Pool removes it from the Pool,
-     *  but it can later be re-added with {@link #store(Object,Object)}.
-     *
-     **/
-
-    public synchronized Object retrieve(Object key)
-    {
-        Object result = null;
-
-        if (_map == null)
-            _map = new HashMap();
-
-        PoolList list = (PoolList) _map.get(key);
-
-        if (list != null)
-            result = list.retrieve();
-
-        if (result != null)
-            _pooledCount--;
-
-        if (LOG.isDebugEnabled())
-            LOG.debug("Retrieved " + result + " from " + key);
-
-        return result;
-    }
-
-    /**
-     *  Retrieves an instance of the named class.  If no pooled
-     *  instance is available, a new instance is created
-     *  (using the no arguments constructor).  Objects are
-     *  pooled using their actual class as a key.
-     * 
-     *  <p>
-     *  However, don't be fooled by false economies.  Unless
-     *  an object is very expensive to create, pooling is 
-     *  <em>more</em> expensive than simply instantiating temporary
-     *  instances and letting the garbage collector deal with it
-     *  (this is counter intuitive, but true).  For example,
-     *  this method was originally created to allow pooling
-     *  of {@link StringBuffer}, but testing showed that it
-     *  was a net defecit.
-     * 
-     **/
-
-    public Object retrieve(Class objectClass)
-    {
-        Object result = retrieve((Object) objectClass);
-
-        if (result == null)
-        {
-            if (LOG.isDebugEnabled())
-                LOG.debug("No instance of " + objectClass.getName() + " is available, instantiating one.");
-
-            try
-            {
-                result = objectClass.newInstance();
-            }
-            catch (Exception ex)
-            {
-                throw new ApplicationRuntimeException(
-                    Tapestry.format("Pool.unable-to-instantiate-instance", objectClass.getName()),
-                    ex);
-            }
-        }
-
-        return result;
-    }
-
-    /**
-     *  Stores an object using its class as a key.
-     * 
-     *  @see #retrieve(Class)
-     * 
-     **/
-
-    public void store(Object object)
-    {
-        store(object.getClass(), object);
-    }
-
-    /**
-     *  Stores an object in the pool for later retrieval, resetting
-     *  the object for storage within the pool.
-     *
-     **/
-
-    public synchronized void store(Object key, Object object)
-    {
-        getAdaptor(object).resetForPool(object);
-
-        if (_map == null)
-            _map = new HashMap();
-
-        PoolList list = (PoolList) _map.get(key);
-
-        if (list == null)
-        {
-            list = new PoolList(this);
-            _map.put(key, list);
-        }
-
-        int count = list.store(_generation, object);
-
-        _pooledCount++;
-
-        if (LOG.isDebugEnabled())
-            LOG.debug("Stored " + object + " into " + key + " (" + count + " pooled)");
-    }
-
-    /**
-     *  Removes all previously pooled objects from this Pool.
-     *
-     **/
-
-    public synchronized void clear()
-    {
-        if (_map != null)
-        {
-            Iterator i = _map.values().iterator();
-
-            while (i.hasNext())
-            {
-                PoolList list = (PoolList) i.next();
-
-                list.discardAll();
-            }
-
-            _map.clear();
-        }
-
-        _pooledCount = 0;
-
-        if (LOG.isDebugEnabled())
-            LOG.debug("Cleared");
-    }
-
-    /**
-     *  Returns the number of object pooled, the sum of the number
-     *  of objects in pooled under each key. 
-     *
-     *  @since 1.0.2
-     **/
-
-    public synchronized int getPooledCount()
-    {
-        return _pooledCount;
-    }
-
-    /**
-     *  Returns the number of keys within the pool.
-     *
-     *  @since 1.0.2
-     **/
-
-    public synchronized int getKeyCount()
-    {
-        if (_map == null)
-            return 0;
-
-        return _map.size();
-    }
-
-    /**
-     *  Peforms culling of unneeded pooled objects.
-     *
-     *  @since 1.0.5
-     *
-     **/
-
-    public synchronized void executeCleanup()
-    {
-        if (_map == null)
-            return;
-
-        if (LOG.isDebugEnabled())
-            LOG.debug("Executing cleanup of " + this);
-
-        _generation++;
-
-        int oldestGeneration = _generation - _window;
-
-        if (oldestGeneration < 0)
-            return;
-
-        int oldCount = _pooledCount;
-        int culledKeys = 0;
-
-        // During the cleanup, we keep the entire instance synchronized
-        // (meaning other threads will block when trying to store
-        // or retrieved pooled objects).  Fortunately, this
-        // should be pretty darn quick!
-
-        int newCount = 0;
-
-        Iterator i = _map.entrySet().iterator();
-        while (i.hasNext())
-        {
-            Map.Entry e = (Map.Entry) i.next();
-
-            PoolList list = (PoolList) e.getValue();
-
-            int count = list.cleanup(oldestGeneration);
-
-            if (count == 0)
-            {
-                i.remove();
-                culledKeys++;
-            }
-            else
-                newCount += count;
-        }
-
-        _pooledCount = newCount;
-
-        if (LOG.isDebugEnabled())
-            LOG.debug("Culled " + (oldCount - _pooledCount) + " pooled objects and " + culledKeys + " keys.");
-    }
-
-    public synchronized String toString()
-    {
-        ToStringBuilder builder = new ToStringBuilder(this);
-
-        builder.append("generation", _generation);
-        builder.append("pooledCount", _pooledCount);
-
-        return builder.toString();
-    }
-
-    /** @since 1.0.6 **/
-
-    public synchronized void renderDescription(IMarkupWriter writer)
-    {
-        writer.begin("table");
-        writer.attribute("border", "1");
-        writer.println();
-
-        writer.begin("tr");
-        writer.begin("th");
-        writer.attribute("colspan", "2");
-        writer.print(toString());
-        writer.end();
-        writer.end();
-        writer.println();
-
-        if (_map != null)
-        {
-            Iterator i = _map.entrySet().iterator();
-
-            while (i.hasNext())
-            {
-                Map.Entry entry = (Map.Entry) i.next();
-                PoolList list = (PoolList) entry.getValue();
-
-                writer.begin("tr");
-                writer.begin("td");
-                writer.print(entry.getKey().toString());
-                writer.end();
-                writer.begin("td");
-                writer.print(list.getPooledCount());
-                writer.end();
-                writer.end();
-
-                writer.println();
-            }
-        }
-    }
-
-    /**
-     *  Invoked from the constructor to register the default set of
-     *  {@link org.apache.tapestry.util.pool.IPoolableAdaptor}.  Subclasses
-     *  may override this to register a different set.
-     * 
-     *  <p>
-     *  Registers:
-     *  <ul>
-     *  <li>{@link NullPoolableAdaptor} for class Object
-     *  <li>{@link DefaultPoolableAdaptor} for interface {@link IPoolable}
-     *  <li>{@link StringBufferAdaptor} for {@link StringBuffer}
-     *  </ul>
-     * 
-     *  @since 3.0
-     * 
-     **/
-
-    protected void registerAdaptors()
-    {
-        registerAdaptor(Object.class, new NullPoolableAdaptor());
-        registerAdaptor(IPoolable.class, new DefaultPoolableAdaptor());
-        registerAdaptor(StringBuffer.class, new StringBufferAdaptor());
-    }
-
-    /**
-     *  Registers an adaptor for a particular class (or interface).
-     * 
-     *  @since 3.0
-     * 
-     **/
-
-    public void registerAdaptor(Class registrationClass, IPoolableAdaptor adaptor)
-    {
-        _adaptors.register(registrationClass, adaptor);
-    }
-
-    /**
-     *  Returns an adaptor appropriate to the object.
-     * 
-     **/
-
-    public IPoolableAdaptor getAdaptor(Object object)
-    {
-        return (IPoolableAdaptor) _adaptors.getAdaptor(object.getClass());
-    }
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/util/pool/PoolList.java b/3.0.4/framework/src/org/apache/tapestry/util/pool/PoolList.java
deleted file mode 100644
index 26a50e3..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/util/pool/PoolList.java
+++ /dev/null
@@ -1,245 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.util.pool;
-
-/**
- *  A wrapper around a list of objects for a given key in a {@link Pool}.
- *  The current implementation of this is FIFO.  This class is closely
- *  tied to {@link Pool}, which controls synchronization for it.
- *
- *  <p>This class, and {@link Pool}, were heavily revised in 1.0.5
- *  to support generational cleaning.  The PoolList acts like a first-in
- *  first-out queue and each pooled object is tagged with a "generation
- *  count", provided by the {@link Pool}. The generation count is
- *  incremented periodically.  This allows us to track, roughly,
- *  how often a pooled object has been accessed; unused objects will
- *  be buried with relatively low generation counts.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *
- **/
-
-class PoolList
-{
-    /** @since 3.0 **/
-
-    private Pool _pool;
-
-    /**
-     *  Linked list of pooled objects.
-     *
-     * @since 1.0.5
-     **/
-
-    private Entry _first;
-
-    /**
-     *  Linked list of "spare" Entries, ready to be re-used.
-     *
-     * @since 1.0.5
-     **/
-
-    private Entry _spare;
-
-    /**
-     *  Overall count of items pooled.
-     *
-     **/
-
-    private int _count;
-
-    /**
-     * A simple linked-list entry for items stored in the PoolList.
-     *
-     * @since 1.0.5
-     * 
-     **/
-
-    private static class Entry
-    {
-        int generation;
-        Object pooled;
-        Entry next;
-    }
-
-    /**
-     *  @since 3.0
-     * 
-     **/
-    
-    PoolList(Pool pool)
-    {
-        _pool = pool;
-    }
-
-    /**
-     *  Returns the number of pooled objects currently stored.
-     *
-     *  @since 1.0.5
-     **/
-
-    public int getPooledCount()
-    {
-        return _count;
-    }
-
-    /**
-     *  Returns an object previously stored into the list, or null if the list
-     *  is empty.  The returned object is removed from the list.
-     *
-     **/
-
-    public Object retrieve()
-    {
-        if (_count == 0)
-            return null;
-
-        _count--;
-
-        Entry e = _first;
-        Object result = e.pooled;
-
-        // Okay, store e into the list of spare entries.
-
-        _first = e.next;
-
-        e.next = _spare;
-        _spare = e;
-        e.generation = 0;
-        e.pooled = null;
-
-        return result;
-    }
-
-    /**
-     *  Adds the object to this PoolList.  An arbitrary number of objects can be
-     *  stored.  The objects can later be retrieved using {@link #get()}.
-     *  The list requires that generation never decrease.  On each subsequent
-     *  invocation, it should be the same as, or greater, than the previous value.
-     *
-     *  @return The number of objects stored in the list (after adding the new object).
-     **/
-
-    public int store(int generation, Object object)
-    {
-        Entry e;
-
-        if (_spare == null)
-        {
-            e = new Entry();
-        }
-        else
-        {
-            e = _spare;
-            _spare = _spare.next;
-        }
-
-        e.generation = generation;
-        e.pooled = object;
-        e.next = _first;
-        _first = e;
-
-        return ++_count;
-    }
-
-    /**
-     *  Invoked to cleanup the list, freeing unneeded objects.
-     *
-     * @param generation pooled objects stored in this generation or
-     * earlier are released.
-     *
-     * @since 1.0.5
-     **/
-
-    public int cleanup(int generation)
-    {
-        _spare = null;
-
-        _count = 0;
-
-        Entry prev = null;
-
-        // Walk through the list.  They'll be sorted by generation.
-
-        Entry e = _first;
-        while (true)
-        {
-            if (e == null)
-                break;
-
-            // If found a too-old entry then we want to
-            // delete it.
-
-            if (e.generation <= generation)
-            {
-                Object pooled = e.pooled;
-
-                // Notify the object that it is being dropped
-                // through the cracks!
-
-                _pool.getAdaptor(pooled).discardFromPool(pooled);
-
-                // Set the next pointer of the previous node to null.
-                // If the very first node inspected was too old,
-                // set the first pointer to null.
-
-                if (prev == null)
-                    _first = null;
-                else
-                    prev.next = null;
-            }
-            else
-                _count++;
-
-            prev = e;
-            e = e.next;
-        }
-
-        return _count;
-    }
-
-    public String toString()
-    {
-        return "PoolList[" + _count + "]";
-    }
-
-    /** 
-     *  Much like {@link #cleanup(int)}, but discards all
-     *  pooled objects.
-     * 
-     *  @since 3.0 
-     * 
-     **/
-
-    void discardAll()
-    {
-        Entry e = _first;
-
-        while (e != null)
-        {
-            Object pooled = e.pooled;
-
-            _pool.getAdaptor(pooled).discardFromPool(pooled);
-
-            e = e.next;
-        }
-
-        _first = null;
-        _spare = null;
-        _count = 0;
-
-    }
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/util/pool/StringBufferAdaptor.java b/3.0.4/framework/src/org/apache/tapestry/util/pool/StringBufferAdaptor.java
deleted file mode 100644
index 61a8754..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/util/pool/StringBufferAdaptor.java
+++ /dev/null
@@ -1,43 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.util.pool;
-
-/**
- *  Adaptor for {@link java.lang.StringBuffer}, that clears
- *  the buffer as it is returned to the pool.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 3.0
- *
- **/
-
-public class StringBufferAdaptor extends NullPoolableAdaptor
-{
-
-    /**
-     *  Sets the length of the {@link java.lang.StringBuffer}
-     *  to zero.
-     * 
-     **/
-    
-    public void resetForPool(Object object)
-    {
-        StringBuffer buffer = (StringBuffer)object;
-        
-        buffer.setLength(0);
-    }
-
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/util/pool/package.html b/3.0.4/framework/src/org/apache/tapestry/util/pool/package.html
deleted file mode 100644
index 1cde499..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/util/pool/package.html
+++ /dev/null
@@ -1,18 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<!-- $Id$ -->
-<html>
-<head>
-<title>Tapestry: Web Application Framework</title>
-</head>
-
-<body>
-
-<p>Classes for managing a pool of reusable objects.  Rather than creating
-expensive objects as needed, they are obtained from a
-{@link org.apache.tapestry.util.pool.Pool}.  Instead of discarding them, they
-are returned to the Pool.   The Pool class is threadsafe and reasonably efficient.
-
-@author Howard Lewis Ship <a href="mailto:hlship@apache.org">hlship@apache.org</a>
-
-</body>
-</html>
diff --git a/3.0.4/framework/src/org/apache/tapestry/util/prop/OgnlUtils.java b/3.0.4/framework/src/org/apache/tapestry/util/prop/OgnlUtils.java
deleted file mode 100644
index c6852fc..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/util/prop/OgnlUtils.java
+++ /dev/null
@@ -1,161 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.util.prop;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import ognl.ClassResolver;
-import ognl.Ognl;
-
-import org.apache.tapestry.ApplicationRuntimeException;
-import org.apache.tapestry.Tapestry;
-
-/**
- *  Utilities wrappers around <a href="http://www.ognl.org">OGNL</a>.
- * 
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 2.2
- * 
- **/
-
-public class OgnlUtils
-{
-    private static final Map _cache = new HashMap();
-
-    private OgnlUtils()
-    {
-    }
-
-    /**
-     *  Gets a parsed OGNL expression from the input string.
-     * 
-     *  @throws ApplicationRuntimeException if the expression can not be parsed.
-     * 
-     **/
-
-    public static synchronized Object getParsedExpression(String expression)
-    {
-        Object result = _cache.get(expression);
-
-        if (result == null)
-        {
-            try
-            {
-                result = Ognl.parseExpression(expression);
-            }
-            catch (Exception ex)
-            {
-                throw new ApplicationRuntimeException(
-                    Tapestry.format("OgnlUtils.unable-to-parse-expression", expression),
-                    ex);
-            }
-
-            _cache.put(expression, result);
-        }
-
-        return result;
-    }
-
-    /**
-     *  Parses and caches the expression and uses it to update
-     *  the target object with the provided value.
-     * 
-     *  @throws ApplicationRuntimeException if the expression
-     *  can not be parsed, or the target can not be updated.
-     * 
-     **/
-
-    public static void set(String expression, ClassResolver resolver, Object target, Object value)
-    {
-        set(getParsedExpression(expression), resolver, target, value);
-    }
-
-    /** 
-     *  Updates the target object with the provided value.
-     * 
-     *  @param expression a parsed OGNL expression
-     *  @throws ApplicationRuntimeException if the target can not be updated.
-     * 
-     **/
-
-    public static void set(Object expression, ClassResolver resolver, Object target, Object value)
-    {
-        try
-        {
-            Map context = Ognl.createDefaultContext(target, resolver);
-
-            Ognl.setValue(expression, context, target, value);
-        }
-        catch (Exception ex)
-        {
-            throw new ApplicationRuntimeException(
-                Tapestry.format(
-                    "OgnlUtils.unable-to-update-expression",
-                    "<parsed expression>",
-                    target,
-                    value),
-                ex);
-        }
-    }
-
-    /**
-     *   Returns the value of the expression evaluated against
-     *   the object.
-     * 
-     *   @param expression a parsed OGNL expression
-     *   @param object the root object
-     * 
-     *   @throws ApplicationRuntimeException
-     *   if the value can not be obtained from the object.
-     * 
-     **/
-
-    public static Object get(Object expression, ClassResolver resolver, Object object)
-    {
-        try
-        {
-            Map context = Ognl.createDefaultContext(object, resolver);
-
-            return Ognl.getValue(expression, context, object);
-        }
-        catch (Exception ex)
-        {
-            throw new ApplicationRuntimeException(
-                Tapestry.format(
-                    "OgnlUtils.unable-to-read-expression",
-                    "<parsed expression>",
-                    object),
-                ex);
-        }
-    }
-
-    /**
-     *   Returns the value of the expression evaluated against
-     *   the object.
-     * 
-     * 
-     *   @throws ApplicationRuntimeException if the
-     *   expression can not be parsed, or the value
-     *   not obtained from the object.
-     **/
-
-    public static Object get(String expression, ClassResolver resolver, Object object)
-    {
-        return get(getParsedExpression(expression), resolver, object);
-    }
-
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/util/prop/PropertyFinder.java b/3.0.4/framework/src/org/apache/tapestry/util/prop/PropertyFinder.java
deleted file mode 100644
index 75977c3..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/util/prop/PropertyFinder.java
+++ /dev/null
@@ -1,104 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.util.prop;
-
-import java.beans.BeanInfo;
-import java.beans.IntrospectionException;
-import java.beans.Introspector;
-import java.beans.PropertyDescriptor;
-import java.util.HashMap;
-import java.util.Map;
-
-import org.apache.tapestry.ApplicationRuntimeException;
-import org.apache.tapestry.Tapestry;
-
-/**
- *  
- *  Uses {@link java.beans.Introspector} to get bean information
- *  and analyze properties for those beans.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 2.2
- *
- **/
-
-public class PropertyFinder
-{
-    /**
-     *  Keyed on bean class value is also a Map.  Inner Map is
-     *  keyed on property name, value is a
-     *  {@link PropertyInfo}.
-     * 
-     **/
-
-    private static Map _cache = new HashMap();
-
-    /**
-     *  Finds the {@link PropertyInfo} for the specified class and
-     *  property.  Returns null if the class does not implement 
-     *  such a property.
-     * 
-     **/
-    
-    public synchronized static PropertyInfo getPropertyInfo(Class beanClass, String propertyName)
-    {
-        Map beanClassMap = (Map) _cache.get(beanClass);
-
-        if (beanClassMap == null)
-        {
-            beanClassMap = buildBeanClassMap(beanClass);
-
-            _cache.put(beanClass, beanClassMap);
-        }
-
-        return (PropertyInfo) beanClassMap.get(propertyName);
-    }
-
-    private static Map buildBeanClassMap(Class beanClass)
-    {
-        Map result = new HashMap();
-        BeanInfo bi = null;
-
-        try
-        {
-            bi = Introspector.getBeanInfo(beanClass);
-        }
-        catch (IntrospectionException ex)
-        {
-            throw new ApplicationRuntimeException(
-                Tapestry.format("PropertyFinder.unable-to-introspect-class", beanClass.getName()),
-                ex);
-        }
-
-        PropertyDescriptor[] pd = bi.getPropertyDescriptors();
-
-        for (int i = 0; i < pd.length; i++)
-        {
-            PropertyDescriptor d = pd[i];
-
-            PropertyInfo info =
-                new PropertyInfo(
-                    d.getName(),
-                    d.getPropertyType(),
-                    d.getReadMethod() != null,
-                    d.getWriteMethod() != null);
-
-            result.put(d.getName(), info);
-        }
-
-        return result;
-    }
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/util/prop/PropertyInfo.java b/3.0.4/framework/src/org/apache/tapestry/util/prop/PropertyInfo.java
deleted file mode 100644
index 3fe2ad5..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/util/prop/PropertyInfo.java
+++ /dev/null
@@ -1,68 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.util.prop;
-
-/**
- *  Used by {@link org.apache.tapestry.util.prop.PropertyFinder}
- *  to identify information about a property. 
- * 
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 2.2
- *
- **/
-
-public class PropertyInfo
-{
-    private String _name;
-    private Class _type;
-    private boolean _read;
-    private boolean _write;
-    
-    PropertyInfo(String name, Class type, boolean read, boolean write)
-    {
-        _name = name;
-        _type = type;
-        _read = read;
-        _write = write;
-    }
-    
-    public String getName()
-    {
-        return _name;
-    }
-
-    public Class getType()
-    {
-        return _type;
-    }
-
-    public boolean isRead()
-    {
-        return _read;
-    }
-
-    public boolean isWrite()
-    {
-        return _write;
-    }
-    
-    public boolean isReadWrite()
-    {
-        return _read && _write;
-    }
-
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/util/prop/package.html b/3.0.4/framework/src/org/apache/tapestry/util/prop/package.html
deleted file mode 100644
index 1d864ac..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/util/prop/package.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<!-- $Id$ -->
-<html>
-<head>
-<title>Tapestry: Web Application Framework</title>
-</head>
-
-
-<body>
-
-<p>Classes for operating on Java Beans as collections of named properties.
-Prior to release 2.2, there was much more here, but with 2.2
-Tapestry switch to use the <a href="http://www.ognl.org">Object Graph
-Navigation Library</a> which is much more powerful.
-
-@author Howard Lewis Ship <a href="mailto:hlship@apache.org">hlship@apache.org</a>
-
-</body>
-</html>
diff --git a/3.0.4/framework/src/org/apache/tapestry/util/xml/BaseRule.java b/3.0.4/framework/src/org/apache/tapestry/util/xml/BaseRule.java
deleted file mode 100644
index e6d766a..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/util/xml/BaseRule.java
+++ /dev/null
@@ -1,63 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.util.xml;
-
-import org.apache.tapestry.Tapestry;
-import org.xml.sax.Attributes;
-
-/**
- * Base implementation of {@link org.apache.tapestry.util.xml.IRule} that
- * does nothing.
- *
- * @author Howard Lewis Ship
- * @version $Id$
- * @since 3.0
- **/
-public class BaseRule implements IRule
-{
-	protected String getAttribute(Attributes attributes, String name)
-	{
-		int count = attributes.getLength();
-
-		for (int i = 0; i < count; i++)
-		{
-			String attributeName = attributes.getLocalName(i);
-        	
-			if (Tapestry.isBlank(attributeName))
-				attributeName = attributes.getQName(i);
-        	
-			if (attributeName.equals(name))
-				return attributes.getValue(i);
-		}
-
-		return null;
-	}
-
-    public void startElement(RuleDirectedParser parser, Attributes attributes)
-    {
-
-    }
-
-    public void endElement(RuleDirectedParser parser)
-    {
-
-    }
-
-    public void content(RuleDirectedParser parser, String content)
-    {
-
-    }
-
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/util/xml/DocumentParseException.java b/3.0.4/framework/src/org/apache/tapestry/util/xml/DocumentParseException.java
deleted file mode 100644
index c56043f..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/util/xml/DocumentParseException.java
+++ /dev/null
@@ -1,105 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.util.xml;
-
-import org.apache.tapestry.ApplicationRuntimeException;
-import org.apache.tapestry.ILocation;
-import org.apache.tapestry.IResourceLocation;
-import org.apache.tapestry.Location;
-import org.xml.sax.SAXParseException;
-
-/**
- *  Exception thrown if there is any kind of error parsing the
- *  an XML document. 
- *
- *  @see org.apache.tapestry.parse.SpecificationParser
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 0.2.10
- *
- **/
-
-public class DocumentParseException extends ApplicationRuntimeException
-{
-    private IResourceLocation _documentLocation;
-
-    public DocumentParseException(String message, Throwable rootCause)
-    {
-        this(message, null, null, rootCause);
-    }
-
-    public DocumentParseException(String message, IResourceLocation documentLocation)
-    {
-        this(message, documentLocation, null);
-    }
-
-    public DocumentParseException(
-        String message,
-        IResourceLocation documentLocation,
-        Throwable rootCause)
-    {
-        this(message, documentLocation, null, rootCause);
-    }
-
-    public DocumentParseException(
-        String message,
-        IResourceLocation documentLocation,
-        ILocation location,
-        Throwable rootCause)
-    {
-        super(message, null, location, rootCause);
-
-        _documentLocation = documentLocation;
-    }
-
-    public DocumentParseException(
-        String message,
-        IResourceLocation documentLocation,
-        SAXParseException rootCause)
-    {
-        this(
-            message,
-            documentLocation,
-            rootCause == null
-                || documentLocation == null
-                    ? null
-                    : new Location(
-                        documentLocation,
-                        rootCause.getLineNumber(),
-                        rootCause.getColumnNumber()),
-            rootCause);
-    }
-
-    public DocumentParseException(String message)
-    {
-        this(message, null, null, null);
-    }
-
-    public DocumentParseException(Throwable rootCause)
-    {
-        this(rootCause.getMessage(), rootCause);
-    }
-
-    public DocumentParseException(SAXParseException rootCause)
-    {
-        this(rootCause.getMessage(), (Throwable) rootCause);
-    }
-
-    public IResourceLocation getDocumentLocation()
-    {
-        return _documentLocation;
-    }
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/util/xml/IRule.java b/3.0.4/framework/src/org/apache/tapestry/util/xml/IRule.java
deleted file mode 100644
index dd0ea44..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/util/xml/IRule.java
+++ /dev/null
@@ -1,56 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.util.xml;
-
-import org.xml.sax.Attributes;
-
-/**
- * A rule that may be pushed onto the {@link org.apache.tapestry.util.xml.RuleDirectedParser}'s
- * rule stack.  A rule is associated with an XML element.  It is pushed onto the stack when the
- * open tag for the rule is encountered.  It is is popped off the stack after the end-tag is
- * encountered.  It is notified about any text it directly wraps around.
- * 
- * <p>Rules should be stateless, because a rule instance may appear multiple times in the
- * rule stack (if elements can be recusively nested).
- *
- * @author Howard Lewis Ship
- * @version $Id$
- * @since 3.0
- **/
-
-public interface IRule
-{
-	/**
-	 * Invoked just after the rule is pushed onto the rule stack.  Typically, a Rule will
-	 *  use the information to create a new object and push it onto the object stack.
-	 *  If the rule needs to know about the element (rather than the attributes), it
-	 *  may obtain the URI, localName and qName from the parser.
-	 * 
-	 */
-	public void startElement(RuleDirectedParser parser, Attributes attributes);
-	
-	/**
-	 * Invoked just after the rule is popped off the rule stack.
-	 */
-	public void endElement(RuleDirectedParser parser);
-	
-	
-	/**
-	 * Invoked when real content is found.  The parser is responsible for aggregating
-	 * all content provided by the underlying SAX parser into a single string.
-	 */
-	
-	public void content(RuleDirectedParser parser, String content);
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/util/xml/InvalidStringException.java b/3.0.4/framework/src/org/apache/tapestry/util/xml/InvalidStringException.java
deleted file mode 100644
index 429b793..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/util/xml/InvalidStringException.java
+++ /dev/null
@@ -1,56 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.util.xml;
-
-import org.apache.tapestry.ILocatable;
-import org.apache.tapestry.ILocation;
-import org.apache.tapestry.IResourceLocation;
-
-/**
- *  Exception thrown if there is any kind of error validating a string
- *  during document parsing
- *
- *  @author Geoffrey Longman
- *  @version $Id$
- *  @since 2.2
- *
- **/
-
-public class InvalidStringException extends DocumentParseException implements ILocatable
-{
-    private String _invalidString;
-
-    public InvalidStringException(
-        String message,
-        String invalidString,
-        IResourceLocation resourceLocation)
-    {
-        super(message, resourceLocation);
-
-        _invalidString = invalidString;
-    }
-
-    public InvalidStringException(String message, String invalidString, ILocation location)
-    {
-        super(message, location == null ? null : location.getResourceLocation(), location, null);
-
-        _invalidString = invalidString;
-    }
-
-    public String getInvalidString()
-    {
-        return _invalidString;
-    }
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/util/xml/RuleDirectedParser.java b/3.0.4/framework/src/org/apache/tapestry/util/xml/RuleDirectedParser.java
deleted file mode 100644
index 1b79172..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/util/xml/RuleDirectedParser.java
+++ /dev/null
@@ -1,584 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.util.xml;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import javax.xml.parsers.ParserConfigurationException;
-import javax.xml.parsers.SAXParser;
-import javax.xml.parsers.SAXParserFactory;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.tapestry.ApplicationRuntimeException;
-import org.apache.tapestry.ILocation;
-import org.apache.tapestry.IResourceLocation;
-import org.apache.tapestry.Location;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.util.RegexpMatcher;
-import org.xml.sax.Attributes;
-import org.xml.sax.InputSource;
-import org.xml.sax.Locator;
-import org.xml.sax.SAXException;
-import org.xml.sax.SAXParseException;
-import org.xml.sax.helpers.DefaultHandler;
-
-/**
- * A simplified version of {@link org.apache.commons.digester.Digester}.
- * This version is without as many bells and whistles but has some key features needed when parsing
- * a document (rather than a configuration file):
- * <br>
- * <ul>
- *   <li>Notifications for each bit of text</ul>
- *   <li>Tracking of exact location within the document.</li>
- * </ul>
- * 
- * <p>
- * Like Digester, there's an object stack and a rule stack.  The rules are much
- * simpler (more coding), in that there's a one-to-one relationship between
- * an element and a rule.
- *
- * <p>
- *  Based on SAX2.
- * 
- * @author Howard Lewis Ship
- * @version $Id$
- * @since 3.0
- */
-
-public class RuleDirectedParser extends DefaultHandler
-{
-    private static final Log LOG = LogFactory.getLog(RuleDirectedParser.class);
-
-    private IResourceLocation _documentLocation;
-    private List _ruleStack = new ArrayList();
-    private List _objectStack = new ArrayList();
-    private Object _documentObject;
-
-    private Locator _locator;
-    private int _line = -1;
-    private int _column = -1;
-    private ILocation _location;
-
-    private static SAXParserFactory _parserFactory;
-    private SAXParser _parser;
-
-    private RegexpMatcher _matcher;
-
-    private String _uri;
-    private String _localName;
-    private String _qName;
-
-    /**
-     *  Map of {@link IRule} keyed on the local name
-     *  of the element.
-     */
-    private Map _ruleMap = new HashMap();
-
-    /**
-     * Used to accumlate content provided by
-     * {@link org.xml.sax.ContentHandler#characters(char[], int, int)}.
-     */
-
-    private StringBuffer _contentBuffer = new StringBuffer();
-
-    /**
-     *  Map of paths to external entities (such as the DTD) keyed on public id.
-     */
-
-    private Map _entities = new HashMap();
-
-    public Object parse(IResourceLocation documentLocation)
-    {
-        if (LOG.isDebugEnabled())
-            LOG.debug("Parsing: " + documentLocation);
-
-        try
-        {
-            _documentLocation = documentLocation;
-
-            URL url = documentLocation.getResourceURL();
-
-            if (url == null)
-                throw new DocumentParseException(
-                    Tapestry.format("RuleDrivenParser.resource-missing", documentLocation),
-                    documentLocation,
-                    null,
-                    null);
-
-            return parse(url);
-        }
-        finally
-        {
-            _documentLocation = null;
-            _ruleStack.clear();
-            _objectStack.clear();
-            _documentObject = null;
-
-            _uri = null;
-            _localName = null;
-            _qName = null;
-
-            _line = -1;
-            _column = -1;
-            _location = null;
-            _locator = null;
-
-            _contentBuffer.setLength(0);
-        }
-    }
-
-    protected Object parse(URL url)
-    {
-        if (_parser == null)
-            _parser = constructParser();
-
-        InputStream stream = null;
-
-        try
-        {
-            stream = url.openStream();
-        }
-        catch (IOException ex)
-        {
-            throw new DocumentParseException(
-                Tapestry.format("RuleDrivenParser.unable-to-open-resource", url),
-                _documentLocation,
-                null,
-                ex);
-        }
-
-        InputSource source = new InputSource(stream);
-
-        try
-        {
-            _parser.parse(source, this);
-
-            stream.close();
-        }
-        catch (Exception ex)
-        {
-            throw new DocumentParseException(
-                Tapestry.format("RuleDrivenParser.parse-error", url, ex.getMessage()),
-                _documentLocation,
-                getLocation(),
-                ex);
-        }
-
-        if (LOG.isDebugEnabled())
-            LOG.debug("Document parsed as: " + _documentObject);
-
-        return _documentObject;
-    }
-
-    /**
-     * Returns an {@link ILocation} representing the
-     * current position within the document (depending
-     * on the parser, this may be accurate to
-     * column number level).
-     */
-
-    public ILocation getLocation()
-    {
-        if (_locator == null)
-            return null;
-
-        int line = _locator.getLineNumber();
-        int column = _locator.getColumnNumber();
-
-        if (_line != line || _column != column)
-        {
-            _location = null;
-            _line = line;
-            _column = column;
-        }
-
-        if (_location == null)
-            _location = new Location(_documentLocation, _line, _column);
-
-        return _location;
-    }
-
-    /**
-     * Pushes an object onto the object stack.  The first object
-     * pushed is the "document object", the root object returned
-     * by the parse.
-     */
-    public void push(Object object)
-    {
-        if (_documentObject == null)
-            _documentObject = object;
-
-        push(_objectStack, object, "object stack");
-    }
-
-    /**
-     * Returns the top object on the object stack.
-     */
-    public Object peek()
-    {
-        return peek(_objectStack, 0);
-    }
-
-    /**
-     * Returns an object within the object stack, at depth.
-     * Depth 0 is the top object, depth 1 is the next-to-top object,
-     * etc.
-     */
-
-    public Object peek(int depth)
-    {
-        return peek(_objectStack, depth);
-    }
-
-    /**
-     * Removes and returns the top object on the object stack.
-     */
-    public Object pop()
-    {
-        return pop(_objectStack, "object stack");
-    }
-
-    private Object pop(List list, String name)
-    {
-        Object result = list.remove(list.size() - 1);
-
-        if (LOG.isDebugEnabled())
-            LOG.debug("Popped " + result + " off " + name + " (at " + getLocation() + ")");
-
-        return result;
-    }
-
-    private Object peek(List list, int depth)
-    {
-        return list.get(list.size() - 1 - depth);
-    }
-
-    private void push(List list, Object object, String name)
-    {
-        if (LOG.isDebugEnabled())
-            LOG.debug("Pushing " + object + " onto " + name + " (at " + getLocation() + ")");
-
-        list.add(object);
-    }
-
-    /**
-     * Pushes a new rule onto the rule stack.
-     */
-
-    protected void pushRule(IRule rule)
-    {
-        push(_ruleStack, rule, "rule stack");
-    }
-
-    /**
-     * Returns the top rule on the stack.
-     */
-
-    protected IRule peekRule()
-    {
-        return (IRule) peek(_ruleStack, 0);
-    }
-
-    protected IRule popRule()
-    {
-        return (IRule) pop(_ruleStack, "rule stack");
-    }
-
-    public void addRule(String localElementName, IRule rule)
-    {
-        _ruleMap.put(localElementName, rule);
-    }
-
-    /**
-     *  Registers
-     *  a public id and corresponding input source.  Generally, the source
-     *  is a wrapper around an input stream to a package resource.
-     *
-     *  @param publicId the public identifier to be registerred, generally
-     *  the publicId of a DTD related to the document being parsed
-     *  @param entityPath the resource path of the entity, typically a DTD
-     *  file.  Relative files names are expected to be stored in the same package
-     *  as the class file, otherwise a leading slash is an absolute pathname
-     *  within the classpath.
-     *
-     **/
-
-    public void registerEntity(String publicId, String entityPath)
-    {
-        if (LOG.isDebugEnabled())
-            LOG.debug("Registering " + publicId + " as " + entityPath);
-
-        if (_entities == null)
-            _entities = new HashMap();
-
-        _entities.put(publicId, entityPath);
-    }
-
-    protected IRule selectRule(String localName, Attributes attributes)
-    {
-        IRule rule = (IRule) _ruleMap.get(localName);
-
-        if (rule == null)
-            throw new DocumentParseException(
-                Tapestry.format("RuleDrivenParser.no-rule-for-element", localName),
-                _documentLocation,
-                getLocation(),
-                null);
-
-        return rule;
-    }
-
-    /**
-     * Uses the {@link Locator} to track the position
-     * in the document as a {@link ILocation}. This is invoked
-     * once (before the initial element is parsed) and
-     * the Locator is retained and queried as to
-     * the current file location.
-     * 
-     * @see #getLocation()
-     */
-    public void setDocumentLocator(Locator locator)
-    {
-        _locator = locator;
-    }
-
-    /**
-     * Accumulates the content in a buffer; the concatinated content
-     * is provided to the top rule just before any start or end tag. 
-     */
-    public void characters(char[] ch, int start, int length) throws SAXException
-    {
-        _contentBuffer.append(ch, start, length);
-    }
-
-    /**
-     * Pops the top rule off the stack and
-     * invokes {@link IRule#endElement(RuleDirectedParser)}.
-     */
-    public void endElement(String uri, String localName, String qName) throws SAXException
-    {
-        fireContentRule();
-
-        _uri = uri;
-        _localName = localName;
-        _qName = qName;
-
-        popRule().endElement(this);
-    }
-
-    /**
-     * Ignorable content is ignored.
-     */
-    public void ignorableWhitespace(char[] ch, int start, int length) throws SAXException
-    {
-    }
-
-    /**
-     * Invokes {@link #selectRule(String, Attributes)} to choose a new rule,
-     * which is pushed onto the rule stack, then invokes
-     * {@link IRule#startElement(RuleDirectedParser, Attributes)}.
-     */
-    public void startElement(String uri, String localName, String qName, Attributes attributes)
-        throws SAXException
-    {
-        fireContentRule();
-
-        _uri = uri;
-        _localName = localName;
-        _qName = qName;
-
-        String name = extractName(uri, localName, qName);
-
-        IRule newRule = selectRule(name, attributes);
-
-        pushRule(newRule);
-
-        newRule.startElement(this, attributes);
-    }
-
-    private String extractName(String uri, String localName, String qName)
-    {
-        return Tapestry.isBlank(localName) ? qName : localName;
-    }
-
-    /**
-     * Uses {@link javax.xml.parsers.SAXParserFactory} to create a instance
-     * of a validation SAX2 parser.
-     */
-    protected synchronized SAXParser constructParser()
-    {
-        if (_parserFactory == null)
-        {
-            _parserFactory = SAXParserFactory.newInstance();
-            configureParserFactory(_parserFactory);
-        }
-
-        try
-        {
-            return _parserFactory.newSAXParser();
-        }
-        catch (SAXException ex)
-        {
-            throw new ApplicationRuntimeException(ex);
-        }
-        catch (ParserConfigurationException ex)
-        {
-            throw new ApplicationRuntimeException(ex);
-        }
-
-    }
-
-    /**
-     * Configures a {@link SAXParserFactory} before
-     * {@link SAXParserFactory#newSAXParser()} is invoked.
-     * The default implementation sets validating to true
-     * and namespaceAware to false,
-     */
-
-    protected void configureParserFactory(SAXParserFactory factory)
-    {
-        factory.setValidating(true);
-        factory.setNamespaceAware(false);
-    }
-
-    /**
-     *  Throws the exception.
-     */
-    public void error(SAXParseException ex) throws SAXException
-    {
-        fatalError(ex);
-    }
-
-    /**
-     *  Throws the exception.
-     */
-    public void fatalError(SAXParseException ex) throws SAXException
-    {
-        // Sometimes, a bad parse "corrupts" a parser so that it doesn't
-        // work properly for future parses (of valid documents),
-        // so discard it here.
-
-        _parser = null;
-
-        throw ex;
-    }
-
-    /**
-     *  Throws the exception.
-     */
-    public void warning(SAXParseException ex) throws SAXException
-    {
-        fatalError(ex);
-    }
-
-    public InputSource resolveEntity(String publicId, String systemId) throws SAXException
-    {
-        String entityPath = null;
-
-        if (LOG.isDebugEnabled())
-            LOG.debug(
-                "Attempting to resolve entity; publicId = " + publicId + " systemId = " + systemId);
-
-        if (_entities != null)
-            entityPath = (String) _entities.get(publicId);
-
-        if (entityPath == null)
-        {
-            if (LOG.isDebugEnabled())
-                LOG.debug("Entity not found, using " + systemId);
-
-            return null;
-        }
-
-        InputStream stream = getClass().getResourceAsStream(entityPath);
-
-        InputSource result = new InputSource(stream);
-
-        if (result != null && LOG.isDebugEnabled())
-            LOG.debug("Resolved " + publicId + " as " + result + " (for " + entityPath + ")");
-
-        return result;
-    }
-
-    /**
-     *  Validates that the input value matches against the specified
-     *  Perl5 pattern.  If valid, the method simply returns.
-     *  If not a match, then an error message is generated (using the
-     *  errorKey and the input value) and a
-     *  {@link InvalidStringException} is thrown.
-     * 
-     **/
-
-    public void validate(String value, String pattern, String errorKey)
-        throws DocumentParseException
-    {
-        if (_matcher == null)
-            _matcher = new RegexpMatcher();
-
-        if (_matcher.matches(pattern, value))
-            return;
-
-        throw new InvalidStringException(Tapestry.format(errorKey, value), value, getLocation());
-    }
-
-    public IResourceLocation getDocumentLocation()
-    {
-        return _documentLocation;
-    }
-
-    /**
-     * Returns the localName for the current element.
-     * @see org.xml.sax.ContentHandler#startElement(java.lang.String, java.lang.String, java.lang.String, org.xml.sax.Attributes)
-     */
-    public String getLocalName()
-    {
-        return _localName;
-    }
-
-    /**
-     * Returns the qualified name for the current element.
-     * @see org.xml.sax.ContentHandler#startElement(java.lang.String, java.lang.String, java.lang.String, org.xml.sax.Attributes)
-     */
-    public String getQName()
-    {
-        return _qName;
-    }
-
-    /**
-     * Returns the URI for the current element.
-     * @see org.xml.sax.ContentHandler#startElement(java.lang.String, java.lang.String, java.lang.String, org.xml.sax.Attributes) 
-     */
-    public String getUri()
-    {
-        return _uri;
-    }
-
-    private void fireContentRule()
-    {
-        String content = _contentBuffer.toString();
-        _contentBuffer.setLength(0);
-
-        if (!_ruleStack.isEmpty())
-            peekRule().content(this, content);
-    }
-
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/util/xml/package.html b/3.0.4/framework/src/org/apache/tapestry/util/xml/package.html
deleted file mode 100644
index 16de827..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/util/xml/package.html
+++ /dev/null
@@ -1,17 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<!-- $Id$ -->
-
-<html>
-<head>
-<title>Tapestry: Web Application Framework</title>
-</head>
-
-<body>
-
-<p>Base classes for streamlining the process of parsing an XML document.  This is primarily 
-used with a validating parser, where the DTD is stored within the classpath.
-
-@author Howard Lewis Ship <a href="mailto:hlship@apache.org">hlship@apache.org</a>
-
-</body>
-</html>
diff --git a/3.0.4/framework/src/org/apache/tapestry/valid/BaseValidator.java b/3.0.4/framework/src/org/apache/tapestry/valid/BaseValidator.java
deleted file mode 100644
index b8f6bbf..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/valid/BaseValidator.java
+++ /dev/null
@@ -1,350 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.valid;
-
-import java.text.MessageFormat;
-import java.util.HashMap;
-import java.util.Locale;
-import java.util.Map;
-import java.util.ResourceBundle;
-
-import org.apache.tapestry.ApplicationRuntimeException;
-import org.apache.tapestry.IEngine;
-import org.apache.tapestry.IForm;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.IResourceLocation;
-import org.apache.tapestry.IScript;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.engine.IScriptSource;
-import org.apache.tapestry.form.FormEventType;
-import org.apache.tapestry.form.IFormComponent;
-import org.apache.tapestry.html.Body;
-import org.apache.tapestry.resource.ClasspathResourceLocation;
-
-/**
- *  Abstract base class for {@link IValidator}.  Supports a required and locale property.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 1.0.8
- *
- **/
-
-public abstract class BaseValidator implements IValidator
-{
-    /**
-     *  Input Symbol used to represent the field being validated.
-     * 
-     *  @see #processValidatorScript(String, IRequestCycle, IFormComponent, Map)
-     * 
-     *  @since 2.2
-     * 
-     **/
-
-    public static final String FIELD_SYMBOL = "field";
-
-    /**
-     *  Input symbol used to represent the validator itself to the script.
-     * 
-     *  @see #processValidatorScript(String, IRequestCycle, IFormComponent, Map)
-     * 
-     *  @since 2.2
-     * 
-     **/
-
-    public static final String VALIDATOR_SYMBOL = "validator";
-
-    /**
-     *  Input symbol used to represent the {@link IForm} containing the field
-     *  to the script.
-     * 
-     *  @see #processValidatorScript(String, IRequestCycle, IFormComponent, Map)
-     *  
-     *  @since 2.2
-     **/
-
-    public static final String FORM_SYMBOL = "form";
-
-    /**
-     *  Output symbol set by the script asthe name of the validator 
-     *  JavaScript function.
-     *  The function implemented must return true or false (true
-     *  if the field is valid, false otherwise).
-     *  After the script is executed, the function is added
-     *  to the {@link IForm} as a {@link org.apache.tapestry.form.FormEventType#SUBMIT}.
-     * 
-     *  @see #processValidatorScript(String, IRequestCycle, IFormComponent, Map)
-     * 
-     *  @since 2.2
-     * 
-     **/
-
-    public static final String FUNCTION_SYMBOL = "function";
-
-    private boolean _required;
-
-    /** @since 3.0 */
-
-    private String _requiredMessage;
-
-    /** 
-     *  @since 2.2
-     * 
-     **/
-
-    private boolean _clientScriptingEnabled = false;
-
-    /**
-     *  Standard constructor.  Leaves locale as system default and required as false.
-     * 
-     **/
-
-    public BaseValidator()
-    {
-    }
-
-    protected BaseValidator(boolean required)
-    {
-        _required = required;
-    }
-
-    public boolean isRequired()
-    {
-        return _required;
-    }
-
-    public void setRequired(boolean required)
-    {
-        _required = required;
-    }
-
-    /**
-     * Gets a pattern, either as the default value, or as a localized key.
-     * If override is null, then the key from the
-     * <code>org.apache.tapestry.valid.ValidationStrings</code>
-     * {@link ResourceBundle} (in the specified locale) is used.
-     * The pattern can then be used with {@link #formatString(String, Object[])}.
-     * 
-     * <p>Why do we not just lump these strings into TapestryStrings.properties?  
-     * because TapestryStrings.properties is localized to the server's locale, which is fine
-     * for the logging, debugging and error messages it contains.  For field validation, whose errors
-     * are visible to the end user normally, we want to localize to the page's locale.
-     *  
-     * @param override The override value for the localized string from the bundle.
-     * @param key used to lookup pattern from bundle, if override is null.
-     * @param locale used to get right localization of bundle.
-     * @since 3.0
-     */
-
-    protected String getPattern(String override, String key, Locale locale)
-    {
-        if (override != null)
-            return override;
-
-        ResourceBundle strings =
-            ResourceBundle.getBundle("org.apache.tapestry.valid.ValidationStrings", locale);
-
-        return strings.getString(key);
-    }
-
-    /**
-     * Gets a string from the standard resource bundle.  The string in the bundle
-     * is treated as a pattern for {@link MessageFormat#format(java.lang.String, java.lang.Object[])}.
-     * 
-     * @param pattern string the input pattern to be used with
-     * {@link MessageFormat#format(java.lang.String, java.lang.Object[])}.
-     * It may contain replaceable parameters, {0}, {1}, etc.
-     * @param args the arguments used to fill replaceable parameters {0}, {1}, etc.
-     * 
-     * @since 3.0
-     * 
-     **/
-
-    protected String formatString(String pattern, Object[] args)
-    {
-        return MessageFormat.format(pattern, args);
-    }
-
-    /**
-     *  Convienience method for invoking {@link #formatString(String, Object[])}.
-     * 
-     *  @since 3.0
-     * 
-     **/
-
-    protected String formatString(String pattern, Object arg)
-    {
-        return formatString(pattern, new Object[] { arg });
-    }
-
-    /**
-     *  Convienience method for invoking {@link #formatString(String, Object[])}.
-     * 
-     *  @since 3.0
-     * 
-     **/
-
-    protected String formatString(String pattern, Object arg1, Object arg2)
-    {
-        return formatString(pattern, new Object[] { arg1, arg2 });
-    }
-
-    /**
-     *  Invoked to check if the value is null.  If the value is null (or empty),
-     *  but the required flag is set, then this method throws a {@link ValidatorException}.
-     *  Otherwise, returns true if the value is null.
-     * 
-     **/
-
-    protected boolean checkRequired(IFormComponent field, String value) throws ValidatorException
-    {
-        boolean isEmpty = Tapestry.isBlank(value);
-
-        if (_required && isEmpty)
-            throw new ValidatorException(
-                buildRequiredMessage(field),
-                ValidationConstraint.REQUIRED);
-
-        return isEmpty;
-    }
-
-    /** 
-     * Builds an error message indicating a value for a required
-     * field was not supplied.
-     * 
-     * @since 3.0
-     */
-
-    protected String buildRequiredMessage(IFormComponent field)
-    {
-        String pattern =
-            getPattern(_requiredMessage, "field-is-required", field.getPage().getLocale());
-
-        return formatString(pattern, field.getDisplayName());
-    }
-
-    /**
-     *  This implementation does nothing.  Subclasses may supply their own implementation.
-     * 
-     *  @since 2.2
-     * 
-     **/
-
-    public void renderValidatorContribution(
-        IFormComponent field,
-        IMarkupWriter writer,
-        IRequestCycle cycle)
-    {
-    }
-
-    /**
-     *  Invoked (from sub-class
-     *  implementations of {@link #renderValidatorContribution(IFormComponent, IMarkupWriter, IRequestCycle)}
-     *  to process a standard validation script.  This expects that:
-     *  <ul>
-     *  <li>The {@link IFormComponent} is (ultimately) wrapped by a {@link Body}
-     *  <li>The script generates a symbol named "function" (as per {@link #FUNCTION_SYMBOL})
-     *  </ul>
-     * 
-     *  @param scriptPath the resource path of the script to execute
-     *  @param cycle The active request cycle
-     *  @param field The field to be validated
-     *  @param symbols a set of input symbols needed by the script.  These symbols
-     *  are augmented with symbols for the field, form and validator.  symbols may be
-     *  null, but will be modified if not null.
-     *  @throws ApplicationRuntimeException if there's an error processing the script.
-     * 
-     *  @since 2.2
-     * 
-     **/
-
-    protected void processValidatorScript(
-        String scriptPath,
-        IRequestCycle cycle,
-        IFormComponent field,
-        Map symbols)
-    {
-        IEngine engine = field.getPage().getEngine();
-        IScriptSource source = engine.getScriptSource();
-        IForm form = field.getForm();
-
-        Map finalSymbols = (symbols == null) ? new HashMap() : symbols;
-
-        finalSymbols.put(FIELD_SYMBOL, field);
-        finalSymbols.put(FORM_SYMBOL, form);
-        finalSymbols.put(VALIDATOR_SYMBOL, this);
-
-        IResourceLocation location =
-            new ClasspathResourceLocation(engine.getResourceResolver(), scriptPath);
-
-        IScript script = source.getScript(location);
-
-        Body body = Body.get(cycle);
-
-        if (body == null)
-            throw new ApplicationRuntimeException(
-                Tapestry.getMessage("ValidField.must-be-contained-by-body"),
-                field,
-                null,
-                null);
-
-        script.execute(cycle, body, finalSymbols);
-
-        String functionName = (String) finalSymbols.get(FUNCTION_SYMBOL);
-
-        form.addEventHandler(FormEventType.SUBMIT, functionName);
-    }
-
-    /**
-     *  Returns true if client scripting is enabled.  Some validators are
-     *  capable of generating client-side scripting to perform validation
-     *  when the form is submitted.  By default, this flag is false and
-     *  subclasses should check it 
-     *  (in {@link #renderValidatorContribution(IFormComponent, IMarkupWriter, IRequestCycle)})
-     *  before generating client side script.
-     * 
-     *  @since 2.2
-     * 
-     **/
-
-    public boolean isClientScriptingEnabled()
-    {
-        return _clientScriptingEnabled;
-    }
-
-    public void setClientScriptingEnabled(boolean clientScriptingEnabled)
-    {
-        _clientScriptingEnabled = clientScriptingEnabled;
-    }
-
-    public String getRequiredMessage()
-    {
-        return _requiredMessage;
-    }
-
-    /**
-     * Overrides the <code>field-is-required</code> bundle key.
-     * Parameter {0} is the display name of the field.
-     * 
-     * @since 3.0
-     */
-
-    public void setRequiredMessage(String string)
-    {
-        _requiredMessage = string;
-    }
-
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/valid/DateValidator.java b/3.0.4/framework/src/org/apache/tapestry/valid/DateValidator.java
deleted file mode 100644
index 74e17e9..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/valid/DateValidator.java
+++ /dev/null
@@ -1,351 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.valid;
-
-import java.text.DateFormat;
-import java.text.ParseException;
-import java.text.SimpleDateFormat;
-import java.util.Calendar;
-import java.util.Date;
-import java.util.GregorianCalendar;
-import java.util.HashMap;
-import java.util.Map;
-
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.form.IFormComponent;
-
-/**
- *  Provides input validation for strings treated as dates.  In addition,
- *  allows a minimum and maximum date to be set.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 1.0.8
- *
- **/
-
-public class DateValidator extends BaseValidator
-{
-    private DateFormat _format;
-    private String _displayFormat;
-    private Date _minimum;
-    private Date _maximum;
-    private Calendar _calendar;
-    private String _scriptPath = "/org/apache/tapestry/valid/DateValidator.script";
-
-    private static DateFormat defaultDateFormat = new SimpleDateFormat("MM/dd/yyyy");
-    private static final String defaultDateDisplayFormat = "MM/DD/YYYY";
-
-    private String _dateTooEarlyMessage;
-    private String _dateTooLateMessage;
-    private String _invalidDateFormatMessage;
-
-    public void setFormat(DateFormat value)
-    {
-        _format = value;
-    }
-
-    public DateFormat getFormat()
-    {
-        return _format;
-    }
-
-	/**
-	 * @return the {@link DateFormat} the validator will use, returning the default if no
-	 * other date format is specified via {@link #setFormat(DateFormat)}
-	 * 
-	 * @since 3.0
-	 */
-    public DateFormat getEffectiveFormat()
-    {
-        if (_format == null)
-            return defaultDateFormat;
-
-        return _format;
-    }
-
-    public String getDisplayFormat()
-    {
-        return _displayFormat;
-    }
-
-    public void setDisplayFormat(String value)
-    {
-        _displayFormat = value;
-    }
-
-	/**
-     * @return the display format message the validator will use, returning the default if no
-     * other display format message is specified.  The default is the {@link SimpleDateFormat#toPattern()}
-     * for {@link SimpleDateFormat}s, or "MM/DD/YYYY" for unknown {@link DateFormat} subclasses.
-     * 
-     * @since 3.0
-     */
-    public String getEffectiveDisplayFormat()
-    {
-        if (_displayFormat == null)
-        {
-            DateFormat format = getEffectiveFormat();
-            if (format instanceof SimpleDateFormat) 
-                return ((SimpleDateFormat)format).toPattern();
-            else
-                return defaultDateDisplayFormat;
-        }
-
-        return _displayFormat;
-    }
-
-    public String toString(IFormComponent file, Object value)
-    {
-        if (value == null)
-            return null;
-
-        Date date = (Date) value;
-
-        DateFormat format = getEffectiveFormat();
-
-        // DateFormat is not threadsafe, so guard access to it.
-
-        synchronized (format)
-        {
-            return format.format(date);
-        }
-    }
-
-    public Object toObject(IFormComponent field, String value) throws ValidatorException
-    {
-        if (checkRequired(field, value))
-            return null;
-
-        DateFormat format = getEffectiveFormat();
-
-        Date result;
-
-        try
-        {
-            // DateFormat is not threadsafe, so guard access
-            // to it.
-
-            synchronized (format)
-            {
-                result = format.parse(value);
-            }
-
-            if (_calendar == null)
-                _calendar = new GregorianCalendar();
-
-            _calendar.setTime(result);
-
-            // SimpleDateFormat allows two-digit dates to be
-            // entered, i.e., 12/24/66 is Dec 24 0066 ... that's
-            // probably not what is really wanted, so treat
-            // it as an invalid date.
-
-            if (_calendar.get(Calendar.YEAR) < 1000)
-                result = null;
-
-        }
-        catch (ParseException ex)
-        {
-            // ParseException does not include a useful error message
-            // about what's wrong.
-            result = null;
-        }
-
-        if (result == null)
-            throw new ValidatorException(
-                buildInvalidDateFormatMessage(field),
-                ValidationConstraint.DATE_FORMAT);
-
-        // OK, check that the date is in range.
-
-        if (_minimum != null && _minimum.compareTo(result) > 0)
-            throw new ValidatorException(
-                buildDateTooEarlyMessage(field, format.format(_minimum)),
-                ValidationConstraint.TOO_SMALL);
-
-        if (_maximum != null && _maximum.compareTo(result) < 0)
-            throw new ValidatorException(
-                buildDateTooLateMessage(field, format.format(_maximum)),
-                ValidationConstraint.TOO_LARGE);
-
-        return result;
-
-    }
-
-    public Date getMaximum()
-    {
-        return _maximum;
-    }
-
-    public void setMaximum(Date maximum)
-    {
-        _maximum = maximum;
-    }
-
-    public Date getMinimum()
-    {
-        return _minimum;
-    }
-
-    public void setMinimum(Date minimum)
-    {
-        _minimum = minimum;
-    }
-
-    /** 
-     * 
-     *  @since 2.2
-     * 
-     **/
-
-    public void renderValidatorContribution(
-        IFormComponent field,
-        IMarkupWriter writer,
-        IRequestCycle cycle)
-    {
-        if (!(isClientScriptingEnabled() && isRequired()))
-            return;
-
-        Map symbols = new HashMap();
-
-        symbols.put("requiredMessage", buildRequiredMessage(field));
-
-        processValidatorScript(_scriptPath, cycle, field, symbols);
-    }
-
-    /**
-     *  @since 2.2
-     * 
-     **/
-
-    public String getScriptPath()
-    {
-        return _scriptPath;
-    }
-
-    /**
-     *  Allows a developer to use the existing validation logic with a different client-side
-     *  script.  This is often sufficient to allow application-specific error presentation
-     *  (perhaps by using DHTML to update the content of a &lt;span&gt; tag, or to use
-     *  a more sophisticated pop-up window than <code>window.alert()</code>).
-     * 
-     *  @since 2.2
-     * 
-     **/
-
-    public void setScriptPath(String scriptPath)
-    {
-        _scriptPath = scriptPath;
-    }
-
-    /** @since 3.0 */
-
-    public String getDateTooEarlyMessage()
-    {
-        return _dateTooEarlyMessage;
-    }
-
-    /** @since 3.0 */
-
-    public String getDateTooLateMessage()
-    {
-        return _dateTooLateMessage;
-    }
-
-    /** @since 3.0 */
-
-    public String getInvalidDateFormatMessage()
-    {
-        return _invalidDateFormatMessage;
-    }
-
-    /** @since 3.0 */
-
-    protected String buildInvalidDateFormatMessage(IFormComponent field)
-    {
-        String pattern =
-            getPattern(
-                _invalidDateFormatMessage,
-                "invalid-date-format",
-                field.getPage().getLocale());
-
-        return formatString(pattern, field.getDisplayName(), getEffectiveDisplayFormat());
-    }
-
-    /** @since 3.0 **/
-
-    protected String buildDateTooEarlyMessage(IFormComponent field, String earliestDate)
-    {
-        String pattern =
-            getPattern(_dateTooEarlyMessage, "date-too-early", field.getPage().getLocale());
-
-        return formatString(pattern, field.getDisplayName(), earliestDate);
-    }
-
-    /** @since 3.0 */
-
-    protected String buildDateTooLateMessage(IFormComponent field, String latestDate)
-    {
-        String pattern =
-            getPattern(_dateTooLateMessage, "date-too-late", field.getPage().getLocale());
-
-        return formatString(pattern, field.getDisplayName(), latestDate);
-    }
-
-    /**
-     *  Overrides the bundle key
-     *  <code>date-too-early</code>.
-     *  Parameter {0} is the display name of the field.
-     *  Parameter {1} is the earliest allowed date.
-     * 
-     *  @since 3.0
-     */
-
-    public void setDateTooEarlyMessage(String string)
-    {
-        _dateTooEarlyMessage = string;
-    }
-
-    /**
-     *  Overrides the bundle key
-     *  <code>date-too-late</code>.
-     *  Parameter {0} is the display name of the field.
-     *  Parameter {1} is the latest allowed date.
-     * 
-     *  @since 3.0
-     */
-
-    public void setDateTooLateMessage(String string)
-    {
-        _dateTooLateMessage = string;
-    }
-
-    /**
-     *  Overrides the bundle key
-     *  <code>invalid-date-format</code>.
-     *  Parameter {0} is the display name of the field.
-     *  Parameter {1} is the allowed format.
-     * 
-     *  @since 3.0
-     */
-
-    public void setInvalidDateFormatMessage(String string)
-    {
-        _invalidDateFormatMessage = string;
-    }
-
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/valid/DateValidator.script b/3.0.4/framework/src/org/apache/tapestry/valid/DateValidator.script
deleted file mode 100644
index 6ec5098..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/valid/DateValidator.script
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0"?>
-<!-- $Id$ -->
-<!DOCTYPE script PUBLIC
-	"-//Apache Software Foundation//Tapestry Script Specification 3.0//EN"
-	"http://jakarta.apache.org/tapestry/dtd/Script_3_0.dtd">
-	
-<!-- 
-
-  Creates a script for validating that a date field is required.  Eventually,
-  this will also do client-side input validation.
-  
-  Input symbols:
-     field, form, validator:  As normal for a validation script.
-	 requiredMessage: Message to display if the field is required yet blank.
-     
--->
-	
-<script>
-
-<include-script resource-path="/org/apache/tapestry/valid/Validator.js"/>
-
-<input-symbol key="field" class="org.apache.tapestry.valid.ValidField" required="yes"/>
-<input-symbol key="form" class="org.apache.tapestry.IForm" required="yes"/>
-<input-symbol key="validator" class="org.apache.tapestry.valid.DateValidator" required="yes"/>
-<input-symbol key="requiredMessage" class="java.lang.String"/>
-
-<let key="function" unique="yes">
-validate_${field.name}
-</let>
-
-<body>
-function ${function}()
-{
-  var field = document.${form.name}.${field.name}; 
-
-  if (field.value.length == 0)
-     return validator_invalid_field(field, "${requiredMessage}");
-
-  return true;
-}
-</body>
-
-</script>
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/valid/EmailValidator.java b/3.0.4/framework/src/org/apache/tapestry/valid/EmailValidator.java
deleted file mode 100644
index 303e3cc..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/valid/EmailValidator.java
+++ /dev/null
@@ -1,218 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.valid;
-
-import java.util.HashMap;
-import java.util.Locale;
-import java.util.Map;
-
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.form.IFormComponent;
-
-/**
- *  Simple validation of email strings, to enforce required, and minimum length
- *  (maximum length is enforced in the client browser, by setting a maximum input
- *  length on the text field).
- *
- *
- *  @author Malcolm Edgar
- *  @version $Id$
- *  @since 2.3
- *
- **/
-
-public class EmailValidator extends BaseValidator
-{
-    private int _minimumLength;
-    private String _minimumLengthMessage;
-    private String _invalidEmailFormatMessage;
-
-    private String _scriptPath = "/org/apache/tapestry/valid/EmailValidator.script";
-
-    public EmailValidator()
-    {
-    }
-
-    private EmailValidator(boolean required)
-    {
-        super(required);
-    }
-
-    public String toString(IFormComponent field, Object value)
-    {
-        if (value == null)
-            return null;
-
-        return value.toString();
-    }
-
-    public Object toObject(IFormComponent field, String input) throws ValidatorException
-    {
-        if (checkRequired(field, input))
-            return null;
-
-        if (_minimumLength > 0 && input.length() < _minimumLength)
-            throw new ValidatorException(
-                buildMinimumLengthMessage(field),
-                ValidationConstraint.MINIMUM_WIDTH);
-
-        if (!isValidEmail(input))
-            throw new ValidatorException(
-                buildInvalidEmailFormatMessage(field),
-                ValidationConstraint.EMAIL_FORMAT);
-
-        return input;
-    }
-
-    public int getMinimumLength()
-    {
-        return _minimumLength;
-    }
-
-    public void setMinimumLength(int minimumLength)
-    {
-        _minimumLength = minimumLength;
-    }
-
-    public void renderValidatorContribution(
-        IFormComponent field,
-        IMarkupWriter writer,
-        IRequestCycle cycle)
-    {
-        if (!isClientScriptingEnabled())
-            return;
-
-        Map symbols = new HashMap();
-
-        Locale locale = field.getPage().getLocale();
-        String displayName = field.getDisplayName();
-
-        if (isRequired())
-            symbols.put("requiredMessage", buildRequiredMessage(field));
-
-        if (_minimumLength > 0)
-            symbols.put("minimumLengthMessage", buildMinimumLengthMessage(field));
-
-        String pattern = getPattern(getInvalidEmailFormatMessage(), "invalid-email-format", locale);
-
-        symbols.put("emailFormatMessage", formatString(pattern, displayName));
-
-        processValidatorScript(_scriptPath, cycle, field, symbols);
-    }
-
-    public String getScriptPath()
-    {
-        return _scriptPath;
-    }
-
-    /**
-     *  Allows a developer to use the existing validation logic with a different client-side
-     *  script.  This is often sufficient to allow application-specific error presentation
-     *  (perhaps by using DHTML to update the content of a &lt;span&gt; tag, or to use
-     *  a more sophisticated pop-up window than <code>window.alert()</code>).
-     * 
-     **/
-
-    public void setScriptPath(String scriptPath)
-    {
-        _scriptPath = scriptPath;
-    }
-
-    /**
-     *  Return true if the email format is valid.
-     * 
-     *  @param email the email string to validate
-     *  @return true if the email format is valid
-     */
-
-    protected boolean isValidEmail(String email)
-    {
-        int atIndex = email.indexOf('@');
-
-        if ((atIndex == -1) || (atIndex == 0) || (atIndex == email.length() - 1))
-        {
-            return false;
-        }
-        else
-        {
-            return true;
-        }
-    }
-
-    /** @since 3.0 */
-
-    public String getInvalidEmailFormatMessage()
-    {
-        return _invalidEmailFormatMessage;
-    }
-
-    /** @since 3.0 */
-
-    public String getMinimumLengthMessage()
-    {
-        return _minimumLengthMessage;
-    }
-
-    /**
-     *  Overrides the <code>invalid-email-format</code>
-     *  bundle key.
-     *  Parameter {0} is the display name of the field.
-     * 
-     *  @since 3.0
-     * 
-     */
-
-    public void setInvalidEmailFormatMessage(String string)
-    {
-        _invalidEmailFormatMessage = string;
-    }
-
-    /**
-     *  Overrides the <code>field-too-short</code> bundle key.
-     *  Parameter {0} is the minimum length.
-     *  Parameter {1} is the display name of the field.
-     * 
-     *  @since 3.0
-     * 
-     */
-    public void setMinimumLengthMessage(String string)
-    {
-        _minimumLengthMessage = string;
-    }
-
-    /** @since 3.0 */
-
-    protected String buildMinimumLengthMessage(IFormComponent field)
-    {
-        String pattern =
-            getPattern(_minimumLengthMessage, "field-too-short", field.getPage().getLocale());
-
-        return formatString(pattern, Integer.toString(_minimumLength), field.getDisplayName());
-    }
-
-    /** @since 3.0 */
-
-    protected String buildInvalidEmailFormatMessage(IFormComponent field)
-    {
-        String pattern =
-            getPattern(
-                _invalidEmailFormatMessage,
-                "invalid-email-format",
-                field.getPage().getLocale());
-
-        return formatString(pattern, field.getDisplayName());
-    }
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/valid/EmailValidator.script b/3.0.4/framework/src/org/apache/tapestry/valid/EmailValidator.script
deleted file mode 100644
index 4f724b3..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/valid/EmailValidator.script
+++ /dev/null
@@ -1,66 +0,0 @@
-<?xml version="1.0"?>
-<!-- $Id$ -->
-<!DOCTYPE script PUBLIC
-	"-//Apache Software Foundation//Tapestry Script Specification 3.0//EN"
-	"http://jakarta.apache.org/tapestry/dtd/Script_3_0.dtd">
-
-<!--
-
-  Creates a script for validating that a field is required and/or has a minimum
-  field length.
-
-  Input symbols:
-     field, form, validator:  As normal for a validation script.
-	 requiredMessage: Message to display if the field is required yet blank.
-	 minimumLengthMessage: Message to display if the field length is too short.
-
--->
-
-<script>
-
-<include-script resource-path="/org/apache/tapestry/valid/Validator.js"/>
-
-<input-symbol key="field" class="org.apache.tapestry.valid.ValidField" required="yes"/>
-<input-symbol key="form" class="org.apache.tapestry.IForm" required="yes"/>
-<input-symbol key="validator" class="org.apache.tapestry.valid.EmailValidator" required="yes"/>
-<input-symbol key="requiredMessage" class="java.lang.String"/>
-<input-symbol key="minimumLengthMessage" class="java.lang.String"/>
-<input-symbol key="emailFormatMessage" class="java.lang.String"/>
-
-<let key="function" unique="yes">
-validate_${field.name}
-</let>
-
-<body>
-function ${function}()
-{
-  var field = document.${form.name}.${field.name};
-
-  strValue = field.value.replace(/ /g,"");
-
-  field.value = strValue;
-
-<if expression="validator.required">
-  if (strValue.length == 0)
-     return validator_invalid_field(field, "${requiredMessage}");
-</if>
-
-<if-not expression="validator.required">
-  if (strValue.length == 0)
-     return true;
-</if-not>
-
-<if expression="validator.minimumLength">
-  if (strValue.length &lt; ${validator.minimumLength})
-     return validator_invalid_field(field, "${minimumLengthMessage}");
-</if>
-
-  atIndex = strValue.indexOf("@");
-  if ((atIndex == -1) || (atIndex == 0) || (atIndex == strValue.length -1))
-     return validator_invalid_field(field, "${emailFormatMessage}");
-
-  return true;
-}
-</body>
-
-</script>
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/valid/FieldLabel.java b/3.0.4/framework/src/org/apache/tapestry/valid/FieldLabel.java
deleted file mode 100644
index b8c3426..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/valid/FieldLabel.java
+++ /dev/null
@@ -1,109 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.valid;
-
-import org.apache.tapestry.AbstractComponent;
-import org.apache.tapestry.ApplicationRuntimeException;
-import org.apache.tapestry.BindingException;
-import org.apache.tapestry.IForm;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.form.Form;
-import org.apache.tapestry.form.IFormComponent;
-
-/**
- *  Used to label an {@link IFormComponent}.  Because such fields
- *  know their displayName (user-presentable name), there's no reason
- *  to hard code the label in a page's HTML template (this also helps
- *  with localization).
- *
- *  [<a href="../../../../../ComponentReference/FieldLabel.html">Component Reference</a>]
-
- *
- *  @author Howard Lewis Lewis Ship
- *  @version $Id$
- * 
- **/
-
-public abstract class FieldLabel extends AbstractComponent
-{
-    /**
-    *  Gets the {@link IFormComponent}
-    *  and {@link IValidationDelegate delegate},
-    *  then renders the label obtained from the field.  Does nothing
-    *  when rewinding.
-    *
-    **/
-
-    protected void renderComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        if (cycle.isRewinding())
-            return;
-
-        IFormComponent field = getField();
-        String displayName = getDisplayName();
-
-        if (displayName == null)
-        {
-            if (field == null)
-                throw Tapestry.createRequiredParameterException(this, "field");
-
-            displayName = field.getDisplayName();
-
-            if (displayName == null)
-            {
-                String msg = Tapestry.format("FieldLabel.no-display-name", field.getExtendedId());
-
-                throw new BindingException(msg, this, null, getBinding("field"), null);
-            }
-        }
-
-        IForm form = Form.get(cycle);
-
-        if (form == null)
-        {
-            String msg = Tapestry.getMessage("FieldLabel.must-be-contained-by-form");
-
-            throw new ApplicationRuntimeException(msg, this, null, null);
-        }
-
-        IValidationDelegate delegate = form.getDelegate();
-
-        if (delegate == null)
-        {
-            String msg =
-                Tapestry.format("FieldLabel.no-delegate", getExtendedId(), form.getExtendedId());
-
-            throw new ApplicationRuntimeException(msg, this, null, null);
-        }
-
-        delegate.writeLabelPrefix(field, writer, cycle);
-
-        if (getRaw()) {
-            writer.printRaw(displayName);
-        } else {
-            writer.print(displayName);
-        }
-
-        delegate.writeLabelSuffix(field, writer, cycle);
-    }
-
-    public abstract String getDisplayName();
-
-    public abstract IFormComponent getField();
-
-    public abstract boolean getRaw();
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/valid/FieldLabel.jwc b/3.0.4/framework/src/org/apache/tapestry/valid/FieldLabel.jwc
deleted file mode 100644
index a79043b..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/valid/FieldLabel.jwc
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE component-specification PUBLIC
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN"
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<component-specification class="org.apache.tapestry.valid.FieldLabel"
-	allow-body="no"
-	allow-informal-parameters="no">
-
-  <description>
-  Labels a ValidField.
-  </description>
-
-  <parameter name="field" type="org.apache.tapestry.form.IFormComponent" required="yes" direction="in"/>
-
-  <parameter name="displayName" type="java.lang.String" direction="in">
-      <description>
-          Optional.  Defaults to the displayName of the associated field.
-      </description>
-  </parameter>
-
-  <parameter name="raw" type="boolean" direction="in">
-      <description>
-        If false (the default), then HTML characters in the value are escaped.  If
-        true, then value is emitted exactly as is.
-      </description>
-  </parameter>
-
-</component-specification>
diff --git a/3.0.4/framework/src/org/apache/tapestry/valid/FieldTracking.java b/3.0.4/framework/src/org/apache/tapestry/valid/FieldTracking.java
deleted file mode 100644
index 6471979..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/valid/FieldTracking.java
+++ /dev/null
@@ -1,106 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.valid;
-
-import org.apache.tapestry.IRender;
-import org.apache.tapestry.form.IFormComponent;
-
-/**
- *  Default implementation of {@link IFieldTracking}.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 1.0.8
- *
- **/
-
-public class FieldTracking implements IFieldTracking
-{
-    private IFormComponent _component;
-    private String _input;
-    private IRender _renderer;
-    private String _fieldName;
-    private ValidationConstraint _constraint;
-
-	/**
-	 *  Constructor used for unassociated errors; errors that are not about any particular
-	 *  field within the form.
-	 * 
-	 **/
-	
-    FieldTracking()
-    {
-    }
-
-	/**
-	 *  Standard constructor for a field (with the given name), rendered
-	 *  by the specified component.
-	 * 
-	 **/
-	
-    FieldTracking(String fieldName, IFormComponent component)
-    {
-        _fieldName = fieldName;
-        _component = component;
-    }
-
-    public IFormComponent getComponent()
-    {
-        return _component;
-    }
-
-    public IRender getErrorRenderer()
-    {
-        return _renderer;
-    }
-
-    public void setErrorRenderer(IRender value)
-    {
-        _renderer = value;
-    }
-
-    public String getInput()
-    {
-        return _input;
-    }
-
-    public void setInput(String value)
-    {
-        _input = value;
-    }
-
-    public String getFieldName()
-    {
-        return _fieldName;
-    }
-
-    public ValidationConstraint getConstraint()
-    {
-        return _constraint;
-    }
-
-    public void setConstraint(ValidationConstraint constraint)
-    {
-        _constraint = constraint;
-    }
-
-    /** @since 3.0 **/
-
-    public boolean isInError()
-    {
-        return _renderer != null;
-    }
-
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/valid/IFieldTracking.java b/3.0.4/framework/src/org/apache/tapestry/valid/IFieldTracking.java
deleted file mode 100644
index cdf509b..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/valid/IFieldTracking.java
+++ /dev/null
@@ -1,80 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.valid;
-
-import org.apache.tapestry.IRender;
-import org.apache.tapestry.form.IFormComponent;
-
-/**
- * Defines the interface for an object that tracks input fields. This interface is now poorly named,
- * in that it tracks errors that may <em>not</em> be associated with a specific field.
- * <p>
- * For each field, a flag is stored indicating if the field is, in fact, in error. The input
- * supplied by the client is stored so that if the form is re-rendered (as is typically done when
- * there are input errors), the value entered by the user is displayed back to the user. An error
- * message renderer is stored; this is an object that can render the error message (it is usually a
- * {@link org.apache.tapestry.valid.RenderString}wrapper around a simple string).
- * 
- * @author Howard Lewis Ship
- * @version $Id$
- * @since 1.0.8
- */
-
-public interface IFieldTracking
-{
-    /**
-     * Returns true if the field is in error (that is, if it has an error message
-     * {@link #getErrorRenderer() renderer}.
-     */
-
-    public boolean isInError();
-
-    /**
-     * Returns the field component. This may return null if the error is not associated with any
-     * particular field.
-     */
-
-    public IFormComponent getComponent();
-
-    /**
-     * Returns an object that will render the error message. Alternately, the
-     * <code>toString()</code> of the renderer can be used as a simple error message.
-     * 
-     * @since 1.0.9
-     */
-
-    public IRender getErrorRenderer();
-
-    /**
-     * Returns the invalid input recorded for the field. This is stored so that, on a subsequent
-     * render, the smae invalid input can be presented to the client to be corrected.
-     */
-
-    public String getInput();
-
-    /**
-     * Returns the name of the field, that is, the name assigned by the form (this will differ from
-     * the component's id when any kind of looping operation is in effect).
-     */
-
-    public String getFieldName();
-
-    /**
-     * Returns the validation constraint that was violated by the input. This may be null if the
-     * constraint isn't known.
-     */
-
-    public ValidationConstraint getConstraint();
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/valid/IValidationDelegate.java b/3.0.4/framework/src/org/apache/tapestry/valid/IValidationDelegate.java
deleted file mode 100644
index c869537..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/valid/IValidationDelegate.java
+++ /dev/null
@@ -1,250 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.valid;
-
-import java.util.List;
-
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRender;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.form.IFormComponent;
-
-/**
- * Interface used to track validation errors in forms and {@link IFormComponent}s (including
- * {@link org.apache.tapestry.form.AbstractTextField}and its subclasses).
- * <p>
- * In addition, controls how fields that are in error are presented (they can be marked in various
- * ways by the delegate; the default implementation adds two red asterisks to the right of the
- * field).
- * <p>
- * The interface is designed so that a single instance can be shared with many instances of
- * {@link IFormComponent}.
- * <p>
- * Starting with release 1.0.8, this interface was extensively revised (in a non-backwards
- * compatible way) to move the tracking of errors and invalid values (during a request cycle) to the
- * delegate. It has evolved from a largely stateless conduit for error messages into a very stateful
- * tracker of field state.
- * <p>
- * Starting with release 1.0.9, this interface was <em>again</em> reworked, to allow tracking of
- * errors in {@link IFormComponent form components}, and to allow unassociated (with any field)
- * errors to be tracked.
- * <p>
- * <b>Fields vs. Form Components </b> <br>
- * For most simple forms, these terms are pretty much synonymous. Your form will render normally,
- * and each form component will render only once. Some of your form components will be
- * {@link ValidField}components and handle most of their validation internally (with the help of
- * {@link IValidator}objects). In addition, your form listener may do additional validation and
- * notify the validation delegate of additional errors, some of which are associated with a
- * particular field, some of which are unassociated with any particular field.
- * <p>
- * But what happens if you use a {@link org.apache.tapestry.components.Foreach}or
- * {@link org.apache.tapestry.form.ListEdit}inside your form? Some of your components will render
- * multiple times. In this case you will have multiple <em>fields</em>. Each field will have a
- * unique field name (you can see this in the generated HTML). It is this field name that the
- * delegate keys off of, which means that some fields generated by a component may have errors and
- * some may not, it all works fine (with one exception).
- * <p>
- * <b>The Exception </b> <br>
- * The problem is that a component doesn't know its field name until its <code>render()</code>
- * method is invoked (at which point, it allocates a unique field name from the
- * {@link org.apache.tapestry.IForm#getElementId(org.apache.tapestry.form.IFormComponent)}. This is
- * not a problem for the field or its {@link IValidator}, but screws things up for the
- * {@link FieldLabel}.
- * <p>
- * Typically, the label is rendered <em>before</em> the corresponding form component. Form
- * components leave their last assigned field name in their
- * {@link IFormComponent#getName() name property}. So if the form component is in any kind of loop,
- * the {@link FieldLabel}will key its name, {@link IFormComponent#getDisplayName() display name}
- * and error status off of its last renderred value. So the moral of the story is don't use
- * {@link FieldLabel}in this situation.
- * 
- * @author Howard Lewis Ship
- */
-
-public interface IValidationDelegate
-{
-    /**
-     * Invoked before other methods to configure the delegate for the given form component. Sets the
-     * current field based on the {@link IFormComponent#getName() name}of the form component (which
-     * is almost always a {@link ValidField}).
-     * <p>
-     * The caller should invoke this with a parameter of null to record unassociated global errors
-     * (errors not associated with any particular field).
-     * 
-     * @since 1.0.8
-     */
-
-    public void setFormComponent(IFormComponent component);
-
-    /**
-     * Returns true if the current component is in error (that is, had bad input submitted by the
-     * end user).
-     * 
-     * @since 1.0.8
-     */
-
-    public boolean isInError();
-
-    /**
-     * Returns the string submitted by the client as the value for the current field.
-     * 
-     * @since 1.0.8
-     */
-
-    public String getFieldInputValue();
-
-    /**
-     * Returns a {@link List}of {@link IFieldTracking}, in default order (the order in which
-     * fields are renderred). A caller should not change the values (the List is immutable). May
-     * return null if no fields are in error.
-     * 
-     * @since 1.0.8
-     */
-
-    public List getFieldTracking();
-
-    /**
-     * Resets any tracking information for the current field. This will clear the field's inError
-     * flag, and set its error message and invalid input value to null.
-     * 
-     * @since 1.0.8
-     */
-
-    public void reset();
-
-    /**
-     * Clears all tracking information.
-     * 
-     * @since 1.0.10
-     */
-
-    public void clear();
-
-    /**
-     * Clears all errors, but maintains user input. This is useful when a form has been submitted
-     * for a semantic other than "process this data". A common example of this is a dependent drop
-     * down list; selecting an option in one drop down list forces a submit to repopulate the
-     * options in a second, dependent drop down list.
-     * <p>
-     * In these cases, the user input provided in the request is maintained, but any errors should
-     * be cleared out (to prevent unwanted error messages and decorations).
-     * 
-     * @since 3.0.1
-     */
-
-    public void clearErrors();
-
-    /**
-     * Records the user's input for the current form component. Input should be recorded even if
-     * there isn't an explicit error, since later form-wide validations may discover an error in the
-     * field.
-     * 
-     * @since 3.0
-     */
-
-    public void recordFieldInputValue(String input);
-
-    /**
-     * The error notification method, invoked during the rewind phase (that is, while HTTP
-     * parameters are being extracted from the request and assigned to various object properties).
-     * <p>
-     * Typically, the delegate simply invokes {@link #record(String, ValidationConstraint)}or
-     * {@link #record(IRender, ValidationConstraint)}, but special delegates may override this
-     * behavior to provide (in some cases) different error messages or more complicated error
-     * renderers.
-     */
-
-    public void record(ValidatorException ex);
-
-    /**
-     * Records an error in the current field, or an unassociated error if there is no current field.
-     * 
-     * @param message
-     *            message to display (@see RenderString}
-     * @param constraint
-     *            the constraint that was violated, or null if not known
-     * @since 1.0.9
-     */
-
-    public void record(String message, ValidationConstraint constraint);
-
-    /**
-     * Records an error in the current component, or an unassociated error. The maximum flexibility
-     * recorder.
-     * 
-     * @param errorRenderer
-     *            object that will render the error message (@see RenderString}. The object should
-     *            implement a reasonable <code>toString()</code> as well, to allow the error
-     *            message to be rendered using an Insert component, or used where full markup is not
-     *            allowed.
-     * @param constraint
-     *            the constraint that was violated, or null if not known
-     */
-
-    public void record(IRender errorRenderer, ValidationConstraint constraint);
-
-    /**
-     * Invoked before the field is rendered. If the field is in error, the delegate may decorate the
-     * field in some way (to highlight its error state).
-     */
-
-    public void writePrefix(IMarkupWriter writer, IRequestCycle cycle, IFormComponent component,
-            IValidator validator);
-
-    /**
-     * Invoked just before the &lt;input&gt; element is closed. The delegate can write additional
-     * attributes. This is often used to set the CSS class of the field so that it can be displayed
-     * differently, if in error (or required).
-     * 
-     * @since 1.0.5
-     */
-
-    public void writeAttributes(IMarkupWriter writer, IRequestCycle cycle,
-            IFormComponent component, IValidator validator);
-
-    /**
-     * Invoked after the form component is rendered, so that the delegate may decorate the form
-     * component (if it is in error).
-     */
-
-    public void writeSuffix(IMarkupWriter writer, IRequestCycle cycle, IFormComponent component,
-            IValidator validator);
-
-    /**
-     * Invoked by a {@link FieldLabel}just before writing the name of the form component.
-     */
-
-    public void writeLabelPrefix(IFormComponent component, IMarkupWriter writer, IRequestCycle cycle);
-
-    /**
-     * Invoked by a {@link FieldLabel}just after writing the name of the form component.
-     */
-
-    public void writeLabelSuffix(IFormComponent component, IMarkupWriter writer, IRequestCycle cycle);
-
-    /**
-     * Returns true if any form component has errors.
-     */
-
-    public boolean getHasErrors();
-
-    /**
-     * Returns the {@link IFieldTracking}for the current component, if any. Useful when displaying
-     * error messages for individual fields.
-     * 
-     * @since 3.0.2
-     */
-    public IFieldTracking getCurrentFieldTracking();
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/valid/IValidator.java b/3.0.4/framework/src/org/apache/tapestry/valid/IValidator.java
deleted file mode 100644
index 5d636d4..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/valid/IValidator.java
+++ /dev/null
@@ -1,79 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.valid;
-
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.form.IFormComponent;
-
-/**
- *  An object that works with an {@link IFormComponent} to format output
- *  (convert object values to strings values) and to process input
- *  (convert strings to object values and validate them).
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 1.0.8
- *
- **/
-
-public interface IValidator
-{
-    /**
-     *  All validators must implement a required property.  If true,
-     *  the client must supply a non-null value.
-     *
-     **/
-
-    public boolean isRequired();
-
-    /**
-     *  Invoked during rendering to convert an object value (which may be null)
-     *  to a String.  It is acceptible to return null.  The string will be the
-     *  VALUE attribute of the HTML text field.
-     *
-     **/
-
-    public String toString(IFormComponent field, Object value);
-
-    /**
-     *  Converts input, submitted by the client, into an object value.
-     *  May return null if the input is null (and the required flag is false).
-     *
-     *  <p>The input string will already have been trimmed.  It may be null.
-     *
-     *  @throws ValidatorException if the string cannot be converted into
-     *  an object, or the object is
-     *  not valid (due to other constraints).
-     **/
-
-    public Object toObject(IFormComponent field, String input) throws ValidatorException;
-
-    /**
-     *  Invoked by the field after it finishes rendering its tag (but before
-     *  the tag is closed) to allow the validator to provide a contribution to the
-     *  rendering process.  Validators typically generated client-side JavaScript
-     *  to peform validation.
-     *
-     *  @since 2.2
-     *
-     **/
-
-    public void renderValidatorContribution(
-        IFormComponent field,
-        IMarkupWriter writer,
-        IRequestCycle cycle);
-
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/valid/NumberValidator.java b/3.0.4/framework/src/org/apache/tapestry/valid/NumberValidator.java
deleted file mode 100644
index c48fb45..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/valid/NumberValidator.java
+++ /dev/null
@@ -1,682 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.valid;
-
-import java.math.BigDecimal;
-import java.math.BigInteger;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Map;
-import java.util.Set;
-
-import org.apache.tapestry.ApplicationRuntimeException;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.form.IFormComponent;
-import org.apache.tapestry.util.AdaptorRegistry;
-
-/**
- *  Simple validation for standard number classes.  This is probably insufficient
- *  for anything tricky and application specific, such as parsing currency.  
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 1.0.8
- *
- **/
-
-public class NumberValidator extends BaseValidator
-{
-    private static final Map TYPES = new HashMap();
-
-    static {
-        TYPES.put("boolean", boolean.class);
-        TYPES.put("Boolean", Boolean.class);
-        TYPES.put("java.lang.Boolean", Boolean.class);
-        TYPES.put("char", char.class);
-        TYPES.put("Character", Character.class);
-        TYPES.put("java.lang.Character", Character.class);
-        TYPES.put("short", short.class);
-        TYPES.put("Short", Short.class);
-        TYPES.put("java.lang.Short", Short.class);
-        TYPES.put("int", int.class);
-        TYPES.put("Integer", Integer.class);
-        TYPES.put("java.lang.Integer", Integer.class);
-        TYPES.put("long", long.class);
-        TYPES.put("Long", Long.class);
-        TYPES.put("java.lang.Long", Long.class);
-        TYPES.put("float", float.class);
-        TYPES.put("Float", Float.class);
-        TYPES.put("java.lang.Float", Float.class);
-        TYPES.put("byte", byte.class);
-        TYPES.put("Byte", Byte.class);
-        TYPES.put("java.lang.Byte", Byte.class);
-        TYPES.put("double", double.class);
-        TYPES.put("Double", Double.class);
-        TYPES.put("java.lang.Double", Double.class);
-        TYPES.put("java.math.BigInteger", BigInteger.class);
-        TYPES.put("java.math.BigDecimal", BigDecimal.class);
-    }
-
-    private static final Set INT_TYPES = new HashSet();
-
-    private Class _valueTypeClass = int.class;
-
-    private boolean _zeroIsNull;
-    private Number _minimum;
-    private Number _maximum;
-
-    private String _scriptPath = "/org/apache/tapestry/valid/NumberValidator.script";
-
-    private String _invalidNumericFormatMessage;
-    private String _invalidIntegerFormatMessage;
-    private String _numberTooSmallMessage;
-    private String _numberTooLargeMessage;
-    private String _numberRangeMessage;
-
-    private static AdaptorRegistry _numberAdaptors = new AdaptorRegistry();
-
-    public final static int NUMBER_TYPE_INTEGER = 0;
-	public final static int NUMBER_TYPE_REAL = 1;
-
-	/**
-	 * This class is not meant for use outside of NumberValidator; it
-	 * is public only to fascilitate some unit testing.
-	 * 
-	 */
-    public static abstract class NumberAdaptor
-    {
-        /**
-         *  Parses a non-empty {@link String} into the correct subclass of
-         *  {@link Number}.
-         *
-         *  @throws NumberFormatException if the String can not be parsed.
-         **/
-
-        abstract public Number parse(String value);
-
-        /**
-         *  Indicates the type of the number represented -- integer or real.
-         *  The information is used to build the client-side validator.  
-         *  This method could return a boolean, but returns an int to allow
-         *  future extensions of the validator.
-         *   
-         *  @return one of the predefined number types
-         **/
-        abstract public int getNumberType();
-
-        public int compare(Number left, Number right)
-        {
-            if (!left.getClass().equals(right.getClass()))
-                right = coerce(right);
-
-            Comparable lc = (Comparable) left;
-
-            return lc.compareTo(right);
-        }
-
-        /**
-         * Invoked when comparing two Numbers of different types.
-         * The number is cooerced from its ordinary type to 
-         * the correct type for comparison.
-         * 
-         * @since 3.0
-         */
-        protected abstract Number coerce(Number number);
-    }
-
-    private static abstract class IntegerNumberAdaptor extends NumberAdaptor
-    {
-        public int getNumberType()
-        {
-            return NUMBER_TYPE_INTEGER;
-        }
-    }
-
-    private static abstract class RealNumberAdaptor extends NumberAdaptor
-    {
-        public int getNumberType()
-        {
-            return NUMBER_TYPE_REAL;
-        }
-    }
-
-    private static class ByteAdaptor extends IntegerNumberAdaptor
-    {
-        public Number parse(String value)
-        {
-            return new Byte(value);
-        }
-
-        protected Number coerce(Number number)
-        {
-            return new Byte(number.byteValue());
-        }
-    }
-
-    private static class ShortAdaptor extends IntegerNumberAdaptor
-    {
-        public Number parse(String value)
-        {
-            return new Short(value);
-        }
-
-        protected Number coerce(Number number)
-        {
-            return new Short(number.shortValue());
-        }
-    }
-
-    private static class IntAdaptor extends IntegerNumberAdaptor
-    {
-        public Number parse(String value)
-        {
-            return new Integer(value);
-        }
-
-        protected Number coerce(Number number)
-        {
-            return new Integer(number.intValue());
-        }
-    }
-
-    private static class LongAdaptor extends IntegerNumberAdaptor
-    {
-        public Number parse(String value)
-        {
-            return new Long(value);
-        }
-
-        protected Number coerce(Number number)
-        {
-            return new Long(number.longValue());
-        }
-    }
-
-    private static class FloatAdaptor extends RealNumberAdaptor
-    {
-        public Number parse(String value)
-        {
-            return new Float(value);
-        }
-
-        protected Number coerce(Number number)
-        {
-            return new Float(number.floatValue());
-        }
-    }
-
-    private static class DoubleAdaptor extends RealNumberAdaptor
-    {
-        public Number parse(String value)
-        {
-            return new Double(value);
-        }
-
-        protected Number coerce(Number number)
-        {
-            return new Double(number.doubleValue());
-        }
-    }
-
-    private static class BigDecimalAdaptor extends RealNumberAdaptor
-    {
-        public Number parse(String value)
-        {
-            return new BigDecimal(value);
-        }
-
-        protected Number coerce(Number number)
-        {
-            return new BigDecimal(number.doubleValue());
-        }
-    }
-
-    private static class BigIntegerAdaptor extends IntegerNumberAdaptor
-    {
-        public Number parse(String value)
-        {
-            return new BigInteger(value);
-        }
-
-        protected Number coerce(Number number)
-        {
-            return new BigInteger(number.toString());
-        }
-    }
-
-    static {
-        NumberAdaptor byteAdaptor = new ByteAdaptor();
-        NumberAdaptor shortAdaptor = new ShortAdaptor();
-        NumberAdaptor intAdaptor = new IntAdaptor();
-        NumberAdaptor longAdaptor = new LongAdaptor();
-        NumberAdaptor floatAdaptor = new FloatAdaptor();
-        NumberAdaptor doubleAdaptor = new DoubleAdaptor();
-
-        _numberAdaptors.register(Byte.class, byteAdaptor);
-        _numberAdaptors.register(byte.class, byteAdaptor);
-        _numberAdaptors.register(Short.class, shortAdaptor);
-        _numberAdaptors.register(short.class, shortAdaptor);
-        _numberAdaptors.register(Integer.class, intAdaptor);
-        _numberAdaptors.register(int.class, intAdaptor);
-        _numberAdaptors.register(Long.class, longAdaptor);
-        _numberAdaptors.register(long.class, longAdaptor);
-        _numberAdaptors.register(Float.class, floatAdaptor);
-        _numberAdaptors.register(float.class, floatAdaptor);
-        _numberAdaptors.register(Double.class, doubleAdaptor);
-        _numberAdaptors.register(double.class, doubleAdaptor);
-
-        _numberAdaptors.register(BigDecimal.class, new BigDecimalAdaptor());
-        _numberAdaptors.register(BigInteger.class, new BigIntegerAdaptor());
-    }
-
-    public String toString(IFormComponent field, Object value)
-    {
-        if (value == null)
-            return null;
-
-        if (_zeroIsNull)
-        {
-            Number number = (Number) value;
-
-            if (number.doubleValue() == 0.0)
-                return null;
-        }
-
-        return value.toString();
-    }
-
-    private NumberAdaptor getAdaptor(IFormComponent field)
-    {
-        NumberAdaptor result = getAdaptor(_valueTypeClass);
-
-        if (result == null)
-            throw new ApplicationRuntimeException(
-                Tapestry.format(
-                    "NumberValidator.no-adaptor-for-field",
-                    field,
-                    _valueTypeClass.getName()));
-
-        return result;
-    }
-
-	/**
-	 * Returns an adaptor for the given type.
-	 * 
-	 * <p>
-	 * Note: this method exists only for testing purposes. It is not meant to
-	 * be invoked by user code and is subject to change at any time.
-	 * 
-	 * @param type the type (a Number subclass) for which to return an adaptor
-	 * @return the adaptor, or null if no such adaptor may be found
-	 * @since 3.0
-	 */
-    public static NumberAdaptor getAdaptor(Class type)
-    {
-        return (NumberAdaptor) _numberAdaptors.getAdaptor(type);
-    }
-
-    public Object toObject(IFormComponent field, String value) throws ValidatorException
-    {
-        if (checkRequired(field, value))
-            return null;
-
-        NumberAdaptor adaptor = getAdaptor(field);
-        Number result = null;
-
-        try
-        {
-            result = adaptor.parse(value);
-        }
-        catch (NumberFormatException ex)
-        {
-            throw new ValidatorException(
-                buildInvalidNumericFormatMessage(field),
-                ValidationConstraint.NUMBER_FORMAT);
-        }
-
-        if (_minimum != null && adaptor.compare(result, _minimum) < 0)
-            throw new ValidatorException(
-                buildNumberTooSmallMessage(field),
-                ValidationConstraint.TOO_SMALL);
-
-        if (_maximum != null && adaptor.compare(result, _maximum) > 0)
-            throw new ValidatorException(
-                buildNumberTooLargeMessage(field),
-                ValidationConstraint.TOO_LARGE);
-
-        return result;
-    }
-
-    public Number getMaximum()
-    {
-        return _maximum;
-    }
-
-    public boolean getHasMaximum()
-    {
-        return _maximum != null;
-    }
-
-    public void setMaximum(Number maximum)
-    {
-        _maximum = maximum;
-    }
-
-    public Number getMinimum()
-    {
-        return _minimum;
-    }
-
-    public boolean getHasMinimum()
-    {
-        return _minimum != null;
-    }
-
-    public void setMinimum(Number minimum)
-    {
-        _minimum = minimum;
-    }
-
-    /**
-     *  If true, then when rendering, a zero is treated as a non-value, and null is returned.
-     *  If false, the default, then zero is rendered as zero.
-     * 
-     **/
-
-    public boolean getZeroIsNull()
-    {
-        return _zeroIsNull;
-    }
-
-    public void setZeroIsNull(boolean zeroIsNull)
-    {
-        _zeroIsNull = zeroIsNull;
-    }
-
-    /** 
-     * 
-     *  @since 2.2
-     * 
-     **/
-
-    public void renderValidatorContribution(
-        IFormComponent field,
-        IMarkupWriter writer,
-        IRequestCycle cycle)
-    {
-        if (!isClientScriptingEnabled())
-            return;
-
-        if (!(isRequired() || _minimum != null || _maximum != null))
-            return;
-
-        Map symbols = new HashMap();
-
-        if (isRequired())
-            symbols.put("requiredMessage", buildRequiredMessage(field));
-
-        if (isIntegerNumber())
-            symbols.put("formatMessage", buildInvalidIntegerFormatMessage(field));
-        else
-            symbols.put("formatMessage", buildInvalidNumericFormatMessage(field));
-
-        if (_minimum != null || _maximum != null)
-            symbols.put("rangeMessage", buildRangeMessage(field));
-
-        processValidatorScript(_scriptPath, cycle, field, symbols);
-    }
-
-    private String buildRangeMessage(IFormComponent field)
-    {
-        if (_minimum != null && _maximum != null)
-            return buildNumberRangeMessage(field);
-
-        if (_maximum != null)
-            return buildNumberTooLargeMessage(field);
-
-        return buildNumberTooSmallMessage(field);
-    }
-
-    /**
-     *  @since 2.2
-     * 
-     **/
-
-    public String getScriptPath()
-    {
-        return _scriptPath;
-    }
-
-    /**
-     *  Allows a developer to use the existing validation logic with a different client-side
-     *  script.  This is often sufficient to allow application-specific error presentation
-     *  (perhaps by using DHTML to update the content of a &lt;span&gt; tag, or to use
-     *  a more sophisticated pop-up window than <code>window.alert()</code>).
-     * 
-     *  @since 2.2
-     * 
-     **/
-
-    public void setScriptPath(String scriptPath)
-    {
-        _scriptPath = scriptPath;
-    }
-
-    /** Sets the value type from a string type name.  The name may be
-     *  a scalar numeric type, a fully qualified class name, or the name
-     *  of a numeric wrapper type from java.lang (with the package name omitted).
-     * 
-     * @since 3.0 
-     * 
-     **/
-
-    public void setValueType(String typeName)
-    {
-        Class typeClass = (Class) TYPES.get(typeName);
-
-        if (typeClass == null)
-            throw new ApplicationRuntimeException(
-                Tapestry.format("NumberValidator.unknown-type", typeName));
-
-        _valueTypeClass = typeClass;
-    }
-
-    /** @since 3.0 **/
-
-    public void setValueTypeClass(Class valueTypeClass)
-    {
-        _valueTypeClass = valueTypeClass;
-    }
-
-    /** 
-     *  
-     *  Returns the value type to convert strings back into.  The default is int.
-     * 
-     *  @since 3.0 
-     * 
-     **/
-
-    public Class getValueTypeClass()
-    {
-        return _valueTypeClass;
-    }
-
-    /** @since 3.0 */
-
-    public String getInvalidNumericFormatMessage()
-    {
-        return _invalidNumericFormatMessage;
-    }
-
-    /** @since 3.0 */
-
-    public String getInvalidIntegerFormatMessage()
-    {
-        return _invalidIntegerFormatMessage;
-    }
-
-    /** @since 3.0 */
-
-    public String getNumberRangeMessage()
-    {
-        return _numberRangeMessage;
-    }
-
-    /** @since 3.0 */
-
-    public String getNumberTooLargeMessage()
-    {
-        return _numberTooLargeMessage;
-    }
-
-    /** @since 3.0 */
-
-    public String getNumberTooSmallMessage()
-    {
-        return _numberTooSmallMessage;
-    }
-
-    /** 
-     * Overrides the <code>invalid-numeric-format</code> bundle key.
-     * Parameter {0} is the display name of the field.
-     * 
-     * @since 3.0
-     */
-
-    public void setInvalidNumericFormatMessage(String string)
-    {
-        _invalidNumericFormatMessage = string;
-    }
-
-    /** 
-     * Overrides the <code>invalid-int-format</code> bundle key.
-     * Parameter {0} is the display name of the field.
-     * 
-     * @since 3.0
-     */
-
-    public void setInvalidIntegerFormatMessage(String string)
-    {
-        _invalidIntegerFormatMessage = string;
-    }
-
-    /** @since 3.0 */
-
-    protected String buildInvalidNumericFormatMessage(IFormComponent field)
-    {
-        String pattern =
-            getPattern(
-                getInvalidNumericFormatMessage(),
-                "invalid-numeric-format",
-                field.getPage().getLocale());
-
-        return formatString(pattern, field.getDisplayName());
-    }
-
-    /** @since 3.0 */
-
-    protected String buildInvalidIntegerFormatMessage(IFormComponent field)
-    {
-        String pattern =
-            getPattern(
-                getInvalidIntegerFormatMessage(),
-                "invalid-int-format",
-                field.getPage().getLocale());
-
-        return formatString(pattern, field.getDisplayName());
-    }
-
-    /** 
-     * Overrides the <code>number-range</code> bundle key.
-     * Parameter [0} is the display name of the field.
-     * Parameter {1} is the minimum value.
-     * Parameter {2} is the maximum value.
-     * 
-     * @since 3.0
-     */
-
-    public void setNumberRangeMessage(String string)
-    {
-        _numberRangeMessage = string;
-    }
-
-    protected String buildNumberRangeMessage(IFormComponent field)
-    {
-        String pattern =
-            getPattern(_numberRangeMessage, "number-range", field.getPage().getLocale());
-
-        return formatString(pattern, new Object[] { field.getDisplayName(), _minimum, _maximum });
-    }
-
-    /**
-     *  Overrides the <code>number-too-large</code> bundle key.
-     *  Parameter {0} is the display name of the field.
-     *  Parameter {1} is the maximum allowed value.
-     *  
-     *  @since 3.0
-     */
-
-    public void setNumberTooLargeMessage(String string)
-    {
-        _numberTooLargeMessage = string;
-    }
-
-    /** @since 3.0 */
-
-    protected String buildNumberTooLargeMessage(IFormComponent field)
-    {
-        String pattern =
-            getPattern(_numberTooLargeMessage, "number-too-large", field.getPage().getLocale());
-
-        return formatString(pattern, field.getDisplayName(), _maximum);
-    }
-
-    /**
-     *  Overrides the <code>number-too-small</code> bundle key.
-     *  Parameter {0} is the display name of the field.
-     *  Parameter {1} is the minimum allowed value.
-     * 
-     *  @since 3.0
-     * 
-     */
-
-    public void setNumberTooSmallMessage(String string)
-    {
-        _numberTooSmallMessage = string;
-    }
-
-    /** @since 3.0 */
-
-    protected String buildNumberTooSmallMessage(IFormComponent field)
-    {
-        String pattern =
-            getPattern(_numberTooSmallMessage, "number-too-small", field.getPage().getLocale());
-
-        return formatString(pattern, field.getDisplayName(), _minimum);
-    }
-
-    /** @since 3.0 */
-
-    public boolean isIntegerNumber()
-    {
-        NumberAdaptor result = (NumberAdaptor) _numberAdaptors.getAdaptor(_valueTypeClass);
-        if (result == null)
-            return false;
-
-        return result.getNumberType() == NUMBER_TYPE_INTEGER;
-    }
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/valid/NumberValidator.script b/3.0.4/framework/src/org/apache/tapestry/valid/NumberValidator.script
deleted file mode 100644
index 78924da..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/valid/NumberValidator.script
+++ /dev/null
@@ -1,68 +0,0 @@
-<?xml version="1.0"?>
-<!-- $Id$ -->
-<!DOCTYPE script PUBLIC
-	"-//Apache Software Foundation//Tapestry Script Specification 3.0//EN"
-	"http://jakarta.apache.org/tapestry/dtd/Script_3_0.dtd">
-	
-<!-- 
-
-  Creates a script for validating that a field is required and/or has a minimum
-  field length.
-  
-  Input symbols:
-     field, form, validator:  As normal for a validation script.
-     formatMessage: Message displayed if the input is not valid.
-	 requiredMessage: Message to display if the field is required yet blank.
-	 rangeMessage: Message to display if the field is not in the expected range. 
-     formatExpression: Regular expression for the field.
--->
-	
-<script>
-
-<include-script resource-path="/org/apache/tapestry/valid/Validator.js"/>
-
-<input-symbol key="field" class="org.apache.tapestry.valid.ValidField" required="yes"/>
-<input-symbol key="form" class="org.apache.tapestry.IForm" required="yes"/>
-<input-symbol key="validator" class="org.apache.tapestry.valid.NumberValidator" required="yes"/>
-<input-symbol key="formatMessage" class="java.lang.String" required="yes"/>
-<input-symbol key="requiredMessage" class="java.lang.String"/>
-<input-symbol key="rangeMessage" class="java.lang.String"/>
-
-<let key="function" unique="yes">
-validate_${field.name}
-</let>
-
-<body>
-function ${function}()
-{
-  var field = document.${form.name}.${field.name}; 
-  var stringValue = field.value;  
-<if expression="validator.required">
-  if (stringValue.length == 0)
-     return validator_invalid_field(field, "${requiredMessage}");
-</if>
-<if-not expression="validator.required">
-  if (stringValue.length == 0)
-     return true;
-</if-not>
-  var value = stringValue * 1;
-  if (isNaN(value))
-      return validator_invalid_field(field, "${formatMessage}");
-<if expression="validator.integerNumber">
-  var regex = /\./;
-  if (stringValue.search(regex) != -1)
-      return validator_invalid_field(field, "${formatMessage}");
-</if>
-<if expression="validator.minimum != null">
-  if (value &lt; ${validator.minimum})
-     return validator_invalid_field(field, "${rangeMessage}");
-</if>
-<if expression="validator.maximum != null">
-  if (value &gt; ${validator.maximum})
-     return validator_invalid_field(field, "${rangeMessage}");
-</if>
-  return true;
-}
-</body>
-
-</script>
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/valid/PatternDelegate.java b/3.0.4/framework/src/org/apache/tapestry/valid/PatternDelegate.java
deleted file mode 100644
index 399eeff..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/valid/PatternDelegate.java
+++ /dev/null
@@ -1,42 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.valid;
-
-/**
- * Implementations of this interface will provide pattern utility services.
- * 
- * @author  Harish Krishnaswamy
- * @version $Id$
- * @since   3.0
- */
-public interface PatternDelegate
-{
-    /**
-     * Answers the question whether the input string fulfills the pattern string provided.
-     * 
-     * @param patternString The pattern that the input string is compared against.
-     * @param input The string under test.
-     * @return Returns true if the pattern exists in the input string; returns false otherwise.
-     */
-    public boolean contains(String patternString, String input);
-    
-    /**
-     * Returns the escaped sequence of characters representing the pattern string provided.
-     * 
-     * @param patternString The raw sequence of characters that represent the pattern.
-     * @return The escaped sequence of characters that represent the pattern.
-     */
-    public String getEscapedPatternString(String patternString);
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/valid/PatternValidator.java b/3.0.4/framework/src/org/apache/tapestry/valid/PatternValidator.java
deleted file mode 100644
index 275aaca..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/valid/PatternValidator.java
+++ /dev/null
@@ -1,255 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.valid;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import org.apache.tapestry.ApplicationRuntimeException;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.form.IFormComponent;
-import org.apache.tapestry.util.RegexpMatcher;
-
-/**
- * <p>The validator bean that provides a pattern validation service.
- * 
- * <p>The actual pattern matching algorithm is provided by the 
- * {@link org.apache.tapestry.valid.PatternDelegate}. This enables the user to provide
- * custom pattern matching implementations. In the event a custom implementation is not 
- * provided, this validator will use the {@link org.apache.tapestry.util.RegexpMatcher}.
- * 
- * <p>This validator has the ability to provide client side validation on demand. 
- * To enable client side validation simply set the <code>clientScriptingEnabled</code>
- * property to <code>true</code>.
- * The default implementation of the script will be in JavaScript and allows the user to 
- * override this with a custom implementation by setting the path to the custom  
- * script via {@link #setScriptPath(String)}.
- * 
- * @author  Harish Krishnaswamy
- * @version $Id$
- * @since   3.0
- */
-public class PatternValidator extends BaseValidator
-{
-    /**
-     * The pattern that this validator will use to validate the input. The default 
-     * pattern is an empty string.
-     */
-    private String _patternString = "";
-
-    /**
-     * A custom message in the event of a validation failure.
-     */
-    private String _patternNotMatchedMessage;
-
-    /**
-     * The object that handles pattern matching.
-     */
-    private PatternDelegate _patternDelegate;
-
-    /**
-     * The location of the script specification for client side validation.
-     */
-    private String _scriptPath = "/org/apache/tapestry/valid/PatternValidator.script";
-
-    /**
-     * Returns custom validation failure message. The default message comes from 
-     * <code>ValidationStrings.properties</code> file for key 
-     * <code>pattern-not-matched</code>.
-     */
-    public String getPatternNotMatchedMessage()
-    {
-        return _patternNotMatchedMessage;
-    }
-
-    /**
-     * Returns the pattern that this validator uses for validation.
-     */
-    public String getPatternString()
-    {
-        return _patternString;
-    }
-
-    /**
-     * Allows for a custom message to be set typically via the bean specification.
-     */
-    public void setPatternNotMatchedMessage(String message)
-    {
-        _patternNotMatchedMessage = message;
-    }
-
-    /**
-     * Allows the user to change the validation pattern. 
-     */
-    public void setPatternString(String pattern)
-    {
-        _patternString = pattern;
-    }
-
-    /**
-     * Static inner class that acts as a delegate to RegexpMatcher and conforms to the 
-     * PatternDelegate contract.
-     */
-    private static class RegExpDelegate implements PatternDelegate
-    {
-        private RegexpMatcher _matcher;
-
-        private RegexpMatcher getPatternMatcher()
-        {
-            if (_matcher == null)
-                _matcher = new RegexpMatcher();
-
-            return _matcher;
-        }
-
-        public boolean contains(String patternString, String input)
-        {
-            return getPatternMatcher().contains(patternString, input);
-        }
-
-        public String getEscapedPatternString(String patternString)
-        {
-            return getPatternMatcher().getEscapedPatternString(patternString);
-        }
-    }
-
-    /**
-     * Allows for a custom implementation to do the pattern matching. The default pattern 
-     * matching is done with {@link org.apache.tapestry.util.RegexpMatcher}.
-     */
-    public void setPatternDelegate(PatternDelegate patternDelegate)
-    {
-        _patternDelegate = patternDelegate;
-    }
-
-    /**
-     * Returns the custom pattern matcher if one is provided or creates and returns the 
-     * default matcher laziliy.
-     */
-    public PatternDelegate getPatternDelegate()
-    {
-        if (_patternDelegate == null)
-            _patternDelegate = new RegExpDelegate();
-
-        return _patternDelegate;
-    }
-
-    /**
-     * @see org.apache.tapestry.valid.IValidator#toString(org.apache.tapestry.form.IFormComponent, java.lang.Object)
-     */
-    public String toString(IFormComponent field, Object value)
-    {
-        if (value == null)
-            return null;
-
-        return value.toString();
-    }
-
-    private String buildPatternNotMatchedMessage(IFormComponent field, String patternString)
-    {
-        String templateMessage =
-            getPattern(
-                _patternNotMatchedMessage,
-                "pattern-not-matched",
-                field.getPage().getLocale());
-
-        return formatString(templateMessage, field.getDisplayName(), patternString);
-    }
-
-    /**
-     * @see org.apache.tapestry.valid.IValidator#toObject(org.apache.tapestry.form.IFormComponent, java.lang.String)
-     */
-    public Object toObject(IFormComponent field, String input) throws ValidatorException
-    {
-        if (checkRequired(field, input))
-            return null;
-
-        boolean matched = false;
-
-        try
-        {
-            matched = getPatternDelegate().contains(_patternString, input);
-        }
-        catch (Throwable t)
-        {
-            throw new ApplicationRuntimeException(
-                Tapestry.format(
-                    "PatternValidator.pattern-match-error",
-                    _patternString,
-                    field.getDisplayName()),
-                field,
-                field.getLocation(),
-                t);
-        }
-
-        if (!matched)
-            throw new ValidatorException(
-                buildPatternNotMatchedMessage(field, _patternString),
-                ValidationConstraint.PATTERN_MISMATCH);
-
-        return input;
-    }
-
-    /**
-     * Allows for a custom implementation of the client side validation.
-     */
-    public void setScriptPath(String scriptPath)
-    {
-        _scriptPath = scriptPath;
-    }
-
-    /**
-     * @see org.apache.tapestry.valid.IValidator#renderValidatorContribution(org.apache.tapestry.form.IFormComponent, org.apache.tapestry.IMarkupWriter, org.apache.tapestry.IRequestCycle)
-     */
-    public void renderValidatorContribution(
-        IFormComponent field,
-        IMarkupWriter writer,
-        IRequestCycle cycle)
-    {
-        if (!isClientScriptingEnabled())
-            return;
-
-        Map symbols = new HashMap();
-
-        if (isRequired())
-            symbols.put("requiredMessage", buildRequiredMessage(field));
-
-        symbols.put(
-            "patternNotMatchedMessage",
-            buildPatternNotMatchedMessage(field, getEscapedPatternString()));
-
-        processValidatorScript(_scriptPath, cycle, field, symbols);
-    }
-
-    /**
-     * Returns the escaped sequence of the pattern string for rendering in the error message. 
-     */
-    public String getEscapedPatternString()
-    {
-        return getPatternDelegate().getEscapedPatternString(_patternString);
-    }
-
-    public String toString()
-    {
-        return "Pattern: "
-            + _patternString
-            + "; Script Path: "
-            + _scriptPath
-            + "; Pattern Delegate: "
-            + _patternDelegate;
-    }
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/valid/PatternValidator.script b/3.0.4/framework/src/org/apache/tapestry/valid/PatternValidator.script
deleted file mode 100644
index fdaef23..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/valid/PatternValidator.script
+++ /dev/null
@@ -1,52 +0,0 @@
-<?xml version="1.0"?>

-<!-- $Id: $ -->

-<!DOCTYPE script PUBLIC

-	"-//Apache Software Foundation//Tapestry Script Specification 3.0//EN"

-	"http://jakarta.apache.org/tapestry/dtd/Script_3_0.dtd">

-<!-- 

-

-  Creates a script for validating that a field matches a required pattern.

-  

-  Input symbols:

-     field, form, validator:  As normal for a validation script.

-	 requiredMessage: Message to display if the field is required yet blank.

-	 patternNotMatchedMessage: Message to display if the field does not fulfill the required pattern.

-     

--->

-	

-<script>

-

-<include-script resource-path="/org/apache/tapestry/valid/Validator.js"/>

-

-<input-symbol key="field" class="org.apache.tapestry.valid.ValidField" required="yes"/>

-<input-symbol key="form" class="org.apache.tapestry.IForm" required="yes"/>

-<input-symbol key="validator" class="org.apache.tapestry.valid.PatternValidator" required="yes"/>

-<input-symbol key="requiredMessage" class="java.lang.String"/>

-<input-symbol key="patternNotMatchedMessage" class="java.lang.String" required="yes"/>

-

-<let key="function" unique="yes">

-    validate_${field.name}

-</let>

-

-<let key="pattern" unique="yes">

-    pattern_${field.name}

-</let>

-

-<body>

-var ${pattern} = new RegExp("${validator.escapedPatternString}");

-

-function ${function}()

-{

-    var field = document.${form.name}.${field.name};

-<if expression="validator.required">

-    if (field.value.length == 0)

-        return validator_invalid_field(field, "${requiredMessage}");

-</if>

-    if (field.value.length &gt; 0 &amp;&amp; !${pattern}.test(field.value))

-        return validator_invalid_field(field, "${patternNotMatchedMessage}");

-

-    return true;

-}

-</body>

-

-</script>
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/valid/RenderString.java b/3.0.4/framework/src/org/apache/tapestry/valid/RenderString.java
deleted file mode 100644
index 402aa63..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/valid/RenderString.java
+++ /dev/null
@@ -1,83 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.valid;
-
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRender;
-import org.apache.tapestry.IRequestCycle;
-
-/**
- * A wrapper around {@link String}that allows the String to be renderred. This is primarily used to
- * present error messages.
- * 
- * @author Howard Lewis Ship
- */
-
-public class RenderString implements IRender
-{
-    private String _string;
-
-    private boolean _raw = false;
-
-    public RenderString(String string)
-    {
-        _string = string;
-    }
-
-    /**
-     * @param string
-     *            the string to render
-     * @param raw
-     *            if true, the String is rendered as-is, with no filtering. If false (the default),
-     *            the String is filtered.
-     */
-
-    public RenderString(String string, boolean raw)
-    {
-        _string = string;
-        _raw = raw;
-    }
-
-    /**
-     * Renders the String to the writer. Does nothing if the string is null. If raw is true, uses
-     * {@link IMarkupWriter#printRaw(String)}, otherwise {@link IMarkupWriter#print(String)}.
-     */
-
-    public void render(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        if (_string == null)
-            return;
-
-        if (_raw)
-            writer.printRaw(_string);
-        else
-            writer.print(_string);
-    }
-
-    public String getString()
-    {
-        return _string;
-    }
-
-    public boolean isRaw()
-    {
-        return _raw;
-    }
-
-    public String toString()
-    {
-        return _string;
-    }
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/valid/StringValidator.java b/3.0.4/framework/src/org/apache/tapestry/valid/StringValidator.java
deleted file mode 100644
index a61bdb5..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/valid/StringValidator.java
+++ /dev/null
@@ -1,168 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.valid;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.form.IFormComponent;
-
-/**
- *  Simple validation of strings, to enforce required, and minimum length
- *  (maximum length is enforced in the client browser, by setting a maximum input
- *  length on the text field).
- *
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 1.0.8
- *
- **/
-
-public class StringValidator extends BaseValidator
-{
-    private int _minimumLength;
-
-    private String _minimumLengthMessage;
-
-    /** @since 2.2 **/
-
-    private String _scriptPath = "/org/apache/tapestry/valid/StringValidator.script";
-
-    public StringValidator()
-    {
-    }
-
-    private StringValidator(boolean required)
-    {
-        super(required);
-    }
-
-    public String toString(IFormComponent field, Object value)
-    {
-        if (value == null)
-            return null;
-
-        return value.toString();
-    }
-
-    public Object toObject(IFormComponent field, String input) throws ValidatorException
-    {
-        if (checkRequired(field, input))
-            return null;
-
-        if (_minimumLength > 0 && input.length() < _minimumLength)
-            throw new ValidatorException(
-                buildMinimumLengthMessage(field),
-                ValidationConstraint.MINIMUM_WIDTH);
-
-        return input;
-    }
-
-    public int getMinimumLength()
-    {
-        return _minimumLength;
-    }
-
-    public void setMinimumLength(int minimumLength)
-    {
-        _minimumLength = minimumLength;
-    }
-
-    /** 
-     * 
-     *  @since 2.2
-     * 
-     **/
-
-    public void renderValidatorContribution(
-        IFormComponent field,
-        IMarkupWriter writer,
-        IRequestCycle cycle)
-    {
-        if (!isClientScriptingEnabled())
-            return;
-
-        if (!(isRequired() || _minimumLength > 0))
-            return;
-
-        Map symbols = new HashMap();
-
-        if (isRequired())
-            symbols.put("requiredMessage", buildRequiredMessage(field));
-
-        if (_minimumLength > 0)
-            symbols.put("minimumLengthMessage", buildMinimumLengthMessage(field));
-
-        processValidatorScript(_scriptPath, cycle, field, symbols);
-    }
-
-    /**
-     *  @since 2.2
-     * 
-     **/
-
-    public String getScriptPath()
-    {
-        return _scriptPath;
-    }
-
-    /**
-     *  Allows a developer to use the existing validation logic with a different client-side
-     *  script.  This is often sufficient to allow application-specific error presentation
-     *  (perhaps by using DHTML to update the content of a &lt;span&gt; tag, or to use
-     *  a more sophisticated pop-up window than <code>window.alert()</code>).
-     * 
-     *  @since 2.2
-     * 
-     **/
-
-    public void setScriptPath(String scriptPath)
-    {
-        _scriptPath = scriptPath;
-    }
-
-    /** @since 3.0 */
-    public String getMinimumLengthMessage()
-    {
-        return _minimumLengthMessage;
-    }
-
-    /** 
-     * Overrides the <code>field-too-short</code> bundle key.
-     * Parameter {0} is the minimum length.
-     * Parameter {1} is the display name of the field.
-     * 
-     * @since 3.0
-     */
-
-    public void setMinimumLengthMessage(String string)
-    {
-        _minimumLengthMessage = string;
-    }
-
-    /** @since 3.0 */
-
-    protected String buildMinimumLengthMessage(IFormComponent field)
-    {
-        String pattern =
-            getPattern(_minimumLengthMessage, "field-too-short", field.getPage().getLocale());
-
-        return formatString(pattern, Integer.toString(_minimumLength), field.getDisplayName());
-    }
-
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/valid/StringValidator.script b/3.0.4/framework/src/org/apache/tapestry/valid/StringValidator.script
deleted file mode 100644
index ff508ed..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/valid/StringValidator.script
+++ /dev/null
@@ -1,54 +0,0 @@
-<?xml version="1.0"?>
-<!-- $Id$ -->
-<!DOCTYPE script PUBLIC
-	"-//Apache Software Foundation//Tapestry Script Specification 3.0//EN"
-	"http://jakarta.apache.org/tapestry/dtd/Script_3_0.dtd">
-<!--
-
-  Creates a script for validating that a field is required and/or has a minimum
-  field length.
-
-  Input symbols:
-     field, form, validator:  As normal for a validation script.
-	 requiredMessage: Message to display if the field is required yet blank.
-	 minimumLengthMessage: Message to display if the field length is too short.
-
--->
-
-<script>
-
-<include-script resource-path="/org/apache/tapestry/valid/Validator.js"/>
-
-<input-symbol key="field" class="org.apache.tapestry.valid.ValidField" required="yes"/>
-<input-symbol key="form" class="org.apache.tapestry.IForm" required="yes"/>
-<input-symbol key="validator" class="org.apache.tapestry.valid.StringValidator" required="yes"/>
-<input-symbol key="requiredMessage" class="java.lang.String"/>
-<input-symbol key="minimumLengthMessage" class="java.lang.String"/>
-
-<let key="function" unique="yes">
-validate_${field.name}
-</let>
-
-<body>
-function ${function}()
-{
-  var field = document.${form.name}.${field.name};
-<if expression="validator.required">
-  if (field.value.length == 0)
-     return validator_invalid_field(field, "${requiredMessage}");
-</if>
-
-<if-not expression="validator.required">
-  if (field.value.length == 0)
-     return true;
-</if-not>
-
-<if expression="validator.minimumLength">
-  if (field.value.length &lt; ${validator.minimumLength})
-     return validator_invalid_field(field, "${minimumLengthMessage}");
-</if>
-  return true;
-}
-</body>
-
-</script>
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/valid/UrlValidator.java b/3.0.4/framework/src/org/apache/tapestry/valid/UrlValidator.java
deleted file mode 100644
index 280a900..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/valid/UrlValidator.java
+++ /dev/null
@@ -1,276 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.valid;
-
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Locale;
-import java.util.Map;
-import java.util.ResourceBundle;
-import java.util.Vector;
-
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.form.IFormComponent;
-import org.apache.tapestry.util.StringSplitter;
-
-/**
- *
- *  @version $Id$
- *  @since 3.0
- *
- **/
-public class UrlValidator extends BaseValidator {
-	private int _minimumLength;
-	private String _minimumLengthMessage;
-	private String _invalidUrlFormatMessage;
-	private String _disallowedProtocolMessage;
-	private Collection _allowedProtocols;
-
-	private String _scriptPath = "/org/apache/tapestry/valid/UrlValidator.script"; //$NON-NLS-1$
-
-	public UrlValidator() {
-	}
-
-	private UrlValidator(boolean required) {
-		super(required);
-	}
-
-	public String toString(IFormComponent field, Object value) {
-		if (value == null)
-			return null;
-
-		return value.toString();
-	}
-
-	public Object toObject(IFormComponent field, String input)
-		throws ValidatorException {
-		if (checkRequired(field, input))
-			return null;
-
-		if (_minimumLength > 0 && input.length() < _minimumLength)
-			throw new ValidatorException(
-				buildMinimumLengthMessage(field),
-				ValidationConstraint.MINIMUM_WIDTH);
-
-		if (!isValidUrl(input))
-			throw new ValidatorException(
-				buildInvalidUrlFormatMessage(field),
-				ValidationConstraint.URL_FORMAT);
-
-		if (!isAllowedProtocol(input)) {
-			throw new ValidatorException(
-				buildDisallowedProtocolMessage(field),
-				ValidationConstraint.DISALLOWED_PROTOCOL);
-		}
-
-		return input;
-	}
-
-	public int getMinimumLength() {
-		return _minimumLength;
-	}
-
-	public void setMinimumLength(int minimumLength) {
-		_minimumLength = minimumLength;
-	}
-
-	public void renderValidatorContribution(
-		IFormComponent field,
-		IMarkupWriter writer,
-		IRequestCycle cycle) {
-		if (!isClientScriptingEnabled())
-			return;
-
-		Map symbols = new HashMap();
-
-		if (isRequired())
-			symbols.put("requiredMessage", buildRequiredMessage(field)); //$NON-NLS-1$
-
-		if (_minimumLength > 0)
-			symbols.put("minimumLengthMessage", //$NON-NLS-1$
-			buildMinimumLengthMessage(field));
-
-		symbols.put("urlFormatMessage", buildInvalidUrlFormatMessage(field)); //$NON-NLS-1$
-
-		symbols.put("urlDisallowedProtocolMessage", //$NON-NLS-1$
-		buildDisallowedProtocolMessage(field));
-
-		symbols.put("urlRegexpProtocols", buildUrlRegexpProtocols()); //$NON-NLS-1$
-
-		processValidatorScript(_scriptPath, cycle, field, symbols);
-	}
-
-	private String buildUrlRegexpProtocols() {
-		if(_allowedProtocols == null) {
-			return null;
-		}
-		String regexp = "/("; //$NON-NLS-1$
-		Iterator iter = _allowedProtocols.iterator();
-		while (iter.hasNext()) {
-			String protocol = (String) iter.next();
-			regexp += protocol;
-			if (iter.hasNext()) {
-				regexp += "|"; //$NON-NLS-1$
-			}
-		}
-		regexp += "):///"; //$NON-NLS-1$
-		return regexp;
-	}
-
-	public String getScriptPath() {
-		return _scriptPath;
-	}
-
-	public void setScriptPath(String scriptPath) {
-		_scriptPath = scriptPath;
-	}
-
-	protected boolean isValidUrl(String url) {
-		boolean bIsValid;
-		try {
-			new URL(url);
-			bIsValid = true;
-		} catch (MalformedURLException mue) {
-			bIsValid = false;
-		}
-		return bIsValid;
-	}
-
-	protected boolean isAllowedProtocol(String url) {
-		boolean bIsAllowed = false;
-		if (_allowedProtocols != null) {
-			URL oUrl;
-			try {
-				oUrl = new URL(url);
-			} catch (MalformedURLException e) {
-				return false;
-			}
-			String actualProtocol = oUrl.getProtocol();
-			Iterator iter = _allowedProtocols.iterator();
-			while (iter.hasNext()) {
-				String protocol = (String) iter.next();
-				if (protocol.equals(actualProtocol)) {
-					bIsAllowed = true;
-					break;
-				}
-			}
-		} else {
-			bIsAllowed = true;
-		}
-		return bIsAllowed;
-	}
-
-	public String getInvalidUrlFormatMessage() {
-		return _invalidUrlFormatMessage;
-	}
-
-	public String getMinimumLengthMessage() {
-		return _minimumLengthMessage;
-	}
-
-	public void setInvalidUrlFormatMessage(String string) {
-		_invalidUrlFormatMessage = string;
-	}
-
-	public String getDisallowedProtocolMessage() {
-		return _disallowedProtocolMessage;
-	}
-
-	public void setDisallowedProtocolMessage(String string) {
-		_disallowedProtocolMessage = string;
-	}
-
-	public void setMinimumLengthMessage(String string) {
-		_minimumLengthMessage = string;
-	}
-
-	protected String buildMinimumLengthMessage(IFormComponent field) {
-			String pattern = getPattern(_minimumLengthMessage, "field-too-short", //$NON-NLS-1$
-	field.getPage().getLocale());
-
-		return formatString(
-			pattern,
-			Integer.toString(_minimumLength),
-			field.getDisplayName());
-	}
-
-	protected String buildInvalidUrlFormatMessage(IFormComponent field) {
-			String pattern = getPattern(_invalidUrlFormatMessage, "invalid-url-format", //$NON-NLS-1$
-	field.getPage().getLocale());
-
-		return formatString(pattern, field.getDisplayName());
-	}
-
-	protected String buildDisallowedProtocolMessage(IFormComponent field) {
-		if(_allowedProtocols == null) {
-			return null;
-		}
-			String pattern = getPattern(_disallowedProtocolMessage, "disallowed-protocol", //$NON-NLS-1$
-	field.getPage().getLocale());
-
-		String allowedProtocols = ""; //$NON-NLS-1$
-		Iterator iter = _allowedProtocols.iterator();
-		while (iter.hasNext()) {
-			String protocol = (String) iter.next();
-			if (!allowedProtocols.equals("")) { //$NON-NLS-1$
-				if(iter.hasNext()) {
-					allowedProtocols += ", "; //$NON-NLS-1$
-				} else {
-					allowedProtocols += " or "; //$NON-NLS-1$
-				}
-			}
-			allowedProtocols += protocol;			
-		}
-
-		return formatString(pattern, allowedProtocols);
-	}
-
-	protected String getPattern(String override, String key, Locale locale) {
-		if (override != null)
-			return override;
-
-		ResourceBundle strings;
-		String string;
-		try {
-				strings = ResourceBundle.getBundle("net.sf.cendil.tapestry.valid.ValidationStrings", //$NON-NLS-1$
-	locale);
-			string = strings.getString(key);
-		} catch (Exception exc) {
-				strings = ResourceBundle.getBundle("org.apache.tapestry.valid.ValidationStrings", //$NON-NLS-1$
-	locale);
-			string = strings.getString(key);
-		}
-
-		return string;
-	}
-
-	/**
-	 * @param protocols comma separated list of allowed protocols
-	 */
-	public void setAllowedProtocols(String protocols) {
-		StringSplitter spliter = new StringSplitter(',');
-		//String[] aProtocols = protocols.split(","); //$NON-NLS-1$
-		String[] aProtocols = spliter.splitToArray(protocols); //$NON-NLS-1$
-		_allowedProtocols = new Vector();
-		for (int i = 0; i < aProtocols.length; i++) {
-			_allowedProtocols.add(aProtocols[i]);
-		}
-	}
-
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/valid/UrlValidator.script b/3.0.4/framework/src/org/apache/tapestry/valid/UrlValidator.script
deleted file mode 100644
index 1795d3d..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/valid/UrlValidator.script
+++ /dev/null
@@ -1,70 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE script
-	PUBLIC "-//Apache Software Foundation//Tapestry Script Specification 3.0//EN"
-	"http://jakarta.apache.org/tapestry/dtd/Script_3_0.dtd"
->
-
-
-<!--
-	Creates a script for validating that a field is required and/or has a minimum
-	field length.
-
-	Input symbols:
-	field, form, validator:  As normal for a validation script.
-	requiredMessage: Message to display if the field is required yet blank.
-	minimumLengthMessage: Message to display if the field length is too short.
-	urlFormatMessage: Message to display if the field value is not a valid URL.
-	urlRegexpProtocols: The regexp to check that the protocol is one of the allowed protocols.
-	urlDisallowedProtocolMessage: Message to display if the field value does not use an allowed protocol.
-
--->
-<script>
-
-	<include-script resource-path="/org/apache/tapestry/valid/Validator.js" />
-
-	<input-symbol key="field" class="org.apache.tapestry.valid.ValidField" required="yes" />
-	<input-symbol key="form" class="org.apache.tapestry.IForm" required="yes" />
-	<input-symbol key="validator" class="org.apache.tapestry.valid.UrlValidator" required="yes" />
-	<input-symbol key="requiredMessage" class="java.lang.String" />
-	<input-symbol key="minimumLengthMessage" class="java.lang.String" />
-	<input-symbol key="urlFormatMessage" class="java.lang.String" />
-	<input-symbol key="urlRegexpProtocols" class="java.lang.String" />
-	<input-symbol key="urlDisallowedProtocolMessage" class="java.lang.String" />
-
-	<let key="function" unique="yes">validate_${field.name}</let>
-
-	<body>
-		function ${function}() {
-			var field = document.${form.name}.${field.name};
-			strValue = field.value.replace(/ /g,"");
-			field.value = strValue;
-
-		<if expression="validator.required">
-			if (strValue.length == 0)
-				return validator_invalid_field(field, "${requiredMessage}");
-		</if>
-
-		<if-not expression="validator.required">
-			if (strValue.length == 0)
-				return true;
-		</if-not>
-
-		<if expression="validator.minimumLength">
-			if (strValue.length &lt; ${validator.minimumLength})
-				return validator_invalid_field(field, "${minimumLengthMessage}");
-		</if>
-
-			if(!regexpTestUrl(strValue))
-				return validator_invalid_field(field, "${urlFormatMessage}");
-
-		<if expression="null != urlRegexpProtocols">
-			var protoRegExp = ${urlRegexpProtocols};
-			if(!protoRegExp.test(strValue))
-				return validator_invalid_field(field, "${urlDisallowedProtocolMessage}");
-		</if>
-
-			return true;
-		}
-	</body>
-
-</script>
diff --git a/3.0.4/framework/src/org/apache/tapestry/valid/ValidField.java b/3.0.4/framework/src/org/apache/tapestry/valid/ValidField.java
deleted file mode 100644
index ea85b64..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/valid/ValidField.java
+++ /dev/null
@@ -1,197 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.valid;
-
-import org.apache.tapestry.ApplicationRuntimeException;
-import org.apache.tapestry.IForm;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.form.AbstractTextField;
-import org.apache.tapestry.form.Form;
-import org.apache.tapestry.form.IFormComponent;
-import org.apache.tapestry.html.Body;
-
-/**
- *
- *  A {@link Form} component that creates a text field that
- *  allows for validation of user input and conversion between string and object
- *  values. 
- * 
- *  [<a href="../../../../../ComponentReference/ValidField.html">Component Reference</a>]
- * 
- *  <p> A ValidatingTextField uses an {@link IValidationDelegate} to 
- *  track errors and an {@link IValidator} to convert between strings and objects
- *  (as well as perform validations).  The validation delegate is shared by all validating
- *  text fields in a form, the validator may be shared my multiple elements as desired.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *
- **/
-
-public abstract class ValidField extends AbstractTextField implements IFormComponent
-{
-    public abstract Object getValue();
-    public abstract void setValue(Object value);
-
-    public abstract String getDisplayName();
-
-    /**
-     *
-     *  Renders the component, which involves the {@link IValidationDelegate delegate}.
-     *
-     *  <p>During a render, the <em>first</em> field rendered that is either
-     *  in error, or required but null gets special treatment.  JavaScript is added
-     *  to select that field (such that the cursor jumps right to the field when the
-     *  page loads).
-     *
-     **/
-
-    protected void renderComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        IForm form = getForm(cycle);
-        IValidationDelegate delegate = form.getDelegate();
-
-        if (delegate == null)
-            throw new ApplicationRuntimeException(
-                Tapestry.format(
-                    "ValidField.no-delegate",
-                    getExtendedId(),
-                    getForm().getExtendedId()),
-                this,
-                null,
-                null);
-
-        IValidator validator = getValidator();
-
-        if (validator == null)
-            throw Tapestry.createRequiredParameterException(this, "validator");
-
-        boolean rendering = !cycle.isRewinding();
-
-        if (rendering)
-            delegate.writePrefix(writer, cycle, this, validator);
-
-        super.renderComponent(writer, cycle);
-
-        if (rendering)
-            delegate.writeSuffix(writer, cycle, this, validator);
-
-        // If rendering and there's either an error in the field,
-        // then we may have identified the default field (which will
-        // automatically receive focus).
-
-        if (rendering && delegate.isInError())
-            addSelect(cycle);
-
-        // That's OK, but an ideal situation would know about non-validating
-        // text fields, and also be able to put the cursor in the
-        // first field, period (even if there are no required or error fields).
-        // Still, this pretty much rocks!
-
-    }
-
-    /**
-     *  Invokes {@link IValidationDelegate#writeAttributes(IMarkupWriter,IRequestCycle, IFormComponent,IValidator)}.
-     *
-     **/
-
-    protected void beforeCloseTag(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        IValidator validator = getValidator();
-
-        validator.renderValidatorContribution(this, writer, cycle);
-
-        getForm().getDelegate().writeAttributes(writer, cycle, this, validator);
-    }
-
-    private static final String SELECTED_ATTRIBUTE_NAME =
-        "org.apache.tapestry.component.html.valid.SelectedFieldSet";
-
-    /**
-     *  Creates JavaScript to set the cursor on the first required or error
-     *  field encountered while rendering.  This only works if the text field
-     *  is wrapped by a {@link Body} component (which is almost always true).
-     *
-     **/
-
-    protected void addSelect(IRequestCycle cycle)
-    {
-        // If some other field has taken the honors, then let it.
-
-        if (cycle.getAttribute(SELECTED_ATTRIBUTE_NAME) != null)
-            return;
-
-        Body body = Body.get(cycle);
-
-        // If not wrapped by a Body, then do nothing.
-
-        if (body == null)
-            return;
-
-        IForm form = Form.get(cycle);
-
-        String formName = form.getName();
-        String textFieldName = getName();
-
-        String fullName = "document." + formName + "." + textFieldName;
-
-        body.addInitializationScript(fullName + ".focus();");
-        body.addInitializationScript(fullName + ".select();");
-
-        // Put a marker in, indicating that the selected field is known.
-
-        cycle.setAttribute(SELECTED_ATTRIBUTE_NAME, Boolean.TRUE);
-    }
-
-    protected String readValue()
-    {
-        IValidationDelegate delegate = getForm().getDelegate();
-
-        if (delegate.isInError())
-            return delegate.getFieldInputValue();
-
-        Object value = getValue();
-        String result = getValidator().toString(this, value);
-
-        if (Tapestry.isBlank(result) && getValidator().isRequired())
-            addSelect(getPage().getRequestCycle());
-
-        return result;
-    }
-
-    protected void updateValue(String value)
-    {
-        Object objectValue = null;
-        IValidationDelegate delegate = getForm().getDelegate();
-
-        delegate.recordFieldInputValue(value);
-
-        try
-        {
-            objectValue = getValidator().toObject(this, value);
-        }
-        catch (ValidatorException ex)
-        {
-            delegate.record(ex);
-            return;
-        }
-
-        setValue(objectValue);
-    }
-
-    public abstract IValidator getValidator();
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/valid/ValidField.jwc b/3.0.4/framework/src/org/apache/tapestry/valid/ValidField.jwc
deleted file mode 100644
index 0011476..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/valid/ValidField.jwc
+++ /dev/null
@@ -1,53 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<component-specification class="org.apache.tapestry.valid.ValidField" allow-body="no">
-
-  <description>
-  A text input field that can validate input.
-  </description>
-
-  <parameter name="value" type="java.lang.Object" required="yes" direction="auto"/>
-  
-  <parameter name="disabled" type="boolean" direction="in"/>
-  
-  <parameter name="hidden" type="boolean" direction="in"/>
-    
-  <parameter name="validator" type="org.apache.tapestry.valid.IValidator" required="yes" direction="auto">
-    <description>
-    Converts value to a string and parses strings back into object values.
-    </description>
-  </parameter>
-    
-  <parameter name="displayName" type="java.lang.String" required="yes" direction="auto">
-    <description>
-    Name used by FieldLabel and when generating validation error messages.
-    </description>
-  </parameter>
-  
-  <reserved-parameter name="type"/>
-  <reserved-parameter name="value"/>
-  <reserved-parameter name="name"/>
-
-  <property-specification name="name" type="java.lang.String"/>
-  <property-specification name="form" type="org.apache.tapestry.IForm"/>
-  
-</component-specification>
diff --git a/3.0.4/framework/src/org/apache/tapestry/valid/ValidationConstraint.java b/3.0.4/framework/src/org/apache/tapestry/valid/ValidationConstraint.java
deleted file mode 100644
index ddc0146..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/valid/ValidationConstraint.java
+++ /dev/null
@@ -1,134 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.valid;
-
-import org.apache.commons.lang.enum.Enum;
-
-/**
- *  Defines an enumeration of different types of validation constraints
- *  that may be violated.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- * 
- **/
-
-public class ValidationConstraint extends Enum
-{
-    /**
-     *  Indicates that no value (or a value consisting only of white space) was
-     *  provided for a field that requires a non-null value.
-     *
-     **/
-
-    public static final ValidationConstraint REQUIRED = new ValidationConstraint("REQUIRED");
-
-    /**
-     *  Indicates that a non-null value was provided, but that (after removing
-     *  leading and trailing whitespace), the value was not long enough.
-     *
-     **/
-
-    public static final ValidationConstraint MINIMUM_WIDTH =
-        new ValidationConstraint("MINUMUM_WIDTH");
-
-    /**
-     *  Indicates a general error in converting a String into a Date.
-     *
-     **/
-
-    public static final ValidationConstraint DATE_FORMAT = new ValidationConstraint("DATE_FORMAT");
-
-    /**
-     *  Indicates a general error in the format of a string that is
-     *  to be interpreted as a email.
-     *
-     **/
-
-    public static final ValidationConstraint EMAIL_FORMAT =
-        new ValidationConstraint("EMAIL_FORMAT");
-
-    /**
-     *  Indicates a general error in the format of a string that is
-     *  to be interpreted as a number.
-     *
-     **/
-
-    public static final ValidationConstraint NUMBER_FORMAT =
-        new ValidationConstraint("NUMBER_FORMAT");
-
-    /**
-     *  Indicates that the value was too small (for a Date, too early).
-     *
-     **/
-
-    public static final ValidationConstraint TOO_SMALL = new ValidationConstraint("TOO_SMALL");
-
-    /**
-     *  Indicates that the value was too large (for a Date, too late).
-     *
-     **/
-
-    public static final ValidationConstraint TOO_LARGE = new ValidationConstraint("TOO_LARGE");
-
-    /**
-     *  Indicates an error in a string that does not fulfill a pattern.
-     * 
-     *  @since 3.0
-     * 
-     **/
-
-    public static final ValidationConstraint PATTERN_MISMATCH =
-        new ValidationConstraint("PATTERN_MISMATCH");
-
-    /**
-     *  Indicates a consistency error, usually between too different fields.
-     * 
-     *  @since 3.0
-     * 
-     **/
-
-    public static final ValidationConstraint CONSISTENCY = new ValidationConstraint("CONSISTENCY");
-
-	/**
-	 *  Indicates that a URL is not of the correct format
-	 * 
-	 * @since 3.0
-	 */
-	
-	public static final ValidationConstraint URL_FORMAT = new ValidationConstraint("URL_FORMAT");
-
-	/**
-	 *  Indicates that the URL does not use one of the specified protocols
-	 * 
-	 * @since 3.0
-	 */
-
-	public static final ValidationConstraint DISALLOWED_PROTOCOL = new ValidationConstraint("DISALLOWED_PROTOCOL");
-
-
-
-	/**
-	 *  Protected constructor, which allows new constraints to be created
-	 *  as subclasses.
-	 * 
-	 **/
-
-    protected ValidationConstraint(String name)
-    {
-        super(name);
-    }
-
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/valid/ValidationDelegate.java b/3.0.4/framework/src/org/apache/tapestry/valid/ValidationDelegate.java
deleted file mode 100644
index 6b3c03e..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/valid/ValidationDelegate.java
+++ /dev/null
@@ -1,460 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.valid;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.tapestry.IForm;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRender;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.form.IFormComponent;
-
-/**
- * A base implementation of {@link IValidationDelegate}that can be used as a helper bean. This
- * class is often subclassed, typically to override presentation details.
- * 
- * @author Howard Lewis Ship
- * @since 1.0.5
- */
-
-public class ValidationDelegate implements IValidationDelegate
-{
-    private IFormComponent _currentComponent;
-
-    /**
-     * List of {@link FieldTracking}.
-     */
-    private List _trackings;
-
-    /**
-     * A Map of Maps, keyed on the name of the Form. Each inner map contains the trackings for one
-     * form, keyed on component name. Care must be taken, because the inner Map is not always
-     * present.
-     * <p>
-     * Each ultimate {@link FieldTracking}object is also in the _trackings list.
-     */
-
-    private Map _trackingMap;
-
-    public void clear()
-    {
-        _currentComponent = null;
-        _trackings = null;
-        _trackingMap = null;
-    }
-
-    public void clearErrors()
-    {
-        if (_trackings == null)
-            return;
-
-        Iterator i = (Iterator) _trackings.iterator();
-        while (i.hasNext())
-        {
-            FieldTracking ft = (FieldTracking) i.next();
-            ft.setErrorRenderer(null);
-        }
-    }
-
-    /**
-     * If the form component is in error, places a &lt;font color="red"&lt; around it. Note: this
-     * will only work on the render phase after a rewind, and will be confused if components are
-     * inside any kind of loop.
-     */
-
-    public void writeLabelPrefix(IFormComponent component, IMarkupWriter writer, IRequestCycle cycle)
-    {
-        if (isInError(component))
-        {
-            writer.begin("font");
-            writer.attribute("color", "red");
-        }
-    }
-
-    /**
-     * Closes the &lt;font&gt; element,started by
-     * {@link #writeLabelPrefix(IFormComponent,IMarkupWriter,IRequestCycle)}, if the form component
-     * is in error.
-     */
-
-    public void writeLabelSuffix(IFormComponent component, IMarkupWriter writer, IRequestCycle cycle)
-    {
-        if (isInError(component))
-        {
-            writer.end();
-        }
-    }
-
-    /**
-     * Returns the {@link IFieldTracking}for the current component, if any. The
-     * {@link IFieldTracking}is usually created in {@link #record(String, ValidationConstraint)}or
-     * in {@link #record(IRender, ValidationConstraint)}.
-     * <p>
-     * Components may be rendered multiple times, with multiple names (provided by the
-     * {@link org.apache.tapestry.form.Form}, care must be taken that this method is invoked
-     * <em>after</em> the Form has provided a unique {@link IFormComponent#getName()}for the
-     * component.
-     * 
-     * @see #setFormComponent(IFormComponent)
-     * @return the {@link FieldTracking}, or null if the field has no tracking.
-     */
-
-    protected FieldTracking getComponentTracking()
-    {
-        if (_trackingMap == null)
-            return null;
-
-        String formName = _currentComponent.getForm().getName();
-
-        Map formMap = (Map) _trackingMap.get(formName);
-
-        if (formMap == null)
-            return null;
-
-        return (FieldTracking) formMap.get(_currentComponent.getName());
-    }
-
-    public void setFormComponent(IFormComponent component)
-    {
-        _currentComponent = component;
-    }
-
-    public boolean isInError()
-    {
-        IFieldTracking tracking = getComponentTracking();
-
-        return tracking != null && tracking.isInError();
-    }
-
-    public String getFieldInputValue()
-    {
-        IFieldTracking tracking = getComponentTracking();
-
-        return tracking == null ? null : tracking.getInput();
-    }
-
-    /**
-     * Returns all the field trackings as an unmodifiable List.
-     */
-
-    public List getFieldTracking()
-    {
-        if (Tapestry.size(_trackings) == 0)
-            return null;
-
-        return Collections.unmodifiableList(_trackings);
-    }
-
-    public void reset()
-    {
-        IFieldTracking tracking = getComponentTracking();
-
-        if (tracking != null)
-        {
-            _trackings.remove(tracking);
-
-            String formName = tracking.getComponent().getForm().getName();
-
-            Map formMap = (Map) _trackingMap.get(formName);
-
-            if (formMap != null)
-                formMap.remove(tracking.getFieldName());
-        }
-    }
-
-    /**
-     * Invokes {@link #record(String, ValidationConstraint)}, or
-     * {@link #record(IRender, ValidationConstraint)}if the
-     * {@link ValidatorException#getErrorRenderer() error renderer property}is not null.
-     */
-
-    public void record(ValidatorException ex)
-    {
-        IRender errorRenderer = ex.getErrorRenderer();
-
-        if (errorRenderer == null)
-            record(ex.getMessage(), ex.getConstraint());
-        else
-            record(errorRenderer, ex.getConstraint());
-    }
-
-    /**
-     * Invokes {@link #record(IRender, ValidationConstraint)}, after wrapping the message parameter
-     * in a {@link RenderString}.
-     */
-
-    public void record(String message, ValidationConstraint constraint)
-    {
-        record(new RenderString(message), constraint);
-    }
-
-    /**
-     * Records error information about the currently selected component, or records unassociated
-     * (with any field) errors.
-     * <p>
-     * Currently, you may have at most one error per <em>field</em> (note the difference between
-     * field and component), but any number of unassociated errors.
-     * <p>
-     * Subclasses may override the default error message (based on other factors, such as the field
-     * and constraint) before invoking this implementation.
-     * 
-     * @since 1.0.9
-     */
-
-    public void record(IRender errorRenderer, ValidationConstraint constraint)
-    {
-        FieldTracking tracking = findCurrentTracking();
-
-        // Note that recording two errors for the same field is not advised; the
-        // second will override the first.
-
-        tracking.setErrorRenderer(errorRenderer);
-        tracking.setConstraint(constraint);
-    }
-
-    public void recordFieldInputValue(String input)
-    {
-        FieldTracking tracking = findCurrentTracking();
-
-        tracking.setInput(input);
-    }
-
-    /**
-     * Finds or creates the field tracking for the {@link #setFormComponent(IFormComponent)}current
-     * component. If no current component, an unassociated error is created and returned.
-     * 
-     * @since 3.0
-     */
-
-    protected FieldTracking findCurrentTracking()
-    {
-        FieldTracking result = null;
-
-        if (_trackings == null)
-            _trackings = new ArrayList();
-
-        if (_trackingMap == null)
-            _trackingMap = new HashMap();
-
-        if (_currentComponent == null || _currentComponent.getName() == null)
-        {
-            result = new FieldTracking();
-
-            // Add it to the field trackings, but not to the
-            // map.
-
-            _trackings.add(result);
-        }
-        else
-        {
-            result = getComponentTracking();
-
-            if (result == null)
-            {
-                String formName = _currentComponent.getForm().getName();
-
-                Map formMap = (Map) _trackingMap.get(formName);
-
-                if (formMap == null)
-                {
-                    formMap = new HashMap();
-                    _trackingMap.put(formName, formMap);
-                }
-
-                String fieldName = _currentComponent.getName();
-
-                result = new FieldTracking(fieldName, _currentComponent);
-
-                _trackings.add(result);
-                formMap.put(fieldName, result);
-            }
-        }
-
-        return result;
-    }
-
-    /**
-     * Does nothing. Override in a subclass to decoreate fields.
-     */
-
-    public void writePrefix(IMarkupWriter writer, IRequestCycle cycle, IFormComponent component,
-            IValidator validator)
-    {
-    }
-
-    /**
-     * Does nothing. Override in a subclass to decorate fields.
-     */
-
-    public void writeAttributes(IMarkupWriter writer, IRequestCycle cycle,
-            IFormComponent component, IValidator validator)
-    {
-    }
-
-    /**
-     * Default implementation; if the current field is in error, then a suffix is written. The
-     * suffix is: <code>&amp;nbsp;&lt;font color="red"&gt;**&lt;/font&gt;</code>.
-     */
-
-    public void writeSuffix(IMarkupWriter writer, IRequestCycle cycle, IFormComponent component,
-            IValidator validator)
-    {
-        if (isInError())
-        {
-            writer.printRaw("&nbsp;");
-            writer.begin("font");
-            writer.attribute("color", "red");
-            writer.print("**");
-            writer.end();
-        }
-    }
-
-    public boolean getHasErrors()
-    {
-        return getFirstError() != null;
-    }
-
-    /**
-     * A convienience, as most pages just show the first error on the page.
-     * <p>
-     * As of release 1.0.9, this returns an instance of {@link IRender}, not a {@link String}.
-     */
-
-    public IRender getFirstError()
-    {
-        if (Tapestry.size(_trackings) == 0)
-            return null;
-
-        Iterator i = _trackings.iterator();
-
-        while (i.hasNext())
-        {
-            IFieldTracking tracking = (IFieldTracking) i.next();
-
-            if (tracking.isInError())
-                return tracking.getErrorRenderer();
-        }
-
-        return null;
-    }
-
-    /**
-     * Checks to see if the field is in error. This will <em>not</em> work properly in a loop, but
-     * is only used by {@link FieldLabel}. Therefore, using {@link FieldLabel}in a loop (where the
-     * {@link IFormComponent}is renderred more than once) will not provide correct results.
-     */
-
-    protected boolean isInError(IFormComponent component)
-    {
-        if (_trackingMap == null)
-            return false;
-
-        IForm form = component.getForm();
-        // if there is no form, the component cannot have been rewound or rendered into a form yet
-        // so assume it cannot have errors.
-        if (form == null)
-            return false;
-
-        String formName = form.getName();
-        Map formMap = (Map) _trackingMap.get(formName);
-
-        if (formMap == null)
-            return false;
-
-        IFieldTracking tracking = (IFieldTracking) formMap.get(component.getName());
-
-        return tracking != null && tracking.isInError();
-    }
-
-    /**
-     * Returns a {@link List}of {@link IFieldTracking}s. This is the master list of trackings,
-     * except that it omits and trackings that are not associated with a particular field. May
-     * return an empty list, or null.
-     * <p>
-     * Order is not determined, though it is likely the order in which components are laid out on in
-     * the template (this is subject to change).
-     */
-
-    public List getAssociatedTrackings()
-    {
-        int count = Tapestry.size(_trackings);
-
-        if (count == 0)
-            return null;
-
-        List result = new ArrayList(count);
-
-        for (int i = 0; i < count; i++)
-        {
-            IFieldTracking tracking = (IFieldTracking) _trackings.get(i);
-
-            if (tracking.getFieldName() == null)
-                continue;
-
-            result.add(tracking);
-        }
-
-        return result;
-    }
-
-    /**
-     * Like {@link #getAssociatedTrackings()}, but returns only the unassociated trackings.
-     * Unassociated trackings are new (in release 1.0.9), and are why interface
-     * {@link IFieldTracking}is not very well named.
-     * <p>
-     * The trackings are returned in an unspecified order, which (for the moment, anyway) is the
-     * order in which they were added (this could change in the future, or become more concrete).
-     */
-
-    public List getUnassociatedTrackings()
-    {
-        int count = Tapestry.size(_trackings);
-
-        if (count == 0)
-            return null;
-
-        List result = new ArrayList(count);
-
-        for (int i = 0; i < count; i++)
-        {
-            IFieldTracking tracking = (IFieldTracking) _trackings.get(i);
-
-            if (tracking.getFieldName() != null)
-                continue;
-
-            result.add(tracking);
-        }
-
-        return result;
-    }
-
-    /**
-     * Returns the {@link IFieldTracking}for the current component, if any. Useful
-     * when displaying error messages for individual fields.
-     * 
-     * @since 3.0.2
-     */
-    public IFieldTracking getCurrentFieldTracking()
-    {
-        return getComponentTracking();
-    }
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/valid/ValidationStrings.properties b/3.0.4/framework/src/org/apache/tapestry/valid/ValidationStrings.properties
deleted file mode 100644
index 83007bd..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/valid/ValidationStrings.properties
+++ /dev/null
@@ -1,24 +0,0 @@
-# $Id$
-
-field-is-required=You must enter a value for {0}.
-field-too-short=You must enter at least {0} characters for {1}.
-
-invalid-date-format=Invalid date format for {0}.  Format is {1}.
-invalid-int-format={0} must be an integer value.
-invalid-format={0} is not in a recognized format.
-invalid-numeric-format={0} must be a numeric value.
-
-date-too-early={0} must be on or after {1}.
-date-too-late={0} must be on or before {1}.
-
-number-too-small={0} must not be smaller than {1}.
-number-too-large={0} must not be larger than {1}.
-
-number-range={0} must be between {1} and {2}.
-
-invalid-email-format=Invalid email format for {0}.  Format is user@hostname.
-
-pattern-not-matched={0} does not fulfill the required pattern {1}.
-
-invalid-url-format = Invalid URL.
-disallowed-protocol = Disallowed protocol - protocol must be {0}.
diff --git a/3.0.4/framework/src/org/apache/tapestry/valid/ValidationStrings_de.properties b/3.0.4/framework/src/org/apache/tapestry/valid/ValidationStrings_de.properties
deleted file mode 100644
index 00a4688..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/valid/ValidationStrings_de.properties
+++ /dev/null
@@ -1,17 +0,0 @@
-# $Id$
-
-field-is-required=Das Eingabefeld ''{0}'' ist ein Pflichtfeld.
-field-too-short=Sie müssen mindestens {0} Zeichen für das Eingabefeld ''{1}'' eingeben.
-
-invalid-date-format=Das Eingabefeld ''{0}'' hat ein falsches Datumsformat (Eingabeformat ist {1}).
-invalid-int-format=Das Eingabefeld ''{0}'' erwartet einen ganzzahligen Wert.
-invalid-format=Das Eingabefeld ''{0}'' hat nicht das gewünschte Format.
-invalid-numeric-format=Das Eingabefeld ''{0}'' erwartet einen numerischen Wert.
-
-date-too-early=Das Datum für das Eingabefeld ''{0}'' kann nur der {1} oder später sein.
-date-too-late=Das Datum für das Eingabefeld ''{0}'' kann nur der {1} oder früher sein.
-
-number-too-small=Der Wert für das Eingabefeld ''{0}'' darf nicht kleiner als {1} sein.
-number-too-large=Der Wert für das Eingabefeld ''{0}'' darf nicht größer als {1} sein.
-
-number-range=Der Wert für das Eingabefeld ''{0}'' darf nur zwischen {1} und {2} liegen.
diff --git a/3.0.4/framework/src/org/apache/tapestry/valid/ValidationStrings_es.properties b/3.0.4/framework/src/org/apache/tapestry/valid/ValidationStrings_es.properties
deleted file mode 100644
index a8e9c6d..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/valid/ValidationStrings_es.properties
+++ /dev/null
@@ -1,19 +0,0 @@
-# $Id$
-
-field-is-required=Tiene que ingresar un valor para {0}.
-field-too-short=Tiene que ingresar al menos {0} caracteres para {1}.
-
-invalid-date-format=Formato de fecha no válido para {0}.  El formato es {1}.
-invalid-int-format={0} tiene que ser un valor entero.
-invalid-format={0} no se encuentra en un formato reconocido.
-invalid-numeric-format={0} tiene que ser un valor numérico.
-
-date-too-early={0} tiene que ser actual o después de {1}.
-date-too-late={0} tiene que ser actual o antes de {1}.
-
-number-too-small={0} no puede ser menor que {1}.
-number-too-large={0} no puede ser mayor que {1}.
-
-number-range={0} tiene que estar entre {1} y {2}.
-
-invalid-email-format=Formato de email inválido para {0}.  El formato es usuario@servidor.
diff --git a/3.0.4/framework/src/org/apache/tapestry/valid/ValidationStrings_fi.properties b/3.0.4/framework/src/org/apache/tapestry/valid/ValidationStrings_fi.properties
deleted file mode 100644
index e40e8cc..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/valid/ValidationStrings_fi.properties
+++ /dev/null
@@ -1,24 +0,0 @@
-# $Id$
-
-field-is-required=Anna syöte kenttään: {0}.
-field-too-short=Kentän {1} arvon minimipituus on {0} merkkiä.
-
-invalid-date-format=Kentän {0} päivämäärä on väärää muotoa. Muoto on {1}.
-invalid-int-format=Kentän {0} arvon pitää olla kokonaisluku.
-invalid-format=Kentän {0} syöte on väärää muotoa.
-invalid-numeric-format=Kentän {0} arvon pitää olla luku.
-
-date-too-early=Kentän {0} päivämäärä ei saa olla ennen {1}.
-date-too-late=Kentän {0} päivämäärä ei saa olla jälkeen {1}.
-
-number-too-small=Kentän {0} arvo ei saa olla pienempi {1}.
-number-too-large=Kentän {0} arvo ei saa olla suurempi kuin {1}.
-
-number-range=Kentän {0} arvon tulee olla välillä {1}-{2}.
-
-invalid-email-format=Sähköpostiosoite kentässä {0} on väärää muotoa. Muoto on tunnus@kone.fi.
-
-pattern-not-matched=Kentän {0} arvo ei ole vaaditussa muodossa {1}.
-
-invalid-url-format = URL on väärää muotoa.
-disallowed-protocol = Protokolla ei kelpaa - protokollan pitää olla {0}.
diff --git a/3.0.4/framework/src/org/apache/tapestry/valid/ValidationStrings_sv.properties b/3.0.4/framework/src/org/apache/tapestry/valid/ValidationStrings_sv.properties
deleted file mode 100644
index 83059f3..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/valid/ValidationStrings_sv.properties
+++ /dev/null
@@ -1,24 +0,0 @@
-# $Id$
-
-field-is-required=Du måste skriva in ett värde för {0}.
-field-too-short=Du måste skriva in minst {0} tecken för {1}.
-
-invalid-date-format=Ogilitigt datumformat för {0}. Formatet är {1}.
-invalid-int-format={0} måste vara ett heltalsvärde.
-invalid-format={0} är inte i ett känt format.
-invalid-numeric-format={0} måste vara ett numeriskt värde.
-
-date-too-early={0} måste vara på eller efter {1}.
-date-too-late={0} måste vara på eller före {1}.
-
-number-too-small={0} måste vara mindre än {1}.
-number-too-large={0} måste vara större än {1}.
-
-number-range={0} måste vara mellan {1} och {2}.
-
-invalid-email-format=Ogiltigt e-post address format för {0}. Korrekt format är användare@domän.
-
-pattern-not-matched={0} uppfyller inte det önskade mönstret. {1}.
-
-invalid-url-format=Ogiltig URL.
-disallowed-protocol=Protokollet är inte tillåtet - det måste vara {0}.
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/valid/ValidationStrings_zh_CN.properties b/3.0.4/framework/src/org/apache/tapestry/valid/ValidationStrings_zh_CN.properties
deleted file mode 100644
index b2a8239..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/valid/ValidationStrings_zh_CN.properties
+++ /dev/null
@@ -1,36 +0,0 @@
-# Copyright 2005 The Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-field-is-required=\u8bf7\u8f93\u5165{0}\u7684\u5185\u5bb9\u3002
-field-too-short={1}\u7684\u5185\u5bb9\u4e0d\u80fd\u5c11\u4e8e{0}\u5b57\u7b26\u3002
-
-invalid-date-format={0}\u7684\u65e5\u671f\u683c\u5f0f\u4e0d\u6b63\u786e\uff0c\u6b63\u786e\u683c\u5f0f\u662f{1}\u3002
-invalid-int-format={0}\u7684\u5185\u5bb9\u5fc5\u987b\u662f\u6574\u6570\u3002
-invalid-format=\u65e0\u6cd5\u8bc6\u522b{0}\u7684\u683c\u5f0f\u3002
-invalid-numeric-format={0}\u7684\u5185\u5bb9\u5fc5\u987b\u662f\u6570\u5b57\u3002
-
-date-too-early={0}\u7684\u65e5\u671f\u5fc5\u987b\u5728{1}\u4e4b\u540e\u3002
-date-too-late={0}\u7684\u65e5\u671f\u5fc5\u987b\u5728{1}\u4e4b\u524d\u3002
-
-number-too-small={0}\u7684\u6570\u503c\u4e0d\u80fd\u5c0f\u4e8e{1}\u3002
-number-too-large={0}\u7684\u6570\u503c\u4e0d\u80fd\u5927\u4e8e{1}\u3002
-
-number-range={0}\u7684\u6570\u503c\u5fc5\u987b\u5728{1}\u548c{2}\u4e4b\u95f4\u3002
-
-invalid-email-format=\u7535\u5b50\u90ae\u4ef6\u5730\u5740{0}\u683c\u5f0f\u4e0d\u6b63\u786e\uff0c\u6b63\u786e\u7684\u683c\u5f0f\u662fuser@hostname\u3002
-
-pattern-not-matched={0}\u4e0d\u7b26\u5408\u6240\u8981\u6c42\u7684\u683c\u5f0f{1}\u3002
-
-invalid-url-format = \u9519\u8bef\u7684URL\u3002
-disallowed-protocol = \u4e0d\u88ab\u5141\u8bb8\u7684\u534f\u8bae\uff0c\u5fc5\u987b\u662f{0}\u3002
diff --git a/3.0.4/framework/src/org/apache/tapestry/valid/ValidationStrings_zh_TW.properties b/3.0.4/framework/src/org/apache/tapestry/valid/ValidationStrings_zh_TW.properties
deleted file mode 100644
index fde9e7a..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/valid/ValidationStrings_zh_TW.properties
+++ /dev/null
@@ -1,36 +0,0 @@
-# Copyright 2005 The Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-field-is-required=\u8acb\u8f38\u5165{0}\u6b04\u4f4d\u7684\u5167\u5bb9\u3002
-field-too-short={1}\u6b04\u4f4d\u7684\u5167\u5bb9\u4e0d\u80fd\u5c11\u65bc{0}\u5b57\u5143\u3002
-
-invalid-date-format={0}\u6b04\u4f4d\u7684\u65e5\u671f\u683c\u5f0f\u4e0d\u6b63\u78ba\uff0c\u6b63\u78ba\u683c\u5f0f\u70ba{1}\u3002
-invalid-int-format={0}\u6b04\u4f4d\u7684\u5167\u5bb9\u5fc5\u9808\u662f\u6574\u6578\u3002
-invalid-format=\u7121\u6cd5\u8fa8\u8a8d{0}\u6b04\u4f4d\u7684\u683c\u5f0f\u3002
-invalid-numeric-format={0}\u6b04\u4f4d\u7684\u5167\u5bb9\u5fc5\u9808\u662f\u6578\u5b57\u3002
-
-date-too-early={0}\u6b04\u4f4d\u7684\u65e5\u671f\u5fc5\u9808\u5728{1}\u4e4b\u5f8c\u3002
-date-too-late={0}\u6b04\u4f4d\u7684\u65e5\u671f\u5fc5\u9808\u5728{1}\u4e4b\u524d\u3002
-
-number-too-small={0}\u6b04\u4f4d\u7684\u6578\u5b57\u4e0d\u80fd\u5c0f\u65bc{1}\u3002
-number-too-large={0}\u6b04\u4f4d\u7684\u6578\u5b57\u4e0d\u80fd\u5927\u65bc{1}\u3002
-
-number-range={0}\u6b04\u4f4d\u7684\u6578\u5b57\u5fc5\u9808\u5728{1}\u548c{2}\u4e4b\u9593\u3002
-
-invalid-email-format=\u96fb\u5b50\u90f5\u4ef6\u5730\u5740{0}\u683c\u5f0f\u932f\u8aa4\uff0c\u6b63\u78ba\u7684\u683c\u5f0f\u662fuser@hostname\u3002
-
-pattern-not-matched={0}\u4e0d\u7b26\u5408\u6240\u8981\u6c42\u7684\u6a23\u5f0f{1}\u3002
-
-invalid-url-format = \u932f\u8aa4\u7684URL\u3002
-disallowed-protocol = \u4e0d\u88ab\u5141\u8a31\u7684\u5354\u5b9a\uff0c\u5fc5\u9808\u662f{0}\u3002
diff --git a/3.0.4/framework/src/org/apache/tapestry/valid/Validator.js b/3.0.4/framework/src/org/apache/tapestry/valid/Validator.js
deleted file mode 100644
index 6508436..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/valid/Validator.js
+++ /dev/null
@@ -1,18 +0,0 @@
-// $Id: Validator.js,v 1.1 2002/09/07 13:03:24 hship Exp $

-//

-// Simple functions to support input field validation in Tapestry.

-

-function validator_invalid_field(field, message)

-{

-  field.focus();

-  field.select();

-  

-  window.alert(message);

-  

-  return false;

-}

-

-function regexpTestUrl(sUrl) {

-	var regexp = /(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/

-	return regexp.test(sUrl);

-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/valid/ValidatorException.java b/3.0.4/framework/src/org/apache/tapestry/valid/ValidatorException.java
deleted file mode 100644
index c9f0643..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/valid/ValidatorException.java
+++ /dev/null
@@ -1,75 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.valid;
-
-import org.apache.tapestry.IRender;
-
-/**
- *  Thrown by a {@link IValidator} when submitted input is not valid.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 1.0.8
- *
- **/
-
-public class ValidatorException extends Exception
-{
-    private IRender _errorRenderer;
-    private ValidationConstraint _constraint;
-
-    public ValidatorException(String errorMessage)
-    {
-        this(errorMessage, null, null);
-    }
-
-    public ValidatorException(String errorMessage, ValidationConstraint constraint)
-    {
-        this(errorMessage, null, constraint);
-    }
-
-    /**
-     *  Creates a new instance.
-     *  @param errorMessage the default error message to be used (this may be
-     *  overriden by the {@link IValidationDelegate})
-     *  @param errorRenderer to use to render the error message (may be null)
-     *  @param constraint a validation constraint that has been compromised, or
-     *  null if no constraint is applicable
-     * 
-     **/
-
-    public ValidatorException(
-        String errorMessage,
-        IRender errorRenderer,
-        ValidationConstraint constraint)
-    {
-        super(errorMessage);
-
-        _errorRenderer = errorRenderer;
-        _constraint = constraint;
-    }
-
-    public ValidationConstraint getConstraint()
-    {
-        return _constraint;
-    }
-
-    /** @since 3.0 **/
-
-    public IRender getErrorRenderer()
-    {
-        return _errorRenderer;
-    }
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/valid/package.html b/3.0.4/framework/src/org/apache/tapestry/valid/package.html
deleted file mode 100644
index f858edf..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/valid/package.html
+++ /dev/null
@@ -1,23 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-
-<html>
-<body>
-
-Components and classes that provide specialized, validating text fields.
-The component {@link org.apache.tapestry.valid.ValidField}
-does most of the work, and is paired with an implementation of
-{@link org.apache.tapestry.valid.IValidator} (often as a helper bean)
-which provides the rules of translation (between object value and string) and validation.
-
-<p>
-Fields can all be set as required or not; most IValidator implementations add additional
-validations, such as fitting the input value between a minimum and maximum value.
-
-
-<p>Fields can also have a {@link org.apache.tapestry.valid.FieldLabel} that reflects the state (normal or error)
-of the field.
-
-@author Howard Lewis Ship <a href="mailto:hlship@apache.org">hlship@apache.org</a>
-
-</body>
-</html>
diff --git a/3.0.4/framework/src/org/apache/tapestry/wml/AbstractPostfield.java b/3.0.4/framework/src/org/apache/tapestry/wml/AbstractPostfield.java
deleted file mode 100644
index f1d661a..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/wml/AbstractPostfield.java
+++ /dev/null
@@ -1,121 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.wml;
-
-import org.apache.tapestry.ApplicationRuntimeException;
-import org.apache.tapestry.IBinding;
-import org.apache.tapestry.IForm;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.form.AbstractFormComponent;
-
-/**
- *  A base class for building components that correspond to WML postfield elements.
- *  All such components must be wrapped (directly or indirectly) by
- *  a {@link Go} component.
- *
- *  @version $Id$
- *  @author David Solis
- *  @since 3.0
- *
- **/
-
-public abstract class AbstractPostfield extends AbstractFormComponent
-{
-
-    /**
-     *  Returns the {@link org.apache.tapestry.wml.Go} wrapping this component.
-     *
-     *  @throws  ApplicationRuntimeException if the component is not wrapped by a
-     * {@link org.apache.tapestry.wml.Go}.
-     *
-     **/
-
-    public IForm getForm(IRequestCycle cycle)
-    {
-        IForm result = Go.get(cycle);
-
-        if (result == null)
-            throw new ApplicationRuntimeException(
-                Tapestry.getMessage("Postfield.must-be-contained-by-go"),
-                this,
-                null,
-                null);
-
-        setForm(result);
-
-        return result;
-    }
-
-    /**
-     *  @see org.apache.tapestry.AbstractComponent#renderComponent(IMarkupWriter, IRequestCycle)
-     **/
-
-    protected void renderComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        IForm form = getForm(cycle);
-
-        boolean rewinding = form.isRewinding();
-
-        if (!rewinding && cycle.isRewinding())
-            return;
-
-        String name = form.getElementId(this);
-
-        if (rewinding)
-        {
-            rewind(cycle);
-            return;
-        }
-
-        writer.beginEmpty("postfield");
-
-        writer.attribute("name", name);
-        String varName = getVarName();
-        writer.attributeRaw("value", varName != null ? getEncodedVarName(varName) : "");
-
-        renderInformalParameters(writer, cycle);
-
-        writer.closeTag();
-    }
-
-    protected abstract void rewind(IRequestCycle cycle);
-
-    private String getEncodedVarName(String varName)
-    {
-        return "$(" + varName + ")";
-    }
-
-    public boolean isDisabled()
-    {
-        return false;
-    }
-
-    public abstract String getVarName();
-
-    public abstract IBinding getValueBinding();
-
-    public void updateValue(Object value)
-    {
-        getValueBinding().setObject(value);
-    }
-
-    public abstract IForm getForm();
-    public abstract void setForm(IForm form);
-
-    public abstract String getName();
-    public abstract void setName(String name);
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/wml/Card.java b/3.0.4/framework/src/org/apache/tapestry/wml/Card.java
deleted file mode 100644
index 9e733fa..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/wml/Card.java
+++ /dev/null
@@ -1,72 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.wml;
-
-import org.apache.tapestry.AbstractComponent;
-import org.apache.tapestry.ApplicationRuntimeException;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.Tapestry;
-
-/**
- *  A deck contains a collection of cards. There is a variety of card types, each specifying a different mode of
- *  user interaction.
- *
- *  @version $Id$
- *  @author David Solis
- *  @since 3.0
- *
- **/
-
-public abstract class Card extends AbstractComponent
-{
-    private static final String ATTRIBUTE_NAME = "org.apache.tapestry.wml.Card";
-
-    /**
-     *  @see AbstractComponent#renderComponent(IMarkupWriter, IRequestCycle)
-     **/
-
-    protected void renderComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        if (cycle.getAttribute(ATTRIBUTE_NAME) != null)
-            throw new ApplicationRuntimeException(
-                Tapestry.getMessage("Card.cards-may-not-nest"),
-                this,
-                null,
-                null);
-
-        cycle.setAttribute(ATTRIBUTE_NAME, this);
-
-        writer.begin("card");
-
-        String title = getTitle();
-        if (Tapestry.isNonBlank(title))
-            writer.attribute("title", title);
-
-        renderInformalParameters(writer, cycle);
-
-        IMarkupWriter nestedWriter = writer.getNestedWriter();
-
-        renderBody(nestedWriter, cycle);
-
-        nestedWriter.close();
-
-        writer.end();
-
-        cycle.removeAttribute(ATTRIBUTE_NAME);
-    }
-
-    public abstract String getTitle();
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/wml/Card.jwc b/3.0.4/framework/src/org/apache/tapestry/wml/Card.jwc
deleted file mode 100644
index 4d1101a..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/wml/Card.jwc
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE component-specification PUBLIC
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<component-specification class="org.apache.tapestry.wml.Card">
-
-    <description>
-        An WML deck contains a collection of cards. There is a variety of card types, each specifying a different mode
-        of user interaction.
-    </description>
-
-    <parameter name="title" type="java.lang.String" direction="in">
-        <description>
-            The title attribute specifies advisory information about the element. The title may be rendered in a
-            variety of ways by the user agent (eg, suggested bookmark name, pop-up tooltip, etc.).
-        </description>
-    </parameter>
-
-</component-specification>
diff --git a/3.0.4/framework/src/org/apache/tapestry/wml/Deck.java b/3.0.4/framework/src/org/apache/tapestry/wml/Deck.java
deleted file mode 100644
index 369dd6b..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/wml/Deck.java
+++ /dev/null
@@ -1,45 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.wml;
-
-import java.io.OutputStream;
-
-import org.apache.tapestry.AbstractPage;
-import org.apache.tapestry.IMarkupWriter;
-
-/**
- *  Concrete class for WML decks. Most decks
- *  should be able to simply subclass this, adding new properties and
- *  methods.  An unlikely exception would be a deck that was not based
- *  on a template.
- *
- *  @version $Id$
- *  @author David Solis
- *  @since 0.2.9
- * 
- **/
-
-public class Deck extends AbstractPage
-{
-    /**
-     *  Returns a new {@link WMLWriter}.
-     *
-     **/
-    public IMarkupWriter getResponseWriter(OutputStream out)
-    {
-        return new WMLWriter(out, getOutputEncoding());
-    }
-
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/wml/Do.java b/3.0.4/framework/src/org/apache/tapestry/wml/Do.java
deleted file mode 100644
index 7bfbed1..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/wml/Do.java
+++ /dev/null
@@ -1,68 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.wml;
-
-import org.apache.tapestry.AbstractComponent;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.Tapestry;
-
-/**
- *  The do element provides a general mechanism for the user to act upon the current card,
- *  in other words a card-level user interface element.
- *  The representation of the do element is user agent dependent and the author must only assume
- *  that the element is mapped to a unique user interface widget that the user can activate.
- *  For example, the widget mapping may be to a graphically rendered button, a soft or function key, a voice-activated command sequence, or any other interface that has a simple "activate" operation with no inter-operation persistent state.
- *  The do element may appear at both the card and deck-level.
- *
- *  @version $Id$
- *  @author David Solis
- *  @since 3.0
- *
- **/
-
-public abstract class Do extends AbstractComponent
-{
-    /**
-     *  @see AbstractComponent#renderComponent(IMarkupWriter, IRequestCycle)
-     **/
-
-    protected void renderComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        boolean render = !cycle.isRewinding();
-
-        if (render)
-        {
-            writer.begin("do");
-
-            writer.attribute("type", getType());
-
-            String label = getLabel();
-            if (Tapestry.isNonBlank(label))
-                writer.attribute("label", label);
-
-            renderInformalParameters(writer, cycle);
-        }
-
-        renderBody(writer, cycle);
-
-        if (render)
-            writer.end();
-    }
-
-    public abstract String getType();
-
-    public abstract String getLabel();
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/wml/Do.jwc b/3.0.4/framework/src/org/apache/tapestry/wml/Do.jwc
deleted file mode 100644
index f792b03..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/wml/Do.jwc
+++ /dev/null
@@ -1,44 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE component-specification PUBLIC
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<component-specification class="org.apache.tapestry.wml.Do">
-
-    <description>
-        The do element provides a general mechanism for the user to act upon the current card, i.e. a card-level user
-        interface element.
-    </description>
-
-    <parameter name="type" type="java.lang.String" direction="in" required="yes" >
-        <description>
-            The do element type. This attribute provides a hint to the user agent about the author's intended use of
-            the element and how the element should be mapped to a physical user interface construct.
-            Predefined DO types are accept, prev, help, reset, options, delete and unkown.
-        </description>
-    </parameter>
-
-    <parameter name="label" type="java.lang.String" direction="in">
-        <description>
-            If the user agent is able to dynamically label the user interface widget, this attribute specifies a textual
-            string suitable for such labelling.
-        </description>
-    </parameter>
-
-</component-specification>
diff --git a/3.0.4/framework/src/org/apache/tapestry/wml/Go.java b/3.0.4/framework/src/org/apache/tapestry/wml/Go.java
deleted file mode 100644
index fa1c0d8..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/wml/Go.java
+++ /dev/null
@@ -1,92 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.wml;
-
-import org.apache.tapestry.ApplicationRuntimeException;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.engine.ILink;
-import org.apache.tapestry.form.Form;
-import org.apache.tapestry.valid.IValidationDelegate;
-
-/**
- *  The go element declares a go task, indicating navigation to a URI. If the URI
- *  names a WML card or deck, it is displayed. 
- *
- *  @version $Id$
- *  @author David Solis
- *  @since 3.0
- *
- **/
-
-public abstract class Go extends Form
-{
-
-    /** @since 3.0 **/
-
-    protected void writeAttributes(IMarkupWriter writer, ILink link)
-    {
-        String method = getMethod();
-
-        writer.begin(getTag());
-        writer.attribute("method", (method == null) ? "post" : method);
-        writer.attribute("href", link.getURL(null, false));
-    }
-
-    /** @since 3.0 **/
-
-    protected void writeHiddenField(IMarkupWriter writer, String name, String value)
-    {
-        writer.beginEmpty("postfield");
-        writer.attribute("name", name);
-        writer.attribute("value", value);
-        writer.println();
-    }
-
-    /**
-     *  This component doesn't support event handlers.
-     *
-     **/
-    protected void emitEventHandlers(IMarkupWriter writer, IRequestCycle cycle)
-    {
-    }
-
-    /**
-     *  This component doesn't support delegate.
-     *
-     **/
-    public IValidationDelegate getDelegate()
-    {
-        return null;
-    }
-
-    public void setDelegate(IValidationDelegate delegate)
-    {
-        throw new ApplicationRuntimeException(
-            Tapestry.format("unsupported-property", this, "delegate"));
-    }
-
-    protected String getTag()
-    {
-        return "go";
-    }
-
-
-    protected String getDisplayName()
-    {
-        return "Go";
-    }
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/wml/Go.jwc b/3.0.4/framework/src/org/apache/tapestry/wml/Go.jwc
deleted file mode 100644
index d06bf96..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/wml/Go.jwc
+++ /dev/null
@@ -1,56 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE component-specification PUBLIC
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN"
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<component-specification class="org.apache.tapestry.wml.Go">
-
-    <description>
-        The go element declares a go task, indicating navigation to a URI.
-    </description>
-
-    <parameter name="method" type="java.lang.String" direction="in">
-        <description>
-            The method used by the form when it is submitted, defaults to POST.
-        </description>
-    </parameter>
-
-    <parameter name="listener" type="org.apache.tapestry.IActionListener" required="no" direction="in">
-        <description>
-            Object invoked when the form is submitted, after all form components have responded
-            to the submission.
-        </description>
-    </parameter>
-
-    <parameter name="stateful" type="boolean" direction="custom">
-        <description>
-            If true (the default), then an active HttpSession is required.
-        </description>
-    </parameter>
-
-    <parameter name="direct" type="boolean" direction="in">
-        <description>
-            If true (the default), then the more efficient direct service is used.
-            If false, then the action service is used.
-        </description>
-    </parameter>
-
-    <reserved-parameter name="href"/>
-
-</component-specification>
diff --git a/3.0.4/framework/src/org/apache/tapestry/wml/GoLinkRenderer.java b/3.0.4/framework/src/org/apache/tapestry/wml/GoLinkRenderer.java
deleted file mode 100644
index ca3f83b..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/wml/GoLinkRenderer.java
+++ /dev/null
@@ -1,46 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.wml;
-
-import org.apache.tapestry.link.DefaultLinkRenderer;
-import org.apache.tapestry.link.ILinkRenderer;
-
-/**
- *  A subclass of {@link org.apache.tapestry.link.DefaultLinkRenderer} for
- *  the WML Go element.
- *
- *  @author David Solis
- *  @version $Id$
- *  @since 3.0
- **/
-public class GoLinkRenderer extends DefaultLinkRenderer
-{
-
-	/**
-	 *  A singleton for the go link. 
-	 **/
-
-	 public static final ILinkRenderer SHARED_INSTANCE = new GoLinkRenderer();
-
-    public String getElement()
-    {
-        return "go";
-    }
-
-    public boolean getHasBody()
-    {
-        return false;
-    }
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/wml/Image.java b/3.0.4/framework/src/org/apache/tapestry/wml/Image.java
deleted file mode 100644
index 86e6dd9..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/wml/Image.java
+++ /dev/null
@@ -1,59 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.wml;
-
-import org.apache.tapestry.AbstractComponent;
-import org.apache.tapestry.IAsset;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-
-/**
- *  The Image component indicates that an image is to be included in the text flow. Image layout is done within the
- *  context of normal text layout.
- *
- *  @version $Id$
- *  @author David Solis
- *  @since 3.0
- *
- **/
-
-public abstract class Image extends AbstractComponent
-{
-    /**
-     *  @see org.apache.tapestry.AbstractComponent#renderComponent(org.apache.tapestry.IMarkupWriter, org.apache.tapestry.IRequestCycle)
-     **/
-
-    protected void renderComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        boolean render = !cycle.isRewinding();
-
-        if (render)
-        {
-            writer.beginEmpty("img");
-
-            writer.attribute("src", getImage().buildURL(cycle));
-
-            writer.attribute("alt", getAlt());
-
-            renderInformalParameters(writer, cycle);
-
-            writer.closeTag();
-        }
-    }
-
-    public abstract IAsset getImage();
-
-	public abstract String getAlt();
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/wml/Image.jwc b/3.0.4/framework/src/org/apache/tapestry/wml/Image.jwc
deleted file mode 100644
index 797e67c..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/wml/Image.jwc
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE component-specification PUBLIC
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<component-specification class="org.apache.tapestry.wml.Image" allow-body="no">
-
-    <description>
-        Displays a wml image, deriving the source URL for the image from an asset.
-    </description>
-
-    <parameter name="image" type="org.apache.tapestry.IAsset" direction="in" required="yes">
-        <description>
-            The asset to display.
-        </description>
-    </parameter>
-
-    <parameter name="alt" type="java.lang.String" direction="in" required="yes">
-        <description>
-            This attribute specifies an alternative textual representation for the image. This representation is used
-            when the image can not be displayed using any other method
-        </description>
-    </parameter>
-
-    <reserved-parameter name="src"/>
-
-</component-specification>
diff --git a/3.0.4/framework/src/org/apache/tapestry/wml/Input.java b/3.0.4/framework/src/org/apache/tapestry/wml/Input.java
deleted file mode 100644
index 92a83c5..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/wml/Input.java
+++ /dev/null
@@ -1,90 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.wml;
-
-import org.apache.tapestry.AbstractComponent;
-import org.apache.tapestry.IBinding;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.Tapestry;
-
-/**
- *  The Input element specifies a text entry object.
- *
- *  @version $Id$
- *  @author David Solis
- *  @since 3.0
- *
- **/
-
-public abstract class Input extends AbstractComponent
-{
-
-	/**
-	 *  @see AbstractComponent#renderComponent(IMarkupWriter, IRequestCycle)
-	 **/
-
-	protected void renderComponent(IMarkupWriter writer, IRequestCycle cycle)
-	{
-		boolean render = !cycle.isRewinding();
-
-		if (render)
-		{
-			writer.beginEmpty("input");
-
-			writer.attribute("type", isHidden() ? "password" : "text");
-
-            writer.attribute("name", getName());
-
-			String title = getTitle();
-			if (Tapestry.isNonBlank(title))
-				writer.attribute("title", title);
-
-			String format = getFormat();
-            if (Tapestry.isNonBlank(format))
-				writer.attribute("format", format);
-
-            boolean emptyok = isEmptyok();
-            if (emptyok != false)
-				writer.attribute("emptyok", emptyok);
-
-			renderInformalParameters(writer, cycle);
-
-			String value = readValue();
-			if (Tapestry.isNonBlank(value))
-				writer.attribute("value", value);
-
-			writer.closeTag();
-		}
-	}
-
-	public abstract String getTitle();
-
-	public abstract String getName();
-
-	public abstract String getFormat();
-
-	public abstract boolean isHidden();
-
-	public abstract boolean isEmptyok();
-
-	public abstract IBinding getValueBinding();
-
-	public String readValue()
-    {
-		return getValueBinding().getString();
-	}
-
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/wml/Input.jwc b/3.0.4/framework/src/org/apache/tapestry/wml/Input.jwc
deleted file mode 100644
index 5fc4c88..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/wml/Input.jwc
+++ /dev/null
@@ -1,69 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE component-specification PUBLIC
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<component-specification class="org.apache.tapestry.wml.Input" allow-body="no">
-
-    <description>
-        The Input element specifies a text entry object.
-    </description>
-
-    <parameter name="title" type="java.lang.String" direction="in">
-        <description>
-            The title attribute specifies advisory information about the element. The title may be rendered in a
-            variety of ways by the user agent (eg, suggested bookmark name, pop-up tooltip, etc.).
-        </description>
-    </parameter>
-
-    <parameter name="hidden" type="boolean" direction="in"/>
-
-    <parameter name="name" type="java.lang.String" direction="in" required="yes" >
-        <description>
-            The name attribute specifies a variable name.
-        </description>
-    </parameter>
-
-    <parameter name="format" type="java.lang.String" direction="in">
-        <description>
-            The format attribute specifies an input mask for user input entries. The string consists of mask control
-            characters and static text that is displayed in the input area. The user agent may use the format mask to
-            facilitate accelerated data input. An input mask is only valid when it contains only legal format codes.
-            User agents must ignore invalid masks.
-            The format control characters specify the data format expected to be entered by the user.
-            See the WML specification for valid format control characters.
-        </description>
-    </parameter>
-
-    <parameter name="emptyok" type="boolean" direction="in">
-        <description>
-            The emptyok attribute indicates that this input element accepts empty input although a non-empty format
-            string has been specified.
-        </description>
-    </parameter>
-
-    <parameter name="value" type="java.lang.String" required="yes">
-        <description>
-            Bind value to the variable that should recieve the user input string.
-        </description>
-    </parameter>
-
-    <reserved-parameter name="type"/>
-
-</component-specification>
diff --git a/3.0.4/framework/src/org/apache/tapestry/wml/NestedWMLWriter.java b/3.0.4/framework/src/org/apache/tapestry/wml/NestedWMLWriter.java
deleted file mode 100644
index 414526e..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/wml/NestedWMLWriter.java
+++ /dev/null
@@ -1,68 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.wml;
-
-import java.io.CharArrayWriter;
-import java.io.PrintWriter;
-
-import org.apache.tapestry.IMarkupWriter;
-
-/**
- *  Subclass of {@link org.apache.tapestry.wml.WMLWriter} that is nested.  A nested writer
- *  buffers its output, then inserts it into its parent writer when it is
- *  closed.
- *
- *  @version $Id$
- *  @author David Solis
- *  @since 0.2.9
- * 
- **/
-
-public class NestedWMLWriter extends WMLWriter
-{
-    private IMarkupWriter _parent;
-    private CharArrayWriter _internalBuffer;
-
-    public NestedWMLWriter(IMarkupWriter parent)
-    {
-        super(parent.getContentType());
-
-        _parent = parent;
-
-        _internalBuffer = new CharArrayWriter();
-
-       setWriter(new PrintWriter(_internalBuffer));
-    }
-
-    /**
-     *  Invokes the {@link WMLWriter#close() super-class
-     *  implementation}, then gets the data accumulated in the
-     *  internal buffer and provides it to the containing writer using
-     *  {@link IMarkupWriter#printRaw(char[], int, int)}.
-     *
-     **/
-
-    public void close()
-    {
-        super.close();
-
-        char[] data = _internalBuffer.toCharArray();
-
-        _parent.printRaw(data, 0, data.length);
-
-        _internalBuffer = null;
-        _parent = null;
-    }
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/wml/OnEvent.java b/3.0.4/framework/src/org/apache/tapestry/wml/OnEvent.java
deleted file mode 100644
index 2fc91fa..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/wml/OnEvent.java
+++ /dev/null
@@ -1,62 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.wml;
-
-import org.apache.tapestry.AbstractComponent;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-
-/**
- *  The onevent element binds a task to a particular intrinsic event for the immediately enclosing element, ie,
- *  specifying an onevent element inside an "XYZ" element associates an intrinsic event binding with the "XYZ" element.
- *  The user agent must ignore any onevent element specifying a type that does not correspond to a legal intrinsic event
- *  for the immediately enclosing element.
- *
- *  @version $Id$
- *  @author David Solis
- *  @since 3.0
- *
- **/
-
-public abstract class OnEvent extends AbstractComponent
-{
-    /**
-     *  @see AbstractComponent#renderComponent(IMarkupWriter, IRequestCycle)
-     **/
-
-    protected void renderComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        boolean render = !cycle.isRewinding();
-
-        if (render)
-        {
-            writer.begin("onevent");
-
-            writer.attribute("type", getType());
-
-            renderInformalParameters(writer, cycle);
-        }
-
-        renderBody(writer, cycle);
-
-        if (render)
-        {
-            writer.end();
-        }
-    }
-
-    public abstract String getType();
-
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/wml/OnEvent.jwc b/3.0.4/framework/src/org/apache/tapestry/wml/OnEvent.jwc
deleted file mode 100644
index 576e48b..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/wml/OnEvent.jwc
+++ /dev/null
@@ -1,39 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE component-specification PUBLIC
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<component-specification class="org.apache.tapestry.wml.OnEvent">
-
-    <description>
-        The onevent element binds a task to a particular intrinsic event for the immediately enclosing element, ie,
-        specifying an onevent element inside an "XYZ" element associates an intrinsic event binding with the "XYZ"
-        element.
-        The user agent must ignore any onevent element specifying a type that does not correspond to a legal
-        intrinsic event for the immediately enclosing element.
-    </description>
-
-    <parameter name="type" type="java.lang.String" direction="in" required="yes">
-        <description>
-            The type attribute indicates the name of the intrinsic event
-            (ontimer, onenterforward, onenterbackward, onpick).
-        </description>
-    </parameter>
-
-</component-specification>
diff --git a/3.0.4/framework/src/org/apache/tapestry/wml/Option.java b/3.0.4/framework/src/org/apache/tapestry/wml/Option.java
deleted file mode 100644
index e18d7f7..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/wml/Option.java
+++ /dev/null
@@ -1,64 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.wml;
-
-import org.apache.tapestry.AbstractComponent;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.Tapestry;
-
-/**
- *  This component serves as a container for one item that is listed as a choice in a {@link Select}. A {@link Select}
- *  offers a selection of choices from which usersu may choose one or more items. The select list is created using a
- *  select element which contains a collection of option elements. A string or text describing the item appears between
- *  the opening and closing option tags.
- *
- *  In order to have a dynamic onpick attribute it is better to use a concrete class of
- *  {@link org.apache.tapestry.link.ILinkRenderer} with the {@link OptionRenderer}.
- *
- *  @version $Id$
- *  @author David Solis
- *  @since 3.0
- *
- **/
-
-public abstract class Option extends AbstractComponent {
-
-	/**
-	 *  @see org.apache.tapestry.AbstractComponent#renderComponent(IMarkupWriter, IRequestCycle)
-	 **/
-
-	protected void renderComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        boolean render = !cycle.isRewinding();
-
-        if (render)
-        {
-            writer.begin("option");
-
-            String value = getValue();
-            if (Tapestry.isNonBlank(value))
-                writer.attribute("value", value);
-
-            renderInformalParameters(writer, cycle);
-
-            renderBody(writer, cycle);
-
-            writer.end();
-        }
-	}
-
-    public abstract String getValue();
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/wml/Option.jwc b/3.0.4/framework/src/org/apache/tapestry/wml/Option.jwc
deleted file mode 100644
index fdf5cc4..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/wml/Option.jwc
+++ /dev/null
@@ -1,39 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE component-specification PUBLIC
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN"
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<component-specification class="org.apache.tapestry.wml.Option">
-
-    <description>
-        This component serves as a container for one item that is listed as a choice in a Select. A Select
-        offers a selection of choices from which usersu may choose one or more items. The select list is created using a
-        select element which contains a collection of option elements. A string or text describing the item appears between
-        the opening and closing option tags.
-    </description>
-
-    <parameter name="value" type="java.lang.String" direction="in">
-        <description>
-            The value attribute specifies the value to be used when setting the name variable. When the user selects
-            this option, the resulting value specified in the value attribute is used to set the Select element's
-            name wml variable.
-        </description>
-    </parameter>
-
-</component-specification>
diff --git a/3.0.4/framework/src/org/apache/tapestry/wml/OptionRenderer.java b/3.0.4/framework/src/org/apache/tapestry/wml/OptionRenderer.java
deleted file mode 100644
index 6f41dfc..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/wml/OptionRenderer.java
+++ /dev/null
@@ -1,49 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.wml;
-
-import org.apache.tapestry.link.DefaultLinkRenderer;
-import org.apache.tapestry.link.ILinkRenderer;
-
-/**
- *  Implementation of {@link org.apache.tapestry.link.ILinkRenderer} for
- *  the WML Option element.
- *
- *  The value attribute is reserved.
- *
- *  @version $Id$
- *  @author David Solis
- *  @since 3.0
- *
- **/
-
-public class OptionRenderer extends DefaultLinkRenderer
-{
-	/**
-	 *  A singleton for the option link.
-	 **/
-
-	 public static final ILinkRenderer SHARED_INSTANCE = new OptionRenderer();
-
-    protected String getElement()
-    {
-        return "option";
-    }
-
-    protected String getUrlAttribute()
-    {
-        return "onpick";
-    }
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/wml/Postfield.java b/3.0.4/framework/src/org/apache/tapestry/wml/Postfield.java
deleted file mode 100644
index c24db09..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/wml/Postfield.java
+++ /dev/null
@@ -1,37 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.wml;
-
-import org.apache.tapestry.IRequestCycle;
-
-/**
- *  The postfield element specifies a field name and value for transmission to an origin server during a URL request.
- *  @see Go
- *
- *  @version $Id$
- *  @author David Solis
- *  @since 3.0
- *
- **/
-
-public abstract class Postfield extends AbstractPostfield
-{
-
-    protected void rewind(IRequestCycle cycle)
-    {
-        String value = cycle.getRequestContext().getParameter(getName());
-        updateValue(value);
-    }
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/wml/Postfield.jwc b/3.0.4/framework/src/org/apache/tapestry/wml/Postfield.jwc
deleted file mode 100644
index 318e1b8..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/wml/Postfield.jwc
+++ /dev/null
@@ -1,46 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE component-specification PUBLIC
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<component-specification class="org.apache.tapestry.wml.Postfield" allow-body="no">
-
-    <description>
-        The postfield element specifies a field name and value for transmission to an origin server during an
-        URL request.
-    </description>
-
-    <parameter name="value" type="java.lang.String" required="yes">
-        <description>
-            Bind value to the variable that should recieve the user input string.
-        </description>
-    </parameter>
-
-    <parameter name="name" property-name="varName" type="java.lang.String" direction="in" required="yes">
-        <description>
-            The name attribute specifies an WML variable name.
-        </description>
-    </parameter>
-
-    <reserved-parameter name="value"/>
-
-    <property-specification name="name" type="java.lang.String"/>
-    <property-specification name="form" type="org.apache.tapestry.IForm"/>
-
-</component-specification>
diff --git a/3.0.4/framework/src/org/apache/tapestry/wml/PropertySelection.java b/3.0.4/framework/src/org/apache/tapestry/wml/PropertySelection.java
deleted file mode 100644
index c20cd84..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/wml/PropertySelection.java
+++ /dev/null
@@ -1,76 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.wml;
-
-import org.apache.tapestry.AbstractComponent;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.form.IPropertySelectionModel;
-
-/**
- *  A high level component used to render a drop-down list of options that the user may select.
- *
- *  Informal parameters are applied to the <select> tag.  To have greater control over the <option> tags, you must use
- *  a Select and Option or a concrete class of {@link org.apache.tapestry.link.ILinkRenderer} with the
- *  {@link OptionRenderer}.
- *
- *  @version $Id$
- *  @author David Solis
- */
-
-public abstract class PropertySelection extends AbstractComponent
-{
-    /**
-     *  @see AbstractComponent#renderComponent(IMarkupWriter, IRequestCycle)
-     **/
-
-    protected void renderComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        boolean render = !cycle.isRewinding();
-
-        if (render)
-        {
-            IPropertySelectionModel model = getModel();
-
-            writer.begin("select");
-
-            writer.attribute("name", getName());
-
-            renderInformalParameters(writer, cycle);
-
-            writer.println();
-
-            int count = model.getOptionCount();
-
-            for (int i = 0; i < count; i++)
-            {
-
-                writer.begin("option");
-                writer.attribute("value", model.getValue(i));
-
-                writer.print(model.getLabel(i));
-
-                writer.end();
-                writer.println();
-            }
-
-            writer.end();
-        }
-    }
-
-    public abstract IPropertySelectionModel getModel();
-
-    public abstract String getName();
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/wml/PropertySelection.jwc b/3.0.4/framework/src/org/apache/tapestry/wml/PropertySelection.jwc
deleted file mode 100644
index 8a38fbc..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/wml/PropertySelection.jwc
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE component-specification PUBLIC
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN"
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<component-specification class="org.apache.tapestry.wml.PropertySelection"
-    allow-body="no"
-    allow-informal-parameters="yes">
-
-    <description>
-        Creates an WML select to choose a single property from a list of options.
-    </description>
-
-    <parameter name="name" required="yes" type="java.lang.String" direction="in"/>
-
-    <parameter name="model"
-        type="org.apache.tapestry.form.IPropertySelectionModel"
-        required="yes"
-        direction="auto"/>
-
-</component-specification>
diff --git a/3.0.4/framework/src/org/apache/tapestry/wml/Select.java b/3.0.4/framework/src/org/apache/tapestry/wml/Select.java
deleted file mode 100644
index 0c092c5..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/wml/Select.java
+++ /dev/null
@@ -1,102 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.wml;
-
-import org.apache.tapestry.AbstractComponent;
-import org.apache.tapestry.ApplicationRuntimeException;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.Tapestry;
-
-/**
- *  The Select element lets users pick from a list of options. Each option
- *  is specified by an Option element. Each Option element may have one
- *  line of formatted text (which may be wrapped or truncated by the user
- *  agent if too long).
- *
- *  Unless multiple selections are required it is generally easier to use the {@link PropertySelection} component.
- *
- *  @version $Id$
- *  @author David Solis
- *  @since 3.0
- *
- **/
-public abstract class Select extends AbstractComponent
-{
-    /**
-     *  Used by the <code>Select</code> to record itself as a
-     *  {@link IRequestCycle} attribute, so that the
-     *  {@link Option} components it wraps can have access to it.
-     *
-     **/
-
-    private final static String ATTRIBUTE_NAME = "org.apache.tapestry.active.Select";
-
-    /**
-     * @see org.apache.tapestry.AbstractComponent#renderComponent(IMarkupWriter, IRequestCycle)
-     **/
-
-    protected void renderComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        if (cycle.getAttribute(ATTRIBUTE_NAME) != null)
-            throw new ApplicationRuntimeException(
-                Tapestry.getMessage("Select.may-not-nest"),
-                this,
-                null,
-                null);
-
-        cycle.setAttribute(ATTRIBUTE_NAME, this);
-
-        boolean render = !cycle.isRewinding();
-
-        if (render)
-        {
-            writer.begin("select");
-
-            writer.attribute("name", getName());
-
-            String value = getValue();
-            if (Tapestry.isNonBlank(value))
-                writer.attribute("value", value);
-
-            String title = getTitle();
-            if (Tapestry.isNonBlank(title))
-                writer.attribute("title", title);
-
-            boolean multiple = isMultiple();
-            if (multiple)
-                writer.attribute("multiple", multiple);
-
-            renderInformalParameters(writer, cycle);
-        }
-
-        renderBody(writer, cycle);
-
-        if (render)
-        {
-            writer.end();
-        }
-
-        cycle.removeAttribute(ATTRIBUTE_NAME);
-    }
-
-    public abstract boolean isMultiple();
-
-    public abstract String getName();
-
-    public abstract String getValue();
-
-    public abstract String getTitle();
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/wml/Select.jwc b/3.0.4/framework/src/org/apache/tapestry/wml/Select.jwc
deleted file mode 100644
index c9f6041..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/wml/Select.jwc
+++ /dev/null
@@ -1,73 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-  
-<component-specification class="org.apache.tapestry.wml.Select">
-
-	<description>
-		The WMLSelect element lets users pick from a list of options. Each option is specified 
-		by an Option element. Each Option element may have one line of formatted text 
-		(which may be wrapped or truncated by the user agent if too long). 
-		Option elements may be organised into hierarchical groups using the OptionGroup 
-		element. 
-	</description>
-
-	<parameter name="multiple" type="boolean" direction="in">
-        <description>
-            This attribute indicates that the select list should accept multiple selections. 
-            When not set, the select list should only accept a single selected option.
-        </description>
-	</parameter>
-
-	<parameter name="title" type="java.lang.String" direction="in">
-		<description>
-			This attribute specifies a title for this element, which may be used in the 
-			presentation of this object.
-			This attribute specifies a title for this element, which may be used in the 
-			presentation of this object.
-		</description>
-	</parameter>
-
-	<parameter name="name" type="java.lang.String" direction="in">
-        <description>
-            The name attribute indicates the name of the variable to set with the result 
-            of the selection. The variable is set to the string value of the chosen option
-            element, which is specified with the value attribute. The name variable's value 
-            is used to pre-select options in the select list.
-        </description>
-    </parameter>
-
-	<parameter name="value" type="java.lang.String" direction="in">
-        <description>
-            The value attribute indicates the default value of the variable named in the 
-            name attribute. When the element is displayed, and the variable named in the 
-            name attribute is not set, the name variable may be assigned the value 
-            specified in the value attribute, depending on the values defined in iname and 
-            ivalue. If the name variable already contains a value, the value attribute is 
-            ignored. Any application of the default value is done before the list is 
-            pre-selected with the value of the name variable.
-            If this element allows the selection of multiple options, the result of the 
-            user's choice is a list of all selected values, separated by the semicolon 
-            character. The name variable is set with this result. In addition, the value 
-            attribute is interpreted as a semicolon-separated list of pre-selected options.
-        </description>
-	</parameter>
-
-</component-specification>
diff --git a/3.0.4/framework/src/org/apache/tapestry/wml/SelectionField.java b/3.0.4/framework/src/org/apache/tapestry/wml/SelectionField.java
deleted file mode 100644
index d2fc1c9..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/wml/SelectionField.java
+++ /dev/null
@@ -1,40 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.wml;
-
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.form.IPropertySelectionModel;
-
-/**
- *  SelectionField specifies a postfield element and it is used to complement the {@link PropertySelection} component.
- *
- *  @version $Id$
- *  @author David Solis
- *  @since 3.0
- *
- **/
-public abstract class SelectionField extends AbstractPostfield
-{
-    protected void rewind(IRequestCycle cycle)
-    {
-        String optionValue = cycle.getRequestContext().getParameter(getName());
-        IPropertySelectionModel model = getModel();
-        Object value = (optionValue == null) ? null : model.translateValue(optionValue);
-
-        updateValue(value);
-    }
-
-    public abstract IPropertySelectionModel getModel();
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/wml/SelectionField.jwc b/3.0.4/framework/src/org/apache/tapestry/wml/SelectionField.jwc
deleted file mode 100644
index 0f35faa..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/wml/SelectionField.jwc
+++ /dev/null
@@ -1,46 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE component-specification PUBLIC
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN"
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<component-specification class="org.apache.tapestry.wml.SelectionField" allow-body="no">
-
-    <description>
-        SelectionField specifies a postfield element and it is used to complement the PropertySelection component.
-    </description>
-
-    <parameter name="value" required="yes" type="java.lang.Object"/>
-
-    <parameter name="model"
-        type="org.apache.tapestry.form.IPropertySelectionModel"
-        required="yes"
-        direction="auto"/>
-
-    <parameter name="name" property-name="varName" type="java.lang.String" direction="in" required="yes">
-        <description>
-            The name attribute specifies an WML variable name.
-        </description>
-    </parameter>
-
-    <reserved-parameter name="value"/>
-
-    <property-specification name="name" type="java.lang.String"/>
-    <property-specification name="form" type="org.apache.tapestry.IForm"/>
-
-</component-specification>
diff --git a/3.0.4/framework/src/org/apache/tapestry/wml/Setvar.java b/3.0.4/framework/src/org/apache/tapestry/wml/Setvar.java
deleted file mode 100644
index 57b300e..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/wml/Setvar.java
+++ /dev/null
@@ -1,69 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.wml;
-
-import org.apache.tapestry.AbstractComponent;
-import org.apache.tapestry.IBinding;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.Tapestry;
-
-/**
- *  The setvar element specifies the variable to set in the current browser context as a side effect of executing a task.
- *
- *  @version $Id$
- *  @author David Solis
- *  @since 3.0
- *
- */
-
-public abstract class Setvar extends AbstractComponent
-{
-    /**
-     *  @see AbstractComponent#renderComponent(IMarkupWriter, IRequestCycle)
-     **/
-
-    protected void renderComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        boolean render = !cycle.isRewinding();
-
-        if (render)
-        {
-            writer.beginEmpty("setvar");
-
-            writer.attribute("name", getName());
-
-            renderInformalParameters(writer, cycle);
-
-            String value = readValue();
-            if (Tapestry.isNonBlank(value))
-                writer.attribute("value", value);
-            else
-                writer.attribute("value", "");
-
-            writer.closeTag();
-        }
-    }
-
-    public abstract String getName();
-
-    public abstract IBinding getValueBinding();
-
-    public String readValue()
-    {
-        return getValueBinding().getString();
-    }
-
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/wml/Setvar.jwc b/3.0.4/framework/src/org/apache/tapestry/wml/Setvar.jwc
deleted file mode 100644
index eb17b20..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/wml/Setvar.jwc
+++ /dev/null
@@ -1,40 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE component-specification PUBLIC
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<component-specification class="org.apache.tapestry.wml.Setvar" allow-body="no">
-
-    <description>
-        The setvar element specifies the variable to set in the current browser context as a side effect of executing
-        a task.
-    </description>
-    <parameter name="name" type="java.lang.String" direction="in" required="yes">
-        <description>
-            The name attribute specifies a WML variable name.
-        </description>
-    </parameter>
-
-    <parameter name="value" type="java.lang.String" required="yes">
-        <description>
-            Bind value to the variable that should recieve the user input string.
-        </description>
-    </parameter>
-
-</component-specification>
diff --git a/3.0.4/framework/src/org/apache/tapestry/wml/Timer.java b/3.0.4/framework/src/org/apache/tapestry/wml/Timer.java
deleted file mode 100644
index 0bba5a7..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/wml/Timer.java
+++ /dev/null
@@ -1,68 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.wml;
-
-import org.apache.tapestry.AbstractComponent;
-import org.apache.tapestry.IBinding;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.Tapestry;
-
-/**
- *  The Timer element declares a card timer, which exposes a means of processing inactivity or idle time.
- *  The timer is initialised and started at card entry and is stopped when the card is exited.
- *
- *  @version $Id$
- *  @author David Solis
- *  @since 3.0
- */
-
-public abstract class Timer extends AbstractComponent
-{
-    /**
-     *  @see AbstractComponent#renderComponent(IMarkupWriter, IRequestCycle)
-     **/
-
-    protected void renderComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-        boolean render = !cycle.isRewinding();
-
-        if (render)
-        {
-            writer.beginEmpty("timer");
-
-            writer.attribute("name", getName());
-
-            String value = readValue();
-            if (Tapestry.isNonBlank(value))
-                writer.attribute("value", value);
-            else
-                writer.attribute("value", "0");
-
-            renderInformalParameters(writer, cycle);
-
-            writer.closeTag();
-        }
-    }
-
-    public abstract String getName();
-
-    public abstract IBinding getValueBinding();
-
-    public String readValue()
-    {
-        return getValueBinding().getString();
-    }
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/wml/Timer.jwc b/3.0.4/framework/src/org/apache/tapestry/wml/Timer.jwc
deleted file mode 100644
index 3a67805..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/wml/Timer.jwc
+++ /dev/null
@@ -1,48 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE component-specification PUBLIC
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<component-specification class="org.apache.tapestry.wml.Timer" allow-body="no">
-
-    <description>
-        The Timer element declares a card timer, which exposes a means of processing inactivity or idle time.
-        The timer is initialised and started at card entry and is stopped when the card is exited.
-    </description>
-
-    <parameter name="name" type="java.lang.String" direction="in">
-        <description>
-            The name attribute specifies the name of the variable to be set with the value of the timer. The name
-            variable's value is used to set the timeout period upon timer initialisation. The variable named by the
-            name attribute will be set with the current timer value when the card is exited or when the timer expires.
-            For example, if the timer expires, the name variable is set to a value of "0".
-        </description>
-    </parameter>
-
-    <parameter name="value" type="java.lang.String">
-        <description>
-            The value attribute indicates the default value of the variable named in the name attribute. When the
-            timer is initialised and the variable named in the name attribute is not set, the name variable is assigned
-            the value specified in the value attribute. If the name variable already contains a value, the value
-            attribute is ignored. If the name attribute is not specified, the timeout is always initialised to the
-            value specified in the value attribute.
-        </description>
-    </parameter>
-
-</component-specification>
diff --git a/3.0.4/framework/src/org/apache/tapestry/wml/WML.library b/3.0.4/framework/src/org/apache/tapestry/wml/WML.library
deleted file mode 100644
index 4acc557..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/wml/WML.library
+++ /dev/null
@@ -1,39 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-    Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE library-specification PUBLIC
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN"
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<library-specification>
-    <property name="org.apache.tapestry.template-extension" value="wml"/>
-
-    <component-type type="Card" specification-path="/org/apache/tapestry/wml/Card.jwc"/>
-    <component-type type="Do" specification-path="/org/apache/tapestry/wml/Do.jwc"/>
-    <component-type type="Go" specification-path="/org/apache/tapestry/wml/Go.jwc"/>
-    <component-type type="Input" specification-path="/org/apache/tapestry/wml/Input.jwc"/>
-    <component-type type="OnEvent" specification-path="/org/apache/tapestry/wml/OnEvent.jwc"/>
-    <component-type type="Postfield" specification-path="/org/apache/tapestry/wml/Postfield.jwc"/>
-    <component-type type="Setvar" specification-path="/org/apache/tapestry/wml/Setvar.jwc"/>
-    <component-type type="Timer" specification-path="/org/apache/tapestry/wml/Timer.jwc"/>
-    <component-type type="Image" specification-path="/org/apache/tapestry/wml/Image.jwc"/>
-    <component-type type="Option" specification-path="/org/apache/tapestry/wml/Option.jwc"/>
-    <component-type type="PropertySelection" specification-path="/org/apache/tapestry/wml/PropertySelection.jwc"/>
-    <component-type type="Select" specification-path="/org/apache/tapestry/wml/Select.jwc"/>
-    <component-type type="SelectionField" specification-path="/org/apache/tapestry/wml/SelectionField.jwc"/>
-
-</library-specification>
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/wml/WMLEngine.java b/3.0.4/framework/src/org/apache/tapestry/wml/WMLEngine.java
deleted file mode 100644
index 5e51101..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/wml/WMLEngine.java
+++ /dev/null
@@ -1,89 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.wml;
-
-import javax.servlet.ServletException;
-
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.engine.BaseEngine;
-
-/**
- *  Subclass of {@link BaseEngine} used for WML applications to change the
- *  Exception, StaleLink and StaleSession pages.
- *
- *  @author David Solis
- *  @version $Id$
- *  @since 3.0
- * 
- **/
-
-public class WMLEngine extends BaseEngine
-{
-	protected void activateExceptionPage(
-		IRequestCycle cycle,
-		org.apache.tapestry.request.ResponseOutputStream output,
-		Throwable cause)
-		throws ServletException
-	{
-		super.activateExceptionPage(cycle, output, cause);
-		// Sometimes the exception page isn't enough
-        reportException(
-            Tapestry.getMessage("AbstractEngine.unable-to-process-client-request"),
-            cause);
-	}
-
-
-	/** @since 3.0 **/
-
-	protected String getExceptionPageName()
-	{
-		return EXCEPTION_PAGE;
-	}
-	
-	/** @since 3.0 **/
-
-	protected String getStaleLinkPageName()
-	{
-		return STALE_LINK_PAGE;
-	}
-
-	/** @since 3.0 **/
-
-	protected String getStaleSessionPageName()
-	{
-		return STALE_SESSION_PAGE;
-	}
-
-	/**
-	 *  The name of the page used for reporting exceptions.
-	 *  
-	 **/
-	private static final String EXCEPTION_PAGE = "WMLException";
-
-	/**
-	 *  The name of the page used for reporting stale links.
-	 *
-	 * */
-
-	private static final String STALE_LINK_PAGE = "WMLStaleLink";
-
-	/**
-	 *  The name of the page used for reporting state sessions.
-	 *
-	 **/
-
-	private static final String STALE_SESSION_PAGE = "WMLStaleSession";
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/wml/WMLWriter.java b/3.0.4/framework/src/org/apache/tapestry/wml/WMLWriter.java
deleted file mode 100644
index 53e0398..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/wml/WMLWriter.java
+++ /dev/null
@@ -1,116 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.wml;
-
-import java.io.OutputStream;
-
-import org.apache.tapestry.AbstractMarkupWriter;
-import org.apache.tapestry.IMarkupWriter;
-
-/**
- *  This class is used to create WML output.
- *
- *  <p>The <code>WMLResponseWriter</code> handles the necessary escaping 
- *  of invalid characters.
- *  Specifically, the '$', '&lt;', '&gt;' and '&amp;' characters are properly
- *  converted to their WML entities by the <code>print()</code> methods.
- *  Similar measures are taken by the {@link #attribute(String, String)} method.
- *  Other invalid characters are converted to their numeric entity equivalent.
- *
- *  <p>This class makes it easy to generate trivial and non-trivial WML pages.
- *  It is also useful to generate WML snippets. It's ability to do simple
- *  formatting is very useful. A JSP may create an instance of the class
- *  and use it as an alternative to the simple-minded <b>&lt;%= ... %&gt;</b>
- *  construct, espcially because it can handle null more cleanly.
- *
- *  @version $Id$
- *  @author David Solis
- *  @since 0.2.9
- * 
- **/
-
-public class WMLWriter extends AbstractMarkupWriter
-{
-
-    private static final String[] entities = new String[64];
-    private static final boolean[] safe = new boolean[128];
-    private static final String SAFE_CHARACTERS =
-        "01234567890"
-            + "abcdefghijklmnopqrstuvwxyz"
-            + "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
-            + "\t\n\r !\"#%'()*+,-./:;=?@[\\]^_`{|}~";
-
-    static {
-        entities['"'] = "&quot;";
-        entities['<'] = "&lt;";
-        entities['>'] = "&gt;";
-        entities['&'] = "&amp;";
-        entities['$'] = "$$";
-
-        int length = SAFE_CHARACTERS.length();
-        for (int i = 0; i < length; i++)
-            safe[SAFE_CHARACTERS.charAt(i)] = true;
-    }
-
-    /**
-     *  Creates a response writer for content type "text/vnd.wap.wml".
-     * 
-     **/
-
-    public WMLWriter(OutputStream stream)
-    {
-        this(stream, "UTF-8");
-    }
-
-    /**
-     * 
-     * @param stream the output stream where to write the text
-     * @param encoding the encoding to be used to generate the output
-     * @since 3.0
-     * 
-     **/
-    public WMLWriter(OutputStream stream, String encoding)
-    {
-        this("text/vnd.wap.wml", encoding, stream);
-    }
-
-    public WMLWriter(String contentType, OutputStream stream)
-    {
-        super(safe, entities, contentType, stream);
-    }
-
-    /**
-     * 
-     * @param mimeType the MIME type to be used to generate the content type
-     * @param encoding the encoding to be used to generate the output
-     * @param stream the output stream where to write the text
-     * @since 3.0
-     * 
-     **/
-    public WMLWriter(String mimeType, String encoding, OutputStream stream)
-    {
-        super(safe, entities, mimeType, encoding, stream);
-    }
-
-    protected WMLWriter(String contentType)
-    {
-        super(safe, entities, contentType);
-    }
-
-    public IMarkupWriter getNestedWriter()
-    {
-        return new NestedWMLWriter(this);
-    }
-}
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/wml/package.html b/3.0.4/framework/src/org/apache/tapestry/wml/package.html
deleted file mode 100644
index 3575716..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/wml/package.html
+++ /dev/null
@@ -1,23 +0,0 @@
-<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN">
-<!-- $Id$ -->
-<html>
-<head>
-<title>Tapestry: Web Application Framework</title>
-</head>
-<body>
-
-<p>Classes and components for main elements of the Wireless Markup Language (WML 1.2).
-
-<ul>
-<li>{@link org.apache.tapestry.wml.Deck} is an alternative to
-{@link org.apache.tapestry.html.BasePage} that provides a <code>text/wml</code> response.</li>
-<li>Basic support for WMLScript.</li>
-<li><b>No support for WML style tables.</li>
-</ul>
- 
-@author Howard Lewis Ship <a href="mailto:hlship@apache.org">hlship@apache.org</a>
-@author David Solis <a href="mailto:dsolis@apache.org">dsolis@apache.org</a>
- 
-</body>
-</html>
- 
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/wml/pages/WMLException.java b/3.0.4/framework/src/org/apache/tapestry/wml/pages/WMLException.java
deleted file mode 100644
index 28418ab..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/wml/pages/WMLException.java
+++ /dev/null
@@ -1,51 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.wml.pages;
-
-import org.apache.tapestry.util.exception.ExceptionAnalyzer;
-import org.apache.tapestry.util.exception.ExceptionDescription;
-import org.apache.tapestry.wml.Deck;
-
-/**
- *  Default exception reporting page for WML applications.
- *
- *  @author David Solis
- *  @version $Id$
- *  @since 3.0
- * 
- **/
-public class WMLException extends Deck 
-{
-	private ExceptionDescription[] _exceptions;
-
-	public void initialize()
-	{
-		_exceptions = null;
-	}
-
-	public ExceptionDescription[] getExceptions()
-	{
-		return _exceptions;
-	}
-
-	public void setException(Throwable value)
-	{
-		ExceptionAnalyzer analyzer;
-
-		analyzer = new ExceptionAnalyzer();
-
-		_exceptions = analyzer.analyze(value);
-	}
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/wml/pages/WMLException.page b/3.0.4/framework/src/org/apache/tapestry/wml/pages/WMLException.page
deleted file mode 100644
index 964fdd8..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/wml/pages/WMLException.page
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<page-specification class="org.apache.tapestry.wml.pages.WMLException">
-  
-  <property name="org.apache.tapestry.template-extension" value="wml"/>
-  
-  <property-specification name="current" type="org.apache.tapestry.util.exception.ExceptionDescription"/>
-
-  <component id="restart" type="ServiceLink">
-    <binding name="service" expression="@org.apache.tapestry.Tapestry@RESTART_SERVICE"/>
-  </component>
-
-  <component id="foreachProperty" type="Foreach">
-  	<static-binding name="element" value="tr"/>
-    <binding name="source" expression="current.properties"/>
-  </component>
-
-</page-specification>
diff --git a/3.0.4/framework/src/org/apache/tapestry/wml/pages/WMLException.wml b/3.0.4/framework/src/org/apache/tapestry/wml/pages/WMLException.wml
deleted file mode 100644
index 2d4a7b2..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/wml/pages/WMLException.wml
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0"?>
-<!-- $Id -->
-   <!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.2//EN"
-   "http://www.wapforum.org/DTD/wml12.dtd">
-<wml>
-    <head>
-        <meta http-equiv="Cache-Control" content="must-revalidate" forua="true"/>
-        <meta http-equiv="Cache-Control" content="no-cache" forua="true"/>
-    </head>
-
-	<card id="Exception" title="Exception">
-		<p>
-			An exception has occured.
-            You may continue by <b><a jwcid="restart">restarting</a></b> the session.<br/>
-            <table columns="1">
-				<p jwcid="@Foreach" source="ognl:exceptions" value="ognl:current">
-					<tr><td><b jwcid="@Insert" value="ognl:current.exceptionClassName">some.exception.Class</b></td></tr>
-					<tr><td><b jwcid="@Insert" value="ognl:current.message">A message describing the exception.</b></td></tr>
-					<tr jwcid="foreachProperty">
-						<td><b jwcid="@Insert" value="ognl:components.foreachProperty.value.name">Property Name</b>:<b jwcid="@Insert" value="ognl:components.foreachProperty.value.value">Property Value</b></td>
-					</tr>
-				</p>
-			</table>
-		</p>
-				
-	</card>
-</wml>
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/wml/pages/WMLStaleLink.java b/3.0.4/framework/src/org/apache/tapestry/wml/pages/WMLStaleLink.java
deleted file mode 100644
index 61b8ebb..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/wml/pages/WMLStaleLink.java
+++ /dev/null
@@ -1,33 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.wml.pages;
-
-import org.apache.tapestry.wml.Deck;
-
-
-/**
- *  Stores a message (taken from the {@link org.apache.tapestry.StaleLinkException})
- *  that is displayed as part of the page.
- *
- *  @author David Solis
- *  @version $Id$
- *  @since 3.0
- *
- **/
-
-public abstract class WMLStaleLink extends Deck
-{
-    public abstract void setMessage(String message);
-}
diff --git a/3.0.4/framework/src/org/apache/tapestry/wml/pages/WMLStaleLink.page b/3.0.4/framework/src/org/apache/tapestry/wml/pages/WMLStaleLink.page
deleted file mode 100644
index 0ee9d63..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/wml/pages/WMLStaleLink.page
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-  
-<page-specification class="org.apache.tapestry.wml.pages.WMLStaleLink">
-  
-  <property name="org.apache.tapestry.template-extension" value="wml"/>
-
-  <property-specification name="message" type="java.lang.String"/>
-
-  <component id="home" type="ServiceLink">
-    <binding name="service" expression="@org.apache.tapestry.Tapestry@HOME_SERVICE"/>
-  </component>
-  
-</page-specification>
diff --git a/3.0.4/framework/src/org/apache/tapestry/wml/pages/WMLStaleLink.wml b/3.0.4/framework/src/org/apache/tapestry/wml/pages/WMLStaleLink.wml
deleted file mode 100644
index 9adb5e2..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/wml/pages/WMLStaleLink.wml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0"?>
-<!-- $Id -->
-   <!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.2//EN"
-   "http://www.wapforum.org/DTD/wml12.dtd">
-<wml>
-    <head>
-        <meta http-equiv="Cache-Control" content="must-revalidate" forua="true"/>
-        <meta http-equiv="Cache-Control" content="no-cache" forua="true"/>
-    </head>
-
-	<card id="StaleLink" title="StaleLink">
-		<p>You have clicked on a <i>stale link</i>.</p>  
-		<p>
-			<b jwcid="@Insert" value="ognl:message">Exception message goes here.</b>
-		</p>
-		<p>
-			This is most likely the result of using your browser's <b>back</b> button, but can also be an application error.
-		</p>
-		<p>
-			You may continue by returning to the application's <b><a jwcid="home">home page</a></b>.
-		</p>				
-	</card>
-</wml>
\ No newline at end of file
diff --git a/3.0.4/framework/src/org/apache/tapestry/wml/pages/WMLStaleSession.page b/3.0.4/framework/src/org/apache/tapestry/wml/pages/WMLStaleSession.page
deleted file mode 100644
index 718feb5..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/wml/pages/WMLStaleSession.page
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<page-specification class="org.apache.tapestry.wml.Deck">
-  
-  <property name="org.apache.tapestry.template-extension" value="wml"/>
-
-  <component id="restart" type="ServiceLink">
-    <binding name="service" expression="@org.apache.tapestry.Tapestry@RESTART_SERVICE"/>
-  </component>
-  
-</page-specification>
diff --git a/3.0.4/framework/src/org/apache/tapestry/wml/pages/WMLStaleSession.wml b/3.0.4/framework/src/org/apache/tapestry/wml/pages/WMLStaleSession.wml
deleted file mode 100644
index 6869804..0000000
--- a/3.0.4/framework/src/org/apache/tapestry/wml/pages/WMLStaleSession.wml
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0"?>
-<!-- $Id -->
-   <!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.2//EN"
-   "http://www.wapforum.org/DTD/wml12.dtd">
-<wml>
-    <head>
-        <meta http-equiv="Cache-Control" content="must-revalidate" forua="true"/>
-        <meta http-equiv="Cache-Control" content="no-cache" forua="true"/>
-    </head>
-
-	<card id="StaleSession" title="StaleSession">
-		<p>Your session has timed out.</p>			
-		<p>Web applications store information about what you are doing on the server.  This information
-		is called the <em>session</em>.</p>
-		
-		<p>Web servers must track many, many sessions.  If you
-		are inactive for a long enough time (usually, a few minutes), this information is discarded to
-		make room for active users.</p>
-		
-		<p>At this point you may <b><a jwcid="restart">restart</a></b> the session to continue.</p>
-	</card>
-</wml>
\ No newline at end of file
diff --git a/3.0.4/img-src/LinePrecise.psp b/3.0.4/img-src/LinePrecise.psp
deleted file mode 100644
index 9e06f2b..0000000
--- a/3.0.4/img-src/LinePrecise.psp
+++ /dev/null
Binary files differ
diff --git a/3.0.4/img-src/Tapestry-Banner.psp b/3.0.4/img-src/Tapestry-Banner.psp
deleted file mode 100644
index b1e876e..0000000
--- a/3.0.4/img-src/Tapestry-Banner.psp
+++ /dev/null
Binary files differ
diff --git a/3.0.4/img-src/Tapestry-Wiki-Logo.psp b/3.0.4/img-src/Tapestry-Wiki-Logo.psp
deleted file mode 100644
index f42bba5..0000000
--- a/3.0.4/img-src/Tapestry-Wiki-Logo.psp
+++ /dev/null
Binary files differ
diff --git a/3.0.4/img-src/TapestryLogo.psp b/3.0.4/img-src/TapestryLogo.psp
deleted file mode 100644
index 00f4c86..0000000
--- a/3.0.4/img-src/TapestryLogo.psp
+++ /dev/null
Binary files differ
diff --git a/3.0.4/img-src/caution.psp b/3.0.4/img-src/caution.psp
deleted file mode 100644
index 871139d..0000000
--- a/3.0.4/img-src/caution.psp
+++ /dev/null
Binary files differ
diff --git a/3.0.4/img-src/home.psp b/3.0.4/img-src/home.psp
deleted file mode 100644
index 15cb8fe..0000000
--- a/3.0.4/img-src/home.psp
+++ /dev/null
Binary files differ
diff --git a/3.0.4/img-src/important.psp b/3.0.4/img-src/important.psp
deleted file mode 100644
index a1113fe..0000000
--- a/3.0.4/img-src/important.psp
+++ /dev/null
Binary files differ
diff --git a/3.0.4/img-src/next.psp b/3.0.4/img-src/next.psp
deleted file mode 100644
index f68f03d..0000000
--- a/3.0.4/img-src/next.psp
+++ /dev/null
Binary files differ
diff --git a/3.0.4/img-src/note.psp b/3.0.4/img-src/note.psp
deleted file mode 100644
index eb7e65e..0000000
--- a/3.0.4/img-src/note.psp
+++ /dev/null
Binary files differ
diff --git a/3.0.4/img-src/prev.psp b/3.0.4/img-src/prev.psp
deleted file mode 100644
index 0c23a01..0000000
--- a/3.0.4/img-src/prev.psp
+++ /dev/null
Binary files differ
diff --git a/3.0.4/img-src/tip.psp b/3.0.4/img-src/tip.psp
deleted file mode 100644
index 12902fd..0000000
--- a/3.0.4/img-src/tip.psp
+++ /dev/null
Binary files differ
diff --git a/3.0.4/img-src/up.psp b/3.0.4/img-src/up.psp
deleted file mode 100644
index 65a8d51..0000000
--- a/3.0.4/img-src/up.psp
+++ /dev/null
Binary files differ
diff --git a/3.0.4/img-src/vlib/add.psp b/3.0.4/img-src/vlib/add.psp
deleted file mode 100644
index 492c8c5..0000000
--- a/3.0.4/img-src/vlib/add.psp
+++ /dev/null
Binary files differ
diff --git a/3.0.4/img-src/vlib/browser-slice.jsd b/3.0.4/img-src/vlib/browser-slice.jsd
deleted file mode 100644
index 7cff6e2..0000000
--- a/3.0.4/img-src/vlib/browser-slice.jsd
+++ /dev/null
Binary files differ
diff --git a/3.0.4/img-src/vlib/browser.psp b/3.0.4/img-src/vlib/browser.psp
deleted file mode 100644
index 446d01d..0000000
--- a/3.0.4/img-src/vlib/browser.psp
+++ /dev/null
Binary files differ
diff --git a/3.0.4/img-src/vlib/cancel.psp b/3.0.4/img-src/vlib/cancel.psp
deleted file mode 100644
index 68ff311..0000000
--- a/3.0.4/img-src/vlib/cancel.psp
+++ /dev/null
Binary files differ
diff --git a/3.0.4/img-src/vlib/checkout.psp b/3.0.4/img-src/vlib/checkout.psp
deleted file mode 100644
index 979ee0f..0000000
--- a/3.0.4/img-src/vlib/checkout.psp
+++ /dev/null
Binary files differ
diff --git a/3.0.4/img-src/vlib/continue.psp b/3.0.4/img-src/vlib/continue.psp
deleted file mode 100644
index e6cdd3c..0000000
--- a/3.0.4/img-src/vlib/continue.psp
+++ /dev/null
Binary files differ
diff --git a/3.0.4/img-src/vlib/delete-cancel.psp b/3.0.4/img-src/vlib/delete-cancel.psp
deleted file mode 100644
index 9aa30e5..0000000
--- a/3.0.4/img-src/vlib/delete-cancel.psp
+++ /dev/null
Binary files differ
diff --git a/3.0.4/img-src/vlib/delete-confirm.psp b/3.0.4/img-src/vlib/delete-confirm.psp
deleted file mode 100644
index ccf2b10..0000000
--- a/3.0.4/img-src/vlib/delete-confirm.psp
+++ /dev/null
Binary files differ
diff --git a/3.0.4/img-src/vlib/delete.psp b/3.0.4/img-src/vlib/delete.psp
deleted file mode 100644
index 2e78f2f..0000000
--- a/3.0.4/img-src/vlib/delete.psp
+++ /dev/null
Binary files differ
diff --git a/3.0.4/img-src/vlib/edit.psp b/3.0.4/img-src/vlib/edit.psp
deleted file mode 100644
index 4f6d39a..0000000
--- a/3.0.4/img-src/vlib/edit.psp
+++ /dev/null
Binary files differ
diff --git a/3.0.4/img-src/vlib/error-icon.psp b/3.0.4/img-src/vlib/error-icon.psp
deleted file mode 100644
index bcb272e..0000000
--- a/3.0.4/img-src/vlib/error-icon.psp
+++ /dev/null
Binary files differ
diff --git a/3.0.4/img-src/vlib/info-icon.psp b/3.0.4/img-src/vlib/info-icon.psp
deleted file mode 100644
index 91f5b6d..0000000
--- a/3.0.4/img-src/vlib/info-icon.psp
+++ /dev/null
Binary files differ
diff --git a/3.0.4/img-src/vlib/login.psp b/3.0.4/img-src/vlib/login.psp
deleted file mode 100644
index 547231b..0000000
--- a/3.0.4/img-src/vlib/login.psp
+++ /dev/null
Binary files differ
diff --git a/3.0.4/img-src/vlib/nav-slice.jsd b/3.0.4/img-src/vlib/nav-slice.jsd
deleted file mode 100644
index a3166e3..0000000
--- a/3.0.4/img-src/vlib/nav-slice.jsd
+++ /dev/null
Binary files differ
diff --git a/3.0.4/img-src/vlib/nav.psp b/3.0.4/img-src/vlib/nav.psp
deleted file mode 100644
index ec23a6e..0000000
--- a/3.0.4/img-src/vlib/nav.psp
+++ /dev/null
Binary files differ
diff --git a/3.0.4/img-src/vlib/next.psp b/3.0.4/img-src/vlib/next.psp
deleted file mode 100644
index 9a5c34c..0000000
--- a/3.0.4/img-src/vlib/next.psp
+++ /dev/null
Binary files differ
diff --git a/3.0.4/img-src/vlib/question-icon.psp b/3.0.4/img-src/vlib/question-icon.psp
deleted file mode 100644
index 6d33214..0000000
--- a/3.0.4/img-src/vlib/question-icon.psp
+++ /dev/null
Binary files differ
diff --git a/3.0.4/img-src/vlib/register.psp b/3.0.4/img-src/vlib/register.psp
deleted file mode 100644
index 581856e..0000000
--- a/3.0.4/img-src/vlib/register.psp
+++ /dev/null
Binary files differ
diff --git a/3.0.4/img-src/vlib/return.psp b/3.0.4/img-src/vlib/return.psp
deleted file mode 100644
index 5d29e0d..0000000
--- a/3.0.4/img-src/vlib/return.psp
+++ /dev/null
Binary files differ
diff --git a/3.0.4/img-src/vlib/search.psp b/3.0.4/img-src/vlib/search.psp
deleted file mode 100644
index 77b7872..0000000
--- a/3.0.4/img-src/vlib/search.psp
+++ /dev/null
Binary files differ
diff --git a/3.0.4/img-src/vlib/sort-down.psp b/3.0.4/img-src/vlib/sort-down.psp
deleted file mode 100644
index f993265..0000000
--- a/3.0.4/img-src/vlib/sort-down.psp
+++ /dev/null
Binary files differ
diff --git a/3.0.4/img-src/vlib/sort-up.psp b/3.0.4/img-src/vlib/sort-up.psp
deleted file mode 100644
index b5d4aed..0000000
--- a/3.0.4/img-src/vlib/sort-up.psp
+++ /dev/null
Binary files differ
diff --git a/3.0.4/img-src/vlib/step1.psp b/3.0.4/img-src/vlib/step1.psp
deleted file mode 100644
index 4b5c31f..0000000
--- a/3.0.4/img-src/vlib/step1.psp
+++ /dev/null
Binary files differ
diff --git a/3.0.4/img-src/vlib/step2.psp b/3.0.4/img-src/vlib/step2.psp
deleted file mode 100644
index 86251fa..0000000
--- a/3.0.4/img-src/vlib/step2.psp
+++ /dev/null
Binary files differ
diff --git a/3.0.4/img-src/vlib/title-slice.jsd b/3.0.4/img-src/vlib/title-slice.jsd
deleted file mode 100644
index 26d4ef6..0000000
--- a/3.0.4/img-src/vlib/title-slice.jsd
+++ /dev/null
Binary files differ
diff --git a/3.0.4/img-src/vlib/title.psp b/3.0.4/img-src/vlib/title.psp
deleted file mode 100644
index c5db595..0000000
--- a/3.0.4/img-src/vlib/title.psp
+++ /dev/null
Binary files differ
diff --git a/3.0.4/img-src/vlib/transfer.psp b/3.0.4/img-src/vlib/transfer.psp
deleted file mode 100644
index c4c2d75..0000000
--- a/3.0.4/img-src/vlib/transfer.psp
+++ /dev/null
Binary files differ
diff --git a/3.0.4/img-src/vlib/update.psp b/3.0.4/img-src/vlib/update.psp
deleted file mode 100644
index b3a044f..0000000
--- a/3.0.4/img-src/vlib/update.psp
+++ /dev/null
Binary files differ
diff --git a/3.0.4/img-src/warning.psp b/3.0.4/img-src/warning.psp
deleted file mode 100644
index ac83410..0000000
--- a/3.0.4/img-src/warning.psp
+++ /dev/null
Binary files differ
diff --git a/3.0.4/junit/.cvsignore b/3.0.4/junit/.cvsignore
deleted file mode 100644
index 7f1e119..0000000
--- a/3.0.4/junit/.cvsignore
+++ /dev/null
@@ -1,5 +0,0 @@
-classes
-.clover-classes
-.clover-db
-.private
-logs
diff --git a/3.0.4/junit/Context9/Eight.html b/3.0.4/junit/Context9/Eight.html
deleted file mode 100644
index cd74a45..0000000
--- a/3.0.4/junit/Context9/Eight.html
+++ /dev/null
@@ -1,5 +0,0 @@
-<html jwcid="@Shell" title="Eight">
-
-This page should not be reachable.
-
-</html>
\ No newline at end of file
diff --git a/3.0.4/junit/Context9/Eleven.html b/3.0.4/junit/Context9/Eleven.html
deleted file mode 100644
index 9a9aa79..0000000
--- a/3.0.4/junit/Context9/Eleven.html
+++ /dev/null
@@ -1,13 +0,0 @@
-<html jwcid="@Shell" title="Eleven">
-<body jwcid="@Body">
-
-<p>
-<ul>
-<li jwcid="@Foreach" source="ognl:localeArrayValue" value="ognl:objectValue" index="ognl:intValue">
-	<span jwcid="@Insert" value="ognl:objectValue">de_DE</span> is the <span jwcid="@Insert" value="ognl:stringValue">Germany</span> locale
-</li>
-</ul>
-
-
-</body>
-</html>
\ No newline at end of file
diff --git a/3.0.4/junit/Context9/Five.html b/3.0.4/junit/Context9/Five.html
deleted file mode 100644
index 59b9a90..0000000
--- a/3.0.4/junit/Context9/Five.html
+++ /dev/null
@@ -1,18 +0,0 @@
-<html jwcid="@Shell" title="Five">
-<body jwcid="@Body">
-
-Initial value: [<span jwcid="@Insert" value="ognl:word">some word</span>]
-
-<p>
-<ul>
-<li jwcid="loop"><span jwcid="@Insert" value="ognl:word">word from list</span></li>
-</ul>
-
-
-<p>
-Final value: [<span jwcid="@Insert" value="ognl:word">last word in list</span>]
-
-<p>
-Page class: [<span jwcid="@Insert" value="ognl:page.getClass().getName()">foo.Bar</span>]
-</body>
-</html>
\ No newline at end of file
diff --git a/3.0.4/junit/Context9/Four.html b/3.0.4/junit/Context9/Four.html
deleted file mode 100644
index 57bd3d9..0000000
--- a/3.0.4/junit/Context9/Four.html
+++ /dev/null
@@ -1,18 +0,0 @@
-<html jwcid="@Shell" title="Four">
-<body jwcid="@Body">
-
-Initial value: [<span jwcid="@Insert" value="ognl:word">some word</span>]
-
-<p>
-<ul>
-<li jwcid="loop"><span jwcid="@Insert" value="ognl:word">word from list</span></li>
-</ul>
-
-
-<p>
-Final value: [<span jwcid="@Insert" value="ognl:word">last word in list</span>]
-
-<p>
-Page class: [<span jwcid="@Insert" value="ognl:page.getClass().getName()">foo.Bar</span>]
-</body>
-</html>
\ No newline at end of file
diff --git a/3.0.4/junit/Context9/Home.html b/3.0.4/junit/Context9/Home.html
deleted file mode 100644
index 5233b74..0000000
--- a/3.0.4/junit/Context9/Home.html
+++ /dev/null
@@ -1,18 +0,0 @@
-<html jwcid="@Shell" title="Home">
-<body jwcid="@Body">
-
-Initial value: [<span jwcid="@Insert" value="ognl:word">some word</span>]
-
-<p>
-<ul>
-<li jwcid="loop"><span jwcid="@Insert" value="ognl:word">word from list</span></li>
-</ul>
-
-
-<p>
-Final value: [<span jwcid="@Insert" value="ognl:word">last word in list</span>]
-
-<p>
-Page class: [<span jwcid="@Insert" value="ognl:page.getClass().getName()">foo.Bar</span>]
-</body>
-</html>
\ No newline at end of file
diff --git a/3.0.4/junit/Context9/Nine.html b/3.0.4/junit/Context9/Nine.html
deleted file mode 100644
index f38f652..0000000
--- a/3.0.4/junit/Context9/Nine.html
+++ /dev/null
@@ -1,5 +0,0 @@
-<html jwcid="@Shell" title="Nine">
-
-This page should not be reachable.
-
-</html>
\ No newline at end of file
diff --git a/3.0.4/junit/Context9/README b/3.0.4/junit/Context9/README
deleted file mode 100644
index 01d74fb..0000000
--- a/3.0.4/junit/Context9/README
+++ /dev/null
@@ -1,2 +0,0 @@
-This context contains examples that test the <property-specification> element in pages and components.

-

diff --git a/3.0.4/junit/Context9/Seven.html b/3.0.4/junit/Context9/Seven.html
deleted file mode 100644
index ce99cf6..0000000
--- a/3.0.4/junit/Context9/Seven.html
+++ /dev/null
@@ -1,26 +0,0 @@
-<html jwcid="@Shell" title="Seven">
-<body jwcid="@Body">
-
-Boolean value: [<span jwcid="@Insert" value="ognl:booleanValue"/>]
-<br>
-Byte value: [<span jwcid="@Insert" value="ognl:byteValue"/>]
-<br>
-Char value: [<span jwcid="@Insert" value="ognl:charValue"/>]
-<br>
-Short value: [<span jwcid="@Insert" value="ognl:shortValue"/>]
-<br>
-Int value: [<span jwcid="@Insert" value="ognl:intValue"/>]
-<br>
-Long value: [<span jwcid="@Insert" value="ognl:longValue"/>]
-<br>
-Float value: [<span jwcid="@Insert" value="ognl:floatValue"/>]
-<br>
-Double  value: [<span jwcid="@Insert" value="ognl:doubleValue"/>]
-<br>
-String value: [<span jwcid="@Insert" value="ognl:stringValue"/>]
-
-<p>
-<a href="#" jwcid="@DirectLink" listener="ognl:listeners.update">change values</a>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/3.0.4/junit/Context9/Six.html b/3.0.4/junit/Context9/Six.html
deleted file mode 100644
index e88ddfe..0000000
--- a/3.0.4/junit/Context9/Six.html
+++ /dev/null
@@ -1,16 +0,0 @@
-<html jwcid="@Shell" title="Six">
-<body jwcid="@Body">
-
-Initial value: [<span jwcid="@Insert" value="ognl:value">22</span>]
-
-<p>
-<ul>
-<li jwcid="loop"><span jwcid="@Insert" value="ognl:value">33</span></li>
-</ul>
-
-
-<p>
-Final value: [<span jwcid="@Insert" value="ognl:value">44</span>]
-
-</body>
-</html>
\ No newline at end of file
diff --git a/3.0.4/junit/Context9/Ten.html b/3.0.4/junit/Context9/Ten.html
deleted file mode 100644
index 9a85752..0000000
--- a/3.0.4/junit/Context9/Ten.html
+++ /dev/null
@@ -1,6 +0,0 @@
-<html jwcid="@Shell" title="Ten">
-<body>
-	
-Long value: [<span jwcid="@Insert" value="ognl:longValue">99</span>]
-</body>
-</html>
\ No newline at end of file
diff --git a/3.0.4/junit/Context9/Three.html b/3.0.4/junit/Context9/Three.html
deleted file mode 100644
index 6365279..0000000
--- a/3.0.4/junit/Context9/Three.html
+++ /dev/null
@@ -1,18 +0,0 @@
-<html jwcid="@Shell" title="Three">
-<body jwcid="@Body">
-
-Initial value: [<span jwcid="@Insert" value="ognl:word">some word</span>]
-
-<p>
-<ul>
-<li jwcid="loop"><span jwcid="@Insert" value="ognl:word">word from list</span></li>
-</ul>
-
-
-<p>
-Final value: [<span jwcid="@Insert" value="ognl:word">last word in list</span>]
-
-<p>
-Page class: [<span jwcid="@Insert" value="ognl:page.getClass().getName()">foo.Bar</span>]
-</body>
-</html>
\ No newline at end of file
diff --git a/3.0.4/junit/Context9/Twelve.html b/3.0.4/junit/Context9/Twelve.html
deleted file mode 100644
index 5f28c46..0000000
--- a/3.0.4/junit/Context9/Twelve.html
+++ /dev/null
@@ -1,10 +0,0 @@
-<html jwcid="@Shell" title="Twelve">
-<body jwcid="@Body">
-
-<p>
-Variable initial value = <span jwcid="@Insert" value="ognl:variableValue">0</span>
-<p>
-Constant initial value = <span jwcid="@Insert" value="ognl:constantValue">5</span>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/3.0.4/junit/Context9/Two.html b/3.0.4/junit/Context9/Two.html
deleted file mode 100644
index ed2da17..0000000
--- a/3.0.4/junit/Context9/Two.html
+++ /dev/null
@@ -1,16 +0,0 @@
-<html jwcid="@Shell" title="Two">
-<body jwcid="@Body">
-
-Initial value: [<span jwcid="@Insert" value="ognl:number">22</span>]
-
-<p>
-<ul>
-<li jwcid="loop"><span jwcid="@Insert" value="ognl:number">33</span></li>
-</ul>
-
-
-<p>
-Final value: [<span jwcid="@Insert" value="ognl:number">44</span>]
-
-</body>
-</html>
\ No newline at end of file
diff --git a/3.0.4/junit/Context9/WEB-INF/Eight.page b/3.0.4/junit/Context9/WEB-INF/Eight.page
deleted file mode 100644
index 1cfcf8c..0000000
--- a/3.0.4/junit/Context9/WEB-INF/Eight.page
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>

-<!--

-   Copyright 2004 The Apache Software Foundation

-  

-   Licensed under the Apache License, Version 2.0 (the "License");

-   you may not use this file except in compliance with the License.

-   You may obtain a copy of the License at

-  

-       http://www.apache.org/licenses/LICENSE-2.0

-  

-   Unless required by applicable law or agreed to in writing, software

-   distributed under the License is distributed on an "AS IS" BASIS,

-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-   See the License for the specific language governing permissions and

-   limitations under the License.

--->

-<!-- $Id: Six.page,v 1.3 2003/03/05 23:20:08 hlship Exp $ -->

-<!DOCTYPE page-specification PUBLIC 

-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 

-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">

-	

-<page-specification class="org.apache.tapestry.junit.mock.c9.Eight">

-

-  <property-specification name="enhancedProperty" type="long" initial-value="15"/>

-

-</page-specification>
\ No newline at end of file
diff --git a/3.0.4/junit/Context9/WEB-INF/Eleven.page b/3.0.4/junit/Context9/WEB-INF/Eleven.page
deleted file mode 100644
index 141fb21..0000000
--- a/3.0.4/junit/Context9/WEB-INF/Eleven.page
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<page-specification class="org.apache.tapestry.junit.mock.c9.Eleven">
-
-  <property-specification name="stringArrayValue" type="java.lang.String[]" 
-  	initial-value='new java.lang.String[] { "US", "Germany", "Italy" }'/>
-  <property-specification name="localeArrayValue" type="java.util.Locale[]" 
-  	initial-value='new java.util.Locale[] { @java.util.Locale@US, @java.util.Locale@GERMANY, @java.util.Locale@ITALY }'/>
-
-  <property-specification name="objectValue" type="java.lang.Object"/> 
-  <property-specification name="intValue" type="int"/> 
-
-  <property-specification name="intArray" type="int[]"/> 
-  <property-specification name="intArrayOfArray" type="int[][]"/> 
-  <property-specification name="localeArrayOfArray" type="java.util.Locale[][]"/> 
-
-</page-specification>
\ No newline at end of file
diff --git a/3.0.4/junit/Context9/WEB-INF/Five.page b/3.0.4/junit/Context9/WEB-INF/Five.page
deleted file mode 100644
index 7115c62..0000000
--- a/3.0.4/junit/Context9/WEB-INF/Five.page
+++ /dev/null
@@ -1,34 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<page-specification class="org.apache.tapestry.junit.mock.c9.Five">
-
-  <property-specification name="word" type="java.lang.String"/>
-  
-  <component id="loop" type="Foreach">
-  	<static-binding name="element" value="li"/>
-  	<binding name="source">
-  		{ "Tempest", "Pac-Man", "Diamond Mine" }
-  	</binding>
-  	<binding name="value" expression="word"/>
-  </component>
-
-</page-specification>
\ No newline at end of file
diff --git a/3.0.4/junit/Context9/WEB-INF/Four.page b/3.0.4/junit/Context9/WEB-INF/Four.page
deleted file mode 100644
index bbb73ab..0000000
--- a/3.0.4/junit/Context9/WEB-INF/Four.page
+++ /dev/null
@@ -1,34 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<page-specification class="org.apache.tapestry.junit.mock.c9.Four">
-
-  <property-specification name="word" type="java.lang.String"/>
-  
-  <component id="loop" type="Foreach">
-  	<static-binding name="element" value="li"/>
-  	<binding name="source">
-  		{ "Soul", "Calibur" }
-  	</binding>
-  	<binding name="value" expression="word"/>
-  </component>
-
-</page-specification>
\ No newline at end of file
diff --git a/3.0.4/junit/Context9/WEB-INF/Home.page b/3.0.4/junit/Context9/WEB-INF/Home.page
deleted file mode 100644
index 8b8b37d..0000000
--- a/3.0.4/junit/Context9/WEB-INF/Home.page
+++ /dev/null
@@ -1,34 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-    Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<page-specification>
-
-  <property-specification name="word" type="java.lang.String"/>
-  
-  <component id="loop" type="Foreach">
-  	<static-binding name="element" value="li"/>
-  	<binding name="source">
-  		{ "Gromit", "is", "a", "good", "boy" }
-  	</binding>
-  	<binding name="value" expression="word"/>
-  </component>
-
-</page-specification>
\ No newline at end of file
diff --git a/3.0.4/junit/Context9/WEB-INF/Nine.page b/3.0.4/junit/Context9/WEB-INF/Nine.page
deleted file mode 100644
index dc72c18..0000000
--- a/3.0.4/junit/Context9/WEB-INF/Nine.page
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>

-<!--

-   Copyright 2004 The Apache Software Foundation

-  

-   Licensed under the Apache License, Version 2.0 (the "License");

-   you may not use this file except in compliance with the License.

-   You may obtain a copy of the License at

-  

-       http://www.apache.org/licenses/LICENSE-2.0

-  

-   Unless required by applicable law or agreed to in writing, software

-   distributed under the License is distributed on an "AS IS" BASIS,

-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-   See the License for the specific language governing permissions and

-   limitations under the License.

--->

-<!-- $Id: Six.page,v 1.3 2003/03/05 23:20:08 hlship Exp $ -->

-<!DOCTYPE page-specification PUBLIC 

-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 

-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">

-	

-<page-specification class="org.apache.tapestry.junit.mock.c9.Nine">

-

-  <property-specification name="enhanced" type="long" initial-value="15"/>

-

-</page-specification>
\ No newline at end of file
diff --git a/3.0.4/junit/Context9/WEB-INF/Seven.page b/3.0.4/junit/Context9/WEB-INF/Seven.page
deleted file mode 100644
index 4b92dd0..0000000
--- a/3.0.4/junit/Context9/WEB-INF/Seven.page
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<page-specification class="org.apache.tapestry.junit.mock.c9.Seven">
-
-  <property-specification name="booleanValue" type="boolean" persistent="yes"/>
-  <property-specification name="byteValue" type="byte" persistent="yes"/>
-  <property-specification name="charValue" type="char" persistent="yes"/>
-  <property-specification name="shortValue" type="short" persistent="yes"/>
-  <property-specification name="intValue" type="int" persistent="yes"/>
-  <property-specification name="longValue" type="long" persistent="yes"/>
-  <property-specification name="floatValue" type="float" persistent="yes"/>
-  <property-specification name="doubleValue" type="double" persistent="yes"/>
-  <property-specification name="stringValue" type="java.lang.String" persistent="yes"/>
-  
-
-</page-specification>
\ No newline at end of file
diff --git a/3.0.4/junit/Context9/WEB-INF/Six.page b/3.0.4/junit/Context9/WEB-INF/Six.page
deleted file mode 100644
index 7187f01..0000000
--- a/3.0.4/junit/Context9/WEB-INF/Six.page
+++ /dev/null
@@ -1,34 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<page-specification class="org.apache.tapestry.junit.mock.c9.Six">
-
-  <property-specification name="value" type="long" initial-value="15"/>
-  
-  <component id="loop" type="Foreach">
-  	<static-binding name="element" value="li"/>
-  	<binding name="source">
-  		{ 2, 4, 6, 8 }
-  	</binding>
-  	<binding name="value" expression="value"/>
-  </component>
-
-</page-specification>
\ No newline at end of file
diff --git a/3.0.4/junit/Context9/WEB-INF/Ten.page b/3.0.4/junit/Context9/WEB-INF/Ten.page
deleted file mode 100644
index e67c97b..0000000
--- a/3.0.4/junit/Context9/WEB-INF/Ten.page
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>

-<!--

-   Copyright 2004 The Apache Software Foundation

-  

-   Licensed under the Apache License, Version 2.0 (the "License");

-   you may not use this file except in compliance with the License.

-   You may obtain a copy of the License at

-  

-       http://www.apache.org/licenses/LICENSE-2.0

-  

-   Unless required by applicable law or agreed to in writing, software

-   distributed under the License is distributed on an "AS IS" BASIS,

-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-   See the License for the specific language governing permissions and

-   limitations under the License.

--->

-<!-- $Id: Six.page,v 1.3 2003/03/05 23:20:08 hlship Exp $ -->

-<!DOCTYPE page-specification PUBLIC 

-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 

-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">

-	

-<page-specification class="org.apache.tapestry.junit.mock.c9.Ten">

-

-  <property-specification name="longValue" type="long" initial-value="123456"/>

-

-</page-specification>
\ No newline at end of file
diff --git a/3.0.4/junit/Context9/WEB-INF/Three.page b/3.0.4/junit/Context9/WEB-INF/Three.page
deleted file mode 100644
index b19691e..0000000
--- a/3.0.4/junit/Context9/WEB-INF/Three.page
+++ /dev/null
@@ -1,34 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<page-specification class="org.apache.tapestry.junit.mock.c9.Three">
-
-  <property-specification name="word" type="java.lang.String"/>
-  
-  <component id="loop" type="Foreach">
-  	<static-binding name="element" value="li"/>
-  	<binding name="source">
-  		{ "Crazy", "Taxi" }
-  	</binding>
-  	<binding name="value" expression="word"/>
-  </component>
-
-</page-specification>
\ No newline at end of file
diff --git a/3.0.4/junit/Context9/WEB-INF/Twelve.page b/3.0.4/junit/Context9/WEB-INF/Twelve.page
deleted file mode 100644
index 8b7697b..0000000
--- a/3.0.4/junit/Context9/WEB-INF/Twelve.page
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!DOCTYPE page-specification
-      PUBLIC "-//Apache Software Foundation//Tapestry Specification 3.0//EN"
-      "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-<!-- generated by Spindle, http://spindle.sourceforge.net -->
-
-<page-specification class="org.apache.tapestry.junit.mock.c9.Twelve">
-    <property-specification name="variableValue" type="int" initial-value="initialValue"/>
-    <property-specification name="constantValue" type="int" initial-value="5"/>
-</page-specification>
diff --git a/3.0.4/junit/Context9/WEB-INF/Two.page b/3.0.4/junit/Context9/WEB-INF/Two.page
deleted file mode 100644
index 28c3cf6..0000000
--- a/3.0.4/junit/Context9/WEB-INF/Two.page
+++ /dev/null
@@ -1,34 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-    Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<page-specification>
-
-  <property-specification name="number" type="int" initial-value="15"/>
-  
-  <component id="loop" type="Foreach">
-  	<static-binding name="element" value="li"/>
-  	<binding name="source">
-  		{ 2, 4, 6, 8 }
-  	</binding>
-  	<binding name="value" expression="number"/>
-  </component>
-
-</page-specification>
\ No newline at end of file
diff --git a/3.0.4/junit/build.xml b/3.0.4/junit/build.xml
deleted file mode 100644
index 4b4f842..0000000
--- a/3.0.4/junit/build.xml
+++ /dev/null
@@ -1,200 +0,0 @@
-<?xml version="1.0"?>
-<!-- $Id$ -->
-<project name="Tapestry Framework JUnit Test Suite" default="run">
-
-  <property name="root.dir" value="../"/>
-  
-  <property file="${root.dir}/config/Version.properties"/>
-  <property file="${root.dir}/config/build.properties"/>
-  <property file="${root.dir}/config/common.properties"/>
-  
-  
-  <property name="framework.src.dir" value="${root.dir}/framework/src"/>
-  <property name="clover-classes.dir" value=".clover-classes"/>
-  <property name="clover-db.dir" value=".clover-db"/>
-  <property name="clover.initstring" location="${clover-db.dir}/clover_db"/>
-    
-  <property name="clover.report.dir" value="../web/doc/clover"/>
-  
-  <property name="local.lib.dir" value="lib"/>
-   
-  <path id="compile-tests.classpath">
-    <path refid="base.classpath"/>
-    <pathelement location="${root.lib.dir}/${framework.jar}"/>    
-  </path>
-  
-  <path id="base.classpath">
-  	<fileset dir="${root.lib.dir}">
-  		<include name="${contrib.jar}"/>	
-  		<include name="${ext.dir}/*.jar"/>
-  		<include name="${runtime.dir}/*.jar"/>
-  	</fileset>
-  	<fileset dir="${ext.dist.dir}">
-  		<include name="*.jar"/>
-  	</fileset>
-    <pathelement location="${jython.dir}/jython.jar"/>
-		<fileset dir="${root.lib.dir}">
-			<include name="${j2ee.dir}/*.jar"/>
-		</fileset>
-  </path> 
-
-  <target name="init">
-    <mkdir dir="${classes.dir}"/>
-  </target>
-
-  <target name="clean">
-    <delete dir="${classes.dir}" quiet="true"/>
-    <delete dir="${clover-classes.dir}" quiet="true"/>
-    <delete dir="${clover-db.dir}" quiet="true"/>
-    <delete dir=".private" quiet="true"/>
-  </target>
-
-  <target name="compile" depends="init" description="Compile all test classes.">
-    <javac srcdir="${src.dir}" destdir="${classes.dir}" debug="on" target="1.1" source="1.3">
-      <classpath refid="compile-tests.classpath"/>
-    </javac>
-  </target>
-
-  <path id="junit.classpath">
-    <path location="${classes.dir}"/>
-  	 <!-- Add the src directory back in, since package resources needed by
-  	      the tests are there.  Also, ensure that the local copy 
-  	      of junit/running/excluded.properties overrides the default
-  	      copy in junit.jar -->
-  	 <path location="${src.dir}"/>
-  	 <path refid="compile-tests.classpath"/>
-  </path>
-  	  
-  <target name="run" depends="compile" description="Run the test suite.">
-  	<java fork="true" classname="junit.textui.TestRunner"
-		failonerror="false">
-  		<classpath refid="junit.classpath"/>
-		<arg value="org.apache.tapestry.junit.TapestrySuite"/>
-		<sysproperty key="org.apache.tapestry.enable-reset-service" value="true"/>
-  	</java>
-  </target>
-
-  <!-- To run just a single test case, specify -Dtestcase=name -->
-  
-  <target name="junit" depends="compile" description="Run the test suite.">
-      <junit printsummary="no"
-          errorProperty="test.failed"
-          failureProperty="test.failed"
-          fork="true">
-          <classpath refid="junit.classpath"/>
-          <formatter type="xml"/>
-          <formatter type="brief" usefile="false"/>
-
-          <sysproperty key="org.apache.tapestry.enable-reset-service" value="true"/>
-
-          <batchtest todir="${classes.dir}" unless="testcase">
-              <fileset dir="${classes.dir}"
-                  includes="**/Test*.class"
-                  excludes="**/*$$*.class"
-              />
-          </batchtest>
-
-          <batchtest todir="${classes.dir}" if="testcase">
-              <fileset dir="${classes.dir}"
-                  includes="**/${testcase}.class"
-              />
-          </batchtest>
-
-      </junit>
-
-      <fail if="test.failed">Unit tests failed.</fail>
-  </target>
-
-  <target name="junitreport">
-      <junitreport todir="${classes.dir}">
-          <fileset dir="${classes.dir}">
-              <include name="TEST-*.xml"/>
-          </fileset>
-          <report format="frames" todir="${classes.dir}"/>
-      </junitreport>
-  </target>
-
-  <target name="gui" depends="compile" description="Run the JUnit GUI.">
-  	<java fork="true" classname="junit.swingui.TestRunner">
-  		<classpath refid="junit.classpath"/>
-		<arg value="org.apache.tapestry.junit.TapestrySuite"/>
-		<sysproperty key="org.apache.tapestry.enable-reset-service" value="true"/>
-  	</java>
-  	
-  </target>
-  
-
-  <path id="clover.classpath">
-    <pathelement location="${clover-classes.dir}"/>
-    <pathelement location="${clover.dir}/lib/clover.jar"/>
-    <path refid="junit.classpath"/>
-  </path>
-    
-  <target name="clover" description="Run the entire Tapestry test suite and construct the Clover report.">
-  	<antcall target="run-clover">
-  		<param name="suite" value="org.apache.tapestry.junit.TapestrySuite"/>
-  	</antcall>
-  </target>
-  
-  <target name="fast-clover" description="Run a subset of the Tapestry test suite (excluding mock unit tests), and construct the Clover report.">
-  	<antcall target="run-clover">
-  		<param name="suite" value="org.apache.tapestry.junit.BasicTestSuite"/>
-  	</antcall>  	
-  </target>
-   
-  <target name="run-clover" depends="compile" description="Run tests and construct the Clover report.">
-  	<mkdir dir="${clover-classes.dir}"/>
-  	<mkdir dir="${clover-db.dir}"/>
-  	
-  	<property name="build.compiler"
-  		value="org.apache.tools.ant.taskdefs.CloverCompilerAdapter"/>
-  		
-    <javac srcdir="${framework.src.dir}" destdir="${clover-classes.dir}" debug="on" target="1.1">
-      <classpath refid="base.classpath"/>
-    </javac>
-    
-    <echo>Executing suite ${suite} ...</echo>
-    
-    <echo>Clover Run #1:  No logging enabled ...</echo>
-    
-  	<java fork="true" classname="junit.textui.TestRunner"
-		failonerror="true">
-  		<classpath refid="clover.classpath"/>
-		<arg value="${suite}"/>
-		<sysproperty key="org.apache.tapestry.enable-reset-service" value="true"/>
-  	</java>
-  	
-  
-    <echo>Clover Run #2: All logging enabled ...</echo>
-    
-  	<java fork="true" classname="junit.textui.TestRunner"
-		failonerror="true">
-  		<classpath refid="clover.classpath"/>
-		<arg value="${suite}"/>
-		<sysproperty key="log4j.configuration" value="log4j-slow.properties"/> 
-		<sysproperty key="org.apache.tapestry.enable-reset-service" value="true"/>
-  	</java>  	
-  	
-  	<antcall target="clover-report"/>
-</target>
-
-<target name="clover-report">
-  	<mkdir dir="${clover.report.dir}"/>
-  	  	
-  	<java
-  		classname="com.cortexeb.tools.clover.reporters.html.HtmlReporter"
-  		fork="true">
-  		<classpath>
-		  	<pathelement location="${clover.dir}/lib/clover.jar"/>
-		  	<pathelement location="${clover.dir}/lib/velocity.jar"/>
-		</classpath>
-		<arg line="--outputdir ${clover.report.dir}"/>
-		<arg line="--showSrc"/>
-		<arg line="--initstring ${clover.initstring}"/>
-		<arg line="--title 'Release ${framework.version}'"/>
-  	</java>
-  			    
-  </target>
-  
-</project>
-
diff --git a/3.0.4/junit/context/ContextAssetTemplate.html b/3.0.4/junit/context/ContextAssetTemplate.html
deleted file mode 100644
index cd354ad..0000000
--- a/3.0.4/junit/context/ContextAssetTemplate.html
+++ /dev/null
@@ -1,9 +0,0 @@
-<!-- $Id$ -->
-
-<span jwcid="$content$">
-<span jwcid="border">
-
-This page's content comes from a context asset.
-
-</span>
-</span>
\ No newline at end of file
diff --git a/3.0.4/junit/context/images/ContextAsset.gif b/3.0.4/junit/context/images/ContextAsset.gif
deleted file mode 100644
index 8bbac04..0000000
--- a/3.0.4/junit/context/images/ContextAsset.gif
+++ /dev/null
Binary files differ
diff --git a/3.0.4/junit/context/images/back.png b/3.0.4/junit/context/images/back.png
deleted file mode 100644
index 85e0b4b..0000000
--- a/3.0.4/junit/context/images/back.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/junit/context/images/back_fr.png b/3.0.4/junit/context/images/back_fr.png
deleted file mode 100644
index 958672a..0000000
--- a/3.0.4/junit/context/images/back_fr.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/junit/context10/Four.html b/3.0.4/junit/context10/Four.html
deleted file mode 100644
index c8c6552..0000000
--- a/3.0.4/junit/context10/Four.html
+++ /dev/null
@@ -1,16 +0,0 @@
-<html jwcid="@Shell" title="Four">
-<body jwcid="@Body">
-	
-
-<a jwcid="first@DirectLink" listener="ognl:listeners.link">first (okay)</a>
-
-<br/>
-
-<a jwcid="link@DirectLink" listener="ognl:listeners.link">
-<span jwcid="@Delegator" delegate="ognl:linkContentRender"/>	
-</a>
-
-
-</body>
-
-</html>
\ No newline at end of file
diff --git a/3.0.4/junit/context10/Home.html b/3.0.4/junit/context10/Home.html
deleted file mode 100644
index ec29cba..0000000
--- a/3.0.4/junit/context10/Home.html
+++ /dev/null
@@ -1,22 +0,0 @@
-<html jwcid="@Shell" title="Home">
-<body jwcid="@Body">
-
-<a jwcid="first@DirectLink" listener="ognl:listeners.link">First</a>
-
-<br/>
-
-<a jwcid="second@DirectLink" renderer="ognl:beans.absoluteRenderer" listener="ognl:listeners.link">Second</a>
-
-<br/>
-
-Expecting: <span jwcid="@Insert" value="ognl:beans.configuredRenderer.scheme"/>://<span jwcid="@Insert" value="ognl:beans.configuredRenderer.serverName"/>:<span jwcid="@Insert" value="ognl:beans.configuredRenderer.port"/>
-
-
-<a jwcid="third@DirectLink" renderer="ognl:beans.configuredRenderer" listener="ognl:listeners.link" anchor="myanchor">Third</a>
-
-<br/>
-
-[<a jwcid="@DirectLink" disabled="true" listener="ognl:listeners.link">Fourth</a>]
-
-</body>
-</html>
\ No newline at end of file
diff --git a/3.0.4/junit/context10/README b/3.0.4/junit/context10/README
deleted file mode 100644
index 73d8038..0000000
--- a/3.0.4/junit/context10/README
+++ /dev/null
@@ -1 +0,0 @@
-Context used for some tests related to the various link components, and link renderers.
\ No newline at end of file
diff --git a/3.0.4/junit/context10/Three.html b/3.0.4/junit/context10/Three.html
deleted file mode 100644
index f76236a..0000000
--- a/3.0.4/junit/context10/Three.html
+++ /dev/null
@@ -1,16 +0,0 @@
-<html jwcid="@Shell" title="Three">
-<body>
-	
-
-<a jwcid="first@DirectLink" listener="ognl:listeners.link">first (okay)</a>
-
-<br/>
-
-<a jwcid="link@DirectLink" listener="ognl:listeners.link">
-<span jwcid="@Delegator" delegate="ognl:linkContentRender"/>	
-</a>
-
-
-</body>
-
-</html>
\ No newline at end of file
diff --git a/3.0.4/junit/context10/Two.html b/3.0.4/junit/context10/Two.html
deleted file mode 100644
index 349c7bd..0000000
--- a/3.0.4/junit/context10/Two.html
+++ /dev/null
@@ -1,9 +0,0 @@
-<html jwcid="@Shell" title="Two">
-<body jwcid="@Body">
-
-<a jwcid="outer@DirectLink" listener="ognl:listeners.link">
-	<a jwcid="inner@DirectLink" listener="ognl:listener.link">Bad!</a>	
-</a>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/3.0.4/junit/context10/WEB-INF/Four.page b/3.0.4/junit/context10/WEB-INF/Four.page
deleted file mode 100644
index b52cf4f..0000000
--- a/3.0.4/junit/context10/WEB-INF/Four.page
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<page-specification class="org.apache.tapestry.junit.mock.c10.ThreeFour"/>
diff --git a/3.0.4/junit/context10/WEB-INF/Home.page b/3.0.4/junit/context10/WEB-INF/Home.page
deleted file mode 100644
index 0319e71..0000000
--- a/3.0.4/junit/context10/WEB-INF/Home.page
+++ /dev/null
@@ -1,33 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-	
-<page-specification class="org.apache.tapestry.junit.mock.c10.Home">
-
-	<bean name="absoluteRenderer" class="org.apache.tapestry.link.AbsoluteLinkRenderer" lifecycle="page"/>
-
-	<bean name="configuredRenderer" class="org.apache.tapestry.link.AbsoluteLinkRenderer" lifecycle="page">
-		<set-property name="port" expression="8080"/>
-		<set-property name="scheme" expression="&quot;https&quot;"/>
-		<set-property name="serverName" expression="&quot;myserver&quot;"/>	
-	</bean>
-	
-</page-specification>
\ No newline at end of file
diff --git a/3.0.4/junit/context10/WEB-INF/Three.page b/3.0.4/junit/context10/WEB-INF/Three.page
deleted file mode 100644
index b52cf4f..0000000
--- a/3.0.4/junit/context10/WEB-INF/Three.page
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<page-specification class="org.apache.tapestry.junit.mock.c10.ThreeFour"/>
diff --git a/3.0.4/junit/context10/images/button-h.gif b/3.0.4/junit/context10/images/button-h.gif
deleted file mode 100644
index 65c5137..0000000
--- a/3.0.4/junit/context10/images/button-h.gif
+++ /dev/null
Binary files differ
diff --git a/3.0.4/junit/context10/images/button.gif b/3.0.4/junit/context10/images/button.gif
deleted file mode 100644
index 413171c..0000000
--- a/3.0.4/junit/context10/images/button.gif
+++ /dev/null
Binary files differ
diff --git a/3.0.4/junit/context11/Five.html b/3.0.4/junit/context11/Five.html
deleted file mode 100644
index 1e8e2e6..0000000
--- a/3.0.4/junit/context11/Five.html
+++ /dev/null
@@ -1,15 +0,0 @@
-<html jwcid="@Shell" title="Home">
-<body jwcid="@Body">
-
-	<select jwcid="@Select">
-		<option/>
-		<option jwcid="@Option" selected="ognl:animal" label="Animal"/>
-		<option jwcid="@Option" selected="ognl:vegetable" label="Vegetable"/>
-		<option jwcid="@Option" selected="ognl:mineral">Mineral (or unknown)</option>
-	</select>
-	
-	<input type="submit" value="Go"/>	
-
-
-</body>
-</html>
\ No newline at end of file
diff --git a/3.0.4/junit/context11/Four.html b/3.0.4/junit/context11/Four.html
deleted file mode 100644
index 5566783..0000000
--- a/3.0.4/junit/context11/Four.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html jwcid="@Shell" title="Four">
-<body jwcid="@Body">
-
-<form jwcid="@Form" listener="ognl:listeners.formSubmit">
-
-	<select jwcid="@Select">
-		<option/>
-		<option jwcid="@Option" selected="ognl:animal" label="Animal"/>
-		<option jwcid="@Option" selected="ognl:vegetable" label="Vegetable"/>
-		<option jwcid="@Option" selected="ognl:mineral">Mineral (or unknown)</option>
-	</select>
-	
-	<input type="submit" value="Go"/>	
-</form>
-
-<form jwcid="@Form" direct="ognl:false " listener="ognl:listeners.secondFormListener "/>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/3.0.4/junit/context11/Home.html b/3.0.4/junit/context11/Home.html
deleted file mode 100644
index 0e5602a..0000000
--- a/3.0.4/junit/context11/Home.html
+++ /dev/null
@@ -1,17 +0,0 @@
-<html jwcid="@Shell" title="Home">
-<body jwcid="@Body">
-
-<form jwcid="@Form" listener="ognl:listeners.formSubmit">
-
-	<select jwcid="@Select">
-		<option/>
-		<option jwcid="@Option" selected="ognl:animal" label="Animal"/>
-		<option jwcid="@Option" selected="ognl:vegetable" label="Vegetable"/>
-		<option jwcid="@Option" selected="ognl:mineral">Mineral (or unknown)</option>
-	</select>
-	
-	<input type="submit" value="Go"/>	
-</form>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/3.0.4/junit/context11/README b/3.0.4/junit/context11/README
deleted file mode 100644
index 499c451..0000000
--- a/3.0.4/junit/context11/README
+++ /dev/null
@@ -1 +0,0 @@
-This context exists to test the Select and Option form components.
\ No newline at end of file
diff --git a/3.0.4/junit/context11/Result.html b/3.0.4/junit/context11/Result.html
deleted file mode 100644
index 21541fb..0000000
--- a/3.0.4/junit/context11/Result.html
+++ /dev/null
@@ -1,8 +0,0 @@
-<html jwcid="@Shell" title="Result">
-<body>
-
-
-<span jwcid="@Insert" value="ognl:message">Application message.</span>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/3.0.4/junit/context11/Seven.html b/3.0.4/junit/context11/Seven.html
deleted file mode 100644
index 0797907..0000000
--- a/3.0.4/junit/context11/Seven.html
+++ /dev/null
@@ -1,17 +0,0 @@
-<html jwcid="@Shell" title="Seven">
-<body jwcid="@Body">
-
-<form jwcid="@Form">
-
-	<select>
-		<option/>
-		<option jwcid="@Option" selected="ognl:animal" label="Animal"/>
-		<option jwcid="@Option" selected="ognl:vegetable" label="Vegetable"/>
-		<option jwcid="@Option" selected="ognl:mineral">Mineral (or unknown)</option>
-	</select>
-	
-	<input type="submit" value="Go"/>	
-</form>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/3.0.4/junit/context11/Six.html b/3.0.4/junit/context11/Six.html
deleted file mode 100644
index eed514b..0000000
--- a/3.0.4/junit/context11/Six.html
+++ /dev/null
@@ -1,18 +0,0 @@
-<html jwcid="@Shell" title="Six">
-<body jwcid="@Body">
-
-<form jwcid="@Form">
-
-	<select jwcid="outer@Select">
-	<select jwcid="inner@Select">
-		<option/>
-		<option jwcid="@Option" selected="ognl:animal" label="Animal"/>
-		<option jwcid="@Option" selected="ognl:vegetable" label="Vegetable"/>
-		<option jwcid="@Option" selected="ognl:mineral">Mineral (or unknown)</option>
-	</select>
-	</select>
-	<input type="submit" value="Go"/>	
-</form>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/3.0.4/junit/context11/Three.html b/3.0.4/junit/context11/Three.html
deleted file mode 100644
index ca9017c..0000000
--- a/3.0.4/junit/context11/Three.html
+++ /dev/null
@@ -1,17 +0,0 @@
-<html jwcid="@Shell" title="Three">
-<body jwcid="@Body">
-
-<form jwcid="@Form" listener="ognl:listeners.formSubmit">
-
-	<select jwcid="@Select" disabled="ognl:true">
-		<option/>
-		<option jwcid="@Option" selected="ognl:animal" label="Animal"/>
-		<option jwcid="@Option" selected="ognl:vegetable" label="Vegetable"/>
-		<option jwcid="@Option" selected="ognl:mineral">Mineral (or unknown)</option>
-	</select>
-	
-	<input type="submit" value="Go"/>	
-</form>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/3.0.4/junit/context11/Two.html b/3.0.4/junit/context11/Two.html
deleted file mode 100644
index cf9ea31..0000000
--- a/3.0.4/junit/context11/Two.html
+++ /dev/null
@@ -1,16 +0,0 @@
-<html jwcid="@Shell" title="Two">
-<body jwcid="@Body">
-
-<form jwcid="@Form" listener="ognl:listeners.formSubmit">
-
-	<select jwcid="@Select" multiple="ognl:true">
-		<option jwcid="@Option" selected="ognl:animal" label="Animal"/>
-		<option jwcid="@Option" selected="ognl:vegetable" label="Vegetable"/>
-		<option jwcid="@Option" selected="ognl:mineral">Mineral (or unknown)</option>
-	</select>
-	
-	<input type="submit" value="Go"/>	
-</form>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/3.0.4/junit/context11/WEB-INF/Four.page b/3.0.4/junit/context11/WEB-INF/Four.page
deleted file mode 100644
index a055173..0000000
--- a/3.0.4/junit/context11/WEB-INF/Four.page
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-  
-<page-specification class="org.apache.tapestry.junit.mock.c11.Four"/>
diff --git a/3.0.4/junit/context11/WEB-INF/Home.page b/3.0.4/junit/context11/WEB-INF/Home.page
deleted file mode 100644
index e8c1935..0000000
--- a/3.0.4/junit/context11/WEB-INF/Home.page
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-  
-<page-specification class="org.apache.tapestry.junit.mock.c11.SelectPage"/>
diff --git a/3.0.4/junit/context11/WEB-INF/Result.page b/3.0.4/junit/context11/WEB-INF/Result.page
deleted file mode 100644
index 833458c..0000000
--- a/3.0.4/junit/context11/WEB-INF/Result.page
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-  
-<page-specification class="org.apache.tapestry.junit.mock.c11.Result">
-
-	<property-specification name="message" type="java.lang.String"/>
-
-</page-specification>
\ No newline at end of file
diff --git a/3.0.4/junit/context11/WEB-INF/Three.page b/3.0.4/junit/context11/WEB-INF/Three.page
deleted file mode 100644
index e8c1935..0000000
--- a/3.0.4/junit/context11/WEB-INF/Three.page
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-  
-<page-specification class="org.apache.tapestry.junit.mock.c11.SelectPage"/>
diff --git a/3.0.4/junit/context11/WEB-INF/Two.page b/3.0.4/junit/context11/WEB-INF/Two.page
deleted file mode 100644
index 99b56de..0000000
--- a/3.0.4/junit/context11/WEB-INF/Two.page
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-  
-<page-specification class="org.apache.tapestry.junit.mock.c11.PersistentSelectPage"/>
diff --git a/3.0.4/junit/context12/Four.html b/3.0.4/junit/context12/Four.html
deleted file mode 100644
index ba2f7d9..0000000
--- a/3.0.4/junit/context12/Four.html
+++ /dev/null
@@ -1 +0,0 @@
-<span jwcid="@InsertFinal" final="banana"/>
\ No newline at end of file
diff --git a/3.0.4/junit/context12/Home.html b/3.0.4/junit/context12/Home.html
deleted file mode 100644
index 1b33e7a..0000000
--- a/3.0.4/junit/context12/Home.html
+++ /dev/null
@@ -1,11 +0,0 @@
-<html jwcid="@Shell" title="Home">
-<body jwcid="@Body">
-
-Greeting: [<span jwcid="@InsertString" string="Aloha!">Shalom</span>]
-
-<br/>
-
-Value: [<span jwcid="@InsertInteger" integer="100">50</span>]
-	
-</body>
-</html>
\ No newline at end of file
diff --git a/3.0.4/junit/context12/Three.html b/3.0.4/junit/context12/Three.html
deleted file mode 100644
index f858bb8..0000000
--- a/3.0.4/junit/context12/Three.html
+++ /dev/null
@@ -1,7 +0,0 @@
-<html jwcid="@Shell" title="Three">
-<body jwcid="@Body">
-
-Page name: [<span jwcid="@Speller" letters="ognl:pageName.toCharArray()"/>]
-	
-</body>
-</html>
\ No newline at end of file
diff --git a/3.0.4/junit/context12/Two.html b/3.0.4/junit/context12/Two.html
deleted file mode 100644
index 056d904..0000000
--- a/3.0.4/junit/context12/Two.html
+++ /dev/null
@@ -1,7 +0,0 @@
-<html jwcid="@Shell" title="Two">
-<body jwcid="@Body">
-
-<span jwcid="@MessageInABox" message="Tapestry Rules!"/>
-	
-</body>
-</html>
\ No newline at end of file
diff --git a/3.0.4/junit/context12/WEB-INF/InsertFinal.jwc b/3.0.4/junit/context12/WEB-INF/InsertFinal.jwc
deleted file mode 100644
index 5c87b9e..0000000
--- a/3.0.4/junit/context12/WEB-INF/InsertFinal.jwc
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>

-<!--

-   Copyright 2004 The Apache Software Foundation

-  

-   Licensed under the Apache License, Version 2.0 (the "License");

-   you may not use this file except in compliance with the License.

-   You may obtain a copy of the License at

-  

-       http://www.apache.org/licenses/LICENSE-2.0

-  

-   Unless required by applicable law or agreed to in writing, software

-   distributed under the License is distributed on an "AS IS" BASIS,

-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-   See the License for the specific language governing permissions and

-   limitations under the License.

--->

-<!-- $Id: InsertInteger.jwc,v 1.4 2003/06/01 05:05:11 hlship Exp $ -->

-<!DOCTYPE component-specification PUBLIC 

-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 

-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">

-  

-<component-specification class="org.apache.tapestry.junit.mock.c12.InsertFinal"

-		allow-body="no" allow-informal-parameters="no">

-

-  <parameter name="final" type="java.lang.String" direction="custom"/>

-		

-</component-specification>

diff --git a/3.0.4/junit/context12/WEB-INF/InsertInteger.jwc b/3.0.4/junit/context12/WEB-INF/InsertInteger.jwc
deleted file mode 100644
index 168cd33..0000000
--- a/3.0.4/junit/context12/WEB-INF/InsertInteger.jwc
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-  
-<component-specification class="org.apache.tapestry.junit.mock.c12.InsertInteger"
-		allow-body="no" allow-informal-parameters="no">
-
-  <parameter name="integer" property-name="intValue" type="int" direction="in"/>
-		
-</component-specification>
diff --git a/3.0.4/junit/context12/WEB-INF/InsertString.jwc b/3.0.4/junit/context12/WEB-INF/InsertString.jwc
deleted file mode 100644
index 3a68817..0000000
--- a/3.0.4/junit/context12/WEB-INF/InsertString.jwc
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-  
-<component-specification class="org.apache.tapestry.junit.mock.c12.InsertString"
-		allow-body="no" allow-informal-parameters="no">
-
-  <parameter name="string" type="java.lang.String" direction="in"/>
-		
-</component-specification>
diff --git a/3.0.4/junit/context12/WEB-INF/MessageInABox.html b/3.0.4/junit/context12/WEB-INF/MessageInABox.html
deleted file mode 100644
index efe4262..0000000
--- a/3.0.4/junit/context12/WEB-INF/MessageInABox.html
+++ /dev/null
@@ -1,9 +0,0 @@
-<!-- $Id$ -->
-
-<span jwcid="$content$">
-	
-<table border="1">
-<tr><td><span jwcid="@Insert" value="ognl:message">A Message</span></td></tr>
-</table>
-
-</span>
\ No newline at end of file
diff --git a/3.0.4/junit/context12/WEB-INF/MessageInABox.jwc b/3.0.4/junit/context12/WEB-INF/MessageInABox.jwc
deleted file mode 100644
index 082f153..0000000
--- a/3.0.4/junit/context12/WEB-INF/MessageInABox.jwc
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-  
-<component-specification allow-body="no" allow-informal-parameters="no">
-
-  <parameter name="message" type="java.lang.String" direction="in"/>
-		
-</component-specification>
diff --git a/3.0.4/junit/context12/WEB-INF/Speller.html b/3.0.4/junit/context12/WEB-INF/Speller.html
deleted file mode 100644
index 98a9f78..0000000
--- a/3.0.4/junit/context12/WEB-INF/Speller.html
+++ /dev/null
@@ -1 +0,0 @@
-<span jwcid="e"><span jwcid="ifNotFirst"> </span><span jwcid="insertLetter"/></span>
\ No newline at end of file
diff --git a/3.0.4/junit/context12/WEB-INF/Speller.jwc b/3.0.4/junit/context12/WEB-INF/Speller.jwc
deleted file mode 100644
index f2fab78..0000000
--- a/3.0.4/junit/context12/WEB-INF/Speller.jwc
+++ /dev/null
@@ -1,42 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-  
-<component-specification allow-body="no" allow-informal-parameters="no">
-
-  <parameter name="letters" type="char[]" direction="in"/>
-  
-  <property-specification name="letter" type="char"/>
-  <property-specification name="index" type="int"/>
-		
-  <component id="e" type="Foreach">
-  	<binding name="source" expression="letters"/>	
-  	<binding name="value" expression="letter"/>
-  	<binding name="index" expression="index"/>
-  </component>
-  
-  <component id="insertLetter" type="Insert">
-  	<binding name="value" expression="letter"/>	
-  </component>
-  
-  <component id="ifNotFirst" type="Conditional">
-  	<binding name="condition" expression="index != 0"/>
-  </component>
-</component-specification>
diff --git a/3.0.4/junit/context13/Home.html b/3.0.4/junit/context13/Home.html
deleted file mode 100644
index d743583..0000000
--- a/3.0.4/junit/context13/Home.html
+++ /dev/null
@@ -1,32 +0,0 @@
-<html jwcid="@Shell" title="Home">
-<body jwcid="@Body">
-
-<a href="#" jwcid="internal@DirectLink" listener="ognl:listeners.internalRedirect">Internal Redirect</a>
-
-<br/>
-
-<a href="#" jwcid="external@DirectLink" listener="ognl:listeners.externalRedirect">External Redirect</a>
-	
-<br/>
-
-<a href="#" jwcid="null@DirectLink" listener="ognl:listeners.nullRedirect">Null Redirect</a>
-
-
-<br/>
-
-<a href="#" jwcid="servletException@DirectLink" listener="ognl:listeners.servletException">Servlet Exception</a>
-
-<br/>
-
-<a href="#" jwcid="missing@DirectLink" listener="ognl:listeners.missing">Missing Resource (IOException)</a>
-
-<br/>
-
-<a href="#" jwcid="index@DirectLink" listener="ognl:listeners.index">Directory Index</a>
-
-<br/>
-
-<a href="#" jwcid="failExternal@DirectLink" listener="ognl:listeners.failExternal">Fail External Forward</a>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/3.0.4/junit/context13/README b/3.0.4/junit/context13/README
deleted file mode 100644
index 00c145e..0000000
--- a/3.0.4/junit/context13/README
+++ /dev/null
@@ -1 +0,0 @@
-This context is used for testing redirects, both internal and external.
\ No newline at end of file
diff --git a/3.0.4/junit/context13/WEB-INF/Home.page b/3.0.4/junit/context13/WEB-INF/Home.page
deleted file mode 100644
index 6b83e54..0000000
--- a/3.0.4/junit/context13/WEB-INF/Home.page
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<page-specification class="org.apache.tapestry.junit.mock.c13.Home"/>
diff --git a/3.0.4/junit/context13/index.html b/3.0.4/junit/context13/index.html
deleted file mode 100644
index 679d3eb..0000000
--- a/3.0.4/junit/context13/index.html
+++ /dev/null
@@ -1,8 +0,0 @@
-<html>
-<head>
-<title>Index Page</title>	
-</head>	
-<body>
-<a href="app">Tapestry Application</a>
-</body>
-</html>
\ No newline at end of file
diff --git a/3.0.4/junit/context13/static/Warning.html b/3.0.4/junit/context13/static/Warning.html
deleted file mode 100644
index 071ad45..0000000
--- a/3.0.4/junit/context13/static/Warning.html
+++ /dev/null
@@ -1,10 +0,0 @@
-<html>
-<head>
-<title>Warning</title>	
-</head>	
-
-<body>
-This page is static, forwarded to by the Tapestry application.
-	
-</body>
-</html>
\ No newline at end of file
diff --git a/3.0.4/junit/context14/ListEdit.html b/3.0.4/junit/context14/ListEdit.html
deleted file mode 100644
index dca53ee..0000000
--- a/3.0.4/junit/context14/ListEdit.html
+++ /dev/null
@@ -1,28 +0,0 @@
-<html jwcid="@Shell" title="ListEdit">
-<body jwcid="@Body">
-
-
-<form jwcid="form@Form" listener="ognl:listeners.formSubmit">
-
-<p>Enter favorite colors:</p>
-	
-<table>
-<tr jwcid="e@ListEdit" element="tr" source="ognl:sortedColorKeys" value="ognl:colorKey">
-	<th><span jwcid="@Insert" value="ognl:colorKey">Color Label</span>:</th>
-	<td>
-		<select jwcid="inputColor@PropertySelection" 
-			value="ognl:color" 
-			model="ognl:colorModel">
-		<option>Red</option> <option>Green</option> <option>Blue</option>
-		</select>
-	</td>
-</tr>	
-<tr>
-	<td><input type="submit" value="Continue"/></td>
-</tr>
-</table>	
-	
-</form>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/3.0.4/junit/context14/ListEditArray.html b/3.0.4/junit/context14/ListEditArray.html
deleted file mode 100644
index 4d7369a..0000000
--- a/3.0.4/junit/context14/ListEditArray.html
+++ /dev/null
@@ -1,7 +0,0 @@
-<html jwcid="@Shell" title="ListEdit Array">
-<body jwcid="@Body">
-
-<span jwcid="@ListEditForm" source="ognl:items"/>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/3.0.4/junit/context14/ListEditNull.html b/3.0.4/junit/context14/ListEditNull.html
deleted file mode 100644
index 54c0ff1..0000000
--- a/3.0.4/junit/context14/ListEditNull.html
+++ /dev/null
@@ -1,7 +0,0 @@
-<html jwcid="@Shell" title="ListEdit Null">
-<body jwcid="@Body">
-
-<span jwcid="@ListEditForm" source="ognl:null"/>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/3.0.4/junit/context14/ListEditResults.html b/3.0.4/junit/context14/ListEditResults.html
deleted file mode 100644
index f23c43f..0000000
--- a/3.0.4/junit/context14/ListEditResults.html
+++ /dev/null
@@ -1,12 +0,0 @@
-<html jwcid="@Shell" title="ListEdit Results">
-<body jwcid="@Body">
-
-<table>
-<tr jwcid="@Foreach" element="tr" source="ognl:sortedColorKeys" value="ognl:colorKey">
-<th><span jwcid="@Insert" value="ognl:colorKey">Color</span>:</th>
-<td><span jwcid="@Insert" value="ognl:colorName">Mauve</span></td>	
-</tr>	
-</table>
-	
-</body>
-</html>
\ No newline at end of file
diff --git a/3.0.4/junit/context14/README b/3.0.4/junit/context14/README
deleted file mode 100644
index 16f07d0..0000000
--- a/3.0.4/junit/context14/README
+++ /dev/null
@@ -1 +0,0 @@
-This context is used for testing Form and other form-related components.
\ No newline at end of file
diff --git a/3.0.4/junit/context14/WEB-INF/ListEdit.page b/3.0.4/junit/context14/WEB-INF/ListEdit.page
deleted file mode 100644
index 4da000e..0000000
--- a/3.0.4/junit/context14/WEB-INF/ListEdit.page
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<page-specification class="org.apache.tapestry.junit.mock.c14.ListEdit">
-	
-	<property-specification name="colorMap" type="java.util.Map"/>
-	<property-specification name="colorKey" type="java.lang.String"/>
-	
-</page-specification>
\ No newline at end of file
diff --git a/3.0.4/junit/context14/WEB-INF/ListEditArray.page b/3.0.4/junit/context14/WEB-INF/ListEditArray.page
deleted file mode 100644
index 0a00152..0000000
--- a/3.0.4/junit/context14/WEB-INF/ListEditArray.page
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<page-specification class="org.apache.tapestry.junit.mock.c14.ListEditArray"/>
diff --git a/3.0.4/junit/context14/WEB-INF/ListEditForm.html b/3.0.4/junit/context14/WEB-INF/ListEditForm.html
deleted file mode 100644
index 06ab1ab..0000000
--- a/3.0.4/junit/context14/WEB-INF/ListEditForm.html
+++ /dev/null
@@ -1,13 +0,0 @@
-
-<form jwcid="@Form">
-
-<span jwcid="e@ListEdit" source="ognl:source" value="ognl:value" index="ognl:index" 
-		listener="ognl:listeners.synchronizeItem">
-<br/>
-[<span jwcid="@Insert" value="ognl:value">Value</span> #<span jwcid="@Insert" value="ognl:index">0</span>]
-</span>
-
-<br/>
-Synchronized <span jwcid="@Insert" value="ognl:syncCount">0</span> times.
-	
-</form>
diff --git a/3.0.4/junit/context14/WEB-INF/ListEditForm.jwc b/3.0.4/junit/context14/WEB-INF/ListEditForm.jwc
deleted file mode 100644
index 670bb5e..0000000
--- a/3.0.4/junit/context14/WEB-INF/ListEditForm.jwc
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<component-specification class="org.apache.tapestry.junit.mock.c14.ListEditForm">
-	
-	<parameter name="source" type="java.lang.Object" required="yes" direction="in"/>
-	
-	<property-specification name="value" type="java.lang.String"/>
-	<property-specification name="index" type="int"/>
-	
-</component-specification>
\ No newline at end of file
diff --git a/3.0.4/junit/context14/WEB-INF/ListEditResults.page b/3.0.4/junit/context14/WEB-INF/ListEditResults.page
deleted file mode 100644
index 64c23ba..0000000
--- a/3.0.4/junit/context14/WEB-INF/ListEditResults.page
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<page-specification class="org.apache.tapestry.junit.mock.c14.ListEditResults">
-	
-	<property-specification name="colorMap" type="java.util.Map"/>
-	<property-specification name="colorKey" type="java.lang.String"/>
-	
-</page-specification>
\ No newline at end of file
diff --git a/3.0.4/junit/context16/Home.html b/3.0.4/junit/context16/Home.html
deleted file mode 100644
index 87efee2..0000000
--- a/3.0.4/junit/context16/Home.html
+++ /dev/null
@@ -1,7 +0,0 @@
-<html jwcid="@Shell" title="Private Assets">
-<body jwcid="@Body">
-
-<img jwcid="@Image" image="ognl:assets.logo"/>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/3.0.4/junit/context16/README b/3.0.4/junit/context16/README
deleted file mode 100644
index d16b290..0000000
--- a/3.0.4/junit/context16/README
+++ /dev/null
@@ -1 +0,0 @@
-This context is used to test the download, via the external service, of private assets.
\ No newline at end of file
diff --git a/3.0.4/junit/context17/Four.html b/3.0.4/junit/context17/Four.html
deleted file mode 100644
index ea27e97..0000000
--- a/3.0.4/junit/context17/Four.html
+++ /dev/null
@@ -1,9 +0,0 @@
-<html jwcid="@Shell" title="Four">
-<body jwcid="@Body">
-
-<form jwcid="outer@Form">
-	<form jwcid="inner@Form"/>	
-</form>	
-
-</body>
-</html>
\ No newline at end of file
diff --git a/3.0.4/junit/context17/Home.html b/3.0.4/junit/context17/Home.html
deleted file mode 100644
index d000deb..0000000
--- a/3.0.4/junit/context17/Home.html
+++ /dev/null
@@ -1,18 +0,0 @@
-<html jwcid="@Shell" title="Home">
-<body jwcid="@Body">
-
-<form jwcid="@Form" listener="ognl:listeners.formSubmit">
-Normal: <input jwcid="normal@TextField" value="ognl:normal"/>
-<br/>
-Disabled: <input jwcid="disabled@TextField" value="ognl:disabled" disabled="ognl:true"/>
-<br/>
-Hidden: <input jwcid="hidden@TextField" value="ognl:hidden" hidden="ognl:true"/>
-</form>
-
-
-<br/>
-
-<form jwcid="@Form" direct="ognl:false"/>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/3.0.4/junit/context17/README b/3.0.4/junit/context17/README
deleted file mode 100644
index b0a9991..0000000
--- a/3.0.4/junit/context17/README
+++ /dev/null
@@ -1 +0,0 @@
-Test cases for the Form and TextField components.
\ No newline at end of file
diff --git a/3.0.4/junit/context17/Three.html b/3.0.4/junit/context17/Three.html
deleted file mode 100644
index 9bc3899..0000000
--- a/3.0.4/junit/context17/Three.html
+++ /dev/null
@@ -1,7 +0,0 @@
-<html jwcid="@Shell" title="Three">
-<body jwcid="@Body">
-
-<input jwcid="@TextField" value="ognl:visit.foo"/>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/3.0.4/junit/context17/Two.html b/3.0.4/junit/context17/Two.html
deleted file mode 100644
index 15912b3..0000000
--- a/3.0.4/junit/context17/Two.html
+++ /dev/null
@@ -1,11 +0,0 @@
-<html jwcid="@Shell" title="Two">
-<body jwcid="@Body">
-
-Normal: [<span jwcid="@Insert" value="ognl:normal"/>]
-<br/>
-Disabled: [<span jwcid="@Insert" value="ognl:disabled"/>]
-<br/>
-Hidden: [<span jwcid="@Insert" value="ognl:hidden"/>]
-
-</body>
-</html>
\ No newline at end of file
diff --git a/3.0.4/junit/context17/WEB-INF/Home.page b/3.0.4/junit/context17/WEB-INF/Home.page
deleted file mode 100644
index fa90c99..0000000
--- a/3.0.4/junit/context17/WEB-INF/Home.page
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<page-specification class="org.apache.tapestry.junit.mock.c17.Home">
-  <property-specification name="normal" type="java.lang.String"/>
-  <property-specification name="disabled" type="java.lang.String"/>
-  <property-specification name="hidden" type="java.lang.String"/>
-</page-specification>
\ No newline at end of file
diff --git a/3.0.4/junit/context17/WEB-INF/Two.page b/3.0.4/junit/context17/WEB-INF/Two.page
deleted file mode 100644
index 6a043cc..0000000
--- a/3.0.4/junit/context17/WEB-INF/Two.page
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<page-specification class="org.apache.tapestry.junit.mock.c17.Two">
-  <property-specification name="normal" type="java.lang.String"/>
-  <property-specification name="disabled" type="java.lang.String"/>
-  <property-specification name="hidden" type="java.lang.String"/>
-</page-specification>
\ No newline at end of file
diff --git a/3.0.4/junit/context18/Home.html b/3.0.4/junit/context18/Home.html
deleted file mode 100644
index 00f84c7..0000000
--- a/3.0.4/junit/context18/Home.html
+++ /dev/null
@@ -1,29 +0,0 @@
-<html jwcid="@Shell" title="Home">
-<body jwcid="@Body">
-
-<form jwcid="@Form">
-	
-<span jwcid="@RadioGroup" selected="ognl:size" disabled="ognl:groupDisabled">
-	<input type="radio" jwcid="@Radio" value="ognl:10"/> Small
-	<br/>
-	<input type="radio" jwcid="@Radio" value="ognl:20"/> Medium
-	<br/>
-	<input type="radio" jwcid="@Radio" value="ognl:30"/> Large
-	<br/>
-	<input type="radio" jwcid="@Radio" value="ognl:100" disabled="ognl:true"/> Gargantuan
-</span>
-
-</form>
-
-Size: [<span jwcid="@Insert" value="ognl:size"/>]
-
-<br/>
-
-<form jwcid="dummy@Form" direct="ognl:false"/>
-
-<br/>
-
-<a href="#" jwcid="@DirectLink" listener="ognl:listeners.disableGroup">disable group</a>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/3.0.4/junit/context18/LanguageSelection.html b/3.0.4/junit/context18/LanguageSelection.html
deleted file mode 100644
index ee1eaf0..0000000
--- a/3.0.4/junit/context18/LanguageSelection.html
+++ /dev/null
@@ -1,36 +0,0 @@
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<span jwcid="$content$">
-<html jwcid="@Shell" title="Language Selection">
-<body jwcid="@Body">
-
-<form jwcid="form@Form">
-	
-<span jwcid="group@RadioGroup" selected="ognl:selectedLanguage">
-	<input type="radio" jwcid="@Radio" value="ognl:@org.apache.tapestry.junit.mock.c18.Language@JAVA"/> Java
-	<br/>
-	<input type="radio" jwcid="@Radio" value="ognl:@org.apache.tapestry.junit.mock.c18.Language@C_SHARP"/> C#
-	<br/>
-	<input type="radio" jwcid="@Radio" value="ognl:@org.apache.tapestry.junit.mock.c18.Language@PYTHON"/> Python
-</span>
-
-</form>
-
-Selected Language: [<span jwcid="@Insert" value="ognl:selectedLanguage"/>]
-
-</body>
-</html>
-</span>
\ No newline at end of file
diff --git a/3.0.4/junit/context18/NestedGroups.html b/3.0.4/junit/context18/NestedGroups.html
deleted file mode 100644
index 439684a..0000000
--- a/3.0.4/junit/context18/NestedGroups.html
+++ /dev/null
@@ -1,11 +0,0 @@
-<html jwcid="@Shell" title="Nested Groups">
-<body jwcid="@Body">
-	
-<form jwcid="@Form">
-<span jwcid="outer@RadioGroup" selected="ognl:visit.foo">
-<span jwcid="inner@RadioGroup" selected="ognl:visit.bar"/>	
-</span>	
-</form>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/3.0.4/junit/context18/NoForm.html b/3.0.4/junit/context18/NoForm.html
deleted file mode 100644
index ffa2af1..0000000
--- a/3.0.4/junit/context18/NoForm.html
+++ /dev/null
@@ -1,13 +0,0 @@
-<html jwcid="@Shell" title="NoForm">
-<body jwcid="@Body">
-
-<form>
-	
-<span jwcid="orphan@RadioGroup" selected="ognl:visit.foo">
-	<input type="radio" jwcid="@Radio" value="ognl:10"/> 
-</span>
-
-</form>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/3.0.4/junit/context18/NoGroup.html b/3.0.4/junit/context18/NoGroup.html
deleted file mode 100644
index f4597e1..0000000
--- a/3.0.4/junit/context18/NoGroup.html
+++ /dev/null
@@ -1,11 +0,0 @@
-<html jwcid="@Shell" title="Nested Groups">
-<body jwcid="@Body">
-	
-<form jwcid="@Form">
-
-<input type="radio" jwcid="orphan@Radio" value="foo"/>
-
-</form>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/3.0.4/junit/context18/NullSelection.html b/3.0.4/junit/context18/NullSelection.html
deleted file mode 100644
index 8b15e5f..0000000
--- a/3.0.4/junit/context18/NullSelection.html
+++ /dev/null
@@ -1,21 +0,0 @@
-<html jwcid="@Shell" title="NullSelection">
-<body jwcid="@Body">
-
-<form jwcid="@Form">
-	
-<span jwcid="group@RadioGroup" selected="ognl:framework">
-	
-	<input type="radio" jwcid="r0@Radio"/> No Choice
-	<input type="radio" jwcid="r1@Radio" value="tapestry"/> Tapestry
-	<br/>
-	<input type="radio" jwcid="r2@Radio" value="struts"/> Struts
-	<br/>
-	<input type="radio" jwcid="r3@Radio" value="webwork"/> WebWork
-</span>
-
-</form>
-
-Framework: [<span jwcid="@Insert" value="ognl:framework"/>]
-
-</body>
-</html>
\ No newline at end of file
diff --git a/3.0.4/junit/context18/README b/3.0.4/junit/context18/README
deleted file mode 100644
index 3f13acd..0000000
--- a/3.0.4/junit/context18/README
+++ /dev/null
@@ -1 +0,0 @@
-Tests the RadioGroup and Radio components.
\ No newline at end of file
diff --git a/3.0.4/junit/context18/WEB-INF/Home.page b/3.0.4/junit/context18/WEB-INF/Home.page
deleted file mode 100644
index 724f1dd..0000000
--- a/3.0.4/junit/context18/WEB-INF/Home.page
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<page-specification class="org.apache.tapestry.junit.mock.c18.Home">
-  <property-specification name="size" type="int" initial-value="20"/>
-  <property-specification name="groupDisabled" type="boolean" persistent="yes"/>
-</page-specification>
\ No newline at end of file
diff --git a/3.0.4/junit/context18/WEB-INF/LanguageSelection.page b/3.0.4/junit/context18/WEB-INF/LanguageSelection.page
deleted file mode 100644
index c023ca3..0000000
--- a/3.0.4/junit/context18/WEB-INF/LanguageSelection.page
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<page-specification>
-	
-  <property-specification name="selectedLanguage"
-  		type="org.apache.tapestry.junit.mock.c18.Language"/>
-
-</page-specification>
\ No newline at end of file
diff --git a/3.0.4/junit/context18/WEB-INF/NullSelection.page b/3.0.4/junit/context18/WEB-INF/NullSelection.page
deleted file mode 100644
index b93260e..0000000
--- a/3.0.4/junit/context18/WEB-INF/NullSelection.page
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<page-specification>
-  <property-specification name="framework" type="java.lang.String"/>
-</page-specification>
\ No newline at end of file
diff --git a/3.0.4/junit/context19/Four.html b/3.0.4/junit/context19/Four.html
deleted file mode 100644
index 0ac15a8..0000000
--- a/3.0.4/junit/context19/Four.html
+++ /dev/null
@@ -1,14 +0,0 @@
-<html jwcid="@Shell" title="Four">
-<body jwcid="@Body">
-
-<form jwcid="@Form" enctype="multipart/form-data">
-
-<select jwcid="@Select" multiple="ognl:true">
-<option jwcid="@Option" selected="ognl:lightsOn" label="Lights on"/>
-<option jwcid="@Option" selected="ognl:nobodyHome" label="Nobody Home"/>
-</select>
-	
-</form>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/3.0.4/junit/context19/Home.html b/3.0.4/junit/context19/Home.html
deleted file mode 100644
index a647e42..0000000
--- a/3.0.4/junit/context19/Home.html
+++ /dev/null
@@ -1,15 +0,0 @@
-<html jwcid="@Shell" title="Home">
-<body jwcid="@Body">
-
-<form jwcid="@Form" listener="ognl:listeners.formSubmit">
-
-<input type="file" jwcid="@Upload" file="ognl:uploadFile" disabled="ognl:uploadDisabled"/>
-	
-</form>
-
-<br/>
-
-<a href="#" jwcid="@DirectLink" listener="ognl:listeners.disableUpload">click to disable Upload</a>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/3.0.4/junit/context19/README b/3.0.4/junit/context19/README
deleted file mode 100644
index 5d1efab..0000000
--- a/3.0.4/junit/context19/README
+++ /dev/null
@@ -1 +0,0 @@
-Context for tests related to file uploads and the Upload component.
\ No newline at end of file
diff --git a/3.0.4/junit/context19/Tapestry-Banner.png b/3.0.4/junit/context19/Tapestry-Banner.png
deleted file mode 100644
index a986059..0000000
--- a/3.0.4/junit/context19/Tapestry-Banner.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/junit/context19/Three.html b/3.0.4/junit/context19/Three.html
deleted file mode 100644
index c77c430..0000000
--- a/3.0.4/junit/context19/Three.html
+++ /dev/null
@@ -1,7 +0,0 @@
-<html jwcid="@Shell" title="Three">
-<body>
-
-No file uploaded.	
-	
-</body>
-</html>
\ No newline at end of file
diff --git a/3.0.4/junit/context19/Two.html b/3.0.4/junit/context19/Two.html
deleted file mode 100644
index 9d267fe..0000000
--- a/3.0.4/junit/context19/Two.html
+++ /dev/null
@@ -1,20 +0,0 @@
-<html jwcid="@Shell" title="Two">
-<body jwcid="@Body">
-
-Content Type: [<span jwcid="@Insert" value="ognl:file.contentType"/>]
-<br/>
-Path: [<span jwcid="@Insert" value="ognl:file.filePath"/>]
-<br/>
-Name: [<span jwcid="@Insert" value="ognl:file.fileName"/>]
-<br/>
-Size: [<span jwcid="@Insert" value="ognl:file.size"/>]
-<br/>
-In Memory: [<span jwcid="@Insert" value="ognl:file.inMemory"/>]
-
-<span jwcid="@Conditional" condition="ognl:uploadMatch">
-<br/>
-Contents match.
-</span>
-
-</body> 
-</html>
\ No newline at end of file
diff --git a/3.0.4/junit/context19/WEB-INF/Four.page b/3.0.4/junit/context19/WEB-INF/Four.page
deleted file mode 100644
index f72b9fd..0000000
--- a/3.0.4/junit/context19/WEB-INF/Four.page
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-    Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<page-specification>
-
-  <property-specification name="lightsOn" type="boolean" persistent="yes"/>
-  <property-specification name="nobodyHome" type="boolean" persistent="yes"/>
-
-</page-specification>
\ No newline at end of file
diff --git a/3.0.4/junit/context19/WEB-INF/Home.page b/3.0.4/junit/context19/WEB-INF/Home.page
deleted file mode 100644
index 65cf1d9..0000000
--- a/3.0.4/junit/context19/WEB-INF/Home.page
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<page-specification class="org.apache.tapestry.junit.mock.c19.Home">
-
-  <property-specification name="uploadFile" type="org.apache.tapestry.request.IUploadFile"/>
-  <property-specification name="uploadDisabled" type="boolean" persistent="yes"/>
-
-</page-specification>
\ No newline at end of file
diff --git a/3.0.4/junit/context19/WEB-INF/Two.page b/3.0.4/junit/context19/WEB-INF/Two.page
deleted file mode 100644
index ca25978..0000000
--- a/3.0.4/junit/context19/WEB-INF/Two.page
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<page-specification class="org.apache.tapestry.junit.mock.c19.Two">
-
-  <property-specification name="file" type="org.apache.tapestry.request.IUploadFile"/>
-
-</page-specification>
\ No newline at end of file
diff --git a/3.0.4/junit/context19/WEB-INF/app.application b/3.0.4/junit/context19/WEB-INF/app.application
deleted file mode 100644
index a9c4460..0000000
--- a/3.0.4/junit/context19/WEB-INF/app.application
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-    Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE application PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<application>
-
-	<extension name="org.apache.tapestry.multipart-decoder" 
-		 class="org.apache.tapestry.multipart.DefaultMultipartDecoder">
-		<configure property-name="thresholdSize" type="long" value="1000"/>
-	</extension>
-
-</application>
\ No newline at end of file
diff --git a/3.0.4/junit/context19/form-four.request b/3.0.4/junit/context19/form-four.request
deleted file mode 100644
index 104340c..0000000
--- a/3.0.4/junit/context19/form-four.request
+++ /dev/null
@@ -1,21 +0,0 @@
------------------------------eldorado

-Content-Disposition: form-data; name="service"

-

-direct/1/Four/$Form

------------------------------eldorado

-Content-Disposition: form-data; name="sp"

-

-S0

------------------------------eldorado

-Content-Disposition: form-data; name="$Select"

-

-0

------------------------------eldorado

-Content-Disposition: form-data; name="$Select"

-

-1

------------------------------eldorado

-Content-Disposition: form-data; name="Form0"

-

-$Select

------------------------------eldorado--

diff --git a/3.0.4/junit/context19/long.html b/3.0.4/junit/context19/long.html
deleted file mode 100644
index c4d5192..0000000
--- a/3.0.4/junit/context19/long.html
+++ /dev/null
@@ -1,60 +0,0 @@
-<html><head>

-      <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">

-   <title>Manual Persistent Component Properties</title><link rel="stylesheet" href="Tapestry.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.59.2"><link rel="home" href="TapestryUsersGuide.html" title="Tapestry User's Guide"><link rel="up" href="state.html" title="Chapter&nbsp;2.&nbsp;Managing Server-Side State"><link rel="previous" href="state.manual-page-properties.html" title="Implementing Persistent Page Properties Manually"><link rel="next" href="state.stateless.html" title="Stateless Applications"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Manual Persistent Component Properties</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="state.manual-page-properties.html"><img src="common-images/prev.png" alt="Prev"></a>&nbsp;</td><th width="60%" align="center">Chapter&nbsp;2.&nbsp;Managing Server-Side State</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="state.stateless.html"><img src="common-images/next.png" alt="Next"></a></td></tr></table><hr></div><div class="section" lang="en"><div class="titlepage"><div><h2 class="title" style="clear: both"><a name="state.manual-component-properties"></a>Manual Persistent Component Properties</h2></div></div><p>

-Implementing transient and persistent properties inside components involves more work. 

-The <tt>fireObservedChange()</tt>

-method is available to components as well as pages, but the initialization of

-the component is more complicated.

-</p><p>

-Components do not have the equivalent of the <tt>initialize()</tt> method.  Instead,

-they must register for an event notification to tell them when the page is being <span class="emphasis"><em>detached</em></span>

-from the engine (prior to be stored back into the page pool).  This event is generated by the page itself.

-</p><p>

-The Java interface <a href="../api/net/sf/tapestry/event/PageDetachListener.html" target="_self"><tt>PageDetachListener</tt></a> is the event listener interface for this purpose.  

-By simply implementing this interface, Tapestry will register the component as a listener and ensure that

-it receives event notifications at the right time (this works for the two other

-page event interfaces, <a href="../api/net/sf/tapestry/event/PageRenderListener.html" target="_self"><tt>PageRenderListener</tt></a> and <a href="../api/net/sf/tapestry/event/PageCleanupListener.html" target="_self"><tt>PageCleanupListener</tt></a> as well; simply

-implement the interface and leave the rest to the framework).

-</p><p>

-Tapestry provides a method, <tt>finishLoad()</tt>, for just this purpose: late initialization.

-</p><div class="example"><a name="d0e593"></a><p class="title"><b>Example&nbsp;2.7.&nbsp;Manual Persistent Component Properties</b></p><table border="0" bgcolor="#E0E0E0"><tr><td><pre class="programlisting">

-public class MyComponent extends <a href="../api/net/sf/tapestry/BaseComponent.html" target="_self"><tt>BaseComponent</tt></a> implements <a href="../api/net/sf/tapestry/event/PageDetachListener.html" target="_self"><tt>PageDetachListener</tt></a>

-{

-    private String _myProperty;

-    

-    public void setMyProperty(String myProperty)

-    {

-        _myProperty = myProperty;

-        

-        fireObservedChange("myProperty", myProperty);

-    }

-    

-    public String getMyProperty()

-    {

-        return _myProperty;

-    }

-    

-    protected void initialize()

-    {

-        _myProperty = "<span class="emphasis"><em>a default value</em></span>";

-    }

-    

-    protected void finishLoad()

-    {

-        initialize();

-    }

-    

-    /**

-     *  The method specified by <a href="../api/net/sf/tapestry/event/PageDetachListener.html" target="_self"><tt>PageDetachListener</tt></a>.

-     *

-     **/

-    

-    public void pageDetached(PageEvent event)

-    {

-        initialize();

-    }

-}

-</pre></td></tr></table></div><p>

-Again, there is no particular need to do all this; using the

-<a href="spec.property-specification.html" title="property-specification element"><tt class="sgmltag-starttag">&lt;property-specification&gt;</tt></a> element is far, far simpler.	

-</p></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="state.manual-page-properties.html"><img src="common-images/prev.png" alt="Prev"></a>&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="state.html"><img src="common-images/up.png" alt="Up"></a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="state.stateless.html"><img src="common-images/next.png" alt="Next"></a></td></tr><tr><td width="40%" align="left" valign="top">Implementing Persistent Page Properties Manually&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="TapestryUsersGuide.html"><img src="common-images/home.png" alt="Home"></a></td><td width="40%" align="right" valign="top">&nbsp;Stateless Applications</td></tr></table></div></body></html>
\ No newline at end of file
diff --git a/3.0.4/junit/context19/message.txt b/3.0.4/junit/context19/message.txt
deleted file mode 100644
index 476908a..0000000
--- a/3.0.4/junit/context19/message.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-Now is the time for all good men to come to the aid of their country.

-She sells sea shells by the sea shore.

-The quick brown fox jumps over the lazy dog.

diff --git a/3.0.4/junit/context19/upload-image.request b/3.0.4/junit/context19/upload-image.request
deleted file mode 100644
index 37e35a6..0000000
--- a/3.0.4/junit/context19/upload-image.request
+++ /dev/null
Binary files differ
diff --git a/3.0.4/junit/context19/upload-image.request.prefix b/3.0.4/junit/context19/upload-image.request.prefix
deleted file mode 100644
index 5754617..0000000
--- a/3.0.4/junit/context19/upload-image.request.prefix
+++ /dev/null
@@ -1,12 +0,0 @@
------------------------------9d33212e1c03e3

-Content-Disposition: form-data; name="service"

-

-direct/0/Home/$Form

------------------------------9d33212e1c03e3

-Content-Disposition: form-data; name="sp"

-

-S0

------------------------------9d33212e1c03e3

-Content-Disposition: form-data; name="$Upload"; filename="context19/Tapestry-Banner.png"

-Content-Type: image/x-png

-

diff --git a/3.0.4/junit/context19/upload-image.request.suffix b/3.0.4/junit/context19/upload-image.request.suffix
deleted file mode 100644
index c47eaf0..0000000
--- a/3.0.4/junit/context19/upload-image.request.suffix
+++ /dev/null
@@ -1,6 +0,0 @@
-

------------------------------9d33212e1c03e3

-Content-Disposition: form-data; name="Form0"

-

-$Upload

------------------------------9d33212e1c03e3--

diff --git a/3.0.4/junit/context19/upload-long.request b/3.0.4/junit/context19/upload-long.request
deleted file mode 100644
index 29e7334..0000000
--- a/3.0.4/junit/context19/upload-long.request
+++ /dev/null
@@ -1,77 +0,0 @@
------------------------------xyzzyx

-Content-Disposition: form-data; name="service"

-

-direct/0/Home/$Form

------------------------------xyzzyx

-Content-Disposition: form-data; name="sp"

-

-S0

------------------------------xyzzyx

-Content-Disposition: form-data; name="$Upload"; filename="context19/long.html"

-Content-Type: text/html

-

-<html><head>

-      <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">

-   <title>Manual Persistent Component Properties</title><link rel="stylesheet" href="Tapestry.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.59.2"><link rel="home" href="TapestryUsersGuide.html" title="Tapestry User's Guide"><link rel="up" href="state.html" title="Chapter&nbsp;2.&nbsp;Managing Server-Side State"><link rel="previous" href="state.manual-page-properties.html" title="Implementing Persistent Page Properties Manually"><link rel="next" href="state.stateless.html" title="Stateless Applications"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Manual Persistent Component Properties</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="state.manual-page-properties.html"><img src="common-images/prev.png" alt="Prev"></a>&nbsp;</td><th width="60%" align="center">Chapter&nbsp;2.&nbsp;Managing Server-Side State</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="state.stateless.html"><img src="common-images/next.png" alt="Next"></a></td></tr></table><hr></div><div class="section" lang="en"><div class="titlepage"><div><h2 class="title" style="clear: both"><a name="state.manual-component-properties"></a>Manual Persistent Component Properties</h2></div></div><p>

-Implementing transient and persistent properties inside components involves more work. 

-The <tt>fireObservedChange()</tt>

-method is available to components as well as pages, but the initialization of

-the component is more complicated.

-</p><p>

-Components do not have the equivalent of the <tt>initialize()</tt> method.  Instead,

-they must register for an event notification to tell them when the page is being <span class="emphasis"><em>detached</em></span>

-from the engine (prior to be stored back into the page pool).  This event is generated by the page itself.

-</p><p>

-The Java interface <a href="../api/net/sf/tapestry/event/PageDetachListener.html" target="_self"><tt>PageDetachListener</tt></a> is the event listener interface for this purpose.  

-By simply implementing this interface, Tapestry will register the component as a listener and ensure that

-it receives event notifications at the right time (this works for the two other

-page event interfaces, <a href="../api/net/sf/tapestry/event/PageRenderListener.html" target="_self"><tt>PageRenderListener</tt></a> and <a href="../api/net/sf/tapestry/event/PageCleanupListener.html" target="_self"><tt>PageCleanupListener</tt></a> as well; simply

-implement the interface and leave the rest to the framework).

-</p><p>

-Tapestry provides a method, <tt>finishLoad()</tt>, for just this purpose: late initialization.

-</p><div class="example"><a name="d0e593"></a><p class="title"><b>Example&nbsp;2.7.&nbsp;Manual Persistent Component Properties</b></p><table border="0" bgcolor="#E0E0E0"><tr><td><pre class="programlisting">

-public class MyComponent extends <a href="../api/net/sf/tapestry/BaseComponent.html" target="_self"><tt>BaseComponent</tt></a> implements <a href="../api/net/sf/tapestry/event/PageDetachListener.html" target="_self"><tt>PageDetachListener</tt></a>

-{

-    private String _myProperty;

-    

-    public void setMyProperty(String myProperty)

-    {

-        _myProperty = myProperty;

-        

-        fireObservedChange("myProperty", myProperty);

-    }

-    

-    public String getMyProperty()

-    {

-        return _myProperty;

-    }

-    

-    protected void initialize()

-    {

-        _myProperty = "<span class="emphasis"><em>a default value</em></span>";

-    }

-    

-    protected void finishLoad()

-    {

-        initialize();

-    }

-    

-    /**

-     *  The method specified by <a href="../api/net/sf/tapestry/event/PageDetachListener.html" target="_self"><tt>PageDetachListener</tt></a>.

-     *

-     **/

-    

-    public void pageDetached(PageEvent event)

-    {

-        initialize();

-    }

-}

-</pre></td></tr></table></div><p>

-Again, there is no particular need to do all this; using the

-<a href="spec.property-specification.html" title="property-specification element"><tt class="sgmltag-starttag">&lt;property-specification&gt;</tt></a> element is far, far simpler.	

-</p></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="state.manual-page-properties.html"><img src="common-images/prev.png" alt="Prev"></a>&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="state.html"><img src="common-images/up.png" alt="Up"></a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="state.stateless.html"><img src="common-images/next.png" alt="Next"></a></td></tr><tr><td width="40%" align="left" valign="top">Implementing Persistent Page Properties Manually&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="TapestryUsersGuide.html"><img src="common-images/home.png" alt="Home"></a></td><td width="40%" align="right" valign="top">&nbsp;Stateless Applications</td></tr></table></div></body></html>

------------------------------xyzzyx

-Content-Disposition: form-data; name="Form0"

-

-$Upload

------------------------------xyzzyx--

diff --git a/3.0.4/junit/context19/upload-message.request b/3.0.4/junit/context19/upload-message.request
deleted file mode 100644
index cadc45b..0000000
--- a/3.0.4/junit/context19/upload-message.request
+++ /dev/null
@@ -1,21 +0,0 @@
------------------------------7d33212e1c03e2

-Content-Disposition: form-data; name="service"

-

-direct/0/Home/$Form

------------------------------7d33212e1c03e2

-Content-Disposition: form-data; name="sp"

-

-S0

------------------------------7d33212e1c03e2

-Content-Disposition: form-data; name="$Upload"; filename="context19/message.txt"

-Content-Type: text/plain

-

-Now is the time for all good men to come to the aid of their country.

-She sells sea shells by the sea shore.

-The quick brown fox jumps over the lazy dog.

-

------------------------------7d33212e1c03e2

-Content-Disposition: form-data; name="Form0"

-

-$Upload

------------------------------7d33212e1c03e2--

diff --git a/3.0.4/junit/context2/CRoot.html b/3.0.4/junit/context2/CRoot.html
deleted file mode 100644
index 4928a5d..0000000
--- a/3.0.4/junit/context2/CRoot.html
+++ /dev/null
@@ -1 +0,0 @@
-This content provided by component CRoot.
\ No newline at end of file
diff --git a/3.0.4/junit/context2/CRoot.jwc b/3.0.4/junit/context2/CRoot.jwc
deleted file mode 100644
index d52f63f..0000000
--- a/3.0.4/junit/context2/CRoot.jwc
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<component-specification
-  class="org.apache.tapestry.BaseComponent"
-  allow-informal-parameters="no"/>
\ No newline at end of file
diff --git a/3.0.4/junit/context2/Home.html b/3.0.4/junit/context2/Home.html
deleted file mode 100644
index e1572b4..0000000
--- a/3.0.4/junit/context2/Home.html
+++ /dev/null
@@ -1,7 +0,0 @@
-<html jwcid="@lib:Border" title="Implicit Home Page">
-
-
-No page specification.  Not in the application specification.  Yet it still supports
-components.
-
-</html>
\ No newline at end of file
diff --git a/3.0.4/junit/context2/ImplicitComponents.html b/3.0.4/junit/context2/ImplicitComponents.html
deleted file mode 100644
index c7868e4..0000000
--- a/3.0.4/junit/context2/ImplicitComponents.html
+++ /dev/null
@@ -1,14 +0,0 @@
-<html jwcid="@lib:Border" title="ImplicitComponents Page">
-
-
-<span jwcid="@CRoot"/>
-
-<span jwcid="@CWebInf"/>
-
-<span jwcid="@CWebInfApp"/>
-
-<span jwcid="@CApp"/>
-
-<span jwcid="@CRelative"/>
-
-</html>
\ No newline at end of file
diff --git a/3.0.4/junit/context2/InAppRoot.html b/3.0.4/junit/context2/InAppRoot.html
deleted file mode 100644
index 9c8cd10..0000000
--- a/3.0.4/junit/context2/InAppRoot.html
+++ /dev/null
@@ -1,6 +0,0 @@
-<html jwcid="@lib:Border" title="InAppRoot Page">
-
-
-<span key="banner-message">Page specific message goes here.</span>
-
-</html>
\ No newline at end of file
diff --git a/3.0.4/junit/context2/InAppRoot.page b/3.0.4/junit/context2/InAppRoot.page
deleted file mode 100644
index aad4323..0000000
--- a/3.0.4/junit/context2/InAppRoot.page
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<!-- Establishes a location from which the properties files may be located. -->
-	
-<page-specification/>
-
diff --git a/3.0.4/junit/context2/InAppRoot.properties b/3.0.4/junit/context2/InAppRoot.properties
deleted file mode 100644
index ec52202..0000000
--- a/3.0.4/junit/context2/InAppRoot.properties
+++ /dev/null
@@ -1,3 +0,0 @@
-# $Id$
-
-banner-message=The specification, and properties files, are located in the application root.
diff --git a/3.0.4/junit/context2/InPages.html b/3.0.4/junit/context2/InPages.html
deleted file mode 100644
index d26474f..0000000
--- a/3.0.4/junit/context2/InPages.html
+++ /dev/null
@@ -1,6 +0,0 @@
-<html jwcid="@lib:Border" title="InPages Page">
-
-
-<span key="banner-message">Page specific message goes here.</span>
-
-</html>
\ No newline at end of file
diff --git a/3.0.4/junit/context2/InWebInf.html b/3.0.4/junit/context2/InWebInf.html
deleted file mode 100644
index 8563b04..0000000
--- a/3.0.4/junit/context2/InWebInf.html
+++ /dev/null
@@ -1,5 +0,0 @@
-<html jwcid="@lib:Border" title="InWebInf Page">
-
-<span key="banner-message">Page specific message goes here.</span>
-
-</html>
\ No newline at end of file
diff --git a/3.0.4/junit/context2/README b/3.0.4/junit/context2/README
deleted file mode 100644
index cb98ec9..0000000
--- a/3.0.4/junit/context2/README
+++ /dev/null
@@ -1,2 +0,0 @@
-Used in JUnit testing to support partial testing of implicit pages (pages not defined in

-the application specification).
\ No newline at end of file
diff --git a/3.0.4/junit/context2/Relative.html b/3.0.4/junit/context2/Relative.html
deleted file mode 100644
index 2da5205..0000000
--- a/3.0.4/junit/context2/Relative.html
+++ /dev/null
@@ -1,6 +0,0 @@
-<html jwcid="@lib:Border" title="Relative Page">
-
-
-<span jwcid="insertMessage">Page specific message goes here.</span>
-
-</html>
\ No newline at end of file
diff --git a/3.0.4/junit/context2/StaleLink.html b/3.0.4/junit/context2/StaleLink.html
deleted file mode 100644
index e62cecc..0000000
--- a/3.0.4/junit/context2/StaleLink.html
+++ /dev/null
@@ -1,5 +0,0 @@
-<html jwcid="@lib:Border" title="Application StaleLink Page">
-
-This is an application-provided version of the StaleLink page.
-
-</html>
\ No newline at end of file
diff --git a/3.0.4/junit/context2/WEB-INF/CWebInf.html b/3.0.4/junit/context2/WEB-INF/CWebInf.html
deleted file mode 100644
index 45c022d..0000000
--- a/3.0.4/junit/context2/WEB-INF/CWebInf.html
+++ /dev/null
@@ -1 +0,0 @@
-This content provided by component CWebInf.
\ No newline at end of file
diff --git a/3.0.4/junit/context2/WEB-INF/CWebInf.jwc b/3.0.4/junit/context2/WEB-INF/CWebInf.jwc
deleted file mode 100644
index d52f63f..0000000
--- a/3.0.4/junit/context2/WEB-INF/CWebInf.jwc
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<component-specification
-  class="org.apache.tapestry.BaseComponent"
-  allow-informal-parameters="no"/>
\ No newline at end of file
diff --git a/3.0.4/junit/context2/WEB-INF/InWebInf.page b/3.0.4/junit/context2/WEB-INF/InWebInf.page
deleted file mode 100644
index 8ab38d1..0000000
--- a/3.0.4/junit/context2/WEB-INF/InWebInf.page
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<!-- Establishes a location from which the properties files may be located. -->
-	
-<page-specification class="org.apache.tapestry.html.BasePage"/>
-
diff --git a/3.0.4/junit/context2/WEB-INF/InWebInf.properties b/3.0.4/junit/context2/WEB-INF/InWebInf.properties
deleted file mode 100644
index 699fe27..0000000
--- a/3.0.4/junit/context2/WEB-INF/InWebInf.properties
+++ /dev/null
@@ -1,4 +0,0 @@
-# $Id$
-
-banner-message=The specification, and properties files, are located in directly in WEB-INF.
-
diff --git a/3.0.4/junit/context2/WEB-INF/app/CWebInfApp.html b/3.0.4/junit/context2/WEB-INF/app/CWebInfApp.html
deleted file mode 100644
index dd7e8c7..0000000
--- a/3.0.4/junit/context2/WEB-INF/app/CWebInfApp.html
+++ /dev/null
@@ -1 +0,0 @@
-This content provided by component CWebInfApp.
\ No newline at end of file
diff --git a/3.0.4/junit/context2/WEB-INF/app/CWebInfApp.jwc b/3.0.4/junit/context2/WEB-INF/app/CWebInfApp.jwc
deleted file mode 100644
index d52f63f..0000000
--- a/3.0.4/junit/context2/WEB-INF/app/CWebInfApp.jwc
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<component-specification
-  class="org.apache.tapestry.BaseComponent"
-  allow-informal-parameters="no"/>
\ No newline at end of file
diff --git a/3.0.4/junit/context2/WEB-INF/app/InPages.page b/3.0.4/junit/context2/WEB-INF/app/InPages.page
deleted file mode 100644
index aad4323..0000000
--- a/3.0.4/junit/context2/WEB-INF/app/InPages.page
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<!-- Establishes a location from which the properties files may be located. -->
-	
-<page-specification/>
-
diff --git a/3.0.4/junit/context2/WEB-INF/app/InPages.properties b/3.0.4/junit/context2/WEB-INF/app/InPages.properties
deleted file mode 100644
index bbb4e5b..0000000
--- a/3.0.4/junit/context2/WEB-INF/app/InPages.properties
+++ /dev/null
@@ -1,3 +0,0 @@
-# $Id$
-
-banner-message=The specification, and properties files, are located in WEB-INF/pages.
diff --git a/3.0.4/junit/context2/WithApplication.html b/3.0.4/junit/context2/WithApplication.html
deleted file mode 100644
index d33427e..0000000
--- a/3.0.4/junit/context2/WithApplication.html
+++ /dev/null
@@ -1,6 +0,0 @@
-<html jwcid="@lib:Border" title="WithApplication Page">
-
-
-<span jwcid="insertMessage">Page specific message goes here.</span>
-
-</html>
\ No newline at end of file
diff --git a/3.0.4/junit/context20/Home.html b/3.0.4/junit/context20/Home.html
deleted file mode 100644
index e930bbb..0000000
--- a/3.0.4/junit/context20/Home.html
+++ /dev/null
@@ -1,20 +0,0 @@
-<html jwcid="@Shell" title="Home">
-<body jwcid="@Body">
-
-<form jwcid="main@Form" listener="ognl:listeners.formSubmit">
-
-<textarea jwcid="text@TextArea" value="ognl:text" disabled="ognl:textAreaDisabled"/>
-<select jwcid="mode@PropertySelection" value="ognl:mode" model="ognl:modeModel"/>
-	
-</form>
-
-<br/>
-
-<form jwcid="actionForm@Form" direct="ognl:false"/>
-
-<br/>
-
-<a href="#" jwcid="disable@DirectLink" listener="ognl:listeners.disableTextArea"/>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/3.0.4/junit/context20/Three.html b/3.0.4/junit/context20/Three.html
deleted file mode 100644
index 63e0acb..0000000
--- a/3.0.4/junit/context20/Three.html
+++ /dev/null
@@ -1,9 +0,0 @@
-<html jwcid="@Shell" title="Three">
-<body jwcid="@Body">
-
-<form jwcid="@Form">
-<textarea jwcid="@TextArea" value="ognl:visit.foo" class="magic"/>	
-</form>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/3.0.4/junit/context20/Two.html b/3.0.4/junit/context20/Two.html
deleted file mode 100644
index c99c43c..0000000
--- a/3.0.4/junit/context20/Two.html
+++ /dev/null
@@ -1,9 +0,0 @@
-<html jwcid="@Shell" title="Two">
-<body jwcid="@Body">
-
-Text:[
-<span jwcid="@InsertText" value="ognl:text" mode="ognl:mode"/>
-]
-
-</body>
-</html>
\ No newline at end of file
diff --git a/3.0.4/junit/context20/WEB-INF/Home.page b/3.0.4/junit/context20/WEB-INF/Home.page
deleted file mode 100644
index e751a72..0000000
--- a/3.0.4/junit/context20/WEB-INF/Home.page
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<page-specification class="org.apache.tapestry.junit.mock.c20.Home">
-	
-	<property-specification name="text" type="java.lang.String" persistent="yes"/>
-	<property-specification name="mode"
-			type="org.apache.tapestry.html.InsertTextMode"
-			initial-value="@org.apache.tapestry.html.InsertTextMode@BREAK"
-			persistent="yes"/>
-	<property-specification name="textAreaDisabled" type="boolean" persistent="yes"/>
-	
-</page-specification>
\ No newline at end of file
diff --git a/3.0.4/junit/context20/WEB-INF/Two.page b/3.0.4/junit/context20/WEB-INF/Two.page
deleted file mode 100644
index cf6309a..0000000
--- a/3.0.4/junit/context20/WEB-INF/Two.page
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<page-specification class="org.apache.tapestry.junit.mock.c20.Two">
-	
-	<property-specification name="text" type="java.lang.String"/>
-	<property-specification name="mode"
-			type="org.apache.tapestry.html.InsertTextMode"
-			initial-value="@org.apache.tapestry.html.InsertTextMode@BREAK"/>
-	
-</page-specification>
\ No newline at end of file
diff --git a/3.0.4/junit/context21/README b/3.0.4/junit/context21/README
deleted file mode 100644
index 7357531..0000000
--- a/3.0.4/junit/context21/README
+++ /dev/null
@@ -1 +0,0 @@
-This is a catch-all context where we'll test more of the error conditions.

diff --git a/3.0.4/junit/context21/SetLocaleNull.html b/3.0.4/junit/context21/SetLocaleNull.html
deleted file mode 100644
index eff490b..0000000
--- a/3.0.4/junit/context21/SetLocaleNull.html
+++ /dev/null
@@ -1 +0,0 @@
-This page should never be rendered.
\ No newline at end of file
diff --git a/3.0.4/junit/context21/WEB-INF/SetLocaleNull.page b/3.0.4/junit/context21/WEB-INF/SetLocaleNull.page
deleted file mode 100644
index 2a9e812..0000000
--- a/3.0.4/junit/context21/WEB-INF/SetLocaleNull.page
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<page-specification class="org.apache.tapestry.junit.mock.c21.SetLocaleNull"/>
diff --git a/3.0.4/junit/context21/WEB-INF/app.application b/3.0.4/junit/context21/WEB-INF/app.application
deleted file mode 100644
index bf94600..0000000
--- a/3.0.4/junit/context21/WEB-INF/app.application
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-    Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE application PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<application>
-	<extension name="org.apache.tapestry.property-source"
-			class="org.apache.tapestry.junit.mock.c21.NullPropertySource"/>
-	
-</application>
diff --git a/3.0.4/junit/context21/WEB-INF/missing-engine.application b/3.0.4/junit/context21/WEB-INF/missing-engine.application
deleted file mode 100644
index 298e27c..0000000
--- a/3.0.4/junit/context21/WEB-INF/missing-engine.application
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-    Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE application PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<application engine-class="MissingEngineClass">
-	
-</application>
\ No newline at end of file
diff --git a/3.0.4/junit/context21/WEB-INF/missing-service.application b/3.0.4/junit/context21/WEB-INF/missing-service.application
deleted file mode 100644
index 4d91240..0000000
--- a/3.0.4/junit/context21/WEB-INF/missing-service.application
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-    Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE application PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<application>
-	<service name="missing" class="MissingServiceClass"/>
-	
-</application>
\ No newline at end of file
diff --git a/3.0.4/junit/context21/WEB-INF/service-instantiate-error.application b/3.0.4/junit/context21/WEB-INF/service-instantiate-error.application
deleted file mode 100644
index 0e8b80e..0000000
--- a/3.0.4/junit/context21/WEB-INF/service-instantiate-error.application
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-    Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE application PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<application>
-	<service name="private" class="org.apache.tapestry.junit.mock.c21.PrivateService"/>
-	
-</application>
\ No newline at end of file
diff --git a/3.0.4/junit/context21/WEB-INF/service-name-mismatch.application b/3.0.4/junit/context21/WEB-INF/service-name-mismatch.application
deleted file mode 100644
index ee6bc22..0000000
--- a/3.0.4/junit/context21/WEB-INF/service-name-mismatch.application
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-    Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE application PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<application>
-	
-	<service name="expected-name" class="org.apache.tapestry.junit.mock.c21.NameMismatchService"/>
-	
-</application>
\ No newline at end of file
diff --git a/3.0.4/junit/context22/Home.html b/3.0.4/junit/context22/Home.html
deleted file mode 100644
index 87debbb..0000000
--- a/3.0.4/junit/context22/Home.html
+++ /dev/null
@@ -1,7 +0,0 @@
-<html jwcid="@Shell" title="Home">
-<body>
-	
-<a href="#" jwcid="start">Start</a>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/3.0.4/junit/context22/README b/3.0.4/junit/context22/README
deleted file mode 100644
index b7def3c..0000000
--- a/3.0.4/junit/context22/README
+++ /dev/null
@@ -1 +0,0 @@
-See TestSpecDelegate.xml

diff --git a/3.0.4/junit/context22/Three.html b/3.0.4/junit/context22/Three.html
deleted file mode 100644
index 3b86374..0000000
--- a/3.0.4/junit/context22/Three.html
+++ /dev/null
@@ -1,7 +0,0 @@
-<html jwcid="@Shell" title="Three">
-<body>
-	
-<span jwcid="@NoTemplate"/>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/3.0.4/junit/context22/Two.html b/3.0.4/junit/context22/Two.html
deleted file mode 100644
index d073e1e..0000000
--- a/3.0.4/junit/context22/Two.html
+++ /dev/null
@@ -1,9 +0,0 @@
-<html jwcid="@Shell" title="Two">
-<body>
-	
-Test for unknown component.
-
-<span jwcid="@Unknown"/>
-	
-</body>
-</html>
\ No newline at end of file
diff --git a/3.0.4/junit/context22/WEB-INF/Home.page b/3.0.4/junit/context22/WEB-INF/Home.page
deleted file mode 100644
index 6ef7724..0000000
--- a/3.0.4/junit/context22/WEB-INF/Home.page
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-    Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<page-specification>
-	
-	<property-specification name="flag" type="boolean" persistent="yes"/>
-	
-	<component id="start" type="DirectLink">
-		<listener-binding name="listener">
-page.flag = 1
-cycle.setPage("Two")	
-		</listener-binding>	
-	</component>
-</page-specification>
diff --git a/3.0.4/junit/context22/WEB-INF/NoTemplate.jwc b/3.0.4/junit/context22/WEB-INF/NoTemplate.jwc
deleted file mode 100644
index cd76886..0000000
--- a/3.0.4/junit/context22/WEB-INF/NoTemplate.jwc
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<component-specification/>
diff --git a/3.0.4/junit/context22/WEB-INF/app.application b/3.0.4/junit/context22/WEB-INF/app.application
deleted file mode 100644
index 2a5f88d..0000000
--- a/3.0.4/junit/context22/WEB-INF/app.application
+++ /dev/null
@@ -1,33 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-    Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE application PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<application>
-	<extension name="org.apache.tapestry.specification-resolver-delegate"
-			  class="org.apache.tapestry.junit.mock.c22.DummySpecDelegate"/>
-	<extension name="org.apache.tapestry.template-source-delegate"
-			  class="org.apache.tapestry.junit.mock.c22.DummyTemplateDelegate"/>
-	<extension name="org.apache.tapestry.multipart-decoder"
-			  class="org.apache.tapestry.multipart.DefaultMultipartDecoder">
-	  <configure property-name="maxSize" type="int" value="200000"/>
-	  <configure property-name="thresholdSize" type="int" value="5000"/>
-	  <configure property-name="repositoryPath" value=".private"/>		
-	</extension>
-</application>
diff --git a/3.0.4/junit/context22/page-home.request b/3.0.4/junit/context22/page-home.request
deleted file mode 100644
index b1e6c0f..0000000
--- a/3.0.4/junit/context22/page-home.request
+++ /dev/null
@@ -1,5 +0,0 @@
------------------------------eldorado

-Content-Disposition: form-data; name="service"

-

-page/Home

------------------------------eldorado--

diff --git a/3.0.4/junit/context23/Home.html b/3.0.4/junit/context23/Home.html
deleted file mode 100644
index 8284c83..0000000
--- a/3.0.4/junit/context23/Home.html
+++ /dev/null
@@ -1,7 +0,0 @@
-<html jwcid="@Shell" title="Home">
-<body>
-	
-<span jwcid="flicker"/>
-	
-</body>
-</html>
\ No newline at end of file
diff --git a/3.0.4/junit/context23/README b/3.0.4/junit/context23/README
deleted file mode 100644
index e276ece..0000000
--- a/3.0.4/junit/context23/README
+++ /dev/null
@@ -1,3 +0,0 @@
-Tests for direction 'auto' parameters.

-

-See TestAutoParameters.xml

diff --git a/3.0.4/junit/context23/Two.html b/3.0.4/junit/context23/Two.html
deleted file mode 100644
index 2e69762..0000000
--- a/3.0.4/junit/context23/Two.html
+++ /dev/null
@@ -1,7 +0,0 @@
-<html jwcid="@Shell" title="Two">
-<body>
-
-<span jwcid="@Bad"/>
-	
-</body>
-</html>
\ No newline at end of file
diff --git a/3.0.4/junit/context23/WEB-INF/Bad.jwc b/3.0.4/junit/context23/WEB-INF/Bad.jwc
deleted file mode 100644
index afd30ae..0000000
--- a/3.0.4/junit/context23/WEB-INF/Bad.jwc
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<component-specification>
-	
-	<parameter name="flag" type="boolean" direction="auto"/>
-
-</component-specification>
diff --git a/3.0.4/junit/context23/WEB-INF/Flicker.html b/3.0.4/junit/context23/WEB-INF/Flicker.html
deleted file mode 100644
index d61fc7c..0000000
--- a/3.0.4/junit/context23/WEB-INF/Flicker.html
+++ /dev/null
@@ -1,22 +0,0 @@
-
-boolValue: [<span jwcid="@Insert" value="ognl:boolValue"/>]
-
-<br/>
-
-intValue: [<span jwcid="@Insert" value="ognl:intValue"/>]
-
-<br/>
-
-doubleValue: [<span jwcid="@Insert" value="ognl:doubleValue"/>]
-
-<br/>
-
-stringValue: [<span jwcid="@Insert" value="ognl:stringValue"/>]
-
-<br/>
-
-objectValue: [<span jwcid="@Insert" value="ognl:objectValue"/>]
-
-<br/>
-
-<a href="#" jwcid="update">update values</a>
\ No newline at end of file
diff --git a/3.0.4/junit/context23/WEB-INF/Flicker.jwc b/3.0.4/junit/context23/WEB-INF/Flicker.jwc
deleted file mode 100644
index 49a0c02..0000000
--- a/3.0.4/junit/context23/WEB-INF/Flicker.jwc
+++ /dev/null
@@ -1,48 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<component-specification>
-	
-	<parameter name="boolValue" required="yes" type="boolean" direction="auto"/>
-	<parameter name="intValue" required="yes" type="int" direction="auto"/>
-	<parameter name="doubleValue" required="yes" type="double" direction="auto"/>
-	<parameter name="stringValue" required="yes" type="java.lang.String" direction="auto"/>
-	<parameter name="objectValue" required="yes" type="java.util.Locale" direction="auto"/>
-	
-	<!-- Been having trouble with the Jython syntax. -->
-	
-	<property-specification name="updateObjectValue"
-		type="java.util.Locale">
-		@java.util.Locale@FRENCH	
-	</property-specification>
-	
-	<component id="update" type="DirectLink">
-	<listener-binding name="listener">
-
-component.boolValue = 0
-component.intValue = 100
-component.doubleValue = 22.7
-component.stringValue = "Poi Dog Pondering"
-component.objectValue = component.updateObjectValue
-
-	</listener-binding>	
-	</component>
-</component-specification>
diff --git a/3.0.4/junit/context23/WEB-INF/Home.page b/3.0.4/junit/context23/WEB-INF/Home.page
deleted file mode 100644
index fe2e301..0000000
--- a/3.0.4/junit/context23/WEB-INF/Home.page
+++ /dev/null
@@ -1,44 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-    Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<page-specification>
-	
-	<property-specification name="booleanProperty" type="boolean" persistent="yes" initial-value="true"/>
-	<property-specification name="intProperty" type="int" persistent="yes" initial-value="-3"/>
-	<property-specification name="doubleProperty" type="double" persistent="yes" initial-value="10.5"/>
-	<property-specification name="stringProperty" type="java.lang.String"
-			persistent="yes">
-		"Pink Floyd"	
-	</property-specification>
-	<property-specification name="objectProperty" type="java.util.Locale" persistent="yes">
-		@java.util.Locale@ENGLISH	
-	</property-specification>
-	
-	
-	<component id="flicker" type="Flicker">
-	  <binding name="boolValue" expression="booleanProperty"/>
-	  <binding name="intValue" expression="intProperty"/>
-	  <binding name="doubleValue" expression="doubleProperty"/>
-	  <binding name="stringValue" expression="stringProperty"/>
-	  <binding name="objectValue" expression="objectProperty"/>	
-	</component>
-	
-</page-specification>
diff --git a/3.0.4/junit/context24/Home.html b/3.0.4/junit/context24/Home.html
deleted file mode 100644
index f27f2dd..0000000
--- a/3.0.4/junit/context24/Home.html
+++ /dev/null
@@ -1,11 +0,0 @@
-<html jwcid="@Shell" title="Home">
-<body>
-
-<!-- border=7 			must NOT be passed down to Image, since it is a formal parameter in Image -->
-<!-- src=testSrc 		must NOT be passed down to Image, since it is a reserved parameter in Image -->
-<!-- class=testClass 	must NOT be passed down to Image, since it is a reserved parameter in SuperImage -->
-<!-- height=150			must be passed down to Image as an inherited informal parameter -->
-<span jwcid="superImage" border="7" src="testSrc" class="testClass" height="150"/>
-	
-</body>
-</html>
\ No newline at end of file
diff --git a/3.0.4/junit/context24/README b/3.0.4/junit/context24/README
deleted file mode 100644
index d852052..0000000
--- a/3.0.4/junit/context24/README
+++ /dev/null
@@ -1,3 +0,0 @@
-Tests the inherit-informal-parameters directive.

-

-See TestInheritInformalParameters.xml

diff --git a/3.0.4/junit/context24/Three.html b/3.0.4/junit/context24/Three.html
deleted file mode 100644
index d4c1ca6..0000000
--- a/3.0.4/junit/context24/Three.html
+++ /dev/null
@@ -1,7 +0,0 @@
-<html jwcid="@Shell" title="Two">
-<body>
-
-<span jwcid="@BadImage"/>
-	
-</body>
-</html>
\ No newline at end of file
diff --git a/3.0.4/junit/context24/Two.html b/3.0.4/junit/context24/Two.html
deleted file mode 100644
index e38d1e2..0000000
--- a/3.0.4/junit/context24/Two.html
+++ /dev/null
@@ -1,7 +0,0 @@
-<html jwcid="@Shell" title="Two">
-<body>
-
-<span jwcid="@BadBlock" color="none" />
-	
-</body>
-</html>
\ No newline at end of file
diff --git a/3.0.4/junit/context24/WEB-INF/BadBlock.html b/3.0.4/junit/context24/WEB-INF/BadBlock.html
deleted file mode 100644
index 1c88e6f..0000000
--- a/3.0.4/junit/context24/WEB-INF/BadBlock.html
+++ /dev/null
@@ -1 +0,0 @@
-<span jwcid="block"/>
diff --git a/3.0.4/junit/context24/WEB-INF/BadBlock.jwc b/3.0.4/junit/context24/WEB-INF/BadBlock.jwc
deleted file mode 100644
index 4e2aae2..0000000
--- a/3.0.4/junit/context24/WEB-INF/BadBlock.jwc
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<component-specification>
-	
-	<!-- this has to boom: Insert does not allow informal parameters -->
-	<component id="block" type="Block" inherit-informal-parameters="yes"/>
-	
-</component-specification>
diff --git a/3.0.4/junit/context24/WEB-INF/BadImage.html b/3.0.4/junit/context24/WEB-INF/BadImage.html
deleted file mode 100644
index 92378c0..0000000
--- a/3.0.4/junit/context24/WEB-INF/BadImage.html
+++ /dev/null
@@ -1,2 +0,0 @@
-<!-- length=350		 	must be passed down to Image as an informal parameter -->
-<span jwcid="image" length="350"/>
diff --git a/3.0.4/junit/context24/WEB-INF/BadImage.jwc b/3.0.4/junit/context24/WEB-INF/BadImage.jwc
deleted file mode 100644
index a6559eb..0000000
--- a/3.0.4/junit/context24/WEB-INF/BadImage.jwc
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<component-specification allow-informal-parameters="no">
-	
-	<parameter name="image" required="yes" type="org.apache.tapestry.IAsset"/>
-	<reserved-parameter name="class"/>
-	
-	<component id="image" type="Image" inherit-informal-parameters="yes">
-		<inherited-binding name="image" parameter-name="image"/>
-	</component>
-	
-</component-specification>
diff --git a/3.0.4/junit/context24/WEB-INF/Home.page b/3.0.4/junit/context24/WEB-INF/Home.page
deleted file mode 100644
index 9d6e204..0000000
--- a/3.0.4/junit/context24/WEB-INF/Home.page
+++ /dev/null
@@ -1,33 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-    Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<page-specification>
-	
-	<component id="superImage" type="SuperImage">
-	  <binding name="image" expression="assets.imageAsset"/>
-
-	  <!-- this has to be passed down to Image as an informal parameter -->
-	  <binding name="width" expression="250"/>
-	</component>
-	
-	<external-asset name="imageAsset" URL="http://the.wall/" />
-	
-</page-specification>
diff --git a/3.0.4/junit/context24/WEB-INF/SuperImage.html b/3.0.4/junit/context24/WEB-INF/SuperImage.html
deleted file mode 100644
index 92378c0..0000000
--- a/3.0.4/junit/context24/WEB-INF/SuperImage.html
+++ /dev/null
@@ -1,2 +0,0 @@
-<!-- length=350		 	must be passed down to Image as an informal parameter -->
-<span jwcid="image" length="350"/>
diff --git a/3.0.4/junit/context24/WEB-INF/SuperImage.jwc b/3.0.4/junit/context24/WEB-INF/SuperImage.jwc
deleted file mode 100644
index 3be2bad..0000000
--- a/3.0.4/junit/context24/WEB-INF/SuperImage.jwc
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<component-specification>
-	
-	<parameter name="image" required="yes" type="org.apache.tapestry.IAsset"/>
-	<reserved-parameter name="class"/>
-	
-	<component id="image" type="Image" inherit-informal-parameters="yes">
-		<inherited-binding name="image" parameter-name="image"/>
-	</component>
-	
-</component-specification>
diff --git a/3.0.4/junit/context25/Five.html b/3.0.4/junit/context25/Five.html
deleted file mode 100644
index a6d3eca..0000000
--- a/3.0.4/junit/context25/Five.html
+++ /dev/null
@@ -1,9 +0,0 @@
-<html jwcid="@Shell" title="Five">
-<body>
-
-This is page 'Five' with a validating component.
-
-<span jwcid="@RedirectingComponent" page="Six"/>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/3.0.4/junit/context25/Four.html b/3.0.4/junit/context25/Four.html
deleted file mode 100644
index 1e6983a..0000000
--- a/3.0.4/junit/context25/Four.html
+++ /dev/null
@@ -1,9 +0,0 @@
-<html jwcid="@Shell" title="Four">
-<body>
-
-This is page 'Four'.
-
-<a jwcid="@DirectLink" listener="ognl:listeners.directListener">A link to page Five</a>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/3.0.4/junit/context25/Home.html b/3.0.4/junit/context25/Home.html
deleted file mode 100644
index aad621e..0000000
--- a/3.0.4/junit/context25/Home.html
+++ /dev/null
@@ -1,11 +0,0 @@
-<html jwcid="@Shell" title="Home">
-<body>
-
-This is page 'Home'
-
-<p>
-
-<a jwcid="@DirectLink" listener="ognl:listeners.directListener">A link to page Two</a>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/3.0.4/junit/context25/README b/3.0.4/junit/context25/README
deleted file mode 100644
index c4a5e54..0000000
--- a/3.0.4/junit/context25/README
+++ /dev/null
@@ -1,3 +0,0 @@
-Tests the cycle.activate(page) method and the page validation listeners.

-

-See TestCycleActivatePage.xml

diff --git a/3.0.4/junit/context25/Six.html b/3.0.4/junit/context25/Six.html
deleted file mode 100644
index a88dc68..0000000
--- a/3.0.4/junit/context25/Six.html
+++ /dev/null
@@ -1,9 +0,0 @@
-<html jwcid="@Shell" title="Six">
-<body>
-
-This is page 'Six' with a validating component.
-
-<span jwcid="@RedirectingComponent" page="Five"/>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/3.0.4/junit/context25/Three.html b/3.0.4/junit/context25/Three.html
deleted file mode 100644
index a4a924b..0000000
--- a/3.0.4/junit/context25/Three.html
+++ /dev/null
@@ -1,7 +0,0 @@
-<html jwcid="@Shell" title="Three">
-<body>
-
-This is page 'Three'
-
-</body>
-</html>
\ No newline at end of file
diff --git a/3.0.4/junit/context25/Two.html b/3.0.4/junit/context25/Two.html
deleted file mode 100644
index 324d905..0000000
--- a/3.0.4/junit/context25/Two.html
+++ /dev/null
@@ -1,9 +0,0 @@
-<html jwcid="@Shell" title="Two">
-<body>
-
-This is page 'Two' with a validating component.
-
-<span jwcid="@RedirectingComponent" page="Three"/>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/3.0.4/junit/context25/WEB-INF/Four.page b/3.0.4/junit/context25/WEB-INF/Four.page
deleted file mode 100644
index ada6230..0000000
--- a/3.0.4/junit/context25/WEB-INF/Four.page
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<page-specification class="org.apache.tapestry.junit.mock.c25.Four"/>
diff --git a/3.0.4/junit/context25/WEB-INF/Home.page b/3.0.4/junit/context25/WEB-INF/Home.page
deleted file mode 100644
index 001d286..0000000
--- a/3.0.4/junit/context25/WEB-INF/Home.page
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<page-specification class="org.apache.tapestry.junit.mock.c25.Home"/>
diff --git a/3.0.4/junit/context25/WEB-INF/RedirectingComponent.html b/3.0.4/junit/context25/WEB-INF/RedirectingComponent.html
deleted file mode 100644
index ddeb646..0000000
--- a/3.0.4/junit/context25/WEB-INF/RedirectingComponent.html
+++ /dev/null
@@ -1 +0,0 @@
-<!-- RedirectingComponent has empty template -->
\ No newline at end of file
diff --git a/3.0.4/junit/context25/WEB-INF/RedirectingComponent.jwc b/3.0.4/junit/context25/WEB-INF/RedirectingComponent.jwc
deleted file mode 100644
index 87fcd5b..0000000
--- a/3.0.4/junit/context25/WEB-INF/RedirectingComponent.jwc
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<component-specification class="org.apache.tapestry.junit.mock.c25.RedirectingComponent">
-
-	<parameter name="page" required="yes" type="java.lang.String"/>
-
-</component-specification>
\ No newline at end of file
diff --git a/3.0.4/junit/context26/Global.html b/3.0.4/junit/context26/Global.html
deleted file mode 100644
index 0d469b1..0000000
--- a/3.0.4/junit/context26/Global.html
+++ /dev/null
@@ -1,7 +0,0 @@
-<html jwcid="@Shell" title="Global">
-<body>
-
-    <span jwcid="@Insert" value="ognl:global.name">John Doe</span>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/3.0.4/junit/context26/Visit.html b/3.0.4/junit/context26/Visit.html
deleted file mode 100644
index b208eb8..0000000
--- a/3.0.4/junit/context26/Visit.html
+++ /dev/null
@@ -1,8 +0,0 @@
-<html jwcid="@Shell" title="Visit">
-<body>
-
-<span jwcid="@Conditional" condition="ognl:engine.visit == null">
-    <span jwcid="@Insert" value="ognl:visit.name">John Doe</span>
-</span>
-</body>
-</html>
\ No newline at end of file
diff --git a/3.0.4/junit/context27/Home.html b/3.0.4/junit/context27/Home.html
deleted file mode 100644
index b831067..0000000
--- a/3.0.4/junit/context27/Home.html
+++ /dev/null
@@ -1,23 +0,0 @@
-<html jwcid="@Shell" title="Home">
-<body>
-
-	<span jwcid="@Good"/>
-
-	<span jwcid="@Good" 
-		prefix="Bound"
-		intValue="10" 
-		doubleValue="2.72" 
-		objectValue="ognl:@java.util.Locale@TAIWAN"
-		booleanValue1="ognl:true"
-	/>
-
-	<div jwcid="@Any" element="span">span tag</div>
-
-	<div jwcid="@Any">div tag</div>
-
-	<div jwcid="@Any" templateTag="b">b tag</div>
-
-	<div jwcid="any">i tag</div>
-
-</body>
-</html>
diff --git a/3.0.4/junit/context27/README b/3.0.4/junit/context27/README
deleted file mode 100644
index c027372..0000000
--- a/3.0.4/junit/context27/README
+++ /dev/null
@@ -1,3 +0,0 @@
-Tests the parameter default values

-

-See TestDefaultParameterValues.xml

diff --git a/3.0.4/junit/context27/Three.html b/3.0.4/junit/context27/Three.html
deleted file mode 100644
index bf0b786..0000000
--- a/3.0.4/junit/context27/Three.html
+++ /dev/null
@@ -1,7 +0,0 @@
-<html jwcid="@Shell" title="Three">
-<body>
-
-	<span jwcid="@Bad2"/>
-
-</body>
-</html>
diff --git a/3.0.4/junit/context27/Two.html b/3.0.4/junit/context27/Two.html
deleted file mode 100644
index 533bb49..0000000
--- a/3.0.4/junit/context27/Two.html
+++ /dev/null
@@ -1,7 +0,0 @@
-<html jwcid="@Shell" title="Two">
-<body>
-
-	<span jwcid="@Bad"/>
-
-</body>
-</html>
diff --git a/3.0.4/junit/context27/WEB-INF/Bad.html b/3.0.4/junit/context27/WEB-INF/Bad.html
deleted file mode 100644
index e69de29..0000000
--- a/3.0.4/junit/context27/WEB-INF/Bad.html
+++ /dev/null
diff --git a/3.0.4/junit/context27/WEB-INF/Bad.jwc b/3.0.4/junit/context27/WEB-INF/Bad.jwc
deleted file mode 100644
index f35a82a..0000000
--- a/3.0.4/junit/context27/WEB-INF/Bad.jwc
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<component-specification>
-	
-	<parameter name="intValue" type="int" direction="auto"/>
-
-</component-specification>
diff --git a/3.0.4/junit/context27/WEB-INF/Bad2.html b/3.0.4/junit/context27/WEB-INF/Bad2.html
deleted file mode 100644
index e69de29..0000000
--- a/3.0.4/junit/context27/WEB-INF/Bad2.html
+++ /dev/null
diff --git a/3.0.4/junit/context27/WEB-INF/Bad2.jwc b/3.0.4/junit/context27/WEB-INF/Bad2.jwc
deleted file mode 100644
index 2a8e271..0000000
--- a/3.0.4/junit/context27/WEB-INF/Bad2.jwc
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<component-specification>
-	
-	<parameter name="intValue" type="int" required="yes" default-value="42"/>
-
-</component-specification>
diff --git a/3.0.4/junit/context27/WEB-INF/Good.html b/3.0.4/junit/context27/WEB-INF/Good.html
deleted file mode 100644
index 8c39976..0000000
--- a/3.0.4/junit/context27/WEB-INF/Good.html
+++ /dev/null
@@ -1,9 +0,0 @@
-<table>
-	<tr>
-		<td><span jwcid="@Insert" value="ognl:prefix"/> intValue    = <span jwcid="@Insert" value="ognl:intValue"/></td>
-		<td><span jwcid="@Insert" value="ognl:prefix"/> doubleValue = <span jwcid="@Insert" value="ognl:doubleValue"/></td>
-		<td><span jwcid="@Insert" value="ognl:prefix"/> objectValue = <span jwcid="@Insert" value="ognl:objectValue"/></td>
-		<td><span jwcid="@Insert" value="ognl:prefix"/> booleanValue = <span jwcid="@Insert" value="ognl:booleanValue2"/></td>
-	</tr>
-</table>		
-		
\ No newline at end of file
diff --git a/3.0.4/junit/context27/WEB-INF/Good.jwc b/3.0.4/junit/context27/WEB-INF/Good.jwc
deleted file mode 100644
index 17410be..0000000
--- a/3.0.4/junit/context27/WEB-INF/Good.jwc
+++ /dev/null
@@ -1,33 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<component-specification class="org.apache.tapestry.junit.mock.c27.Good">
-	
-	<parameter name="prefix" type="java.lang.String" direction="auto" default-value='defaultPrefix'/>
-
-	<parameter name="intValue" type="int" direction="auto" default-value="5"/>
-	<parameter name="doubleValue" type="double" direction="in" default-value="3.14"/>
-	<parameter name="objectValue" type="java.util.Locale" direction="in" default-value="defaultLocale"/>
-
-	<parameter name="booleanValue1" type="boolean" direction="auto" default-value="false"/>
-	<parameter name="booleanValue2" type="boolean" direction="auto" default-value="isBooleanValue1()"/>
-
-</component-specification>
diff --git a/3.0.4/junit/context27/WEB-INF/Home.page b/3.0.4/junit/context27/WEB-INF/Home.page
deleted file mode 100644
index 24b3300..0000000
--- a/3.0.4/junit/context27/WEB-INF/Home.page
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-    Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<page-specification>
-	
-	<component id="any" type="Any">
-		<binding name="templateTag" expression='"i"'/>
-	</component>
-
-</page-specification>
diff --git a/3.0.4/junit/context28/Home.html b/3.0.4/junit/context28/Home.html
deleted file mode 100644
index f212d73..0000000
--- a/3.0.4/junit/context28/Home.html
+++ /dev/null
@@ -1,7 +0,0 @@
-<html jwcid="@Shell" title="Home">
-<body>
-
-<a jwcid="@DirectLink" listener="ognl:listeners.changeLocale">A link for locale change</a>
-
-</body>
-</html>
diff --git a/3.0.4/junit/context28/README b/3.0.4/junit/context28/README
deleted file mode 100644
index 4aa0d6f..0000000
--- a/3.0.4/junit/context28/README
+++ /dev/null
@@ -1,3 +0,0 @@
-Tests the features for configuring and working with various charsets.

-

-See TestCharsets.xml

diff --git a/3.0.4/junit/context28/Two.html b/3.0.4/junit/context28/Two.html
deleted file mode 100644
index 81db90d..0000000
--- a/3.0.4/junit/context28/Two.html
+++ /dev/null
@@ -1,7 +0,0 @@
-<html jwcid="@Shell" title="Two">
-<body>
-
-<span jwcid="@Charset"/>
-
-</body>
-</html>
diff --git a/3.0.4/junit/context28/WEB-INF/Charset.html b/3.0.4/junit/context28/WEB-INF/Charset.html
deleted file mode 100644
index 9e4912c..0000000
--- a/3.0.4/junit/context28/WEB-INF/Charset.html
+++ /dev/null
@@ -1 +0,0 @@
-Default
\ No newline at end of file
diff --git a/3.0.4/junit/context28/WEB-INF/Charset.jwc b/3.0.4/junit/context28/WEB-INF/Charset.jwc
deleted file mode 100644
index 9cd4952..0000000
--- a/3.0.4/junit/context28/WEB-INF/Charset.jwc
+++ /dev/null
@@ -1,34 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<component-specification>
-
-	<property name="org.apache.tapestry.template-encoding" value="ISO-8859-1"/>
-
-	<property name="org.apache.tapestry.template-encoding_bg" value="ISO-8859-5"/>
-	<property name="org.apache.tapestry.template-encoding_bg_BG" value="UTF-8"/>
-
-	<property name="org.apache.tapestry.template-encoding_fr" value="UTF-8"/>
-	<property name="org.apache.tapestry.template-encoding_fr_FR" value="ISO-8859-1"/>
-
-	<property name="org.apache.tapestry.template-encoding_es" value="UTF-16"/>
-
-</component-specification>
diff --git a/3.0.4/junit/context28/WEB-INF/Charset_bg.html b/3.0.4/junit/context28/WEB-INF/Charset_bg.html
deleted file mode 100644
index 369f9e1..0000000
--- a/3.0.4/junit/context28/WEB-INF/Charset_bg.html
+++ /dev/null
@@ -1 +0,0 @@
-<span jwcid="@Insert" value="Áúëãàðñêè"/>
\ No newline at end of file
diff --git a/3.0.4/junit/context28/WEB-INF/Charset_es.html b/3.0.4/junit/context28/WEB-INF/Charset_es.html
deleted file mode 100644
index d0452c2..0000000
--- a/3.0.4/junit/context28/WEB-INF/Charset_es.html
+++ /dev/null
Binary files differ
diff --git a/3.0.4/junit/context28/WEB-INF/Charset_fr.html b/3.0.4/junit/context28/WEB-INF/Charset_fr.html
deleted file mode 100644
index 6bf864e..0000000
--- a/3.0.4/junit/context28/WEB-INF/Charset_fr.html
+++ /dev/null
@@ -1,3 +0,0 @@
-<span jwcid="@Insert" value="Français"/>
-
-<span jwcid="@ExternalLink" page="Two" parameters="Français">A test link</span>
diff --git a/3.0.4/junit/context28/WEB-INF/Charset_fr_FR.html b/3.0.4/junit/context28/WEB-INF/Charset_fr_FR.html
deleted file mode 100644
index 0dcc4b2..0000000
--- a/3.0.4/junit/context28/WEB-INF/Charset_fr_FR.html
+++ /dev/null
@@ -1,3 +0,0 @@
-<span jwcid="@Insert" value="Français"/>
-
-<span jwcid="@ExternalLink" page="Two" parameters="Français">A test link</span>
diff --git a/3.0.4/junit/context28/WEB-INF/Home.page b/3.0.4/junit/context28/WEB-INF/Home.page
deleted file mode 100644
index 246fce4..0000000
--- a/3.0.4/junit/context28/WEB-INF/Home.page
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<page-specification class="org.apache.tapestry.junit.mock.c28.Home"/>
diff --git a/3.0.4/junit/context28/WEB-INF/Two.page b/3.0.4/junit/context28/WEB-INF/Two.page
deleted file mode 100644
index 4008e60..0000000
--- a/3.0.4/junit/context28/WEB-INF/Two.page
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-    Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<page-specification>
-
-	<property name="org.apache.tapestry.output-encoding" value="UTF-8"/>
-
-</page-specification>
diff --git a/3.0.4/junit/context28/WEB-INF/latin1.application b/3.0.4/junit/context28/WEB-INF/latin1.application
deleted file mode 100644
index 4d8dd91..0000000
--- a/3.0.4/junit/context28/WEB-INF/latin1.application
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-    Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE application PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<application>
-
-	<property name="org.apache.tapestry.output-encoding" value="ISO-8859-1"/>
-	
-</application>
diff --git a/3.0.4/junit/context29/Home.html b/3.0.4/junit/context29/Home.html
deleted file mode 100644
index 5e72f75..0000000
--- a/3.0.4/junit/context29/Home.html
+++ /dev/null
@@ -1 +0,0 @@
-home
diff --git a/3.0.4/junit/context29/README b/3.0.4/junit/context29/README
deleted file mode 100644
index 6960822..0000000
--- a/3.0.4/junit/context29/README
+++ /dev/null
@@ -1,3 +0,0 @@
-Tests for ValidField/ValidationDelegate and their subclasses

-

-See TestValidField.xml
\ No newline at end of file
diff --git a/3.0.4/junit/context29/Three.html b/3.0.4/junit/context29/Three.html
deleted file mode 100644
index 73c8e7a..0000000
--- a/3.0.4/junit/context29/Three.html
+++ /dev/null
@@ -1,29 +0,0 @@
-<form jwcid="intForm@Form" delegate="ognl:beans.delegate">
-intValue=<span jwcid="@Insert" value="ognl:intValue"/>|
-<input jwcid="intField@Contrib:NumericField" displayName="intValue" type="int" value="ognl:intValue"/>
-</form>
-
-<form jwcid="floatForm@Form" delegate="ognl:beans.delegate">
-floatValue=<span jwcid="@Insert" value="ognl:floatValue"/>|
-<input jwcid="floatField@Contrib:NumericField" displayName="floatValue" type="float" value="ognl:floatValue"/>
-</form>
-
-<form jwcid="bigIntegerForm@Form" delegate="ognl:beans.delegate">
-bigIntegerValue=<span jwcid="@Insert" value="ognl:bigIntegerValue"/>|
-<input jwcid="bigIntegerField@Contrib:NumericField" displayName="bigIntegerValue" type="java.math.BigInteger" value="ognl:bigIntegerValue"/>
-</form>
-
-<form jwcid="bigDecimalForm@Form" delegate="ognl:beans.delegate">
-bigDecimalValue=<span jwcid="@Insert" value="ognl:bigDecimalValue"/>|
-<input jwcid="bigDecimalField@Contrib:NumericField" displayName="bigDecimalValue" type="java.math.BigDecimal" value="ognl:bigDecimalValue"/>
-</form>
-
-<form jwcid="stringForm@Form" delegate="ognl:beans.delegate">
-stringValue=<span jwcid="@Insert" value="ognl:stringValue"/>|
-<input jwcid="stringField@Contrib:ValidatingTextField" displayName="stringValue" text="ognl:stringValue"/>
-</form>
-
-<form jwcid="dateForm@Form" delegate="ognl:beans.delegate">
-dateValue=<span jwcid="@Insert" value="ognl:dateValue" format='ognl:new java.text.SimpleDateFormat("yyyy-MM-dd")'/>|
-<input jwcid="dateField@Contrib:DateField" displayName="dateValue" date="ognl:dateValue"/>
-</form>
\ No newline at end of file
diff --git a/3.0.4/junit/context29/Two.html b/3.0.4/junit/context29/Two.html
deleted file mode 100644
index f860598..0000000
--- a/3.0.4/junit/context29/Two.html
+++ /dev/null
@@ -1,7 +0,0 @@
-two
-<form jwcid="@Form" delegate="ognl:beans.delegate" listener="ognl:listeners.submit">
-<input type="text" jwcid="field"/>
-<span jwcid="@Conditional" condition="ognl:flag">
-<span jwcid="@FieldLabel" field="ognl:components.field2"/>: <input type="text" jwcid="field2"/>
-</span>
-</form>
\ No newline at end of file
diff --git a/3.0.4/junit/context29/WEB-INF/Three.page b/3.0.4/junit/context29/WEB-INF/Three.page
deleted file mode 100644
index 35d23ff..0000000
--- a/3.0.4/junit/context29/WEB-INF/Three.page
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>

-<!--

-    Copyright 2004 The Apache Software Foundation

-  

-   Licensed under the Apache License, Version 2.0 (the "License");

-   you may not use this file except in compliance with the License.

-   You may obtain a copy of the License at

-  

-       http://www.apache.org/licenses/LICENSE-2.0

-  

-   Unless required by applicable law or agreed to in writing, software

-   distributed under the License is distributed on an "AS IS" BASIS,

-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-   See the License for the specific language governing permissions and

-   limitations under the License.

--->

-<!-- $Id: Home.page,v 1.1 2003/06/29 18:23:26 mindbridge Exp $ -->

-<!DOCTYPE page-specification PUBLIC 

-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 

-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">

-

-<page-specification>

-    <property-specification name="intValue" type="int" initial-value="0"/>

-    <property-specification name="floatValue" type="float" initial-value="0.0"/>

-    <property-specification name="bigIntegerValue" type="java.math.BigInteger"/>

-    <property-specification name="bigDecimalValue" type="java.math.BigDecimal"/>

-    <property-specification name="stringValue" type="java.lang.String"/>

-    <property-specification name="dateValue" type="java.util.Date"/>

-    

-    <bean name="delegate" class="org.apache.tapestry.valid.ValidationDelegate"/>

-    

-</page-specification>

diff --git a/3.0.4/junit/context29/WEB-INF/Two.page b/3.0.4/junit/context29/WEB-INF/Two.page
deleted file mode 100644
index 46fb9bd..0000000
--- a/3.0.4/junit/context29/WEB-INF/Two.page
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>

-<!--

-   Copyright 2004 The Apache Software Foundation

-  

-   Licensed under the Apache License, Version 2.0 (the "License");

-   you may not use this file except in compliance with the License.

-   You may obtain a copy of the License at

-  

-       http://www.apache.org/licenses/LICENSE-2.0

-  

-   Unless required by applicable law or agreed to in writing, software

-   distributed under the License is distributed on an "AS IS" BASIS,

-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-   See the License for the specific language governing permissions and

-   limitations under the License.

--->

-<!-- $Id: Home.page,v 1.1 2003/06/29 18:23:26 mindbridge Exp $ -->

-<!DOCTYPE page-specification PUBLIC 

-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 

-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">

-

-<page-specification class="org.apache.tapestry.junit.mock.c29.Two">

-    <property-specification name="intValue" type="int" initial-value="0"/>

-    <property-specification name="intValue2" type="int" initial-value="0"/>

-    <property-specification name="flag" type="boolean"/>

-    

-    <bean name="delegate" class="org.apache.tapestry.valid.ValidationDelegate"/>

-

-    <bean name="intValidator" lifecycle="render" class="org.apache.tapestry.valid.NumberValidator">

-        <set-property name="valueType">"int"</set-property>

-    </bean>

-    

-    <component id="field" type="ValidField">

-        <binding name="validator" expression="beans.intValidator"/>

-        <binding name="value" expression="intValue"/>

-        <static-binding name="displayName">int</static-binding>

-    </component>

-

-    <component id="field2" type="ValidField">

-        <binding name="validator" expression="beans.intValidator"/>

-        <binding name="value" expression="intValue2"/>

-        <static-binding name="displayName">int2</static-binding>

-    </component>

-

-</page-specification>

diff --git a/3.0.4/junit/context3/Home.html b/3.0.4/junit/context3/Home.html
deleted file mode 100644
index bf45493..0000000
--- a/3.0.4/junit/context3/Home.html
+++ /dev/null
@@ -1,13 +0,0 @@
-<html jwcid="@Shell" title="No Application Spec">
-<body jwcid="@Body">
-
-<p>
-This application can run without an application specification.
-
-<p>
-Application name: <span jwcid="@Insert" value="ognl:engine.specification.name">Application Name</span>
-<p>
-Engine class: <span jwcid="@Insert" value="ognl:engine.class.getName()">Engine Class</span>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/3.0.4/junit/context3/README b/3.0.4/junit/context3/README
deleted file mode 100644
index 18e2a5a..0000000
--- a/3.0.4/junit/context3/README
+++ /dev/null
@@ -1,2 +0,0 @@
-This context is used inside JUnit testing to handle applications that run without an

-application specification.

diff --git a/3.0.4/junit/context30/Home.html b/3.0.4/junit/context30/Home.html
deleted file mode 100644
index ace5c0b..0000000
--- a/3.0.4/junit/context30/Home.html
+++ /dev/null
@@ -1,14 +0,0 @@
-<html jwcid="@Shell" title="Incompatible direction and binding">
-<!-- $Id$ -->
-<body jwcid="@Body">
-
-<form jwcid="@Form">
-
-  <!-- Typical user mistake is to omit the ognl: prefix! -->
-  
-  <select jwcid="selectUser@PropertySelection" value="selectedUser" model="ognl:null"/>	
-	
-</form>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/3.0.4/junit/context30/README b/3.0.4/junit/context30/README
deleted file mode 100644
index e83f3c3..0000000
--- a/3.0.4/junit/context30/README
+++ /dev/null
@@ -1,4 +0,0 @@
-This context is used inside JUnit testing to handle the check for incompatible

-directions and bindings.

-

-See TestIncompatibleDirectionAndBinding.xml

diff --git a/3.0.4/junit/context31/Home.html b/3.0.4/junit/context31/Home.html
deleted file mode 100644
index a4b3210..0000000
--- a/3.0.4/junit/context31/Home.html
+++ /dev/null
@@ -1,16 +0,0 @@
-<html jwcid="@Shell" title="Home">
-<body jwcid="@Body">
-
-<form jwcid="@Form" listener="ognl:listeners.formSubmit">
-Hidden: <input jwcid="hidden@Hidden" value="ognl:value" encode="ognl:encode"/>
-<br>
-HiddenWithID: <input jwcid="hiddenWithID@Hidden" value="ognl:valueWithID" id="ognl:hiddenID" encode="ognl:encode"/>
-<br>
-HiddenWithEncoding: <input jwcid="hiddenWithEncoding@Hidden" value="ognl:valueWithEncoding"/>
-<br>
-HiddenBoolean: <input jwcid="hiddenBoolean@Hidden" value="ognl:booleanValue" listener="ognl:listeners.hiddenListener"/>
-
-</form>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/3.0.4/junit/context31/README b/3.0.4/junit/context31/README
deleted file mode 100644
index 08246dd..0000000
--- a/3.0.4/junit/context31/README
+++ /dev/null
@@ -1 +0,0 @@
-Test cases for the Form and Hidden components.
\ No newline at end of file
diff --git a/3.0.4/junit/context31/Two.html b/3.0.4/junit/context31/Two.html
deleted file mode 100644
index b66bf4e..0000000
--- a/3.0.4/junit/context31/Two.html
+++ /dev/null
@@ -1,11 +0,0 @@
-<html jwcid="@Shell" title="Two">
-<body jwcid="@Body">
-
-Value: [<span jwcid="@Insert" value="ognl:value"/>]
-<br/>
-HiddenID: [<span jwcid="@Insert" value="ognl:hiddenID"/>]
-
-HiddenWithEncoding: [<span jwcid="@Insert" value="ognl:valueWithEncoding"/>]
-
-</body>
-</html>
\ No newline at end of file
diff --git a/3.0.4/junit/context31/WEB-INF/Home.page b/3.0.4/junit/context31/WEB-INF/Home.page
deleted file mode 100644
index 1be8007..0000000
--- a/3.0.4/junit/context31/WEB-INF/Home.page
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<page-specification class="org.apache.tapestry.junit.mock.c31.Home">
-  <property-specification name="value" type="java.lang.String"/>
-  <property-specification name="hiddenID" type="java.lang.String"/>
-  <property-specification name="valueWithID" type="java.lang.String"/>
-  <property-specification name="valueWithEncoding" type="java.lang.String"/>
-  <property-specification name="booleanValue" type="java.lang.Boolean"/>
-</page-specification>
\ No newline at end of file
diff --git a/3.0.4/junit/context31/WEB-INF/Two.page b/3.0.4/junit/context31/WEB-INF/Two.page
deleted file mode 100644
index 41c9872..0000000
--- a/3.0.4/junit/context31/WEB-INF/Two.page
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<page-specification class="org.apache.tapestry.junit.mock.c31.Two">
-  <property-specification name="value" type="java.lang.String"/>
-  <property-specification name="hiddenID" type="java.lang.String"/>
-  <property-specification name="valueWithEncoding" type="java.lang.String"/>
-</page-specification>
\ No newline at end of file
diff --git a/3.0.4/junit/context32/Home.html b/3.0.4/junit/context32/Home.html
deleted file mode 100644
index 3e7772c..0000000
--- a/3.0.4/junit/context32/Home.html
+++ /dev/null
@@ -1,14 +0,0 @@
-<html>
-<body>
-
-<p>
-Check that values in the HTML template do not override
-bindings in the specification.
-</p>
-
-
-Static over Static: <span jwcid="insertArtist" value="M. C. Escher"/>
-	
-
-</body>	
-</html>
\ No newline at end of file
diff --git a/3.0.4/junit/context32/README b/3.0.4/junit/context32/README
deleted file mode 100644
index fbf102e..0000000
--- a/3.0.4/junit/context32/README
+++ /dev/null
@@ -1,3 +0,0 @@
-Test case for bug 20932 Specification ignored in a hybrid declaration 

-

-http://issues.apache.org/bugzilla/show_bug.cgi?id=20932
\ No newline at end of file
diff --git a/3.0.4/junit/context32/Two.html b/3.0.4/junit/context32/Two.html
deleted file mode 100644
index f413cc2..0000000
--- a/3.0.4/junit/context32/Two.html
+++ /dev/null
@@ -1,14 +0,0 @@
-<html>
-<body>
-
-<p>
-Check that values in the HTML template do not override
-bindings in the specification.
-</p>
-
-
-Dynamic over Static: <span jwcid="insertPageName@Insert" value="ognl:pageName"/>
-	
-
-</body>	
-</html>
\ No newline at end of file
diff --git a/3.0.4/junit/context32/WEB-INF/Home.page b/3.0.4/junit/context32/WEB-INF/Home.page
deleted file mode 100644
index 55db417..0000000
--- a/3.0.4/junit/context32/WEB-INF/Home.page
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<page-specification>
-
-  <component id="insertArtist" type="Insert">
-  	<static-binding name="value" value="Pablo Picasso"/>
-  </component>
-  
-
-</page-specification>
\ No newline at end of file
diff --git a/3.0.4/junit/context32/WEB-INF/Two.page b/3.0.4/junit/context32/WEB-INF/Two.page
deleted file mode 100644
index ca0ded7..0000000
--- a/3.0.4/junit/context32/WEB-INF/Two.page
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<page-specification>
-
-  <component id="insertPageName" type="Insert">
-  	<static-binding name="value" value="SPECIFICATION-VALUE"/>
-  </component>
-  
-
-</page-specification>
\ No newline at end of file
diff --git a/3.0.4/junit/context33/Home.html b/3.0.4/junit/context33/Home.html
deleted file mode 100644
index 31ef450..0000000
--- a/3.0.4/junit/context33/Home.html
+++ /dev/null
@@ -1,28 +0,0 @@
-<!--
-    Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<span jwcid="$content$">
-<html jwcid="@Shell" title="Expression Optimization">
-<body jwcid="@Body">
-
-Disabled: [<span jwcid="@MyConditional" enabled="ognl:false">Disabled</span>]
-Enabled: [<span jwcid="@MyConditional" enabled="ognl:true">Enabled</span>]
-
-<a jwcid="@DirectLink" listener="ognl:listeners.enable">enable</a>
-	
-</body>	
-</html>
-</span>
\ No newline at end of file
diff --git a/3.0.4/junit/context33/README b/3.0.4/junit/context33/README
deleted file mode 100644
index 79877c1..0000000
--- a/3.0.4/junit/context33/README
+++ /dev/null
@@ -1,3 +0,0 @@
-Test case for bug 28010 OGNL bug in org.apache.tapestry.binding.ExpressionBinding ? 

-

-http://issues.apache.org/bugzilla/show_bug.cgi?id=28010
\ No newline at end of file
diff --git a/3.0.4/junit/context33/WEB-INF/Home.page b/3.0.4/junit/context33/WEB-INF/Home.page
deleted file mode 100644
index 997bd0e..0000000
--- a/3.0.4/junit/context33/WEB-INF/Home.page
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-    Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<page-specification class="org.apache.tapestry.junit.mock.c33.Home"/>
\ No newline at end of file
diff --git a/3.0.4/junit/context33/WEB-INF/MyConditional.html b/3.0.4/junit/context33/WEB-INF/MyConditional.html
deleted file mode 100644
index 8306bea..0000000
--- a/3.0.4/junit/context33/WEB-INF/MyConditional.html
+++ /dev/null
@@ -1,21 +0,0 @@
-<!--
-    Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<span jwcid="$content$">
-<span jwcid="@Conditional" condition="ognl:page.visit.enabled && enabled">
-	 <span jwcid="@RenderBody"/>
-</span>
-</span>
\ No newline at end of file
diff --git a/3.0.4/junit/context33/WEB-INF/MyConditional.jwc b/3.0.4/junit/context33/WEB-INF/MyConditional.jwc
deleted file mode 100644
index 934f2e8..0000000
--- a/3.0.4/junit/context33/WEB-INF/MyConditional.jwc
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-    Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<component-specification>
-	
-	<parameter name="enabled" type="boolean" required="yes" direction="in"/>
-	
-</component-specification>
\ No newline at end of file
diff --git a/3.0.4/junit/context33/WEB-INF/app.application b/3.0.4/junit/context33/WEB-INF/app.application
deleted file mode 100644
index 4b718ca..0000000
--- a/3.0.4/junit/context33/WEB-INF/app.application
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-    Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE application PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<application>
-
-	<property name="org.apache.tapestry.visit-class" value="org.apache.tapestry.junit.mock.c33.Visit"/>
-	
-</application>
diff --git a/3.0.4/junit/context34/Home.html b/3.0.4/junit/context34/Home.html
deleted file mode 100644
index 7396c3e..0000000
--- a/3.0.4/junit/context34/Home.html
+++ /dev/null
@@ -1,10 +0,0 @@
-<html jwcid="@Shell" title="context34">
-<body jwcid="@Body">
-
-
-Message: [<span jwcid="@Insert" value="ognl:message"/>]
-
-Click <a jwcid="link@DirectLink" listener="ognl:listeners.triggerError">here</a> to trigger error.
-
-</body>
-</html>
diff --git a/3.0.4/junit/context34/README b/3.0.4/junit/context34/README
deleted file mode 100644
index 3fcfcb3..0000000
--- a/3.0.4/junit/context34/README
+++ /dev/null
@@ -1,8 +0,0 @@
-Test case for bug 28956 IBM JDK 1.3.1 reports methods as abstract causing problems when generating enhanced classes 

-

-http://issues.apache.org/bugzilla/show_bug.cgi?id=28956

-

-Check that we can defeat the logic that checks for unimplemented abstract methods.

-

-This appears necessary when using IBM JDK 1.3.1 which appears to report

-concrete methods of abstract classes as abstract.

diff --git a/3.0.4/junit/context34/WEB-INF/Home.page b/3.0.4/junit/context34/WEB-INF/Home.page
deleted file mode 100644
index b8a874a..0000000
--- a/3.0.4/junit/context34/WEB-INF/Home.page
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-    Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<page-specification class="org.apache.tapestry.junit.mock.c34.Home">
-
-	<!-- Force the class enhancement. -->
-	
-  <property-specification name="message" type="java.lang.String"/>
-	
-</page-specification>
\ No newline at end of file
diff --git a/3.0.4/junit/context34/WEB-INF/app.application b/3.0.4/junit/context34/WEB-INF/app.application
deleted file mode 100644
index c27a936..0000000
--- a/3.0.4/junit/context34/WEB-INF/app.application
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-    Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE application PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<application>
-
-	<property name="org.apache.tapestry.enhance.disable-abstract-method-validation" value="true"/>
-	
-</application>
diff --git a/3.0.4/junit/context35/Home.html b/3.0.4/junit/context35/Home.html
deleted file mode 100644
index 5ee1b10..0000000
--- a/3.0.4/junit/context35/Home.html
+++ /dev/null
@@ -1,10 +0,0 @@
-<html jwcid="@Shell" title="context35">
-<body jwcid="@Body">
-
-
-Long Value: [<span jwcid="@Insert" value="ognl:longValue"/>]
-
-<span jwcid="c@MyComponent" long="ognl:longValue"/>
-
-</body>
-</html>
diff --git a/3.0.4/junit/context35/README b/3.0.4/junit/context35/README
deleted file mode 100644
index 15ef88e..0000000
--- a/3.0.4/junit/context35/README
+++ /dev/null
@@ -1,3 +0,0 @@
-Bug 28235 CodeGenerationException in case of a component parameter type "long"  

-

-http://issues.apache.org/bugzilla/show_bug.cgi?id=28235
\ No newline at end of file
diff --git a/3.0.4/junit/context35/WEB-INF/Home.page b/3.0.4/junit/context35/WEB-INF/Home.page
deleted file mode 100644
index ef24756..0000000
--- a/3.0.4/junit/context35/WEB-INF/Home.page
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-    Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<page-specification>
-	
-  <property-specification name="longValue" type="long" initial-value="100"/>
-	
-</page-specification>
\ No newline at end of file
diff --git a/3.0.4/junit/context35/WEB-INF/MyComponent.html b/3.0.4/junit/context35/WEB-INF/MyComponent.html
deleted file mode 100644
index 8d2aaab..0000000
--- a/3.0.4/junit/context35/WEB-INF/MyComponent.html
+++ /dev/null
@@ -1,21 +0,0 @@
-<!--
-    Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<span jwcid="$content$">
-
-<a href="#" jwcid="l@DirectLink" listener="ognl:listeners.updateValue">update value</a>
-
-</span>
\ No newline at end of file
diff --git a/3.0.4/junit/context35/WEB-INF/MyComponent.jwc b/3.0.4/junit/context35/WEB-INF/MyComponent.jwc
deleted file mode 100644
index 1d6e963..0000000
--- a/3.0.4/junit/context35/WEB-INF/MyComponent.jwc
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-    Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<component-specification class="org.apache.tapestry.junit.mock.c35.MyComponent">
-	
-	<parameter name="long" type="long" required="yes" direction="auto"/>
-	
-</component-specification>
\ No newline at end of file
diff --git a/3.0.4/junit/context36/Home.html b/3.0.4/junit/context36/Home.html
deleted file mode 100644
index 488e96f..0000000
--- a/3.0.4/junit/context36/Home.html
+++ /dev/null
@@ -1 +0,0 @@
-Property = <span jwcid="@Insert" value="ognl:testProperty"/>
\ No newline at end of file
diff --git a/3.0.4/junit/context36/Home.page b/3.0.4/junit/context36/Home.page
deleted file mode 100644
index f355a4c..0000000
--- a/3.0.4/junit/context36/Home.page
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-    Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<page-specification class="context36.Home"/>
-	
- 
-	
diff --git a/3.0.4/junit/context36/README b/3.0.4/junit/context36/README
deleted file mode 100644
index e1b1c55..0000000
--- a/3.0.4/junit/context36/README
+++ /dev/null
@@ -1 +0,0 @@
-26967: Allow abstract pages/components even if no specified properties (or other enhancements)
\ No newline at end of file
diff --git a/3.0.4/junit/context37/Home.html b/3.0.4/junit/context37/Home.html
deleted file mode 100644
index 58733b2..0000000
--- a/3.0.4/junit/context37/Home.html
+++ /dev/null
@@ -1 +0,0 @@
-<html jwcid="@Shell" title="Shell Informal Parameters" xmlns="http://www.w3.org/1999/xhtml"/>
\ No newline at end of file
diff --git a/3.0.4/junit/context37/README b/3.0.4/junit/context37/README
deleted file mode 100644
index 7f0da6a..0000000
--- a/3.0.4/junit/context37/README
+++ /dev/null
@@ -1 +0,0 @@
-30086: Shell component should allow informal parameters
\ No newline at end of file
diff --git a/3.0.4/junit/context4/Home.html b/3.0.4/junit/context4/Home.html
deleted file mode 100644
index 1f18c65..0000000
--- a/3.0.4/junit/context4/Home.html
+++ /dev/null
@@ -1,12 +0,0 @@
-<html jwcid="@lib:Border" title="App Spec in WEB-INF">
-
-<p>
-This application specification is in the WEB-INF.
-
-<p>
-Application name: <span jwcid="@Insert" value="ognl:engine.specification.name">Application Name</span>
-<p>
-Engine class: <span jwcid="@Insert" value="ognl:engine.class.getName()">Engine Class</span>
-
-
-</html>
\ No newline at end of file
diff --git a/3.0.4/junit/context4/README b/3.0.4/junit/context4/README
deleted file mode 100644
index 82d4900..0000000
--- a/3.0.4/junit/context4/README
+++ /dev/null
@@ -1,2 +0,0 @@
-Used in JUnit testing to support an important case where an application specification

-in the context references a library.
\ No newline at end of file
diff --git a/3.0.4/junit/context4/WEB-INF/foo.application b/3.0.4/junit/context4/WEB-INF/foo.application
deleted file mode 100644
index c3f4738..0000000
--- a/3.0.4/junit/context4/WEB-INF/foo.application
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-    Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE application PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<application name="Application foo in WEB-INF"
-	engine-class="org.apache.tapestry.junit.mock.c4.C4Engine">
-		
-	<library id="lib" specification-path="/org/apache/tapestry/junit/mock/lib/MockLibrary.library"/>
-	
-</application>	
\ No newline at end of file
diff --git a/3.0.4/junit/context5/ActionLinkHolder.html b/3.0.4/junit/context5/ActionLinkHolder.html
deleted file mode 100644
index 7288a86..0000000
--- a/3.0.4/junit/context5/ActionLinkHolder.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<!-- $Id$ -->
-
-
-<span jwcid="block@Block">
-
-<span jwcid="@Conditional" condition="ognl:visit.actionLinkTriggered">
-ActionLink HAS been triggered.
-</span>
-
-<span jwcid="@Conditional" condition="ognl:! visit.actionLinkTriggered">
-ActionLink HAS NOT been triggered.
-</span>
-
-<p>
-
-<a jwcid="@ActionLink" listener="ognl:visit.listeners.actionTrigger">Click to Trigger</a>
-
-
-</span>
\ No newline at end of file
diff --git a/3.0.4/junit/context5/DirectLinkHolder.html b/3.0.4/junit/context5/DirectLinkHolder.html
deleted file mode 100644
index 85a5422..0000000
--- a/3.0.4/junit/context5/DirectLinkHolder.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<!-- $Id$ -->
-
-
-<span jwcid="block@Block">
-
-<span jwcid="@Conditional" condition="ognl:visit.directLinkTriggered">
-DirectLink HAS been triggered.
-</span>
-
-<span jwcid="@Conditional" condition="ognl:! visit.directLinkTriggered">
-DirectLink HAS NOT been triggered.
-</span>
-
-<p>
-
-<a jwcid="@DirectLink" listener="ognl:visit.listeners.directTrigger">Click to Trigger</a>
-
-
-</span>
\ No newline at end of file
diff --git a/3.0.4/junit/context5/FormHolder.html b/3.0.4/junit/context5/FormHolder.html
deleted file mode 100644
index 2cfd103..0000000
--- a/3.0.4/junit/context5/FormHolder.html
+++ /dev/null
@@ -1,23 +0,0 @@
-<!-- $Id$ -->
-
-
-<span jwcid="block@Block">
-
-<span jwcid="@Conditional" condition="ognl:visit.formTriggered">
-Form HAS been triggered.
-</span>
-
-<span jwcid="@Conditional" condition="ognl:! visit.formTriggered">
-Form HAS NOT been triggered.
-</span>
-
-<p>
-
-<form jwcid="@Form">
-
-<input type="submit" jwcid="@Submit" label="Trigger" listener="ognl:visit.listeners.formTrigger"/>
-
-</form>
-
-
-</span>
\ No newline at end of file
diff --git a/3.0.4/junit/context5/Home.html b/3.0.4/junit/context5/Home.html
deleted file mode 100644
index 70fa19b..0000000
--- a/3.0.4/junit/context5/Home.html
+++ /dev/null
@@ -1,13 +0,0 @@
-<html jwcid="@Shell" title="Home">
-<body jwcid="@Body">
-
-
-<span jwcid="@PageBlock" title="Direct Link" page="DirectLinkHolder"/>
-
-<span jwcid="@PageBlock" title="Action Link" page="ActionLinkHolder"/>
-
-<span jwcid="@PageBlock" title="Form (using direct service)" page="FormHolder"/>
-
-</body>
-
-</html>
\ No newline at end of file
diff --git a/3.0.4/junit/context5/README b/3.0.4/junit/context5/README
deleted file mode 100644
index 1eb8a28..0000000
--- a/3.0.4/junit/context5/README
+++ /dev/null
@@ -1,3 +0,0 @@
-This context contains an application used to test the use of Block and InsertBlock, especially

-in terms of the action and direct services for components dragged in from a foreign page

-by a block.
\ No newline at end of file
diff --git a/3.0.4/junit/context5/WEB-INF/PageBlock.html b/3.0.4/junit/context5/WEB-INF/PageBlock.html
deleted file mode 100644
index 48e542d..0000000
--- a/3.0.4/junit/context5/WEB-INF/PageBlock.html
+++ /dev/null
@@ -1,26 +0,0 @@
-<!-- $Id$ -->
-
-<span jwcid="$content$">
-
-<table border="1">
-<tr>
-<th><span jwcid="insertTitle">Title</span></th>
-</tr>
-<tr>
-<th>Content from <span jwcid="@Insert" value="ognl:targetPageName">Some Page</span></th>
-</tr>
-<tr>
-<td>
-
-<span jwcid="@RenderBlock" block="ognl:targetBlock">
-
-Block content.
-
-</span>
-
-</td>
-</tr>
-</table>
-
-
-</span>
diff --git a/3.0.4/junit/context5/WEB-INF/PageBlock.jwc b/3.0.4/junit/context5/WEB-INF/PageBlock.jwc
deleted file mode 100644
index 401dd52..0000000
--- a/3.0.4/junit/context5/WEB-INF/PageBlock.jwc
+++ /dev/null
@@ -1,38 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE component-specification PUBLIC
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<component-specification class="org.apache.tapestry.junit.mock.c5.PageBlock" 
-	allow-body="no" 
-	allow-informal-parameters="no">	
-	
-	<parameter name="title" type="java.lang.String" required="yes"/>	
-	
-	<parameter name="page" type="java.lang.String" required="yes"
-		direction="in" property-name="targetPageName"/>
-		
-	<parameter name="blockId" type="java.lang.String"
-		direction="in" property-name="targetBlockId"/>
-		
-	<component id="insertTitle" type="Insert">
-		<inherited-binding name="value" parameter-name="title"/>
-	</component>
-			
-</component-specification>		
\ No newline at end of file
diff --git a/3.0.4/junit/context51/images/image.wbmp b/3.0.4/junit/context51/images/image.wbmp
deleted file mode 100644
index a1f252a..0000000
--- a/3.0.4/junit/context51/images/image.wbmp
+++ /dev/null
Binary files differ
diff --git a/3.0.4/junit/context6/Four.html b/3.0.4/junit/context6/Four.html
deleted file mode 100644
index be8ce2f..0000000
--- a/3.0.4/junit/context6/Four.html
+++ /dev/null
@@ -1,25 +0,0 @@
-<html jwcid="@Shell" title="Property Types">
-<body jwcid="@Body">
-
-Boolean value: <span jwcid="@Insert" value="ognl:booleanValue "/>
-<br>
-Byte value: <span jwcid="@Insert" value="ognl:byteValue "/>
-<br>
-Char value: [<span jwcid="@Insert" value="ognl:charValue "/>]
-<br>
-Short value: <span jwcid="@Insert" value="ognl:shortValue "/>
-<br>
-Int value: <span jwcid="@Insert" value="ognl:intValue "/>
-<br>
-Long value: <span jwcid="@Insert" value="ognl:longValue "/>
-<br>
-Float value: <span jwcid="@Insert" value="ognl:floatValue "/>
-<br>
-Double value: <span jwcid="@Insert" value="ognl:doubleValue "/>
-<br>
-StringHolder value: [<span jwcid="@Insert" value="ognl:stringHolder "/>]
-
-<a href="#" jwcid="@DirectLink" listener="ognl:listeners.change ">Change values.</a>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/3.0.4/junit/context6/Home.html b/3.0.4/junit/context6/Home.html
deleted file mode 100644
index 929940e..0000000
--- a/3.0.4/junit/context6/Home.html
+++ /dev/null
@@ -1,16 +0,0 @@
-<html jwcid="@Shell" title="Peristant Page Property">
-<body jwcid="@Body">
-
-
-Active page names: <span jwcid="@Insert" value="ognl:engine.sortedActivePageNames"/>
-
-<br>
-
-Message: <span jwcid="@Insert" value="ognl:message"/>
-
-<p>
-
-<a href="#" jwcid="@DirectLink" listener="ognl:listeners.updateMessage">Change message.</a>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/3.0.4/junit/context6/README b/3.0.4/junit/context6/README
deleted file mode 100644
index 9f43b0f..0000000
--- a/3.0.4/junit/context6/README
+++ /dev/null
@@ -1,2 +0,0 @@
-This context contains an application used to test the storage of persistant properties

-in pages and components.
\ No newline at end of file
diff --git a/3.0.4/junit/context6/Two.html b/3.0.4/junit/context6/Two.html
deleted file mode 100644
index 4e42340..0000000
--- a/3.0.4/junit/context6/Two.html
+++ /dev/null
@@ -1,10 +0,0 @@
-<html jwcid="@Shell" title="Peristant Component Property">
-<body jwcid="@Body">
-
-
-Active page names: <span jwcid="@Insert" value="ognl:engine.sortedActivePageNames"/>
-
-<span jwcid="@Nested"/>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/3.0.4/junit/context6/WEB-INF/Four.page b/3.0.4/junit/context6/WEB-INF/Four.page
deleted file mode 100644
index 2f22bfd..0000000
--- a/3.0.4/junit/context6/WEB-INF/Four.page
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<page-specification class="org.apache.tapestry.junit.mock.c6.Four"/>
-
diff --git a/3.0.4/junit/context6/WEB-INF/Home.page b/3.0.4/junit/context6/WEB-INF/Home.page
deleted file mode 100644
index e894063..0000000
--- a/3.0.4/junit/context6/WEB-INF/Home.page
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-  
-<page-specification class="org.apache.tapestry.junit.mock.c6.Home"/>
-
diff --git a/3.0.4/junit/context6/WEB-INF/Nested.html b/3.0.4/junit/context6/WEB-INF/Nested.html
deleted file mode 100644
index 1a9b746..0000000
--- a/3.0.4/junit/context6/WEB-INF/Nested.html
+++ /dev/null
@@ -1,3 +0,0 @@
-Nested Message: <span jwcid="@Insert" value="ognl:message"/>
-
-<a href="#" jwcid="@DirectLink" listener="ognl:listeners.updateMessage">Change nested message.</a>
\ No newline at end of file
diff --git a/3.0.4/junit/context6/WEB-INF/Nested.jwc b/3.0.4/junit/context6/WEB-INF/Nested.jwc
deleted file mode 100644
index 4c3d125..0000000
--- a/3.0.4/junit/context6/WEB-INF/Nested.jwc
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<component-specification class="org.apache.tapestry.junit.mock.c6.Nested"/>
-
diff --git a/3.0.4/junit/context7/Home.html b/3.0.4/junit/context7/Home.html
deleted file mode 100644
index c5dd527..0000000
--- a/3.0.4/junit/context7/Home.html
+++ /dev/null
@@ -1,11 +0,0 @@
-<html jwcid="@Shell" title="Default Class">
-<body jwcid="@Body">
-
-Page class: <span jwcid="@Insert" value="ognl:getClass().getName()"/>
-
-<p>
-
-<span jwcid="@Chatty"/>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/3.0.4/junit/context7/README b/3.0.4/junit/context7/README
deleted file mode 100644
index 9e161e7..0000000
--- a/3.0.4/junit/context7/README
+++ /dev/null
@@ -1,2 +0,0 @@
-This context is used to test pages and components that use the 1.4 specification DTD, where

-the class attribute is optional and can be defaulted.

diff --git a/3.0.4/junit/context7/Two.html b/3.0.4/junit/context7/Two.html
deleted file mode 100644
index 449690f..0000000
--- a/3.0.4/junit/context7/Two.html
+++ /dev/null
@@ -1,18 +0,0 @@
-<html jwcid="@Shell" title="Listener Binding">
-<body jwcid="@Body">
-
-Message: <span jwcid="@Insert" value="ognl:message"/>
-
-<p>
-
-<a href="#" jwcid="link">Change Message</a>
-
-<br/>
-
-<a href="#" jwcid="invalidScriptLink">Trigger invalid script</a>
-
-<br/>
-<a href="#" jwcid="unknownLanguageLink">Trigger unknown script</a>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/3.0.4/junit/context7/WEB-INF/Chatty.html b/3.0.4/junit/context7/WEB-INF/Chatty.html
deleted file mode 100644
index 41fbb24..0000000
--- a/3.0.4/junit/context7/WEB-INF/Chatty.html
+++ /dev/null
@@ -1,2 +0,0 @@
-
-Hello!  I'm Chatty and my class is <span jwcid="@Insert" value="ognl:getClass().getName()"/>
diff --git a/3.0.4/junit/context7/WEB-INF/Chatty.jwc b/3.0.4/junit/context7/WEB-INF/Chatty.jwc
deleted file mode 100644
index 6f1978f..0000000
--- a/3.0.4/junit/context7/WEB-INF/Chatty.jwc
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<component-specification/>
-
diff --git a/3.0.4/junit/context7/WEB-INF/Home.page b/3.0.4/junit/context7/WEB-INF/Home.page
deleted file mode 100644
index 1af5d15..0000000
--- a/3.0.4/junit/context7/WEB-INF/Home.page
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<page-specification/>
-
diff --git a/3.0.4/junit/context7/WEB-INF/Two.page b/3.0.4/junit/context7/WEB-INF/Two.page
deleted file mode 100644
index 6234c02..0000000
--- a/3.0.4/junit/context7/WEB-INF/Two.page
+++ /dev/null
@@ -1,51 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<page-specification class="org.apache.tapestry.junit.mock.c7.Two">
-
-	<component id="link" type="DirectLink">
-		<listener-binding name="listener" language="jython">
-
-page.message = "Component was clicked."
-		
-		</listener-binding>
-	</component>
-
-	<component id="invalidScriptLink" type="DirectLink">
-		<listener-binding name="listener" language="jython">
-
-# Note the missing trailing quote!
-
-page.message = "invalidScriptLink component was clicked.
-		
-		</listener-binding>
-	</component>
-	
-	<component id="unknownLanguageLink" type="DirectLink">
-		<listener-binding name="listener" language="DoesNotExist">
-
-page.message = "unknownLanguageLink component was clicked."
-		
-		</listener-binding>
-	</component>	
-	
-</page-specification>
-
diff --git a/3.0.4/junit/context8/Home.thtml b/3.0.4/junit/context8/Home.thtml
deleted file mode 100644
index dbc805a..0000000
--- a/3.0.4/junit/context8/Home.thtml
+++ /dev/null
@@ -1,7 +0,0 @@
-<html jwcid="@Shell" title="Home">

-<body jwcid="@Body">

-

-This is the Home page, with template Home.thtml.

-

-</body>

-</html>
\ No newline at end of file
diff --git a/3.0.4/junit/context8/README b/3.0.4/junit/context8/README
deleted file mode 100644
index 77f3097..0000000
--- a/3.0.4/junit/context8/README
+++ /dev/null
@@ -1 +0,0 @@
-This context contains tests use to check that the default template extension may be overriden.
\ No newline at end of file
diff --git a/3.0.4/junit/context8/Two.phtml b/3.0.4/junit/context8/Two.phtml
deleted file mode 100644
index 183bf29..0000000
--- a/3.0.4/junit/context8/Two.phtml
+++ /dev/null
@@ -1,7 +0,0 @@
-<html jwcid="@Shell" title="Home">

-<body jwcid="@Body">

-

-This is the Two page, with template Two.phtml.

-

-</body>

-</html>
\ No newline at end of file
diff --git a/3.0.4/junit/context8/WEB-INF/Two.page b/3.0.4/junit/context8/WEB-INF/Two.page
deleted file mode 100644
index 6e37d7a..0000000
--- a/3.0.4/junit/context8/WEB-INF/Two.page
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-    Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-  
-<page-specification>
-	<property name="org.apache.tapestry.template-extension" value="phtml"/>
-</page-specification>
\ No newline at end of file
diff --git a/3.0.4/junit/context8/WEB-INF/ext.application b/3.0.4/junit/context8/WEB-INF/ext.application
deleted file mode 100644
index 9ea251f..0000000
--- a/3.0.4/junit/context8/WEB-INF/ext.application
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-    Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE application PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<application>
-	<property name="org.apache.tapestry.template-extension" value="thtml"/>
-</application>
\ No newline at end of file
diff --git a/3.0.4/junit/lib/jdom-b8.jar b/3.0.4/junit/lib/jdom-b8.jar
deleted file mode 100644
index 7ccb9fd..0000000
--- a/3.0.4/junit/lib/jdom-b8.jar
+++ /dev/null
Binary files differ
diff --git a/3.0.4/junit/mock-scripts/TestAbstractClass.xml b/3.0.4/junit/mock-scripts/TestAbstractClass.xml
deleted file mode 100644
index 63d8ec5..0000000
--- a/3.0.4/junit/mock-scripts/TestAbstractClass.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<mock-test>
-    <context name="c36" root="context36"/>
-
-  	<servlet name="app" class="org.apache.tapestry.ApplicationServlet"/>
-
-	<request>
-		<assert-output name="Page Title">
-<![CDATA[
-Property = SUCCESS
-]]>
-		</assert-output>
-		
-	</request>
-	
-</mock-test>
\ No newline at end of file
diff --git a/3.0.4/junit/mock-scripts/TestAssetService.xml b/3.0.4/junit/mock-scripts/TestAssetService.xml
deleted file mode 100644
index 070ea38..0000000
--- a/3.0.4/junit/mock-scripts/TestAssetService.xml
+++ /dev/null
@@ -1,141 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!-- $Id$ -->
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<mock-test>
-    <context name="c16" root="context16"/>
-
-  	<servlet name="app" class="org.apache.tapestry.ApplicationServlet">
-  		<init-parameter name="org.apache.tapestry.application-specification"
-  				value="/org/apache/tapestry/junit/mock/c16/app.application"/>
-  	</servlet>
-
-	<request>
-		<assert-output name="Page Title">
-<![CDATA[
-<title>Private Assets</title>
-]]>
-		</assert-output>
-		
-		<assert-output name="Image Tag">
-<![CDATA[
-<img src="/c16/app?service=asset&amp;sp=S%2Forg%2Fapache%2Ftapestry%2Fjunit%2Fmock%2Fc16%2Flogo.png&amp;sp=Sf6324ac8f24f0a7f4850221b0f14c865" border="0"/>
-]]>
-		</assert-output>
-	</request>
-	
-	<request>
-		<parameter name="service" value="asset"/>
-		<parameter name="sp">
-      <value>/org/apache/tapestry/junit/mock/c16/logo.png</value>
-      <value>Sf6324ac8f24f0a7f4850221b0f14c865</value>
-		</parameter>
-		
-		<assert-output-stream name="Image Content"
-				content-type="image/png"
-				path="src/org/apache/tapestry/junit/mock/c16/logo.png"/>	
-	</request>
-	
-	<request>
-		<parameter name="service" value="asset"/>
-		<parameter name="sp">
-      <value>/org/apache/tapestry/junit/mock/c16/globe.jpg</value>
-      <value>S52463f90c449b2546814d8929aa7d5cd</value>
-		</parameter>
-		
-		<assert-output-stream name="Image Content"
-				content-type="image/jpeg"
-				path="src/org/apache/tapestry/junit/mock/c16/globe.jpg"/>	
-	</request>	
-
-	<!-- Request a file using a bad checksum. -->
-	
-	<request>
-		<parameter name="service" value="asset"/>
-		<parameter name="sp">
-      <value>/org/apache/tapestry/junit/mock/c16/logo.png</value>
-      <value>Sabcdef</value>
-		</parameter>
-    
-		<assert-output name="Page Title">
-<![CDATA[
-<title>Exception</title>
-]]>			
-		</assert-output>
-		
-		<assert-output name="Message">
-    Checksum abcdef does not match that of resource /org/apache/tapestry/junit/mock/c16/logo.png.
-		</assert-output>
-		
-	</request>
-	
-	<!-- Request a file which does not exist. -->
-	
-	<request>
-		<parameter name="service" value="asset"/>
-    <parameter name="sp">
-      <value>/org/apache/tapestry/junit/mock/c16/MISSING.gif</value>
-      <value>Sabcdef</value>
-    </parameter>
-    
-		<assert-output name="Page Title">
-<![CDATA[
-<title>Exception</title>
-]]>			
-		</assert-output>
-		
-		<assert-output name="Message">
-		Could not locate resource /org/apache/tapestry/junit/mock/c16/MISSING.gif.	
-		</assert-output>
-		
-	</request>
-	
-	<!-- Request missing the sp parameter -->
-	
-	<request>
-		<parameter name="service" value="asset"/>
-		
-		<assert-output name="Page Title">
-<![CDATA[
-<title>Exception</title>
-]]>			
-		</assert-output>
-			
-		<assert-output name="Message">
-    Service asset requires exactly 2 service parameters.
-		</assert-output>
-	</request>
-
-	<!-- Request missing the checksum -->
-	
-	<request>
-		<parameter name="service" value="asset"/>
-    <parameter name="sp" value="/org/apache/tapestry/junit/mock/c16/MISSING.gif"/>
-		
-		<assert-output name="Page Title">
-<![CDATA[
-<title>Exception</title>
-]]>			
-		</assert-output>
-			
-		<assert-output name="Message">
-    Service asset requires exactly 2 service parameters.
-		</assert-output>
-	</request>
-	
-</mock-test>
\ No newline at end of file
diff --git a/3.0.4/junit/mock-scripts/TestAssetTemplates.xml b/3.0.4/junit/mock-scripts/TestAssetTemplates.xml
deleted file mode 100644
index 60ee384..0000000
--- a/3.0.4/junit/mock-scripts/TestAssetTemplates.xml
+++ /dev/null
@@ -1,63 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!-- $Id$ -->
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<mock-test>
-    <context name="mock"/>
-
-  	<servlet name="app" class="org.apache.tapestry.ApplicationServlet">
-  		<init-parameter
-  			name="org.apache.tapestry.application-specification"
-  			value="/org/apache/tapestry/junit/mock/app/Mock.application"/>
-  	</servlet>      
-    
-	<request>
-	  	<parameter name="service" value="page/PrivateAssetTemplate"/>
-		
-		<assert-output name="Page Title">
-<![CDATA[		
-<title>Private Asset Template</title>
-]]>
-		</assert-output>
-		
-		<assert-output name="Page Content">
-<![CDATA[		
-This page's content comes from a private asset
-]]>
-		</assert-output>
-		
-	</request>
-	
-	<request>
-	  	<parameter name="service" value="page/ContextAssetTemplate"/>
-		
-		<assert-output name="Page Title">
-<![CDATA[		
-<title>Context Asset Template</title>
-]]>
-		</assert-output>
-		
-		<assert-output name="Page Content">
-<![CDATA[		
-This page's content comes from a context asset
-]]>
-		</assert-output>
-		
-	</request>	
-	
-</mock-test>
-    	
diff --git a/3.0.4/junit/mock-scripts/TestAutoLongParameter.xml b/3.0.4/junit/mock-scripts/TestAutoLongParameter.xml
deleted file mode 100644
index 180c39a..0000000
--- a/3.0.4/junit/mock-scripts/TestAutoLongParameter.xml
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!-- $Id$ -->
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<mock-test>
-  <context name="c35" root="context35"/>
-
-  <servlet name="app" class="org.apache.tapestry.ApplicationServlet"/>
-
-
-  <request>
-  
-    <assert-output name="Initial Value">
-    	Long Value: [100]	
-    </assert-output>	
-  	
-  	<assert-output name="Link">
-			href="/c35/app?service=direct/0/Home/c.l"
-  	</assert-output>
-  	
-  </request>
-	
-  <request>
-    <parameter name="service" value="direct/0/Home/c.l"/>
-    
-    <assert-output name="Updated Value">
-    	Long Value: [37]	
-    </assert-output>
-  	
-  </request>
-</mock-test>
diff --git a/3.0.4/junit/mock-scripts/TestAutoParameters.xml b/3.0.4/junit/mock-scripts/TestAutoParameters.xml
deleted file mode 100644
index 7627c69..0000000
--- a/3.0.4/junit/mock-scripts/TestAutoParameters.xml
+++ /dev/null
@@ -1,122 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!-- $Id$ -->
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<mock-test>
-    <context name="c23" root="context23"/>
-
-  	<servlet name="assets" class="org.apache.tapestry.ApplicationServlet"/>
-
-	<request>
-		<assert-output name="Page Title">
-<![CDATA[
-<title>Home</title>
-]]>
-		</assert-output>
-		
-		<assert-output name="boolValue">
-		boolValue: [true]	
-		</assert-output>
-		
-		<assert-output name="intValue">
-		intValue: [-3]	
-		</assert-output>
-		
-		<assert-output name="doubleValue">
-		doubleValue: [10.5]	
-		</assert-output>
-		
-		<assert-output name="stringValue">
-		stringValue: [Pink Floyd]
-		</assert-output>
-		
-		<assert-output name="objectValue">
-		objectValue: [en]	
-		</assert-output>
-		
-		<assert-output name="link">
-		href="/c23/assets?service=direct/0/Home/flicker.update"
-		</assert-output>
-	</request>
-	
-	<request>
-		<parameter name="service" value="direct/0/Home/flicker.update"/>
-		
-		<assert-output name="boolValue">
-		boolValue: [false]	
-		</assert-output>
-		
-		<assert-output name="intValue">
-		intValue: [100]	
-		</assert-output>
-		
-		<assert-output name="doubleValue">
-		doubleValue: [22.7]	
-		</assert-output>
-		
-		<assert-output name="stringValue">
-		stringValue: [Poi Dog Pondering]
-		</assert-output>
-		
-		<assert-output name="objectValue">
-		objectValue: [fr]	
-		</assert-output>
-		
-				 	
-	</request>
-	
-	<!-- Verify that the updates were propagated through to the persistent properties. -->
-	
-	<request>
-				
-		<assert-output name="boolValue">
-		boolValue: [false]	
-		</assert-output>
-		
-		<assert-output name="intValue">
-		intValue: [100]	
-		</assert-output>
-		
-		<assert-output name="doubleValue">
-		doubleValue: [22.7]	
-		</assert-output>
-		
-		<assert-output name="stringValue">
-		stringValue: [Poi Dog Pondering]
-		</assert-output>
-		
-		<assert-output name="objectValue">
-		objectValue: [fr]	
-		</assert-output>
-					 	
-	</request>	
-	
-	<request>
-		<parameter name="service" value="page/Two"/>	
-		
-		<assert-output name="Title">
-<![CDATA[
-<title>Exception</title>
-]]>	
-		</assert-output>
-		
-		<assert-output name="Message">
-		Parameter 'flag' must be required or have a default value as it uses direction 'auto'.	
-		</assert-output>
-	</request>
-	
-</mock-test>
\ No newline at end of file
diff --git a/3.0.4/junit/mock-scripts/TestBlock.xml b/3.0.4/junit/mock-scripts/TestBlock.xml
deleted file mode 100644
index 552a201..0000000
--- a/3.0.4/junit/mock-scripts/TestBlock.xml
+++ /dev/null
@@ -1,98 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!-- $Id$ -->
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<mock-test>
-    <context name="c5" root="context5"/>
-
-  	<servlet name="app" class="org.apache.tapestry.ApplicationServlet">
-  		<init-parameter
-  			name="org.apache.tapestry.visit-class"
-  			value="org.apache.tapestry.junit.mock.c5.Visit"/>
-  	</servlet>
-       
-    <request>
- 		
-		<assert-output name="Title">
-<![CDATA[
-<title>Home</title>
-]]>
-		</assert-output>
-		
-		<assert-output name="Direct Status">
-DirectLink HAS NOT been triggered.		
-		</assert-output>		
-		
-		<assert-output name="Action Status">
-ActionLink HAS NOT been triggered.
-		</assert-output>		
-		
-		<assert-output name="Form Status">
-Form HAS NOT been triggered.
-		</assert-output>		
-		
-		<assert-output name="Direct URL">
-<![CDATA[
-href="/c5/app?service=direct/1/Home/DirectLinkHolder/$DirectLink"
-]]>
-		</assert-output>		
-
-		<assert-output name="Action URL">
-<![CDATA[
-href="/c5/app?service=action/1/Home/0/ActionLinkHolder/$ActionLink"
-]]>
-		</assert-output>
-			
-		<assert-output name="Form Context">
-<![CDATA[
-<input type="hidden" name="service" value="direct/1/Home/FormHolder/$Form"/>
-]]>
-		</assert-output>					
-
- 	</request>
- 	
- 	<request>
- 		<parameter name="service" value="direct/1/Home/DirectLinkHolder/$DirectLink"/>
- 		
- 		<assert-output name="Updated Direct Status">
-DirectLink HAS been triggered.
-		</assert-output>
-		
-	</request> 
-	
-	<request>
-		<parameter name="service" value="action/1/Home/0/ActionLinkHolder/$ActionLink"/>
-		
-		<assert-output name="Updated Action Status">
-ActionLink HAS been triggered.
-		</assert-output>
-	</request>
-	
-	<request>
-		<parameter name="service" value="direct/1/Home/FormHolder/$Form"/>
-		<parameter name="sp" value="S1"/>
-		<parameter name="$Submit" value="Trigger"/>
-		<parameter name="Form1" value="$Submit"/>
-		
-		<assert-output name="Form Status">
-Form HAS been triggered.
-		</assert-output>
-		
-	</request>				
-			
-</mock-test>
-    	
diff --git a/3.0.4/junit/mock-scripts/TestCycleActivatePage.xml b/3.0.4/junit/mock-scripts/TestCycleActivatePage.xml
deleted file mode 100644
index c97167f..0000000
--- a/3.0.4/junit/mock-scripts/TestCycleActivatePage.xml
+++ /dev/null
@@ -1,49 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!-- $Id$ -->
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<mock-test>
-    <context name="c25" root="context25"/>
-
-  	<servlet name="cycleActivatePage" class="org.apache.tapestry.ApplicationServlet"/>
-
-	<request>
-		<parameter name="service" value="direct/0/Home/$DirectLink"/>
-
-		<assert-output name="Page Title">
-<![CDATA[
-<title>Three</title>
-]]>
-		</assert-output>
-	</request>
-	
-	
-	<request>
-		<parameter name="service" value="direct/0/Four/$DirectLink"/>
-		
-		<assert-output name="Title">
-<![CDATA[
-<title>Exception</title>
-]]>	
-		</assert-output>
-		
-		<assert-output name="Message">
-		A validate cycle during page activation was detected: Six; Five; Six.
-		</assert-output>
-	</request>
-	
-</mock-test>
\ No newline at end of file
diff --git a/3.0.4/junit/mock-scripts/TestDefaultComponentClass.xml b/3.0.4/junit/mock-scripts/TestDefaultComponentClass.xml
deleted file mode 100644
index e7781d1..0000000
--- a/3.0.4/junit/mock-scripts/TestDefaultComponentClass.xml
+++ /dev/null
@@ -1,44 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!-- $Id$ -->
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<mock-test>
-    <context name="c7" root="context7"/>
-
-  	<servlet name="chatty" class="org.apache.tapestry.ApplicationServlet"/>
-  	
-
-	<request>
-  	  	  	
-  	  	  	
-		<assert-output name="Page Title">
-<![CDATA[		
-<title>Default Class</title>
-]]>
-		</assert-output>
-  	  	  	
-		<assert-output name="Page Class">
-Page class: org.apache.tapestry.html.BasePage
-	</assert-output>
-	
-	<assert-output name="Component Class">
-Hello!  I'm Chatty and my class is org.apache.tapestry.BaseComponent
-	</assert-output>
- 
-  </request>
-  
- </mock-test>
\ No newline at end of file
diff --git a/3.0.4/junit/mock-scripts/TestDefaultParameterValues.xml b/3.0.4/junit/mock-scripts/TestDefaultParameterValues.xml
deleted file mode 100644
index 91479f2..0000000
--- a/3.0.4/junit/mock-scripts/TestDefaultParameterValues.xml
+++ /dev/null
@@ -1,146 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!-- $Id$ -->
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<mock-test>
-    <context name="c27" root="context27"/>
-
-  	<servlet name="app" class="org.apache.tapestry.ApplicationServlet"/>
-
-	<request>
-		<assert-output name="Page Title">
-<![CDATA[		
-<title>Home</title>
-]]>
-		</assert-output>
-  	  	  	
-
-		<assert-output name="bound int value">
-<![CDATA[
-<td>Bound intValue    = 10</td>
-]]>
-		</assert-output>
-
-		<assert-output name="bound double value">
-<![CDATA[
-<td>Bound doubleValue = 2.72</td>
-]]>
-		</assert-output>
-
-		<assert-output name="bound object value">
-<![CDATA[
-<td>Bound objectValue = zh_TW</td>
-]]>
-		</assert-output>
-
-		<assert-output name="bound boolean value">
-<![CDATA[
-<td>Bound booleanValue = true</td>
-]]>
-		</assert-output>
-
-
-		<assert-output name="default int value">
-<![CDATA[
-<td>Default intValue    = 5</td>
-]]>
-		</assert-output>
-
-		<assert-output name="default double value">
-<![CDATA[
-<td>Default doubleValue = 3.14</td>
-]]>
-		</assert-output>
-
-		<assert-output name="default object value">
-<![CDATA[
-<td>Default objectValue = en_US</td>
-]]>
-		</assert-output>
-
-		<assert-output name="default boolean value">
-<![CDATA[
-<td>Default booleanValue = false</td>
-]]>
-		</assert-output>
-
-
-
-
-		<assert-output name="span tag">
-<![CDATA[
-<span>span tag</span>
-]]>
-		</assert-output>
-
-		<assert-output name="div tag">
-<![CDATA[
-<div>div tag</div>
-]]>
-		</assert-output>
-		
-		<assert-output name="b tag">
-<![CDATA[
-<b>b tag</b>
-]]>
-		</assert-output>
-		
-		<assert-output name="i tag">
-<![CDATA[
-<i>i tag</i>
-]]>
-		</assert-output>
-		
-	</request>
-
-
-	<request>
-		<parameter name="service" value="page/Two"/>	
-
-		<assert-output name="Page Title">
-<![CDATA[		
-<title>Exception</title>
-]]>
-		</assert-output>
-  	  	  	
-
-		<assert-output name="parameter must have default value">
-<![CDATA[
-Parameter 'intValue' must be required or have a default value as it uses direction 'auto'.
-]]>
-		</assert-output>
-	</request>
-
-		
-	<request>
-		<parameter name="service" value="page/Three"/>
-
-		<assert-output name="Page Title">
-<![CDATA[		
-<title>Exception</title>
-]]>
-		</assert-output>
-  	  	  	
-
-		<assert-output name="required parameter must not have default value">
-<![CDATA[
-Parameter intValue of component Three/$Bad2 is required and must not have a default value.
-]]>
-		</assert-output>
-	</request>
-		
- </mock-test>
\ No newline at end of file
diff --git a/3.0.4/junit/mock-scripts/TestDisableAbstractMethodValidation.xml b/3.0.4/junit/mock-scripts/TestDisableAbstractMethodValidation.xml
deleted file mode 100644
index c72cc86..0000000
--- a/3.0.4/junit/mock-scripts/TestDisableAbstractMethodValidation.xml
+++ /dev/null
@@ -1,44 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!-- $Id$ -->
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<mock-test>
-  <context name="c34" root="context34"/>
-    
- 	<servlet name="app" class="org.apache.tapestry.ApplicationServlet"/>
-     
-  <request>
-  
-  	<assert-output name="No Message">
-  		Message: []	
-  	</assert-output>
-  
-  	<asset-output name="Link">
-  	href="app?service=direct/0/Home/link"	
-  	</asset-output>
-  		
-  </request>
-  
-  <request>
-  	<parameter name="service" value="direct/0/Home/link"/>
-  	
-  	<assert-output name="Message">
-  		Message: [Got an AbstractMethodError invoking unimplementedMethod().]	
-  	</assert-output>
-  </request>
-</mock-test>
\ No newline at end of file
diff --git a/3.0.4/junit/mock-scripts/TestEnhancedParameterProperties.xml b/3.0.4/junit/mock-scripts/TestEnhancedParameterProperties.xml
deleted file mode 100644
index 03a5359..0000000
--- a/3.0.4/junit/mock-scripts/TestEnhancedParameterProperties.xml
+++ /dev/null
@@ -1,82 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!-- $Id$ -->
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<mock-test>
-    <context name="c12" root="context12"/>
-
-  	<servlet name="app" class="org.apache.tapestry.ApplicationServlet"/>
-
-	<request>
-  	  	  	  	  	 	
-		<assert-output name="Page Title">
-<![CDATA[		
-<title>Home</title>
-]]>
-		</assert-output>
-  	  	  	
-		<assert-output name="InsertString Output">
-Greeting: [Aloha!]
-		</assert-output>
-
-		<assert-output name="InsertInteger Output">
-Value: [100]
-		</assert-output>
-		
-	</request>
-	
-	<request>
-		<parameter name="service" value="page/Two"/>
-		
-			
-		<assert-output name="Page Title">
-<![CDATA[		
-<title>Two</title>
-]]>
-		</assert-output>
-		
-		<assert-output name="Message in a box">
-<![CDATA[
-<td>Tapestry Rules!</td>
-]]>			
-		</assert-output>
-
-	</request>
-	
-	<!-- This test also works out some aspects of connected parameters. -->
-	
-	<request>
-		<parameter name="service" value="page/Three"/>
-		
-		<assert-output name="Page Title">
-<![CDATA[
-<title>Three</title>
-]]>
-		</assert-output>	
-		
-		<assert-output name="Message">
-		Page name: [T h r e e]	
-		</assert-output>
-	</request>
-		
-    <request>
-		<parameter name="service" value="page/Four"/>
-		
-		<assert-output name="Final">banana</assert-output>
-    </request>
-
- </mock-test>
\ No newline at end of file
diff --git a/3.0.4/junit/mock-scripts/TestErrorCases.xml b/3.0.4/junit/mock-scripts/TestErrorCases.xml
deleted file mode 100644
index 4a70142..0000000
--- a/3.0.4/junit/mock-scripts/TestErrorCases.xml
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!-- $Id$ -->
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<mock-test>
-    <context name="c21" root="context21"/>
-
-  	<servlet name="app" class="org.apache.tapestry.ApplicationServlet"/>
-
-	<!-- Ensure that you can't change the engine's locale to null. -->
-	
-	<request>
-		<parameter name="service" value="external/SetLocaleNull"/>
-		
-		<assert-output name="Page Title">
-<![CDATA[
-Exception
-]]>
-
-		</assert-output>
-		
-		<assert-output name="Exception">
-		java.lang.IllegalArgumentException	
-		</assert-output>
-		
-		<assert-output name="Detail">
-		May not change engine locale to null.	
-		</assert-output>
-		
-	</request>
-</mock-test>
\ No newline at end of file
diff --git a/3.0.4/junit/mock-scripts/TestExternal.xml b/3.0.4/junit/mock-scripts/TestExternal.xml
deleted file mode 100644
index 0b3c518..0000000
--- a/3.0.4/junit/mock-scripts/TestExternal.xml
+++ /dev/null
@@ -1,115 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!-- $Id$ -->
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<mock-test>
-    <context name="junit"/>
-
-  	<servlet name="mock" class="org.apache.tapestry.ApplicationServlet">
-  		<init-parameter
-  			name="org.apache.tapestry.application-specification"
-  			value="/org/apache/tapestry/junit/mock/app/Mock.application"/>
-  	</servlet>
-
-  	<request>
-  	  	  	
-  	  <parameter name="service" value="page/ServiceTest"/>	  	
-  	  	  	
-  	  <assert-output name="Page Title">
-<![CDATA[	  
-<title>ServiceTest Page</title>
-]]>
-  	  </assert-output>
-  	  	  	
-  	  <assert-output name="ServiceLink with parameters">
-<![CDATA[  	  
-  	  <a href="/junit/mock?service=external/ServiceTest&amp;sp=SSopranos&amp;sp=20705&amp;sp=d3.142857142857143">
-]]>
-  	  </assert-output>
-  	  	  	
-
-  </request>
-  
-  <request>
-  	<parameter name="service" value="external/ServiceTest"/>
-  	<parameter name="sp">
-  		<value>SSopranos</value>
-  		<value>20705</value>
-  		<value>d3.142857142857143</value>
-  	</parameter>
-		
-	<assert-output-matches name="Cells" subgroup="1">
-<![CDATA[
-<td>(.*?)</td>
-]]>
-		<match>0</match>
-		<match>java.lang.String</match>
-		<match>Sopranos</match>
-		
-		<match>1</match>
-		<match>java.lang.Integer</match>
-		<match>20705</match>
-		
-		<match>2</match>
-		<match>java.lang.Double</match>
-		<match>3.142857142857143</match>
-	
-	</assert-output-matches>
-	
-	<assert name="HttpSession created">
-	request.session != null
-	</assert>
-	
-  </request>
-  	
-  	
-  <!-- OK, try some invalid versions. -->
-  
-  <request>
-  	<parameter name="service" value="external"/>
-  	
-  	<!-- Omit the context, specifying the page. -->
-  	
-  	<assert-output name="Page Title">
-<![CDATA[
-<title>Exception</title>
-]]>
-	</assert-output>
-	
-	<assert-output name="Message">
-	Service external requires exactly one context parameter.
-	</assert-output>
-			
-  </request>
-  
-  <!-- Specify a page which doesn't implement the IExternalPage interface. -->
-  
-  <request>
-  	<parameter name="service" value="external/lib:Dumper"/>
-  	  	
-  	<assert-output name="Page Title">
-<![CDATA[
-<title>Exception</title>
-]]>
-	</assert-output>
-	
-	<assert-output name="Message">
-	Page lib:Dumper does not implement the IExternalPage interface.
-	</assert-output>
-			
-  </request>  	
-</mock-test>
\ No newline at end of file
diff --git a/3.0.4/junit/mock-scripts/TestFailMissingClass.xml b/3.0.4/junit/mock-scripts/TestFailMissingClass.xml
deleted file mode 100644
index 486a837..0000000
--- a/3.0.4/junit/mock-scripts/TestFailMissingClass.xml
+++ /dev/null
@@ -1,48 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!-- $Id$ -->
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<mock-test>
-    <context name="fail"/>
-
-  	<servlet name="app" class="org.apache.tapestry.ApplicationServlet">
-  		<init-parameter
-  			name="org.apache.tapestry.application-specification"
-  			value="/org/apache/tapestry/junit/mock/fail/Fail.application"/>
-  	</servlet>      
-    
-    <request>
-    	<parameter name="service" value="page/MissingClass"/>
-    	
-    	<assert-output name="Page Title">
-<![CDATA[
-<title>Exception</title>
-]]>
-		</assert-output>
-					
-		<assert-output name="Error">
-Could not load class org.apache.tapestry.junit.mock.fail.MissingClass
-		</assert-output>
-		
-		<assert-output name="Exception">
-java.lang.ClassNotFoundException
-		</assert-output>
-				
-	</request>		
-
-</mock-test>
-    	
diff --git a/3.0.4/junit/mock-scripts/TestFailNoHome.xml b/3.0.4/junit/mock-scripts/TestFailNoHome.xml
deleted file mode 100644
index df0556e..0000000
--- a/3.0.4/junit/mock-scripts/TestFailNoHome.xml
+++ /dev/null
@@ -1,42 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!-- $Id$ -->
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<mock-test>
-    <context name="fail"/>
-
-  	<servlet name="app" class="org.apache.tapestry.ApplicationServlet">
-  		<init-parameter
-  			name="org.apache.tapestry.application-specification"
-  			value="/org/apache/tapestry/junit/mock/fail/Fail.application"/>
-  	</servlet>      
-       
-    <request>
-    	
-    	<assert-output name="Page Title">
-<![CDATA[    	
-<title>Exception</title>
-]]>
-		</assert-output>
-					
-		<assert-output name="Error">
-Page 'Home' not found in application namespace.
-		</assert-output>
-	</request>		
-
-</mock-test>
-    	
diff --git a/3.0.4/junit/mock-scripts/TestFailNotComponent.xml b/3.0.4/junit/mock-scripts/TestFailNotComponent.xml
deleted file mode 100644
index 5149072..0000000
--- a/3.0.4/junit/mock-scripts/TestFailNotComponent.xml
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!-- $Id$ -->
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<mock-test>
-    <context name="fail"/>
-
-  	<servlet name="app" class="org.apache.tapestry.ApplicationServlet">
-  		<init-parameter
-  			name="org.apache.tapestry.application-specification"
-  			value="/org/apache/tapestry/junit/mock/fail/Fail.application"/>
-  	</servlet>      
-    
-    <request>
-    	<parameter name="service" value="page/NotComponent"/>
-    	
-    	<assert-output name="Page Title">
-<![CDATA[
-<title>Exception</title>
-]]>
-		</assert-output>
-				
-			
-		<assert-output name="Error">
-does not implement the IComponent interface.
-		</assert-output>
-								
-	</request>		
-
-</mock-test>
-    	
diff --git a/3.0.4/junit/mock-scripts/TestFailNotPage.xml b/3.0.4/junit/mock-scripts/TestFailNotPage.xml
deleted file mode 100644
index 40414a2..0000000
--- a/3.0.4/junit/mock-scripts/TestFailNotPage.xml
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!-- $Id$ -->
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<mock-test>
-    <context name="fail"/>
-
-  	<servlet name="app" class="org.apache.tapestry.ApplicationServlet">
-  		<init-parameter
-  			name="org.apache.tapestry.application-specification"
-  			value="/org/apache/tapestry/junit/mock/fail/Fail.application"/>
-  	</servlet>      
-    
-    <request>
-    	<parameter name="service" value="page/NotPage"/>
-    	
-    	<assert-output name="Page Title">
-<![CDATA[
-<title>Exception</title>
-]]>
-		</assert-output>
-					
-				
-		<assert-output name="Error">
-Class java.lang.Object does not implement the IPage interface.
-		</assert-output>
-								
-	</request>		
-
-</mock-test>
-    	
diff --git a/3.0.4/junit/mock-scripts/TestGlobal.xml b/3.0.4/junit/mock-scripts/TestGlobal.xml
deleted file mode 100644
index 28c6c03..0000000
--- a/3.0.4/junit/mock-scripts/TestGlobal.xml
+++ /dev/null
@@ -1,75 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!-- $Id$ -->
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<mock-test>
-    <context name="c26" root="context26"/>
-
-    <servlet name="app" class="org.apache.tapestry.ApplicationServlet">
-  		<init-parameter
-  			name="org.apache.tapestry.global-class"
-  			value="org.apache.tapestry.junit.mock.c26.Global"/>
-        <init-parameter
-            name="org.apache.tapestry.visit-class"
-            value="org.apache.tapestry.junit.mock.xxx.Visit"/>
-  	</servlet>
-
-    <request>
-          <parameter name="service" value="page/Global"/>
-
-
-          <assert-output name="Title">
-<![CDATA[
-<title>Global</title>
-]]>
-        </assert-output>
-
-        <assert-output name="Name">
-        Osamu Tezuka
-        </assert-output>
-
-    </request>
-
-    <request>
-          <parameter name="service" value="page/Visit"/>
-
-
-        <assert-output name="Page Title">
-<![CDATA[
-<title>Exception</title>
-]]>
-        </assert-output>
-
-        <assert-output name="Exception Name">
-        org.apache.tapestry.BindingException
-        </assert-output>
-
-        <assert-output name="Exception Messge">
-        Unable to resolve expression
-        </assert-output>
-
-        <assert-output name="Inner Exception Name">
-        org.apache.tapestry.ApplicationRuntimeException
-        </assert-output>
-
-        <assert-output name="Class Name">
-        org.apache.tapestry.junit.mock.xxx.Visit
-        </assert-output>
-
-    </request>
-
-</mock-test>
\ No newline at end of file
diff --git a/3.0.4/junit/mock-scripts/TestHidden.xml b/3.0.4/junit/mock-scripts/TestHidden.xml
deleted file mode 100644
index eba9439..0000000
--- a/3.0.4/junit/mock-scripts/TestHidden.xml
+++ /dev/null
@@ -1,95 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!-- $Id$ -->
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<mock-test>
-    <context name="c31" root="context31"/>
-
-  	<servlet name="app" class="org.apache.tapestry.ApplicationServlet"/>
-
-	<request>
-		
-		<assert-output name="Page Title">
-<![CDATA[
-<title>Home</title>
-]]>	
-		</assert-output>
-
-		<assert-output name="Hidden">
-<![CDATA[
-<input type="hidden" name="hidden" value="1234567890"/>
-]]>	
-		</assert-output>
-		
-		<assert-output name="HiddenWithID">
-<![CDATA[
-<input type="hidden" name="hiddenWithID" id="0987654321" value="1234567890-with id"/>
-]]>	
-		</assert-output>
-
-		<assert-output name="HiddenWithEncoding">
-<![CDATA[
-<input type="hidden" name="hiddenWithEncoding" value="S1234567890-with encoding"/>
-]]>	
-		</assert-output>
-
-	</request>
-	
-	<request>
-		<parameter name="service" value="direct/0/Home/$Form"/>
-		<parameter name="sp" value="S0"/>
-		<parameter name="hidden" value="updated-1234567890"/>
-		<parameter name="hiddenWithID" value="updated-1234567890-with id"/>
-		<parameter name="hiddenWithEncoding" value="Supdated-1234567890-with encoding"/>
-		<parameter name="hiddenBoolean" value="T"/>
-		<parameter name="Form0" value="hidden,hiddenWithID,hiddenWithEncoding,hiddenBoolean"/>
-		
-		<assert-output name="Page Title">
-<![CDATA[
-<title>Two</title>
-]]>
-		</assert-output>
-			
-		<assert-output name="Value">
-Value: [updated-1234567890]
-		</assert-output>
-		
-		<assert-output name="Hidden">
-HiddenID: [0987654321]
-		</assert-output>
-		
-		<assert-output name="Hidden">
-HiddenWithEncoding: [updated-1234567890-with encoding]
-		</assert-output>
-	</request>
-	
-	<!--request>
-		<parameter name="service" value="direct/0/Home/$Form"/>
-		<parameter name="sp" value="S0"/>
-		<parameter name="hidden" value="updated-1234567890"/>
-		<parameter name="hiddenWithID" value="updated-1234567890-with id"/>
-		<parameter name="hiddenWithEncoding" value="Supdated-1234567890-with encoding"/>
-		<parameter name="hiddenBoolean" value="123"/>
-		<parameter name="Form0" value="hidden,hiddenWithID,hiddenWithEncoding,hiddenBoolean"/>
-		
-		<assert-output name="Page Title">
-<![CDATA[
-<title>Exception</title>
-]]>
-		</assert-output>
-	</request-->
-</mock-test>
\ No newline at end of file
diff --git a/3.0.4/junit/mock-scripts/TestHome.xml b/3.0.4/junit/mock-scripts/TestHome.xml
deleted file mode 100644
index 5f2ab2d..0000000
--- a/3.0.4/junit/mock-scripts/TestHome.xml
+++ /dev/null
@@ -1,60 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!-- $Id$ -->
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<mock-test>
-    <context name="mock"/>
-
-  	<servlet name="app" class="org.apache.tapestry.ApplicationServlet">
-  		<init-parameter
-  			name="org.apache.tapestry.application-specification"
-  			value="/org/apache/tapestry/junit/mock/app/Mock.application"/>
-  	</servlet>      
-    
-    <!-- Check that the home service is the default service. -->
-    
-    <request>
-    			
-		<assert-output name="English Blurb">
-If it's not Scottish, it's crap!
-		</assert-output>
-	</request>		
-
-	<request>
-	  	<parameter name="service" value="page/Assets"/>
-		
-		<assert-output name="Home Link">
-<![CDATA[		
-href="/mock/app?service=home"		
-]]>
-		</assert-output>
-	
-	</request>
-	
-<!-- Double check that home service works when named. -->
-	
-	<request>
-	  	<parameter name="service" value="home"/>
-		
-		<assert-output name="English Blurb">
-If it's not Scottish, it's crap!
-		</assert-output>
-				
-	</request>	
-			 	 	 
-</mock-test>
-    	
diff --git a/3.0.4/junit/mock-scripts/TestImplicitComponents.xml b/3.0.4/junit/mock-scripts/TestImplicitComponents.xml
deleted file mode 100644
index d9acb22..0000000
--- a/3.0.4/junit/mock-scripts/TestImplicitComponents.xml
+++ /dev/null
@@ -1,57 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!-- $Id$ -->
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<mock-test>
-    <context name="mock"/>
-
-  	<servlet name="app" class="org.apache.tapestry.ApplicationServlet">
-  		<init-parameter
-  			name="org.apache.tapestry.application-specification"
-  			value="/org/apache/tapestry/junit/mock/app/Mock.application"/>
-  	</servlet>
-       
-    <request>
-    	<parameter name="service" value="page/ImplicitComponents"/>
- 	
- 	
- 		<assert-output name="Implicit Body component">
-<![CDATA[
-<title>Implicit Components</title>
-]]> 		
- 		</assert-output>
- 		
- 	
-	  	<assert-output name="Implicit Insert component">
-<![CDATA[
-Application Name: JUnit Mock Application	
-]]>
-		</assert-output> 	
-					
- 	    <assert-output-matches name="Foreach output" subgroup="1">
-<![CDATA[
-<li>\s*(.*?)\s*</li>
-]]>
-			<match>Alpha</match>
-			<match>Beta</match>
-			<match>Gamma</match>					
-		</assert-output-matches>
-	</request>
-			
-
-</mock-test>
-    	
diff --git a/3.0.4/junit/mock-scripts/TestIncompatibleDirectionAndBinding.xml b/3.0.4/junit/mock-scripts/TestIncompatibleDirectionAndBinding.xml
deleted file mode 100644
index 9d4dd8a..0000000
--- a/3.0.4/junit/mock-scripts/TestIncompatibleDirectionAndBinding.xml
+++ /dev/null
@@ -1,42 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!-- $Id$ -->
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- Test connecting a static (invariant) binding to a parameter with direction form
-	   (which does not allow invariant bindings). -->
-
-<mock-test>
-   <context name="c30" root="context30"/>
-
-  	<servlet name="app" class="org.apache.tapestry.ApplicationServlet"/>
-    
-    <request>
-    	
-	  	<assert-output name="Page Title">
-<![CDATA[
-<title>Exception</title>
-]]>
-		</assert-output>
-				
-		<assert-output>
-Parameter value of component Home/selectUser is direction form which is incompatible with StaticBinding[selectedUser].
-		</assert-output>
-	
-	</request>
-			
-</mock-test>
-    	
diff --git a/3.0.4/junit/mock-scripts/TestInheritInformalParameters.xml b/3.0.4/junit/mock-scripts/TestInheritInformalParameters.xml
deleted file mode 100644
index 9e9b0b5..0000000
--- a/3.0.4/junit/mock-scripts/TestInheritInformalParameters.xml
+++ /dev/null
@@ -1,94 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!-- $Id$ -->
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<mock-test>
-    <context name="c24" root="context24"/>
-
-  	<servlet name="inheritInformal" class="org.apache.tapestry.ApplicationServlet"/>
-
-	<request>
-		<assert-output name="Page Title">
-<![CDATA[
-<title>Home</title>
-]]>
-		</assert-output>
-		
-		<assert-output name="src">
-		src="http://the.wall/"
-		</assert-output>
-		
-		<assert-output name="border">
-		border="0"
-		</assert-output>
-		
-		<assert-output name="width">
-		width="250"
-		</assert-output>
-		
-		<assert-output name="height">
-		height="150"
-		</assert-output>
-		
-		<assert-output name="length">
-		length="350"
-		</assert-output>
-
-		<assert-no-output name="no-border">
-		border="7"
-		</assert-no-output>
-
-		<assert-no-output name="no-src">
-		src="testSrc"
-		</assert-no-output>
-
-		<assert-no-output name="no-class">
-		class="testClass"
-		</assert-no-output>
-	</request>
-	
-	
-	<request>
-		<parameter name="service" value="page/Two"/>	
-		
-		<assert-output name="Title">
-<![CDATA[
-<title>Exception</title>
-]]>	
-		</assert-output>
-		
-		<assert-output name="Message">
-		Component Two/$BadBlock.block allows only formal parameters, but has inherit-informal-parameters set.	
-		</assert-output>
-	</request>
-	
-	
-	<request>
-		<parameter name="service" value="page/Three"/>	
-		
-		<assert-output name="Title">
-<![CDATA[
-<title>Exception</title>
-]]>	
-		</assert-output>
-		
-		<assert-output name="Message">
-		Component Three/$BadImage allows only formal parameters, but it contains component Three/$BadImage.image that has inherit-informal-parameters set.
-		</assert-output>
-	</request>
-	
-</mock-test>
\ No newline at end of file
diff --git a/3.0.4/junit/mock-scripts/TestLibrary.xml b/3.0.4/junit/mock-scripts/TestLibrary.xml
deleted file mode 100644
index 2a5a451..0000000
--- a/3.0.4/junit/mock-scripts/TestLibrary.xml
+++ /dev/null
@@ -1,164 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!-- $Id$ -->
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<mock-test>
-    <context name="junit"/>
-
-  	<servlet name="mock" class="org.apache.tapestry.ApplicationServlet">
-  		<init-parameter
-  			name="org.apache.tapestry.application-specification"
-  			value="/org/apache/tapestry/junit/mock/app/Mock.application"/>
-  	</servlet>
-  	
-  	<request>
-	  	
-  	  <assert-output name="Page Title">
-<![CDATA[  	  
-<title>Mock App Home Page</title>
-]]>
-  	  </assert-output>
-  	  	  	
-  	  <assert-output name="DirectLink with parameters">
-<![CDATA[  	  
-  	  <a href="/junit/mock?service=direct/0/Home/link&amp;sp=2&amp;sp=d3.5&amp;sp=SHello">
-]]>
-  	  </assert-output>
-  	  	  	
- 	  <assert-output-matches name="Page structure" subgroup="1">
-<![CDATA[
-<(/?\w+)(\s*\w+=".*?")*\s*/?>
-]]>
-		<match>html</match>
-		<match>head</match>
-		<match>meta</match>
-		<match>title</match>
-		<match>/title</match>
-		<match>link</match>
-		<match>/head</match>
-		<match>body</match>	
-				
-		<!-- Generated by the ServiceLink -->
-		
-		<match>a</match>
-		<match>/a</match>
-		
-		<!-- This ugliness is care of TestLocalization, which is why
-			 I started doing lots of little tiny contexts, so the tests
-			 wouldn't interfere with each other.  -->
-			 
-		<match>foo</match>
-		<match>/foo</match>
-		
-		<match>/body</match>
-		<match>/html</match>		
-	  </assert-output-matches>
-  	  	  
- 
-  </request>
-  
-  <request>
-  	<parameter name="service" value="direct/0/Home/link"/>
-  	<parameter name="sp">
-  		<value>2</value>
-  		<value>d3.5</value>
-  		<value>Hello</value>
-  	</parameter>
-		
-	<assert-output-matches name="Cells" subgroup="1">
-<![CDATA[
-<td>(.*?)</td>
-]]>
-		<match>0</match>
-		<match>java.lang.Integer</match>
-		<match>2</match>
-		
-		<match>1</match>
-		<match>java.lang.Double</match>
-		<match>3.5</match>
-		
-		<match>2</match>
-		<match>java.lang.String</match>
-		<match>Hello</match>
-	
-	</assert-output-matches>
-	
-  	  <assert-output name="PageLink (for library page).">
-<![CDATA[  	  
-  	  <a href="/junit/mock?service=page/lib:Dumper">
-]]>
-  	  </assert-output>	
-	
-	<assert name="HttpSession created">
-	request.session != null
-	</assert>
-	
-  </request>
-  
-  <!-- Click the "refresh" link and check that the persistent state is still there. -->
-  
-  <request>
-  	<parameter name="service" value="page/lib:Dumper"/>
-  	
-  	<assert-output-matches name="Cells (after refresh)" subgroup="1">
-<![CDATA[
-<td>(.*?)</td>
-]]>
-		<match>0</match>
-		<match>java.lang.Integer</match>
-		<match>2</match>
-		
-		<match>1</match>
-		<match>java.lang.Double</match>
-		<match>3.5</match>
-		
-		<match>2</match>
-		<match>java.lang.String</match>
-		<match>Hello</match>
-	
-	</assert-output-matches>
-	
-  </request>
-  
-
-  <!-- Return to the Home page, ensure that the DirectLink renders the stateful flag. -->
-  
-  <request>
-	
-  	  <assert-output name="Page Title">
-<![CDATA[  	  
-<title>Mock App Home Page</title>
-]]>
-  	  </assert-output>
-	
-  	  <assert-output name="DirectLink with parameters">
-<![CDATA[  	  
-  	  <a href="/junit/mock?service=direct/1/Home/link&amp;sp=2&amp;sp=d3.5&amp;sp=SHello">
-]]>
-  	  </assert-output>
-  </request>
-
-  <request>
-  	<parameter name="service" value="page/lib:Properties"/>
-  	
-  	<assert-output name="Page Name">
-  	Page Name: [lib:Properties]	
-  	</assert-output>
-	
-  </request>	
-  	
-</mock-test>
\ No newline at end of file
diff --git a/3.0.4/junit/mock-scripts/TestLibraryInWebInfApplication.xml b/3.0.4/junit/mock-scripts/TestLibraryInWebInfApplication.xml
deleted file mode 100644
index 0f305f2..0000000
--- a/3.0.4/junit/mock-scripts/TestLibraryInWebInfApplication.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!-- $Id$ -->
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<mock-test>
-    <context name="c4" root="context4"/>
-
-  	<servlet name="foo" class="org.apache.tapestry.ApplicationServlet"/>
-       
-    <request>
- 		
- 		<assert-output name="Page Title">
-<![CDATA[
-<title>App Spec in WEB-INF</title>
-]]> 		
- 		</assert-output>
- 		
- 		<assert-output name="Application Name">
-Application name: Application foo in WEB-INF
- 		</assert-output>
- 		
- 		<assert-output name="Engine Class">
-Engine class: org.apache.tapestry.junit.mock.c4.C4Engine
-		</assert-output>
-		
- 	</request>
-			
-</mock-test>
-    	
diff --git a/3.0.4/junit/mock-scripts/TestLinkRenderers.xml b/3.0.4/junit/mock-scripts/TestLinkRenderers.xml
deleted file mode 100644
index 2b21266..0000000
--- a/3.0.4/junit/mock-scripts/TestLinkRenderers.xml
+++ /dev/null
@@ -1,125 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!-- $Id$ -->
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<mock-test>
-    <context name="c10" root="context10"/>
-
-  	<servlet name="app" class="org.apache.tapestry.ApplicationServlet"/>
-  	
-  	<request>
-  		
-  		<assert-output name="Page Title">
-<![CDATA[
-<title>Home</title>
-]]>  		
-  		</assert-output>
-  		
-  		<assert-output name="First Link">
-<![CDATA[
-<a href="/c10/app?service=direct/0/Home/first">First</a>
-]]>  		
-  		</assert-output>
-  	
-	
-  		<assert-output name="Second Link">
-<![CDATA[
-<a href="http://junit-test/c10/app?service=direct/0/Home/second">Second</a>
-]]>  		
-  		</assert-output>	  	  		
-  		
-  		<assert-output name="Configured Values">
-  		
-  		Expecting: https://myserver:8080
-  			
-  		</assert-output>
-  		
-  		<assert-output name="Third Link">
-<![CDATA[
-<a href="https://myserver:8080/c10/app?service=direct/0/Home/third#myanchor">Third</a>
-]]>  		
-  		</assert-output>	
-  	  
-  		<assert-output name="Fourth Link">
-  	[Fourth]	
-  		</assert-output>	
-  	  		
-  	  		
-  	</request>
-  	
-  	<request>
-  		<parameter name="service" value="page/Two"/>
-  			
-  		<assert-output name="Page Title">
-<![CDATA[
-<title>Exception</title>
-]]>	
-  		</assert-output>
-  			
-  		<assert-output name="Message">
- 		ILinkComponents may not be nested. 			
-  		</assert-output>
-  			
-  	</request>
-  	
-  	<!-- Check that ensures links with event handlers are inside a Body. -->
-  	
-  	<request>
-  		<parameter name="service" value="page/Three"/>
-  		
-  		<assert-output name="Page Title">
-<![CDATA[
-<title>Exception</title>
-]]>	
-  		</assert-output>
-  			
-  		<assert-output name="Message">
- 		A link component with multiple functions for a single event type must be contained within a Body.		
-  		</assert-output>
-  		  			
-  	</request>
-  	
-  	<!-- Test same thing on a page with a Body -->
-  	
-  	<request>
-  		<parameter name="service" value="page/Four"/>
-  		
-  		<assert-output name="Page Title">
-<![CDATA[
-<title>Four</title>
-]]>	
-  		</assert-output>
-  			
-  		<assert-output name="Composite Method">
-function onClick_Link ()
-{
-  eventHandler1();
-  eventHandler2();
-  eventHandler3();
-}  		
-		</assert-output>
-		
-		<assert-output name="Link">
-<![CDATA[
-<a href="/c10/app?service=direct/0/Four/link" onClick="javascript:onClick_Link();">
-]]>	
-		</assert-output>
-  		  			
-  		  			
-  	</request>  	
-  	
-</mock-test>
\ No newline at end of file
diff --git a/3.0.4/junit/mock-scripts/TestListEdit.xml b/3.0.4/junit/mock-scripts/TestListEdit.xml
deleted file mode 100644
index 9036353..0000000
--- a/3.0.4/junit/mock-scripts/TestListEdit.xml
+++ /dev/null
@@ -1,169 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!-- $Id$ -->
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<mock-test>
-    <context name="c14" root="context14"/>
-
-  	<servlet name="app" class="org.apache.tapestry.ApplicationServlet"/>
-
-	<request>
-		<parameter name="service" value="page/ListEdit"/>
-		
-		<assert-output name="Page Title">
-<![CDATA[
-<title>ListEdit</title>
-]]>	
-		</assert-output>
-		
-		<assert-output-matches name="Hidden Fields" subgroup="1">
-<![CDATA[
-<input type="hidden" (name="(.*?)" value="(.*?)")/>
-]]>
-			<match>name="service" value="direct/0/ListEdit/form"</match>
-			<match>name="sp" value="S0"</match>
-			<match>name="Form0" value="e,inputColor,inputColor$0,inputColor$1"</match>			
-			<match>name="e" value="SClothing"</match>
-			<match>name="e" value="SEye Color"</match>
-			<match>name="e" value="SFood"</match>
-		</assert-output-matches>
-
-	
-		<assert-output-matches name="Selected Options">
-<![CDATA[
-<option value=".*?" selected="selected">.*?</option>
-]]>
-			<match><![CDATA[ <option value="4" selected="selected">Black</option> ]]></match>
-			<match><![CDATA[ <option value="2" selected="selected">Blue</option> ]]></match>
-			<match><![CDATA[ <option value="0" selected="selected">Red</option> ]]></match>
-				
-		</assert-output-matches>
-	</request>
-	
-	<request>
-		<parameter name="service" value="direct/0/ListEdit/form"/>
-		<parameter name="sp" value="S0"/>
-		<parameter name="e">
-			<value>Clothing</value>
-			<value>SEye Color</value>
-			<value>SFood</value>
-		</parameter>
-		<parameter name="inputColor" value="3"/>
-		<parameter name="inputColor$0" value="0"/>
-		<parameter name="inputColor$1" value="2"/>
-		<parameter name="Form0" value="e,inputColor,inputColor$0,inputColor$1"/>
-		
-		<assert-output name="Page Title">
-<![CDATA[
-<title>ListEdit Results</title>
-]]>	
-		</assert-output>
-		
-		<assert-output-matches name="Selected Colors" subgroup="1">
-<![CDATA[
-<td>(.*?)</td>
-]]>
-			<match>Yellow</match>
-			<match>Red</match>
-			<match>Blue</match>
-		</assert-output-matches>
-	</request>	
-	
-	<!-- Hack the submission so that one of the values passed up can't be unsqueezed. -->
-	
-	<request>
-		<parameter name="service" value="direct/0/ListEdit/form"/>
-		<parameter name="sp" value="S0"/>
-		<parameter name="e">
-			<value>3Clothing</value>
-			<value>SEye Color</value>
-			<value>SFood</value>
-		</parameter>
-		<parameter name="inputColor" value="3"/>
-		<parameter name="inputColor$0" value="0"/>
-		<parameter name="inputColor$1" value="2"/>
-		<parameter name="Form0" value="e,inputColor,inputColor$0,inputColor$1"/>
-		
-		<assert-output name="Page Title">
-<![CDATA[
-<title>Exception</title>
-]]>	
-		</assert-output>
-		
-		<assert-output name="Exception">
-		org.apache.tapestry.ApplicationRuntimeException
-		</assert-output>
-		
-		<!-- JDK 1.4 changes this message to:
-			   		For input string: "3Clothing"	
-			   -->
-		<assert-output name="Outer Message">
-		3Clothing	
-		</assert-output>
-		
-		<assert-output name="Inner Exception">
-		java.lang.NumberFormatException			
-		</assert-output>
-
-	</request>		
-	
-	<!-- Test the index and listener parameters, and using an array
-		 as the source. -->
-	
-	<request>
-		<parameter name="service" value="page/ListEditArray"/>
-		
-		<assert-output name="Page Title">
-<![CDATA[
-<title>ListEdit Array</title>
-]]>				
-		</assert-output>
-		
-		<assert-output-matches name="Hidden Fields" subgroup="1">
-<![CDATA[
-<input type="hidden" (name="(.*?)" value="(.*?)")/>
-]]>
-			<match>name="service" value="direct/0/ListEditArray/$ListEditForm.$Form"</match>
-			<match>name="sp" value="S0"</match>
-			<match>name="Form0" value="e"</match>			
-			<match>name="e" value="SFred"</match>
-			<match>name="e" value="SDino"</match>
-			<match>name="e" value="SWilma"</match>
-		</assert-output-matches>			
-	</request>
-	
-	<!-- Test where the ListEdit gets a null source. -->
-	
-	<request>
-		<parameter name="service" value="page/ListEditNull"/>
-		
-		<assert-output name="Page Title">
-<![CDATA[
-<title>ListEdit Null</title>
-]]>				
-		</assert-output>
-		
-		<assert-output-matches name="Hidden Fields" subgroup="1">
-<![CDATA[
-<input type="hidden" (name="(.*?)" value="(.*?)")/>
-]]>
-			<match>name="service" value="direct/0/ListEditNull/$ListEditForm.$Form"</match>
-			<match>name="sp" value="S0"</match>
-			<match>name="Form0" value="e"</match>
-		</assert-output-matches>			
-	</request>	
-</mock-test>
\ No newline at end of file
diff --git a/3.0.4/junit/mock-scripts/TestListenerBinding.xml b/3.0.4/junit/mock-scripts/TestListenerBinding.xml
deleted file mode 100644
index e45093d..0000000
--- a/3.0.4/junit/mock-scripts/TestListenerBinding.xml
+++ /dev/null
@@ -1,141 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!-- $Id$ -->
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<mock-test>
-    <context name="c7" root="context7"/>
-
-  	<servlet name="lb" class="org.apache.tapestry.ApplicationServlet"/>
-  	
-
-	<request>
-  	 	<parameter name="service" value="page/Two"/>
-  	  	  	
-		<assert-output name="Page Title">
-<![CDATA[		
-<title>Listener Binding</title>
-]]>
-		</assert-output>
-  	  	  	
-		<assert-output name="Initial Message">
-Message: No message.
-		</assert-output>
-	
-		<assert-output name="Link">
-<![CDATA[		
-/c7/lb?service=direct/0/Two/link
-]]>
-		</assert-output>
- 
-  	</request>
-  
-	<request>
-		<parameter name="service" value="direct/0/Two/link"/>
-  		
- 		<assert-output name="Page Title">
-<![CDATA[		
-<title>Listener Binding</title>
-]]>
-		</assert-output>
-  	  	  	
-		<assert-output name="Updated Message">
-Message: Component was clicked.
-		</assert-output>
-	</request> 		
-  
-	<request>
-  	 	<parameter name="service" value="reset/Two"/>
-  	  	  	
-		<assert-output name="Page Title">
-<![CDATA[		
-<title>Listener Binding</title>
-]]>
-		</assert-output>
-  	  	  	
-		<assert-output name="Initial Message">
-Message: No message.
-		</assert-output>	
-	</request>
-
-	<request>
-		<parameter name="service" value="direct/0/Two/link"/>
-  		
- 		<assert-output name="Page Title">
-<![CDATA[		
-<title>Listener Binding</title>
-]]>
-		</assert-output>
-  	  	  	
-		<assert-output name="Updated Message">
-Message: Component was clicked.
-		</assert-output>
-		
-		<assert-output name="invalidScriptLink URL">
-<![CDATA[
-/c7/lb?service=direct/0/Two/invalidScriptLink
-]]>
-		</assert-output>
-		
-		<assert-output name="unknownLanguageLink URL">
-<![CDATA[
-/c7/lb?service=direct/0/Two/unknownLanguageLink
-]]>
-		</assert-output>	
-				
-	</request> 		
-	  
-	<!--  Trigger a case where the script to execute is invalid. -->
-	
-	<request>
-		<parameter name="service" value="direct/0/Two/invalidScriptLink"/>
-	
- 		<assert-output name="Page Title">
-<![CDATA[		
-<title>Exception</title>
-]]>
-		</assert-output>
-		
-		<assert-output name="Invalid Script Error Message part 1">
-		Unable to execute listener script "context:/WEB-INF/Two.page, line 33
-		</assert-output>		
-
-		<assert-output name="Invalid Script Error Message part 2">
-		exception from Jython
-		</assert-output>		
-	</request>
-
-	<!-- Trigger a case where the script language is not defined. -->
-
-	<request>
-		<parameter name="service" value="direct/0/Two/unknownLanguageLink"/>
-	
- 		<assert-output name="Page Title">
-<![CDATA[		
-<title>Exception</title>
-]]>
-		</assert-output>
-		
-		<assert-output name="Unknown Language Error Message part 1">
-			Unable to execute listener script "context:/WEB-INF/Two.page, line 43
-		</assert-output>		
-
-		<assert-output name="Unknown Language Error Message part 2">
-			unsupported language: DoesNotExist
-		</assert-output>		
-	</request>
-			  
- </mock-test>
\ No newline at end of file
diff --git a/3.0.4/junit/mock-scripts/TestLocalization.xml b/3.0.4/junit/mock-scripts/TestLocalization.xml
deleted file mode 100644
index e40d87a..0000000
--- a/3.0.4/junit/mock-scripts/TestLocalization.xml
+++ /dev/null
@@ -1,146 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!-- $Id$ -->
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-
-
-<mock-test>
-    <context name="mock"/>
-
-  	<servlet name="app" class="org.apache.tapestry.ApplicationServlet">
-  		<init-parameter
-  			name="org.apache.tapestry.application-specification"
-  			value="/org/apache/tapestry/junit/mock/app/Mock.application"/>
-  	</servlet>      
-    
-    <request>
-    	
-	  	<assert-output name="English Language Check">
--- in English
-		</assert-output>
-		
-		<assert-output name="English Blurb">
-If it's not Scottish, it's crap!
-		</assert-output>
-		
-		<assert-output name="English Foo-Bar">
-<![CDATA[
-<foo bar="Totally Screwed!">
-]]>	
-		</assert-output>
-	</request>		
-
-    <request locale="fr">
-    	
-	  	<assert-output name="French Language Check">
--- in French
-		</assert-output>
-		
-		<assert-output name="French Blurb">
-Zees ees nawt cheeze!
-		</assert-output>
-		
-		<assert-output name="French Foo-Bar">
-<![CDATA[
-<foo bar="Merde!">
-]]>	
-		</assert-output>
-		
-			</request>
-
-	<request>
-	  	<parameter name="service" value="page/Assets"/>
-		
-		<assert-output name="English Home image">
-<![CDATA[		
-/mock/app?service=asset&amp;sp=S%2Forg%2Fapache%2Ftapestry%2Fjunit%2Fmock%2Fapp%2Fhome.png		
-]]>
-		</assert-output>
-		
-		<assert-output name="English Back image">
-/mock/images/back.png
-		</assert-output>	
-		
-		<assert-output name="DirectLink switch URL">
-<![CDATA[		
-href="/mock/app?service=direct/0/Assets/switch"
-]]>
-		</assert-output>	
-	</request>
-	
-	<request locale="fr">
-	  	<parameter name="service" value="page/Assets"/>
-		
-		<assert-output name="French Home image">
-<![CDATA[		
-/mock/app?service=asset&amp;sp=S%2Forg%2Fapache%2Ftapestry%2Fjunit%2Fmock%2Fapp%2Fhome_fr.png		
-]]>
-		</assert-output>
-		
-		<assert-output name="French Back image">
-/mock/images/back_fr.png
-		</assert-output>	
-		
-		<assert-output name="DirectLink switch URL still stateless">
-<![CDATA[		
-href="/mock/app?service=direct/0/Assets/switch"
-]]>
-		</assert-output>							
-	</request>	
-	
-	
-	<!-- Test ability to switch locales and store a cookie descrbing
-	 	 the locale. -->
-	 	 
-	<request>
-		<parameter name="service" value="direct/0/Assets/switch"/>
-		
-		<!-- Switch sends us back to the Home page, but in French. -->
-		
-		<assert-output name="French Blurb">
-Zees ees nawt cheeze!
-		</assert-output>
-		
-		<assert-cookie name="org.apache.tapestry.locale" value="fr"/>
-
-		<assert-output name="DirectLink switch URL still stateless">
-<![CDATA[		
-href="/mock/app?service=direct/0/Home/link&amp;sp=2&amp;sp=d3.5&amp;sp=SHello"
-]]>
-		</assert-output>			
-	</request>
-		
-	<!-- With the cookie in place, going back to the Assets page should
-		 provide the French version. -->
-		 		
-	<request>
-	  	<parameter name="service" value="page/Assets"/>
-		
-		<assert-output name="French Home image">
-<![CDATA[		
-/mock/app?service=asset&amp;sp=S%2Forg%2Fapache%2Ftapestry%2Fjunit%2Fmock%2Fapp%2Fhome_fr.png		
-]]>
-		</assert-output>
-		
-		<assert-output name="French Back image">
-/mock/images/back_fr.png
-		</assert-output>		
-	</request>		
-			 	 	 
-</mock-test>
-    	
diff --git a/3.0.4/junit/mock-scripts/TestMissingAppSpec.xml b/3.0.4/junit/mock-scripts/TestMissingAppSpec.xml
deleted file mode 100644
index 90ddfd2..0000000
--- a/3.0.4/junit/mock-scripts/TestMissingAppSpec.xml
+++ /dev/null
@@ -1,47 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!-- $Id$ -->
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<mock-test>
-    <context name="c3" root="context3"/>
-
-  	<servlet name="app" class="org.apache.tapestry.ApplicationServlet">
-  		<init-parameter
-  			name="org.apache.tapestry.engine-class"
-  			value="org.apache.tapestry.junit.mock.c3.C3Engine"/>
-  	</servlet>
-       
-    <request>
- 		
- 		<assert-output name="Page Title">
-<![CDATA[
-<title>No Application Spec</title>
-]]> 		
- 		</assert-output>
- 		
- 		<assert-output name="Application Name">
-Application name: app 		
- 		</assert-output>
- 		
- 		<assert-output name="Engine Class">
-Engine class: org.apache.tapestry.junit.mock.c3.C3Engine
-		</assert-output>
-		
- 	</request>
-			
-</mock-test>
-    	
diff --git a/3.0.4/junit/mock-scripts/TestMissingEngine.xml b/3.0.4/junit/mock-scripts/TestMissingEngine.xml
deleted file mode 100644
index adacac4..0000000
--- a/3.0.4/junit/mock-scripts/TestMissingEngine.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!-- $Id$ -->
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<mock-test>
-    <context name="c21" root="context21"/>
-
-  	<servlet name="missing-engine" class="org.apache.tapestry.ApplicationServlet"/>
-
-	<request>
-		
-		<assert-exception name="Result">
-		Could not load class MissingEngineClass
-		</assert-exception>
-		
-	</request>
-</mock-test>
\ No newline at end of file
diff --git a/3.0.4/junit/mock-scripts/TestMissingService.xml b/3.0.4/junit/mock-scripts/TestMissingService.xml
deleted file mode 100644
index 14c277f..0000000
--- a/3.0.4/junit/mock-scripts/TestMissingService.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!-- $Id$ -->
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<mock-test>
-    <context name="c21" root="context21"/>
-
-  	<servlet name="missing-service" class="org.apache.tapestry.ApplicationServlet"/>
-
-	<request>
-		
-		<assert-exception name="Result">
-		Could not load class MissingServiceClass
-		</assert-exception>
-		
-	</request>
-</mock-test>
\ No newline at end of file
diff --git a/3.0.4/junit/mock-scripts/TestOptimizeRootExpressionBinding.xml b/3.0.4/junit/mock-scripts/TestOptimizeRootExpressionBinding.xml
deleted file mode 100644
index 3508bb2..0000000
--- a/3.0.4/junit/mock-scripts/TestOptimizeRootExpressionBinding.xml
+++ /dev/null
@@ -1,72 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!-- $Id$ -->
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-
-
-<mock-test>
-  <context name="c33" root="context33"/>
-    
- 	<servlet name="app" class="org.apache.tapestry.ApplicationServlet"/>
-     
-  <request>
-  
-  	<assert-regexp name="Disabled">
-  	
- <![CDATA[
- Disabled:\s+\[\s+\]
- ]]>
-  		
-  	</assert-regexp>
-  	
-  	<assert-regexp name="Enabled">
-  	
- <![CDATA[
- Enabled:\s+\[\s+\]
- ]]>
-  		
-  	</assert-regexp>  
-  	
-  	<assert-output name="Link">
-<![CDATA[
-service=direct/1/Home/$DirectLink
-]]>  		
-  	</assert-output>	
-  </request>
-  
-  <request>
-  	<parameter name="service" value="direct/1/Home/$DirectLink"/>
-
-  	<assert-regexp name="Disabled">
-  	
- <![CDATA[
- Disabled:\s+\[\s+\]
- ]]>
-  		
-  	</assert-regexp>
-  	
-  	<assert-regexp name="Enabled">
-  	
- <![CDATA[
- Enabled:\s+\[\s*Enabled\s*\]
- ]]>
-  		
-  	</assert-regexp>    	
-  		
-  </request>
-</mock-test>
\ No newline at end of file
diff --git a/3.0.4/junit/mock-scripts/TestOutputEncoding.xml b/3.0.4/junit/mock-scripts/TestOutputEncoding.xml
deleted file mode 100644
index fb50c33..0000000
--- a/3.0.4/junit/mock-scripts/TestOutputEncoding.xml
+++ /dev/null
@@ -1,82 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!-- $Id$ -->
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<mock-test>
-    <context name="c28" root="context28"/>
-
-  	<servlet name="latin1" class="org.apache.tapestry.ApplicationServlet"/>
-
-	<request>
-		<parameter name="service" value="direct/0/Home/$DirectLink"/>
-	  	<parameter name="sp">
-	  		<value>STwo</value>
-	  		<value>Ses</value>
-	  	</parameter>
-
-		<assert-output name="Page Title">
-<![CDATA[
-<title>Two</title>
-]]>
-		</assert-output>
-
-		<assert-output name="Charset">
-<![CDATA[
-charset=ISO-8859-1
-]]>
-		</assert-output>
-
-		<assert-output name="Language Name">
-Espa&#241;a
-		</assert-output>
-	</request>
-	
-	
-	<request>
-		<parameter name="service" value="direct/0/Home/$DirectLink"/>
-	  	<parameter name="sp">
-	  		<value>STwo</value>
-	  		<value>Sfr</value>
-	  	</parameter>
-
-		<assert-output name="Page Title">
-<![CDATA[
-<title>Two</title>
-]]>
-		</assert-output>
-
-		<assert-output name="Charset">
-<![CDATA[
-charset=ISO-8859-1
-]]>
-		</assert-output>
-
-		<assert-output name="Language Name">
-<![CDATA[
-Fran&#231;ais
-]]>
-		</assert-output>
-
-		<assert-output name="External Link">
-<![CDATA[
-<a href="/c28/latin1?service=external/Two&amp;sp=SFran%E7ais">
-]]>
-		</assert-output>
-	</request>
-	
-
-</mock-test>
\ No newline at end of file
diff --git a/3.0.4/junit/mock-scripts/TestOverrideDefaultComponentClass.xml b/3.0.4/junit/mock-scripts/TestOverrideDefaultComponentClass.xml
deleted file mode 100644
index 14f5d18..0000000
--- a/3.0.4/junit/mock-scripts/TestOverrideDefaultComponentClass.xml
+++ /dev/null
@@ -1,47 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!-- $Id$ -->
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<mock-test>
-    <context name="c7" root="context7"/>
-
-  	<servlet name="chatty" class="org.apache.tapestry.ApplicationServlet">
-  		<init-parameter
-  			name="org.apache.tapestry.default-page-class"
-  			value="org.apache.tapestry.junit.mock.c7.Home"/>
-  	</servlet>
-  	
-	<request>
-  	  	  	
-  	  	  	
-		<assert-output name="Page Title">
-<![CDATA[		
-<title>Default Class</title>
-]]>
-		</assert-output>
-  	  	  	
-		<assert-output name="Page Class">
-Page class: org.apache.tapestry.junit.mock.c7.Home
-	</assert-output>
-	
-	<assert-output name="Component Class">
-Hello!  I'm Chatty and my class is org.apache.tapestry.BaseComponent
-	</assert-output>
- 
-  </request>
-  
- </mock-test>
\ No newline at end of file
diff --git a/3.0.4/junit/mock-scripts/TestPage.xml b/3.0.4/junit/mock-scripts/TestPage.xml
deleted file mode 100644
index 5eba0e1..0000000
--- a/3.0.4/junit/mock-scripts/TestPage.xml
+++ /dev/null
@@ -1,65 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!-- $Id$ -->
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!-- Fill in some code-coverage gaps in the page service. -->
-
-<mock-test>
-    <context name="mock"/>
-
-  	<servlet name="app" class="org.apache.tapestry.ApplicationServlet">
-  		<init-parameter
-  			name="org.apache.tapestry.application-specification"
-  			value="/org/apache/tapestry/junit/mock/simple/Simple.application"/>
-  	</servlet>
-    
-    <!-- Handle unknown page -->
-    
-    <request>
-    	<parameter name="service" value="page/Qbert"/>
-    	
-	  	<assert-output name="Page Title">
-<![CDATA[
-<title>Exception</title>
-]]>
-		</assert-output>
-				
-		<assert-output>
-Page 'Qbert' not found in application namespace.
-		</assert-output>
-	
-	</request>
-	
-	<request>
-		<parameter name="service" value="page"/>
-		
-	  	<assert-output name="Page Title">
-<![CDATA[
-<title>Exception</title>
-]]>
-		</assert-output>
-		
-<!-- Note: this doesn't seem like the correct message in this situation. -->
-			
-		<assert-output>
-Service page requires exactly one service parameter.
-		</assert-output>
-	</request>		
-		
-</mock-test>
-    	
diff --git a/3.0.4/junit/mock-scripts/TestParameterOverrides.xml b/3.0.4/junit/mock-scripts/TestParameterOverrides.xml
deleted file mode 100644
index 6e5158a..0000000
--- a/3.0.4/junit/mock-scripts/TestParameterOverrides.xml
+++ /dev/null
@@ -1,49 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!-- $Id$ -->
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<mock-test>
-    <context name="c32" root="context32"/>
-
-  	<servlet name="app" class="org.apache.tapestry.ApplicationServlet"/>
-
-	<request>
-		
-		<assert-output name="Static Over Static">
-Static over Static: Pablo Picasso
-		</assert-output>
-
-	</request>
-	
-<!-- Page Two has a component with the same id in the template and in the specification. That 
-	   is an error to be checked for. -->
-	   
-	<request>
-	    	<parameter name="service" value="page/Two"/>
-	    	
-	    	<assert-output name="Page Title">
-<![CDATA[<title>Exception</title>]]>	    		
-	    	</assert-output>
-	    	
-	    	<assert-regexp name="Error Message">
-<![CDATA[
-Component insertPageName \(at context:/Two\.html.*\) conflicts with a prior declaration in the specification \(at context:/WEB-INF/Two\.page.*\)\.
-]]>	    		
-	    	</assert-regexp>
-	</request>
-	
-</mock-test>
\ No newline at end of file
diff --git a/3.0.4/junit/mock-scripts/TestPersistentProperties.xml b/3.0.4/junit/mock-scripts/TestPersistentProperties.xml
deleted file mode 100644
index dc39d50..0000000
--- a/3.0.4/junit/mock-scripts/TestPersistentProperties.xml
+++ /dev/null
@@ -1,359 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!-- $Id$ -->
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<mock-test>
-    <context name="c6" root="context6"/>
-
-  	<servlet name="app" class="org.apache.tapestry.ApplicationServlet">
-  		<init-parameter name="org.apache.tapestry.engine-class"
-  					value="org.apache.tapestry.junit.mock.c6.C6Engine"/>
-  	</servlet>
-       
-    <request>
- 		
- 		<assert-output name="Page Title">
-<![CDATA[
-<title>Peristant Page Property</title>
-]]> 		
- 		</assert-output>
- 		
- 		<assert-output name="Initial Message">
-Message: Hello
- 		</assert-output>
- 		
- 		<assert-output name="Initial Active Page Names">
-Active page names: [] 		
-		</assert-output>
-			
-		<assert-output name="Change Message Link">
-<![CDATA[		
-/c6/app?service=direct/0/Home/$DirectLink		
-]]>
-		</assert-output>				
-		
-		<assert-expression name="Check No Session"
-			expression="request.session == null"/>
- 	</request>
-			
-	<!-- Now, trigger the link. -->
-	
-	<request>
-		<parameter name="service" value="direct/0/Home/$DirectLink"/>
-		
- 		<assert-output name="Page Title">
-<![CDATA[
-<title>Peristant Page Property</title>
-]]> 		
- 		</assert-output>
- 		
- 		<assert-output name="Changed Message">
-Message: Changed
- 		</assert-output>
- 		
- 		<assert-output name="Active Page Names">
-Active page names: [Home] 		
-		</assert-output>
-								
-		<assert name="Session Attribute">
-	    request.session.getAttribute("app/Home/message").equals("Changed")
-		</assert>
-					
-	</request>
-	
-	<!-- Return to the page, check for the change.  -->
-	
-	<request>
- 		<assert-output name="Page Title">
-<![CDATA[
-<title>Peristant Page Property</title>
-]]> 		
- 		</assert-output>
- 		
- 		<assert-output name="Changed Message">
-Message: Changed
- 		</assert-output>
- 		
- 		<assert-output name="Active Page Names">
-Active page names: [Home] 		
-		</assert-output>
-	</request>
-	
-	<!-- Simulate a failover. -->
-	
-	<request failover="true">		
- 		<assert-output name="Page Title">
-<![CDATA[
-<title>Peristant Page Property</title>
-]]> 		
- 		</assert-output>
- 		
- 		<assert-output name="Changed Message">
-Message: Changed
- 		</assert-output>
- 		
- 		<assert-output name="Active Page Names">
-Active page names: [Home] 		
-		</assert-output>
-	</request>
-				
-	<!-- Now try page "Two", with the Nested component. -->
-	
-	<request>
-		<parameter name="service" value="page/Two"/>
-
- 		<assert-output name="Page Title">
-<![CDATA[
-<title>Peristant Component Property</title>
-]]> 		
- 		</assert-output>
- 		
- 		<assert-output name="Initial Nested Message">
-Nested Message: Nested
- 		</assert-output>
- 		
- 		<assert-output name="Initial Active Page Names">
-Active page names: [Home] 		
-		</assert-output>
-			
-		<assert-output name="Change Message Link">
-<![CDATA[		
-/c6/app?service=direct/1/Two/$Nested.$DirectLink		
-]]>
-		</assert-output>				
-
-	</request>		
-		
-	<!-- Trigger the link in the nested component. -->
-	
-	<request>
-		<parameter name="service" value="direct/1/Two/$Nested.$DirectLink"/>
-		
- 		<assert-output name="Page Title">
-<![CDATA[
-<title>Peristant Component Property</title>
-]]> 		
- 		</assert-output>
- 		
- 		<assert-output name="Changed Nested Message">
-Nested Message: Changed
- 		</assert-output>
- 		
- 		<!-- This is going to be a little pain because we can't count on the
- 		 	 ordering!  May need to put some kind of sort filter in place in the
- 		 	 presentation.  -->
- 		 	 
- 		<assert-output name="Changed Active Page Names">
-Active page names: [Home, Two] 		
-		</assert-output>				
-		
-		<assert name="Session Attribute">
-		request.session.getAttribute("app/Two/$Nested/message").equals("Changed")
-		</assert>		
-					
-	</request>
-	
-	<!-- Check that it works on a revisit. -->
-	
-	<request>
-		<parameter name="service" value="page/Two"/>
-		
- 		<assert-output name="Page Title">
-<![CDATA[
-<title>Peristant Component Property</title>
-]]> 		
- 		</assert-output>
- 		
- 		<assert-output name="Changed Active Page Names">
-Active page names: [Home, Two] 		
-		</assert-output>	
-		 		
- 		<assert-output name="Changed Nested Message">
-Nested Message: Changed
- 		</assert-output>
-	</request>
-		
-	<!-- Check that it works after a failover. -->
-	
-	<request failover="true">
-		<parameter name="service" value="page/Two"/>
-		
- 		<assert-output name="Page Title">
-<![CDATA[
-<title>Peristant Component Property</title>
-]]> 		
- 		</assert-output>
- 		
- 		<assert-output name="Changed Active Page Names">
-Active page names: [Home, Two] 		
-		</assert-output>	
-		 		
- 		<assert-output name="Changed Nested Message">
-Nested Message: Changed
- 		</assert-output>
-	</request>	
-
-				
-	<!-- Now, test that all sorts of variations on fireObservedChange() work with
-	     different overloaded types. -->
-	     
-	<request>
-		<parameter name="service" value="page/Four"/>
-		
- 		<assert-output name="Page Title">
-<![CDATA[
-<title>Property Types</title>
-]]> 		
- 		</assert-output>	
- 		
- 		 <assert-output name="Boolean">
-Boolean value: false		
- 		</assert-output>
- 		
- 		<assert-output name="Char">
-Char value: [ ]
-		</assert-output>
-		
- 		 <assert-output name="Byte">
-Byte value: 0		
- 		</assert-output>
- 		
- 		 <assert-output name="Short">
-Short value: 0		
- 		</assert-output>
- 		
- 		 <assert-output name="Int">
-Int value: 0		
- 		</assert-output>
- 		 		
- 		 <assert-output name="Long">
-Long value: 0		
- 		</assert-output>
- 		
- 		 <assert-output name="Float">
-Float value: 0.0		
- 		</assert-output>
- 		
- 		 <assert-output name="Double">
-Double value: 0.0	
- 		</assert-output>
- 		
- 		<assert-output name="StringHolder">
-StringHolder value: []
-		</assert-output> 		
- 		
- 		<assert-output name="Create Link">
-<![CDATA[
-/c6/app?service=direct/1/Four/$DirectLink
-]]>	
-		</assert-output>
-		
- 	</request>			     									
- 	
- 	
- 	<!-- Trigger the link to create values. -->
- 	
- 	<request>
- 		<parameter name="service" value="direct/1/Four/$DirectLink"/>
- 		
- 		<assert-output name="Page Title">
-<![CDATA[
-<title>Property Types</title>
-]]> 		
- 		</assert-output>	
- 		
- 		 <assert-output name="Boolean">
-Boolean value: true
- 		</assert-output>
- 		
- 		<assert-output name="Char">
-Char value: [H]
-		</assert-output>
-		
- 		 <assert-output name="Byte">
-Byte value: 27
- 		</assert-output>
- 				
- 		 <assert-output name="Short">
-Short value: 127
- 		</assert-output>
- 		
- 		 <assert-output name="Int">
-Int value: 23		
- 		</assert-output>
- 		 		
- 		 <assert-output name="Long">
-Long value: 1234567890123		
- 		</assert-output>
- 		
- 		 <assert-output name="Float">
-Float value: -1.5		
- 		</assert-output>
- 		
- 		 <assert-output name="Double">
-Double value: 3.142857142857143	
- 		</assert-output>
-
- 		<assert-output name="StringHolder">
-StringHolder value: [StringHolder[Surprise!]]
-		</assert-output> 	
-	</request>
-	
-	<!-- And return to ensure that values are properly restored. -->
-	
-	<request failover="true">
-		<parameter name="service" value="page/Four"/>
-		
- 		 <assert-output name="Boolean">
-Boolean value: true
- 		</assert-output>
- 		
- 		<assert-output name="Char">
-Char value: [H]
-		</assert-output>
-		
- 		 <assert-output name="Byte">
-Byte value: 27
- 		</assert-output>
- 				
- 		 <assert-output name="Short">
-Short value: 127
- 		</assert-output>
-
- 		 <assert-output name="Int">
-Int value: 23		
- 		</assert-output>
- 		 		
- 		 <assert-output name="Long">
-Long value: 1234567890123		
- 		</assert-output>
- 		
- 		 <assert-output name="Float">
-Float value: -1.5		
- 		</assert-output>
- 		
- 		 <assert-output name="Double">
-Double value: 3.142857142857143	
- 		</assert-output>	
- 		
- 		<assert-output name="StringHolder">
-StringHolder value: [StringHolder[Surprise!]]
-		</assert-output> 	 			
-	</request>
-	
-</mock-test>
-    	
diff --git a/3.0.4/junit/mock-scripts/TestPropertySpecification.xml b/3.0.4/junit/mock-scripts/TestPropertySpecification.xml
deleted file mode 100644
index 871013a..0000000
--- a/3.0.4/junit/mock-scripts/TestPropertySpecification.xml
+++ /dev/null
@@ -1,448 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!-- $Id$ -->
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<mock-test>
-	
-	<!-- Accidentally named this once context upper-case, and it's a pain to fix
-		 it because of how NT handles case and filenames. -->
-		 
-    <context name="c9" root="Context9"/>
-
-  	<servlet name="app" class="org.apache.tapestry.ApplicationServlet"/>
-
-	<request>
-  	  	  	  	  	 	
-		<assert-output name="Page Title">
-<![CDATA[		
-<title>Home</title>
-]]>
-		</assert-output>
-  	  	  	
-		<assert-output name="Initial Value">
-Initial value: []
-		</assert-output>
-	
-		<assert-output name="Final Value">
-Final value: [boy]
-		</assert-output>
-			
-		<assert-output-matches name="List Items" subgroup="1">
-<![CDATA[
-<li>(.*?)</li>
-]]>
-			<match>Gromit</match>
-			<match>is</match>
-			<match>a</match>
-			<match>good</match>
-			<match>boy</match>
-		</assert-output-matches>
- 
-		<assert-regexp name="Page Class">
-<![CDATA[
-Page class: \[org\.apache\.tapestry\.html\.BasePage\$(.*?)\]
-]]>	
-		</assert-regexp>
- 
- 
-	</request>
-	
-
-	<request>
-  	  	  	  	  	 	
-		<assert-output name="Page Title">
-<![CDATA[		
-<title>Home</title>
-]]>
-		</assert-output>
-  	  	  	
-		<assert-output name="Initial Value">
-Initial value: []
-		</assert-output>
-	
-		<assert-output name="Final Value">
-Final value: [boy]
-		</assert-output>
-			
-		<assert-output-matches name="List Items" subgroup="1">
-<![CDATA[
-<li>(.*?)</li>
-]]>
-			<match>Gromit</match>
-			<match>is</match>
-			<match>a</match>
-			<match>good</match>
-			<match>boy</match>
-		</assert-output-matches>
-	</request>
-	
-	<request> 
-		<parameter name="service" value="page/Two"/>	  	  	  	  	 	
- 	  	  	
-		<assert-output name="Page Title">
-<![CDATA[		
-<title>Two</title>
-]]>
-		</assert-output>
-		 	  	  	
-		<assert-output name="Initial Value">
-Initial value: [15]
-		</assert-output>
-	
-		<assert-output name="Final Value">
-Final value: [8]
-		</assert-output>
-
-		<assert-output-matches name="List Items" subgroup="1">
-<![CDATA[
-<li>(.*?)</li>
-]]>
-			<match>2</match>
-			<match>4</match>
-			<match>6</match>
-			<match>8</match>
-		</assert-output-matches>			
-	</request>	
-	
-	<request> 
-		<parameter name="service" value="page/Two"/>	  	  	  	  	 	
- 	  	  	
-		<assert-output name="Page Title">
-<![CDATA[		
-<title>Two</title>
-]]>
-		</assert-output>
-		 	  	  	
-		<assert-output name="Initial Value">
-Initial value: [15]
-		</assert-output>
-	
-		<assert-output name="Final Value">
-Final value: [8]
-		</assert-output>
-			
-	</request>	
-	
-	<request>
-  	  	<parameter name="service" value="page/Three"/>
-  	  		  	  	 	
-		<assert-output name="Page Title">
-<![CDATA[		
-<title>Three</title>
-]]>
-		</assert-output>
-  	  	  	
-		<assert-output name="Initial Value">
-Initial value: [Tapestry]
-		</assert-output>
-	
-		<assert-output name="Final Value">
-Final value: [Taxi]
-		</assert-output>
-			
-		<assert-output-matches name="List Items" subgroup="1">
-<![CDATA[
-<li>(.*?)</li>
-]]>
-			<match>Crazy</match>
-			<match>Taxi</match>
-		</assert-output-matches>
- 
-		<assert-regexp name="Page Class">
-<![CDATA[
-Page class: \[org\.apache\.tapestry\.junit\.mock\.c9\.Three\$(.*?)\]
-]]>	
-		</assert-regexp>
- 
- 
-	</request>	
-	
-	<request>
-  	  	<parameter name="service" value="page/Three"/>
-  	  		  	  	 	
-		<assert-output name="Page Title">
-<![CDATA[		
-<title>Three</title>
-]]>
-		</assert-output>
-  	  	  	
-		<assert-output name="Initial Value">
-Initial value: [Tapestry]
-		</assert-output>
-	
-		<assert-output name="Final Value">
-Final value: [Taxi]
-		</assert-output>
-	</request>
-		
-	<!-- Page Four includes an non-abstract accessor for the property, so it will
-	     cause an exception. -->
-	     		
-	<request>
-  	  	<parameter name="service" value="page/Four"/>
-  	  		  	  	 	
-		<assert-output name="Page Title">
-<![CDATA[		
-<title>Exception</title>
-]]>			
-		</assert-output>
-		
-		<assert-output name="Exception Message">
-Unable to enhance class org.apache.tapestry.junit.mock.c9.Four because it implements a non-abstract write method for property 'word'.
-		</assert-output>		
-		
-	</request>		
-	
-	<request>
-  	  	<parameter name="service" value="page/Five"/>
-  	  		  	  	 	
-		<assert-output name="Page Title">
-<![CDATA[		
-<title>Exception</title>
-]]>			
-		</assert-output>
-		
-		<assert-output name="Exception Message">
-Unable to enhance class org.apache.tapestry.junit.mock.c9.Five because it implements a non-abstract read method for property 'word'.
-		</assert-output>		
-		
-	</request>		
-	
-	<!-- This test is about making sure the property type in the specification matches
-		 the actual property type (if the class declares abstract accessor methods). -->
-		 
-	<request> 
-		<parameter name="service" value="page/Six"/>	  	  	  	  	 	
- 	  	  	
-		<assert-output name="Page Title">
-<![CDATA[		
-<title>Exception</title>
-]]>
-		</assert-output>
-		
-		<assert-output name="Exception Message">
-Unable to enhance class org.apache.tapestry.junit.mock.c9.Six because it contains property 'value' of type int, not the expected type long.
-		</assert-output>		
-
-	</request>			
-	
-	<request>
-		<parameter name="service" value="page/Seven"/>
-		
-		<assert-output name="Page Title">
-<![CDATA[
-<title>Seven</title>
-]]>
-		</assert-output>
-		
-		<assert-output-matches name="Values" subgroup="1">
-<![CDATA[
-value: \[(.*?)\]
-]]>
-			<match>true</match>
-			<match>65</match>
-			<match>Z</match>
-			<match>97</match>
-			<match>100</match>
-			<match>32000000</match>
-			<match>-22.7</match>
-			<match>3.2</match>
-			<match>Magic</match>
-		</assert-output-matches>		
-		
-		<assert-output name="Link">
-<![CDATA[
-/c9/app?service=direct/0/Seven/$DirectLink		
-]]>
-		</assert-output>
-	</request>	
-	
-	<!-- Trigger the link and check for the changes in the page, and in persistent storage. -->
-	
-	<request>
-		<parameter name="service" value="direct/0/Seven/$DirectLink"/>
-		
-		
-		<assert-output name="Page Title">
-<![CDATA[
-<title>Seven</title>
-]]>
-		</assert-output>
-		
-		<assert-output-matches name="Values" subgroup="1">
-<![CDATA[
-value: \[(.*?)\]
-]]>
-			<match>false</match>
-			<match>81</match>
-			<match>f</match>
-			<match>21</match>
-			<match>3097</match>
-			<match>132000001</match>
-			<match>-202.2</match>
-			<match>9.87</match>
-			<match>Marker</match>
-		</assert-output-matches>		
-		
-		<assert-output name="Link">
-<![CDATA[
-/c9/app?service=direct/1/Seven/$DirectLink		
-]]>
-		</assert-output>	
-		
-		<assert name="Persistent booleanValue">
-		request.session.getAttribute("app/Seven/booleanValue") == false
-		</assert>
-		
-		<assert name="Persistent byteValue">
-		request.session.getAttribute("app/Seven/byteValue") == 81
-		</assert>
-		
-		<assert name="Persistent charValue">
-		request.session.getAttribute("app/Seven/charValue") == 'f'
-		</assert>
-		
-		<assert name="Persistent shortValue">
-		request.session.getAttribute("app/Seven/shortValue") == 21
-		</assert>
-		
-		<assert name="Persistent intValue">
-		request.session.getAttribute("app/Seven/intValue") == 3097
-		</assert>
-		
-		<assert name="Persistent longValue">
-		request.session.getAttribute("app/Seven/longValue") == 132000001
-		</assert>
-		
-		<assert name="Persistent floatValue">
-		request.session.getAttribute("app/Seven/floatValue") == -202.2f
-		</assert>
-		
-		<assert name="Persistent doubleValue">
-		request.session.getAttribute("app/Seven/doubleValue") == 9.87
-		</assert>
-		
-		<assert name="Persistent stringValue">
-		request.session.getAttribute("app/Seven/stringValue") == "Marker"
-		</assert>
-		 	
-	</request>
-		
-	<!-- Test an abstract page that includes an abstract method that
-		 isn't implemented. -->
-		 
-	<request>
-		<parameter name="service" value="page/Eight"/>
-			
-		<assert-output name="Title">
-<![CDATA[
-<title>Exception</title
-]]>	
-		</assert-output>
-		
-		<assert-output name="Message">
-		Method 'public abstract long org.apache.tapestry.junit.mock.c9.Eight.setEnhancedProperty(long)' (declared in class org.apache.tapestry.junit.mock.c9.Eight) has no implementation in class org.apache.tapestry.junit.mock.c9.Eight (or enhanced subclass org.apache.tapestry.junit.mock.c9.Eight$
-		</assert-output>
-	</request>
-
-	<request>
-		<parameter name="service" value="page/Nine"/>
-			
-		<assert-output name="Title">
-<![CDATA[
-<title>Exception</title
-]]>	
-		</assert-output>
-		
-		<assert-output name="Message">
-		Method 'public abstract void org.apache.tapestry.junit.mock.c9.Nine.pageDetached(org.apache.tapestry.event.PageEvent)' (declared in class org.apache.tapestry.junit.mock.c9.Nine) has no implementation in class org.apache.tapestry.junit.mock.c9.Nine (or enhanced subclass org.apache.tapestry.junit.mock.c9.Nine$	
-		</assert-output>
-	</request>
-	
-	<request>
-		<parameter name="service" value="page/Ten"/>
-		
-		<assert-output name="Title">
-<![CDATA[
-<title>Ten</title>
-]]>	
-		</assert-output>
-		
-		<assert-output name="Long Value">
-		Long value: [123456]	
-		</assert-output>	
-	</request>
-	
-	<request>
-		<parameter name="service" value="page/Eleven"/>
-		
-		<assert-output name="Title">
-<![CDATA[
-<title>Eleven</title>
-]]>	
-		</assert-output>
-		
-		<assert-output name="Two">
-		en_US is the US locale
-		</assert-output>	
-
-		<assert-output name="Three">
-		de_DE is the Germany locale
-		</assert-output>	
-
-		<assert-output name="Five">
-		it_IT is the Italy locale
-		</assert-output>	
-	</request>	
-
-	<request>
-		<parameter name="service" value="page/Twelve"/>
-		
-		<assert-output name="Title">
-<![CDATA[
-<title>Twelve</title>
-]]>	
-		</assert-output>
-		
-		<assert-output name="Two">
-		Variable initial value = 0
-		</assert-output>	
-		
-		<assert-output name="Two">
-		Constant initial value = 5
-		</assert-output>	
-	</request>	
-
-	<request>
-		<parameter name="service" value="page/Twelve"/>
-		
-		<assert-output name="Title">
-<![CDATA[
-<title>Twelve</title>
-]]>	
-		</assert-output>
-		
-		<assert-output name="Two">
-		Variable initial value = 1
-		</assert-output>	
-		
-		<assert-output name="Two">
-		Constant initial value = 5
-		</assert-output>	
-	</request>	
- </mock-test>
- 
\ No newline at end of file
diff --git a/3.0.4/junit/mock-scripts/TestProtectedLink.xml b/3.0.4/junit/mock-scripts/TestProtectedLink.xml
deleted file mode 100644
index 285fc52..0000000
--- a/3.0.4/junit/mock-scripts/TestProtectedLink.xml
+++ /dev/null
@@ -1,127 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!-- $Id$ -->
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!-- Tests DirectCallback -->
-
-<mock-test>
-    <context name="mock"/>
-  	
-    <servlet name="app" class="org.apache.tapestry.ApplicationServlet">
-  		<init-parameter
-  			name="org.apache.tapestry.application-specification"
-  			value="/org/apache/tapestry/junit/mock/app/Mock.application"/>
-  	</servlet>
-  		
-  	<!--  Get a view of the page -->
-  	
-	<request>
-  		<parameter name="service" value="page/ProtectedLink"/>
-  		
-  		<assert-output name="Title">
-<![CDATA[
-<title>ProtectedLink</title>
-]]>
-		</assert-output>
-		
-		<assert-output name="Link URL">
-<![CDATA[
-href="/mock/app?service=direct/0/ProtectedLink/link&amp;sp=6&amp;sp=13&amp;sp=1999"
-]]>
-		</assert-output>
-  		
-	</request>
-	
-	<request>
-		<parameter name="service" value="direct/0/ProtectedLink/link"/>
-		<parameter name="sp">
-			<value>6</value>
-			<value>13</value>
-			<value>1999</value>
-		</parameter>  		
-  		
-  		<assert-output name="Title">
-<![CDATA[
-<title>Guard</title>
-]]>
-		</assert-output>
-		
-		<assert-output name="Link URL">
-<![CDATA[
-href="/mock/app?service=direct/1/Guard/link"
-]]>
-		</assert-output>
-		
-		<assert-output name="Callback">
-<![CDATA[
-Callback: DirectCallback[ProtectedLink/link 6, 13, 1999]
-]]>		
-		</assert-output>		
-  	</request>
-  	
-  	<!-- Simulate clicking the Guard page link, which should send the
-  	     user to the Protected page.  -->
-  	     
-  	<request>
-  		<parameter name="service" value="direct/1/Guard/link"/>
-  		
-  		<assert-output name="Title">
-<![CDATA[
-<title>ProtectedLink: Result</title>
-]]>
-		</assert-output>
-		
-		<assert-output-matches name="Parameters" subgroup="1">
-<![CDATA[
-<li>(.*?)</li>
-]]>
-			<match>6</match>
-			<match>13</match>
-			<match>1999</match>
-		</assert-output-matches>
-
-	</request>
-		  	
-	<!-- Go back and click the original link now that the Guard
-	 	 page has been visited. -->		  	
-		  	
-  	<request>
-		<parameter name="service" value="direct/1/ProtectedLink/link"/>
-		<parameter name="sp">
-			<value>6</value>
-			<value>13</value>
-			<value>1999</value>
-		</parameter>  
-		  		
-  		<assert-output name="Title">
-<![CDATA[
-<title>ProtectedLink: Result</title>
-]]>
-		</assert-output>
-		
-		<assert-output-matches name="Parameters" subgroup="1">
-<![CDATA[
-<li>(.*?)</li>
-]]>
-			<match>6</match>
-			<match>13</match>
-			<match>1999</match>
-		</assert-output-matches>
-
-	</request>		  	
-</mock-test>
\ No newline at end of file
diff --git a/3.0.4/junit/mock-scripts/TestRadio.xml b/3.0.4/junit/mock-scripts/TestRadio.xml
deleted file mode 100644
index e644fcf..0000000
--- a/3.0.4/junit/mock-scripts/TestRadio.xml
+++ /dev/null
@@ -1,427 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!-- $Id$ -->
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<mock-test>
-    <context name="c18" root="context18"/>
-
-  	<servlet name="app" class="org.apache.tapestry.ApplicationServlet"/>
-
-	<request>
-		
-		<assert-output name="Page Title">
-<![CDATA[
-<title>Home</title>
-]]>	
-		</assert-output>
-		
-		<assert-output-matches name="Radio Fields">
-<![CDATA[
-<input type="radio" .*?> \w+
-]]>
-			<match><![CDATA[<input type="radio" name="$RadioGroup" value="0"/> Small]]></match>
-			<match><![CDATA[<input type="radio" name="$RadioGroup" checked="checked" value="1"/> Medium]]></match>
-			<match><![CDATA[<input type="radio" name="$RadioGroup" value="2"/> Large]]></match>
-			<match><![CDATA[<input type="radio" name="$RadioGroup" disabled="disabled" value="3"/> Gargantuan]]></match>
-									
-		</assert-output-matches>
-		
-		<assert-output name="Size Field">
-		Size: [20]	
-		</assert-output>
-
-	</request>
-	
-	<!-- Pretend to click the "Large" button. -->
-	
-	<request>
-		<parameter name="service" value="direct/0/Home/$Form"/>
-		<parameter name="sp" value="S0"/>
-		<parameter name="$RadioGroup" value="2"/>
-		<parameter name="Form0" value="$RadioGroup"/>
-		
-		<assert-output name="Page Title">
-<![CDATA[
-<title>Home</title>
-]]>	
-		</assert-output>
-		
-		<assert-output-matches name="Radio Fields">
-<![CDATA[
-<input type="radio" .*?> \w+
-]]>
-			<match><![CDATA[<input type="radio" name="$RadioGroup" value="0"/> Small]]></match>
-			<match><![CDATA[<input type="radio" name="$RadioGroup" value="1"/> Medium]]></match>
-			<match><![CDATA[<input type="radio" name="$RadioGroup" checked="checked" value="2"/> Large]]></match>
-			<match><![CDATA[<input type="radio" name="$RadioGroup" disabled="disabled" value="3"/> Gargantuan]]></match>
-									
-		</assert-output-matches>
-		
-		<assert-output name="Size Field">
-		Size: [30]	
-		</assert-output>
-
-	</request>
-
-	<!-- Submit with no option selected. -->
-	
-	<request>
-		<parameter name="service" value="direct/0/Home/$Form"/>
-		<parameter name="sp" value="S0"/>
-		<parameter name="Form0" value="$RadioGroup"/>
-		
-		<assert-output name="Page Title">
-<![CDATA[
-<title>Home</title>
-]]>	
-		</assert-output>
-		
-		<assert-output-matches name="Radio Fields">
-<![CDATA[
-<input type="radio" .*?> \w+
-]]>
-			<match><![CDATA[<input type="radio" name="$RadioGroup" value="0"/> Small]]></match>
-			<match><![CDATA[<input type="radio" name="$RadioGroup" checked="checked" value="1"/> Medium]]></match>
-			<match><![CDATA[<input type="radio" name="$RadioGroup" value="2"/> Large]]></match>
-			<match><![CDATA[<input type="radio" name="$RadioGroup" disabled="disabled" value="3"/> Gargantuan]]></match>
-									
-		</assert-output-matches>
-		
-		<assert-output name="Size Field">
-		Size: [20]	
-		</assert-output>
-
-	</request>
-
-	<!-- Pretend to click the "Gargantuan" button (even though it is disabled). -->
-	
-	<request>
-		<parameter name="service" value="direct/0/Home/$Form"/>
-		<parameter name="sp" value="S0"/>
-		<parameter name="$RadioGroup" value="3"/>
-		<parameter name="Form0" value="$RadioGroup"/>
-		
-		<assert-output name="Page Title">
-<![CDATA[
-<title>Home</title>
-]]>	
-		</assert-output>
-		
-		<assert-output-matches name="Radio Fields">
-<![CDATA[
-<input type="radio" .*?> \w+
-]]>
-			<match><![CDATA[<input type="radio" name="$RadioGroup" value="0"/> Small]]></match>
-			<match><![CDATA[<input type="radio" name="$RadioGroup" checked="checked" value="1"/> Medium]]></match>
-			<match><![CDATA[<input type="radio" name="$RadioGroup" value="2"/> Large]]></match>
-			<match><![CDATA[<input type="radio" name="$RadioGroup" disabled="disabled" value="3"/> Gargantuan]]></match>
-									
-		</assert-output-matches>
-		
-		<assert-output name="Size Field">
-		Size: [20]	
-		</assert-output>
-
-	</request>
-
-	<!-- Click the dummy form (using action service). -->
-	
-	<request>
-		<parameter name="service" value="action/0/Home/1/dummy"/>
-		<parameter name="sp" value="S0"/>
-		<parameter name="Form1" value=""/>
-		
-		<assert-output name="Page Title">
-<![CDATA[
-<title>Home</title>
-]]>	
-		</assert-output>
-		
-		<assert-output-matches name="Radio Fields">
-<![CDATA[
-<input type="radio" .*?> \w+
-]]>
-			<match><![CDATA[<input type="radio" name="$RadioGroup" value="0"/> Small]]></match>
-			<match><![CDATA[<input type="radio" name="$RadioGroup" checked="checked" value="1"/> Medium]]></match>
-			<match><![CDATA[<input type="radio" name="$RadioGroup" value="2"/> Large]]></match>
-			<match><![CDATA[<input type="radio" name="$RadioGroup" disabled="disabled" value="3"/> Gargantuan]]></match>
-									
-		</assert-output-matches>
-		
-		<assert-output name="Size Field">
-		Size: [20]	
-		</assert-output>
-
-	</request>
-
-	<!-- Click the link to disable the group. -->
-	
-	<request>
-		<parameter name="service" value="direct/0/Home/$DirectLink"/>
-		
-		<assert-output name="Page Title">
-<![CDATA[
-<title>Home</title>
-]]>	
-		</assert-output>
-		
-		<assert-output-matches name="Radio Fields">
-<![CDATA[
-<input type="radio" .*?> \w+
-]]>
-			<match><![CDATA[<input type="radio" name="$RadioGroup" disabled="disabled" value="0"/> Small]]></match>
-			<match><![CDATA[<input type="radio" name="$RadioGroup" checked="checked" disabled="disabled" value="1"/> Medium]]></match>
-			<match><![CDATA[<input type="radio" name="$RadioGroup" disabled="disabled" value="2"/> Large]]></match>
-			<match><![CDATA[<input type="radio" name="$RadioGroup" disabled="disabled" value="3"/> Gargantuan]]></match>
-									
-		</assert-output-matches>
-		
-		<assert-output name="Size Field">
-		Size: [20]	
-		</assert-output>
-			
-	</request>
-	
-	<!-- Select the (now disabled) large value. -->
-	<request>
-		<parameter name="service" value="direct/0/Home/$Form"/>
-		<parameter name="sp" value="S0"/>
-		<parameter name="$RadioGroup" value="2"/>
-		<parameter name="Form0" value="$RadioGroup"/>
-		
-		<assert-output name="Page Title">
-<![CDATA[
-<title>Home</title>
-]]>	
-		</assert-output>
-		
-		<assert-output-matches name="Radio Fields">
-<![CDATA[
-<input type="radio" .*?> \w+
-]]>
-			<match><![CDATA[<input type="radio" name="$RadioGroup" disabled="disabled" value="0"/> Small]]></match>
-			<match><![CDATA[<input type="radio" name="$RadioGroup" checked="checked" disabled="disabled" value="1"/> Medium]]></match>
-			<match><![CDATA[<input type="radio" name="$RadioGroup" disabled="disabled" value="2"/> Large]]></match>
-			<match><![CDATA[<input type="radio" name="$RadioGroup" disabled="disabled" value="3"/> Gargantuan]]></match>
-									
-		</assert-output-matches>
-		
-		<assert-output name="Size Field">
-		Size: [20]	
-		</assert-output>
-		
-	</request>
-	
-	<request>
-		<parameter name="service" value="page/NestedGroups"/>
-		
-		<assert-output name="Page Title">
-<![CDATA[
-<title>Exception</title>
-]]>
-		</assert-output>
-		
-		<assert-output name="Exception Name">
-		org.apache.tapestry.ApplicationRuntimeException
-		</assert-output>
-		
-		<assert-output name="Exception Messge">
-		RadioGroup components may not be nested.
-		</assert-output>
-		
-		<assert-output name="Component Id">
-		[NestedGroups/inner]
-		</assert-output>
-	</request>
-	
-	<request>
-		<parameter name="service" value="page/NoGroup"/>
-		
-		<assert-output name="Page Title">
-<![CDATA[
-<title>Exception</title>
-]]>
-		</assert-output>
-		
-		<assert-output name="Exception Name">
-		org.apache.tapestry.ApplicationRuntimeException
-		</assert-output>
-		
-		<assert-output name="Exception Messge">
-		Radio component must be contained within a RadioGroup.
-		</assert-output>
-		
-		<assert-output name="Component Id">
-		[NoGroup/orphan]
-		</assert-output>
-	</request>
-	
-	<request>
-		<parameter name="service" value="page/NoForm"/>
-		
-		<assert-output name="Page Title">
-<![CDATA[
-<title>Exception</title>
-]]>
-		</assert-output>
-		
-		<assert-output name="Exception Name">
-		org.apache.tapestry.ApplicationRuntimeException
-		</assert-output>
-		
-		<assert-output name="Exception Messge">
-		This component must be contained within a Form.
-		</assert-output>
-		
-		<assert-output name="Component Id">
-		[NoForm/orphan]
-		</assert-output>
-	</request>
-	
-<!-- Now some tests to check for handling of null as the current selection of a RadioGroup. -->
-
-	<request>
-			<parameter name="service" value="page/NullSelection"/>
-			
-			<assert-output name="Page Title">
-<![CDATA[<title>NullSelection</title>]]>	
-			</assert-output>
-			
-			<assert-output name="No Choice">
-<![CDATA[<input type="radio" name="group" checked="checked" value="0"/> No Choice]]>				
-			</assert-output>
-			
-			<assert-output name="Tapestry">
-<![CDATA[<input type="radio" name="group" value="1"/> Tapestry]]>				
-			</assert-output>
-
-			<assert-output name="Struts">
-<![CDATA[<input type="radio" name="group" value="2"/> Struts]]>				
-			</assert-output>
-			
-			<assert-output name="WebWork">
-<![CDATA[<input type="radio" name="group" value="3"/> WebWork]]>				
-			</assert-output>
-			
-			<assert-output name="Selection">
-Framework: []
-			</assert-output>
-					
-	</request>
-	
-	<!-- Submit the form. -->
-	
-	<request>
-		<parameter name="service" value="direct/1/NullSelection/$Form"/>
-		<parameter name="sp" value="S0"/>
-		<parameter name="Form0" value="group"/>
-		<parameter name="group" value="1"/>
-		
-			<assert-output name="No Choice">
-<![CDATA[<input type="radio" name="group" value="0"/> No Choice]]>				
-			</assert-output>
-					
-			<assert-output name="Tapestry">
-<![CDATA[<input type="radio" name="group" checked="checked" value="1"/> Tapestry]]>				
-			</assert-output>
-
-			<assert-output name="Struts">
-<![CDATA[<input type="radio" name="group" value="2"/> Struts]]>				
-			</assert-output>
-			
-			<assert-output name="WebWork">
-<![CDATA[<input type="radio" name="group" value="3"/> WebWork]]>				
-			</assert-output>
-			
-			<assert-output name="Selection">
-Framework: [tapestry]
-			</assert-output>		
-	</request>
-	
-	<!-- Submit the form with *no* selection for group. -->
-	<request>
-	  <parameter name="service" value="direct/1/NullSelection/$Form"/>
-		<parameter name="sp" value="S0"/>
-		<parameter name="Form0" value="group"/>	
-
-			<assert-output name="No Choice">
-<![CDATA[<input type="radio" name="group" checked="checked" value="0"/> No Choice]]>				
-			</assert-output>
-			
-			<assert-output name="Tapestry">
-<![CDATA[<input type="radio" name="group" value="1"/> Tapestry]]>				
-			</assert-output>
-
-			<assert-output name="Struts">
-<![CDATA[<input type="radio" name="group" value="2"/> Struts]]>				
-			</assert-output>
-			
-			<assert-output name="WebWork">
-<![CDATA[<input type="radio" name="group" value="3"/> WebWork]]>				
-			</assert-output>
-			
-			<assert-output name="Selection">
-Framework: []
-			</assert-output>
-		
-		</request>			
-		
-		<request>
-			<parameter name="service" value="page/LanguageSelection"/>
-			
-		<assert-output name="Selected Language">
-		Selected Language: []
-		</assert-output>
-		
-		<assert-output name="Java">
-<![CDATA[<input type="radio" name="group" value="0"/> Java]]>					
-		</assert-output>
-
-		<assert-output name="C#">
-<![CDATA[<input type="radio" name="group" value="1"/> C#]]>					
-		</assert-output>
-			
-		<assert-output name="C#">
-<![CDATA[<input type="radio" name="group" value="2"/> Python]]>					
-		</assert-output>			
-		</request>
-		
-		<request>
-			<parameter name="service" value="direct/1/LanguageSelection/form"/>
-			<parameter name="sp" value="S0"/>
-			<parameter name="Form0" value="group"/>
-			<parameter name="group" value="2"/>
-			
-
-		<assert-output name="Selected Language">
-		Selected Language: [Language[PYTHON]]
-		</assert-output>
-		
-		<assert-output name="Java">
-<![CDATA[<input type="radio" name="group" value="0"/> Java]]>					
-		</assert-output>
-
-		<assert-output name="C#">
-<![CDATA[<input type="radio" name="group" value="1"/> C#]]>					
-		</assert-output>
-			
-		<assert-output name="C#">
-<![CDATA[<input type="radio" name="group" checked="checked" value="2"/> Python]]>					
-		</assert-output>			
-		</request>
-			
-</mock-test>
\ No newline at end of file
diff --git a/3.0.4/junit/mock-scripts/TestRedirect.xml b/3.0.4/junit/mock-scripts/TestRedirect.xml
deleted file mode 100644
index c664049..0000000
--- a/3.0.4/junit/mock-scripts/TestRedirect.xml
+++ /dev/null
@@ -1,197 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!-- $Id$ -->
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-
-
-<mock-test>
-    <context name="mock" root="context13"/>
-
-  	<servlet name="app" class="org.apache.tapestry.ApplicationServlet"/>
-
-	<request>
-	
-		<assert-output name="Page Title">
-<![CDATA[
-<title>Home</title>
-]]>		
-		</assert-output>	
-	
-		<assert-output name="Internal Redirect Link">
-<![CDATA[
-href="/mock/app?service=direct/0/Home/internal"
-]]>	
-		</assert-output>	
-		
-		<assert-output name="External Redirect Link">
-<![CDATA[
-href="/mock/app?service=direct/0/Home/external"
-]]>	
-		</assert-output>	
-	
-		<assert-output name="Null Redirect Link">
-<![CDATA[
-href="/mock/app?service=direct/0/Home/null"
-]]>	
-		</assert-output>	
-		
-		<assert-output name="Servlet Exception Redirect Link">
-<![CDATA[
-href="/mock/app?service=direct/0/Home/servletException"
-]]>	
-		</assert-output>	
-		
-		
-		<assert-output name="Missing Redirect Link">
-<![CDATA[
-href="/mock/app?service=direct/0/Home/missing"
-]]>	
-		</assert-output>	
-
-		<assert-output name="Index Redirect Link">
-<![CDATA[
-href="/mock/app?service=direct/0/Home/index"
-]]>	
-		</assert-output>	
-		
-		<assert-output name="Fail External Redirect Link">
-<![CDATA[
-href="/mock/app?service=direct/0/Home/failExternal"
-]]>	
-		</assert-output>	
-				
-	</request>
-	
-		
-	<request>
-		<parameter name="service" value="direct/0/Home/internal"/>
-		
-		<assert-output name="Page Title">
-<![CDATA[
-<title>Warning</title>
-]]>			
-		</assert-output>
-		
-		<assert-output name="Message">
-This page is static, forwarded to by the Tapestry application.		
-		</assert-output>
-	</request>
-	
-	<request>
-		<parameter name="service" value="direct/0/Home/external"/>
-		
-		<assert name="Redirect Location">
-		
-		response.redirectLocation.equals("http://jakarta.apache.org/tapestry")
-			
-		</assert>
-	</request>
-	
-	
-	<request>
-		<parameter name="service" value="direct/0/Home/null"/>
-		
-		<assert-output name="Page Title">
-<![CDATA[
-<title>Exception</title>
-]]>					
-		</assert-output>
-		
-		<assert-output name="Message">
-		Unable to find a request dispatcher for local resource 'NULL'.
-		</assert-output>
-	</request>
-	
-	
-	<request>
-		<parameter name="service" value="direct/0/Home/servletException"/>
-		
-		<assert-output name="Page Title">
-<![CDATA[
-<title>Exception</title>
-]]>					
-		</assert-output>
-		
-		<assert-output name="Exception Message">
-		Unable to forward to local resource 'FAIL_SERVLET'.
-		</assert-output>
-		
-		<assert-output name="Servlet Exception Message">
-		Test-directed ServletException from RequestDispatcher forward().
-		</assert-output>
-				
-	</request>
-		
-	<request>
-		<parameter name="service" value="direct/0/Home/missing"/>
-		
-		<assert-output name="Page Title">
-<![CDATA[
-<title>Exception</title>
-]]>					
-		</assert-output>
-		
-		<assert-output name="Exception Message">
-		Unable to forward to local resource 'Missing.html'.
-		</assert-output>
-		
-		<assert-output name="FileNotFoundException">
-		java.io.FileNotFoundException	
-		</assert-output>
-				
-	</request>
-
-	<request>
-		<parameter name="service" value="direct/0/Home/index"/>
-		
-		<assert-output name="Page Title">
-<![CDATA[
-<title>Index Page</title>
-]]>			
-		</assert-output>	
-			<assert-output name="Message">
-<![CDATA[			
-<a href="app">Tapestry Application</a>
-]]>	
-		</assert-output>
-	</request>
-
-		
-	<request>
-		<parameter name="service" value="direct/0/Home/failExternal"/>
-		
-		<assert-output name="Page Title">
-<![CDATA[
-<title>Exception</title>
-]]>					
-		</assert-output>
-		
-		<assert-output name="Exception Message">
-		Unable to redirect to http://somehost/FAIL_IO.
-		</assert-output>
-		
-		<assert-output name="IOException">
-		java.io.IOException	
-		</assert-output>
-				
-		<assert-output name="IOException message.">
-		Forced IOException in MockResponse.sendRedirect().	
-		</assert-output>
-	</request>			
-</mock-test>
-    	
diff --git a/3.0.4/junit/mock-scripts/TestRegisterForm.xml b/3.0.4/junit/mock-scripts/TestRegisterForm.xml
deleted file mode 100644
index e69eb27..0000000
--- a/3.0.4/junit/mock-scripts/TestRegisterForm.xml
+++ /dev/null
@@ -1,234 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!-- $Id$ -->
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!-- Perform basic code coverage tests of Forms and form-related components using
-     the Register page. -->
-
-<mock-test>
-    <context name="mock"/>
-    <servlet name="app" class="org.apache.tapestry.ApplicationServlet">
-  		<init-parameter
-  			name="org.apache.tapestry.application-specification"
-  			value="/org/apache/tapestry/junit/mock/app/Mock.application"/>
-  	</servlet>
-  	  	
-  	<request>
-  		<parameter name="service" value="page/Register"/>
-  		
-  		<assert-output name="Title">
-<![CDATA[
-		<title>Register</title>
-]]>  		
- 		</assert-output> 			
- 		
-		<assert-output name="Initialization Scripting">
-<![CDATA[
-document.Form0.inputFirstName.focus();
-document.Form0.inputFirstName.select();
-document.Form0.onsubmit = function ()
-{
-
-  return validate_inputFirstName() &&
-    validate_inputLastName();
-}
-
-]]>
-		</assert-output>
-		
-		<assert-output-matches name="Hidden Fields - Names" subgroup="1">
-<![CDATA[
-<input type="hidden" name="(.*?)" value="(.*?)"/>
-]]>
-			<match>service</match>
-			<match>sp</match>
-			<match>Form0</match>
-		</assert-output-matches>
-				
-		<assert-output-matches name="Hidden Fields - Values" subgroup="2">
-<![CDATA[
-<input type="hidden" name="(.*?)" value="(.*?)"/>
-]]>
-			<match>direct/0/Register/form</match>
-			<match>S0</match>
-			<match>inputFirstName,inputLastName,inputSex,inputAgeRange</match>
-		</assert-output-matches>
-			 	
-		<assert-output-matches name="Text Fields" subgroup="1">
-<![CDATA[
-<input type="text" name="(.*?)" (.*?)/>
-]]>
-			<match>inputFirstName</match>
-			<match>inputLastName</match>	
-		</assert-output-matches>
-		
-		<assert-output name="Radio Button - Male">
-<![CDATA[
-<input type="radio" name="inputSex" checked="checked" value="0"/> Male
-]]>
-		</assert-output>
-		
-		<assert-output name="Radio Button - Female">
-<![CDATA[
-<input type="radio" name="inputSex" value="1"/> Female	
-]]>
-		</assert-output>		
-			
-		<assert-output name="Age Select">
-<![CDATA[
-<select name="inputAgeRange">
-]]>
-		</assert-output>
-		
-		<assert-output-matches name="Option Values" subgroup="1">
-<![CDATA[
-<option value="(.*?)"( selected="selected")?>(.*?)</option>
-]]>
-			<match>0</match>
-			<match>1</match>
-			<match>2</match>
-			<match>3</match>
-			<match>4</match>
-		</assert-output-matches>
-		
-		<assert-output-matches name="Option Labels" subgroup="3">
-<![CDATA[
-<option value="(.*?)"( selected="selected")?>(.*?)</option>
-]]>
-			<match>Child (0 - 9)</match>
-			<match>Teen (10 - 17)</match>
-			<match>Adult (18 - 60)</match>
-			<match>Retiree (61 - 75)</match>
-			<match>Elderly (76+)</match>
-		</assert-output-matches>
-				
-		<assert-output-matches name="Selected Option" subgroup="1">
-<![CDATA[
-<option value="(.*?)" selected="selected"
-]]>
-			<match>2</match>
-		</assert-output-matches>												 		
-  	</request>
-  	
-  	<!-- Provoke an error by "submitting" the form but leaving some fields blank. -->
-  	
-  	<request>
-  		<parameter name="service" value="direct/0/Register/form"/>
-  		<parameter name="sp" value="S0"/>
-  		<parameter name="inputFirstName" value="Suzy"/>
-  		<parameter name="inputLastName" value=""/>
-  		<parameter name="inputSex" value="1"/>
-  		<parameter name="inputAgeRange" value="1"/>
-  		<parameter name="Form0" value="inputFirstName,inputLastName,inputSex,inputAgeRange"/>
-  		
-    		
-  		<assert-output name="Title">
-<![CDATA[
-		<title>Register</title>
-]]>  		
- 		</assert-output>
- 				
-		<assert-regexp name="Error Message">
-<![CDATA[
-<span class="error">\s*You must enter a value for Last Name\.\s*</span>
-]]>  		
- 		</assert-regexp> 				
-
-		<!-- Check that the inputLastName field is the default -->
-		
- 		<assert-output name="Default Field">
-<![CDATA[
-document.Form0.inputLastName.focus();
-document.Form0.inputLastName.select();		 				
-]]>  		
- 		</assert-output>
- 		 				
-  		<assert-output-matches name="Selected Option" subgroup="1">
-<![CDATA[
-<option value="(.*?)" selected="selected"
-]]>
-			<match>1</match>
-		</assert-output-matches>	
-		
-		<assert-output-matches name="Selected Radio" subgroup="1">
-<![CDATA[
-<input type="radio" name="inputSex" checked="checked" value="(.*?)"/>
-]]>
-			<match>1</match>
-		</assert-output-matches>
-		
-<!-- This can be tricky, the order in which the maxlength and size attributes
-     are emitted appears to be somewhat unpredictable between JDKs.
-     We'll need to add alternate tests to check that the values
-     are generated properly.. -->
-     		
-		<assert-regexp name="First Name">
-<![CDATA[
-<input type="text" name="inputFirstName" value="Suzy"(.*?)/>
-]]>
-		</assert-regexp>
-		
-		<assert-regexp name="Last Name">
-<![CDATA[
-<input type="text" name="inputLastName"(.*?)/>&nbsp;<font color="red">\*\*</font>
-]]>
-		</assert-regexp>				
-	</request>
-	
-	<request>
-  		<parameter name="service" value="direct/0/Register/form"/>
-  		<parameter name="sp" value="S0"/>
-  		<parameter name="inputFirstName" value="Suzy"/>
-  		<parameter name="inputLastName" value="Lewis Ship"/>
-  		<parameter name="inputSex" value="1"/>
-  		<parameter name="inputAgeRange" value="2"/>
-  		<parameter name="Form0" value="inputFirstName,inputLastName,inputSex,inputAgeRange"/>	
-  		
-  		
-  		<assert-output name="Title">
-<![CDATA[
-<title>Registration Confirmation</title>
-]]>  		
-		</assert-output>
-		
-		<assert-regexp name="First Name">
-<![CDATA[
-<th>First Name:</th>\s*<td>Suzy</td>
-]]>
-		</assert-regexp>
-		
-		<assert-regexp name="Last Name">
-<![CDATA[
-<th>Last Name:</th>\s*<td>Lewis Ship</td>
-]]>
-		</assert-regexp>	
-		
-		<assert-regexp name="Sex">
-<![CDATA[
-<th>Sex:</th>\s*<td>Female</td>
-]]>
-		</assert-regexp>	
-		
-		<assert-regexp name="Age">
-<![CDATA[
-<th>Age:</th>\s*<td>Adult \(18 \- 60\)</td>
-]]>
-		</assert-regexp>	
-									
-  	</request>		
-</mock-test>	
\ No newline at end of file
diff --git a/3.0.4/junit/mock-scripts/TestRelative.xml b/3.0.4/junit/mock-scripts/TestRelative.xml
deleted file mode 100644
index ead86fb..0000000
--- a/3.0.4/junit/mock-scripts/TestRelative.xml
+++ /dev/null
@@ -1,44 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!-- $Id$ -->
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<mock-test>
-    <context name="c2" root="context2"/>
-
-  	<servlet name="app" class="org.apache.tapestry.ApplicationServlet">
-  		<init-parameter
-  			name="org.apache.tapestry.application-specification"
-  			value="/org/apache/tapestry/junit/mock/c2/C2.application"/>
-  	</servlet>      
-        
-    <request>   
-    	<parameter name="service" value="page/Relative"/>
-    				
-		<assert-output name="Title">
-<![CDATA[
-<title>Relative Page</title>
-]]>
-		</assert-output>		
-
-		<assert-output name="Text from page">
-This page's specification is located relative to the application specification.
-		</assert-output>
-		
-	</request>	
-							 	 	 
-</mock-test>
-    	
diff --git a/3.0.4/junit/mock-scripts/TestRelativeAssets.xml b/3.0.4/junit/mock-scripts/TestRelativeAssets.xml
deleted file mode 100644
index 0ae2db6..0000000
--- a/3.0.4/junit/mock-scripts/TestRelativeAssets.xml
+++ /dev/null
@@ -1,54 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!-- $Id$ -->
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-
-
-<mock-test>
-    <context name="mock"/>
-
-  	<servlet name="app" class="org.apache.tapestry.ApplicationServlet">
-  		<init-parameter
-  			name="org.apache.tapestry.application-specification"
-  			value="/org/apache/tapestry/junit/mock/app/Mock.application"/>
-  	</servlet>      
-    
- 
-	<request>
-	  	<parameter name="service" value="page/RelativeAssets"/>
-		
-		<assert-output name="Page Title">
-<![CDATA[
-<title>Relative Assets</title>
-]]>		
-		</assert-output>
-		
-		<assert-output name="Private Asset">
-<![CDATA[
-/mock/app?service=asset&amp;sp=S%2Forg%2Fapache%2Ftapestry%2Fjunit%2Fmock%2Fapp%2Fimages%2FPrivateAsset.gif			
-]]>
-		</assert-output>
-		
-		<assert-output name="Context Asset">
-/mock/images/ContextAsset.gif
-		</assert-output>		
-	</request>
-	
-			 	 	 
-</mock-test>
-    	
diff --git a/3.0.4/junit/mock-scripts/TestReset.xml b/3.0.4/junit/mock-scripts/TestReset.xml
deleted file mode 100644
index 48010db..0000000
--- a/3.0.4/junit/mock-scripts/TestReset.xml
+++ /dev/null
@@ -1,96 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!-- $Id$ -->
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!-- Fill in some code-coverage gaps in the page service. -->
-
-<mock-test>
-    <context name="mock"/>
-
-  	<servlet name="app" class="org.apache.tapestry.ApplicationServlet">
-  		<init-parameter
-  			name="org.apache.tapestry.application-specification"
-  			value="/org/apache/tapestry/junit/mock/simple/Simple.application"/>
-  	</servlet>
-    
-	<!-- Reset works just like page service. -->
-    
-    <request>
-    	<parameter name="service" value="reset/Home"/>
-
-	  	<assert-output name="English Language Check">
-<![CDATA[
-<title>JUnit Simple Home Page</title>
-]]>
-		</assert-output>
-		
-		<assert-output name="English Blurb">
-The start of the JUnit test suite: JUnit Simple Application.
-		</assert-output>
-	</request>		
-		
-	<!-- Test that the page name argument is honored.  Test
-	     fabrication of service URL for reset service. -->
-	     
-  	<request>
-  		<parameter name="service" value="reset/Two"/>
-  		
-	
-		<assert-output name="Reset Link">
-<![CDATA[		
-<a href="/mock/app?service=reset/Two">reset caching</a>
-]]>
-		</assert-output>
-		  		
-	</request>	
-	
-	<!-- Test missing page -->
-	
-	<request>
-		<parameter name="service" value="reset/Qbert"/>
-		
-		<assert-output name="Page Title">
-<![CDATA[
-<title>Exception</title>
-]]>
-		</assert-output>
-		
-		<assert-output name="Error Message">
-Page 'Qbert' not found in application namespace.
-		</assert-output>
-				
-	</request>			
-	
-	<!-- Test wrong number of context parameters. -->
-	
-	<request>
-		<parameter name="service" value="reset"/>
-		
-		<assert-output name="Page Title">
-<![CDATA[
-<title>Exception</title>
-]]>
-		</assert-output>
-		
-		<assert-output name="Error Message">
-Service reset requires exactly one service parameter.
-		</assert-output>
-				
-	</request>		
-</mock-test>
-	    	
diff --git a/3.0.4/junit/mock-scripts/TestSearchComponents.xml b/3.0.4/junit/mock-scripts/TestSearchComponents.xml
deleted file mode 100644
index 9d4fe45..0000000
--- a/3.0.4/junit/mock-scripts/TestSearchComponents.xml
+++ /dev/null
@@ -1,61 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!-- $Id$ -->
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<mock-test>
-    <context name="c2" root="context2"/>
-
-  	<servlet name="app" class="org.apache.tapestry.ApplicationServlet">
-  		<init-parameter
-  			name="org.apache.tapestry.application-specification"
-  			value="/org/apache/tapestry/junit/mock/c2/C2.application"/>
-  	</servlet>      
-    
-
-	<request>
-		<parameter name="service" value="page/ImplicitComponents"/>
-		
-		<assert-output name="Page Title">
-<![CDATA[
-<title>ImplicitComponents Page</title>
-]]>
-		</assert-output>
-	
-		<assert-output name="CRoot output">
-This content provided by component CRoot.
-		</assert-output>
-		
-		<assert-output name="CWebInf output">
-This content provided by component CWebInf.
-		</assert-output>
-
-		<assert-output name="CWebInfApp output">
-This content provided by component CWebInfApp.
-		</assert-output>	
-		
-		<assert-output name="CApp output">
-This content provided by component CApp.
-		</assert-output>			
-		
-		<assert-output name="CRelative output">
-This content provided by component CRelative.
-		</assert-output>	
-						
-	</request>		
-						 	 	 
-</mock-test>
-    	
diff --git a/3.0.4/junit/mock-scripts/TestSearchPages.xml b/3.0.4/junit/mock-scripts/TestSearchPages.xml
deleted file mode 100644
index ca49055..0000000
--- a/3.0.4/junit/mock-scripts/TestSearchPages.xml
+++ /dev/null
@@ -1,136 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!-- $Id$ -->
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<mock-test>
-    <context name="c2" root="context2"/>
-
-  	<servlet name="app" class="org.apache.tapestry.ApplicationServlet">
-  		<init-parameter
-  			name="org.apache.tapestry.application-specification"
-  			value="/org/apache/tapestry/junit/mock/c2/C2.application"/>
-  	</servlet>      
-    
-<!-- Check that the home service is the default service. -->
-    
-    <request>   			
-		<assert-output name="Title">
-<![CDATA[
-<title>Implicit Home Page</title>
-]]>
-		</assert-output>		
-
-		<assert-output name="Text from Home Page">
-No page specification.
-		</assert-output>
-		
-	</request>	
-	
-	<request>
-		<parameter name="service" value="page/WithApplication"/>
-		
-		<assert-output name="Title">
-<![CDATA[
-<title>WithApplication Page</title>
-]]>
-		</assert-output>		
-
-		<assert-output name="Text from page">
-This page's specification is a sibling of the app specification.
-		</assert-output>
-				
-	</request>	
-			
-	<request>
-		<parameter name="service" value="page/InPages"/>
-		
-		<assert-output name="Title">
-<![CDATA[
-<title>InPages Page</title>
-]]>
-		</assert-output>		
-
-		<assert-output name="Text from page">
-The specification, and properties files, are located in WEB-INF/pages.
-		</assert-output>
-				
-	</request>
-	
-	<request>
-		<parameter name="service" value="page/InWebInf"/>
-		
-		<assert-output name="Title">
-<![CDATA[
-<title>InWebInf Page</title>
-]]>
-		</assert-output>		
-
-		<assert-output name="Text from page">
-The specification, and properties files, are located in directly in WEB-INF.
-		</assert-output>
-				
-	</request>	
-	
-	<request>
-		<parameter name="service" value="page/InAppRoot"/>
-		
-		<assert-output name="Title">
-<![CDATA[
-<title>InAppRoot Page</title>
-]]>
-		</assert-output>		
-
-		<assert-output name="Text from page">
-The specification, and properties files, are located in the application root.
-		</assert-output>
-				
-	</request>	
-	
-		
-	<request>
-		<parameter name="service" value="page/StaleLink"/>
-		
-		<assert-output name="Title">
-<![CDATA[
-<title>Application StaleLink Page</title>
-]]>
-		</assert-output>		
-
-		<assert-output name="Text from page">
-This is an application-provided version of the StaleLink page.
-		</assert-output>
-				
-	</request>	
-	
-	<request>
-		<parameter name="service" value="page/framework:StaleLink"/>
-		
-		<assert-output name="Title">
-<![CDATA[
-<title>Stale Link</title>
-]]>
-		</assert-output>		
-
-		<assert-output name="Text from page">
-<![CDATA[
-You have clicked on a <i>stale link</i>.
-]]>
-		</assert-output>
-				
-	</request>							 	 	 
-</mock-test>
-    	
diff --git a/3.0.4/junit/mock-scripts/TestSelectOption.xml b/3.0.4/junit/mock-scripts/TestSelectOption.xml
deleted file mode 100644
index 505de33..0000000
--- a/3.0.4/junit/mock-scripts/TestSelectOption.xml
+++ /dev/null
@@ -1,348 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!-- $Id$ -->
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<mock-test>
-    <context name="selopt" root="context11"/>
-
-  	<servlet name="app" class="org.apache.tapestry.ApplicationServlet"/>
-
-	<request>
-	
-		<assert-output name="Page Title">
-<![CDATA[
-<title>Home</title>
-]]>		
-		</assert-output>	
-		
-		<assert-output name="Form">
-<![CDATA[
-<form method="post" name="Form0" action="/selopt/app">
-]]>
-		</assert-output>
-		
-		<assert-output-matches name="Hidden Fields" subgroup="1">
-<![CDATA[			
-<input type="hidden" (name="(.*?)" value="(.*?)")/>
-]]>
-			<match>name="service" value="direct/0/Home/$Form"</match>
-			<match>name="sp" value="S0"</match>
-			<match>name="Form0" value="$Select"</match>
-		</assert-output-matches>
-
-		<assert-output name="Select Tag">
-<![CDATA[
-<select name="$Select">	<option/>
-]]>
-		</assert-output>
-
-		<assert-output-matches name="Option Tags">
-<![CDATA[
-<option value="(.*?)">(.*?)</option>
-]]>
-			<match><![CDATA[<option value="0">Animal</option>]]></match>
-			<match><![CDATA[<option value="1">Vegetable</option>]]></match>			
-			<match><![CDATA[<option value="2">Mineral (or unknown)</option>]]></match>
-		</assert-output-matches>
-		
-	</request>
-	
-	<!-- Submit the form, and specify nothing. -->
-	
-	<request>
-		<parameter name="service" value="direct/0/Home/$Form"/>
-		<parameter name="sp" value="S0"/>
-		<parameter name="Form0" value="$Select"/>
-		
-		<assert-output name="Page Title">
-<![CDATA[
-<title>Result</title>
-]]>		
-		</assert-output>	
-		
-		<assert-output name="Selections">
-Selections: none.
-		</assert-output>
-			
-	</request>
-	
-	<!-- Select one of the items. -->
-	
-	<request>
-		<parameter name="service" value="direct/0/Home/$Form"/>
-		<parameter name="sp" value="S0"/>
-		<parameter name="Form0" value="$Select"/>
-		<parameter name="$Select" value="1"/>
-		
-		<assert-output name="Page Title">
-<![CDATA[
-<title>Result</title>
-]]>		
-		</assert-output>	
-		
-		<assert-output name="Selections">
-Selections: vegetable.
-		</assert-output>
-			
-	</request>
-			
-
-	<!-- Go to the page with the persistent multiple options. -->
-	
-	<request>
-		<parameter name="service" value="page/Two"/>
-		
-		<assert-output name="Page Title">
-<![CDATA[
-<title>Two</title>
-]]>		
-		</assert-output>	
-		
-		<assert-output name="Form">
-<![CDATA[
-<form method="post" name="Form0" action="/selopt/app">
-]]>
-		</assert-output>
-		
-		<assert-output-matches name="Hidden Fields" subgroup="1">
-<![CDATA[			
-<input type="hidden" (name="(.*?)" value="(.*?)")/>
-]]>
-			<match>name="service" value="direct/0/Two/$Form"</match>
-			<match>name="sp" value="S0"</match>
-			<match>name="Form0" value="$Select"</match>
-		</assert-output-matches>
-
-		<assert-output name="Select Tag">
-<![CDATA[
-<select name="$Select" multiple="multiple">
-]]>
-		</assert-output>
-
-		<assert-output-matches name="Option Tags">
-<![CDATA[
-<option value="(.*?)"(.*?)>(.*?)</option>
-]]>
-			<match><![CDATA[<option value="0">Animal</option>]]></match>
-			<match><![CDATA[<option value="1">Vegetable</option>]]></match>			
-			<match><![CDATA[<option value="2">Mineral (or unknown)</option>]]></match>
-		</assert-output-matches>
-		
-	</request>
-
-	
-	
-	<!-- Select two items. -->
-	
-	<request>
-		<parameter name="service" value="direct/0/Two/$Form"/>
-		<parameter name="sp" value="S0"/>
-		<parameter name="Form0" value="$Select"/>
-		<parameter name="$Select">
-				<value>1</value>
-				<value>2</value>
-		</parameter>
-		
-		<assert-output name="Page Title">
-<![CDATA[
-<title>Result</title>
-]]>		
-		</assert-output>	
-		
-		<assert-output name="Selections">
-Selections: vegetable, mineral.
-		</assert-output>
-			
-	</request>		
-	
-	<!-- Back to the page, see if the tags reflect right values. -->
-	
-	<request>
-		<parameter name="service" value="page/Two"/>
-		
-		
-		<assert-output name="Page Title">
-<![CDATA[
-<title>Two</title>
-]]>		
-		</assert-output>
-				
-		<assert-output-matches name="Option Tags">
-<![CDATA[
-<option value="(.*?)"(.*?)>(.*?)</option>
-]]>
-			<match><![CDATA[<option value="0">Animal</option>]]></match>
-			<match><![CDATA[<option value="1" selected="selected">Vegetable</option>]]></match>			
-			<match><![CDATA[<option value="2" selected="selected">Mineral (or unknown)</option>]]></match>
-		</assert-output-matches>		
-	</request>
-
-	<!-- Next up, a page that has a disabled Select. -->
-	
-	<request>
-		<parameter name="service" value="page/Three"/>
-		
-		<assert-output name="Page Title">
-<![CDATA[
-<title>Three</title>
-]]>		
-		</assert-output>	
-		
-		<assert-output name="Form">
-<![CDATA[
-<form method="post" name="Form0" action="/selopt/app">
-]]>
-		</assert-output>
-		
-		<assert-output-matches name="Hidden Fields" subgroup="1">
-<![CDATA[			
-<input type="hidden" (name="(.*?)" value="(.*?)")/>
-]]>
-
-			<!-- Remember the persistent properties?  Those made the app go stateful. -->
-
-			<match>name="service" value="direct/1/Three/$Form"</match>
-			<match>name="sp" value="S0"</match>
-			<match>name="Form0" value="$Select"</match>
-		</assert-output-matches>
-
-		<assert-output name="Select Tag">
-<![CDATA[
-<select name="$Select" disabled="disabled">
-]]>
-		</assert-output>
-
-		<assert-output-matches name="Option Tags">
-<![CDATA[
-<option value="(.*?)"(.*?)>(.*?)</option>
-]]>
-			<match><![CDATA[<option value="0">Animal</option>]]></match>
-			<match><![CDATA[<option value="1">Vegetable</option>]]></match>			
-			<match><![CDATA[<option value="2">Mineral (or unknown)</option>]]></match>
-		</assert-output-matches>
-		
-	</request>	
-	
-	<!-- Pretend to be a browser that ignores the disabled flag on the select.
-		 Check that the values are ignored. -->
-		 
-	<request>
-		<parameter name="service" value="direct/1/Three/$Form"/>
-		<parameter name="sp" value="S0"/>
-		<parameter name="Form0" value="$Select"/>
-		<parameter name="$Select" value="1"/>
-		
-		<assert-output name="Page Title">
-<![CDATA[
-<title>Result</title>
-]]>		
-		</assert-output>	
-		
-		<assert-output name="Selections">
-Selections: none.
-		</assert-output>
-			
-	</request>
-	
-	<!-- Page Four has a second form that uses the action service.   We check
-		 that the form containing the Select ignores the request property. -->
-		 
-	<request>
-		<parameter name="service" value="page/Four"/>
-		
-		<assert-output name="Page Title">
-<![CDATA[
-<title>Four</title>
-]]>		
-		</assert-output>
-		
-		<assert-output name="Second Form">
-<![CDATA[
-<form method="post" name="Form1" action="/selopt/app">
-]]>	
-		</assert-output>
-	</request>
-	
-	<!-- Submit the second form. -->
-	
-	<request>
-		<parameter name="service" value="action/1/Four/1/$Form$0"/>
-		<parameter name="Form1" value=""/>
-		
-		<assert-output name="Page Title">
-<![CDATA[
-<title>Result</title>
-]]>				
-		</assert-output>
-		
-		<assert-output name="Message">
-Second form triggered.
-		</assert-output>
-		
-	</request>
-	
-	<!-- And on to the degenerate cases. -->
-	
-	<!-- #1 Select not in a Form. -->
-	
-	<request>
-		<parameter name="service" value="page/Five"/>
-		
-		<assert-output name="Page Title">
-<![CDATA[
-<title>Exception</title>
-]]>				
-		</assert-output>
-			
-		<assert-output name="Message">
-		This component must be contained within a Form.	
-		</assert-output>
-	</request>
-	
-	<!-- #2 Nested Selects. -->
-	
-	<request>
-		<parameter name="service" value="page/Six"/>
-		
-		<assert-output name="Page Title">
-<![CDATA[
-<title>Exception</title>
-]]>				
-		</assert-output>
-			
-		<assert-output name="Message">
-		Select components may not be nested.
-		</assert-output>
-	</request>	
-	
-	<!-- #3:  Option not in a Select -->
-	
-	<request>
-		<parameter name="service" value="page/Seven"/>
-		
-		<assert-output name="Page Title">
-<![CDATA[
-<title>Exception</title>
-]]>				
-		</assert-output>
-			
-		<assert-output name="Message">
-		Option component must be contained within a Select.
-		</assert-output>
-	</request>		
-	
-</mock-test>
\ No newline at end of file
diff --git a/3.0.4/junit/mock-scripts/TestServiceInstantiateError.xml b/3.0.4/junit/mock-scripts/TestServiceInstantiateError.xml
deleted file mode 100644
index ff05542..0000000
--- a/3.0.4/junit/mock-scripts/TestServiceInstantiateError.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!-- $Id$ -->
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<mock-test>
-    <context name="c21" root="context21"/>
-
-  	<servlet name="service-instantiate-error" class="org.apache.tapestry.ApplicationServlet"/>
-
-	<request>
-		
-		<assert-exception name="Result">
-		Unable to instantiate class org.apache.tapestry.junit.mock.c21.PrivateService as service private.
-		</assert-exception>
-		
-	</request>
-</mock-test>
\ No newline at end of file
diff --git a/3.0.4/junit/mock-scripts/TestServiceNameMismatch.xml b/3.0.4/junit/mock-scripts/TestServiceNameMismatch.xml
deleted file mode 100644
index cdd533d..0000000
--- a/3.0.4/junit/mock-scripts/TestServiceNameMismatch.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!-- $Id$ -->
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<mock-test>
-    <context name="c21" root="context21"/>
-
-  	<servlet name="service-name-mismatch" class="org.apache.tapestry.ApplicationServlet"/>
-
-	<request>
-		
-		<assert-exception name="Result">
-		Class org.apache.tapestry.junit.mock.c21.NameMismatchService is registered as service expected-name but provides service IncorrectName instead. 
-		</assert-exception>
-		
-	</request>
-</mock-test>
\ No newline at end of file
diff --git a/3.0.4/junit/mock-scripts/TestShellAbstractParameters.xml b/3.0.4/junit/mock-scripts/TestShellAbstractParameters.xml
deleted file mode 100644
index f514d7c..0000000
--- a/3.0.4/junit/mock-scripts/TestShellAbstractParameters.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<mock-test>
-    <context name="c37" root="context37"/>
-
-  	<servlet name="app" class="org.apache.tapestry.ApplicationServlet"/>
-
-	<request>
-		<assert-output name="HTML tag">
-<![CDATA[
-<html xmlns="http://www.w3.org/1999/xhtml">
-]]>
-		</assert-output>
-		
-	</request>
-	
-</mock-test>
\ No newline at end of file
diff --git a/3.0.4/junit/mock-scripts/TestSimple.xml b/3.0.4/junit/mock-scripts/TestSimple.xml
deleted file mode 100644
index e742fec..0000000
--- a/3.0.4/junit/mock-scripts/TestSimple.xml
+++ /dev/null
@@ -1,124 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!-- $Id$ -->
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<mock-test>
-    <context name="junit"/>
-
-    <servlet name="simple" class="org.apache.tapestry.ApplicationServlet">
-  		<init-parameter
-  			name="org.apache.tapestry.application-specification"
-  			value="/org/apache/tapestry/junit/mock/simple/Simple.application"/>
-  	</servlet>
-  	
-  	<request>
-  	
-  	  	
-  	  <assert-output name="Insert render">
-The start of the JUnit test suite: JUnit Simple Application.
-  	  </assert-output>
-  	  
-  	  <assert-output-matches name="Page structure" subgroup="1">
-<![CDATA[
-<(/?\w+)(\s*\w+=".*")*\s*/?>
-]]>
-		<match>html</match>
-		<match>head</match>
-		<match>meta</match>
-		<match>title</match>
-		<match>/title</match>
-		<match>/head</match>
-		<match>body</match>	
-		<match>br</match>	
-		<match>a</match>
-		<match>/a</match>
-		<match>/body</match>
-		<match>/html</match>		
-	  </assert-output-matches>
-  	  	  
-  	  <assert-output name="Shell DOCTYPE render">
-<![CDATA[    	  
-  	  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-]]>  	  
-  	  </assert-output>
-  	  
- 
-  	  <assert-output name="Shell title render">
-<![CDATA[    	  
-  	  <title>JUnit Simple Home Page</title>
-]]>  	  
-  	  </assert-output>
-  	  
-  
-  	 <assert-output name="Link to page Two">
-<![CDATA[
-	<a href="/junit/simple?service=page/Two">to page Two</a>
-]]>
-  	 </assert-output>
-  
-  	  <assert name="Session not created">
-  	  request.session == null
-  	  </assert>
-  	  
-  	</request>
-  	
-<!-- Request #2 simulates the user clicking the PageLink URL on the Home page. -->
-
-  <request>
-  	<parameter name="service" value="page/Two"/>	
-  	
-  	<assert-output name="Page Two Title">
-<![CDATA[
-	<title>Page Two</title>
-]]>
-	</assert-output>
-	
-	<assert-output name="Page Two Shell DOCTYPE render">
-<![CDATA[    	  
-	<!DOCTYPE math SYSTEM "http://www.w3.org/Math/DTD/mathml1/mathml.dtd">
-]]>  	  
-	</assert-output>
-
-	<assert-regexp name="Page Two: No message, yet">
-<![CDATA[
-	<body>\s*<p>This page
-]]>
-	</assert-regexp>
-	
-	<assert-output name="Page Two: DirectLink">
-<![CDATA[
-	DirectLink: <a href="/junit/simple?service=direct/0/Two/link">click it</a>
-]]>	
-	</assert-output>	
-
-	
-  </request>
-  
-<!-- Request #3: Simulate clicking the DirectLink. -->
-  
-  <request>
-  	<parameter name="service" value="direct/0/Two/link"/>	
-  	
-	<assert-regexp name="Third request, message displayed">
-<![CDATA[
-	<body>\s*Note: You clicked the link!\s*<p>This page
-]]>
-	</assert-regexp>	
-
-  </request>
-		
-</mock-test>
\ No newline at end of file
diff --git a/3.0.4/junit/mock-scripts/TestSpecDelegate.xml b/3.0.4/junit/mock-scripts/TestSpecDelegate.xml
deleted file mode 100644
index fe85613..0000000
--- a/3.0.4/junit/mock-scripts/TestSpecDelegate.xml
+++ /dev/null
@@ -1,105 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!-- $Id$ -->
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<mock-test>
-    <context name="c22" root="context22"/>
-
-  	<servlet name="app" class="org.apache.tapestry.ApplicationServlet"/>
-
-	<request>
-	
-		<assert-output name="Title">
-<![CDATA[
-<title>Home</title>
-]]>
-		</assert-output>
-		
-		<assert-output name="Link">
-href="/c22/app?service=direct/0/Home/start"
-		</assert-output>	
-		
-	</request>
-	
-	<request>
-		<parameter name="service" value="direct/0/Home/start"/>
-		
-		<assert-output name="Title">
-<![CDATA[
-<title>Exception</title>
-]]>	
-		</assert-output>	
-		
-		<assert-output name="Error Message">
-		Component 'Unknown' not found in application namespace.	
-		</assert-output>
-		
-		<assert name="Check">
-		request.session.getAttribute("type").equals("Unknown")		
-		</assert>
-		
-	</request>
-	
-	<request>
-		<parameter name="service" value="page/NotFound"/>
-		
-		<assert-output name="Title">
-<![CDATA[
-<title>Exception</title>
-]]>	
-		</assert-output>	
-		
-		<assert-output name="Error Message">
-		Page 'NotFound' not found in application namespace.	
-		</assert-output>
-		
-		<assert name="Check">
-		request.session.getAttribute("page").equals("NotFound")			
-		</assert>		
-		
-	</request>
-	
-	<request>
-		<parameter name="service" value="page/Three"/>
-		
-		<assert-output name="Title">
-<![CDATA[
-<title>Exception</title>
-]]>	
-		</assert-output>	
-		
-		<assert-output name="Error Message">
-		Could not find template for component Three/$NoTemplate in locale en.
-		</assert-output>
-		
-		<assert name="Check">
-		request.session.getAttribute("template").equals("context:/WEB-INF/NoTemplate.jwc")			
-		</assert>		
-		
-	</request>
-	
-	<request
-		content-type="multipart/form-data; boundary=---------------------------eldorado" 
-		content-path="context22/page-home.request">	
-		
-		<assert-output name="Title">
-<![CDATA[
-<title>Home</title>
-]]>	
-		</assert-output>
-	</request>
-</mock-test>
\ No newline at end of file
diff --git a/3.0.4/junit/mock-scripts/TestStaleForm.xml b/3.0.4/junit/mock-scripts/TestStaleForm.xml
deleted file mode 100644
index fc3a804..0000000
--- a/3.0.4/junit/mock-scripts/TestStaleForm.xml
+++ /dev/null
@@ -1,130 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!-- $Id$ -->
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- Performs some tests to simulate a StaleLink scenario when submitting a form.  -->
-
-<mock-test>
-    <context name="mock"/>
-    <servlet name="app" class="org.apache.tapestry.ApplicationServlet">
-  		<init-parameter
-  			name="org.apache.tapestry.application-specification"
-  			value="/org/apache/tapestry/junit/mock/app/Mock.application"/>
-  	</servlet>
-  	  	
-  	<!-- Just for sanity's sake, duplicate some of the checks from TestRegisterForm.xml -->
-  	  	
-  	<request>
-  		<parameter name="service" value="page/Register"/>
-  		
-  		<assert-output name="Title">
-<![CDATA[
-		<title>Register</title>
-]]>  		
- 		</assert-output> 			
- 			
-		<assert-output-matches name="Hidden Fields - Names" subgroup="1">
-<![CDATA[
-<input type="hidden" name="(.*?)" value="(.*?)"/>
-]]>
-			<match>service</match>
-			<match>sp</match>
-			<match>Form0</match>
-		</assert-output-matches>
-				
-		<assert-output-matches name="Hidden Fields - Values" subgroup="2">
-<![CDATA[
-<input type="hidden" name="(.*?)" value="(.*?)"/>
-]]>
-			<match>direct/0/Register/form</match>
-			<match>S0</match>
-			<match>inputFirstName,inputLastName,inputSex,inputAgeRange</match>
-		</assert-output-matches>
-			 	
-  	</request>
-  	
-  	<!-- Provoke an error by "submitting" the form but gimicking things
-  	     as if there was another field when the form rendered.. -->
-  	
-  	<request>
-  		<parameter name="service" value="direct/0/Register/form"/>
-  		<parameter name="sp" value="S0"/>
-  		<parameter name="inputFirstName" value="Suzy"/>
-  		<parameter name="inputLastName" value="Munchkin"/>
-  		<parameter name="inputFavoriteColor" value="2"/>
-  		<parameter name="inputSex" value="1"/>
-  		<parameter name="inputAgeRange" value="1"/>
-  		<parameter name="Form0" value="inputFirstName,inputLastName,inputFavoriteColor,inputSex,inputAgeRange"/>
-  		
-    		
-  		<assert-output name="Title">
-<![CDATA[
-		<title>Stale Link</title>
-]]>  		
- 		</assert-output>
- 				
-		<assert-output name="Mismatch Error Message">
-Rewind of form Register/form expected allocated id #3 to be 'inputFavoriteColor', but was 'inputSex' (requested by component Register/inputSex).	
- 		</assert-output> 				
-
-  	</request>	
-  	
-  	<!-- This time, we pretend that inputAgeRange didn't render but was submitted. -->
-  	
-    <request>
-  		<parameter name="service" value="direct/0/Register/form"/>
-  		<parameter name="sp" value="S0"/>
-  		<parameter name="inputFirstName" value="Suzy"/>
-  		<parameter name="inputLastName" value="Munchkin"/>
-  		<parameter name="inputSex" value="1"/>
-  		<parameter name="Form0" value="inputFirstName,inputLastName,inputSex"/>
-  		    		
-  		<assert-output name="Title">
-<![CDATA[
-		<title>Stale Link</title>
-]]>  		
- 		</assert-output>
- 				
-		<assert-output name="Too Many Error Message">
-Rewind of form Register/form expected only 3 form elements, but an additional id was requested by component Register/inputAgeRange.		
- 		</assert-output> 				
-
-  	</request>	
-  	
-    <request>
-  		<parameter name="service" value="direct/0/Register/form"/>
-  		<parameter name="sp" value="S0"/>
-  		<parameter name="inputFirstName" value="Suzy"/>
-  		<parameter name="inputLastName" value="Munchkin"/>
-  		<parameter name="inputSex" value="1"/>
-  		<parameter name="inputAgeRange" value="1"/>
-  		<parameter name="inputFavoriteColor" value="2"/>  		
-  		<parameter name="Form0" value="inputFirstName,inputLastName,inputSex,inputAgeRange,inputFavoriteColor"/>
-  		
-    		
-  		<assert-output name="Title">
-<![CDATA[
-		<title>Stale Link</title>
-]]>  		
- 		</assert-output>
- 				
-		<assert-output name="Too Few Error Message">
-Rewind of form Register/form expected 1 more form elements, starting with id 'inputFavoriteColor'.		
- 		</assert-output> 				
-
-  	</request>		
-</mock-test>	
\ No newline at end of file
diff --git a/3.0.4/junit/mock-scripts/TestStaleSessionException.xml b/3.0.4/junit/mock-scripts/TestStaleSessionException.xml
deleted file mode 100644
index 6dbdab5..0000000
--- a/3.0.4/junit/mock-scripts/TestStaleSessionException.xml
+++ /dev/null
@@ -1,111 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!-- $Id$ -->
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- Tests stale session exception with a DirectLink. -->
-
-<mock-test>
-    <context name="mock"/>
-    
-    <servlet name="app" class="org.apache.tapestry.ApplicationServlet">
-  		<init-parameter
-  			name="org.apache.tapestry.application-specification"
-  			value="/org/apache/tapestry/junit/mock/app/Mock.application"/>
-  	</servlet>  	
-  	
-  	<!-- Simulate clicking the link, which should send the
-  	     user to the Protected page.  -->
-  	     
-  	<request>
-  		<parameter name="service" value="page/Stale"/>
-  		
-  		<assert-output name="Title">
-<![CDATA[
-<title>StaleSession Test Page</title>
-]]>
-		</assert-output>
-		
-		<assert-output name="DirectLink URL">
-<![CDATA[
-href="/mock/app?service=direct/0/Stale/directLink"
-]]>		
-		</assert-output>
-		
-
-		<assert-output name="ActionLink URL">
-<![CDATA[
-href="/mock/app?service=action/0/Stale/0/actionLink"
-]]>		
-		</assert-output>		
-		
-		<assert-output-matches name="Form Parameter Names" subgroup="1">
-<![CDATA[
-<input type="hidden".*? name="(.*?)".*?/>		
-]]>
-			<match>service</match>
-			<match>sp</match>
-			<match>Form1</match>
-		</assert-output-matches>
-
-		<assert-output-matches name="Form Parameter Values" subgroup="1">
-<![CDATA[
-<input type="hidden".*? value="(.*?)".*?/>		
-]]>
-			<match>direct/0/Stale/form</match>
-			<match>S1</match>
-			<match></match>
-		</assert-output-matches>
-
-				
-	</request>
-	
-	<!-- Now trigger each in turn. -->
-	
-	<request>
-		<parameter name="service" value="direct/1/Stale/directLink"/>
-		
-		<assert-output name="StaleSession (DirectLink)">
-<![CDATA[
-<title>Stale Session</title>
-]]>
-		</assert-output>
-	</request>
-	
-	<!-- Simulate stateful action link. -->
-	
-	<request>
-		<parameter name="service" value="action/1/Stale/0/actionLink"/>
-		
-		<assert-output name="StaleSession (ActionLink)">
-<![CDATA[
-<title>Stale Session</title>
-]]>
-		</assert-output>
-	</request>
-	
-	<request>
-		<parameter name="service" value="direct/1/Stale/form"/>
-		<parameter name="sp" value="S1"/>
-		<parameter name="Form1" value=""/>
-		
-		<assert-output name="StaleSession (Form)">
-<![CDATA[
-<title>Stale Session</title>
-]]>
-		</assert-output>
-	</request>  	
-</mock-test>
\ No newline at end of file
diff --git a/3.0.4/junit/mock-scripts/TestStrings.xml b/3.0.4/junit/mock-scripts/TestStrings.xml
deleted file mode 100644
index 50f7ffc..0000000
--- a/3.0.4/junit/mock-scripts/TestStrings.xml
+++ /dev/null
@@ -1,54 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!-- $Id$ -->
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<mock-test>
-    <context name="mock"/>
-    
-    <servlet name="app" class="org.apache.tapestry.ApplicationServlet">
-  		<init-parameter
-  			name="org.apache.tapestry.application-specification"
-  			value="/org/apache/tapestry/junit/mock/app/Mock.application"/>
-  	</servlet>  	
-  	
-  	     
-  	<request>
-  		<parameter name="service" value="page/Strings"/>
-  		
-	
-		<assert-output name="Normal">
-<![CDATA[
-Normal: &lt;b&gt;Important Message&lt;/b&gt;
-]]>	
-		</assert-output>
-		  	
-		<assert-output name="Raw">
-<![CDATA[
-Raw: <b>Important Message</b>
-]]>	
-		</assert-output>
-	
-		<assert-output name="Span">
-<![CDATA[
-Style: <span class="custom"><b>Important Message</b></span>
-]]>	
-		</assert-output>
-	
-	</request>
-		  	
-</mock-test>
\ No newline at end of file
diff --git a/3.0.4/junit/mock-scripts/TestTemplateEncoding.xml b/3.0.4/junit/mock-scripts/TestTemplateEncoding.xml
deleted file mode 100644
index a789e3d..0000000
--- a/3.0.4/junit/mock-scripts/TestTemplateEncoding.xml
+++ /dev/null
@@ -1,114 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!-- $Id$ -->
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<mock-test>
-    <context name="c28" root="context28"/>
-
-  	<servlet name="app" class="org.apache.tapestry.ApplicationServlet"/>
-
-	<request>
-		<parameter name="service" value="direct/0/Home/$DirectLink"/>
-	  	<parameter name="sp">
-	  		<value>STwo</value>
-	  		<value>Sfr</value>
-	  	</parameter>
-
-		<assert-output name="Page Title">
-<![CDATA[
-<title>Two</title>
-]]>
-		</assert-output>
-
-		<assert-output name="Language Name">
-<![CDATA[
-Fran&#231;ais
-]]>
-		</assert-output>
-
-		<assert-output name="External Link">
-<![CDATA[
-<a href="/c28/app?service=external/Two&amp;sp=SFran%C3%A7ais">
-]]>
-		</assert-output>
-	</request>
-	
-	
-	<request>
-		<parameter name="service" value="direct/0/Home/$DirectLink"/>
-	  	<parameter name="sp">
-	  		<value>STwo</value>
-	  		<value>Sfr_FR</value>
-	  	</parameter>
-
-		<assert-output name="Page Title">
-<![CDATA[
-<title>Two</title>
-]]>
-		</assert-output>
-
-		<assert-output name="Language Name">
-<![CDATA[
-Fran&#231;ais
-]]>
-		</assert-output>
-	</request>
-	
-	
-	<request>
-		<parameter name="service" value="direct/0/Home/$DirectLink"/>
-	  	<parameter name="sp">
-	  		<value>STwo</value>
-	  		<value>Sbg</value>
-	  	</parameter>
-
-		<assert-output name="Page Title">
-<![CDATA[
-<title>Two</title>
-]]>
-		</assert-output>
-
-		<assert-output name="Language Name">
-<![CDATA[
-&#1057;&#1114;&#1099;&#1091;&#1088;&#8470;&#1105;&#1098;&#1096;
-]]>
-		</assert-output>
-	</request>
-	
-
-	<request>
-		<parameter name="service" value="direct/0/Home/$DirectLink"/>
-	  	<parameter name="sp">
-	  		<value>STwo</value>
-	  		<value>Sbg_BG</value>
-	  	</parameter>
-
-		<assert-output name="Page Title">
-<![CDATA[
-<title>Two</title>
-]]>
-		</assert-output>
-
-		<assert-output name="Language Name">
-<![CDATA[
-&#1057;&#1114;&#1099;&#1091;&#1088;&#8470;&#1105;&#1098;&#1096;
-]]>
-		</assert-output>
-	</request>
-	
-
-</mock-test>
\ No newline at end of file
diff --git a/3.0.4/junit/mock-scripts/TestTemplateExpr.xml b/3.0.4/junit/mock-scripts/TestTemplateExpr.xml
deleted file mode 100644
index 24f74e3..0000000
--- a/3.0.4/junit/mock-scripts/TestTemplateExpr.xml
+++ /dev/null
@@ -1,89 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!-- $Id$ -->
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<mock-test>
-    <context name="mock"/>
-
-  	<servlet name="app" class="org.apache.tapestry.ApplicationServlet">
-  		<init-parameter
-  			name="org.apache.tapestry.application-specification"
-  			value="/org/apache/tapestry/junit/mock/app/Mock.application"/>
-  	</servlet>
-       
-    <request>
-    	<parameter name="service" value="page/TemplateExpr"/>
- 	
-	  	<assert-output name="Valid use of template expression">
-<![CDATA[
-Application Name: JUnit Mock Application	
-]]>
-		</assert-output> 	
-		
-	  	<assert-output name="Specifying informal parameters">
-<![CDATA[
-Second example: <span class="styleClass">JUnit Mock Application</span>
-]]>
-		</assert-output> 	
-	</request>
-			
-	<request>
-		<parameter name="service" value="page/TemplateExprConflict"/>
-		
-	  	<assert-output name="Page Title">
-<![CDATA[
-	<title>Exception</title>
-]]>
-		</assert-output>	
-	
-		<assert-output name="Error Message">
-An expression for parameter 'value' of component TemplateExprConflict/insertApplicationName in the template for TemplateExprConflict conflicts with an existing binding in the specification.
-		</assert-output>	
-		
-	</request>
-	
-	<request>
-		<parameter name="service" value="page/TemplateExprInformal"/>
-		
-	  	<assert-output name="Page Title">
-<![CDATA[
-	<title>Exception</title>
-]]>
-		</assert-output>	
-	
-		<assert-output name="Error Message">
-The template for TemplateExprInformal contains an expression for parameter 'informal' of component TemplateExprInformal/block, but TemplateExprInformal/block does not allow informal parameters.
-		</assert-output>	
-		
-	</request>	
-	
-	<request>
-		<parameter name="service" value="page/TemplateExprReserved"/>
-		
-	  	<assert-output name="Page Title">
-<![CDATA[
-	<title>Exception</title>
-]]>
-		</assert-output>	
-	
-		<assert-output name="Error Message">
-The template for TemplateExprReserved contains an expression for parameter 'href' of component TemplateExprReserved/link, but 'href' is a reserved parameter name.
-		</assert-output>	
-		
-	</request>	
-</mock-test>
-    	
diff --git a/3.0.4/junit/mock-scripts/TestTemplateExtension.xml b/3.0.4/junit/mock-scripts/TestTemplateExtension.xml
deleted file mode 100644
index 119cc9d..0000000
--- a/3.0.4/junit/mock-scripts/TestTemplateExtension.xml
+++ /dev/null
@@ -1,42 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!-- $Id$ -->
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<mock-test>
-    <context name="c8" root="context8"/>
-
-  	<servlet name="ext" class="org.apache.tapestry.ApplicationServlet"/>
-  	
-
-	<request>
-  	  	  	
-		<assert-output name="Home Page Content">		
-This is the Home page, with template Home.thtml.
-		</assert-output>
-		
-	</request>
-	
-	<request>
-		<parameter name="service" value="page/Two"/>
-		
-		<assert-output name="Page Two Content">		
-This is the Two page, with template Two.phtml.
-		</assert-output>
-	</request>  	  
-		  	
-
- </mock-test>
\ No newline at end of file
diff --git a/3.0.4/junit/mock-scripts/TestTextArea.xml b/3.0.4/junit/mock-scripts/TestTextArea.xml
deleted file mode 100644
index 199c8e6..0000000
--- a/3.0.4/junit/mock-scripts/TestTextArea.xml
+++ /dev/null
@@ -1,203 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!-- $Id$ -->
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<mock-test>
-    <context name="c20" root="context20"/>
-
-  	<servlet name="app" class="org.apache.tapestry.ApplicationServlet"/>
-
-	<request>
-	
-		<assert-output name="Page Title">
-<![CDATA[
-<title>Home</title>
-]]>	
-		</assert-output>
-		
-		<assert-output name="TextArea">
-<![CDATA[
-<textarea name="text"></textarea>
-]]>
-		</assert-output>
-		
-		<assert-output-matches name="Modes">
-<![CDATA[
-<option.*?/option>
-]]>
-			<match><![CDATA[<option value="0" selected="selected">Break</option>]]></match>
-			<match><![CDATA[<option value="1">Paragraph</option>]]></match>
-		</assert-output-matches>
-		
-	</request>
-
-	<request>
-		<parameter name="service" value="direct/0/Home/main"/>
-		<parameter name="sp" value="S0"/>
-		<parameter name="text" value="One &lt;&gt; zero."/>
-		<parameter name="mode" value="0"/>
-		<parameter name="Form0" value="text,mode"/>
-		
-		<assert-output name="Page Title">
-<![CDATA[
-<title>Two</title>
-]]>	
-		</assert-output>
-		
-		<assert-regexp name="Inserted Text">
-<![CDATA[
-Text:\[\s*One &lt;&gt; zero.\s*\]		
-]]>
-		</assert-regexp>
-		
-	</request>
-
-
-	<request>
-		<parameter name="service" value="direct/1/Home/main"/>
-		<parameter name="sp" value="S0"/>
-		<parameter name="text" value="Alpha&#010;Beta&#010;Gamma"/>
-		<parameter name="mode" value="0"/>
-		<parameter name="Form0" value="text,mode"/>
-		
-		<assert-output name="Page Title">
-<![CDATA[
-<title>Two</title>
-]]>	
-		</assert-output>
-		
-		<assert-regexp name="Inserted Text">
-<![CDATA[Text:\[\s+Alpha<br/>Beta<br/>Gamma\s+\]		
-]]>
-		</assert-regexp>
-		
-	</request>
-	
-	<request>
-		<parameter name="service" value="direct/1/Home/main"/>
-		<parameter name="sp" value="S0"/>
-		<parameter name="text" value="Moe&#010;Larry&#010;Curly"/>
-		<parameter name="mode" value="1"/>
-		<parameter name="Form0" value="text,mode"/>
-		
-		<assert-output name="Page Title">
-<![CDATA[
-<title>Two</title>
-]]>	
-		</assert-output>
-		
-		<assert-regexp name="Inserted Text">
-<![CDATA[
-Text:\[\s+<p>Moe</p><p>Larry</p><p>Curly</p>\s+\]
-]]>	
-		</assert-regexp>
-		
-	</request>
-	
-	<!-- Test TextArea ignoring request when not in the rewinding form. -->
-	
-	<request>
-		<parameter name="service" value="action/1/Home/1/actionForm"/>
-		<parameter name="Form1" value=""/>
-		
-		<assert-output name="Page Title">
-<![CDATA[
-<title>Home</title>
-]]>	
-		</assert-output>
-		
-		<assert-regexp name="TextArea">
-<![CDATA[
-<textarea name="text">Moe\s+Larry\s+Curly</textarea>
-]]>	
-		</assert-regexp>
-	</request>
-	
-	<request>
-		<parameter name="service" value="direct/1/Home/main"/>
-		<parameter name="sp" value="S0"/>
-		<parameter name="mode" value="1"/>
-		<parameter name="Form0" value="text,mode"/>
-		
-		<assert-output name="Page Title">
-<![CDATA[
-<title>Two</title>
-]]>	
-		</assert-output>
-		
-		<assert-regexp name="Inserted Text">
-Text:\[\s+\]
-		</assert-regexp>
-		
-	</request>
-	
-	<!-- Disable the TextArea. -->
-	
-	<request>
-		<parameter name="service" value="direct/1/Home/disable"/>
-		
-		<assert-output name="Page Title">
-<![CDATA[
-<title>Home</title>
-]]>	
-		</assert-output>
-		
-		<assert-output name="TextArea">
-<![CDATA[
-<textarea name="text" disabled="disabled"></textarea>
-]]>	
-		</assert-output>	
-	</request>
-
-	<!-- Make sure property not updated when TextArea disabled. -->
-	
-	<request>
-		<parameter name="service" value="direct/1/Home/main"/>
-		<parameter name="sp" value="S0"/>
-		<parameter name="text" value="Peter&#010;Paul&#010;Mary"/>
-		<parameter name="mode" value="1"/>
-		<parameter name="Form0" value="text,mode"/>
-		
-		<assert-output name="Page Title">
-<![CDATA[
-<title>Two</title>
-]]>	
-		</assert-output>
-		
-		<assert-regexp name="Inserted Text">
-Text:\[\s+\]
-		</assert-regexp>
-		
-	</request>
-	
-	<request>
-		<parameter name="service" value="page/Three"/>
-		
-		<assert-output name="Page Title">
-<![CDATA[
-<title>Three</title>
-]]>
-		</assert-output>
-
-		<assert-output name="TextArea">
-<![CDATA[
-<textarea name="$TextArea" class="magic"></textarea>
-]]>
-		</assert-output>
-
-	</request>
-</mock-test>
\ No newline at end of file
diff --git a/3.0.4/junit/mock-scripts/TestTextField.xml b/3.0.4/junit/mock-scripts/TestTextField.xml
deleted file mode 100644
index a05e2c1..0000000
--- a/3.0.4/junit/mock-scripts/TestTextField.xml
+++ /dev/null
@@ -1,157 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!-- $Id$ -->
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<mock-test>
-    <context name="c17" root="context17"/>
-
-  	<servlet name="app" class="org.apache.tapestry.ApplicationServlet"/>
-
-	<request>
-	
-		<assert-output name="Page Title">
-<![CDATA[
-<title>Home</title>
-]]>	
-		</assert-output>
-		
-		<assert-output name="Normal TextField">
-<![CDATA[
-Normal: <input type="text" name="normal" value="normal"/>
-]]>	
-		</assert-output>
-		
-		<assert-output name="Disabled TextField">
-<![CDATA[
-Disabled: <input type="text" disabled="disabled" name="disabled" value="disabled"/>
-]]>	
-		</assert-output>
-		
-		<assert-output name="Hidden TextField">
-<![CDATA[
-Hidden: <input type="password" name="hidden" value="hidden"/>
-]]>	
-		</assert-output>		
-	</request>
-	
-	<request>
-		<parameter name="service" value="direct/0/Home/$Form"/>
-		<parameter name="sp" value="S0"/>
-		<parameter name="normal" value="updated-normal"/>
-		<parameter name="disabled" value="updated-normal"/>
-		<parameter name="hidden" value="updated-hidden"/>
-		<parameter name="Form0" value="normal,disabled,hidden"/>
-		
-		<assert-output name="Page Title">
-<![CDATA[
-<title>Two</title>
-]]>
-		</assert-output>
-			
-		<assert-output name="Normal Field">
-Normal: [updated-normal]
-		</assert-output>
-		
-		<assert-output name="Disabled Field">
-Disabled: [disabled]
-		</assert-output>
-		
-		<assert-output name="Hidden Field">
-Hidden: [updated-hidden]	
-		</assert-output>
-	</request>
-	
-	<!-- Test rewind over TextField, because of action service. -->
-	
-	<request>
-		<parameter name="service" value="action/0/Home/1/$Form$0"/>
-		<parameter name="Form1" value=""/>
-		
-		<assert-output name="Page Title">
-<![CDATA[
-<title>Home</title>
-]]>	
-		</assert-output>
-		
-		<assert-output name="Normal TextField">
-<![CDATA[
-Normal: <input type="text" name="normal" value="normal"/>
-]]>	
-		</assert-output>
-		
-		<assert-output name="Disabled TextField">
-<![CDATA[
-Disabled: <input type="text" disabled="disabled" name="disabled" value="disabled"/>
-]]>	
-		</assert-output>
-		
-		<assert-output name="Hidden TextField">
-<![CDATA[
-Hidden: <input type="password" name="hidden" value="hidden"/>
-]]>	
-		</assert-output>	
-	
-	</request>
-	
-	<!-- Test a TextField not contained in a Form. -->
-	
-	<request>
-		<parameter name="service" value="page/Three"/>
-		
-		<assert-output name="Page Title">
-<![CDATA[
-<title>Exception</title>
-]]>
-		</assert-output>
-		
-		<assert-output name="Exception Name">
-		org.apache.tapestry.ApplicationRuntimeException
-		</assert-output>
-		
-		<assert-output name="Exception Message">
-		This component must be contained within a Form.
-		</assert-output>
-		
-		<assert-output name="Component Id">
-		[Three/$TextField]	
-		</assert-output>
-	</request>
-	
-	<!-- Test that forms may not be nested. -->
-	
-	<request>
-		<parameter name="service" value="page/Four"/>
-		
-		<assert-output name="Page Title">
-<![CDATA[
-<title>Exception</title>
-]]>			
-		</assert-output>	
-		
-		<assert-output name="Exception Name">
-		org.apache.tapestry.ApplicationRuntimeException
-		</assert-output>
-		
-		<assert-output name="Exception Message">
-		Forms may not be nested.
-		</assert-output>
-		
-		<assert-output name="Component Id">
-		[Four/inner]	
-		</assert-output>
-	</request>
-</mock-test>
\ No newline at end of file
diff --git a/3.0.4/junit/mock-scripts/TestUpload.xml b/3.0.4/junit/mock-scripts/TestUpload.xml
deleted file mode 100644
index 950c129..0000000
--- a/3.0.4/junit/mock-scripts/TestUpload.xml
+++ /dev/null
@@ -1,220 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!-- $Id$ -->
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!-- Tests IPage.validate(), PageRedirectException and PageCallback -->
-
-<mock-test>
-    <context name="c19" root="context19"/>
-    
-    <servlet name="app" class="org.apache.tapestry.ApplicationServlet"/>
-
-	<request>
-		
-		<assert-output name="Page Title">
-<![CDATA[
-<title>Home</title>
-]]>	
-		</assert-output>
-		
-		
-		<assert-output name="Upload Field">
-<![CDATA[
-<input type="file" name="$Upload"/>
-]]>	
-		</assert-output>
-	</request>
-
-	<!-- The upload itself. -->
-	
-	<request 
-		content-type="multipart/form-data; boundary=---------------------------7d33212e1c03e2" 
-		content-path="context19/upload-message.request">
-		
-		<assert-output name="Page Title">
-<![CDATA[
-<title>Two</title>
-]]>	
-		</assert-output>
-		
-		<assert-output name="Content Type">
-		Content Type: [text/plain]
-		</assert-output>
-		
-		<assert-output name="Path">
-		Path: [context19/message.txt]
-		</assert-output>
-		
-		<assert-output name="Name">
-		Name: [message.txt]
-		</assert-output>
-		
-		<assert-output name="Size">
-		Size: [157]
-		</assert-output>		
-		
-		<assert-output name="In Memory">
-		In Memory: [true]
-		</assert-output>	
-		
-		<assert-output name="Match Confirmation">
-		Contents match.
-		</assert-output>
-		
-	</request>
-	
-	<request 
-		content-type="multipart/form-data; boundary=---------------------------xyzzyx" 
-		content-path="context19/upload-long.request">
-		
-		<assert-output name="Page Title">
-<![CDATA[
-<title>Two</title>
-]]>	
-		</assert-output>
-		
-		<assert-output name="Content Type">
-		Content Type: [text/html]
-		</assert-output>
-		
-		<assert-output name="Path">
-		Path: [context19/long.html]
-		</assert-output>
-		
-		<assert-output name="Name">
-		Name: [long.html]
-		</assert-output>
-		
-		<assert-output name="Size">
-		Size: [5207]
-		</assert-output>		
-		
-		<assert-output name="In Memory">
-		In Memory: [false]
-		</assert-output>	
-		
-		<assert-output name="Match Confirmation">
-		Contents match.
-		</assert-output>
-		
-	</request>
-	
-	<request 
-		content-type="multipart/form-data; boundary=---------------------------9d33212e1c03e3" 
-		content-path="context19/upload-image.request">
-		
-		<assert-output name="Page Title">
-<![CDATA[
-<title>Two</title>
-]]>	
-		</assert-output>
-		
-		<assert-output name="Content Type">
-		Content Type: [image/x-png]
-		</assert-output>
-		
-		<assert-output name="Path">
-		Path: [context19/Tapestry-Banner.png]
-		</assert-output>
-		
-		<assert-output name="Name">
-		Name: [Tapestry-Banner.png]
-		</assert-output>
-		
-		<assert-output name="Match Confirmation">
-		Contents match.
-		</assert-output>
-		
-	</request>
-	
-	<!-- Test a disabled Upload component. -->
-	
-	<request>
-		<parameter name="service" value="direct/0/Home/$DirectLink"/>
-		
-		<assert-output name="Page Title">
-<![CDATA[
-<title>Home</title>
-]]>	
-		</assert-output>
-		
-		
-		<assert-output name="Upload Field">
-<![CDATA[
-<input type="file" name="$Upload" disabled="disabled"/>
-]]>	
-		</assert-output>			
-	</request>
-	
-	<!-- Do the upload with the Upload component disabled.  -->
-	
-	<request 
-		content-type="multipart/form-data; boundary=---------------------------7d33212e1c03e2" 
-		content-path="context19/upload-message.request">
-			
-		<assert-output name="Page Title">
-<![CDATA[
-<title>Three</title>
-]]>
-</assert-output>
-
-	</request>
-	
-	<!-- Now test some stuff in multipart decoder that detects multiple values for the
-		 same element name. -->
-		 
-	<request>
-		<parameter name="service" value="page/Four"/>
-		
-		<assert-output name="Page Title">
-<![CDATA[
-<title>Four</title>
-]]>
-		</assert-output>
-		
-		<assert-output-matches name="Options">
-<![CDATA[
-<option.*?/option>
-]]>	
-			<match><![CDATA[<option value="0">Lights on</option>]]></match>
-			<match><![CDATA[<option value="1">Nobody Home</option>]]></match>			
-		</assert-output-matches>	
-	</request>
-	
-	<!-- Do the form submission -->
-	<request 
-		content-type="multipart/form-data; boundary=---------------------------eldorado" 
-		content-path="context19/form-four.request">
-
-		<assert-output name="Page Title">
-<![CDATA[
-<title>Four</title>
-]]>
-		</assert-output>
-		
-		<assert-output-matches name="Options">
-<![CDATA[
-<option.*?/option>
-]]>	
-			<match><![CDATA[<option value="0" selected="selected">Lights on</option>]]></match>
-			<match><![CDATA[<option value="1" selected="selected">Nobody Home</option>]]></match>			
-		</assert-output-matches>
-		
-	</request>	
-	
-</mock-test>
\ No newline at end of file
diff --git a/3.0.4/junit/mock-scripts/TestValidField.xml b/3.0.4/junit/mock-scripts/TestValidField.xml
deleted file mode 100644
index b11403e..0000000
--- a/3.0.4/junit/mock-scripts/TestValidField.xml
+++ /dev/null
@@ -1,113 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!-- $Id$ -->
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<mock-test>
-    <context name="c29" root="context29"/>
-
-  	<servlet name="app" class="org.apache.tapestry.ApplicationServlet">
-  		<init-parameter name="org.apache.tapestry.application-specification"
-  				value="/org/apache/tapestry/junit/mock/c29/app.application"/>
-  	</servlet>
-
-<!--    <request>
-    	<parameter name="service" value="page/Two"/>
-    	
-		<assert-output>two</assert-output>
-	
-	</request> -->
-	
-	<!-- can use the above request output to find values for the next request -->
-    <request>
-    	<parameter name="service" value="direct/0/Two/$Form"/>
-    	<parameter name="sp" value="S0"/>
-    	<parameter name="Form0" value="field"/>
-    	<parameter name="field" value="1"/> <!-- verify the form submission is working -->
-
-        <!-- we are really asserting that we did not get an exception page -->
-		<assert-output>two</assert-output>
-	
-	</request>
-	
-	<!-- Simple contrib.valid component tests -->
-	<!-- test the NumericField field -->
-    <request>
-    	<parameter name="service" value="page/Three"/>
-    	
-		<assert-output>intValue=0|</assert-output>
-		<assert-output>floatValue=0.0|</assert-output>
-		<assert-output>bigIntegerValue=|</assert-output>
-		<assert-output>bigDecimalValue=|</assert-output>
-		<assert-output>stringValue=|</assert-output>
-		<assert-output>dateValue=|</assert-output>
-	</request>
-	
-    <request>
-    	<parameter name="service" value="direct/0/Three/intForm"/>
-    	<parameter name="sp" value="S0"/>
-    	<parameter name="Form0" value="intField"/>
-    	<parameter name="intField" value="1"/>
-
-		<assert-output>intValue=1|</assert-output>
-	</request>
-	
-    <request>
-    	<parameter name="service" value="direct/0/Three/floatForm"/>
-    	<parameter name="sp" value="S0"/>
-    	<parameter name="Form0" value="floatField"/>
-    	<parameter name="floatField" value="1.23"/>
-
-		<assert-output>floatValue=1.23|</assert-output>
-	</request>
-	
-    <request>
-    	<parameter name="service" value="direct/0/Three/bigIntegerForm"/>
-    	<parameter name="sp" value="S0"/>
-    	<parameter name="Form0" value="bigIntegerField"/>
-    	<parameter name="bigIntegerField" value="12345678901234567890"/>
-
-		<assert-output>bigIntegerValue=12345678901234567890|</assert-output>
-	</request>
-	
-    <request>
-    	<parameter name="service" value="direct/0/Three/bigDecimalForm"/>
-    	<parameter name="sp" value="S0"/>
-    	<parameter name="Form0" value="bigDecimalField"/>
-    	<parameter name="bigDecimalField" value="1234567890.1234567890"/>
-
-		<assert-output>bigDecimalValue=1234567890.1234567890|</assert-output>
-	</request>
-	
-    <request>
-    	<parameter name="service" value="direct/0/Three/stringForm"/>
-    	<parameter name="sp" value="S0"/>
-    	<parameter name="Form0" value="stringField"/>
-    	<parameter name="stringField" value="Tapestry Rocks"/>
-
-		<assert-output>stringValue=Tapestry Rocks|</assert-output>
-	</request>
-	
-    <request>
-    	<parameter name="service" value="direct/0/Three/dateForm"/>
-    	<parameter name="sp" value="S0"/>
-    	<parameter name="Form0" value="dateField"/>
-    	<parameter name="dateField" value="3/20/1974"/>
-
-		<assert-output>dateValue=1974-03-20|</assert-output>
-	</request>
-	
-</mock-test>
\ No newline at end of file
diff --git a/3.0.4/junit/mock-scripts/TestValidFieldNoBody.xml b/3.0.4/junit/mock-scripts/TestValidFieldNoBody.xml
deleted file mode 100644
index 3551807..0000000
--- a/3.0.4/junit/mock-scripts/TestValidFieldNoBody.xml
+++ /dev/null
@@ -1,49 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!-- $Id$ -->
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-
-<mock-test>
-    <context name="mock"/>
-    
-    <servlet name="app" class="org.apache.tapestry.ApplicationServlet">
-  		<init-parameter
-  			name="org.apache.tapestry.application-specification"
-  			value="/org/apache/tapestry/junit/mock/app/Mock.application"/>
-  	</servlet>  	
-  	
-  	     
-  	<request>
-  		<parameter name="service" value="page/ValidFieldNoBody"/>
-  		
-	
-		<!-- Should get an Exception -->
-	
-		<assert-output name="Title">
-<![CDATA[
-<title>Exception</title>
-]]>		
-		</assert-output>
-	
-		<assert-output name="Message">
-		A ValidField using client-side validation must be enclosed by a Body component.
-		</assert-output>
-	
-	</request>
-		  	
-</mock-test>
\ No newline at end of file
diff --git a/3.0.4/junit/mock-scripts/TestValidate.xml b/3.0.4/junit/mock-scripts/TestValidate.xml
deleted file mode 100644
index 6c67485..0000000
--- a/3.0.4/junit/mock-scripts/TestValidate.xml
+++ /dev/null
@@ -1,83 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!-- $Id$ -->
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!-- Tests IPage.validate(), PageRedirectException and PageCallback -->
-
-<mock-test>
-    <context name="mock"/>
-    
-    <servlet name="app" class="org.apache.tapestry.ApplicationServlet">
-  		<init-parameter
-  			name="org.apache.tapestry.application-specification"
-  			value="/org/apache/tapestry/junit/mock/app/Mock.application"/>
-  	</servlet> 
-  	  	
-	<request>
-  		<parameter name="service" value="page/Protected"/>
-  		
-  		
-  		<assert-output name="Title">
-<![CDATA[
-<title>Guard</title>
-]]>
-		</assert-output>
-		
-		<assert-output name="Link URL">
-<![CDATA[
-href="/mock/app?service=direct/1/Guard/link"
-]]>
-		</assert-output>
-		
-		<assert-output name="Callback">
-<![CDATA[
-Callback: PageCallback[Protected]
-]]>		
-		</assert-output>		
-  	</request>
-  	
-  	<!-- Simulate clicking the link, which should send the
-  	     user to the Protected page.  -->
-  	     
-  	<request>
-  		<parameter name="service" value="direct/1/Guard/link"/>
-  		
-  		<assert-output name="Title">
-<![CDATA[
-<title>Protected</title>
-]]>
-		</assert-output>
-		
-	</request>
-	
-
-	<!-- Now, try the original request again, now that the Guard
-		 page has had its say. -->
-
-	<request>
-  		<parameter name="service" value="page/Protected"/>
-  		
-  		<assert-output name="Title">
-<![CDATA[
-<title>Protected</title>
-]]>
-		</assert-output>
-				
-	</request>
-	  	
-</mock-test>
\ No newline at end of file
diff --git a/3.0.4/junit/mock-scripts/TestWMLComponents.xml b/3.0.4/junit/mock-scripts/TestWMLComponents.xml
deleted file mode 100644
index 81f329e..0000000
--- a/3.0.4/junit/mock-scripts/TestWMLComponents.xml
+++ /dev/null
@@ -1,153 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!-- $Id$ -->
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<mock-test>
-    <context name="mock" root="context51"/>
-
-  	<servlet name="app" class="org.apache.tapestry.ApplicationServlet">
-  		<init-parameter
-  			name="org.apache.tapestry.application-specification"
-  			value="/org/apache/tapestry/junit/mock/wml/Mock.application"/>
-  	</servlet>
-
-    <request>
-        <parameter name="service" value="home"/>
-
-        <assert-output name="Do component">
-            <![CDATA[
-            <do type="prev" label="Prev">
-            ]]>
-        </assert-output>
-
-        <assert-output-matches name="Card Ids" subgroup="1">
-            <![CDATA[
-            <card .*?id="(.*?)".*?>
-            ]]>
-            <match>logo</match>
-            <match>main</match>
-            <match>anotherCard</match>
-        </assert-output-matches>
-
-        <assert-output name="Timer">
-            <![CDATA[
-            <timer name="timer" value="20"/>
-            ]]>
-        </assert-output>
-
-        <assert-output name="Image URL">
-            <![CDATA[
-            <img src="/mock/images/image.wbmp" alt="Image" align="middle"/>
-            ]]>
-        </assert-output>
-
-        <assert-output name="Onevent component">
-            <![CDATA[
-            <onevent type="onenterforward">
-            ]]>
-        </assert-output>
-
-        <assert-output name="Setvat component">
-            <![CDATA[
-            <setvar name="u" value="newbie"/>
-            ]]>
-        </assert-output>
-
-        <assert-output name="Setvat component">
-            <![CDATA[
-            <setvar name="l" value=""/>
-            ]]>
-        </assert-output>
-
-        <assert-output name="ServiceLink component">
-            <![CDATA[
-            <go href="/mock/app?service=home"/>
-            ]]>
-        </assert-output>
-
-        <!--  PropertySelection -->
-        <assert-output name="Select">
-            <![CDATA[
-            <select name="l">
-            ]]>
-        </assert-output>
-
-        <assert-output-matches name="Option values" subgroup="1">
-            <![CDATA[
-            <option value="(.*?)">
-            ]]>
-            <match>0</match>
-            <match>1</match>
-            <match>2</match>
-        </assert-output-matches>
-
-        <assert-output-matches name="Option bodies" subgroup="1">
-            <![CDATA[
-            <option .*?>(.*?)</option>
-            ]]>
-            <match>option_one</match>
-            <match>option_two</match>
-            <match>option_three</match>
-        </assert-output-matches>
-
-        <assert-output-matches name="Go Parameter Names" subgroup="1">
-            <![CDATA[
-            <postfield name="(.*?)".*?/>
-            ]]>
-            <match>service</match>
-            <match>Go0</match>
-            <match>u</match>
-            <match>l</match>
-        </assert-output-matches>
-
-        <assert-output-matches name="Go Parameter Values" subgroup="1">
-            <![CDATA[
-            <postfield .*?value="(.*?)"/>
-            ]]>
-            <match>action/0/Home/0/go</match>
-            <match>u,l</match>
-            <match>$(username)</match>
-            <match>$(l)</match>
-        </assert-output-matches>
-
-    </request>
-
-    <request>
-        <parameter name="service" value="action/0/Home/0/go"/>
-
-        <parameter name="Go0" value="u,l"/>
-        <parameter name="u" value="newbie"/>
-        <parameter name="l" value="0"/>
-
-        <assert-output name="Card">
-            <![CDATA[
-            <card title="Result" id="Result">
-            ]]>
-        </assert-output>
-
-        <assert-output-matches name="Result Values" subgroup="1">
-            <![CDATA[
-            <strong>(.*?)</strong>
-            ]]>
-            <match>newbie</match>
-            <match>option_one</match>
-        </assert-output-matches>
-
-    </request>
-
-</mock-test>
-
diff --git a/3.0.4/junit/mock-scripts/TestWMLContentType.xml b/3.0.4/junit/mock-scripts/TestWMLContentType.xml
deleted file mode 100644
index d3a341f..0000000
--- a/3.0.4/junit/mock-scripts/TestWMLContentType.xml
+++ /dev/null
@@ -1,38 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!-- $Id$ -->
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<mock-test>
-    <context name="mock" root="context51"/>
-
-    <servlet name="app" class="org.apache.tapestry.ApplicationServlet">
-        <init-parameter
-            name="org.apache.tapestry.application-specification"
-            value="/org/apache/tapestry/junit/mock/wml/Mock.application"/>
-    </servlet>
-
-    <request>
-        <parameter name="service" value="page/ContentType"/>
-
-        <assert-output-stream name="Image Content"
-                content-type="text/vnd.wap.wml;charset=UTF-8"
-                path="src/org/apache/tapestry/junit/mock/wml/ContentType.wml"/>
-
-    </request>
-
-</mock-test>
-
diff --git a/3.0.4/junit/mock-scripts/TestWMLFormComponents.xml b/3.0.4/junit/mock-scripts/TestWMLFormComponents.xml
deleted file mode 100644
index 0542e30..0000000
--- a/3.0.4/junit/mock-scripts/TestWMLFormComponents.xml
+++ /dev/null
@@ -1,147 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!-- $Id$ -->
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<mock-test>
-    <context name="mock" root="context51"/>
-
-    <servlet name="app" class="org.apache.tapestry.ApplicationServlet">
-        <init-parameter
-            name="org.apache.tapestry.application-specification"
-            value="/org/apache/tapestry/junit/mock/wml/Mock.application"/>
-    </servlet>
-
-    <request>
-        <parameter name="service" value="page/Input"/>
-
-        <assert-output name="Input component">
-            <![CDATA[
-            <input type="text" name="fname" title="FName" value="Ronnie"/>
-            ]]>
-        </assert-output>
-
-        <assert-output name="Input component">
-            <![CDATA[
-            <input type="text" name="lname" title="LName"/>
-            ]]>
-        </assert-output>
-
-    </request>
-
-    <request>
-        <parameter name="service" value="page/NoGo"/>
-
-        <assert-output name="Card">
-            <![CDATA[
-            <card id="Exception" title="Exception">
-            ]]>
-        </assert-output>
-
-        <assert-output name="Exception Name">
-        org.apache.tapestry.ApplicationRuntimeException
-        </assert-output>
-
-        <assert-output name="Exception Messge">
-        This postfield must be contained within a Go.
-        </assert-output>
-
-        <assert-output name="Component Id">
-        [NoGo/orphan]
-        </assert-output>
-
-    </request>
-
-    <request>
-        <parameter name="service" value="page/Rewind"/>
-
-        <assert-output name="Card">
-            <![CDATA[
-            <card id="Postfield">
-            ]]>
-        </assert-output>
-
-        <assert-output-matches name="Go Parameter Names" subgroup="1">
-            <![CDATA[
-            <postfield name="(.*?)".*?/>
-            ]]>
-            <match>service</match>
-            <match>sp</match>
-            <match>Go0</match>
-            <match>u</match>
-            <match>service</match>
-            <match>Go1</match>
-            <match>v</match>
-        </assert-output-matches>
-
-        <assert-output-matches name="Go Parameter Values" subgroup="1">
-            <![CDATA[
-            <postfield .*?value="(.*?)"/>
-            ]]>
-            <match>direct/0/Rewind/g</match>
-            <match>S0</match>
-            <match>u</match>
-            <match>$(u)</match>
-            <match>action/0/Rewind/1/h</match>
-            <match>v</match>
-            <match>$(v)</match>
-        </assert-output-matches>
-
-    </request>
-
-    <request>
-        <parameter name="service" value="action/0/Rewind/1/h"/>
-
-        <parameter name="Go1" value="v"/>
-        <parameter name="v" value="VVV"/>
-
-        <assert-output name="Card">
-            <![CDATA[
-            <card title="Result" id="Result">
-            ]]>
-        </assert-output>
-
-        <assert-output-matches name="Result Values" subgroup="1">
-            <![CDATA[
-            <strong>(.*?)</strong>
-            ]]>
-            <match>VVV</match>
-            <match>VVV</match>
-        </assert-output-matches>
-
-    </request>
-
-    <request>
-        <parameter name="service" value="direct/0/Rewind/g"/>
-
-        <parameter name="sp" value="S0"/>
-        <parameter name="Go0" value="v"/>
-        <parameter name="u" value="VVV"/>
-
-        <assert-output name="Card">
-            <![CDATA[
-            <card id="StaleLink" title="StaleLink">
-            ]]>
-        </assert-output>
-
-        <assert-output name="Cause">
-        Rewind of form Rewind/g expected allocated id #1 to be 'v', but was 'u' (requested by component Rewind/u).
-        </assert-output>
-
-    </request>
-
-</mock-test>
-
diff --git a/3.0.4/junit/mock-scripts/TestWMLNestedCard.xml b/3.0.4/junit/mock-scripts/TestWMLNestedCard.xml
deleted file mode 100644
index 9a8d124..0000000
--- a/3.0.4/junit/mock-scripts/TestWMLNestedCard.xml
+++ /dev/null
@@ -1,52 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!-- $Id$ -->
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<mock-test>
-    <context name="mock" root="context51"/>
-
-    <servlet name="app" class="org.apache.tapestry.ApplicationServlet">
-        <init-parameter
-            name="org.apache.tapestry.application-specification"
-            value="/org/apache/tapestry/junit/mock/wml/Mock.application"/>
-    </servlet>
-
-    <request>
-        <parameter name="service" value="page/NestedCard"/>
-
-        <assert-output name="Card">
-            <![CDATA[
-            <card id="Exception" title="Exception">
-            ]]>
-        </assert-output>
-
-        <assert-output name="Exception Name">
-        org.apache.tapestry.ApplicationRuntimeException
-        </assert-output>
-
-        <assert-output name="Exception Messge">
-        Cards may not be nested.
-        </assert-output>
-
-        <assert-output name="Component Id">
-        [NestedCard/nestedCard]
-        </assert-output>
-
-    </request>
-
-</mock-test>
-
diff --git a/3.0.4/junit/mock-scripts/TestWMLSelect.xml b/3.0.4/junit/mock-scripts/TestWMLSelect.xml
deleted file mode 100644
index 719dd9c..0000000
--- a/3.0.4/junit/mock-scripts/TestWMLSelect.xml
+++ /dev/null
@@ -1,94 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!-- $Id$ -->
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<mock-test>
-    <context name="mock" root="context51"/>
-
-  	<servlet name="app" class="org.apache.tapestry.ApplicationServlet">
-  		<init-parameter
-  			name="org.apache.tapestry.application-specification"
-  			value="/org/apache/tapestry/junit/mock/wml/Mock.application"/>
-  	</servlet>
-
-    <request>
-        <parameter name="service" value="page/NestedSelect"/>
-
-        <assert-output name="Card">
-            <![CDATA[
-            <card id="Exception" title="Exception">
-            ]]>
-        </assert-output>
-
-        <assert-output name="Exception Name">
-        org.apache.tapestry.ApplicationRuntimeException
-        </assert-output>
-
-        <assert-output name="Exception Messge">
-        Select components may not be nested.
-        </assert-output>
-
-        <assert-output name="Component Id">
-        [NestedSelect/nestedSelect]
-        </assert-output>
-    </request>
-
-    <request>
-        <parameter name="service" value="page/Select"/>
-
-        <assert-output name="Card">
-            <![CDATA[
-            <card id="Select">
-            ]]>
-        </assert-output>
-
-        <assert-output-matches name="Onpick values" subgroup="1">
-            <![CDATA[
-            <option .*?onpick="(.*?)".*?>
-            ]]>
-            <match>#sexcard</match>
-            <match>#incomecard</match>
-            <match>#hobbiescard</match>
-        </assert-output-matches>
-    </request>
-
-    <request>
-
-        <parameter name="service" value="action/0/Select/0/go"/>
-
-        <parameter name="Go0" value="sex,income,hobbies"/>
-        <parameter name="sex" value="Male"/>
-        <parameter name="income" value="Over $100K"/>
-        <parameter name="hobbies" value="Skiing,Book,Traveling"/>
-
-        <assert-output name="Card">
-            <![CDATA[
-            <card title="Result" id="Result">
-            ]]>
-        </assert-output>
-
-        <assert-output-matches name="Result Values" subgroup="1">
-            <![CDATA[
-            <strong>(.*?)</strong>
-            ]]>
-            <match>Male Over $$100K</match>
-            <match>Skiing,Book,Traveling</match>
-        </assert-output-matches>
-
-    </request>
-
-</mock-test>
diff --git a/3.0.4/junit/mock-scripts/TestWMLStaleSession.xml b/3.0.4/junit/mock-scripts/TestWMLStaleSession.xml
deleted file mode 100644
index d34283a..0000000
--- a/3.0.4/junit/mock-scripts/TestWMLStaleSession.xml
+++ /dev/null
@@ -1,112 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!-- $Id$ -->
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<mock-test>
-    <context name="mock" root="context51"/>
-
-    <servlet name="app" class="org.apache.tapestry.ApplicationServlet">
-        <init-parameter
-            name="org.apache.tapestry.application-specification"
-            value="/org/apache/tapestry/junit/mock/wml/Mock.application"/>
-    </servlet>
-
-    <request>
-        <parameter name="service" value="page/Stale"/>
-        <parameter name="context" value=""/>
-
-        <assert-output name="Do component">
-            <![CDATA[
-            <do type="prev">
-            ]]>
-        </assert-output>
-
-        <assert-output name="Card">
-            <![CDATA[
-            <card id="StaleSession">
-            ]]>
-        </assert-output>
-
-        <assert-output name="DirectLink URL">
-            <![CDATA[
-            href="/mock/app?service=direct/0/Stale/directLink"
-            ]]>
-        </assert-output>
-
-
-        <assert-output name="ActionLink URL">
-            <![CDATA[
-            href="/mock/app?service=action/0/Stale/0/actionLink"
-            ]]>
-        </assert-output>
-
-        <assert-output-matches name="Go Parameter Names" subgroup="1">
-            <![CDATA[
-            <postfield name="(.*?)".*?/>
-            ]]>
-            <match>service</match>
-            <match>sp</match>
-            <match>Go1</match>
-        </assert-output-matches>
-
-        <assert-output-matches name="Go Parameter Values" subgroup="1">
-            <![CDATA[
-            <postfield .*?value="(.*?)"/>
-            ]]>
-            <match>direct/0/Stale/go</match>
-            <match>S1</match>
-            <match></match>
-        </assert-output-matches>
-
-    </request>
-
-    <request>
-        <parameter name="service" value="direct/1/Stale/directLink"/>
-
-
-        <assert-output name="StaleSession (DirectLink)">
-            <![CDATA[
-            <card id="StaleSession" title="StaleSession">
-            ]]>
-        </assert-output>
-    </request>
-
-    <request>
-        <parameter name="service" value="action/1/Stale/0/actionLink"/>
-
-        <assert-output name="StaleSession (ActionLink)">
-            <![CDATA[
-            <card id="StaleSession" title="StaleSession">
-            ]]>
-        </assert-output>
-    </request>
-
-    <request>
-        <parameter name="service" value="direct/1/Stale/go"/>
-
-        <parameter name="sp" value="S1"/>
-        <parameter name="Go1" value=""/>
-
-        <assert-output name="StaleSession (Go)">
-            <![CDATA[
-            <card id="StaleSession" title="StaleSession">
-            ]]>
-        </assert-output>
-    </request>
-
-</mock-test>
-
diff --git a/3.0.4/junit/mock-scripts/TestWMLTimer.xml b/3.0.4/junit/mock-scripts/TestWMLTimer.xml
deleted file mode 100644
index 8bc053c..0000000
--- a/3.0.4/junit/mock-scripts/TestWMLTimer.xml
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!-- $Id$ -->
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<mock-test>
-    <context name="mock" root="context51"/>
-
-  	<servlet name="app" class="org.apache.tapestry.ApplicationServlet">
-  		<init-parameter
-  			name="org.apache.tapestry.application-specification"
-  			value="/org/apache/tapestry/junit/mock/wml/Mock.application"/>
-  	</servlet>
-
-    <request>
-        <parameter name="service" value="page/Timer"/>
-
-        <assert-output name="Timer component">
-            <![CDATA[
-            <timer name="timer_one" value="20"/>
-            ]]>
-        </assert-output>
-
-        <assert-output name="Timer component">
-            <![CDATA[
-            <timer name="timer_two" value="0"/>
-            ]]>
-        </assert-output>
-
-    </request>
-
-</mock-test>
diff --git a/3.0.4/junit/src/context36/Home.java b/3.0.4/junit/src/context36/Home.java
deleted file mode 100644
index fca04b9..0000000
--- a/3.0.4/junit/src/context36/Home.java
+++ /dev/null
@@ -1,31 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package context36;
-
-import org.apache.tapestry.html.BasePage;
-
-/**
- * Tests that an abstract page that doesn't need enhancement can still be instantiated.
- * See bug 26967
- *
- * @author Howard Lewis Ship
- */
-public abstract class Home extends BasePage
-{
-    public String getTestProperty()
-    {
-        return "SUCCESS";
-    }
-}
diff --git a/3.0.4/junit/src/junit/runner/excluded.properties b/3.0.4/junit/src/junit/runner/excluded.properties
deleted file mode 100644
index 8886b99..0000000
--- a/3.0.4/junit/src/junit/runner/excluded.properties
+++ /dev/null
@@ -1,12 +0,0 @@
-#
-# The list of excluded package paths for the TestCaseClassLoader
-#
-excluded.0=sun.*
-excluded.1=com.sun.*
-excluded.2=org.omg.*
-excluded.3=javax.*
-excluded.4=sunw.*
-excluded.5=java.*
-excluded.6=org.xml.*
-excluded.7=org.apache.*
-excluded.8=org.w3c.*
diff --git a/3.0.4/junit/src/log4j-slow.properties b/3.0.4/junit/src/log4j-slow.properties
deleted file mode 100644
index 8e7b948..0000000
--- a/3.0.4/junit/src/log4j-slow.properties
+++ /dev/null
@@ -1,9 +0,0 @@
-log4j.rootCategory=OFF, A1
-log4j.category.org.apache.tapestry=ALL
-# A1 is set to be a ConsoleAppender. 
-log4j.appender.A1=org.apache.log4j.FileAppender
-log4j.appender.A1.File=.clover-classes/discard.log
-
-log4j.appender.A1.layout=org.apache.log4j.PatternLayout
-log4j.appender.A1.layout.ConversionPattern=%c{1} [%p] %m%n
-
diff --git a/3.0.4/junit/src/log4j.properties b/3.0.4/junit/src/log4j.properties
deleted file mode 100644
index 0d46dff..0000000
--- a/3.0.4/junit/src/log4j.properties
+++ /dev/null
@@ -1,8 +0,0 @@
-log4j.rootCategory=OFF, A1
-  
-# A1 is set to be a ConsoleAppender. 
-log4j.appender.A1=org.apache.log4j.ConsoleAppender
-  
-# A1 uses PatternLayout.
-log4j.appender.A1.layout=org.apache.log4j.PatternLayout
-log4j.appender.A1.layout.ConversionPattern=%c{1} [%p] %m%n
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/BasicTestSuite.java b/3.0.4/junit/src/org/apache/tapestry/junit/BasicTestSuite.java
deleted file mode 100644
index 8c9a352..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/BasicTestSuite.java
+++ /dev/null
@@ -1,95 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-import org.apache.tapestry.junit.engine.TestRequestCycleToString;
-import org.apache.tapestry.junit.enhance.TestEnhancedClassFactory;
-import org.apache.tapestry.junit.enhance.TestMethodSignature;
-import org.apache.tapestry.junit.form.TestListEditMap;
-import org.apache.tapestry.junit.parse.TestLocation;
-import org.apache.tapestry.junit.parse.TestSpecificationParser;
-import org.apache.tapestry.junit.parse.TestTemplateParser;
-import org.apache.tapestry.junit.script.TestScript;
-import org.apache.tapestry.junit.spec.TestApplicationSpecification;
-import org.apache.tapestry.junit.spec.TestComponentSpecification;
-import org.apache.tapestry.junit.spec.TestDirection;
-import org.apache.tapestry.junit.utils.TestAdaptorRegistry;
-import org.apache.tapestry.junit.utils.TestDataSqueezer;
-import org.apache.tapestry.junit.utils.TestEnum;
-import org.apache.tapestry.junit.utils.TestIdAllocator;
-import org.apache.tapestry.junit.utils.TestLocalizedNameGenerator;
-import org.apache.tapestry.junit.utils.TestPool;
-import org.apache.tapestry.junit.utils.TestPropertyFinder;
-import org.apache.tapestry.junit.utils.TestRegexpMatcher;
-import org.apache.tapestry.junit.valid.ValidSuite;
-
-/**
- *  Used to isolate the non-mock tests from the mock Tapestry tests, since they run much
- *  faster.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 3.0
- *
- **/
-
-public class BasicTestSuite extends TestSuite
-{
-
-    public static Test suite()
-    {
-        TestSuite suite = new TestSuite("Basic Tapestry Test Suite");
-
-        suite.addTestSuite(TestTapestryFindLocation.class);
-        suite.addTestSuite(TestTapestryCheckMethodInvocation.class);
-        suite.addTestSuite(TestStaticLink.class);
-        suite.addTestSuite(TestEngineServiceLink.class);
-        suite.addTestSuite(TestAdaptorRegistry.class);
-        suite.addTestSuite(TestTapestryCoerceToIterator.class);
-        suite.addTestSuite(TestPool.class);
-        suite.addTestSuite(TestLocalizedNameGenerator.class);
-        suite.addTestSuite(TestResourceLocation.class);
-        suite.addTestSuite(TestPropertyFinder.class);
-        suite.addTestSuite(TestListenerMap.class);
-        suite.addTestSuite(TestIdAllocator.class);
-        suite.addTestSuite(TestComponentMessages.class);
-        suite.addTestSuite(TestTemplateParser.class);
-        suite.addTestSuite(TestLocation.class);
-        suite.addTestSuite(TestSpecificationParser.class);
-        suite.addTestSuite(TestApplicationSpecification.class);
-        suite.addTest(ValidSuite.suite());
-        suite.addTestSuite(TestMultipart.class);
-        suite.addTestSuite(TestEnum.class);
-        suite.addTestSuite(TestDataSqueezer.class);
-        suite.addTestSuite(TestScript.class);
-        suite.addTestSuite(TestComponentSpecification.class);
-        suite.addTestSuite(TestBindings.class);
-        suite.addTestSuite(TestPropertySource.class);
-        suite.addTestSuite(TestComponent.class);
-        suite.addTestSuite(TestEnhancedClassFactory.class);
-        suite.addTestSuite(TestMethodSignature.class);
-        suite.addTestSuite(TestTapestryGetClassName.class);
-        suite.addTestSuite(TestRegexpMatcher.class);
-        suite.addTestSuite(TestListEditMap.class);
-        suite.addTestSuite(TestContentType.class);
-        suite.addTestSuite(TestRequestCycleToString.class);
-        suite.addTestSuite(TestDirection.class);
-
-        return suite;
-    }
-}
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/MockApplicationSpecification.java b/3.0.4/junit/src/org/apache/tapestry/junit/MockApplicationSpecification.java
deleted file mode 100644
index 8d12077..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/MockApplicationSpecification.java
+++ /dev/null
@@ -1,174 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit;
-
-import org.apache.tapestry.spec.IApplicationSpecification;
-import org.apache.tapestry.spec.IExtensionSpecification;
-import org.apache.tapestry.IResourceResolver;
-import org.apache.tapestry.IResourceLocation;
-import org.apache.tapestry.ILocation;
-
-import java.util.List;
-import java.util.Map;
-import java.util.HashMap;
-
-public class MockApplicationSpecification implements IApplicationSpecification {
-    private Map extensions = new HashMap();
-
-    public String getLibrarySpecificationPath(String id) {
-        return null;
-    }
-
-    public void setLibrarySpecificationPath(String id, String path) {
-    }
-
-    public List getLibraryIds() {
-        return null;
-    }
-
-    public String getPageSpecificationPath(String name) {
-        return null;
-    }
-
-    public void setPageSpecificationPath(String name, String path) {
-    }
-
-    public List getPageNames() {
-        return null;
-    }
-
-    public void setComponentSpecificationPath(String type, String path) {
-    }
-
-    public String getComponentSpecificationPath(String type) {
-        return null;
-    }
-
-    public List getComponentTypes() {
-        return null;
-    }
-
-    public String getServiceClassName(String name) {
-        return null;
-    }
-
-    public List getServiceNames() {
-        return null;
-    }
-
-    public void setServiceClassName(String name, String className) {
-    }
-
-    public String getDescription() {
-        return null;
-    }
-
-    public void setDescription(String description) {
-    }
-
-    public Map getExtensionSpecifications() {
-        return null;
-    }
-
-    public void addExtensionSpecification(String name, IExtensionSpecification extension) {
-    }
-
-    public List getExtensionNames() {
-        return null;
-    }
-
-    public IExtensionSpecification getExtensionSpecification(String name) {
-        return null;
-    }
-
-    public Object getExtension(String name) {
-        return getExtension(name, null);
-    }
-
-    /**
-     * Ignore type constraint for now, just returns item from
-     * map from {@link #setExtensions(Map)} the specified name.
-     */
-    public Object getExtension(String name, Class typeConstraint) {
-        return extensions.get(name);
-    }
-
-    public boolean checkExtension(String name) {
-        return extensions.get(name) != null;
-    }
-
-    public void setExtensions(Map extensions) {
-        this.extensions = extensions;
-    }
-
-    public void instantiateImmediateExtensions() {
-    }
-
-    public IResourceResolver getResourceResolver() {
-        return null;
-    }
-
-    public void setResourceResolver(IResourceResolver resolver) {
-    }
-
-    public String getPublicId() {
-        return null;
-    }
-
-    public void setPublicId(String value) {
-    }
-
-    public IResourceLocation getSpecificationLocation() {
-        return null;
-    }
-
-    public void setSpecificationLocation(IResourceLocation specificationLocation) {
-    }
-
-    public List getPropertyNames() {
-        return null;
-    }
-
-    public void setProperty(String name, String value) {
-    }
-
-    public void removeProperty(String name) {
-    }
-
-    public String getProperty(String name) {
-        return null;
-    }
-
-    public void setLocation(ILocation location) {
-    }
-
-    public ILocation getLocation() {
-        return null;
-    }
-
-    public String getName() {
-        return null;
-    }
-
-    public void setEngineClassName(String value) {
-    }
-
-    public String getEngineClassName() {
-        return null;
-    }
-
-    public void setName(String name) {
-    }
-}
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/MockEngine.java b/3.0.4/junit/src/org/apache/tapestry/junit/MockEngine.java
deleted file mode 100644
index 107ca0e..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/MockEngine.java
+++ /dev/null
@@ -1,213 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit;
-
-import java.io.IOException;
-import java.util.Locale;
-
-import javax.servlet.ServletException;
-
-import org.apache.tapestry.IEngine;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.IResourceResolver;
-import org.apache.tapestry.asset.ResourceChecksumSource;
-import org.apache.tapestry.engine.IComponentClassEnhancer;
-import org.apache.tapestry.engine.IComponentMessagesSource;
-import org.apache.tapestry.engine.IEngineService;
-import org.apache.tapestry.engine.IPageRecorder;
-import org.apache.tapestry.engine.IPageSource;
-import org.apache.tapestry.engine.IPropertySource;
-import org.apache.tapestry.engine.IScriptSource;
-import org.apache.tapestry.engine.ISpecificationSource;
-import org.apache.tapestry.engine.ITemplateSource;
-import org.apache.tapestry.request.RequestContext;
-import org.apache.tapestry.spec.IApplicationSpecification;
-import org.apache.tapestry.util.DefaultResourceResolver;
-import org.apache.tapestry.util.io.DataSqueezer;
-import org.apache.tapestry.util.pool.Pool;
-
-/**
- *  An implementation of {@link IEngine} used for unit testing.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 2.0.4
- *
- **/
-
-public class MockEngine implements IEngine
-{
-    private IResourceResolver _resolver;
-    private IComponentMessagesSource componentStringsSource;
-
-    private Pool _pool = new Pool();
-    private String _servletPath;
-    private IApplicationSpecification applicationSpecification;
-
-    public void forgetPage(String name)
-    {
-    }
-
-    public Locale getLocale()
-    {
-        return null;
-    }
-
-    public void setLocale(Locale value)
-    {
-    }
-
-    public IPageRecorder getPageRecorder(String pageName, IRequestCycle cycle)
-    {
-        return null;
-    }
-
-    public IPageRecorder createPageRecorder(String pageName, IRequestCycle cycle)
-    {
-        return null;
-    }
-
-    public IPageSource getPageSource()
-    {
-        return null;
-    }
-
-    public IEngineService getService(String name)
-    {
-        return null;
-    }
-
-    public String getServletPath()
-    {
-        return _servletPath;
-    }
-
-    public String getContextPath()
-    {
-        return null;
-    }
-
-    public IApplicationSpecification getSpecification()
-    {
-        return applicationSpecification;
-    }
-
-    public void setSpecification(IApplicationSpecification appSpec)
-    {
-        this.applicationSpecification = appSpec;
-    }
-
-    public ISpecificationSource getSpecificationSource()
-    {
-        return null;
-    }
-
-    public ITemplateSource getTemplateSource()
-    {
-        return null;
-    }
-
-    public boolean service(RequestContext context) throws ServletException, IOException
-    {
-        return false;
-    }
-
-    public IResourceResolver getResourceResolver()
-    {
-        if (_resolver == null)
-            _resolver = new DefaultResourceResolver();
-
-        return _resolver;
-    }
-
-    public Object getVisit()
-    {
-        return null;
-    }
-
-    public Object getVisit(IRequestCycle cycle)
-    {
-        return null;
-    }
-
-    public void setVisit(Object value)
-    {
-    }
-
-    public boolean isResetServiceEnabled()
-    {
-        return false;
-    }
-
-    public IScriptSource getScriptSource()
-    {
-        return null;
-    }
-
-    public boolean isStateful()
-    {
-        return false;
-    }
-
-    public IComponentMessagesSource getComponentMessagesSource()
-    {
-        return componentStringsSource;
-    }
-
-    public void setComponentStringsSource(IComponentMessagesSource componentStringsSource)
-    {
-        this.componentStringsSource = componentStringsSource;
-    }
-
-    public DataSqueezer getDataSqueezer()
-    {
-        return null;
-    }
-
-    public IPropertySource getPropertySource()
-    {
-        return null;
-    }
-
-    public Pool getPool()
-    {
-        return _pool;
-    }
-
-    public Object getGlobal()
-    {
-        return null;
-    }
-
-    public IComponentClassEnhancer getComponentClassEnhancer()
-    {
-        return null;
-    }
-
-    public void setServletPath(String servletPath)
-    {
-        _servletPath = servletPath;
-    }
-
-    public String getOutputEncoding()
-    {
-        return "UTF-8";
-    }
-
-    public ResourceChecksumSource getResourceChecksumSource()
-    {
-        return null;
-    }
-}
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/MockPage.java b/3.0.4/junit/src/org/apache/tapestry/junit/MockPage.java
deleted file mode 100644
index 51b73f8..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/MockPage.java
+++ /dev/null
@@ -1,337 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit;
-
-import java.io.OutputStream;
-import java.util.Collection;
-import java.util.Locale;
-import java.util.Map;
-
-import org.apache.tapestry.IAsset;
-import org.apache.tapestry.IBinding;
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.IMessages;
-import org.apache.tapestry.IEngine;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.INamespace;
-import org.apache.tapestry.IPage;
-import org.apache.tapestry.IRender;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.engine.IPageLoader;
-import org.apache.tapestry.event.ChangeObserver;
-import org.apache.tapestry.event.PageDetachListener;
-import org.apache.tapestry.event.PageRenderListener;
-import org.apache.tapestry.event.PageValidateListener;
-import org.apache.tapestry.spec.BaseLocatable;
-import org.apache.tapestry.spec.IComponentSpecification;
-
-/**
- *  Fake implementation of {@link IPage} used during unit testing.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 2.0.4
- *
- **/
-
-public class MockPage extends BaseLocatable implements IPage
-{
-    private IEngine _engine;
-    private Locale locale;
-    private IComponentSpecification _specification;
-
-    public void detach()
-    {
-    }
-
-    public IEngine getEngine()
-    {
-        return _engine;
-    }
-
-    public ChangeObserver getChangeObserver()
-    {
-        return null;
-    }
-
-    public Locale getLocale()
-    {
-        return locale;
-    }
-
-    public void setLocale(Locale locale)
-    {
-        this.locale = locale;
-    }
-
-    public IComponent getNestedComponent(String path)
-    {
-        return null;
-    }
-
-    public void attach(IEngine value)
-    {
-    }
-
-    public void renderPage(IMarkupWriter writer, IRequestCycle cycle)
-    {
-    }
-
-    public void setChangeObserver(ChangeObserver value)
-    {
-    }
-
-    public void validate(IRequestCycle cycle)
-    {
-    }
-
-    public IMarkupWriter getResponseWriter(OutputStream out)
-    {
-        return null;
-    }
-
-    public void beginResponse(IMarkupWriter writer, IRequestCycle cycle)
-    {
-    }
-
-    public IRequestCycle getRequestCycle()
-    {
-        return null;
-    }
-
-    public void setRequestCycle(IRequestCycle cycle)
-    {
-    }
-
-    public Object getVisit()
-    {
-        return null;
-    }
-
-    public void addPageRenderListener(PageRenderListener listener)
-    {
-    }
-
-    public void addAsset(String name, IAsset asset)
-    {
-    }
-
-    public void addComponent(IComponent component)
-    {
-    }
-
-    public Map getAssets()
-    {
-        return null;
-    }
-
-    public IAsset getAsset(String name)
-    {
-        return null;
-    }
-
-    public IBinding getBinding(String name)
-    {
-        return null;
-    }
-
-    public Collection getBindingNames()
-    {
-        return null;
-    }
-
-    public Map getBindings()
-    {
-        return null;
-    }
-
-    public IComponent getComponent(String id)
-    {
-        return null;
-    }
-
-    public IComponent getContainer()
-    {
-        return null;
-    }
-
-    public void setContainer(IComponent value)
-    {
-    }
-
-    public String getExtendedId()
-    {
-        return null;
-    }
-
-    public String getId()
-    {
-        return null;
-    }
-
-    public void setId(String value)
-    {
-    }
-
-    public String getIdPath()
-    {
-        return null;
-    }
-
-    /**
-     *  Returns this (it is, after all, MockPage, not MockComponent).
-     * 
-     **/
-
-    public IPage getPage()
-    {
-        return this;
-    }
-
-    public void setPage(IPage value)
-    {
-    }
-
-    public IComponentSpecification getSpecification()
-    {
-        return _specification;
-    }
-
-    public void setSpecification(IComponentSpecification value)
-    {
-        _specification = value;
-    }
-
-    public void setBinding(String name, IBinding binding)
-    {
-    }
-
-    public Map getComponents()
-    {
-        return null;
-    }
-
-    public void finishLoad(
-        IRequestCycle cycle,
-        IPageLoader loader,
-        IComponentSpecification specification)
-    {
-    }
-
-    /**
-     *  Gets the string source from the engine, gets the strings
-     *  from the string source, and invokes
-     *  {@link org.apache.tapestry.IMessages#getMessage(String)}.
-     * 
-     **/
-
-    public String getString(String key)
-    {
-        return getMessages().getMessage(key);
-    }
-
-    public void render(IMarkupWriter writer, IRequestCycle cycle)
-    {
-    }
-
-    public void setEngine(IEngine engine)
-    {
-        _engine = engine;
-    }
-
-    public void removePageDetachListener(PageDetachListener listener)
-    {
-    }
-
-    public void removePageRenderListener(PageRenderListener listener)
-    {
-    }
-
-    public INamespace getNamespace()
-    {
-        return null;
-    }
-
-    public void setNamespace(INamespace namespace)
-    {
-    }
-
-    public void beginPageRender()
-    {
-    }
-
-    public void endPageRender()
-    {
-    }
-
-    public void addBody(IRender element)
-    {
-    }
-
-    public void renderBody(IMarkupWriter writer, IRequestCycle cycle)
-    {
-    }
-
-    public String getQualifiedName()
-    {
-        return null;
-    }
-
-    public String getPageName()
-    {
-        return null;
-    }
-
-    public void setPageName(String pageName)
-    {
-    }
-
-    public Object getGlobal()
-    {
-        return null;
-    }
-
-    public IMessages getMessages()
-    {
-        return _engine.getComponentMessagesSource().getMessages(this);
-    }
-
-    public void addPageDetachListener(PageDetachListener listener)
-    {
-    }
-
-    public void addPageValidateListener(PageValidateListener listener)
-    {
-    }
-
-    public void removePageValidateListener(PageValidateListener listener)
-    {
-    }
-
-    public String getMessage(String key)
-    {
-        return getString(key);
-    }
-
-	public void setProperty(String propertyName, Object value)
-	{
-	}
-
-	public Object getProperty(String propertyName)
-	{
-		return null;
-	}
-
-}
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/MockPage1.properties b/3.0.4/junit/src/org/apache/tapestry/junit/MockPage1.properties
deleted file mode 100644
index 891ccd6..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/MockPage1.properties
+++ /dev/null
@@ -1,8 +0,0 @@
-only-in-base=BASE1
-overwritten-in-language=BASE2
-overwritten-in-country=BASE3
-overwritten-in-variant=BASE4
-
-using-date-format=A formatted date: {0,date,short}
-
-exception=Exception: {0}
\ No newline at end of file
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/MockPage1_en.properties b/3.0.4/junit/src/org/apache/tapestry/junit/MockPage1_en.properties
deleted file mode 100644
index 7d24e8a..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/MockPage1_en.properties
+++ /dev/null
@@ -1,3 +0,0 @@
-# $Id$
-
-overwritten-in-language=LANGUAGE1_en
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/MockPage1_en_US.properties b/3.0.4/junit/src/org/apache/tapestry/junit/MockPage1_en_US.properties
deleted file mode 100644
index 00c4aa4..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/MockPage1_en_US.properties
+++ /dev/null
@@ -1,3 +0,0 @@
-# $Id$
-
-overwritten-in-country=COUNTRY1_en_US
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/MockPage1_en_US_Tapestry.properties b/3.0.4/junit/src/org/apache/tapestry/junit/MockPage1_en_US_Tapestry.properties
deleted file mode 100644
index e6d1389..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/MockPage1_en_US_Tapestry.properties
+++ /dev/null
@@ -1,3 +0,0 @@
-# $Id$
-
-overwritten-in-variant=VARIANT1_en_US_Tapestry
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/MockPage1_fr.properties b/3.0.4/junit/src/org/apache/tapestry/junit/MockPage1_fr.properties
deleted file mode 100644
index 025586d..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/MockPage1_fr.properties
+++ /dev/null
@@ -1,3 +0,0 @@
-# $Id$
-
-overwritten-in-language=LANGUAGE1_fr
\ No newline at end of file
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/MockPage1_fr_CD.properties b/3.0.4/junit/src/org/apache/tapestry/junit/MockPage1_fr_CD.properties
deleted file mode 100644
index 9297ba7..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/MockPage1_fr_CD.properties
+++ /dev/null
@@ -1,3 +0,0 @@
-# $Id$
-
-overwritten-in-country=COUNTRY1_fr_CD
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/MockPage1_fr_CD_Foo.properties b/3.0.4/junit/src/org/apache/tapestry/junit/MockPage1_fr_CD_Foo.properties
deleted file mode 100644
index 00c0675..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/MockPage1_fr_CD_Foo.properties
+++ /dev/null
@@ -1,3 +0,0 @@
-# $Id$
-
-overwritten-in-variant=VARIANT1_fr_CD_Foo
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/MockPage2_en.properties b/3.0.4/junit/src/org/apache/tapestry/junit/MockPage2_en.properties
deleted file mode 100644
index ef70478..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/MockPage2_en.properties
+++ /dev/null
@@ -1,4 +0,0 @@
-# $Id$
-
-language-key=LANGUAGE1
-overwritten-in-variant=LANGUAGE2
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/MockPage2_en__Tapestry.properties b/3.0.4/junit/src/org/apache/tapestry/junit/MockPage2_en__Tapestry.properties
deleted file mode 100644
index 1951ff5..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/MockPage2_en__Tapestry.properties
+++ /dev/null
@@ -1,3 +0,0 @@
-# $Id$
-
-overwritten-in-variant=VARIANT1_en__Tapestry
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/MockRequestCycle.java b/3.0.4/junit/src/org/apache/tapestry/junit/MockRequestCycle.java
deleted file mode 100644
index 241fe40..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/MockRequestCycle.java
+++ /dev/null
@@ -1,178 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.IEngine;
-import org.apache.tapestry.IForm;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IPage;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.StaleLinkException;
-import org.apache.tapestry.engine.IEngineService;
-import org.apache.tapestry.engine.IMonitor;
-import org.apache.tapestry.request.RequestContext;
-
-/**
- *  Used to simulate an {@link org.apache.tapestry.IRequestCycle} in some tests.
- * 
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 3.0
- **/
-public class MockRequestCycle implements IRequestCycle
-{
-    private IEngine _engine;
-    private String _lastEncodedURL;
-    private RequestContext _context;
-    private Map _attributes = new HashMap();
-
-    public MockRequestCycle()
-    {
-        this(new MockEngine(), null);
-    }
-
-    public MockRequestCycle(IEngine engine, RequestContext context)
-    {
-        _engine = engine;
-        _context = context;
-    }
-
-    public void cleanup()
-    {
-    }
-
-    public String encodeURL(String URL)
-    {
-        _lastEncodedURL = URL;
-
-        return URL;
-    }
-
-    public IEngine getEngine()
-    {
-        return _engine;
-    }
-
-    public Object getAttribute(String name)
-    {
-        return _attributes.get(name);
-    }
-
-    public IMonitor getMonitor()
-    {
-        return null;
-    }
-
-    public String getNextActionId()
-    {
-        return null;
-    }
-
-    public IPage getPage()
-    {
-        return null;
-    }
-
-    public IPage getPage(String name)
-    {
-        return null;
-    }
-
-    public RequestContext getRequestContext()
-    {
-        return _context;
-    }
-
-    public boolean isRewinding()
-    {
-        return false;
-    }
-
-    public boolean isRewound(IComponent component) throws StaleLinkException
-    {
-        return false;
-    }
-
-    public void removeAttribute(String name)
-    {
-        _attributes.remove(name);
-    }
-
-    public void renderPage(IMarkupWriter writer)
-    {
-    }
-
-    public void rewindPage(String targetActionId, IComponent targetComponent)
-    {
-    }
-
-    public void setAttribute(String name, Object value)
-    {
-        _attributes.put(name, value);
-    }
-
-    public void setPage(IPage page)
-    {
-    }
-
-    public void setPage(String name)
-    {
-    }
-
-    public void commitPageChanges()
-    {
-    }
-
-    public IEngineService getService()
-    {
-        return null;
-    }
-
-    public void rewindForm(IForm form, String targetActionId)
-    {
-    }
-
-    public void discardPage(String name)
-    {
-    }
-
-    public void setServiceParameters(Object[] parameters)
-    {
-    }
-
-    public Object[] getServiceParameters()
-    {
-        return null;
-    }
-
-    public String getLastEncodedURL()
-    {
-        return _lastEncodedURL;
-    }
-
-    public void activate(String name)
-    {
-    }
-
-    public void activate(IPage page)
-    {
-    }
-
-}
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/MockTypeConverter.java b/3.0.4/junit/src/org/apache/tapestry/junit/MockTypeConverter.java
deleted file mode 100644
index 871c3f7..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/MockTypeConverter.java
+++ /dev/null
@@ -1,34 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit;
-
-import ognl.DefaultTypeConverter;
-
-import java.util.Map;
-import java.util.Date;
-import java.sql.Timestamp;
-
-public class MockTypeConverter extends DefaultTypeConverter {
-    public Object convertValue(Map context, Object value, Class toType) {
-        Object result = null;
-
-        if ((toType == Timestamp.class) && (value instanceof Date)) {
-            return new Timestamp(((Date) value).getTime());
-        } else {
-            result = super.convertValue(context, value, toType);
-        }
-        return result;
-    }
-}
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/Properties.properties b/3.0.4/junit/src/org/apache/tapestry/junit/Properties.properties
deleted file mode 100644
index fa69eaa..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/Properties.properties
+++ /dev/null
@@ -1,4 +0,0 @@
-# $Id$
-
-fred=flintstone
-barney=rubble
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/TapestrySuite.java b/3.0.4/junit/src/org/apache/tapestry/junit/TapestrySuite.java
deleted file mode 100644
index 1841d90..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/TapestrySuite.java
+++ /dev/null
@@ -1,42 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-import org.apache.tapestry.junit.mock.TestMocks;
-
-/**
- *  Master suite of Tapestry tests, combining all other test suites.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *
- **/
-
-public class TapestrySuite extends TestSuite
-{
-    public static Test suite()
-    {
-        TestSuite suite = new TestSuite("Master Tapestry Test Suite");
-
-		suite.addTest(BasicTestSuite.suite());	
-        suite.addTest(TestMocks.suite());
-
-        return suite;
-    }
-
-}
\ No newline at end of file
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/TapestryTestCase.java b/3.0.4/junit/src/org/apache/tapestry/junit/TapestryTestCase.java
deleted file mode 100644
index f86f25b..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/TapestryTestCase.java
+++ /dev/null
@@ -1,158 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit;
-
-import java.util.Arrays;
-import java.util.List;
-import java.util.Locale;
-
-import junit.framework.AssertionFailedError;
-import junit.framework.TestCase;
-
-import org.apache.tapestry.IPage;
-import org.apache.tapestry.IResourceLocation;
-import org.apache.tapestry.IResourceResolver;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.engine.DefaultComponentMessagesSource;
-import org.apache.tapestry.engine.IComponentMessagesSource;
-import org.apache.tapestry.parse.SpecificationParser;
-import org.apache.tapestry.resource.ClasspathResourceLocation;
-
-import org.apache.tapestry.spec.ComponentSpecification;
-import org.apache.tapestry.spec.IApplicationSpecification;
-import org.apache.tapestry.spec.IComponentSpecification;
-import org.apache.tapestry.spec.ILibrarySpecification;
-import org.apache.tapestry.util.DefaultResourceResolver;
-import org.apache.tapestry.util.IPropertyHolder;
-
-/**
- *  Base class for Tapestry test cases.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 2.2
- * 
- **/
-
-public class TapestryTestCase extends TestCase
-{
-    protected static final boolean IS_JDK13 =
-        System.getProperty("java.specification.version").equals("1.3");
-
-    private IResourceResolver _resolver = new DefaultResourceResolver();
-
-    protected IPage createPage(String specificationPath, Locale locale)
-    {
-        IResourceLocation location = new ClasspathResourceLocation(_resolver, specificationPath);
-
-        IComponentMessagesSource source = new DefaultComponentMessagesSource();
-        MockEngine engine = new MockEngine();
-        engine.setComponentStringsSource(source);
-
-        MockPage result = new MockPage();
-        result.setEngine(engine);
-        result.setLocale(locale);
-
-  		// TODO the SpecFactory in SpecificationParser should be used in some way to create an IComponentSpecification!
-        IComponentSpecification spec = new ComponentSpecification(); 
-        spec.setSpecificationLocation(location);
-        result.setSpecification(spec);
-
-        return result;
-    }
-
-    protected IComponentSpecification parseComponent(String simpleName) throws Exception
-    {
-        SpecificationParser parser = new SpecificationParser(_resolver);
-
-        IResourceLocation location = getSpecificationResourceLocation(simpleName);
-
-        return parser.parseComponentSpecification(location);
-    }
-
-    protected IComponentSpecification parsePage(String simpleName) throws Exception
-    {
-        SpecificationParser parser = new SpecificationParser(_resolver);
-
-        IResourceLocation location = getSpecificationResourceLocation(simpleName);
-
-        return parser.parsePageSpecification(location);
-    }
-
-    protected IApplicationSpecification parseApp(String simpleName) throws Exception
-    {
-        SpecificationParser parser = new SpecificationParser(_resolver);
-
-        IResourceLocation location = getSpecificationResourceLocation(simpleName);
-
-        return parser.parseApplicationSpecification(location);
-    }
-
-    protected IResourceLocation getSpecificationResourceLocation(String simpleName)
-    {
-        String adjustedClassName = "/" + getClass().getName().replace('.', '/') + ".class";
-
-        IResourceLocation classResourceLocation =
-            new ClasspathResourceLocation(_resolver, adjustedClassName);
-
-        IResourceLocation appSpecLocation = classResourceLocation.getRelativeLocation(simpleName);
-        return appSpecLocation;
-    }
-
-    protected ILibrarySpecification parseLib(String simpleName) throws Exception
-    {
-        SpecificationParser parser = new SpecificationParser(_resolver);
-
-        IResourceLocation location = getSpecificationResourceLocation(simpleName);
-
-        return parser.parseLibrarySpecification(location);
-    }
-
-    protected void checkList(String propertyName, Object[] expected, Object[] actual)
-    {
-        checkList(propertyName, expected, Arrays.asList(actual));
-    }
-
-    protected void checkList(String propertyName, Object[] expected, List actual)
-    {
-        int count = Tapestry.size(actual);
-
-        assertEquals(propertyName + " element count", expected.length, count);
-
-        for (int i = 0; i < count; i++)
-        {
-            assertEquals("propertyName[" + i + "]", expected[i], actual.get(i));
-        }
-    }
-
-    protected void checkProperty(IPropertyHolder h, String propertyName, String expectedValue)
-    {
-        assertEquals("Property " + propertyName + ".", expectedValue, h.getProperty(propertyName));
-    }
-
-    protected void checkException(Throwable ex, String string)
-    {
-        if (ex.getMessage().indexOf(string) >= 0)
-            return;
-
-        throw new AssertionFailedError(
-            "Exception " + ex + " does not contain sub-string '" + string + "'.");
-    }
-
-    protected void unreachable()
-    {
-        throw new AssertionFailedError("This code should be unreachable.");
-    }
-}
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/TestBindings.java b/3.0.4/junit/src/org/apache/tapestry/junit/TestBindings.java
deleted file mode 100644
index d5dbf0d..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/TestBindings.java
+++ /dev/null
@@ -1,751 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit;
-
-import java.sql.Timestamp;
-import java.util.Date;
-import java.util.HashMap;
-
-import junit.framework.AssertionFailedError;
-
-import org.apache.tapestry.ApplicationRuntimeException;
-import org.apache.tapestry.BindingException;
-import org.apache.tapestry.IBinding;
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.IPage;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.IResourceResolver;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.binding.AbstractBinding;
-import org.apache.tapestry.binding.ExpressionBinding;
-import org.apache.tapestry.binding.FieldBinding;
-import org.apache.tapestry.binding.ListenerBinding;
-import org.apache.tapestry.binding.StaticBinding;
-import org.apache.tapestry.binding.StringBinding;
-import org.apache.tapestry.util.DefaultResourceResolver;
-
-/**
- * Do tests of bindings.
- * 
- * @author Howard Lewis Ship
- * @version $Id$
- */
-
-public class TestBindings extends TapestryTestCase
-{
-    public static final String STRING_FIELD = "stringField";
-
-    public static final Object NULL_FIELD = null;
-
-    private IResourceResolver _resolver = new DefaultResourceResolver();
-
-    private static class TestBinding extends AbstractBinding
-    {
-        private Object _object;
-
-        private TestBinding(Object object)
-        {
-            super(null);
-
-            _object = object;
-        }
-
-        public Object getObject()
-        {
-            return _object;
-        }
-
-    }
-
-    public class BoundPage extends MockPage
-    {
-        private boolean _booleanValue;
-
-        private int _intValue;
-
-        private double _doubleValue;
-
-        private Object _objectValue;
-
-        private Timestamp _dateValue;
-
-        public boolean getBooleanValue()
-        {
-            return _booleanValue;
-        }
-
-        public double getDoubleValue()
-        {
-            return _doubleValue;
-        }
-
-        public int getIntValue()
-        {
-            return _intValue;
-        }
-
-        public Object getObjectValue()
-        {
-            return _objectValue;
-        }
-
-        public void setBooleanValue(boolean booleanValue)
-        {
-            _booleanValue = booleanValue;
-        }
-
-        public void setDoubleValue(double doubleValue)
-        {
-            _doubleValue = doubleValue;
-        }
-
-        public void setIntValue(int intValue)
-        {
-            _intValue = intValue;
-        }
-
-        public void setObjectValue(Object objectValue)
-        {
-            _objectValue = objectValue;
-        }
-
-        public Timestamp getDateValue()
-        {
-            return _dateValue;
-        }
-
-        public void setDateValue(Timestamp dateValue)
-        {
-            _dateValue = dateValue;
-        }
-    }
-
-    public void testGetObject()
-    {
-        IBinding binding = new FieldBinding(_resolver,
-                "org.apache.tapestry.junit.TestBindings.STRING_FIELD", null);
-
-        assertEquals("Object", STRING_FIELD, binding.getObject());
-    }
-
-    public void testToString()
-    {
-        IBinding binding = new FieldBinding(_resolver,
-                "org.apache.tapestry.junit.TestBindings.STRING_FIELD", null);
-
-        assertEquals(
-                "String value (before access)",
-                "FieldBinding[org.apache.tapestry.junit.TestBindings.STRING_FIELD]",
-                binding.toString());
-
-        binding.getObject();
-
-        assertEquals(
-                "String value (after access)",
-                "FieldBinding[org.apache.tapestry.junit.TestBindings.STRING_FIELD (stringField)]",
-                binding.toString());
-    }
-
-    public void testJavaLang()
-    {
-        IBinding binding = new FieldBinding(_resolver, "Boolean.TRUE", null);
-
-        assertEquals("Object", Boolean.TRUE, binding.getObject());
-    }
-
-    public void testMissingClass()
-    {
-        IBinding binding = new FieldBinding(_resolver, "foo.bar.Baz.FIELD", null);
-
-        try
-        {
-
-            binding.getObject();
-
-            throw new AssertionFailedError("Not reachable.");
-        }
-        catch (BindingException ex)
-        {
-            checkException(ex, "Unable to resolve class foo.bar.Baz.");
-
-            assertEquals("Binding", binding, ex.getBinding());
-        }
-    }
-
-    public void testMissingField()
-    {
-        IBinding binding = new FieldBinding(_resolver,
-                "org.apache.tapestry.junit.TestBindings.MISSING_FIELD", null);
-
-        try
-        {
-            binding.getObject();
-
-            throw new AssertionFailedError("Not reachable.");
-        }
-        catch (BindingException ex)
-        {
-            checkException(
-                    ex,
-                    "Field org.apache.tapestry.junit.TestBindings.MISSING_FIELD does not exist.");
-
-            assertEquals("Binding", binding, ex.getBinding());
-        }
-    }
-
-    public final String INSTANCE_FIELD = "InstanceField";
-
-    public void testInstanceAccess()
-    {
-        IBinding binding = new FieldBinding(_resolver,
-                "org.apache.tapestry.junit.TestBindings.INSTANCE_FIELD", null);
-
-        try
-        {
-            binding.getObject();
-
-            throw new AssertionFailedError("Not reachable.");
-        }
-        catch (BindingException ex)
-        {
-            checkException(
-                    ex,
-                    "Field org.apache.tapestry.junit.TestBindings.INSTANCE_FIELD is an instance variable, not a class variable.");
-
-            assertEquals("Binding", binding, ex.getBinding());
-        }
-    }
-
-    public void testStaticBindingInt()
-    {
-        IBinding binding = new StaticBinding("107", null);
-
-        assertEquals("Int", 107, binding.getInt());
-
-        // Do it a second time, just to fill a code coverage gap.
-
-        assertEquals("Int", 107, binding.getInt());
-    }
-
-    public void testInvalidStaticBindingInt()
-    {
-        IBinding binding = new StaticBinding("barney", null);
-
-        try
-        {
-            binding.getInt();
-
-            throw new AssertionFailedError("Unreachable.");
-        }
-        catch (NumberFormatException ex)
-        {
-            checkException(ex, "barney");
-        }
-    }
-
-    public void testInvalidStaticBindingDouble()
-    {
-        IBinding binding = new StaticBinding("fred", null);
-
-        try
-        {
-            binding.getDouble();
-
-            throw new AssertionFailedError("Unreachable.");
-        }
-        catch (NumberFormatException ex)
-        {
-            checkException(ex, "fred");
-        }
-    }
-
-    public void testStaticBindingDouble()
-    {
-        IBinding binding = new StaticBinding("3.14", null);
-
-        assertEquals("Double", 3.14, binding.getDouble(), 0.);
-
-        // Do it a second time, just to fill a code coverage gap.
-
-        assertEquals("Double", 3.14, binding.getDouble(), 0.);
-    }
-
-    public void testStaticBindingToString()
-    {
-        IBinding binding = new StaticBinding("alfalfa", null);
-
-        assertEquals("ToString", "StaticBinding[alfalfa]", binding.toString());
-    }
-
-    public void testStaticBindingObject()
-    {
-        String value = Long.toString(System.currentTimeMillis());
-
-        IBinding binding = new StaticBinding(value, null);
-
-        assertEquals("Object", value, binding.getObject());
-    }
-
-    public void testGetIntWithNull()
-    {
-        IBinding binding = new TestBinding(null);
-
-        try
-        {
-            binding.getInt();
-        }
-        catch (BindingException ex)
-        {
-            assertEquals("Binding", binding, ex.getBinding());
-        }
-    }
-
-    public void testGetDoubleWithNull()
-    {
-        IBinding binding = new TestBinding(null);
-
-        try
-        {
-            binding.getDouble();
-        }
-        catch (BindingException ex)
-        {
-            assertEquals("Binding", binding, ex.getBinding());
-        }
-    }
-
-    public static final double DOUBLE_FIELD = 3.14;
-
-    public void testGetDoubleWithDouble()
-    {
-        IBinding binding = new TestBinding(new Double(3.14));
-
-        assertEquals("Double", 3.14, binding.getDouble(), 0);
-    }
-
-    public void testGetDoubleWithBoolean()
-    {
-        IBinding binding = new TestBinding(Boolean.TRUE);
-
-        assertEquals("Double", 1.0, binding.getDouble(), 0);
-
-        binding = new TestBinding(Boolean.FALSE);
-
-        assertEquals("Double", 0, binding.getDouble(), 0);
-    }
-
-    public void testGetDoubleWithString()
-    {
-        IBinding binding = new TestBinding("-102.7");
-
-        assertEquals("Double", -102.7, binding.getDouble(), 0);
-    }
-
-    public void testGetIntWithInt()
-    {
-        IBinding binding = new TestBinding(new Integer(37));
-
-        assertEquals("Int", 37, binding.getInt());
-    }
-
-    public void testGetIntWithBoolean()
-    {
-        IBinding binding = new TestBinding(Boolean.TRUE);
-
-        assertEquals("Int", 1, binding.getInt());
-
-        binding = new TestBinding(Boolean.FALSE);
-
-        assertEquals("Int", 0, binding.getInt());
-    }
-
-    public void testGetIntWithString()
-    {
-        IBinding binding = new TestBinding("3021");
-
-        assertEquals("Int", 3021, binding.getInt());
-    }
-
-    public void testGetObjectNull()
-    {
-        IBinding binding = new TestBinding(null);
-
-        assertNull("Object", binding.getObject("parameter", Number.class));
-    }
-
-    public void testGetObjectWithCheck()
-    {
-        IBinding binding = new TestBinding("Hello");
-
-        assertEquals("Object", "Hello", binding.getObject("baz", String.class));
-    }
-
-    public void testGetObjectFailureClass()
-    {
-        IBinding binding = new TestBinding("Hello");
-
-        try
-        {
-            binding.getObject("foo", Number.class);
-        }
-        catch (BindingException ex)
-        {
-            assertEquals("Parameter foo (Hello) is an instance of java.lang.String, "
-                    + "which does not inherit from java.lang.Number.", ex.getMessage());
-
-            assertEquals("Binding", binding, ex.getBinding());
-        }
-    }
-
-    public void testGetObjectFailureInterface()
-    {
-        IBinding binding = new TestBinding("Goodbye");
-
-        try
-        {
-            binding.getObject("bar", IRequestCycle.class);
-        }
-        catch (BindingException ex)
-        {
-            assertEquals(
-                    "Parameter bar (Goodbye) is an instance of java.lang.String, which does not "
-                            + "implement interface org.apache.tapestry.IRequestCycle.",
-                    ex.getMessage());
-
-            assertEquals("Binding", binding, ex.getBinding());
-        }
-    }
-
-    public void testGetStringForNull()
-    {
-        IBinding binding = new TestBinding(null);
-
-        assertNull("String", binding.getString());
-    }
-
-    public void testSetBoolean()
-    {
-        IBinding binding = new TestBinding(null);
-
-        try
-        {
-            binding.setBoolean(true);
-
-            throw new AssertionFailedError("Unreachable.");
-        }
-        catch (BindingException ex)
-        {
-            assertEquals("Binding", binding, ex.getBinding());
-        }
-    }
-
-    public void testSetString()
-    {
-        IBinding binding = new TestBinding(null);
-
-        try
-        {
-            binding.setString("Wilma");
-
-            throw new AssertionFailedError("Unreachable.");
-        }
-        catch (BindingException ex)
-        {
-            assertEquals("Binding", binding, ex.getBinding());
-        }
-    }
-
-    public void testSetInt()
-    {
-        IBinding binding = new TestBinding(null);
-
-        try
-        {
-            binding.setInt(98);
-
-            throw new AssertionFailedError("Unreachable.");
-        }
-        catch (BindingException ex)
-        {
-            assertEquals("Binding", binding, ex.getBinding());
-        }
-    }
-
-    public void testSetDouble()
-    {
-        IBinding binding = new TestBinding(null);
-
-        try
-        {
-            binding.setDouble(-1.5);
-
-            throw new AssertionFailedError("Unreachable.");
-        }
-        catch (BindingException ex)
-        {
-            assertEquals("Binding", binding, ex.getBinding());
-        }
-    }
-
-    public void testSetObject()
-    {
-        IBinding binding = new TestBinding(null);
-
-        try
-        {
-            binding.setObject(Boolean.TRUE);
-
-            throw new AssertionFailedError("Unreachable.");
-        }
-        catch (BindingException ex)
-        {
-            assertEquals("Binding", binding, ex.getBinding());
-        }
-    }
-
-    public void testInvalidFieldName()
-    {
-        IBinding binding = new FieldBinding(_resolver, "Baz", null);
-
-        try
-        {
-            binding.getObject();
-
-            throw new AssertionFailedError("Unreachable");
-        }
-        catch (BindingException ex)
-        {
-            checkException(ex, "Invalid field name: Baz.");
-
-            assertEquals("Binding", binding, ex.getBinding());
-        }
-    }
-
-    public void testExpressionBinding()
-    {
-        IPage page = new MockPage();
-
-        ExpressionBinding binding = new ExpressionBinding(_resolver, page, "page", null);
-
-        assertEquals("Expression property", "page", binding.getExpression());
-        assertEquals("Root property", page, binding.getRoot());
-        assertEquals("Object property", page, binding.getObject());
-    }
-
-    public void testMalformedOGNLExpression()
-    {
-        IPage page = new MockPage();
-
-        ExpressionBinding binding = new ExpressionBinding(_resolver, page, "zip flob boff", null);
-
-        try
-        {
-            binding.getObject();
-
-            throw new AssertionFailedError("Unreachable.");
-        }
-        catch (ApplicationRuntimeException ex)
-        {
-            checkException(ex, "Unable to parse expression 'zip flob boff'");
-        }
-    }
-
-    public void testUnknownProperty()
-    {
-        IPage page = new MockPage();
-
-        ExpressionBinding binding = new ExpressionBinding(_resolver, page, "tigris", null);
-
-        try
-        {
-            binding.getObject();
-
-            throw new AssertionFailedError("Unreachable.");
-        }
-        catch (BindingException ex)
-        {
-            checkException(ex, "Unable to resolve expression");
-            checkException(ex, "tigris");
-        }
-    }
-
-    public void testUpdateReadonlyProperty()
-    {
-        IPage page = new MockPage();
-
-        ExpressionBinding binding = new ExpressionBinding(_resolver, page, "bindings", null);
-
-        try
-        {
-            binding.setObject(new HashMap());
-
-            throw new AssertionFailedError("Unreachable.");
-        }
-        catch (BindingException ex)
-        {
-            checkException(ex, "Unable to update expression");
-            checkException(ex, "bindings");
-        }
-
-    }
-
-    public void testUpdateBoolean()
-    {
-        BoundPage page = new BoundPage();
-        ExpressionBinding binding = new ExpressionBinding(_resolver, page, "booleanValue", null);
-
-        binding.setBoolean(true);
-
-        assertEquals(true, page.getBooleanValue());
-
-        binding.setBoolean(false);
-
-        assertEquals(false, page.getBooleanValue());
-    }
-
-    public void testUpdateInt()
-    {
-        BoundPage page = new BoundPage();
-        ExpressionBinding binding = new ExpressionBinding(_resolver, page, "intValue", null);
-
-        binding.setInt(275);
-
-        assertEquals(275, page.getIntValue());
-    }
-
-    public void testUpdateDouble()
-    {
-        BoundPage page = new BoundPage();
-        ExpressionBinding binding = new ExpressionBinding(_resolver, page, "doubleValue", null);
-
-        binding.setDouble(3.14);
-
-        assertEquals(3.14, page.getDoubleValue(), 0.0);
-    }
-
-    public void testUpdateObject()
-    {
-        BoundPage page = new BoundPage();
-        ExpressionBinding binding = new ExpressionBinding(_resolver, page, "objectValue", null);
-
-        Object object = new HashMap();
-
-        binding.setObject(object);
-
-        assertEquals(object, page.getObjectValue());
-    }
-
-    /**
-     * Test error cases for {@link org.apache.tapestry.binding.ListenerBinding}.
-     * 
-     * @since 3.0
-     */
-
-    public void testListenerBindingInt()
-    {
-        IBinding b = new ListenerBinding(null, null, null, null);
-
-        try
-        {
-            b.getInt();
-
-            unreachable();
-        }
-        catch (BindingException ex)
-        {
-            checkException(
-                    ex,
-                    "Inappropriate invocation of getInt() on instance of ListenerBinding.");
-        }
-    }
-
-    /** @since 3.0 * */
-
-    public void testListenerBindingDouble()
-    {
-        IBinding b = new ListenerBinding(null, null, null, null);
-
-        try
-        {
-            b.getDouble();
-
-            unreachable();
-        }
-        catch (BindingException ex)
-        {
-            checkException(
-                    ex,
-                    "Inappropriate invocation of getDouble() on instance of ListenerBinding.");
-        }
-    }
-
-    /** @since 3.0 * */
-
-    public void testListenerBindingObject()
-    {
-        IBinding b = new ListenerBinding(null, null, null, null);
-
-        assertSame(b, b.getObject());
-    }
-
-    /** @since 3.0 * */
-
-    public void testStringBinding()
-    {
-        IComponent c = new MockPage();
-
-        StringBinding b = new StringBinding(c, "foo", null);
-
-        assertSame(c, b.getComponent());
-        assertEquals("foo", b.getKey());
-    }
-
-    public void testTypeConverter()
-    {
-        BoundPage page = new BoundPage();
-        MockEngine engine = new MockEngine();
-        page.setEngine(engine);
-
-        ExpressionBinding binding = new ExpressionBinding(_resolver, page, "dateValue", null);
-        Date date = new Date();
-
-        // This part of the test no longer fails; likely it is due to the latest
-        // version of OGNL.
-        //        try {
-        //            // try without a converter first, which should fail
-        //            binding.setObject(date);
-        //            fail("Should not be able to call setDateValue(Date)");
-        //        }
-        //        catch (BindingException expected) {
-        //            assertTrue(true);
-        //        }
-
-        // now test with a custom converter enabled
-        MockApplicationSpecification appSpec = new MockApplicationSpecification();
-        HashMap extensions = new HashMap();
-        extensions.put(Tapestry.OGNL_TYPE_CONVERTER, new MockTypeConverter());
-        appSpec.setExtensions(extensions);
-        engine.setSpecification(appSpec);
-
-        binding.setObject(date);
-        // note - cannot treat java.sql.Timestamp as a Date as the nanos store the
-        // fractional part of the second, including the millis. JDK 1.3 Javadocs
-        // for Timestamp suggest using nanos/1000000 to find the actual millis.
-        // Otherwise, just using assertEquals(date, page.getDateValue()) fails
-        // under JDK 1.3.
-        assertEquals(date, new Date((page.getDateValue().getTime() / 1000) * 1000
-                + page.getDateValue().getNanos() / 1000000));
-    }
-}
\ No newline at end of file
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/TestComponent.java b/3.0.4/junit/src/org/apache/tapestry/junit/TestComponent.java
deleted file mode 100644
index 1da7fc1..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/TestComponent.java
+++ /dev/null
@@ -1,84 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit;
-
-import org.apache.tapestry.BaseComponent;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRender;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.engine.NullWriter;
-
-/**
- *  Test a few random things in {@link org.apache.tapestry.AbstractComponent}
- *  and {@link  org.apache.tapestry.BaseComponent}.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 3.0
- *
- **/
-
-public class TestComponent extends TapestryTestCase
-{
-    private static class TestRender implements IRender
-    {
-        private boolean rendered = false;
-
-        public void render(IMarkupWriter writer, IRequestCycle cycle)
-        {
-            rendered = true;
-        }
-
-    }
-
-    private static class FakeComponent extends BaseComponent
-    {
-        void addOuterTest(IRender render)
-        {
-            addOuter(render);
-        }
-        
-        void testRenderComponent(IMarkupWriter write, IRequestCycle cycle)
-        {
-            renderComponent(write, cycle);
-        }
-    }
-
-    /** 
-     *  Test the ability of {@link org.apache.tapestry.BaseComponent#addOuter(IRender)}
-     *  to add a large number of objects.
-     * 
-     **/
-
-    public void testOuter() throws Exception
-    {
-        FakeComponent c = new FakeComponent();
-
-        TestRender[] list = new TestRender[50];
-
-        for (int i = 0; i < list.length; i++)
-        {
-            list[i] = new TestRender();
-            c.addOuterTest(list[i]);
-        }
-
-        IMarkupWriter writer = new NullWriter();
-
-        c.testRenderComponent(writer, null);
-
-        for (int i = 0; i < list.length; i++)
-            assertTrue("Outer object #" + i + " did render.", list[i].rendered);
-    }
-}
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/TestComponentMessages.java b/3.0.4/junit/src/org/apache/tapestry/junit/TestComponentMessages.java
deleted file mode 100644
index 685ee6c..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/TestComponentMessages.java
+++ /dev/null
@@ -1,164 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit;
-
-import java.util.Calendar;
-import java.util.Date;
-import java.util.GregorianCalendar;
-import java.util.Locale;
-
-import org.apache.tapestry.IPage;
-
-/**
- *  Tests the class {@link org.apache.tapestry.engine.DefaultStringsSource}.
- *
- *  @author Howard Lewis Ship
- *  @since 2.0.4
- */
-
-public class TestComponentMessages extends TapestryTestCase
-{
-    private void check(IPage page, String key, String expected)
-    {
-        String actual = page.getMessage(key);
-
-        assertEquals("Key " + key, expected, actual);
-    }
-
-    private static final String MOCK1 = "/org/apache/tapestry/junit/MockPage1.jwc";
-
-    public void testOnlyInBase()
-    {
-        IPage page = createPage(MOCK1, new Locale("en", "US"));
-
-        check(page, "only-in-base", "BASE1");
-    }
-
-    public void testMissingKey()
-    {
-        IPage page = createPage(MOCK1, new Locale("en", "GB"));
-
-        check(page, "non-existant-key", "[NON-EXISTANT-KEY]");
-    }
-
-    public void testOverwrittenInLanguage()
-    {
-        IPage page = createPage(MOCK1, new Locale("en", "US"));
-
-        check(page, "overwritten-in-language", "LANGUAGE1_en");
-
-        page = createPage(MOCK1, new Locale("fr", ""));
-
-        check(page, "overwritten-in-language", "LANGUAGE1_fr");
-    }
-
-    public void testOverwrittenInCountry()
-    {
-        IPage page = createPage(MOCK1, new Locale("en", "US"));
-
-        check(page, "overwritten-in-country", "COUNTRY1_en_US");
-
-        page = createPage(MOCK1, new Locale("fr", "CD"));
-
-        check(page, "overwritten-in-country", "COUNTRY1_fr_CD");
-    }
-
-    public void testOverwrittenInVariant()
-    {
-        IPage page = createPage(MOCK1, new Locale("en", "US", "Tapestry"));
-
-        check(page, "overwritten-in-variant", "VARIANT1_en_US_Tapestry");
-
-        page = createPage(MOCK1, new Locale("fr", "CD", "Foo"));
-
-        check(page, "overwritten-in-variant", "VARIANT1_fr_CD_Foo");
-    }
-
-    private static final String MOCK2 = "/org/apache/tapestry/junit/MockPage2.jwc";
-
-    /**
-     *  Tests that the code that locates properties files can deal
-     *  with the base path (i.e., Foo.properties) doesn't exist.
-     * 
-     **/
-
-    public void testMissingBase()
-    {
-        IPage page = createPage(MOCK2, new Locale("en", "US"));
-
-        check(page, "language-key", "LANGUAGE1");
-    }
-
-    /**
-     *  Tests that naming and search works correctly for locales
-     *  that specify language and variant, but no country.
-     * 
-     **/
-
-    public void testMissingCountry()
-    {
-        IPage page = createPage(MOCK2, new Locale("en", "", "Tapestry"));
-
-        check(page, "overwritten-in-variant", "VARIANT1_en__Tapestry");
-    }
-
-    public void testDateFormatting()
-    {
-        IPage page = createPage(MOCK1, Locale.ENGLISH);
-
-        Calendar c = new GregorianCalendar(1966, Calendar.DECEMBER, 24);
-
-        Date d = c.getTime();
-
-        assertEquals(
-            "A formatted date: 12/24/66",
-            page.getMessages().format("using-date-format", d));
-    }
-
-    public void testDateFormatLocalization()
-    {
-        IPage page = createPage(MOCK1, Locale.FRENCH);
-
-        Calendar c = new GregorianCalendar(1966, Calendar.DECEMBER, 24);
-
-        Date d = c.getTime();
-
-        // French formatting puts the day before the month.
-
-        assertEquals(
-            "A formatted date: 24/12/66",
-            page.getMessages().format("using-date-format", d));
-    }
-
-    public void testExceptionWithMessage()
-    {
-        IPage page = createPage(MOCK1, Locale.ENGLISH);
-
-        assertEquals(
-            "Exception: foo must not be null",
-            page.getMessages().format(
-                "exception",
-                new NullPointerException("foo must not be null")));
-    }
-
-    public void testExceptionWithBlankMessage()
-    {
-        IPage page = createPage(MOCK1, Locale.ENGLISH);
-
-        assertEquals(
-            "Exception: java.lang.NullPointerException",
-            page.getMessages().format("exception", new NullPointerException()));
-    }
-}
\ No newline at end of file
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/TestContentType.java b/3.0.4/junit/src/org/apache/tapestry/junit/TestContentType.java
deleted file mode 100644
index aa34bab..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/TestContentType.java
+++ /dev/null
@@ -1,126 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit;
-
-import org.apache.tapestry.util.ContentType;
-
-/**
- *  Test the functionality of {@link org.apache.tapestry.util.ContentType}
- *
- *  @author Mindbridge
- *  @version $Id$
- *  @since 3.0
- *
- **/
-
-public class TestContentType extends TapestryTestCase
-{
-
-    public void testParsing1() throws Exception
-    {
-        ContentType contentType = new ContentType("text/html;charset=utf-8");
-
-        assertEquals(
-            "The base type of the ContentType is invalid",
-            "text",
-            contentType.getBaseType());
-            
-        assertEquals(
-            "The html type of the ContentType is invalid",
-            "html",
-            contentType.getSubType());
-
-        assertEquals(
-            "The mime type of the ContentType is invalid",
-            "text/html",
-            contentType.getMimeType());
-            
-        String[] parameterNames = contentType.getParameterNames();
-        assertEquals(
-            "The number of parameter names of the ContentType is invalid",
-            1,
-            parameterNames.length);
-
-        assertEquals(
-            "The parameter names of the ContentType are invalid",
-            "charset",
-            parameterNames[0]);
-
-        String charset = contentType.getParameter("charset");
-        assertEquals("The charset parameter of the ContentType is invalid", "utf-8", charset);
-
-        String nonexistant = contentType.getParameter("nonexistant");
-        assertTrue(
-            "ContentType does not return null for a non-existant parameter",
-            nonexistant == null);
-    }
-    
-    public void testParsing2() throws Exception
-    {
-        ContentType contentType = new ContentType("text/html");
-
-        assertEquals(
-            "The base type of the ContentType is invalid",
-            "text",
-            contentType.getBaseType());
-            
-        assertEquals(
-            "The html type of the ContentType is invalid",
-            "html",
-            contentType.getSubType());
-
-        assertEquals(
-            "The mime type of the ContentType is invalid",
-            "text/html",
-            contentType.getMimeType());
-            
-        String[] parameterNames = contentType.getParameterNames();
-        assertEquals(
-            "The number of parameter names of the ContentType is invalid",
-            0,
-            parameterNames.length);
-
-        String charset = contentType.getParameter("charset");
-        assertTrue("The charset parameter of the ContentType is invalid", charset == null);
-    }
-    
-    public void testUnparsing1() throws Exception
-    {
-        ContentType contentType = new ContentType();
-
-        contentType.setBaseType("text");
-        contentType.setSubType("html");
-        contentType.setParameter("charset", "utf-8");
-        
-        assertEquals(
-            "ContentType does not generate a valid String representation",
-            "text/html;charset=utf-8",
-            contentType.unparse());
-    }
-
-    public void testUnparsing2() throws Exception
-    {
-        ContentType contentType = new ContentType();
-
-        contentType.setBaseType("text");
-        contentType.setSubType("html");
-        
-        assertEquals(
-            "ContentType does not generate a valid String representation",
-            "text/html",
-            contentType.unparse());
-    }
-
-}
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/TestEngineServiceLink.java b/3.0.4/junit/src/org/apache/tapestry/junit/TestEngineServiceLink.java
deleted file mode 100644
index b876c8d..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/TestEngineServiceLink.java
+++ /dev/null
@@ -1,444 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit;
-
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.UnsupportedEncodingException;
-import java.security.Principal;
-import java.util.Enumeration;
-import java.util.Locale;
-import java.util.Map;
-
-import javax.servlet.RequestDispatcher;
-import javax.servlet.ServletInputStream;
-import javax.servlet.http.Cookie;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpSession;
-
-import org.apache.tapestry.ApplicationServlet;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.engine.EngineServiceLink;
-import org.apache.tapestry.request.RequestContext;
-
-import org.apache.tapestry.junit.mock.MockContext;
-import org.apache.tapestry.junit.mock.MockServletConfig;
-
-public class TestEngineServiceLink extends TapestryTestCase
-{
-    private class TestRequest implements HttpServletRequest
-    {
-        public String getAuthType()
-        {
-            return null;
-        }
-
-        public String getContextPath()
-        {
-            return null;
-        }
-
-        public Cookie[] getCookies()
-        {
-            return null;
-        }
-
-        public long getDateHeader(String arg0)
-        {
-            return 0;
-        }
-
-        public String getHeader(String arg0)
-        {
-            return null;
-        }
-
-        public Enumeration getHeaderNames()
-        {
-            return null;
-        }
-
-        public Enumeration getHeaders(String arg0)
-        {
-            return null;
-        }
-
-        public int getIntHeader(String arg0)
-        {
-            return 0;
-        }
-
-        public String getMethod()
-        {
-            return null;
-        }
-
-        public String getPathInfo()
-        {
-            return null;
-        }
-
-        public String getPathTranslated()
-        {
-            return null;
-        }
-
-        public String getQueryString()
-        {
-            return null;
-        }
-
-        public String getRemoteUser()
-        {
-            return null;
-        }
-
-        public String getRequestedSessionId()
-        {
-            return null;
-        }
-
-        public String getRequestURI()
-        {
-            return null;
-        }
-
-        public StringBuffer getRequestURL()
-        {
-            return null;
-        }
-
-        public String getServletPath()
-        {
-            return null;
-        }
-
-        public HttpSession getSession()
-        {
-            return null;
-        }
-
-        public HttpSession getSession(boolean arg0)
-        {
-            return null;
-        }
-
-        public Principal getUserPrincipal()
-        {
-            return null;
-        }
-
-        public boolean isRequestedSessionIdFromCookie()
-        {
-            return false;
-        }
-
-        public boolean isRequestedSessionIdFromUrl()
-        {
-            return false;
-        }
-
-        public boolean isRequestedSessionIdFromURL()
-        {
-            return false;
-        }
-
-        public boolean isRequestedSessionIdValid()
-        {
-            return false;
-        }
-
-        public boolean isUserInRole(String arg0)
-        {
-            return false;
-        }
-
-        public Object getAttribute(String arg0)
-        {
-            return null;
-        }
-
-        public Enumeration getAttributeNames()
-        {
-            return null;
-        }
-
-        public String getCharacterEncoding()
-        {
-            return null;
-        }
-
-        public int getContentLength()
-        {
-            return 0;
-        }
-
-        public String getContentType()
-        {
-            return null;
-        }
-
-        public ServletInputStream getInputStream() throws IOException
-        {
-            return null;
-        }
-
-        public Locale getLocale()
-        {
-            return null;
-        }
-
-        public Enumeration getLocales()
-        {
-            return null;
-        }
-
-        public String getParameter(String arg0)
-        {
-            return null;
-        }
-
-        public Map getParameterMap()
-        {
-            return null;
-        }
-
-        public Enumeration getParameterNames()
-        {
-            return null;
-        }
-
-        public String[] getParameterValues(String arg0)
-        {
-            return null;
-        }
-
-        public String getProtocol()
-        {
-            return null;
-        }
-
-        public BufferedReader getReader() throws IOException
-        {
-            return null;
-        }
-
-        public String getRealPath(String arg0)
-        {
-            return null;
-        }
-
-        public String getRemoteAddr()
-        {
-            return null;
-        }
-
-        public String getRemoteHost()
-        {
-            return null;
-        }
-
-        public RequestDispatcher getRequestDispatcher(String arg0)
-        {
-            return null;
-        }
-
-        public String getScheme()
-        {
-            return "http";
-        }
-
-        public String getServerName()
-        {
-            return "testserver";
-        }
-
-        public int getServerPort()
-        {
-            return 80;
-        }
-
-        public boolean isSecure()
-        {
-            return false;
-        }
-
-        public void removeAttribute(String arg0)
-        {
-        }
-
-        public void setAttribute(String arg0, Object arg1)
-        {
-        }
-
-        public void setCharacterEncoding(String arg0) throws UnsupportedEncodingException
-        {
-        }
-
-        public int getRemotePort()
-        {
-            return 0;
-        }
-
-        public String getLocalName()
-        {
-            return null;
-        }
-
-        public String getLocalAddr()
-        {
-            return null;
-        }
-
-        public int getLocalPort()
-        {
-            return 0;
-        }
-
-    }
-
-    private MockRequestCycle create(String servletPath) throws Exception
-    {
-        MockContext servletContext = new MockContext();
-        MockServletConfig config = new MockServletConfig("servlet", servletContext);
-        ApplicationServlet servlet = new ApplicationServlet();
-
-        servlet.init(config);
-
-        MockEngine engine = new MockEngine();
-        engine.setServletPath(servletPath);
-
-        HttpServletRequest request = new TestRequest();
-        RequestContext context = new RequestContext(servlet, request, null);
-
-        return new MockRequestCycle(engine, context);
-    }
-
-    public void testGetURL() throws Exception
-    {
-        MockRequestCycle c = create("/context/servlet");
-
-        EngineServiceLink l = new EngineServiceLink(c, "myservice", null, null, true);
-
-        assertEquals("/context/servlet?service=myservice", l.getURL());
-
-        assertEquals("/context/servlet?service=myservice", c.getLastEncodedURL());
-
-        assertEquals("/context/servlet", l.getURL(null, false));
-
-        assertEquals("/context/servlet#anchor", l.getURL("anchor", false));
-
-        assertEquals("/context/servlet?service=myservice#anchor", l.getURL("anchor", true));
-
-        checkList(
-            "parameterNames",
-            new String[] { Tapestry.SERVICE_QUERY_PARAMETER_NAME },
-            l.getParameterNames());
-    }
-
-    public void testGetAbsoluteURL() throws Exception
-    {
-        MockRequestCycle c = create("/context/servlet");
-
-        EngineServiceLink l = new EngineServiceLink(c, "myservice", null, null, true);
-
-        assertEquals("http://testserver/context/servlet?service=myservice", l.getAbsoluteURL());
-
-        assertEquals("http://testserver/context/servlet?service=myservice", c.getLastEncodedURL());
-
-        assertEquals(
-            "http://testserver/context/servlet#anchor",
-            l.getAbsoluteURL(null, null, 0, "anchor", false));
-
-        assertEquals(
-            "http://testserver/context/servlet?service=myservice#anchor",
-            l.getAbsoluteURL(null, null, 0, "anchor", true));
-
-        assertEquals(
-            "frob://magic:77/context/servlet?service=myservice",
-            l.getAbsoluteURL("frob", "magic", 77, null, true));
-    }
-
-    public void testContext() throws Exception
-    {
-        MockRequestCycle c = create("/alpha/bravo");
-
-        EngineServiceLink l =
-            new EngineServiceLink(
-                c,
-                "myservice",
-                new String[] { "Alpha", "Bravo", "Tango" },
-                null,
-                true);
-
-        checkList(
-            "parameterNames",
-            new String[] { Tapestry.SERVICE_QUERY_PARAMETER_NAME },
-            l.getParameterNames());
-
-        checkList(
-            "service parameters values",
-            new String[] { "myservice/Alpha/Bravo/Tango" },
-            l.getParameterValues(Tapestry.SERVICE_QUERY_PARAMETER_NAME));
-
-        assertEquals("/alpha/bravo?service=myservice/Alpha/Bravo/Tango", l.getURL());
-
-    }
-
-    public void testServiceParameters() throws Exception
-    {
-        MockRequestCycle c = create("/alpha/bravo");
-
-        EngineServiceLink l =
-            new EngineServiceLink(
-                c,
-                "myservice",
-                null,
-                new String[] { "One Two", "Three Four" },
-                true);
-
-        assertEquals("/alpha/bravo?service=myservice&sp=One+Two&sp=Three+Four", l.getURL());
-
-        checkList(
-            "parameterNames",
-            new String[] {
-                Tapestry.SERVICE_QUERY_PARAMETER_NAME,
-                Tapestry.PARAMETERS_QUERY_PARAMETER_NAME },
-            l.getParameterNames());
-
-        checkList(
-            "service parameters values",
-            new String[] { "One Two", "Three Four" },
-            l.getParameterValues(Tapestry.PARAMETERS_QUERY_PARAMETER_NAME));
-    }
-
-    public void testUnknownParameter() throws Exception
-    {
-        MockRequestCycle c = create("/context/servlet");
-
-        EngineServiceLink l = new EngineServiceLink(c, "myservice", null, null, true);
-
-        try
-        {
-            l.getParameterValues("unknown");
-
-            unreachable();
-        }
-        catch (IllegalArgumentException ex)
-        {
-        }
-    }
-
-}
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/TestListenerMap.java b/3.0.4/junit/src/org/apache/tapestry/junit/TestListenerMap.java
deleted file mode 100644
index cdc19db..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/TestListenerMap.java
+++ /dev/null
@@ -1,262 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-
-import junit.framework.AssertionFailedError;
-import ognl.Ognl;
-
-import org.apache.tapestry.ApplicationRuntimeException;
-import org.apache.tapestry.IActionListener;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.listener.ListenerMap;
-
-/**
- *  Tests the {@link org.apache.tapestry.listener.ListenerMap} and
- *  {@link org.apache.tapestry.listener.ListenerMapPropertyAccessor}
- *  classes.
- * 
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 2.2
- * 
- **/
-
-public class TestListenerMap extends TapestryTestCase
-{
-    public static class Listener
-    {
-        public int invokeCount = 0;
-
-        public void nonListenerMethod()
-        {
-        }
-
-        public String almostListenerMethod(IRequestCycle cycle)
-        {
-            return null;
-        }
-
-        public void actualListenerMethod(IRequestCycle cycle)
-        {
-            invokeCount++;
-        }
-
-        public void listenerThrows(IRequestCycle cycle)
-        {
-            invokeCount++;
-        }
-
-        public static void nearMiss(IRequestCycle cycle)
-        {
-        }
-
-        static void mustBePublic(IRequestCycle cycle)
-        {
-        }
-
-        public void invokeAndThrow(IRequestCycle cycle)
-        {
-            throw new ApplicationRuntimeException("From invokeAndThrow");
-        }
-
-        public void invokeAndThrowRuntime(IRequestCycle cycle)
-        {
-            throw new RuntimeException("From invokeAndThrowRuntime");
-        }
-
-        public String toString()
-        {
-            return "TestListenerMap.Listener[" + invokeCount + "]";
-        }
-    }
-
-    public static class ListenerSubclass extends Listener
-    {
-        public void subclassMethod(IRequestCycle cycle)
-        {
-            invokeCount++;
-        }
-    }
-
-    private void attempt(String methodName, Listener listener, ListenerMap map)
-    {
-        int count = listener.invokeCount;
-
-        IActionListener l = (IActionListener) map.getListener(methodName);
-
-        assertNotNull(l);
-
-        try
-        {
-            l.actionTriggered(null, null);
-        }
-        catch (ApplicationRuntimeException ex)
-        {
-            throw new AssertionFailedError("Unexpected ApplicationRuntimeException.");
-        }
-
-        assertEquals("Invoke count.", count + 1, listener.invokeCount);
-    }
-
-    public void testListenerMethods()
-    {
-        Listener l = new Listener();
-        ListenerMap m = new ListenerMap(l);
-
-        attempt("actualListenerMethod", l, m);
-        attempt("listenerThrows", l, m);
-    }
-
-    public void testListenerNames()
-    {
-        Listener l = new Listener();
-        ListenerMap m = new ListenerMap(l);
-
-        List names = new ArrayList(m.getListenerNames());
-        Collections.sort(names);
-
-        checkList(
-            "Method names.",
-            new String[] {
-                "actualListenerMethod",
-                "invokeAndThrow",
-                "invokeAndThrowRuntime",
-                "listenerThrows" },
-            names);
-    }
-
-    public void testSubclassMethods()
-    {
-        Listener l = new ListenerSubclass();
-        ListenerMap m = new ListenerMap(l);
-
-        attempt("actualListenerMethod", l, m);
-        attempt("listenerThrows", l, m);
-        attempt("subclassMethod", l, m);
-    }
-
-    public void testSubclassListenerNames()
-    {
-        Listener l = new ListenerSubclass();
-        ListenerMap m = new ListenerMap(l);
-
-        List names = new ArrayList(m.getListenerNames());
-        Collections.sort(names);
-
-        checkList(
-            "Method names.",
-            new String[] {
-                "actualListenerMethod",
-                "invokeAndThrow",
-                "invokeAndThrowRuntime",
-                "listenerThrows",
-                "subclassMethod" },
-            names);
-    }
-
-    public void testListenerMethodPropertyAccess() throws Exception
-    {
-        Listener l = new ListenerSubclass();
-        ListenerMap m = new ListenerMap(l);
-
-        IActionListener al = (IActionListener) Ognl.getValue("subclassMethod", m);
-
-        int count = l.invokeCount;
-
-        al.actionTriggered(null, null);
-
-        assertEquals("Invocation count.", count + 1, l.invokeCount);
-    }
-
-    public void testPropertyAccess() throws Exception
-    {
-        Listener l = new ListenerSubclass();
-        ListenerMap m = new ListenerMap(l);
-
-        // class is a handy, read-only property.
-
-        Class c = (Class) Ognl.getValue("class", m);
-
-        assertEquals("ListenerMap class property.", ListenerMap.class, c);
-    }
-
-    public void testInvokeAndThrow() throws Exception
-    {
-        Listener l = new ListenerSubclass();
-        ListenerMap m = new ListenerMap(l);
-        IActionListener listener = (IActionListener) m.getListener("invokeAndThrow");
-
-        try
-        {
-            listener.actionTriggered(null, null);
-
-            throw new AssertionFailedError("Unreachable.");
-        }
-        catch (ApplicationRuntimeException ex)
-        {
-            checkException(ex, "From invokeAndThrow");
-        }
-    }
-
-    public void testInvokeAndThrowRuntime() throws Exception
-    {
-        Listener l = new ListenerSubclass();
-        ListenerMap m = new ListenerMap(l);
-        IActionListener listener = (IActionListener) m.getListener("invokeAndThrowRuntime");
-
-        try
-        {
-            listener.actionTriggered(null, null);
-
-            throw new AssertionFailedError("Unreachable.");
-        }
-        catch (ApplicationRuntimeException ex)
-        {
-            checkException(
-                ex,
-                "Unable to invoke method invokeAndThrowRuntime on TestListenerMap.Listener[0]: From invokeAndThrowRuntime");
-        }
-    }
-
-    public void testToString() throws Exception
-    {
-        Listener l = new Listener();
-        ListenerMap m = new ListenerMap(l);
-
-        IActionListener listener = (IActionListener) m.getListener("actualListenerMethod");
-
-        assertEquals(
-            "ToString",
-            "SyntheticListener[TestListenerMap.Listener[0] public void org.apache.tapestry.junit.TestListenerMap$Listener.actualListenerMethod(org.apache.tapestry.IRequestCycle)]",
-            listener.toString());
-
-        assertEquals("ToString", "ListenerMap[TestListenerMap.Listener[0]]", m.toString());
-    }
-
-    public void testIsCached() throws Exception
-    {
-        Listener l = new Listener();
-        ListenerMap m = new ListenerMap(l);
-
-        IActionListener listener = (IActionListener) m.getListener("actualListenerMethod");
-
-        assertSame("Listener", listener, m.getListener("actualListenerMethod"));
-    }
-
-}
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/TestMultipart.java b/3.0.4/junit/src/org/apache/tapestry/junit/TestMultipart.java
deleted file mode 100644
index e17515d..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/TestMultipart.java
+++ /dev/null
@@ -1,61 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit;
-
-import org.apache.tapestry.multipart.ValuePart;
-
-/**
- *  A few tests to fill in the code coverage of 
- * {@link org.apache.tapestry.multipart.ValuePart} and
- * {@link org.apache.tapestry.multipart.UploadPart}.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 3.0
- *
- **/
-public class TestMultipart extends TapestryTestCase
-{
-
-    public void testSingle()
-    {
-        ValuePart p = new ValuePart("first");
-
-        assertEquals(1, p.getCount());
-        assertEquals("first", p.getValue());
-
-        checkList("values", new String[] { "first" }, p.getValues());
-    }
-
-    public void testTwo()
-    {
-        ValuePart p = new ValuePart("alpha");
-
-        p.add("beta");
-
-        assertEquals(2, p.getCount());
-        assertEquals("alpha", p.getValue());
-        checkList("values", new String[] { "alpha", "beta" }, p.getValues());
-    }
-
-    public void testThree()
-    {
-        ValuePart p = new ValuePart("moe");
-        p.add("larry");
-        p.add("curly");
-
-        checkList("values", new String[] { "moe", "larry", "curly" }, p.getValues());
-    }
-}
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/TestPropertySource.java b/3.0.4/junit/src/org/apache/tapestry/junit/TestPropertySource.java
deleted file mode 100644
index d006156..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/TestPropertySource.java
+++ /dev/null
@@ -1,127 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit;
-
-import java.util.ResourceBundle;
-
-import junit.framework.TestCase;
-
-import org.apache.tapestry.junit.mock.MockContext;
-import org.apache.tapestry.junit.mock.MockServletConfig;
-
-import org.apache.tapestry.engine.IPropertySource;
-import org.apache.tapestry.spec.ApplicationSpecification;
-import org.apache.tapestry.util.DelegatingPropertySource;
-import org.apache.tapestry.util.PropertyHolderPropertySource;
-import org.apache.tapestry.util.ResourceBundlePropertySource;
-import org.apache.tapestry.util.ServletContextPropertySource;
-import org.apache.tapestry.util.ServletPropertySource;
-import org.apache.tapestry.util.SystemPropertiesPropertySource;
-
-/**
- *  Test case for several classes
- *  implementing {@link org.apache.tapestry.IPropertySource}.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 2.3
- *
- **/
-
-public class TestPropertySource extends TestCase
-{
-    public TestPropertySource(String name)
-    {
-        super(name);
-    }
-
-    private void expect(IPropertySource source, String key, String expected)
-    {
-        String actual = source.getPropertyValue(key);
-
-        assertEquals(key, expected, actual);
-    }
-
-    public void testServlet()
-    {
-        IPropertySource source = buildServletSource();
-
-        expect(source, "alpha", "bravo");
-        expect(source, "gamma", null);
-    }
-
-    private IPropertySource buildServletSource()
-    {
-        MockServletConfig config = new MockServletConfig(null, null);
-
-        config.setInitParameter("alpha", "bravo");
-        IPropertySource source = new ServletPropertySource(config);
-        return source;
-    }
-
-    public void testServletContext()
-    {
-        MockContext context = new MockContext();
-
-        context.setInitParameter("howard", "suzanne");
-
-        IPropertySource source = new ServletContextPropertySource(context);
-
-        expect(source, "howard", "suzanne");
-        expect(source, "godzilla", null);
-    }
-
-    public void testApplicationSpecification()
-    {
-        ApplicationSpecification spec = new ApplicationSpecification();
-
-        spec.setProperty("fred", "barney");
-
-        IPropertySource source = new PropertyHolderPropertySource(spec);
-
-        expect(source, "fred", "barney");
-        expect(source, "wilma", null);
-    }
-
-    public void testSystemProperties()
-    {
-        IPropertySource source = SystemPropertiesPropertySource.getInstance();
-
-        expect(source, "java.os", System.getProperty("java.os"));
-        expect(source, "foo", null);
-    }
-
-    public void testDelegator()
-    {
-        DelegatingPropertySource source = new DelegatingPropertySource(buildServletSource());
-
-        source.addSource(SystemPropertiesPropertySource.getInstance());
-
-        expect(source, "java.os", System.getProperty("java.os"));
-        expect(source, "alpha", "bravo");
-        expect(source, "gamma", null);
-    }
-
-    public void testResourceBundle()
-    {
-        ResourceBundle bundle = ResourceBundle.getBundle("org.apache.tapestry.junit.Properties");
-
-        ResourceBundlePropertySource source = new ResourceBundlePropertySource(bundle);
-
-        expect(source, "fred", "flintstone");
-        expect(source, "barney", "rubble");
-        expect(source, "wilma", null);
-    }
-}
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/TestResourceLocation.java b/3.0.4/junit/src/org/apache/tapestry/junit/TestResourceLocation.java
deleted file mode 100644
index 2213ff0..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/TestResourceLocation.java
+++ /dev/null
@@ -1,267 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit;
-
-import java.util.Locale;
-
-import javax.servlet.ServletContext;
-
-import org.apache.tapestry.IResourceLocation;
-import org.apache.tapestry.IResourceResolver;
-import org.apache.tapestry.junit.mock.MockContext;
-import org.apache.tapestry.resource.ClasspathResourceLocation;
-import org.apache.tapestry.resource.ContextResourceLocation;
-import org.apache.tapestry.util.DefaultResourceResolver;
-
-/**
- *  A few tests to fill in the code coverage for
- *  {@link org.apache.tapestry.IResourceLocation} and its implementations.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 3.0
- *
- **/
-
-public class TestResourceLocation extends TapestryTestCase
-{
-    private ServletContext _context = new MockContext();
-    private IResourceResolver _resolver = new DefaultResourceResolver();
-
-    public void testContextEquals()
-    {
-        IResourceLocation l1 = new ContextResourceLocation(_context, "/images/back.png");
-        IResourceLocation l2 = new ContextResourceLocation(_context, "/images/back.png");
-
-        assertEquals("Object equality.", l1, l2);
-
-        assertEquals("Hash code", l1.hashCode(), l2.hashCode());
-    }
-
-    public void testContextRelativeSameResource()
-    {
-        IResourceLocation l1 = new ContextResourceLocation(_context, "/foo/bar/Baz");
-        IResourceLocation l2 = l1.getRelativeLocation("Baz");
-
-        assertSame(l1, l2);
-    }
-
-    public void testContextRelativeSamePath()
-    {
-        IResourceLocation l1 = new ContextResourceLocation(_context, "/foo/bar/Baz");
-        IResourceLocation l2 = l1.getRelativeLocation("/foo/bar/Baz");
-
-        assertSame(l1, l2);
-    }
-
-    public void testContextRelativeSameFolder()
-    {
-        IResourceLocation l1 = new ContextResourceLocation(_context, "/foo/bar/Baz");
-        IResourceLocation expected = new ContextResourceLocation(_context, "/foo/bar/Fubar");
-        IResourceLocation actual = l1.getRelativeLocation("Fubar");
-
-        assertEquals(expected, actual);
-    }
-
-    public void testContextRelative()
-    {
-        IResourceLocation l1 = new ContextResourceLocation(_context, "/foo/bar/Baz");
-        IResourceLocation expected = new ContextResourceLocation(_context, "/foo/bar/gloop/Yup");
-        IResourceLocation actual = l1.getRelativeLocation("gloop/Yup");
-
-        assertEquals(expected, actual);
-    }
-
-    public void testContextAbsolute()
-    {
-        IResourceLocation l1 = new ContextResourceLocation(_context, "/foo/bar/Baz");
-        IResourceLocation expected = new ContextResourceLocation(_context, "/bip/bop/Boop");
-        IResourceLocation actual = l1.getRelativeLocation("/bip/bop/Boop");
-
-        assertEquals(expected, actual);
-    }
-
-    public void testContextLocalize()
-    {
-        IResourceLocation l1 = new ContextResourceLocation(_context, "/images/back.png");
-        IResourceLocation expected = new ContextResourceLocation(_context, "/images/back_fr.png");
-        IResourceLocation actual = l1.getLocalization(Locale.FRANCE);
-
-        assertEquals(expected, actual);
-    }
-
-    public void testContextLocalizeDefault()
-    {
-        IResourceLocation l1 = new ContextResourceLocation(_context, "/images/back.png");
-        IResourceLocation actual = l1.getLocalization(Locale.KOREAN);
-
-        assertSame(l1, actual);
-    }
-
-    public void testContextLocalizeNull()
-    {
-        IResourceLocation l1 = new ContextResourceLocation(_context, "/images/back.png");
-        IResourceLocation actual = l1.getLocalization(null);
-
-        assertSame(l1, actual);
-    }
-
-    public void testClasspathEquals()
-    {
-        IResourceLocation l1 =
-            new ClasspathResourceLocation(
-                _resolver,
-                "/org/apache/tapestry/junit/mock/app/home.png");
-        IResourceLocation l2 =
-            new ClasspathResourceLocation(
-                _resolver,
-                "/org/apache/tapestry/junit/mock/app/home.png");
-
-        assertEquals("Object equality.", l1, l2);
-
-        assertEquals("Hash code", l1.hashCode(), l2.hashCode());
-    }
-
-    public void testClasspathRelativeSameResource()
-    {
-        IResourceLocation l1 = new ClasspathResourceLocation(_resolver, "/foo/bar/Baz");
-        IResourceLocation l2 = l1.getRelativeLocation("Baz");
-
-        assertSame(l1, l2);
-    }
-
-    public void testClasspathRelativeSameFolder()
-    {
-        IResourceLocation l1 = new ClasspathResourceLocation(_resolver, "/foo/bar/Baz");
-        IResourceLocation expected = new ClasspathResourceLocation(_resolver, "/foo/bar/Fubar");
-        IResourceLocation actual = l1.getRelativeLocation("Fubar");
-
-        assertEquals(expected, actual);
-    }
-
-    public void testClasspathRelative()
-    {
-        IResourceLocation l1 = new ClasspathResourceLocation(_resolver, "/foo/bar/Baz");
-        IResourceLocation expected = new ClasspathResourceLocation(_resolver, "/foo/bar/gloop/Yup");
-        IResourceLocation actual = l1.getRelativeLocation("gloop/Yup");
-
-        assertEquals(expected, actual);
-    }
-
-    public void testClasspathAbsolute()
-    {
-        IResourceLocation l1 = new ClasspathResourceLocation(_resolver, "/foo/bar/Baz");
-        IResourceLocation expected = new ClasspathResourceLocation(_resolver, "/bip/bop/Boop");
-        IResourceLocation actual = l1.getRelativeLocation("/bip/bop/Boop");
-
-        assertEquals(expected, actual);
-    }
-
-    public void testClasspathLocalize()
-    {
-        IResourceLocation l1 =
-            new ClasspathResourceLocation(
-                _resolver,
-                "/org/apache/tapestry/junit/mock/app/home.png");
-        IResourceLocation expected =
-            new ClasspathResourceLocation(
-                _resolver,
-                "/org/apache/tapestry/junit/mock/app/home_fr.png");
-        IResourceLocation actual = l1.getLocalization(Locale.FRANCE);
-
-        assertEquals(expected, actual);
-    }
-
-    public void testClasspathLocalizeMissing()
-    {
-        IResourceLocation l1 = new ClasspathResourceLocation(_resolver, "/foo/bar/Baz.zap");
-
-        IResourceLocation l2 = l1.getLocalization(Locale.ENGLISH);
-
-        assertNull(l2);
-    }
-
-    public void testContextLocalizeMissing()
-    {
-        IResourceLocation l1 = new ContextResourceLocation(_context, "/foo/bar/Baz.zap");
-
-        IResourceLocation l2 = l1.getLocalization(Locale.ENGLISH);
-
-        assertNull(l2);
-    }
-
-    public void testClasspathLocalizeDefault()
-    {
-        IResourceLocation l1 =
-            new ClasspathResourceLocation(
-                _resolver,
-                "/org/apache/tapestry/junit/mock/app/home.png");
-        IResourceLocation actual = l1.getLocalization(Locale.KOREAN);
-
-        assertSame(l1, actual);
-    }
-
-    public void testClasspathLocalizeNull()
-    {
-        IResourceLocation l1 =
-            new ClasspathResourceLocation(
-                _resolver,
-                "/org/apache/tapestry/junit/mock/app/home.png");
-        IResourceLocation actual = l1.getLocalization(null);
-
-        assertSame(l1, actual);
-    }
-
-    public void testEqualsNull()
-    {
-        IResourceLocation l1 =
-            new ClasspathResourceLocation(
-                _resolver,
-                "/org/apache/tapestry/junit/mock/app/home.png");
-
-        assertTrue(!l1.equals(null));
-    }
-
-    public void testCompareDifferentTypes()
-    {
-        IResourceLocation l1 =
-            new ClasspathResourceLocation(
-                _resolver,
-                "/org/apache/tapestry/junit/mock/app/home.png");
-        IResourceLocation l2 =
-            new ContextResourceLocation(_context, "/org/apache/tapestry/junit/mock/app/home.png");
-
-        // Same paths, but different classes, should not be equal
-
-        assertTrue(!l1.equals(l2));
-    }
-
-    public void testClasspathRelativeSamePath()
-    {
-        IResourceLocation l1 = new ClasspathResourceLocation(_resolver, "/foo/bar/Baz");
-        IResourceLocation l2 = l1.getRelativeLocation("/foo/bar/Baz");
-
-        assertSame(l1, l2);
-    }
-
-    public void testTrailingSlash()
-    {
-        IResourceLocation l1 = new ClasspathResourceLocation(_resolver, "/");
-        IResourceLocation expected = new ClasspathResourceLocation(_resolver, "/foo");
-        IResourceLocation actual = l1.getRelativeLocation("foo");
-
-        assertEquals(expected, actual);
-    }
-}
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/TestStaticLink.java b/3.0.4/junit/src/org/apache/tapestry/junit/TestStaticLink.java
deleted file mode 100644
index cf5819a..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/TestStaticLink.java
+++ /dev/null
@@ -1,74 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit;
-
-import org.apache.tapestry.engine.ILink;
-import org.apache.tapestry.link.StaticLink;
-
-/**
- *  Tests for {@link org.apache.tapestry.link.StaticLink}.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 3.0
- * 
- **/
-
-public class TestStaticLink extends TapestryTestCase
-{
-    private static final String URL = "http://host/path";
-
-    ILink l = new StaticLink(URL);
-
-    public void testURL()
-    {
-        assertEquals(URL, l.getURL());
-    }
-
-    public void testAbsoluteURL()
-    {
-        assertEquals(URL, l.getAbsoluteURL());
-    }
-
-    public void testURLWithAnchor()
-    {
-        assertEquals(URL, l.getURL(null, false));
-        assertEquals(URL + "#anchor", l.getURL("anchor", false));
-        assertEquals(URL + "#feeble", l.getURL("feeble", true));
-    }
-
-    public void testAbsoluteURLWithParameters()
-    {
-        assertEquals(URL + "#anchor", l.getAbsoluteURL("scheme", "server", 8080, "anchor", false));
-    }
-
-    public void testGetParameterNames()
-    {
-        assertEquals(null, l.getParameterNames());
-    }
-
-    public void testGetParameterValues()
-    {
-        try
-        {
-            l.getParameterValues("any");
-
-            unreachable();
-        }
-        catch (IllegalArgumentException ex)
-        {
-        }
-    }
-}
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/TestTapestryCheckMethodInvocation.java b/3.0.4/junit/src/org/apache/tapestry/junit/TestTapestryCheckMethodInvocation.java
deleted file mode 100644
index 7b1db4f..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/TestTapestryCheckMethodInvocation.java
+++ /dev/null
@@ -1,60 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit;
-
-import org.apache.tapestry.ApplicationRuntimeException;
-import org.apache.tapestry.Tapestry;
-
-/**
- * Tests for the methods 
- * {@link org.apache.tapestry.Tapestry#checkMethodInvocation(Object, String, Object)},
- * {@link org.apache.tapestry.Tapestry#addMethodInvocation(Object)} and
- * {@link org.apache.tapestry.Tapestry#clearMethodInvocations()}.
- *
- * @author Howard Lewis Ship
- * @version $Id$
- * @since 3.0
- **/
-public class TestTapestryCheckMethodInvocation extends TapestryTestCase
-{
-
-    public void testSuccess()
-    {
-        Tapestry.clearMethodInvocations();
-        Tapestry.addMethodInvocation("alpha");
-        Tapestry.addMethodInvocation("beta");
-
-        Tapestry.checkMethodInvocation("alpha", "alpha()", this);
-        Tapestry.checkMethodInvocation("beta", "beta()", this);
-    }
-
-    public void testFail()
-    {
-        Tapestry.clearMethodInvocations();
-
-        try
-        {
-            Tapestry.checkMethodInvocation("gamma", "gamma()", this);
-            unreachable();
-        }
-        catch (ApplicationRuntimeException ex)
-        {
-            assertEquals(
-                "Class org.apache.tapestry.junit.TestTapestryCheckMethodInvocation overrides method 'gamma()' but does not invoke the super-class implementation.",
-                ex.getMessage());
-        }
-    }
-
-}
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/TestTapestryCoerceToIterator.java b/3.0.4/junit/src/org/apache/tapestry/junit/TestTapestryCoerceToIterator.java
deleted file mode 100644
index c0d1cbd..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/TestTapestryCoerceToIterator.java
+++ /dev/null
@@ -1,205 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-import org.apache.tapestry.Tapestry;
-
-/**
- *
- *  Tests for the {@link org.apache.tapestry.Tapestry#coerceToIterator(Object)} method.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *
- **/
-
-public class TestTapestryCoerceToIterator extends TapestryTestCase
-{
-
-    private void check(Object[] expected, Object input)
-    {
-        Iterator i = Tapestry.coerceToIterator(input);
-
-        if (expected == null)
-        {
-            assertEquals("Empty input should yield null output", null, i);
-            return;
-        }
-
-        List l = new ArrayList();
-
-        while (i.hasNext())
-            l.add(i.next());
-
-        assertEquals("Number of results", expected.length, l.size());
-
-        for (int x = 0; x < expected.length; x++)
-            assertEquals("[" + x + "]", expected[x], l.get(x));
-    }
-
-    public void testNull()
-    {
-        check(null, null);
-    }
-
-    public void testEmptyList()
-    {
-        check(null, new ArrayList());
-    }
-
-    public void testEmptyArray()
-    {
-        check(null, new Object[0]);
-    }
-
-    public void testIterator()
-    {
-        List l = new ArrayList();
-        l.add("fred");
-        l.add("barney");
-
-        check(new String[] { "fred", "barney" }, l.iterator());
-    }
-
-    public void testObjectArray()
-    {
-        Object[] a = new String[] { "fred", "barney", "wilma" };
-
-        check(a, a);
-    }
-
-    public void testObject()
-    {
-        String object = "manifest-destiny";
-
-        check(new Object[] { object }, object);
-    }
-
-    public void testBooleanArray()
-    {
-        boolean[] input = new boolean[] { true, false, true };
-
-        Boolean[] expected = new Boolean[] { Boolean.TRUE, Boolean.FALSE, Boolean.TRUE };
-
-        check(expected, input);
-    }
-
-    public void testEmptyBooleanArray()
-    {
-        check(null, new boolean[0]);
-    }
-
-    public void testByteArray()
-    {
-        byte[] input = new byte[] { 1, 3, 7 };
-
-        Byte[] expected = new Byte[] { new Byte("1"), new Byte("3"), new Byte("7")};
-
-        check(expected, input);
-    }
-
-    public void testEmptyByteArray()
-    {
-        check(null, new byte[0]);
-    }
-
-    public void testCharArray()
-    {
-        char[] input = new char[] { 'b', 'k' };
-
-        Character[] expected = new Character[] { new Character('b'), new Character('k')};
-
-        check(expected, input);
-    }
-
-    public void testEmptyCharArray()
-    {
-        check(null, new char[0]);
-    }
-
-    public void testShortArray()
-    {
-        short[] input = new short[] { 23, 98 };
-
-        Short[] expected = new Short[] { new Short("23"), new Short("98")};
-
-        check(expected, input);
-    }
-
-    public void testEmptyShortArray()
-    {
-        check(null, new short[0]);
-    }
-
-    public void testIntArray()
-    {
-        int[] input = new int[] { 55, 12873, 12 };
-
-        Integer[] expected = new Integer[] { new Integer(55), new Integer(12873), new Integer(12)};
-
-        check(expected, input);
-    }
-
-    public void testEmptyIntArray()
-    {
-        check(null, new int[0]);
-    }
-
-    public void testLongArray()
-    {
-        long[] input = new long[] { 27l, 191933939l };
-
-        Long[] expected = new Long[] { new Long(27l), new Long(191933939l)};
-
-        check(expected, input);
-    }
-
-    public void testEmptyLongArray()
-    {
-        check(null, new long[0]);
-    }
-
-    public void testFloatArray()
-    {
-        float[] input = new float[] { 3.14f, 2.25f };
-
-        Float[] expected = new Float[] { new Float("3.14"), new Float("2.25")};
-
-        check(expected, input);
-    }
-
-    public void testEmptyFloatArray()
-    {
-        check(null, new float[0]);
-    }
-
-    public void testDoubleArray()
-    {
-        double[] input = new double[] { 18.55, -97.123 };
-
-        Double[] expected = new Double[] { new Double("18.55"), new Double(" -97.123")};
-
-        check(expected, input);
-    }
-
-    public void testEmptyDoubleArray()
-    {
-        check(null, new double[0]);
-    }
-}
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/TestTapestryFindLocation.java b/3.0.4/junit/src/org/apache/tapestry/junit/TestTapestryFindLocation.java
deleted file mode 100644
index f8a0c9f..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/TestTapestryFindLocation.java
+++ /dev/null
@@ -1,91 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit;
-
-import org.apache.tapestry.ILocatable;
-import org.apache.tapestry.ILocation;
-import org.apache.tapestry.Location;
-import org.apache.tapestry.Tapestry;
-
-/**
- *  Tests the method {@link org.apache.tapestry.Tapestry#findLocation(Object[])}.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 3.0
- *
- **/
-
-public class TestTapestryFindLocation extends TapestryTestCase
-{
-    private static class TestLocatable implements ILocatable
-    {
-        private ILocation _l;
-
-        TestLocatable(ILocation l)
-        {
-            _l = l;
-        }
-
-        public ILocation getLocation()
-        {
-            return _l;
-        }
-    }
-
-    public void testEmpty()
-    {
-        assertNull(Tapestry.findLocation(new Object[] {
-        }));
-    }
-
-    public void testAllNull()
-    {
-        assertNull(Tapestry.findLocation(new Object[] { null, null, null }));
-    }
-
-    public void testOrdering()
-    {
-        ILocation l1 = new Location(null);
-        ILocation l2 = new Location(null);
-
-        assertSame(l1, Tapestry.findLocation(new Object[] { l1, l2 }));
-    }
-
-    public void testLocatable()
-    {
-        ILocation l1 = new Location(null);
-        ILocatable l2 = new TestLocatable(l1);
-
-        assertSame(l1, Tapestry.findLocation(new Object[] { l2 }));
-    }
-
-    public void testNullLocatable()
-    {
-        ILocation l1 = new Location(null);
-        ILocatable l2 = new TestLocatable(null);
-        ILocatable l3 = new TestLocatable(l1);
-
-        assertSame(l1, Tapestry.findLocation(new Object[] { l2, l3 }));
-    }
-
-    public void testSkipOther()
-    {
-        ILocation l1 = new Location(null);
-
-        assertSame(l1, Tapestry.findLocation(new Object[] { this, "Hello", l1, "Goodbye" }));
-    }
-
-}
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/TestTapestryGetClassName.java b/3.0.4/junit/src/org/apache/tapestry/junit/TestTapestryGetClassName.java
deleted file mode 100644
index 461e1b3..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/TestTapestryGetClassName.java
+++ /dev/null
@@ -1,66 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit;
-
-import org.apache.tapestry.Tapestry;
-
-/**
- *  Tests for {@link org.apache.tapestry.Tapestry#getClassName(Class)}.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 3.0
- *
- **/
-public class TestTapestryGetClassName extends TapestryTestCase
-{
-
-    private void attempt(String expected, Class subject)
-    {
-        String actual = Tapestry.getClassName(subject);
-
-        assertEquals(expected, actual);
-    }
-
-    public void testObject()
-    {
-        attempt("java.lang.Object", Object.class);
-    }
-
-    public void testObjectArray()
-    {
-        attempt("java.lang.Object[]", Object[].class);
-    }
-
-    public void testStringArray()
-    {
-        attempt("java.lang.String[]", String[].class);
-    }
-
-    public void testMultiArray()
-    {
-        attempt("java.lang.String[][]", String[][].class);
-    }
-
-    public void testScalar()
-    {
-        attempt("boolean", boolean.class);
-    }
-
-    public void testScalarArray()
-    {
-        attempt("int[]", int[].class);
-    }
-}
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/engine/MockService.java b/3.0.4/junit/src/org/apache/tapestry/junit/engine/MockService.java
deleted file mode 100644
index 1316ce8..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/engine/MockService.java
+++ /dev/null
@@ -1,62 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.engine;
-
-import java.io.IOException;
-
-import javax.servlet.ServletException;
-
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.engine.IEngineService;
-import org.apache.tapestry.engine.IEngineServiceView;
-import org.apache.tapestry.engine.ILink;
-import org.apache.tapestry.request.ResponseOutputStream;
-
-/**
- * Mock implementation of {@link org.apache.tapestry.engine.IEngineService} used in some tests.
- *
- * @author Howard Lewis Ship
- * @version $Id$
- */
-public class MockService implements IEngineService
-{
-    private String _name;
-
-    public MockService(String name)
-    {
-        _name = name;
-    }
-
-    public ILink getLink(IRequestCycle cycle, IComponent component, Object[] parameters)
-    {
-        return null;
-    }
-
-    public void service(
-        IEngineServiceView engine,
-        IRequestCycle cycle,
-        ResponseOutputStream output)
-        throws ServletException, IOException
-    {
-
-    }
-
-    public String getName()
-    {
-        return _name;
-    }
-
-}
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/engine/TestRequestCycleToString.java b/3.0.4/junit/src/org/apache/tapestry/junit/engine/TestRequestCycleToString.java
deleted file mode 100644
index adcff1e..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/engine/TestRequestCycleToString.java
+++ /dev/null
@@ -1,87 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.engine;
-
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.engine.IEngineService;
-import org.apache.tapestry.engine.RequestCycle;
-import org.apache.tapestry.junit.TapestryTestCase;
-
-/**
- * Tests {@link org.apache.tapestry.engine.RequestCycle#toString()}.
- *
- * @author Howard Lewis Ship
- * @version $Id$
- */
-public class TestRequestCycleToString extends TapestryTestCase
-{
-
-    private String toString(Object object)
-    {
-        String raw = object.toString();
-
-        int bracketx = raw.indexOf("[");
-
-        return raw.substring(bracketx + 1, raw.length() - 1);
-    }
-
-    public void testAllNull()
-    {
-        IRequestCycle cycle = new RequestCycle(null, null, null, null);
-
-        assertEquals(
-            "rewinding=false,serviceParameters=<null>,attributes=<null>,targetActionId=0,targetComponent=<null>",
-            toString(cycle));
-
-    }
-
-    public void testWithServiceParameters()
-    {
-        Object[] sp = new Object[] { "alpha", "beta" };
-
-        RequestCycle cycle = new RequestCycle(null, null, null, null);
-        cycle.setServiceParameters(sp);
-
-        assertEquals(
-            "rewinding=false,serviceParameters={alpha,beta},attributes=<null>,targetActionId=0,targetComponent=<null>",
-            toString(cycle));
-    }
-
-    public void testWithService()
-    {
-        IEngineService service = new MockService("test");
-
-        IRequestCycle cycle = new RequestCycle(null, null, service, null);
-
-        assertEquals(
-            "rewinding=false,service=test,serviceParameters=<null>,attributes=<null>,targetActionId=0,targetComponent=<null>",
-            toString(cycle));
-    }
-
-    public void testWithAttributes()
-    {
-        IRequestCycle cycle = new RequestCycle(null, null, null, null);
-
-        cycle.setAttribute("foo.bar", "baz");
-
-        assertEquals(
-            "rewinding=false,serviceParameters=<null>,attributes={foo.bar=baz},targetActionId=0,targetComponent=<null>",
-            toString(cycle));
-    }
-
-    // TODO: An amazing amount of work to be able to test loaded pages ... may need
-    // to do so inside a mock unit test suite since so much machinery is involved.
-
-}
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/enhance/TestEnhancedClassFactory.java b/3.0.4/junit/src/org/apache/tapestry/junit/enhance/TestEnhancedClassFactory.java
deleted file mode 100644
index 4e471e8..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/enhance/TestEnhancedClassFactory.java
+++ /dev/null
@@ -1,87 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.enhance;
-
-import org.apache.tapestry.ApplicationRuntimeException;
-import org.apache.tapestry.IResourceResolver;
-import org.apache.tapestry.enhance.IEnhancedClass;
-import org.apache.tapestry.enhance.IEnhancedClassFactory;
-import org.apache.tapestry.enhance.javassist.EnhancedClassFactory;
-import org.apache.tapestry.junit.TapestryTestCase;
-import org.apache.tapestry.util.DefaultResourceResolver;
-import org.apache.tapestry.util.prop.OgnlUtils;
-
-/**
- *  Tests the classes used by the 
- *  {@link org.apache.tapestry.enhance.DefaultComponentClassEnhancer} to
- *  construct new classes.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 3.0
- **/
-
-public class TestEnhancedClassFactory extends TapestryTestCase
-{
-    /**
-     *  Test the ability to create a class that implements a read/write property.
-     * 
-     **/
-
-    public void testCreateProperty() throws Exception
-    {
-        IResourceResolver resolver = new DefaultResourceResolver();
-        IEnhancedClassFactory factory = new EnhancedClassFactory(resolver);
-
-        String className = "org.apache.tapestry.junit.enhance.PropertyHolder";
-        IEnhancedClass enhancedClass = factory.createEnhancedClass(className, Object.class);
-
-        String propertyName = "name";
-        enhancedClass.createProperty(propertyName, "java.lang.String");
-
-        Class holderClass = enhancedClass.createEnhancedSubclass();
-
-        Object holder = holderClass.newInstance();
-
-        String value = "abraxis";
-
-        OgnlUtils.set("name", resolver, holder, value);
-
-        Object actual = OgnlUtils.get("name", resolver, holder);
-
-        assertEquals("Holder name property.", value, actual);
-    }
-
-    public void testCreateFailure()
-    {
-        IResourceResolver resolver = new DefaultResourceResolver();
-        IEnhancedClassFactory factory = new EnhancedClassFactory(resolver);
-
-        String className = "org.apache.tapestry.junit.enhance.Invalid";
-        IEnhancedClass enhancedClass = factory.createEnhancedClass(className, Boolean.class);
-
-        try
-        {
-            enhancedClass.createEnhancedSubclass();
-
-            unreachable();
-        }
-        catch (ApplicationRuntimeException ex)
-        {
-            checkException(ex, "Cannot inherit from final class");
-        }
-
-    }
-}
\ No newline at end of file
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/enhance/TestMethodSignature.java b/3.0.4/junit/src/org/apache/tapestry/junit/enhance/TestMethodSignature.java
deleted file mode 100644
index 16e327b..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/enhance/TestMethodSignature.java
+++ /dev/null
@@ -1,92 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.enhance;
-
-import java.lang.reflect.Method;
-
-import org.apache.tapestry.AbstractComponent;
-import org.apache.tapestry.BaseComponent;
-import org.apache.tapestry.enhance.MethodSignature;
-import org.apache.tapestry.junit.TapestryTestCase;
-
-/**
- *  Tests for the {@link org.apache.tapestry.enhance.MethodSignature}
- *  class used by the {@link org.apache.tapestry.enhance.DefaultComponentClassEnhancer}.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 3.0
- *
- **/
-public class TestMethodSignature extends TapestryTestCase
-{
-
-    private MethodSignature build(Class subject, String methodName)
-    {
-        Method[] m = subject.getDeclaredMethods();
-
-        for (int i = 0; i < m.length; i++)
-        {
-            if (m[i].getName().equals(methodName))
-                return new MethodSignature(m[i]);
-        }
-
-        unreachable();
-
-        return null;
-    }
-
-    public void testEquals()
-    {
-        // No parameters
-        MethodSignature m1 = build(Object.class, "hashCode");
-        MethodSignature m2 = build(Integer.class, "hashCode");
-
-        // With parameters
-        MethodSignature m3 = build(AbstractComponent.class, "renderComponent");
-        MethodSignature m4 = build(BaseComponent.class, "renderComponent");
-
-        assertEquals(true, m1.equals(m2));
-        assertEquals(true, m3.equals(m4));
-    }
-
-    public void testUnequal()
-    {
-        MethodSignature m1 = build(Object.class, "hashCode");
-        MethodSignature m2 = build(Integer.class, "toString");
-
-        assertEquals(false, m1.equals(m2));
-
-        assertEquals(false, m1.equals(null));
-
-        assertEquals(false, m1.equals("hashCode"));
-    }
-
-    public void testHashCode()
-    {
-        MethodSignature m1 = build(Object.class, "toString");
-        MethodSignature m2 = build(StringBuffer.class, "toString");
-        MethodSignature m3 = build(AbstractComponent.class, "renderComponent");
-        MethodSignature m4 = build(BaseComponent.class, "renderComponent");
-
-        assertEquals(true, m1.hashCode() == m2.hashCode());
-        assertEquals(true, m3.hashCode() == m4.hashCode());
-
-        // Different signatures should have different hashcode
-
-        assertEquals(true, m1.hashCode() != m3.hashCode());
-    }
-
-}
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/form/TestListEditMap.java b/3.0.4/junit/src/org/apache/tapestry/junit/form/TestListEditMap.java
deleted file mode 100644
index 9354511..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/form/TestListEditMap.java
+++ /dev/null
@@ -1,145 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.form;
-
-import org.apache.tapestry.form.ListEditMap;
-import org.apache.tapestry.junit.TapestryTestCase;
-import org.apache.tapestry.spec.Direction;
-
-/**
- * Suite of tests for {@link org.apache.tapestry.form.ListEditMap}.
- * 
- * @author Howard Lewis Ship
- * @since 3.0
- */
-
-public class TestListEditMap extends TapestryTestCase
-{
-
-    private ListEditMap create()
-    {
-        ListEditMap m = new ListEditMap();
-
-        m.add("in", Direction.IN);
-        m.add("auto", Direction.AUTO);
-        m.add("custom", Direction.CUSTOM);
-
-        return m;
-    }
-
-    public void testAdd()
-    {
-        ListEditMap m = create();
-
-        assertEquals("custom", m.getKey());
-
-        checkList("keys", new Object[]
-        { "in", "auto", "custom" }, m.getKeys());
-        checkList("all values", new Object[]
-        { Direction.IN, Direction.AUTO, Direction.CUSTOM }, m.getAllValues());
-        checkList("all values", new Object[]
-        { Direction.IN, Direction.AUTO, Direction.CUSTOM }, m.getValues());
-
-        assertEquals(true, m.getDeletedKeys().isEmpty());
-    }
-
-    public void testGet()
-    {
-        ListEditMap m = create();
-
-        m.setKey("auto");
-
-        assertEquals("auto", m.getKey());
-        assertSame(Direction.AUTO, m.getValue());
-    }
-
-    public void testGetUnknown()
-    {
-        ListEditMap m = create();
-
-        m.setKey("unknown");
-
-        assertNull(m.getValue());
-    }
-
-    public void testMarkDeleted()
-    {
-        ListEditMap m = create();
-
-        m.setKey("auto");
-
-        assertEquals(false, m.isDeleted());
-
-        m.setDeleted(true);
-
-        assertEquals(true, m.isDeleted());
-
-        checkList("all values", new Object[]
-        { Direction.IN, Direction.AUTO, Direction.CUSTOM }, m.getAllValues());
-
-        checkList("undeleted values", new Object[]
-        { Direction.IN, Direction.CUSTOM }, m.getValues());
-
-        checkList("deleted keys", new Object[]
-        { "auto" }, m.getDeletedKeys());
-    }
-
-    public void testMarkAlreadyDeleted()
-    {
-
-        ListEditMap m = create();
-
-        m.setKey("auto");
-
-        assertEquals(false, m.isDeleted());
-
-        m.setDeleted(false);
-
-        assertEquals(false, m.isDeleted());
-    }
-
-    public void testMarkMultipleDeleted()
-    {
-        ListEditMap m = create();
-
-        m.setKey("auto");
-        m.setDeleted(true);
-
-        m.setKey("custom");
-        assertEquals(false, m.isDeleted());
-        m.setDeleted(true);
-
-        assertEquals(true, m.isDeleted());
-
-        checkList("undeleted values", new Object[]
-        { Direction.IN }, m.getValues());
-    }
-
-    public void testDeleteUndelete()
-    {
-        ListEditMap m = create();
-
-        m.setKey("auto");
-        m.setDeleted(true);
-        m.setDeleted(false);
-
-        m.setKey("custom");
-        m.setDeleted(true);
-
-        checkList("undeleted values", new Object[]
-        { Direction.IN, Direction.AUTO }, m.getValues());
-    }
-
-}
\ No newline at end of file
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/AttributeHolder.java b/3.0.4/junit/src/org/apache/tapestry/junit/mock/AttributeHolder.java
deleted file mode 100644
index cc28c8f..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/AttributeHolder.java
+++ /dev/null
@@ -1,134 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.mock;
-
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.ObjectInputStream;
-import java.io.ObjectOutputStream;
-import java.util.Collections;
-import java.util.Enumeration;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Set;
-
-import org.apache.tapestry.ApplicationRuntimeException;
-
-/**
- *  
- *  Base class for holders of named attributes such as
- *  {@link javax.servlet.http.HttpSession}, 
- *  {@link javax.servlet.http.HttpServletRequest}
- *  and {@link javax.servlet.ServletContext}.
- *
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *
- **/
-
-public class AttributeHolder
-{
-    private Map _attributes = new HashMap();
-
-    public Object getAttribute(String name)
-    {
-        return _attributes.get(name);
-    }
-
-    public Enumeration getAttributeNames()
-    {
-        return getEnumeration(_attributes);
-    }
-
-    protected Enumeration getEnumeration(Map map)
-    {
-        return Collections.enumeration(map.keySet());
-    }
-
-    public String[] getAttributeNamesArray()
-    {
-        Set keys = _attributes.keySet();
-        int count = keys.size();
-
-        String[] array = new String[count];
-
-        return (String[]) keys.toArray(array);
-    }
-
-    public void setAttribute(String name, Object value)
-    {
-        _attributes.put(name, value);
-    }
-
-    public void removeAttribute(String name)
-    {
-        _attributes.remove(name);
-    }
-
-    /**
-     *  Serializes and then deserializes the {@link Map}
-     *  containing all attributes.
-     * 
-     **/
-
-    public void simulateFailover()
-    {
-        byte[] serialized = serializeAttributes();
-
-        _attributes = null;
-
-        Map restoredAttributes = deserializeAttributes(serialized);
-
-        _attributes = restoredAttributes;
-    }
-
-    private byte[] serializeAttributes()
-    {
-        try
-        {
-            ByteArrayOutputStream bos = new ByteArrayOutputStream();
-            ObjectOutputStream oos = new ObjectOutputStream(bos);
-
-            oos.writeObject(_attributes);
-
-            oos.close();
-
-            return bos.toByteArray();
-        }
-        catch (IOException ex)
-        {
-            throw new ApplicationRuntimeException("Unable to serialize attributes.", ex);
-        }
-    }
-
-    private Map deserializeAttributes(byte[] serialized)
-    {
-        try
-        {
-            ByteArrayInputStream bis = new ByteArrayInputStream(serialized);
-            ObjectInputStream ois = new ObjectInputStream(bis);
-
-            Map result = (Map) ois.readObject();
-
-            return result;
-        }
-        catch (Exception ex)
-        {
-            throw new ApplicationRuntimeException("Unable to deserialize attributes.", ex);
-        }
-    }
-}
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/IInitParameterHolder.java b/3.0.4/junit/src/org/apache/tapestry/junit/mock/IInitParameterHolder.java
deleted file mode 100644
index acecad0..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/IInitParameterHolder.java
+++ /dev/null
@@ -1,42 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.mock;
-
-import java.util.Enumeration;
-
-/**
- *  Common interface for several mock objects that can contain
- *  initial parameters.
- *
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 2.2
- * 
- **/
-
-public interface IInitParameterHolder
-{
-    public String getInitParameter(String name);
-
-    public Enumeration getInitParameterNames();
-    
-    /**
-     *  Allows Mock objects to have initial parameters set.
-     * 
-     **/
-    
-    public void setInitParameter(String name, String value);
-}
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/MockContext.java b/3.0.4/junit/src/org/apache/tapestry/junit/mock/MockContext.java
deleted file mode 100644
index 336bab9..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/MockContext.java
+++ /dev/null
@@ -1,257 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.mock;
-
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.util.Collections;
-import java.util.Enumeration;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Set;
-
-import javax.servlet.RequestDispatcher;
-import javax.servlet.Servlet;
-import javax.servlet.ServletContext;
-import javax.servlet.ServletException;
-
-/**
- *  Mock implementation of {@link javax.servlet.ServletContext}.
- *
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 2.2
- * 
- **/
-
-public class MockContext extends AttributeHolder implements ServletContext, IInitParameterHolder
-{
-    private MockSession _session;
-
-    private static final Map _suffixToContentType = new HashMap();
-
-    static {
-        _suffixToContentType.put("html", "text/html");
-        _suffixToContentType.put("gif", "image/gif");
-        _suffixToContentType.put("png", "image/png");
-    }
-
-    /**
-     *  Directory, relative to the current directory (i.e., System property user.dir)
-     *  that is the context root.
-     * 
-     **/
-
-    private String _rootDirectory = "context";
-    private String _servletContextName = "test";
-    private Map _initParameters = new HashMap();
-
-    public ServletContext getContext(String name)
-    {
-        return null;
-    }
-
-    public int getMajorVersion()
-    {
-        return 2;
-    }
-
-    public int getMinorVersion()
-    {
-        return 1;
-    }
-
-    public String getMimeType(String path)
-    {
-        int lastx = path.lastIndexOf('.');
-        String suffix = path.substring(lastx + 1);
-
-        return(String) _suffixToContentType.get(suffix);
-    }
-
-    public Set getResourcePaths(String arg0)
-    {
-        return null;
-    }
-
-    public URL getResource(String path) throws MalformedURLException
-    {
-        if (path == null || !path.startsWith("/"))
-            throw new MalformedURLException("Not a valid context path.");
-
-        StringBuffer buffer = new StringBuffer();
-
-        buffer.append(System.getProperty("user.dir"));
-        buffer.append("/");
-        buffer.append(_rootDirectory);
-
-        // Path has a leading slash
-
-        buffer.append(path);
-
-        File file = new File(buffer.toString());
-
-        if (file.exists())
-            return file.toURL();
-
-        return null;
-    }
-
-    public InputStream getResourceAsStream(String path)
-    {
-        try
-        {
-            URL url = getResource(path);
-
-            if (url == null)
-                return null;
-
-            return url.openStream();
-        }
-        catch (MalformedURLException ex)
-        {
-            return null;
-        }
-        catch (IOException ex)
-        {
-            return null;
-        }
-    }
-
-    /**
-     *  Gets a dispatcher for the given path.  Path should be a relative path (relative
-     *  to the context).  A special case:  "NULL" returns null (i.e., when a 
-     *  dispatcher can't be found).
-     * 
-     **/
-
-    public RequestDispatcher getRequestDispatcher(String path)
-    {
-        if (path.endsWith("/NULL"))
-            return null;
-
-        StringBuffer buffer = new StringBuffer(_rootDirectory);
-        buffer.append(path);
-
-        // Simulate the handling of directories by serving the index.html
-        // in the directory.
-
-        if (path.endsWith("/"))
-            buffer.append("index.html");
-
-        return new MockRequestDispatcher(buffer.toString());
-    }
-
-    public RequestDispatcher getNamedDispatcher(String name)
-    {
-        return null;
-    }
-
-    public Servlet getServlet(String name) throws ServletException
-    {
-        return null;
-    }
-
-    public Enumeration getServlets()
-    {
-        return null;
-    }
-
-    public Enumeration getServletNames()
-    {
-        return null;
-    }
-
-    public void log(String message)
-    {
-        log(message, null);
-    }
-
-    public void log(Exception exception, String message)
-    {
-        log(message, exception);
-    }
-
-    public void log(String message, Throwable exception)
-    {
-    }
-
-    public String getRealPath(String arg0)
-    {
-        return null;
-    }
-
-    public String getServerInfo()
-    {
-        return "Tapestry Mock Objects";
-    }
-
-    public String getInitParameter(String name)
-    {
-        return (String) _initParameters.get(name);
-    }
-
-    public Enumeration getInitParameterNames()
-    {
-        return Collections.enumeration(_initParameters.keySet());
-    }
-
-    public void setInitParameter(String name, String value)
-    {
-        _initParameters.put(name, value);
-    }
-
-    public String getServletContextName()
-    {
-        return _servletContextName;
-    }
-
-    public MockSession createSession()
-    {
-        if (_session == null)
-        {
-            String id = Long.toHexString(System.currentTimeMillis());
-
-            _session = new MockSession(this, id);
-        }
-
-        return _session;
-    }
-
-    public MockSession getSession()
-    {
-        return _session;
-    }
-
-    public void setServletContextName(String servletContextName)
-    {
-        _servletContextName = servletContextName;
-    }
-
-    public String getRootDirectory()
-    {
-        return _rootDirectory;
-    }
-
-    public void setRootDirectory(String rootDirectory)
-    {
-        _rootDirectory = rootDirectory;
-    }
-
-}
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/MockRequest.java b/3.0.4/junit/src/org/apache/tapestry/junit/mock/MockRequest.java
deleted file mode 100644
index 745bf40..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/MockRequest.java
+++ /dev/null
@@ -1,445 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.mock;
-
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.UnsupportedEncodingException;
-import java.security.Principal;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.Enumeration;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Locale;
-import java.util.Map;
-
-import javax.servlet.RequestDispatcher;
-import javax.servlet.ServletInputStream;
-import javax.servlet.http.Cookie;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpSession;
-
-/**
- *  Mock implementation of {@link javax.servlet.http.HttpServletRequest}.
- *
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 2.2
- * 
- **/
-
-public class MockRequest extends AttributeHolder implements HttpServletRequest
-{
-    /**
-     * HTTP content type header name.
-     */
-    private static final String CONTENT_TYPE_HEADER_KEY = "Content-type";
-    /**
-     *  Map of String[].
-     * 
-     **/
-
-    private Map _parameters = new HashMap();
-
-    /**
-     *  Map of String[]
-     * 
-     **/
-
-    private Map _headers = new HashMap();
-
-    private String _method = "GET";
-
-    private String _contextPath;
-
-    private MockContext _servletContext;
-    private MockSession _session;
-    private String _servletPath;
-    private List _cookies = new ArrayList();
-    private String _contentPath;
-
-    /**
-     *  This can be stored within the header, but doing it this way emulates a browser that 
-     *  does not put the encoding in the request, which appears to be the general case. 
-     **/
-    private String _encoding = null;
-
-    public MockRequest(MockContext servletContext, String servletPath)
-    {
-        _servletContext = servletContext;
-
-        _contextPath = "/" + servletContext.getServletContextName();
-        _servletPath = servletPath;
-
-        _session = _servletContext.getSession();
-    }
-
-    public String getAuthType()
-    {
-        return null;
-    }
-
-    public Cookie[] getCookies()
-    {
-        return (Cookie[]) _cookies.toArray(new Cookie[_cookies.size()]);
-    }
-
-    public long getDateHeader(String arg0)
-    {
-        return 0;
-    }
-
-    public String getHeader(String key)
-    {
-        String getHeader = null;
-
-        if (key != null)
-        {
-            getHeader = (String) _headers.get(key.toLowerCase());
-        }
-        return getHeader;
-    }
-
-    public Enumeration getHeaders(String name)
-    {
-        String[] headers = (String[]) _headers.get(name);
-
-        if (headers == null)
-            return Collections.enumeration(Collections.EMPTY_LIST);
-
-        return Collections.enumeration(Arrays.asList(headers));
-    }
-
-    public Enumeration getHeaderNames()
-    {
-        return getEnumeration(_headers);
-    }
-
-    public int getIntHeader(String arg0)
-    {
-        return 0;
-    }
-
-    public String getMethod()
-    {
-        return _method;
-    }
-
-    public String getPathInfo()
-    {
-        return null;
-    }
-
-    public String getPathTranslated()
-    {
-        return null;
-    }
-
-    public String getContextPath()
-    {
-        return _contextPath;
-    }
-
-    public String getQueryString()
-    {
-        return null;
-    }
-
-    public String getRemoteUser()
-    {
-        return null;
-    }
-
-    public boolean isUserInRole(String arg0)
-    {
-        return false;
-    }
-
-    public Principal getUserPrincipal()
-    {
-        return null;
-    }
-
-    public String getRequestedSessionId()
-    {
-        return null;
-    }
-
-    public String getRequestURI()
-    {
-        return null;
-    }
-
-    public StringBuffer getRequestURL()
-    {
-        return null;
-    }
-
-    public String getServletPath()
-    {
-        return _servletPath;
-    }
-
-    public HttpSession getSession(boolean create)
-    {
-        if (create && _session == null)
-            _session = _servletContext.createSession();
-
-        return _session;
-    }
-
-    public HttpSession getSession()
-    {
-        return _session;
-    }
-
-    public boolean isRequestedSessionIdValid()
-    {
-        return false;
-    }
-
-    public boolean isRequestedSessionIdFromCookie()
-    {
-        return false;
-    }
-
-    public boolean isRequestedSessionIdFromURL()
-    {
-        return false;
-    }
-
-    public boolean isRequestedSessionIdFromUrl()
-    {
-        return false;
-    }
-
-    public String getCharacterEncoding()
-    {
-        return _encoding;
-    }
-
-    public void setCharacterEncoding(String arg0) throws UnsupportedEncodingException
-    {
-        _encoding = arg0;
-    }
-
-    public int getContentLength()
-    {
-        return 0;
-    }
-
-    public String getContentType()
-    {
-        return getHeader(CONTENT_TYPE_HEADER_KEY);
-    }
-
-    public void setContentType(String contentType)
-    {
-        setHeader(CONTENT_TYPE_HEADER_KEY, contentType);
-    }
-
-    public ServletInputStream getInputStream() throws IOException
-    {
-        if (_contentPath == null)
-            return null;
-
-        return new MockServletInputStream(_contentPath);
-    }
-
-    public String getParameter(String name)
-    {
-        String[] values = getParameterValues(name);
-
-        if (values == null || values.length == 0)
-            return null;
-
-        return values[0];
-    }
-
-    public Enumeration getParameterNames()
-    {
-        return Collections.enumeration(_parameters.keySet());
-    }
-
-    public String[] getParameterValues(String name)
-    {
-        return (String[]) _parameters.get(name);
-    }
-
-    /** 
-     *  Not part of 2.1 API, not used by Tapestry.
-     * 
-     **/
-
-    public Map getParameterMap()
-    {
-        return null;
-    }
-
-    public String getProtocol()
-    {
-        return null;
-    }
-
-    public String getScheme()
-    {
-        return "http";
-    }
-
-    public String getServerName()
-    {
-        return "junit-test";
-    }
-
-    public int getServerPort()
-    {
-        return 80;
-    }
-
-    public BufferedReader getReader() throws IOException
-    {
-        return null;
-    }
-
-    public String getRemoteAddr()
-    {
-        return null;
-    }
-
-    public String getRemoteHost()
-    {
-        return null;
-    }
-
-    private Locale _locale = Locale.ENGLISH;
-
-    public Locale getLocale()
-    {
-        return _locale;
-    }
-
-    public void setLocale(Locale locale)
-    {
-        _locale = locale;
-    }
-
-    public Enumeration getLocales()
-    {
-        return Collections.enumeration(Collections.singleton(_locale));
-    }
-
-    public boolean isSecure()
-    {
-        return false;
-    }
-
-    public RequestDispatcher getRequestDispatcher(String path)
-    {
-        return _servletContext.getRequestDispatcher(path);
-    }
-
-    public String getRealPath(String arg0)
-    {
-        return null;
-    }
-
-    public void setContextPath(String contextPath)
-    {
-        _contextPath = contextPath;
-    }
-
-    public void setMethod(String method)
-    {
-        _method = method;
-    }
-
-    public void setParameter(String name, String[] values)
-    {
-        _parameters.put(name, values);
-    }
-
-    public void setParameter(String name, String value)
-    {
-        setParameter(name, new String[] { value });
-    }
-
-    public void addCookie(Cookie cookie)
-    {
-        _cookies.add(cookie);
-    }
-
-    public void addCookies(Cookie[] cookies)
-    {
-        if (cookies == null)
-            return;
-
-        for (int i = 0; i < cookies.length; i++)
-            addCookie(cookies[i]);
-    }
-
-    private void setHeader(String key, String value)
-    {
-        if (key != null)
-        {
-            _headers.put(key.toLowerCase(), value);
-        }
-    }
-
-    /**
-     *  Delegates this to the {@link org.apache.tapestry.junit.mock.MockSession}, if
-     *  it exists.
-     * 
-     **/
-
-    public void simulateFailover()
-    {
-        if (_session != null)
-            _session.simulateFailover();
-    }
-
-    public String getContentPath()
-    {
-        return _contentPath;
-    }
-
-    public void setContentPath(String contentPath)
-    {
-        _contentPath = contentPath;
-    }
-
-    public int getRemotePort()
-    {
-        return 0;
-    }
-
-    public String getLocalName()
-    {
-        return null;
-    }
-
-    public String getLocalAddr()
-    {
-        return null;
-    }
-
-    public int getLocalPort()
-    {
-        return 0;
-    }
-
-}
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/MockRequestDispatcher.java b/3.0.4/junit/src/org/apache/tapestry/junit/mock/MockRequestDispatcher.java
deleted file mode 100644
index 3be3a99..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/MockRequestDispatcher.java
+++ /dev/null
@@ -1,83 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.mock;
-
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-
-import javax.servlet.RequestDispatcher;
-import javax.servlet.ServletException;
-import javax.servlet.ServletRequest;
-import javax.servlet.ServletResponse;
-
-/**
- *  Used to enable mock testing of internal request forwarding.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 3.0
- *
- **/
-public class MockRequestDispatcher implements RequestDispatcher
-{	
-	private String _resourcePath;
-	
-    public MockRequestDispatcher(String resourcePath)
-    {
-    	_resourcePath = resourcePath;
-    }
-
-
-    public void forward(ServletRequest request, ServletResponse response)
-        throws ServletException, IOException
-    {
-    	if (_resourcePath.endsWith("/FAIL_SERVLET"))
-    		throw new ServletException("Test-directed ServletException from RequestDispatcher forward().");
-    	
-    	// For testing purposes, assume we only forward to static HTML files.
-    	
-     	
-    	InputStream in = new FileInputStream(_resourcePath);
-
-   		response.setContentType("test/html");
-    	
-    	OutputStream out =	response.getOutputStream();
-
-    	
-    	byte[] buffer = new byte[1000];
-    	
-    	while (true)
-    	{
-    		int length = in.read(buffer);
-    		
-    		if (length < 0)
-    			break;
-    			
-    		out.write(buffer, 0, length);
-    	}
-    	
-    	in.close();
-    	out.close();
-    }
-
-    public void include(ServletRequest request, ServletResponse response)
-        throws ServletException, IOException
-    {
-    	throw new ServletException("MockRequestDispatcher.include() not supported.");
-    }
-
-}
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/MockResponse.java b/3.0.4/junit/src/org/apache/tapestry/junit/mock/MockResponse.java
deleted file mode 100644
index b5465c2..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/MockResponse.java
+++ /dev/null
@@ -1,307 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.mock;
-
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.PrintWriter;
-import java.io.UnsupportedEncodingException;
-import java.util.*;
-
-import javax.servlet.ServletOutputStream;
-import javax.servlet.http.Cookie;
-import javax.servlet.http.HttpServletResponse;
-
-/**
- *  Mock implementation of {@link javax.servlet.http.HttpServletResponse}.
- *
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 2.2
- * 
- **/
-
-public class MockResponse implements HttpServletResponse
-{
-    private MockRequest _request;
-    private boolean _commited = false;
-    private ByteArrayOutputStream _outputByteStream;
-    private ServletOutputStream _outputStream;
-    private List _cookies = new ArrayList();
-
-    private String _redirectLocation;
-    private String _contentType;
-
-    private class ServletOutputStreamImpl extends ServletOutputStream
-    {
-        private ServletOutputStreamImpl()
-        {
-        }
-
-        public void close() throws IOException
-        {
-            super.close();
-
-            if (_outputByteStream != null)
-                _outputByteStream.close();
-        }
-
-        public void write(byte[] b, int off, int len) throws IOException
-        {
-            commit();
-
-            _outputByteStream.write(b, off, len);
-        }
-
-        public void write(byte[] b) throws IOException
-        {
-            commit();
-
-            _outputByteStream.write(b);
-        }
-
-        public void write(int b) throws IOException
-        {
-            commit();
-
-            _outputByteStream.write(b);
-        }
-
-        private void commit()
-        {
-            if (!_commited)
-            {
-                _commited = true;
-                _outputByteStream = new ByteArrayOutputStream();
-            }
-        }
-    }
-
-    public MockResponse(MockRequest request)
-    {
-        _request = request;
-    }
-
-    public void addCookie(Cookie cookie)
-    {
-        _cookies.add(cookie);
-    }
-
-    public boolean containsHeader(String arg0)
-    {
-        return false;
-    }
-
-    public String encodeURL(String path)
-    {
-        return path;
-    }
-
-    public String encodeRedirectURL(String path)
-    {
-        return path;
-    }
-
-    public String encodeUrl(String path)
-    {
-        return encodeURL(path);
-    }
-
-    public String encodeRedirectUrl(String path)
-    {
-        return encodeRedirectURL(path);
-    }
-
-    public void sendError(int code, String message) throws IOException
-    {
-        if (_commited)
-            throw new IllegalStateException("sendError() when committed.");
-    }
-
-    public void sendError(int code) throws IOException
-    {
-        sendError(code, null);
-    }
-
-    public void sendRedirect(String location) throws IOException
-    {
-        if (_commited)
-            throw new IllegalStateException("sendRedirect() when committed.");
-
-		if (location.endsWith("/FAIL_IO"))
-			throw new IOException("Forced IOException in MockResponse.sendRedirect().");
-
-        _redirectLocation = location;
-
-        _commited = true;
-
-    }
-
-    public String getRedirectLocation()
-    {
-        return _redirectLocation;
-    }
-
-    public void setDateHeader(String name, long value)
-    {
-    }
-
-    public void addDateHeader(String name, long value)
-    {
-    }
-
-    public void setHeader(String name, String value)
-    {
-    }
-
-    public void addHeader(String name, String value)
-    {
-    }
-
-    public void setIntHeader(String name, int value)
-    {
-    }
-
-    public void addIntHeader(String name, int value)
-    {
-    }
-
-    public void setStatus(int name)
-    {
-    }
-
-    public void setStatus(int name, String arg1)
-    {
-    }
-
-    public String getCharacterEncoding()
-    {
-        return null;
-    }
-
-    public ServletOutputStream getOutputStream() throws IOException
-    {
-        if (_outputStream != null)
-            throw new IllegalStateException("getOutputStream() invoked more than once.");
-
-        _outputStream = new ServletOutputStreamImpl();
-
-        return _outputStream;
-    }
-
-    public PrintWriter getWriter() throws IOException
-    {
-        return new PrintWriter(getOutputStream());
-    }
-
-    public void setContentLength(int arg0)
-    {
-    }
-
-    public void setContentType(String contentType)
-    {
-    	_contentType = contentType;
-    }
-
-    public void setBufferSize(int arg0)
-    {
-    }
-
-    public int getBufferSize()
-    {
-        return 0;
-    }
-
-    public void flushBuffer() throws IOException
-    {
-    }
-
-    public void resetBuffer()
-    {
-    }
-
-    public boolean isCommitted()
-    {
-        return _commited;
-    }
-
-    public void reset()
-    {
-    }
-
-    public void setLocale(Locale arg0)
-    {
-    }
-
-    public Locale getLocale()
-    {
-        return null;
-    }
-
-    /**
-     *  Invoked by {@link org.apache.tapestry.junit.mock.MockTester} after
-     *  the test is complete, to close and otherwise finish up.
-     * 
-     **/
-
-    public void end() throws IOException
-    {
-    	// For redirects, we may never open an output stream.
-    	
-        if (_outputStream != null)
-            _outputStream.close();
-    }
-
-    /**
-     *  Converts the binary output stream back into a String.
-     * 
-     **/
-
-    public String getOutputString()
-    {
-    	if (_outputByteStream == null)
-    		return null;
-    		
-        try {
-            String encoding = _request.getCharacterEncoding();
-            return new String(_outputByteStream.toByteArray(), encoding);
-        }
-        catch (UnsupportedEncodingException e) {
-            // use the default encoding if the provided one is unsupported
-            return _outputByteStream.toString();
-        }
-    }
-
-	public byte[] getResponseBytes()
-	{
-		return _outputByteStream.toByteArray();
-	}
-
-    public Cookie[] getCookies()
-    {
-        return (Cookie[]) _cookies.toArray(new Cookie[_cookies.size()]);
-    }
-    
-    public String getContentType()
-    {
-        return _contentType;
-    }
-
-    public void setCharacterEncoding(String enc)
-    {
-    }
-
-}
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/MockServletConfig.java b/3.0.4/junit/src/org/apache/tapestry/junit/mock/MockServletConfig.java
deleted file mode 100644
index a78d0ce..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/MockServletConfig.java
+++ /dev/null
@@ -1,73 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.mock;
-
-import java.util.Collections;
-import java.util.Enumeration;
-import java.util.HashMap;
-import java.util.Map;
-
-import javax.servlet.ServletConfig;
-import javax.servlet.ServletContext;
-
-/**
- *  An implementation of {@link javax.servlet.ServletConfig} used
- *  for Mock testing. 
- * 
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 2.2
- *
- **/
-
-public class MockServletConfig implements ServletConfig, IInitParameterHolder
-{
-    private String _name;
-    private ServletContext _context;
-    private Map _initParameters = new HashMap();
-
-    public MockServletConfig(String name, ServletContext context)
-    {
-        _name = name;
-        _context = context;
-    }
-
-    public String getInitParameter(String name)
-    {
-        return (String) _initParameters.get(name);
-    }
-
-    public Enumeration getInitParameterNames()
-    {
-        return Collections.enumeration(_initParameters.keySet());
-    }
-
-    public ServletContext getServletContext()
-    {
-        return _context;
-    }
-
-    public String getServletName()
-    {
-        return _name;
-    }
-
-    public void setInitParameter(String name, String value)
-    {
-        _initParameters.put(name, value);
-    }
-
-}
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/MockServletInputStream.java b/3.0.4/junit/src/org/apache/tapestry/junit/mock/MockServletInputStream.java
deleted file mode 100644
index c71440e..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/MockServletInputStream.java
+++ /dev/null
@@ -1,89 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.mock;
-
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-
-import javax.servlet.ServletInputStream;
-
-/**
- *  Implementation of {@link ServletInputStream} used in mock object testing.
- *  The data in the stream is provided by a binary file.  The implemenation
- *  wraps around a {@link java.io.FileInputStream} redirecting all method
- *  invocations to the inner stream.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 3.0
- *
- **/
-
-public class MockServletInputStream extends ServletInputStream
-{
-    private InputStream _inner;
-
-    public MockServletInputStream(String path) throws IOException
-    {
-        _inner = new FileInputStream(path);
-    }
-
-    public int read() throws IOException
-    {
-        return _inner.read();
-    }
-
-    public int available() throws IOException
-    {
-        return _inner.available();
-    }
-
-    public void close() throws IOException
-    {
-        _inner.close();
-    }
-
-    public synchronized void mark(int readlimit)
-    {
-        _inner.mark(readlimit);
-    }
-
-    public boolean markSupported()
-    {
-        return _inner.markSupported();
-    }
-
-    public int read(byte[] b, int off, int len) throws IOException
-    {
-        return _inner.read(b, off, len);
-    }
-
-    public int read(byte[] b) throws IOException
-    {
-        return _inner.read(b);
-    }
-
-    public synchronized void reset() throws IOException
-    {
-        _inner.reset();
-    }
-
-    public long skip(long n) throws IOException
-    {
-        return _inner.skip(n);
-    }
-
-}
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/MockSession.java b/3.0.4/junit/src/org/apache/tapestry/junit/mock/MockSession.java
deleted file mode 100644
index 3883911..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/MockSession.java
+++ /dev/null
@@ -1,120 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.mock;
-
-import javax.servlet.ServletContext;
-import javax.servlet.http.HttpSession;
-import javax.servlet.http.HttpSessionBindingEvent;
-import javax.servlet.http.HttpSessionBindingListener;
-import javax.servlet.http.HttpSessionContext;
-
-/**
- *  Mock implementation of {@link javax.servlet.http.HttpSession}.
- *
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 2.2
- * 
- **/
-
-public class MockSession extends AttributeHolder implements HttpSession
-{
-    private MockContext _context;
-    private String _id;
-
-    public MockSession(MockContext context, String id)
-    {
-        _context = context;
-        _id = id;
-    }
-
-    public long getCreationTime()
-    {
-        return 0;
-    }
-
-    public String getId()
-    {
-        return _id;
-    }
-
-    public long getLastAccessedTime()
-    {
-        return 0;
-    }
-
-    public ServletContext getServletContext()
-    {
-        return _context;
-    }
-
-    public void setMaxInactiveInterval(int arg0)
-    {
-    }
-
-    public int getMaxInactiveInterval()
-    {
-        return 0;
-    }
-
-    public HttpSessionContext getSessionContext()
-    {
-        return null;
-    }
-
-    public Object getValue(String name)
-    {
-        return getAttribute(name);
-    }
-
-    public String[] getValueNames()
-    {
-        return getAttributeNamesArray();
-    }
-
-    public void putValue(String name, Object value)
-    {
-        setAttribute(name, value);
-    }
-
-    public void removeValue(String name)
-    {
-        removeAttribute(name);
-    }
-
-    public void invalidate()
-    {
-    }
-
-    public boolean isNew()
-    {
-        return false;
-    }
-
-    public void setAttribute(String name, Object value)
-    {
-        super.setAttribute(name, value);
-
-        if (value instanceof HttpSessionBindingListener)
-        {
-            HttpSessionBindingListener listener = (HttpSessionBindingListener) value;
-            HttpSessionBindingEvent event = new HttpSessionBindingEvent(this, name);
-
-            listener.valueBound(event);
-        }
-    }
-
-}
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/MockTester.java b/3.0.4/junit/src/org/apache/tapestry/junit/mock/MockTester.java
deleted file mode 100644
index a657bbf..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/MockTester.java
+++ /dev/null
@@ -1,890 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.mock;
-
-import java.io.ByteArrayOutputStream;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Locale;
-import java.util.Map;
-
-import javax.servlet.ServletException;
-import javax.servlet.http.Cookie;
-
-import junit.framework.AssertionFailedError;
-import ognl.Ognl;
-import ognl.OgnlException;
-
-import org.apache.oro.text.regex.MalformedPatternException;
-import org.apache.oro.text.regex.MatchResult;
-import org.apache.oro.text.regex.Pattern;
-import org.apache.oro.text.regex.PatternCompiler;
-import org.apache.oro.text.regex.PatternMatcher;
-import org.apache.oro.text.regex.PatternMatcherInput;
-import org.apache.oro.text.regex.Perl5Compiler;
-import org.apache.oro.text.regex.Perl5Matcher;
-import org.apache.tapestry.ApplicationRuntimeException;
-import org.apache.tapestry.ApplicationServlet;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.util.xml.DocumentParseException;
-import org.jdom.Document;
-import org.jdom.Element;
-import org.jdom.JDOMException;
-import org.jdom.input.SAXBuilder;
-
-/**
- *  A complex class that reads an XML description
- *  of a test involving the Mock objects and executes it, pretending
- *  to be a running servlet container.
- * 
- *  <p>
- *  The XML format is pretty simple, it contains declarations
- *  similar to a web.xml deployment descriptor, a description
- *  of the active HttpSession (if any),
- *  a description of the HttpRequest,
- *  and then a set of expectations
- *  for the output stream from the 
- *  request.
- *
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 2.2
- * 
- **/
-
-public class MockTester
-{
-    private String _path;
-    private Document _document;
-    private MockContext _context;
-    private String _servletName;
-    private ApplicationServlet _servlet;
-    private MockRequest _request;
-    private MockResponse _response;
-    private int _requestNumber = 0;
-    private Map _ognlContext;
-    private Throwable _exception;
-
-    /**
-     *  Shared cache of compiled patterns.
-     * 
-     **/
-
-    private static Map _patternCache = new HashMap();
-
-    private PatternMatcher _matcher;
-    private PatternCompiler _compiler;
-
-    /**
-     *  Constructs a new MockTester for the given resource path
-     *  (which is the XML file to read).
-     * 
-     **/
-
-    public MockTester(String path)
-        throws JDOMException, ServletException, DocumentParseException, IOException
-    {
-        _path = path;
-
-        parse();
-
-        setup();
-    }
-
-    public String toString()
-    {
-        StringBuffer buffer = new StringBuffer("MockTester[");
-
-        if (_document != null)
-            buffer.append(_document);
-
-        buffer.append(']');
-
-        return buffer.toString();
-    }
-
-    /**
-     *  Invoked to execute the request cycle.
-     * 
-     **/
-
-    public void execute() throws IOException, ServletException, DocumentParseException
-    {
-        Element root = _document.getRootElement();
-
-        List l = root.getChildren("request");
-        int count = l.size();
-
-        for (int i = 0; i < count; i++)
-        {
-            Element request = (Element) l.get(i);
-
-            _requestNumber = i + 1;
-
-            executeRequest(request);
-        }
-    }
-
-    private void executeRequest(Element request)
-        throws IOException, ServletException, DocumentParseException
-    {
-        Cookie[] oldRequestCookies = (_request == null ? null : _request.getCookies());
-
-        _request = new MockRequest(_context, "/" + _servlet.getServletName());
-
-        String contentType = request.getAttributeValue("content-type");
-        if (contentType != null)
-            _request.setContentType(contentType);
-
-        String contentPath = request.getAttributeValue("content-path");
-        if (contentPath != null)
-            _request.setContentPath(contentPath);
-
-        _request.addCookies(oldRequestCookies);
-
-        if (_response != null)
-            _request.addCookies(_response.getCookies());
-
-        setupRequest(request);
-
-        _exception = null;
-
-        _response = new MockResponse(_request);
-
-        try
-        {
-            _servlet.service(_request, _response);
-        }
-        catch (ServletException ex)
-        {
-            _exception = ex;
-        }
-        catch (IOException ex)
-        {
-            _exception = ex;
-        }
-
-        _response.end();
-
-        executeAssertions(request);
-    }
-
-    private void parse() throws JDOMException, DocumentParseException, IOException
-    {
-        SAXBuilder builder = new SAXBuilder();
-
-        _document = builder.build(_path);
-    }
-
-    private void setup() throws ServletException
-    {
-        Element root = _document.getRootElement();
-
-        if (!root.getName().equals("mock-test"))
-            throw new RuntimeException("Root element of " + _path + " must be 'mock-test'.");
-
-        setupContext(root);
-        setupServlet(root);
-    }
-
-    private void setupContext(Element parent)
-    {
-        _context = new MockContext();
-
-        Element context = parent.getChild("context");
-
-        if (context == null)
-            return;
-
-        String name = context.getAttributeValue("name");
-
-        if (name != null)
-            _context.setServletContextName(name);
-
-        String root = context.getAttributeValue("root");
-
-        if (root != null)
-            _context.setRootDirectory(root);
-
-        setInitParameters(context, _context);
-    }
-
-    private void setupServlet(Element parent) throws ServletException
-    {
-        Element servlet = parent.getChild("servlet");
-
-        String className = servlet.getAttributeValue("class");
-        _servletName = servlet.getAttributeValue("name");
-
-        _servlet = createServlet(className);
-
-        MockServletConfig config = new MockServletConfig(_servletName, _context);
-
-        setInitParameters(servlet, config);
-
-        _servlet.init(config);
-    }
-
-    private void setupRequest(Element request)
-    {
-        String method = request.getAttributeValue("method");
-        if (method != null)
-            _request.setMethod(method);
-
-        // It's really just the language from the locale.
-
-        String locale = request.getAttributeValue("locale");
-        if (locale != null)
-            _request.setLocale(new Locale(locale, "", ""));
-
-        List parameters = request.getChildren("parameter");
-        int count = parameters.size();
-
-        for (int i = 0; i < count; i++)
-        {
-            Element parameter = (Element) parameters.get(i);
-
-            setRequestParameter(parameter);
-        }
-
-        String failover = request.getAttributeValue("failover");
-
-        if (failover != null && failover.equals("true"))
-            _request.simulateFailover();
-
-        // TBD: Headers, etc., etc.
-    }
-
-    private void setRequestParameter(Element parameter)
-    {
-        List values = new ArrayList();
-
-        String name = parameter.getAttributeValue("name");
-
-        String value = parameter.getAttributeValue("value");
-        if (value != null)
-            values.add(value);
-
-        List children = parameter.getChildren("value");
-        int count = children.size();
-        for (int i = 0; i < count; i++)
-        {
-            Element e = (Element) children.get(i);
-            value = e.getTextTrim();
-
-            values.add(value);
-        }
-
-        String[] array = (String[]) values.toArray(new String[values.size()]);
-
-        _request.setParameter(name, array);
-    }
-
-    private void setInitParameters(Element parent, IInitParameterHolder holder)
-    {
-        List children = parent.getChildren("init-parameter");
-
-        int count = children.size();
-        for (int i = 0; i < count; i++)
-        {
-            Element e = (Element) children.get(i);
-
-            String name = e.getAttributeValue("name");
-            String value = e.getAttributeValue("value");
-
-            holder.setInitParameter(name, value);
-        }
-    }
-
-    private ApplicationServlet createServlet(String className)
-    {
-        Throwable t = null;
-        try
-        {
-            Class servletClass = Class.forName(className);
-
-            return (ApplicationServlet) servletClass.newInstance();
-        }
-        catch (ClassNotFoundException ex)
-        {
-            t = ex;
-        }
-        catch (InstantiationException ex)
-        {
-            t = ex;
-        }
-        catch (IllegalAccessException ex)
-        {
-            t = ex;
-        }
-
-        // Just a convient wrapper to percolate to the top and
-        // mark this test as an error.
-
-        throw new ApplicationRuntimeException(
-            "Unable to instantiate servlet class " + className + ".",
-            t);
-    }
-
-    public MockContext getContext()
-    {
-        return _context;
-    }
-
-    public MockRequest getRequest()
-    {
-        return _request;
-    }
-
-    public MockResponse getResponse()
-    {
-        return _response;
-    }
-
-    public ApplicationServlet getServlet()
-    {
-        return _servlet;
-    }
-
-    private void executeAssertions(Element request) throws DocumentParseException
-    {
-        executeOutputAssertions(request);
-        executeNoOutputAssertions(request);
-        executeRegexpAssertions(request);
-        executeExpressionAssertions(request);
-        executeOutputMatchesAssertions(request);
-        executeCookieAssertions(request);
-        executeOutputStreamAssertions(request);
-        executeExceptionAssertions(request);
-    }
-
-    /**
-     *  Handles &lt;assert&gt; elements inside &lt;request&gt;.
-     *  Each assertion is in the form of a boolean expression
-     *  which must be true.
-     * 
-     **/
-
-    private void executeExpressionAssertions(Element request) throws DocumentParseException
-    {
-        List l = request.getChildren("assert");
-        int count = l.size();
-
-        for (int i = 0; i < count; i++)
-        {
-            Element a = (Element) l.get(i);
-
-            String name = a.getAttributeValue("name");
-            String expression = a.getTextTrim();
-
-            checkExpression(name, expression);
-        }
-    }
-
-    private void checkExpression(String name, String expression) throws DocumentParseException
-    {
-
-        boolean result = evaluate(expression);
-
-        if (result)
-            return;
-
-        throw new AssertionFailedError(
-            buildTestName(name) + ": Expression '" + expression + "' was not true.");
-
-    }
-
-    private boolean evaluate(String expression) throws DocumentParseException
-    {
-        if (_ognlContext == null)
-            _ognlContext = Ognl.createDefaultContext(this);
-
-        Object value = null;
-
-        try
-        {
-            value = Ognl.getValue(expression, _ognlContext, this);
-        }
-        catch (OgnlException ex)
-        {
-            throw new DocumentParseException("Expression '" + expression + "' is not valid.", ex);
-        }
-
-        if (value == null)
-            return false;
-
-        if (value instanceof Boolean)
-            return ((Boolean) value).booleanValue();
-
-        if (value instanceof Number)
-            return ((Number) value).longValue() != 0;
-
-        if (value instanceof String)
-            return ((String) value).length() > 0;
-
-        throw new DocumentParseException(
-            "Expression '"
-                + expression
-                + "' evaluates to ("
-                + value.getClass().getName()
-                + ") "
-                + value
-                + ", which cannot be interpreted as a boolean.");
-    }
-
-    /**
-     *  Handles &lt;assert-regexp&gt; elements inside &lt;request&gt;.
-     *  Checks that a regular expression appears in the output.
-     *  Content of element is the regular expression.
-     * 
-     *  <p>
-     *  Attribute name is used in error messages.
-     * 
-     **/
-
-    private void executeRegexpAssertions(Element request) throws DocumentParseException
-    {
-        String outputString = null;
-
-        List assertions = request.getChildren("assert-regexp");
-        int count = assertions.size();
-
-        for (int i = 0; i < count; i++)
-        {
-            Element a = (Element) assertions.get(i);
-
-            String name = a.getAttributeValue("name");
-            String pattern = a.getTextTrim();
-
-            if (Tapestry.isBlank(pattern))
-                throw new DocumentParseException("Pattern is null in " + a);
-
-            if (outputString == null)
-                outputString = _response.getOutputString();
-
-            matchRegexp(name, outputString, pattern);
-        }
-
-    }
-
-    /**
-         *  Handles &lt;assert-output&gt; elements inside &lt;request&gt;.
-         *  Checks that a substring appears in the output.
-         *  Content of element is the substring to search for.
-         *  <p>
-         *  Attribute name is used in error messages.
-         * 
-         **/
-
-    private void executeOutputAssertions(Element request) throws DocumentParseException
-    {
-        String outputString = null;
-
-        List assertions = request.getChildren("assert-output");
-        int count = assertions.size();
-
-        for (int i = 0; i < count; i++)
-        {
-            Element a = (Element) assertions.get(i);
-
-            String name = a.getAttributeValue("name");
-            String substring = a.getTextTrim();
-
-            if (Tapestry.isBlank(substring))
-                throw new DocumentParseException("Substring is null in " + a);
-
-            if (outputString == null)
-                outputString = _response.getOutputString();
-
-            matchSubstring(name, outputString, substring);
-        }
-
-    }
-
-    /**
-         *  Handles &lt;assert-no-output&gt; elements inside &lt;request&gt;.
-         *  Checks that a substring appears in the output.
-         *  Content of element is the substring to search for.
-         *  <p>
-         *  Attribute name is used in error messages.
-         * 
-         **/
-
-    private void executeNoOutputAssertions(Element request) throws DocumentParseException
-    {
-        String outputString = null;
-
-        List assertions = request.getChildren("assert-no-output");
-        int count = assertions.size();
-
-        for (int i = 0; i < count; i++)
-        {
-            Element a = (Element) assertions.get(i);
-
-            String name = a.getAttributeValue("name");
-            String substring = a.getTextTrim();
-
-            if (Tapestry.isBlank(substring))
-                throw new DocumentParseException("Substring is null in " + a);
-
-            if (outputString == null)
-                outputString = _response.getOutputString();
-
-            matchNoSubstring(name, outputString, substring);
-        }
-
-    }
-
-    private PatternMatcher getMatcher()
-    {
-        if (_matcher == null)
-            _matcher = new Perl5Matcher();
-
-        return _matcher;
-    }
-
-    private Pattern compile(String pattern) throws DocumentParseException
-    {
-        Pattern result = (Pattern) _patternCache.get(pattern);
-
-        if (result != null)
-            return result;
-
-        if (_compiler == null)
-            _compiler = new Perl5Compiler();
-
-        try
-        {
-            result = _compiler.compile(pattern, Perl5Compiler.MULTILINE_MASK);
-
-        }
-        catch (MalformedPatternException ex)
-        {
-            throw new ApplicationRuntimeException(
-                "Malformed regular expression: " + pattern + " in " + _path + ".",
-                ex);
-        }
-
-        _patternCache.put(pattern, result);
-
-        return result;
-    }
-
-    private void matchRegexp(String name, String text, String pattern)
-        throws DocumentParseException
-    {
-        Pattern compiled = compile(pattern);
-
-        if (getMatcher().contains(text, compiled))
-            return;
-
-        System.err.println(text);
-
-        throw new AssertionFailedError(
-            buildTestName(name)
-                + ": Response does not contain regular expression '"
-                + pattern
-                + "'.");
-    }
-
-    private void matchSubstring(String name, String text, String substring)
-    {
-        if (text == null)
-            throw new AssertionFailedError(buildTestName(name) + " : Response is null.");
-
-        if (text.indexOf(substring) >= 0)
-            return;
-
-        System.err.println(text);
-
-        throw new AssertionFailedError(
-            buildTestName(name) + ": Response does not contain string '" + substring + "'.");
-    }
-
-    private void matchNoSubstring(String name, String text, String substring)
-    {
-        if (text == null)
-            throw new AssertionFailedError(buildTestName(name) + " : Response is null.");
-
-        if (text.indexOf(substring) < 0)
-            return;
-
-        System.err.println(text);
-
-        throw new AssertionFailedError(
-            buildTestName(name) + ": Response contains string '" + substring + "'.");
-    }
-
-    private void executeOutputMatchesAssertions(Element request) throws DocumentParseException
-    {
-        List l = request.getChildren("assert-output-matches");
-        int count = l.size();
-        String outputString = null;
-
-        for (int i = 0; i < count; i++)
-        {
-            Element e = (Element) l.get(i);
-
-            if (outputString == null)
-                outputString = _response.getOutputString();
-
-            executeOutputMatchAssertion(e, outputString);
-        }
-
-    }
-
-    private void executeOutputMatchAssertion(Element element, String outputString)
-        throws DocumentParseException
-    {
-        String name = element.getAttributeValue("name");
-        String value = element.getAttributeValue("subgroup");
-        int subgroup = (value == null) ? 0 : Integer.parseInt(value);
-
-        String pattern = element.getTextTrim();
-
-        if (Tapestry.isBlank(pattern))
-            throw new DocumentParseException("Pattern is null in " + element);
-
-        PatternMatcherInput input = new PatternMatcherInput(outputString);
-
-        PatternMatcher matcher = getMatcher();
-        Pattern compiled = compile(pattern);
-
-        List l = element.getChildren("match");
-        int count = l.size();
-        int i = 0;
-
-        while (matcher.contains(input, compiled))
-        {
-            MatchResult match = matcher.getMatch();
-
-            if (i >= count)
-            {
-                System.err.println(outputString);
-                throw new AssertionFailedError(
-                    buildTestName(name) + ": Too many matches for '" + pattern + "'.");
-            }
-
-            Element e = (Element) l.get(i);
-            String expected = e.getTextTrim();
-            String actual = match.group(subgroup);
-
-            if (!actual.equals(expected))
-            {
-                System.err.println(outputString);
-                throw new AssertionFailedError(
-                    buildTestName(name)
-                        + "["
-                        + i
-                        + "]: Expected '"
-                        + expected
-                        + "' but got '"
-                        + actual
-                        + "'.");
-            }
-
-            i++;
-        }
-
-        if (i < count)
-        {
-            System.err.println(outputString);
-            throw new AssertionFailedError(
-                buildTestName(name)
-                    + ": Too few matches for '"
-                    + pattern
-                    + "' (expected "
-                    + count
-                    + " but got "
-                    + i
-                    + ").");
-        }
-    }
-
-    private void executeExceptionAssertions(Element request)
-    {
-        List l = request.getChildren("assert-exception");
-        int count = l.size();
-
-        for (int i = 0; i < count; i++)
-        {
-            Element assertion = (Element) l.get(i);
-
-            executeExceptionAssertion(assertion);
-        }
-
-    }
-
-    private void executeExceptionAssertion(Element assertion)
-    {
-        String name = assertion.getAttributeValue("name");
-        String value = assertion.getTextTrim();
-
-        if (_exception == null)
-            throw new AssertionFailedError(buildTestName(name) + " no exception thrown.");
-        String message = _exception.getMessage();
-
-        if (message.indexOf(value) >= 0)
-            return;
-
-        throw new AssertionFailedError(
-            buildTestName(name)
-                + " exception message ("
-                + message
-                + ") does not contain '"
-                + value
-                + "'.");
-    }
-
-    private void executeCookieAssertions(Element request)
-    {
-        List l = request.getChildren("assert-cookie");
-        int count = l.size();
-
-        for (int i = 0; i < count; i++)
-        {
-            Element assertion = (Element) l.get(i);
-
-            executeCookieAssertion(assertion);
-        }
-    }
-
-    private void executeCookieAssertion(Element assertion)
-    {
-        String name = assertion.getAttributeValue("name");
-        String value = assertion.getAttributeValue("value");
-
-        Cookie[] cookies = _response.getCookies();
-
-        for (int i = 0; i < cookies.length; i++)
-        {
-            if (!cookies[i].getName().equals(name))
-                continue;
-
-            if (cookies[i].getValue().equals(value))
-                return;
-
-            throw new AssertionFailedError(
-                buildTestName(name)
-                    + ": Response cookie '"
-                    + name
-                    + "': expected '"
-                    + value
-                    + "', but was '"
-                    + cookies[i].getValue()
-                    + "'.");
-        }
-
-        throw new AssertionFailedError(
-            buildTestName(name) + ": Could not find cookie named '" + name + "' in response.");
-    }
-
-    private String buildTestName(String name)
-    {
-        return "Request #" + _requestNumber + "/" + name;
-    }
-
-    private void executeOutputStreamAssertions(Element request) throws DocumentParseException
-    {
-        List l = request.getChildren("assert-output-stream");
-        int count = l.size();
-
-        for (int i = 0; i < count; i++)
-        {
-            Element assertion = (Element) l.get(i);
-
-            executeOutputStreamAssertion(assertion);
-        }
-
-    }
-
-    private void executeOutputStreamAssertion(Element element) throws DocumentParseException
-    {
-        String name = element.getAttributeValue("name");
-        String contentType = element.getAttributeValue("content-type");
-        String path = element.getAttributeValue("path");
-
-        String actualContentType = _response.getContentType();
-
-        if (!contentType.equals(actualContentType))
-            throw new AssertionFailedError(
-                buildTestName(name)
-                    + " content-type was '"
-                    + actualContentType
-                    + "', expected '"
-                    + contentType
-                    + "'.");
-
-        byte[] actualContent = _response.getResponseBytes();
-        byte[] expectedContent = getFileContent(path);
-
-        if (actualContent.length != expectedContent.length)
-            throw new AssertionFailedError(
-                buildTestName(name)
-                    + " actual length of "
-                    + actualContent.length
-                    + " bytes does not match expected length of "
-                    + expectedContent.length
-                    + " bytes.");
-
-        for (int i = 0; i < actualContent.length; i++)
-        {
-            if (actualContent[i] != expectedContent[i])
-                throw new AssertionFailedError(
-                    buildTestName(name) + " content mismatch at index + " + i + ".");
-
-        }
-    }
-
-    private byte[] getFileContent(String path)
-    {
-        try
-        {
-            InputStream in = new FileInputStream(path);
-            ByteArrayOutputStream out = new ByteArrayOutputStream();
-
-            byte[] buffer = new byte[1000];
-
-            while (true)
-            {
-                int length = in.read(buffer);
-                if (length < 0)
-                    break;
-
-                out.write(buffer, 0, length);
-            }
-
-            in.close();
-            out.close();
-
-            return out.toByteArray();
-        }
-        catch (FileNotFoundException ex)
-        {
-            throw new ApplicationRuntimeException("File '" + path + "' not found.", ex);
-        }
-        catch (IOException ex)
-        {
-            throw new ApplicationRuntimeException("Unable to read file '" + path + "'.", ex);
-        }
-    }
-
-}
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/TestMocks.java b/3.0.4/junit/src/org/apache/tapestry/junit/mock/TestMocks.java
deleted file mode 100644
index 998173c..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/TestMocks.java
+++ /dev/null
@@ -1,162 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.mock;
-
-import java.io.BufferedOutputStream;
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.PrintStream;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-import org.apache.tapestry.junit.TapestryTestCase;
-
-/**
- *  Test case for Mock Servlet API tests using the Simple application.
- *
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 2.2
- * 
- **/
-
-public class TestMocks extends TapestryTestCase
-{
-    public static final String LOGS_DIR = "logs";
-
-    public static final String SCRIPTS_DIR = "mock-scripts";
-
-    private PrintStream _savedOut;
-    private PrintStream _savedErr;
-
-    protected void runTest() throws Throwable
-    {
-        String path = SCRIPTS_DIR + "/" + getName();
-
-        MockTester tester = new MockTester(path);
-
-        tester.execute();
-    }
-
-    public static Test suite()
-    {
-        TestSuite suite = new TestSuite("Mock Unit Test Suite");
-
-        addScripts(suite);
-
-        // Handy place to perform one-time 
-        deleteDir(".private");
-
-        return suite;
-    }
-
-    private static void addScripts(TestSuite suite)
-    {
-        File scriptsDir = new File(SCRIPTS_DIR);
-
-        String[] names = scriptsDir.list();
-
-        for (int i = 0; i < names.length; i++)
-        {
-            String name = names[i];
-
-            if (name.endsWith(".xml"))
-            {
-                TestMocks test = new TestMocks();
-
-                test.setName(name);
-
-                suite.addTest(test);
-            }
-        }
-    }
-
-    private static void deleteDir(String path)
-    {
-        File file = new File(path);
-
-        if (!file.exists())
-            return;
-
-        deleteRecursive(file);
-    }
-
-    private static void deleteRecursive(File file)
-    {
-        if (file.isFile())
-        {
-            file.delete();
-            return;
-        }
-
-        String[] names = file.list();
-
-        for (int i = 0; i < names.length; i++)
-        {
-            File f = new File(file, names[i]);
-            deleteRecursive(f);
-        }
-
-        file.delete();
-    }
-
-    /**
-     * Ensures that the log directory exists, then redirects System.out
-     * and System.err to files within the log.
-     */
-    protected void setUp() throws Exception
-    {
-        File outDir = new File(LOGS_DIR);
-
-        if (!outDir.isDirectory())
-            outDir.mkdirs();
-
-        _savedOut = System.out;
-        _savedErr = System.err;
-
-        System.setOut(createPrintStream(outDir, "out"));
-        System.setErr(createPrintStream(outDir, "err"));
-    }
-
-    protected PrintStream createPrintStream(File directory, String extension) throws Exception
-    {
-        String name = getName() + "." + extension;
-
-        File file = new File(directory, name);
-
-        // Open and truncate file.
-
-        FileOutputStream fos = new FileOutputStream(file);
-
-        BufferedOutputStream bos = new BufferedOutputStream(fos);
-
-        return new PrintStream(bos, true);
-    }
-
-    /**
-     * Closes System.out and System.err, then restores them to their original values.
-     */
-    protected void tearDown() throws Exception
-    {
-        System.err.close();
-        System.setErr(_savedErr);
-
-        System.out.close();
-        System.setOut(_savedOut);
-
-    }
-}
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/AgeRange.java b/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/AgeRange.java
deleted file mode 100644
index d542512..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/AgeRange.java
+++ /dev/null
@@ -1,52 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.mock.app;
-
-import org.apache.commons.lang.enum.Enum;
-
-
-/**
- *  
- *
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 2.2
- * 
- **/
-
-public class AgeRange extends Enum
-{
-    
-    public static final AgeRange CHILD = new AgeRange("CHILD");
-    public static final AgeRange TEEN = new AgeRange("TEEN");
-    public static final AgeRange ADULT = new AgeRange("ADULT");
-    public static final AgeRange RETIREE = new AgeRange("RETIREE");
-    public static final AgeRange ELDERLY = new AgeRange("ELDERLY");
-
-    public static AgeRange[] getAllValues()
-    {
-        return new AgeRange[]
-        {
-            CHILD, TEEN, ADULT, RETIREE, ELDERLY
-        };
-    }
-
-    private AgeRange(String name)
-    {
-        super(name);
-    }
-
-}
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/AgeRangeStrings.properties b/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/AgeRangeStrings.properties
deleted file mode 100644
index 9e04f36..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/AgeRangeStrings.properties
+++ /dev/null
@@ -1,7 +0,0 @@
-# $Id$
-
-CHILD=Child (0 - 9)
-TEEN=Teen (10 - 17)
-ADULT=Adult (18 - 60)
-RETIREE=Retiree (61 - 75)
-ELDERLY=Elderly (76+)
\ No newline at end of file
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/Assets.html b/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/Assets.html
deleted file mode 100644
index fdf6335..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/Assets.html
+++ /dev/null
@@ -1,21 +0,0 @@
-<!-- $Id$ -->
-
-<span jwcid="$content$">
-<span jwcid="border">
-
-
-Some page.
-
-<a jwcid="home"><img jwcid="@Image" image="ognl:assets.home"/></a>
-
-<p>
-
-<a jwcid="back"><img jwcid="@Image" image="ognl:assets.back"/></a>
-
-
-<p>
-
-<a jwcid="switch@DirectLink" listener="ognl:listeners.selectFrench">Switch to French</a>
-
-</span>
-</span>
\ No newline at end of file
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/Assets.java b/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/Assets.java
deleted file mode 100644
index c6b0fb7..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/Assets.java
+++ /dev/null
@@ -1,44 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.mock.app;
-
-import java.util.Locale;
-
-import org.apache.tapestry.*;
-import org.apache.tapestry.html.BasePage;
-
-/**
- *  Provides functionality to switch the locale to French.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 3.0
- *
- **/
-
-public class Assets extends BasePage
-{
-    public void selectFrench(IRequestCycle cycle)
-    {
-        IEngine engine = cycle.getEngine();
-        
-        engine.setLocale(Locale.FRENCH);
-        
-        // Currently, when you change locale there is no way to
-        // reload the current page.
-        
-        cycle.activate("Home");
-    }
-}
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/Assets.page b/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/Assets.page
deleted file mode 100644
index 44e250d..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/Assets.page
+++ /dev/null
@@ -1,39 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<page-specification class="org.apache.tapestry.junit.mock.app.Assets">
-
-  <component id="border" type="lib:Border">
-  	<static-binding name="title">Assets</static-binding>
-  </component>
-
-  <component id="home" type="ServiceLink">
-  	<static-binding name="service">home</static-binding>
-  </component>
-  
-  <component id="back" type="PageLink">
-  	<static-binding name="page">Register</static-binding>
-  </component>
-  
-  <context-asset name="back" path="/images/back.png"/>
-  <private-asset name="home" resource-path="/org/apache/tapestry/junit/mock/app/home.png"/>
-
-</page-specification>	
\ No newline at end of file
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/ContextAssetTemplate.page b/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/ContextAssetTemplate.page
deleted file mode 100644
index 45d1a7d..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/ContextAssetTemplate.page
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<page-specification class="org.apache.tapestry.html.BasePage">
-
-  <component id="border" type="lib:Border">
-  	<static-binding name="title">Context Asset Template</static-binding>
-  </component>
-
-  <context-asset name="$template" path="/ContextAssetTemplate.html"/>
-  
-</page-specification>	
\ No newline at end of file
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/Guard.html b/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/Guard.html
deleted file mode 100644
index 666ae98..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/Guard.html
+++ /dev/null
@@ -1,12 +0,0 @@
-<!-- $Id$ -->
-
-<span jwcid="$content$">
-<span jwcid="border">
-
-Click <a jwcid="link">here</a> to continue set the visited flag and continue.
-
-<p>
-Callback: <span jwcid="insertCallback"/>
-
-</span>
-</span>
\ No newline at end of file
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/Guard.java b/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/Guard.java
deleted file mode 100644
index 58afe70..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/Guard.java
+++ /dev/null
@@ -1,77 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.mock.app;
-
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.callback.ICallback;
-import org.apache.tapestry.html.BasePage;
-
-/**
- *  Guard page for the Protected page.  Protected checks the "visited" property of this page and,
- *  if false, redirects to this page.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 2.3
- * 
- **/
-
-public class Guard extends BasePage
-{
-    private ICallback _callback;
-    private boolean _visited;
-    
-    public void detach()
-    {
-        _callback = null;
-        _visited = false;
-        
-        super.detach();
-    }
-    
-    public ICallback getCallback()
-    {
-        return _callback;
-    }
-
-    public boolean isVisited()
-    {
-        return _visited;
-    }
-
-    public void setCallback(ICallback callback)
-    {
-        _callback = callback;
-        fireObservedChange("callback", callback);
-    }
-
-    public void setVisited(boolean visited)
-    {
-        _visited = visited;
-        fireObservedChange("visited", visited);
-    }
-    
-    public void linkClicked(IRequestCycle cycle)
-    {
-        setVisited(true);
-        
-        ICallback callback = _callback;
-        
-        setCallback(null);
-        
-        callback.performCallback(cycle);
-    }
-
-}
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/Guard.page b/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/Guard.page
deleted file mode 100644
index 0652fe6..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/Guard.page
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<page-specification class="org.apache.tapestry.junit.mock.app.Guard">
-
-  <component id="border" type="lib:Border">
-  	<static-binding name="title">Guard</static-binding>
-  </component>
-  
-  <component id="link" type="DirectLink">
-  	<binding name="listener" expression="listeners.linkClicked"/>
-  </component>
-   
-  <component id="insertCallback" type="Insert">
-  	<binding name="value" expression="callback"/>
-  </component>
-   
-</page-specification>
\ No newline at end of file
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/Home.html b/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/Home.html
deleted file mode 100644
index b95a2c4..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/Home.html
+++ /dev/null
@@ -1,13 +0,0 @@
-<!-- $Id$ -->
-
-<span jwcid="$content$">
-<span jwcid="border">
-
-Home page content -- in English.
-
-<a jwcid="link"><span key="localized.blurb"/></a>
-
-<span jwcid="@Any" element="foo" bar="message:foo-bar"/>
-
-</span>
-</span>
\ No newline at end of file
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/Home.java b/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/Home.java
deleted file mode 100644
index 198f6bb..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/Home.java
+++ /dev/null
@@ -1,40 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.mock.app;
-
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.html.BasePage;
-import org.apache.tapestry.junit.mock.lib.Dumper;
-
-/**
- *  Part of the Mock application test suite.
- *
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *
- **/
-
-public class Home extends BasePage
-{
-    public void linkClicked(IRequestCycle cycle)
-    {
-        Dumper dumper = (Dumper)cycle.getPage("lib:Dumper");
-        
-        dumper.setObjects(cycle.getServiceParameters());
-        
-        cycle.activate(dumper);
-    }
-}
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/Home.page b/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/Home.page
deleted file mode 100644
index 3a0a161..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/Home.page
+++ /dev/null
@@ -1,33 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<page-specification class="org.apache.tapestry.junit.mock.app.Home">
-
-  <component id="border" type="lib:Border">
-  	<message-binding name="title" key="page.title"/>
-  </component>
-
-  <component id="link" type="DirectLink">
-    <binding name="listener" expression="listeners.linkClicked"/>
-  	<binding name="parameters" expression="{2, 3.5, &quot;Hello&quot; }"/>
-  </component>
-  
-</page-specification>	
\ No newline at end of file
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/Home.properties b/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/Home.properties
deleted file mode 100644
index 36dffa8..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/Home.properties
+++ /dev/null
@@ -1,6 +0,0 @@
-# $Id$
-
-page.title=Mock App Home Page
-
-localized.blurb=If it's not Scottish, it's crap!
-foo-bar=Totally Screwed!
\ No newline at end of file
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/Home_fr.html b/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/Home_fr.html
deleted file mode 100644
index 24c21ca..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/Home_fr.html
+++ /dev/null
@@ -1,13 +0,0 @@
-<!-- $Id$ -->
-
-<span jwcid="$content$">
-<span jwcid="border">
-
-Home page content -- in French!
-
-<a jwcid="link"><span  key="localized.blurb"/></a>
-
-<span jwcid="@Any" element="foo" bar="message:foo-bar"/>
-
-</span>
-</span>
\ No newline at end of file
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/Home_fr.properties b/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/Home_fr.properties
deleted file mode 100644
index c4c425a..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/Home_fr.properties
+++ /dev/null
@@ -1,4 +0,0 @@
-# $Id$
-
-localized.blurb=Zees ees nawt cheeze!
-foo-bar=Merde!
\ No newline at end of file
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/Mock.application b/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/Mock.application
deleted file mode 100644
index a60249b..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/Mock.application
+++ /dev/null
@@ -1,58 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-    Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE application PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<application name="JUnit Mock Application">
-	
-	<page name="Home" specification-path="Home.page"/>
-	<page name="ServiceTest" specification-path="ServiceTest.page"/>
-	<page name="Register" specification-path="Register.page"/>
-	<page name="RegisterConfirm" specification-path="RegisterConfirm.page"/>
-
-	<page name="Strings" specification-path="Strings.page"/>
-
-	<page name="Protected" specification-path="Protected.page"/>
-	<page name="Guard" specification-path="Guard.page"/>
-
-	<page name="ProtectedLink" specification-path="ProtectedLink.page"/>
-	<page name="ProtectedLinkResult" specification-path="ProtectedLinkResult.page"/>
-
-	<page name="Stale" specification-path="Stale.page"/>
-
-	<page name="ValidFieldNoBody" specification-path="ValidFieldNoBody.page"/>
-
-	<page name="TemplateExpr" specification-path="expr/TemplateExpr.page"/>
-	<page name="TemplateExprConflict" specification-path="expr/TemplateExprConflict.page"/>
-	<page name="TemplateExprInformal" specification-path="expr/TemplateExprInformal.page"/>
-	<page name="TemplateExprReserved" specification-path="expr/TemplateExprReserved.page"/>
-		
-	<page name="ImplicitComponents" specification-path="impl/ImplicitComponents.page"/>
-		
-	<page name="Assets" specification-path="Assets.page"/>
-					
-	<page name="PrivateAssetTemplate" specification-path="PrivateAssetTemplate.page"/>
-
-	<page name="ContextAssetTemplate" specification-path="ContextAssetTemplate.page"/>
-						
-	<page name="RelativeAssets" specification-path="RelativeAssets.page"/>						
-							
-	<library id="lib" specification-path="/org/apache/tapestry/junit/mock/lib/MockLibrary.library"/>
-	
-</application>	
\ No newline at end of file
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/PrivateAssetTemplate.page b/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/PrivateAssetTemplate.page
deleted file mode 100644
index 36f15d1..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/PrivateAssetTemplate.page
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<page-specification class="org.apache.tapestry.html.BasePage">
-
-  <component id="border" type="lib:Border">
-  	<static-binding name="title">Private Asset Template</static-binding>
-  </component>
-
-  <private-asset name="$template" resource-path="/pages/PrivateAssetTemplate.html"/>
-  
-</page-specification>	
\ No newline at end of file
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/Protected.html b/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/Protected.html
deleted file mode 100644
index 611e1c2..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/Protected.html
+++ /dev/null
@@ -1,9 +0,0 @@
-<!-- $Id$ -->
-
-<span jwcid="$content$">
-<span jwcid="border">
-
-This is a protected page.
-
-</span>
-</span>
\ No newline at end of file
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/Protected.java b/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/Protected.java
deleted file mode 100644
index 1754179..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/Protected.java
+++ /dev/null
@@ -1,50 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.mock.app;
-
-import org.apache.tapestry.PageRedirectException;
-import org.apache.tapestry.callback.ICallback;
-import org.apache.tapestry.callback.PageCallback;
-import org.apache.tapestry.event.PageEvent;
-import org.apache.tapestry.event.PageValidateListener;
-import org.apache.tapestry.html.BasePage;
-
-/**
- *  Part of Mock application.  Works with the {@link Guard} page to ensure
- *  that the Guard page has been visited before displaying.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 2.3
- * 
- **/
-
-public class Protected extends BasePage implements PageValidateListener
-{
-
-    public void pageValidate(PageEvent event)
-    {
-        Guard guard = (Guard) getRequestCycle().getPage("Guard");
-
-        if (!guard.isVisited())
-        {
-            ICallback callback = new PageCallback(this);
-            guard.setCallback(callback);
-
-            throw new PageRedirectException(guard);
-        }
-    }
-
-}
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/Protected.page b/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/Protected.page
deleted file mode 100644
index cc5561d..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/Protected.page
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<page-specification class="org.apache.tapestry.junit.mock.app.Protected">
-
-  <component id="border" type="lib:Border">
-  	<static-binding name="title">Protected</static-binding>
-  </component>
-   
-</page-specification>
\ No newline at end of file
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/ProtectedLink.html b/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/ProtectedLink.html
deleted file mode 100644
index 5dcce78..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/ProtectedLink.html
+++ /dev/null
@@ -1,9 +0,0 @@
-<!-- $Id$ -->
-
-<span jwcid="$content$">
-<span jwcid="border">
-
-This is a <a jwcid="link">protected link</a>.
-
-</span>
-</span>
\ No newline at end of file
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/ProtectedLink.java b/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/ProtectedLink.java
deleted file mode 100644
index fc21869..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/ProtectedLink.java
+++ /dev/null
@@ -1,54 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.mock.app;
-
-import org.apache.tapestry.IDirect;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.callback.DirectCallback;
-import org.apache.tapestry.callback.ICallback;
-import org.apache.tapestry.html.BasePage;
-
-/**
- *  Tests the ability to "protect" a link with a Guard page.  Tests
- *  the {@link org.apache.tapestry.callback.DirectCallback} class.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 2.3
- * 
- **/
-
-public class ProtectedLink extends BasePage
-{
-    public void linkClicked(IRequestCycle cycle)
-    {
-        Object[] parameters = cycle.getServiceParameters();
-        
-        Guard guard = (Guard)cycle.getPage("Guard");
-        
-        if (!guard.isVisited())
-        {
-            ICallback callback = new DirectCallback((IDirect)getComponent("link"), parameters);
-            guard.setCallback(callback);
-            cycle.activate(guard);
-            return;
-        }
-        
-        ProtectedLinkResult page = (ProtectedLinkResult)cycle.getPage("ProtectedLinkResult");
-        page.setParameters(parameters);
-        
-        cycle.activate(page);
-    }
-}
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/ProtectedLink.page b/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/ProtectedLink.page
deleted file mode 100644
index d7ad76e..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/ProtectedLink.page
+++ /dev/null
@@ -1,33 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<page-specification class="org.apache.tapestry.junit.mock.app.ProtectedLink">
-
-  <component id="border" type="lib:Border">
-  	<static-binding name="title">ProtectedLink</static-binding>
-  </component>
-  
-  <component id="link" type="DirectLink">
-  	<binding name="listener" expression="listeners.linkClicked"/>
-  	<binding name="parameters" expression="{ 6, 13, 1999}"/>
-  </component>
-   
-</page-specification>
\ No newline at end of file
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/ProtectedLinkResult.html b/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/ProtectedLinkResult.html
deleted file mode 100644
index 9aaefc6..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/ProtectedLinkResult.html
+++ /dev/null
@@ -1,12 +0,0 @@
-<!-- $Id$ -->
-
-<span jwcid="$content$">
-<span jwcid="border">
-
-Parameters:
-<ul>
-<li jwcid="foreach"><span jwcid="insertParameter">Parameter</span></li>
-</ul>
-
-</span>
-</span>
\ No newline at end of file
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/ProtectedLinkResult.java b/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/ProtectedLinkResult.java
deleted file mode 100644
index d7f4e02..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/ProtectedLinkResult.java
+++ /dev/null
@@ -1,50 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.mock.app;
-
-import org.apache.tapestry.html.BasePage;
-
-/**
- *  Displays the results passed as a parameter to {@link org.apache.tapestry.junit.mock.app.ProtectedLink} 
- *  page.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 2.3
- * 
- **/
-
-public class ProtectedLinkResult extends BasePage
-{
-    private Object[] _parameters;
-    
-    public void detach()
-    {
-        _parameters = null;
-        
-        super.detach();
-    }
-    
-    
-    public Object[] getParameters()
-    {
-        return _parameters;
-    }
-
-    public void setParameters(Object[] parameters)
-    {
-        _parameters = parameters;
-    }
-}
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/ProtectedLinkResult.page b/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/ProtectedLinkResult.page
deleted file mode 100644
index cddd7c4..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/ProtectedLinkResult.page
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<page-specification class="org.apache.tapestry.junit.mock.app.ProtectedLinkResult">
-
-  <component id="border" type="lib:Border">
-  	<static-binding name="title">ProtectedLink: Result</static-binding>
-  </component>
-  
-  <component id="foreach" type="Foreach">
-  	<binding name="source" expression="parameters"/>
-  	<static-binding name="element">li</static-binding>	
-  </component>
-  
-  <component id="insertParameter" type="Insert">
-  	<binding name="value" expression="components.foreach.value"/>
-  </component>
-   
-</page-specification>
\ No newline at end of file
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/Register.html b/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/Register.html
deleted file mode 100644
index 3ea8053..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/Register.html
+++ /dev/null
@@ -1,41 +0,0 @@
-<!-- $Id$ -->
-
-<span jwcid="$content$">
-<span jwcid="border">
-<span jwcid="showError"/>
-
-<form jwcid="form">
-
-<table>
-	<tr>
-		<th><span jwcid="labelFirstName">First Name</span>:</th>
-		<td><input jwcid="inputFirstName" maxlength="100" size="40"/></td>
-	</tr>
-	<tr>
-		<th><span jwcid="labelLastName">Last Name</span>:</th>
-		<td><span jwcid="inputLastName" maxlength="100" size="40"/></td>
-	</tr>
-	
-	<tr>
-		<th>Sex:</th>
-		<td><span jwcid="inputSex">
-		
-		<input jwcid="inputMale"/> Male <br>
-		<input jwcid="inputFemale"/> Female		
-		</span>
-		</td>
-	
-	<tr>
-		<th>Age:</th>
-		<td><select jwcid="inputAgeRange"/></td>
-	</tr>
-	
-	<tr>
-		<td></td>
-		<td><input type="submit" value="Register"/></td>
-	</tr>
-</table>
-
-</form>
-</span>
-</span>
\ No newline at end of file
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/Register.java b/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/Register.java
deleted file mode 100644
index 6b11dab..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/Register.java
+++ /dev/null
@@ -1,65 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.mock.app;
-
-import java.util.ResourceBundle;
-
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.form.EnumPropertySelectionModel;
-import org.apache.tapestry.form.IPropertySelectionModel;
-import org.apache.tapestry.html.BasePage;
-import org.apache.tapestry.valid.IValidationDelegate;
-
-/**
- *
- *  Page used to demonstate basic forms.  
- *
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 2.2
- * 
- **/
-
-public class Register extends BasePage
-{
-    private IPropertySelectionModel _ageRangeModel;
-
-    public IPropertySelectionModel getAgeRangeModel()
-    {
-        if (_ageRangeModel == null)
-            _ageRangeModel =
-                new EnumPropertySelectionModel(
-                    AgeRange.getAllValues(),
-                    ResourceBundle.getBundle("org.apache.tapestry.junit.mock.app.AgeRangeStrings", getLocale()));
-
-        return _ageRangeModel;
-    }
-
-    public void formSubmit(IRequestCycle cycle)
-    {
-        IValidationDelegate delegate = (IValidationDelegate)getBeans().getBean("delegate");
-        
-        if (delegate.getHasErrors())
-            return;
-            
-        User user = (User)getBeans().getBean("user");
-        
-        RegisterConfirm page = (RegisterConfirm)cycle.getPage("RegisterConfirm");
-        
-        page.setUser(user);
-        cycle.activate(page);
-    }
-}
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/Register.page b/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/Register.page
deleted file mode 100644
index f02e3be..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/Register.page
+++ /dev/null
@@ -1,86 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<page-specification class="org.apache.tapestry.junit.mock.app.Register">
-
-  <bean name="delegate" class="org.apache.tapestry.valid.ValidationDelegate"/>
-
-  <bean name="requiredString" 
-  	class="org.apache.tapestry.valid.StringValidator" 
-  	lifecycle="page">
-    <set-property name="minimumLength" expression="3"/>
-    <set-property name="required" expression="true"/>
-    <set-property name="clientScriptingEnabled" expression="true"/>
-  </bean>
-  
-  <bean name="user" class="org.apache.tapestry.junit.mock.app.User"/>
-
-  <component id="border" type="lib:Border">
-  	<static-binding name="title">Register</static-binding>
-  </component>
-  
-  <component id="showError" type="lib:ShowError">
-  	<binding name="delegate" expression="beans.delegate"/>
-  </component>
-  
-  <component id="form" type="Form">
-  	<binding name="listener" expression="listeners.formSubmit"/>
-  	<binding name="delegate" expression="beans.delegate"/>
-  </component>
-  
-  <component id="labelFirstName" type="FieldLabel">
-  	<binding name="field" expression="components.inputFirstName"/>
-  </component>
-  
-  <component id="inputFirstName" type="ValidField">
-  	<binding name="value" expression="beans.user.firstName"/>
-  	<binding name="validator" expression="beans.requiredString"/>
-  	<static-binding name="displayName">First Name</static-binding>
-  </component>
-  
-  <component id="labelLastName" type="FieldLabel">
-  	<binding name="field" expression="components.inputLastName"/>
-  </component>
-  
-  <component id="inputLastName" type="ValidField">
-  	<binding name="value" expression="beans.user.lastName"/>
-  	<binding name="validator" expression="beans.requiredString"/>
-  	<static-binding name="displayName">Last Name</static-binding>
-  </component>  
-  
-  <component id="inputSex" type="RadioGroup">
-  	<binding name="selected" expression="beans.user.male"/>
-  </component>
-  
-  <component id="inputMale" type="Radio">
-  	<binding name="value" expression="true"/>
-  </component>
-  
-  <component id="inputFemale" type="Radio">
-  	<binding name="value" expression="false"/>
-  </component>
-  
-  <component id="inputAgeRange" type="PropertySelection">
-  	 <binding name="value" expression="beans.user.ageRange"/>
-  	 <binding name="model" expression="ageRangeModel"/>
-  </component>
-  
-</page-specification>
\ No newline at end of file
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/RegisterConfirm.html b/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/RegisterConfirm.html
deleted file mode 100644
index 89030e8..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/RegisterConfirm.html
+++ /dev/null
@@ -1,28 +0,0 @@
-<!-- $Id$ -->
-
-<span jwcid="$content$">
-<span jwcid="border">
-
-<table>
-	<tr>
-		<th>First Name:</th>
-		<td><span jwcid="insertFirstName">First Name</span></td>
-	</tr>
-	<tr>
-		<th>Last Name:</th>
-		<td><span jwcid="insertLastName">Last Name</span></td>
-	</tr>
-	
-	<tr>
-		<th>Sex:</th>
-		<td><span jwcid="insertSex">Male</span></td>
-	
-	<tr>
-		<th>Age:</th>
-		<td><span jwcid="insertAge">Adult</span></td>
-	</tr>
-
-</table>
-
-</span>
-</span>
\ No newline at end of file
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/RegisterConfirm.java b/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/RegisterConfirm.java
deleted file mode 100644
index f7afa48..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/RegisterConfirm.java
+++ /dev/null
@@ -1,62 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.mock.app;
-
-import java.util.ResourceBundle;
-
-import org.apache.tapestry.html.BasePage;
-
-/**
- *  Part of Mock application, displays the data input on the Register page.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 2.3
- * 
- **/
-
-public class RegisterConfirm extends BasePage
-{
-    private ResourceBundle _ageRangeStrings;
-
-    private User _user;
-
-    public void detach()
-    {
-        _user = null;
-
-        super.detach();
-    }
-
-    public User getUser()
-    {
-        return _user;
-    }
-
-    public void setUser(User user)
-    {
-        _user = user;
-    }
-
-    public String getFormattedAge()
-    {
-        if (_ageRangeStrings == null)
-            _ageRangeStrings = ResourceBundle.getBundle("org.apache.tapestry.junit.mock.app.AgeRangeStrings", getLocale());
-
-        String key = _user.getAgeRange().getName();
-
-        return _ageRangeStrings.getString(key);
-    }
-}
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/RegisterConfirm.page b/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/RegisterConfirm.page
deleted file mode 100644
index 1263637..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/RegisterConfirm.page
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<page-specification class="org.apache.tapestry.junit.mock.app.RegisterConfirm">
-
-
-  <component id="border" type="lib:Border">
-  	<static-binding name="title">Registration Confirmation</static-binding>
-  </component>
-  
-  <component id="insertFirstName" type="Insert">
-  	<binding name="value" expression="user.firstName"/>
-  </component>
-  
-  <component id="insertLastName" type="Insert">
-  	<binding name="value" expression="user.lastName"/>
-  </component>
-  
-  <component id="insertSex" type="Insert">
-  	<binding name="value" expression="user.male ? &quot;Male&quot; : &quot;Female&quot;"/>
-  </component>
-  
-  <component id="insertAge" type="Insert">
-  	<binding name="value" expression="formattedAge"/>
-  </component>
-    
-</page-specification>
\ No newline at end of file
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/RelativeAssets.html b/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/RelativeAssets.html
deleted file mode 100644
index ce95e34..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/RelativeAssets.html
+++ /dev/null
@@ -1,15 +0,0 @@
-<!-- $Id$ -->
-
-<span jwcid="$content$">
-<span jwcid="@lib:Border" title="Relative Assets">
-
-Some page.
-
-<img jwcid="@Image" image="ognl:assets.private"/>
-
-<p>
-
-<img jwcid="@Image" image="ognl:assets.context"/>
-
-</span>
-</span>
\ No newline at end of file
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/RelativeAssets.page b/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/RelativeAssets.page
deleted file mode 100644
index 3ec9e3b..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/RelativeAssets.page
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<page-specification class="org.apache.tapestry.html.BasePage">
-
-  <private-asset name="private" resource-path="images/PrivateAsset.gif"/>
-  <context-asset name="context" path="images/ContextAsset.gif"/>
-    
-</page-specification>
\ No newline at end of file
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/ServiceTest.html b/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/ServiceTest.html
deleted file mode 100644
index 492bfca..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/ServiceTest.html
+++ /dev/null
@@ -1,9 +0,0 @@
-<!-- $Id$ -->
-
-<span jwcid="$content$">
-<span jwcid="border">
-
-<a jwcid="link">service</a>
-
-</span>
-</span>
\ No newline at end of file
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/ServiceTest.java b/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/ServiceTest.java
deleted file mode 100644
index eedf725..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/ServiceTest.java
+++ /dev/null
@@ -1,38 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.mock.app;
-
-import org.apache.tapestry.IExternalPage;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.html.BasePage;
-import org.apache.tapestry.junit.mock.lib.Dumper;
-
-public class ServiceTest extends BasePage implements IExternalPage
-{
-    public Object[] getServiceParameters()
-    {
-        return new Object[] { "Sopranos", new Integer(20705), new Double(22./ 7.)};
-    }
-
-    public void activateExternalPage(Object[] parameters, IRequestCycle cycle)
-    {
-        Dumper dumper = (Dumper) cycle.getPage("lib:Dumper");
-
-        dumper.setObjects(parameters);
-
-        cycle.activate(dumper);
-    }
-
-}
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/ServiceTest.page b/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/ServiceTest.page
deleted file mode 100644
index 5b4a1f3..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/ServiceTest.page
+++ /dev/null
@@ -1,33 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<page-specification class="org.apache.tapestry.junit.mock.app.ServiceTest">
-
-  <component id="border" type="lib:Border">
-  	<static-binding name="title">ServiceTest Page</static-binding>
-  </component>
-
-  <component id="link" type="ExternalLink">
-    <static-binding name="page">ServiceTest</static-binding>
-  	<binding name="parameters" expression="serviceParameters"/>
-  </component>
-  
-</page-specification>	
\ No newline at end of file
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/Stale.html b/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/Stale.html
deleted file mode 100644
index 2469760..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/Stale.html
+++ /dev/null
@@ -1,20 +0,0 @@
-<!-- $Id$ -->
-
-<span jwcid="$content$">
-<span jwcid="border">
-
-<p>
-A <a jwcid="directLink">DirectLink</a> that will trigger StaleSessionException.
-
-<p>
-A <a jwcid="actionLink">ActionLink</a> that will trigger StaleSessionException.
-
-<p>
-A
-<form jwcid="form">
-<input type="submit" value="Form"/>
-</form>
-that will trigger a StaleSessionException.
-
-</span>
-</span>
\ No newline at end of file
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/Stale.java b/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/Stale.java
deleted file mode 100644
index c2c6e84..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/Stale.java
+++ /dev/null
@@ -1,38 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.mock.app;
-
-import org.apache.tapestry.ApplicationRuntimeException;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.html.BasePage;
-
-/**
- *  Used to test {@link org.apache.tapestry.StaleSessionException}.
- * 
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 2.3
- * 
- **/
-
-public class Stale extends BasePage
-{
-    public void noop(IRequestCycle cycle)
-    {
-        throw new ApplicationRuntimeException("noop listener should not be reachable.");
-    }
-
-}
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/Stale.page b/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/Stale.page
deleted file mode 100644
index 4988d5b..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/Stale.page
+++ /dev/null
@@ -1,40 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<page-specification class="org.apache.tapestry.junit.mock.app.Stale">
-
-  <component id="border" type="lib:Border">
-  	<static-binding name="title">StaleSession Test Page</static-binding>
-  </component>
-
-  <component id="directLink" type="DirectLink">
-  	<binding name="listener" expression="listeners.noop"/>
-  </component>
-  
-  <component id="actionLink" type="ActionLink">
-  	<binding name="listener" expression="listeners.noop"/>
-  </component>
-  
-  <component id="form" type="Form">
-  	<binding name="listener" expression="listeners.noop"/>
-  </component>
-  
-</page-specification>	
\ No newline at end of file
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/Strings.html b/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/Strings.html
deleted file mode 100644
index 97fc8dc..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/Strings.html
+++ /dev/null
@@ -1,17 +0,0 @@
-<!-- $Id$ -->
-
-<span jwcid="$content$">
-<span jwcid="border">
-
-Normal: <span key="message"/>
-
-<p>
-
-Raw: <span key="message" raw="true"/>
-
-<p>
-
-Style: <span key="message" raw="true" class="custom"/>
-
-</span>
-</span>
\ No newline at end of file
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/Strings.page b/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/Strings.page
deleted file mode 100644
index d665bcd..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/Strings.page
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-    Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<page-specification>
-
-  <component id="border" type="lib:Border">
-  	<static-binding name="title">Insert Localized Key Test Page</static-binding>
-  </component>
-
-</page-specification>	
\ No newline at end of file
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/Strings.properties b/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/Strings.properties
deleted file mode 100644
index b275b1d..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/Strings.properties
+++ /dev/null
@@ -1,3 +0,0 @@
-# $Id$
-
-message=<b>Important Message</b>
\ No newline at end of file
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/User.java b/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/User.java
deleted file mode 100644
index c3414a8..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/User.java
+++ /dev/null
@@ -1,74 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.mock.app;
-
-/**
- *  Contains information about a user.
- *
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 2.2
- * 
- **/
-
-public class User
-{
-    private String _firstName;
-    private String _lastName;
-    private boolean _male = true;
-    private AgeRange _ageRange = AgeRange.ADULT;
-    
-    public AgeRange getAgeRange()
-    {
-        return _ageRange;
-    }
-
-    public String getFirstName()
-    {
-        return _firstName;
-    }
-
-    public String getLastName()
-    {
-        return _lastName;
-    }
-
-    public boolean isMale()
-    {
-        return _male;
-    }
-
-    public void setAgeRange(AgeRange ageRange)
-    {
-        _ageRange = ageRange;
-    }
-
-    public void setFirstName(String firstName)
-    {
-        _firstName = firstName;
-    }
-
-    public void setLastName(String lastName)
-    {
-        _lastName = lastName;
-    }
-
-    public void setMale(boolean male)
-    {
-        _male = male;
-    }
-
-}
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/ValidFieldNoBody.html b/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/ValidFieldNoBody.html
deleted file mode 100644
index 65f5752..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/ValidFieldNoBody.html
+++ /dev/null
@@ -1,17 +0,0 @@
-<!-- $Id$ -->
-
-<span jwcid="Shell">
-
-<body>
-
-<form jwcid="form">
-
-<input jwcid="inputNumber"/>
-
-<input type="submit"/>
-
-</form>
-
-</body>
-
-</span>
\ No newline at end of file
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/ValidFieldNoBody.java b/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/ValidFieldNoBody.java
deleted file mode 100644
index 630748b..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/ValidFieldNoBody.java
+++ /dev/null
@@ -1,47 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.mock.app;
-
-import org.apache.tapestry.html.BasePage;
-
-/**
- *  Page for testing a validator, with client side validation, but no Body.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 2.3
- * 
- **/
-
-public class ValidFieldNoBody extends BasePage
-{
-    private int _intValue;        
-    
-    protected void initialize()
-    {
-        _intValue = 10;
-    }
-        
-    public int getIntValue()
-    {
-        return _intValue;
-    }
-
-    public void setIntValue(int intValue)
-    {
-        _intValue = intValue;
-    }
-
-}
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/ValidFieldNoBody.page b/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/ValidFieldNoBody.page
deleted file mode 100644
index 287652d..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/ValidFieldNoBody.page
+++ /dev/null
@@ -1,49 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<page-specification class="org.apache.tapestry.junit.mock.app.ValidFieldNoBody">
-
-  <bean name="delegate" class="org.apache.tapestry.valid.ValidationDelegate"/>
-
-  <bean name="intValidator" lifecycle="render" class="org.apache.tapestry.valid.NumberValidator">
-  	<set-property name="required" expression="true"/>
-  	<set-property name="clientScriptingEnabled" expression="true"/>
-  </bean>
-  
-  <component id="Shell" type="Shell">
-  	<static-binding name="title">ValidField w/o Body Test Page</static-binding>
-  </component>
-
-  <component id="form" type="Form">
-  	<binding name="delegate" expression="beans.delegate"/>
-  </component>
-  
-
-  <component id="inputNumber" type="ValidField">
-    <binding name="validator" expression="beans.intValidator"/>
-    <binding name="value" expression="intValue"/>
-    <static-binding name="displayName">Integer Field</static-binding>
-    <static-binding name="type">Integer</static-binding>
-  </component>  
-  
-  
-
-</page-specification>	
\ No newline at end of file
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/expr/TemplateExpr.html b/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/expr/TemplateExpr.html
deleted file mode 100644
index 30b3d3d..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/expr/TemplateExpr.html
+++ /dev/null
@@ -1,13 +0,0 @@
-<!-- $Id$ -->
-
-<span jwcid="$content$">
-<span jwcid="border">
-
-Application Name: <span jwcid="insertApplicationName" value="ognl:engine.specification.name"/>
-
-<p>
-
-Second example: <span jwcid="insertAppName2" class="ognl:&quot;styleClass&quot;" value="ognl:engine.specification.name"/>
-
-</span>
-</span>
\ No newline at end of file
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/expr/TemplateExpr.page b/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/expr/TemplateExpr.page
deleted file mode 100644
index 9a23bf4..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/expr/TemplateExpr.page
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<page-specification class="org.apache.tapestry.html.BasePage">
-
-  <component id="border" type="lib:Border">
-  	<static-binding name="title">TemplateExpr</static-binding>
-  </component>
-  
-  <component id="insertApplicationName" type="Insert"/>
-   
-  <component id="insertAppName2" type="Insert"/>
-   
-</page-specification>
\ No newline at end of file
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/expr/TemplateExprConflict.html b/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/expr/TemplateExprConflict.html
deleted file mode 100644
index 135f8d8..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/expr/TemplateExprConflict.html
+++ /dev/null
@@ -1,9 +0,0 @@
-<!-- $Id$ -->
-
-<span jwcid="$content$">
-<span jwcid="border">
-
-Application Name: <span jwcid="insertApplicationName" value="ognl:engine.specification.name"/>
-
-</span>
-</span>
\ No newline at end of file
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/expr/TemplateExprConflict.page b/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/expr/TemplateExprConflict.page
deleted file mode 100644
index d5de1eb..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/expr/TemplateExprConflict.page
+++ /dev/null
@@ -1,33 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-    Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-  
-<page-specification>
-
-  <component id="border" type="lib:Border">
-  	<static-binding name="title">TemplateExprConflict</static-binding>
-  </component>
-  
-  <component id="insertApplicationName" type="Insert">
-  	<!-- Conflict: specified here and as an expression in the template -->
-  	<static-binding name="value">Application Title</static-binding>
-  </component>
-   
-</page-specification>
\ No newline at end of file
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/expr/TemplateExprInformal.html b/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/expr/TemplateExprInformal.html
deleted file mode 100644
index 498ceb8..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/expr/TemplateExprInformal.html
+++ /dev/null
@@ -1,11 +0,0 @@
-<!-- $Id$ -->
-
-<span jwcid="$content$">
-<span jwcid="border">
-
-<span jwcid="block" informal="ognl:engine.visit != null">
-This will never be displayed.
-</span>
-
-</span>
-</span>
\ No newline at end of file
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/expr/TemplateExprInformal.page b/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/expr/TemplateExprInformal.page
deleted file mode 100644
index d60cdd5..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/expr/TemplateExprInformal.page
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-    Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<page-specification>
-
-  <component id="border" type="lib:Border">
-  	<static-binding name="title">TemplateExprInformal</static-binding>
-  </component>
-  
-   <component id="block" type="Block"/>
-   
-</page-specification>
\ No newline at end of file
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/expr/TemplateExprReserved.html b/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/expr/TemplateExprReserved.html
deleted file mode 100644
index fc830f8..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/expr/TemplateExprReserved.html
+++ /dev/null
@@ -1,9 +0,0 @@
-<!-- $Id$ -->
-
-<span jwcid="$content$">
-<span jwcid="border">
-
-<a jwcid="link" href="ognl:computedURL">Link</a>
-
-</span>
-</span>
\ No newline at end of file
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/expr/TemplateExprReserved.page b/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/expr/TemplateExprReserved.page
deleted file mode 100644
index aaa90dc..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/expr/TemplateExprReserved.page
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-    Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-  
-<page-specification>
-
-  <component id="border" type="lib:Border">
-  	<static-binding name="title">TemplateExprReserved</static-binding>
-  </component>
-  
-   <component id="link" type="PageLink">
-	 <static-binding name="page">Home</static-binding>
-   </component>
-   
-</page-specification>
\ No newline at end of file
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/home.png b/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/home.png
deleted file mode 100644
index dbedc8e..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/home.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/home_fr.png b/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/home_fr.png
deleted file mode 100644
index 8cfd14c..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/home_fr.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/images/PrivateAsset.gif b/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/images/PrivateAsset.gif
deleted file mode 100644
index 01fe4e2..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/images/PrivateAsset.gif
+++ /dev/null
Binary files differ
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/impl/ImplicitComponents.html b/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/impl/ImplicitComponents.html
deleted file mode 100644
index 578d7d9..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/impl/ImplicitComponents.html
+++ /dev/null
@@ -1,17 +0,0 @@
-<!-- $Id$ -->
-
-<span jwcid="$content$">
-<span jwcid="@lib:Border" title="Implicit Components">
-
-Application Name: <span jwcid="@Insert" value="ognl:engine.specification.name"/>
-
-<ul>
-<li jwcid="loop@Foreach"
-	source="ognl:{ &quot;Alpha&quot;, &quot;Beta&quot;, &quot;Gamma&quot; }"
-	element="li">
-	<span jwcid="@Insert" value="ognl:components.loop.value"/>
-</li>
-</ul>
-
-</span>
-</span>
\ No newline at end of file
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/impl/ImplicitComponents.page b/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/impl/ImplicitComponents.page
deleted file mode 100644
index 731ddff..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/app/impl/ImplicitComponents.page
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<page-specification/>
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/c10/Home.java b/3.0.4/junit/src/org/apache/tapestry/junit/mock/c10/Home.java
deleted file mode 100644
index 7d335c5..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/c10/Home.java
+++ /dev/null
@@ -1,34 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.mock.c10;
-
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.html.BasePage;
-
-/**
- *  Provides an empty listener method; the tests it is used in are checking how
- *  links render.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 3.0
- **/
-
-public class Home extends BasePage
-{
-	public void link(IRequestCycle cycle)
-	{
-	}
-}
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/c10/ThreeFour.java b/3.0.4/junit/src/org/apache/tapestry/junit/mock/c10/ThreeFour.java
deleted file mode 100644
index b30b7a2..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/c10/ThreeFour.java
+++ /dev/null
@@ -1,60 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.mock.c10;
-
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRender;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.components.ILinkComponent;
-import org.apache.tapestry.components.LinkEventType;
-
-/**
- *  Used on a page to test links and Body. 
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 3.0
- **/
-
-public class ThreeFour extends Home
-{
-
-	private class LinkContentRender implements IRender
-	{
-	
-        public void render(IMarkupWriter writer, IRequestCycle cycle)
-        {
-        	renderLinkContent(writer, cycle);
-        }
-
-	}
-
-	private void renderLinkContent(IMarkupWriter writer, IRequestCycle cycle)
-	{
-		ILinkComponent link = (ILinkComponent)getComponent("link");
-		
-		// These don't exist, but that's ok, we're testing the link's sensitivity
-		// to be inside a Body
-		
-		link.addEventHandler(LinkEventType.CLICK, "eventHandler1");
-		link.addEventHandler(LinkEventType.CLICK, "eventHandler2");
-		link.addEventHandler(LinkEventType.CLICK, "eventHandler3");
-	}
-
-	public IRender getLinkContentRender()
-	{
-		return new LinkContentRender();
-	}
-}
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/c10/Two.java b/3.0.4/junit/src/org/apache/tapestry/junit/mock/c10/Two.java
deleted file mode 100644
index c310a91..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/c10/Two.java
+++ /dev/null
@@ -1,30 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.mock.c10;
-
-/**
- *  Another placeholder class; page Two tests the check that ensures
- *  that links are not nested.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 3.0
- * 
- **/
-
-public class Two extends Home
-{
-
-}
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/c11/Four.java b/3.0.4/junit/src/org/apache/tapestry/junit/mock/c11/Four.java
deleted file mode 100644
index 35ebe70..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/c11/Four.java
+++ /dev/null
@@ -1,29 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.mock.c11;
-
-import org.apache.tapestry.IRequestCycle;
-
-public class Four extends SelectPage
-{
-	public void secondFormListener(IRequestCycle cycle)
-	{
-		Result result = (Result)cycle.getPage("Result");
-		
-		result.setMessage("Second form triggered.");
-		
-		cycle.activate(result);
-	}
-}
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/c11/PersistentSelectPage.java b/3.0.4/junit/src/org/apache/tapestry/junit/mock/c11/PersistentSelectPage.java
deleted file mode 100644
index 180d0d5..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/c11/PersistentSelectPage.java
+++ /dev/null
@@ -1,53 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.mock.c11;
-
-
-/**
- *  Makes the three properties persistent.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 3.0
- **/
-
-public class PersistentSelectPage extends SelectPage
-{
-    public void setAnimal(boolean animal)
-    {
-    	super.setAnimal(animal);
-    	
-        fireObservedChange("animal", animal);
-    }
-
-
-    public void setMineral(boolean mineral)
-    {
-    	super.setMineral(mineral);
-    	
-    	fireObservedChange("mineral", mineral);
-    }
-
-
-    public void setVegetable(boolean vegetable)
-    {
-      	super.setVegetable(vegetable);
-      	
-      	fireObservedChange("vegetable", vegetable);
-    }
-
-
-
-}
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/c11/Result.java b/3.0.4/junit/src/org/apache/tapestry/junit/mock/c11/Result.java
deleted file mode 100644
index f2cef78..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/c11/Result.java
+++ /dev/null
@@ -1,33 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.mock.c11;
-
-import org.apache.tapestry.html.BasePage;
-
-/**
- *  Displays a message summarizing the results identified by the page.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 3.0
- * 
- **/
-
-public abstract class Result extends BasePage
-{
-	public abstract String getMessage();
-	
-	public abstract void setMessage(String message);
-}
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/c11/SelectPage.java b/3.0.4/junit/src/org/apache/tapestry/junit/mock/c11/SelectPage.java
deleted file mode 100644
index 508ae6f..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/c11/SelectPage.java
+++ /dev/null
@@ -1,115 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.mock.c11;
-
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.html.BasePage;
-
-/**
- *  Used to test the Select and Option elements.
- * 
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 3.0
- **/
-
-public class SelectPage extends BasePage
-{
-	private boolean _animal;
-	private boolean _mineral;
-	private boolean _vegetable;
-	
-	public void initialize()
-	{
-		_animal = false;
-		_mineral = false;
-		_vegetable = false;
-	}
-	
-    public boolean isAnimal()
-    {
-        return _animal;
-    }
-
-    public boolean isMineral()
-    {
-        return _mineral;
-    }
-
-    public boolean isVegetable()
-    {
-        return _vegetable;
-    }
-
-    public void setAnimal(boolean animal)
-    {
-        _animal = animal;
-    }
-
-    public void setMineral(boolean mineral)
-    {
-        _mineral = mineral;
-    }
-
-    public void setVegetable(boolean vegetable)
-    {
-        _vegetable = vegetable;
-    }
-
-	public void formSubmit(IRequestCycle cycle)
-	{
-		StringBuffer buffer = new StringBuffer("Selections: ");
-		boolean needComma = false;
-		
-		if (_animal)
-		{
-			buffer.append("animal");
-			needComma = true;
-		}
-		
-		if (_vegetable)
-		{
-			if (needComma)
-			buffer.append(", ");
-			
-			buffer.append("vegetable");
-			
-			needComma = true;
-		}
-		
-		if (_mineral)
-		{
-			if (needComma) buffer.append(", ");
-			
-			buffer.append("mineral");
-			
-			needComma = true;
-		}
-			
-			if (!needComma)
-			buffer.append("none");
-			
-		buffer.append(".");
-		
-		Result result = (Result)cycle.getPage("Result");
-		
-		String message = buffer.toString();
-		
-		result.setMessage(message);
-		
-		cycle.activate(result);
-	}
-}
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/c12/InsertFinal.java b/3.0.4/junit/src/org/apache/tapestry/junit/mock/c12/InsertFinal.java
deleted file mode 100644
index 4b57981..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/c12/InsertFinal.java
+++ /dev/null
@@ -1,40 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.mock.c12;
-
-import org.apache.tapestry.AbstractComponent;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-
-/**
- *  Used to verify that the enhancer does not enhance custom
- *  parameter binding properties, unless they are abstract. This
- *  class is final so it is not possible to extend/enhance - as
- *  long as the component works, the class can not have been 
- *  enhanced.
- *
- *  @author Richard Lewis-Shell
- *  @version $Id$
- *
- **/
-
-public final class InsertFinal extends AbstractComponent
-{
-	protected void renderComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-    	writer.print(getBinding("final").getString());
-    }
-
-}
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/c12/InsertInteger.java b/3.0.4/junit/src/org/apache/tapestry/junit/mock/c12/InsertInteger.java
deleted file mode 100644
index b3f2d1e..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/c12/InsertInteger.java
+++ /dev/null
@@ -1,40 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.mock.c12;
-
-import org.apache.tapestry.AbstractComponent;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-
-/**
- *  Used to verify that the enhancer creates a property 
- *  with the correct name (not necessarily the parameter
- *  name).
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *
- **/
-
-public abstract class InsertInteger extends AbstractComponent
-{
-	public abstract int getIntValue();
-	
-    protected void renderComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-    	writer.print(getIntValue());
-    }
-
-}
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/c12/InsertString.java b/3.0.4/junit/src/org/apache/tapestry/junit/mock/c12/InsertString.java
deleted file mode 100644
index bc32835..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/c12/InsertString.java
+++ /dev/null
@@ -1,39 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.mock.c12;
-
-import org.apache.tapestry.AbstractComponent;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IRequestCycle;
-
-/**
- *  A simplified version of the Insert component that requires a parameter
- *  named string of type String.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *
- **/
-
-public abstract class InsertString extends AbstractComponent
-{
-	public abstract String getString();
-
-    protected void renderComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-    	writer.print(getString());
-    }
-
-}
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/c13/Home.java b/3.0.4/junit/src/org/apache/tapestry/junit/mock/c13/Home.java
deleted file mode 100644
index c4895b1..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/c13/Home.java
+++ /dev/null
@@ -1,79 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.mock.c13;
-
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.RedirectException;
-import org.apache.tapestry.html.BasePage;
-
-/**
- *  Page used to test internal and external redirects.  
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 3.0
- *
- **/
-
-public class Home extends BasePage
-{
-	public void internalRedirect(IRequestCycle cycle)
-	{
-		throw new RedirectException("static/Warning.html");
-	}
-	
-	public void externalRedirect(IRequestCycle cycle)
-	{
-		throw new RedirectException("http://jakarta.apache.org/tapestry");
-	}
-	
-	public void nullRedirect(IRequestCycle cycle)
-	{
-		// Special value, stands in for any resource that can't be found
-		// resulting in the ServletContext returning null for the
-		// dispatcher.
-		
-		throw new RedirectException("NULL");
-	}
-
-	public void servletException(IRequestCycle cycle)
-	{
-		// Special value, forces a ServletException to be thrown
-		// from within RequestDispatcher.forward()
-				
-		throw new RedirectException("FAIL_SERVLET");
-	}
-	
-	public void missing(IRequestCycle cycle)
-	{
-		// Specifying a missing file is an easy way to
-		// force an IOException ... note that the
-		// real Servlet API will return a null
-		// RequestDispatcher for a resource that
-		// doesn't exist.
-		
-		throw new RedirectException("Missing.html");
-	}
-	
-	public void index(IRequestCycle cycle)
-	{
-		throw new RedirectException(null);
-	}
-	
-	public void failExternal(IRequestCycle cycle)
-	{
-		throw new RedirectException("http://somehost/FAIL_IO");
-	}
-}
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/c14/Color.java b/3.0.4/junit/src/org/apache/tapestry/junit/mock/c14/Color.java
deleted file mode 100644
index 39b8f98..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/c14/Color.java
+++ /dev/null
@@ -1,36 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.mock.c14;
-
-import org.apache.commons.lang.enum.Enum;
-
-public class Color extends Enum
-{
-    public static final Color RED = new Color("RED");
-    public static final Color GREEN = new Color("GREEN");
-    public static final Color BLUE = new Color("BLUE");
-    public static final Color PUECE = new Color("PUECE");
-    public static final Color YELLOW = new Color("YELLOW");
-    public static final Color BLACK = new Color("BLACK");
-    public static final Color WHITE = new Color("WHITE");
-
-    public static final Color[] ALL_COLORS = { RED, GREEN, BLUE, YELLOW, BLACK, WHITE, PUECE };
-
-    private Color(String name)
-    {
-        super(name);
-    }
-
-}
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/c14/ColorStrings.properties b/3.0.4/junit/src/org/apache/tapestry/junit/mock/c14/ColorStrings.properties
deleted file mode 100644
index 18549e6..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/c14/ColorStrings.properties
+++ /dev/null
@@ -1,9 +0,0 @@
-# $Id$
-
-RED=Red
-GREEN=Green
-BLUE=Blue
-PUECE=Puece
-YELLOW=Yellow
-BLACK=Black
-WHITE=White
\ No newline at end of file
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/c14/ListEdit.java b/3.0.4/junit/src/org/apache/tapestry/junit/mock/c14/ListEdit.java
deleted file mode 100644
index 0578bcc..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/c14/ListEdit.java
+++ /dev/null
@@ -1,110 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.mock.c14;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.ResourceBundle;
-
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.form.EnumPropertySelectionModel;
-import org.apache.tapestry.form.IPropertySelectionModel;
-import org.apache.tapestry.html.BasePage;
-
-/**
- *  Page for testing the {@link org.apache.tapestry.form.ListEdit} component.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 3.0
- *
- **/
-
-public abstract class ListEdit extends BasePage
-{
-    public abstract Map getColorMap();
-    public abstract void setColorMap(Map colorMap);
-
-	public abstract String getColorKey();
-
-    private IPropertySelectionModel _colorModel;
-
-    public IPropertySelectionModel getColorModel()
-    {
-        if (_colorModel == null)
-            _colorModel = buildColorModel();
-
-        return _colorModel;
-    }
-
-    private IPropertySelectionModel buildColorModel()
-    {
-        ResourceBundle bundle =
-            ResourceBundle.getBundle(Color.class.getName() + "Strings", getLocale());
-
-        return new EnumPropertySelectionModel(Color.ALL_COLORS, bundle);
-    }
-
-    public List getSortedColorKeys()
-    {
-        Map map = getColorMap();
-        List result = new ArrayList(map.keySet());
-
-        Collections.sort(result);
-
-        return result;
-    }
-
-    protected void finishLoad()
-    {
-        Map colorMap = new HashMap();
-
-        colorMap.put("Food", Color.RED);
-        colorMap.put("Clothing", Color.BLACK);
-        colorMap.put("Eye Color", Color.BLUE);
-
-        setColorMap(colorMap);
-    }
-    
-    /**
-     *  Had to implement these cause I couldn't remember the OGNL syntax
-     *  for accessing a Map key.
-     * 
-     **/
-    
-    public void setColor(Color color)
-    {
-    	getColorMap().put(getColorKey(), color);	
-    }
-    
-    public Color getColor()
-    {
-    	return (Color)getColorMap().get(getColorKey());
-    }
-    
-
-	public void formSubmit(IRequestCycle cycle)
-	{
-		ListEditResults results = (ListEditResults)cycle.getPage("ListEditResults");
-		
-		results.setColorMap(getColorMap());
-		
-		cycle.activate(results);
-	}
-
-}
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/c14/ListEditArray.java b/3.0.4/junit/src/org/apache/tapestry/junit/mock/c14/ListEditArray.java
deleted file mode 100644
index 9070783..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/c14/ListEditArray.java
+++ /dev/null
@@ -1,37 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.mock.c14;
-
-import org.apache.tapestry.html.BasePage;
-
-/**
- *  Test {@link org.apache.tapestry.form.ListEdit} with an object array as a source.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 3.0
- *
- **/
-
-public class ListEditArray extends BasePage
-{
-	public String[] getItems()
-	{
-		return new String[]
-		{
-			"Fred", "Dino", "Wilma"
-		};
-	}
-}
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/c14/ListEditForm.java b/3.0.4/junit/src/org/apache/tapestry/junit/mock/c14/ListEditForm.java
deleted file mode 100644
index a0e71f4..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/c14/ListEditForm.java
+++ /dev/null
@@ -1,53 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.mock.c14;
-
-import org.apache.tapestry.BaseComponent;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.event.PageDetachListener;
-import org.apache.tapestry.event.PageEvent;
-
-/**
- *  Tests the use of the listener and index parameters
- *  of {@link org.apache.tapestry.form.ListEdit}, as well
- *  as using an array (not a list) as a ListEdit source.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 3.0
- *
- **/
-
-public abstract class ListEditForm extends BaseComponent
-implements PageDetachListener
-{
-	private static int _syncCount;
-	
-	public int getSyncCount()
-	{
-		return _syncCount;
-	}
-	
-	public void synchronizeItem(IRequestCycle cycle)
-	{
-		_syncCount++;
-	}
-	
-    public void pageDetached(PageEvent event)
-    {
-    	_syncCount = 0;
-    }
-
-}
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/c14/ListEditResults.java b/3.0.4/junit/src/org/apache/tapestry/junit/mock/c14/ListEditResults.java
deleted file mode 100644
index 009050f..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/c14/ListEditResults.java
+++ /dev/null
@@ -1,66 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.mock.c14;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
-import java.util.ResourceBundle;
-
-import org.apache.tapestry.html.BasePage;
-
-/**
- *  Shows user's selected colors in a new page.  A bit of duplication with
- *  ListEdit, but such is testing.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 3.0
- *
- **/
-public abstract class ListEditResults extends BasePage
-{
-    public abstract Map getColorMap();
-    public abstract void setColorMap(Map colorMap);
-
-    public abstract String getColorKey();
-
-    private ResourceBundle _colorStrings;
-
-    public List getSortedColorKeys()
-    {
-        Map map = getColorMap();
-        List result = new ArrayList(map.keySet());
-
-        Collections.sort(result);
-
-        return result;
-    }
-
-    public String getColorName()
-    {
-        String key = getColorKey();
-        Color color = (Color) getColorMap().get(key);
-
-        return _colorStrings.getString(color.getName());
-    }
-
-    protected void finishLoad()
-    {
-        _colorStrings = ResourceBundle.getBundle(Color.class.getName() + "Strings", getLocale());
-    }
-
-}
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/c16/Home.page b/3.0.4/junit/src/org/apache/tapestry/junit/mock/c16/Home.page
deleted file mode 100644
index 1103e20..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/c16/Home.page
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-    Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<page-specification>
-	  
-  <private-asset name="logo" resource-path="logo.png"/>
-
-</page-specification>	
\ No newline at end of file
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/c16/app.application b/3.0.4/junit/src/org/apache/tapestry/junit/mock/c16/app.application
deleted file mode 100644
index 2cd1cb9..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/c16/app.application
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-    Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE application PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<application/>
\ No newline at end of file
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/c16/globe.jpg b/3.0.4/junit/src/org/apache/tapestry/junit/mock/c16/globe.jpg
deleted file mode 100644
index b4928f8..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/c16/globe.jpg
+++ /dev/null
Binary files differ
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/c16/logo.png b/3.0.4/junit/src/org/apache/tapestry/junit/mock/c16/logo.png
deleted file mode 100644
index a986059..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/c16/logo.png
+++ /dev/null
Binary files differ
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/c17/Home.java b/3.0.4/junit/src/org/apache/tapestry/junit/mock/c17/Home.java
deleted file mode 100644
index 7c7214b..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/c17/Home.java
+++ /dev/null
@@ -1,57 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.mock.c17;
-
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.html.BasePage;
-
-/**
- *  Tests for the TextField component.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 3.0
- *
- **/
-
-public abstract class Home extends BasePage
-{
-	public abstract String getNormal();
-	public abstract void setNormal(String normal);
-	
-	public abstract String getDisabled();
-	public abstract void setDisabled(String disabled);
-	
-	public abstract String getHidden();
-	public abstract void setHidden(String hidden);
-	
-	protected void finishLoad()
-	{
-		setNormal("normal");
-		setDisabled("disabled");
-		setHidden("hidden");
-	}
-	
-	public void formSubmit(IRequestCycle cycle)
-	{
-		Two page = (Two)cycle.getPage("Two");
-		
-		page.setNormal(getNormal());
-		page.setDisabled(getDisabled());
-		page.setHidden(getHidden());
-		
-		cycle.activate(page);
-	}
-}
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/c17/Two.java b/3.0.4/junit/src/org/apache/tapestry/junit/mock/c17/Two.java
deleted file mode 100644
index dcaabed..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/c17/Two.java
+++ /dev/null
@@ -1,32 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.mock.c17;
-
-import org.apache.tapestry.html.BasePage;
-
-/**
- *  Part of tests for the TextField component.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 3.0
- *
- **/
-public abstract class Two extends BasePage
-{
-	public abstract void setNormal(String normal);
-	public abstract void setDisabled(String disabled);
-	public abstract void setHidden(String hidden);
-}
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/c18/Home.java b/3.0.4/junit/src/org/apache/tapestry/junit/mock/c18/Home.java
deleted file mode 100644
index efa5a61..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/c18/Home.java
+++ /dev/null
@@ -1,39 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.mock.c18;
-
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.html.BasePage;
-
-/**
- *  Page used to test the Radio and RadioGroup components.
- * 
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 3.0
- *
- **/
-
-public abstract class Home extends BasePage
-{
-	public abstract int getSize();
-	public abstract void setGroupDisabled(boolean groupEnabled);
-	
-	public void disableGroup(IRequestCycle cycle)
-	{
-		setGroupDisabled(true);
-	}
-}
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/c18/Language.java b/3.0.4/junit/src/org/apache/tapestry/junit/mock/c18/Language.java
deleted file mode 100644
index 750811c..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/c18/Language.java
+++ /dev/null
@@ -1,35 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.mock.c18;
-
-import org.apache.commons.lang.enum.Enum;
-
-/**
- * Identifies different computer languages.
- *
- * @author Howard Lewis Ship
- * @version $Id$
- */
-public class Language extends Enum
-{
-    public static final Language JAVA = new Language("JAVA");
-    public static final Language C_SHARP = new Language("C_SHARP");
-    public static final Language PYTHON = new Language("PYTHON");
-
-    private Language(String name)
-    {
-        super(name);
-    }
-}
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/c19/Home.java b/3.0.4/junit/src/org/apache/tapestry/junit/mock/c19/Home.java
deleted file mode 100644
index 60eb7c4..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/c19/Home.java
+++ /dev/null
@@ -1,56 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.mock.c19;
-
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.html.BasePage;
-import org.apache.tapestry.request.IUploadFile;
-
-/**
- *  Used in tests of upload and the {@link org.apache.tapestry.form.Upload}
- *  component.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 3.0
- *
- **/
-
-public abstract class Home extends BasePage
-{
-    public abstract IUploadFile getUploadFile();
-	public abstract void setUploadDisabled(boolean uploadDisabled);
-
-    public void formSubmit(IRequestCycle cycle)
-    {
-    	IUploadFile file = getUploadFile();
-    	
-    	if (file == null)
-    	{
-    		cycle.activate("Three");
-    		return;
-    	}
-    	
-        Two page = (Two) cycle.getPage("Two");
-
-        page.setFile(file);
-        cycle.activate(page);
-    }
-    
-    public void disableUpload(IRequestCycle cycle)
-    {
-    	setUploadDisabled(true);
-    }
-}
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/c19/Two.java b/3.0.4/junit/src/org/apache/tapestry/junit/mock/c19/Two.java
deleted file mode 100644
index ba887a4..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/c19/Two.java
+++ /dev/null
@@ -1,92 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.mock.c19;
-
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-
-import org.apache.tapestry.ApplicationRuntimeException;
-import org.apache.tapestry.Tapestry;
-import org.apache.tapestry.html.BasePage;
-import org.apache.tapestry.request.IUploadFile;
-
-/**
- *  Test page for the {@link org.apache.tapestry.form.Upload}
- *  component.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 3.0
- *
- **/
-
-public abstract class Two extends BasePage
-{
-    public abstract IUploadFile getFile();
-    public abstract void setFile(IUploadFile file);
-
-    public boolean getUploadMatch()
-    {
-        IUploadFile file = getFile();
-        String path = file.getFilePath();
-
-        InputStream expected = null;
-        InputStream actual = null;
-
-        try
-        {
-            expected = new FileInputStream(path);
-            actual = file.getStream();
-
-            int i = 0;
-
-            while (true)
-            {
-                int actualByte = actual.read();
-                int expectedByte = expected.read();
-
-                if (actualByte != expectedByte)
-                {
-                    System.err.println(
-                        "Input deviation at index "
-                            + i
-                            + "; expected "
-                            + expectedByte
-                            + ", not "
-                            + actualByte);
-
-                    return false;
-                }
-
-                if (actualByte < 0)
-                    break;
-
-                i++;
-            }
-        }
-        catch (IOException ex)
-        {
-            throw new ApplicationRuntimeException(ex);
-        }
-        finally
-        {
-            Tapestry.close(expected);
-            Tapestry.close(actual);
-        }
-
-        return true;
-    }
-}
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/c2/C2.application b/3.0.4/junit/src/org/apache/tapestry/junit/mock/c2/C2.application
deleted file mode 100644
index 03b62d0..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/c2/C2.application
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-    Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE application PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<application name="Test Application for Implicit Pages">
-		
-	<page name="Relative" specification-path="pages/Relative.page"/>
-			
-	<component-type type="CRelative" specification-path="components/CRelative.jwc"/>
-												
-	<library id="lib" specification-path="/org/apache/tapestry/junit/mock/lib/MockLibrary.library"/>
-	
-</application>	
\ No newline at end of file
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/c2/CApp.html b/3.0.4/junit/src/org/apache/tapestry/junit/mock/c2/CApp.html
deleted file mode 100644
index 27abfad..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/c2/CApp.html
+++ /dev/null
@@ -1 +0,0 @@
-This content provided by component CApp..
\ No newline at end of file
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/c2/CApp.jwc b/3.0.4/junit/src/org/apache/tapestry/junit/mock/c2/CApp.jwc
deleted file mode 100644
index d52f63f..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/c2/CApp.jwc
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<component-specification
-  class="org.apache.tapestry.BaseComponent"
-  allow-informal-parameters="no"/>
\ No newline at end of file
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/c2/WithApplication.page b/3.0.4/junit/src/org/apache/tapestry/junit/mock/c2/WithApplication.page
deleted file mode 100644
index 5cb1bf5..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/c2/WithApplication.page
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<page-specification class="org.apache.tapestry.html.BasePage">
-
-  <component id="insertMessage" type="Insert">
-  		<static-binding name="value">This page's specification is a sibling of the app specification.</static-binding>
-  </component>
-
-</page-specification>
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/c2/components/CRelative.html b/3.0.4/junit/src/org/apache/tapestry/junit/mock/c2/components/CRelative.html
deleted file mode 100644
index 4c3dd24..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/c2/components/CRelative.html
+++ /dev/null
@@ -1 +0,0 @@
-This content provided by component CRelative..
\ No newline at end of file
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/c2/components/CRelative.jwc b/3.0.4/junit/src/org/apache/tapestry/junit/mock/c2/components/CRelative.jwc
deleted file mode 100644
index 1368f25..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/c2/components/CRelative.jwc
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<component-specification allow-informal-parameters="no"/>
\ No newline at end of file
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/c2/pages/Relative.page b/3.0.4/junit/src/org/apache/tapestry/junit/mock/c2/pages/Relative.page
deleted file mode 100644
index cb2adaf..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/c2/pages/Relative.page
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<page-specification class="org.apache.tapestry.html.BasePage">
-
-  <component id="insertMessage" type="Insert">
-  		<static-binding name="value">This page's specification is located relative to the application specification.</static-binding>
-  </component>
-
-</page-specification>
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/c20/Home.java b/3.0.4/junit/src/org/apache/tapestry/junit/mock/c20/Home.java
deleted file mode 100644
index b743ba6..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/c20/Home.java
+++ /dev/null
@@ -1,71 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.mock.c20;
-
-import java.util.ResourceBundle;
-
-import org.apache.commons.lang.enum.Enum;
-
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.form.EnumPropertySelectionModel;
-import org.apache.tapestry.form.IPropertySelectionModel;
-import org.apache.tapestry.html.BasePage;
-import org.apache.tapestry.html.InsertTextMode;
-
-/**
- *  Page used to test {@link org.apache.tapestry.form.TextArea}
- *  and {@link org.apache.tapestry.html.InsertText}.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 3.0
- *
- **/
-
-public abstract class Home extends BasePage
-{
-    public abstract String getText();
-    public abstract InsertTextMode getMode();
-    public abstract void setTextAreaDisabled(boolean disableTextArea);
-
-    public IPropertySelectionModel getModeModel()
-    {
-        ResourceBundle bundle =
-            ResourceBundle.getBundle(
-                getClass().getPackage().getName() + ".ModeStrings",
-                getLocale());
-
-        return new EnumPropertySelectionModel(
-            new Enum[] { InsertTextMode.BREAK, InsertTextMode.PARAGRAPH },
-            bundle,
-            "mode");
-    }
-    
-    public void formSubmit(IRequestCycle cycle)
-    {
-    	Two page = (Two)cycle.getPage("Two");
-    	
-    	page.setMode(getMode());
-    	page.setText(getText());
-    	
-    	cycle.activate(page);
-    }
-    
-    public void disableTextArea(IRequestCycle cycle)
-    {
-    	setTextAreaDisabled(true);
-    }
-    	
-}
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/c20/ModeStrings.properties b/3.0.4/junit/src/org/apache/tapestry/junit/mock/c20/ModeStrings.properties
deleted file mode 100644
index 2952f40..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/c20/ModeStrings.properties
+++ /dev/null
@@ -1,4 +0,0 @@
-# $Id$
-
-mode.BREAK=Break
-mode.PARAGRAPH=Paragraph
\ No newline at end of file
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/c20/Two.java b/3.0.4/junit/src/org/apache/tapestry/junit/mock/c20/Two.java
deleted file mode 100644
index 53d0a85..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/c20/Two.java
+++ /dev/null
@@ -1,34 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.mock.c20;
-
-import org.apache.tapestry.html.BasePage;
-import org.apache.tapestry.html.InsertTextMode;
-
-/**
- *  Used to display results of form containing
- *  a {@link org.apache.tapestry.form.TextArea}.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 3.0
- *
- **/
-
-public abstract class Two extends BasePage
-{
-	public abstract void setText(String text);
-	public abstract void setMode(InsertTextMode mode);
-}
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/c21/NameMismatchService.java b/3.0.4/junit/src/org/apache/tapestry/junit/mock/c21/NameMismatchService.java
deleted file mode 100644
index acffb71..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/c21/NameMismatchService.java
+++ /dev/null
@@ -1,49 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.mock.c21;
-
-import java.io.IOException;
-
-import javax.servlet.ServletException;
-
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.engine.IEngineService;
-import org.apache.tapestry.engine.IEngineServiceView;
-import org.apache.tapestry.engine.ILink;
-import org.apache.tapestry.request.ResponseOutputStream;
-
-public class NameMismatchService implements IEngineService
-{
-
-    public ILink getLink(IRequestCycle cycle, IComponent component, Object[] parameters)
-    {
-        return null;
-    }
-
-    public void service(
-        IEngineServiceView engine,
-        IRequestCycle cycle,
-        ResponseOutputStream output)
-        throws ServletException, IOException
-    {
-    }
-
-    public String getName()
-    {
-        return "IncorrectName";
-    }
-
-}
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/c21/NullPropertySource.java b/3.0.4/junit/src/org/apache/tapestry/junit/mock/c21/NullPropertySource.java
deleted file mode 100644
index 4443fab..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/c21/NullPropertySource.java
+++ /dev/null
@@ -1,37 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.mock.c21;
-
-import org.apache.tapestry.engine.IPropertySource;
-
-/**
- *  Empty implementation just to exercise some code paths in
- *  {@link org.apache.tapestry.engine.AbstractEngine}.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 3.0
- *
- **/
-
-public class NullPropertySource implements IPropertySource
-{
-
-    public String getPropertyValue(String propertyName)
-    {
-        return null;
-    }
-
-}
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/c21/PrivateService.java b/3.0.4/junit/src/org/apache/tapestry/junit/mock/c21/PrivateService.java
deleted file mode 100644
index 12a4da6..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/c21/PrivateService.java
+++ /dev/null
@@ -1,61 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.mock.c21;
-
-import java.io.IOException;
-
-import javax.servlet.ServletException;
-
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.engine.IEngineService;
-import org.apache.tapestry.engine.IEngineServiceView;
-import org.apache.tapestry.engine.ILink;
-import org.apache.tapestry.request.ResponseOutputStream;
-
-/**
- *  Test case for service which can't be instantiated.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 3.0
- *
- **/
-public class PrivateService implements IEngineService
-{
-	// Can't be instantiated!
-	private PrivateService()
-	{
-	}
-
-    public ILink getLink(IRequestCycle cycle, IComponent component, Object[] parameters)
-    {
-        return null;
-    }
-
-    public void service(
-        IEngineServiceView engine,
-        IRequestCycle cycle,
-        ResponseOutputStream output)
-        throws ServletException, IOException
-    {
-    }
-
-    public String getName()
-    {
-        return null;
-    }
-
-}
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/c21/SetLocaleNull.java b/3.0.4/junit/src/org/apache/tapestry/junit/mock/c21/SetLocaleNull.java
deleted file mode 100644
index 259edd7..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/c21/SetLocaleNull.java
+++ /dev/null
@@ -1,38 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.mock.c21;
-
-import org.apache.tapestry.IExternalPage;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.html.BasePage;
-
-/**
- *  Sets the locale of the engine to null, provoking an exception.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 3.0
- *
- **/
-
-public class SetLocaleNull extends BasePage implements IExternalPage
-{
-
-    public void activateExternalPage(Object[] parameters, IRequestCycle cycle)
-    {
-    	getEngine().setLocale(null);
-    }
-
-}
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/c22/DummySpecDelegate.java b/3.0.4/junit/src/org/apache/tapestry/junit/mock/c22/DummySpecDelegate.java
deleted file mode 100644
index 4ae6820..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/c22/DummySpecDelegate.java
+++ /dev/null
@@ -1,55 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.mock.c22;
-
-import org.apache.tapestry.INamespace;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.resolver.ISpecificationResolverDelegate;
-import org.apache.tapestry.spec.IComponentSpecification;
-
-/**
- *  Part of the test harness for testing 
- *  {@link org.apache.tapestry.resolver.ISpecificationResolverDelegate}.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 3.0
- *
- **/
-
-public class DummySpecDelegate implements ISpecificationResolverDelegate
-{
-
-    public IComponentSpecification findPageSpecification(
-        IRequestCycle cycle,
-        INamespace namespace,
-        String simplePageName)
-    {
-     	cycle.getRequestContext().getSession().setAttribute("page", simplePageName);
-     	
-     	return null;
-    }
-
-    public IComponentSpecification findComponentSpecification(
-        IRequestCycle cycle,
-        INamespace namespace,
-        String type)
-    {
-      	cycle.getRequestContext().getSession().setAttribute("type", type);
-      	
-      	return null;
-    }
-
-}
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/c22/DummyTemplateDelegate.java b/3.0.4/junit/src/org/apache/tapestry/junit/mock/c22/DummyTemplateDelegate.java
deleted file mode 100644
index 971e826..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/c22/DummyTemplateDelegate.java
+++ /dev/null
@@ -1,45 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.mock.c22;
-
-import java.util.Locale;
-
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.engine.ITemplateSourceDelegate;
-import org.apache.tapestry.parse.ComponentTemplate;
-
-/**
- *  Used to test the {@link org.apache.tapestry.engine.ITemplateSourceDelegate}.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 3.0
- *
- **/
-
-public class DummyTemplateDelegate implements ITemplateSourceDelegate
-{
-
-    public ComponentTemplate findTemplate(IRequestCycle cycle, IComponent component, Locale locale)
-    {
-        cycle.getRequestContext().getSession().setAttribute(
-            "template",
-            component.getSpecification().getSpecificationLocation().toString());
-
-        return null;
-    }
-
-}
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/c25/Four.java b/3.0.4/junit/src/org/apache/tapestry/junit/mock/c25/Four.java
deleted file mode 100644
index 6e3d4ba..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/c25/Four.java
+++ /dev/null
@@ -1,32 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.mock.c25;
-
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.html.BasePage;
-
-/**
- * @author mindbridge
- */
-public class Four extends BasePage
-{
-
-    public void directListener(IRequestCycle cycle)
-    {
-        cycle.activate("Five");
-    }
-
-
-}
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/c25/Home.java b/3.0.4/junit/src/org/apache/tapestry/junit/mock/c25/Home.java
deleted file mode 100644
index 3fea389..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/c25/Home.java
+++ /dev/null
@@ -1,32 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.mock.c25;
-
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.html.BasePage;
-
-/**
- * @author mindbridge
- */
-public class Home extends BasePage
-{
-
-    public void directListener(IRequestCycle cycle)
-    {
-        cycle.activate("Two");
-    }
-
-
-}
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/c25/RedirectingComponent.java b/3.0.4/junit/src/org/apache/tapestry/junit/mock/c25/RedirectingComponent.java
deleted file mode 100644
index f05cff9..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/c25/RedirectingComponent.java
+++ /dev/null
@@ -1,37 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.mock.c25;
-
-import org.apache.tapestry.BaseComponent;
-import org.apache.tapestry.PageRedirectException;
-import org.apache.tapestry.event.PageEvent;
-import org.apache.tapestry.event.PageValidateListener;
-
-/**
- * @author teo
- */
-public class RedirectingComponent extends BaseComponent implements PageValidateListener
-{
-
-	/**
-	 * @see org.apache.tapestry.event.PageValidateListener#pageValidate(org.apache.tapestry.event.PageEvent)
-	 */
-	public void pageValidate(PageEvent event)
-	{
-        String pageName = getBinding("page").getString();
-        throw new PageRedirectException(pageName);
-	}
-
-}
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/c26/Global.java b/3.0.4/junit/src/org/apache/tapestry/junit/mock/c26/Global.java
deleted file mode 100644
index 3fdb263..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/c26/Global.java
+++ /dev/null
@@ -1,33 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.mock.c26;
-
-import java.io.Serializable;
-
-public class Global implements Serializable
-{
-    private String _name = "Osamu Tezuka";
-
-    public String getName()
-    {
-        return _name;
-    }
-
-    public void setName(String name)
-    {
-        _name = name;
-    }
-
-}
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/c27/Good.java b/3.0.4/junit/src/org/apache/tapestry/junit/mock/c27/Good.java
deleted file mode 100644
index 5126113..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/c27/Good.java
+++ /dev/null
@@ -1,35 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.mock.c27;
-
-import java.util.Locale;
-
-import org.apache.tapestry.BaseComponent;
-
-public abstract class Good extends BaseComponent
-{
-    public String getDefaultPrefix()
-    {
-        return "Default";
-    }
-
-    public Locale getDefaultLocale()
-    {
-        return Locale.US;
-    }
-    
-    public abstract boolean isBooleanValue1();
-    
-}
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/c28/Home.java b/3.0.4/junit/src/org/apache/tapestry/junit/mock/c28/Home.java
deleted file mode 100644
index 7bc3fa2..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/c28/Home.java
+++ /dev/null
@@ -1,41 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.mock.c28;
-
-import java.util.Locale;
-import java.util.StringTokenizer;
-
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.html.BasePage;
-
-public class Home extends BasePage
-{
-    public void changeLocale(IRequestCycle cycle)
-    {
-        Object[] params = cycle.getServiceParameters();
-        String pageName = (String) params[0];
-        String localeName = (String) params[1];
-        
-        String[] localeParts = new String[] { "", "", "" };
-        StringTokenizer tokenizer = new StringTokenizer(localeName, "_");
-        for (int i = 0; i < 3 && tokenizer.hasMoreTokens(); i++) {
-            localeParts[i] = tokenizer.nextToken();
-        }
-        
-        Locale locale = new Locale(localeParts[0], localeParts[1], localeParts[2]);
-        cycle.getEngine().setLocale(locale);
-        cycle.activate(pageName);
-    }
-}
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/c29/Two.java b/3.0.4/junit/src/org/apache/tapestry/junit/mock/c29/Two.java
deleted file mode 100644
index b44611c..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/c29/Two.java
+++ /dev/null
@@ -1,28 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.mock.c29;
-
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.html.BasePage;
-
-public abstract class Two extends BasePage {
-	
-	public abstract void setFlag(boolean value);
-	public abstract boolean isFlag();
-	
-    public void submit(IRequestCycle cycle) {
-    	this.setFlag(!this.isFlag());
-    }
-}
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/c29/app.application b/3.0.4/junit/src/org/apache/tapestry/junit/mock/c29/app.application
deleted file mode 100644
index 8957ace..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/c29/app.application
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>

-<!--

-    Copyright 2004 The Apache Software Foundation

-  

-   Licensed under the Apache License, Version 2.0 (the "License");

-   you may not use this file except in compliance with the License.

-   You may obtain a copy of the License at

-  

-       http://www.apache.org/licenses/LICENSE-2.0

-  

-   Unless required by applicable law or agreed to in writing, software

-   distributed under the License is distributed on an "AS IS" BASIS,

-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-   See the License for the specific language governing permissions and

-   limitations under the License.

--->

-<!-- $Id: app.application,v 1.2 2003/06/01 05:05:08 hlship Exp $ -->

-<!DOCTYPE application PUBLIC 

-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 

-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">

-	

-<application>

-    <library specification-path="/org/apache/tapestry/contrib/Contrib.library" id="Contrib"/>

-</application>
\ No newline at end of file
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/c3/C3Engine.java b/3.0.4/junit/src/org/apache/tapestry/junit/mock/c3/C3Engine.java
deleted file mode 100644
index 0221bbd..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/c3/C3Engine.java
+++ /dev/null
@@ -1,31 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.mock.c3;
-
-import org.apache.tapestry.engine.BaseEngine;
-
-/**
- *  Used to demonstrate that specific subclass of BaseEngine can be specified.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 3.0
- *
- **/
-
-public class C3Engine extends BaseEngine
-{
-
-}
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/c31/Home.java b/3.0.4/junit/src/org/apache/tapestry/junit/mock/c31/Home.java
deleted file mode 100644
index 853d3f4..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/c31/Home.java
+++ /dev/null
@@ -1,74 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.mock.c31;
-
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.html.BasePage;
-
-/**
- *  Tests for the Hidden component.
- *
- *  @author Tsvetelin Saykov
- *  @version $Id$
- *  @since 3.0
- *
- **/
-
-public abstract class Home extends BasePage
-{
-	public abstract String getValue();
-	public abstract void setValue(String value);
-	
-	public abstract String getHiddenID();
-	public abstract void setHiddenID(String hiddenID);
-	
-	public abstract String getValueWithID();
-	public abstract void setValueWithID(String valueWithID);
-
-	public abstract String getValueWithEncoding();
-	public abstract void setValueWithEncoding(String valueWithID);
-
-	public abstract Boolean getBooleanValue();
-	public abstract void setBooleanValue(Boolean value);
-
-	protected void finishLoad()
-	{
-		setValue("1234567890");
-		setHiddenID("0987654321");
-		setValueWithID("1234567890-with id");
-		setValueWithEncoding("1234567890-with encoding");
-		setBooleanValue(Boolean.FALSE);
-	}
-	
-	public void formSubmit(IRequestCycle cycle)
-	{
-		Two page = (Two)cycle.getPage("Two");
-		
-		page.setValue(getValue());
-		page.setHiddenID(getHiddenID());
-		page.setValueWithEncoding(getValueWithEncoding());
-		
-		cycle.activate(page);
-	}
-	
-	public void hiddenListener(IRequestCycle cycle)
-	{
-		//just a test for listener
-	}
-
-	public boolean getEncode(){
-		return false;
-	}
-}
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/c31/Two.java b/3.0.4/junit/src/org/apache/tapestry/junit/mock/c31/Two.java
deleted file mode 100644
index 1caabeb..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/c31/Two.java
+++ /dev/null
@@ -1,37 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.mock.c31;
-
-import org.apache.tapestry.html.BasePage;
-
-/**
- *  Part of tests for the Hidden component.
- *
- *  @author Tsvetelin Saykov
- *  @version $Id$
- *  @since 3.0
- *
- **/
-public abstract class Two extends BasePage
-{
-	public abstract String getValue();
-	public abstract void setValue(String normal);
-	
-	public abstract String getHiddenID();
-	public abstract void setHiddenID(String hidden);
-
-	public abstract String getValueWithEncoding();
-	public abstract void setValueWithEncoding(String valueWithID);
-}
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/c33/Home.java b/3.0.4/junit/src/org/apache/tapestry/junit/mock/c33/Home.java
deleted file mode 100644
index 91d48e9..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/c33/Home.java
+++ /dev/null
@@ -1,34 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.mock.c33;
-
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.html.BasePage;
-
-/**
- * Used to test expression binding optimization. 
- *
- * @author Howard Lewis Ship
- * @version $Id$
- */
-public class Home extends BasePage
-{
-    public void enable(IRequestCycle cycle)
-    {
-        Visit visit = (Visit) getVisit();
-
-        visit.setEnabled(true);
-    }
-}
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/c33/Visit.java b/3.0.4/junit/src/org/apache/tapestry/junit/mock/c33/Visit.java
deleted file mode 100644
index c232b08..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/c33/Visit.java
+++ /dev/null
@@ -1,38 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.mock.c33;
-
-/**
- * Used for testing expression binding optimization. Stores a global flag
- * used to enable or disable the MyConditional component.
- *
- * @author Howard Lewis Ship
- * @version $Id$
- */
-public class Visit
-{
-    private boolean _enabled;
-
-    public boolean isEnabled()
-    {
-        return _enabled;
-    }
-
-    public void setEnabled(boolean b)
-    {
-        _enabled = b;
-    }
-
-}
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/c34/Home.java b/3.0.4/junit/src/org/apache/tapestry/junit/mock/c34/Home.java
deleted file mode 100644
index 4719516..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/c34/Home.java
+++ /dev/null
@@ -1,47 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.mock.c34;
-
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.html.BasePage;
-
-/**
- * Test class used to check whether we can disable abstract method checks.
- *
- * @author Howard Lewis Ship
- * @version $Id$
- */
-public abstract class Home extends BasePage
-{
-    public abstract void setMessage(String message);
-
-    public void triggerError(IRequestCycle cycle)
-    {
-        try
-        {
-            unimplementedMethod();
-        }
-        catch (AbstractMethodError e)
-        {
-            setMessage("Got an AbstractMethodError invoking unimplementedMethod().");
-        }
-    }
-
-    /**
-     * Normally, this would be caught as an error, but we've disabled
-     * the check for unimplemented abstract methods.
-     */
-    public abstract void unimplementedMethod();
-}
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/c35/MyComponent.java b/3.0.4/junit/src/org/apache/tapestry/junit/mock/c35/MyComponent.java
deleted file mode 100644
index 1429f13..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/c35/MyComponent.java
+++ /dev/null
@@ -1,34 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.mock.c35;
-
-import org.apache.tapestry.BaseComponent;
-import org.apache.tapestry.IRequestCycle;
-
-/**
- * Used to check that auto parameters of type long are implemented correctly.
- *
- * @author Howard Lewis Ship
- * @version $Id$
- */
-public abstract class MyComponent extends BaseComponent
-{
-    public abstract void setLong(long value);
-
-    public void updateValue(IRequestCycle cycle)
-    {
-        setLong(37l);
-    }
-}
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/c4/C4Engine.java b/3.0.4/junit/src/org/apache/tapestry/junit/mock/c4/C4Engine.java
deleted file mode 100644
index 7ff5d52..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/c4/C4Engine.java
+++ /dev/null
@@ -1,31 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.mock.c4;
-
-import org.apache.tapestry.engine.BaseEngine;
-
-/**
- *  Used to demonstrate that specific subclass of BaseEngine can be specified.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 3.0
- *
- **/
-
-public class C4Engine extends BaseEngine
-{
-
-}
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/c5/PageBlock.java b/3.0.4/junit/src/org/apache/tapestry/junit/mock/c5/PageBlock.java
deleted file mode 100644
index 7834b19..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/c5/PageBlock.java
+++ /dev/null
@@ -1,72 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.mock.c5;
-
-import org.apache.tapestry.BaseComponent;
-import org.apache.tapestry.IPage;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.components.Block;
-
-/**
- *  An actual, reusable kind of component for the test suite.  Works like
- *  a {@link org.apache.tapestry.components.RenderBlock}, but specified the 
- *  {@link org.apache.tapestry.components.Block} to render in terms of
- *  a page name and a nested component id.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 3.0
- *
- **/
-
-public class PageBlock extends BaseComponent
-{
-    private String _targetPageName;
-    private String _targetBlockId = "block";
-    
-    public String getTargetBlockId()
-    {
-        return _targetBlockId;
-    }
-
-    public String getTargetPageName()
-    {
-        return _targetPageName;
-    }
-
-    public void setTargetBlockId(String targetBlockId)
-    {
-        _targetBlockId = targetBlockId;
-    }
-
-    public void setTargetPageName(String targetPageName)
-    {
-        _targetPageName = targetPageName;
-    }
-
-    /**
-     *  Used the targetPageName and targetBlockId (which defaults to "block")
-     *  to obtain a reference to a Block instance, which is returned.
-     * 
-     **/
-    
-    public Block getTargetBlock()
-    {
-        IRequestCycle cycle = getPage().getRequestCycle();
-        IPage targetPage = cycle.getPage(_targetPageName);
-        
-        return (Block)targetPage.getNestedComponent(_targetBlockId);        
-    }
-}
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/c5/Visit.java b/3.0.4/junit/src/org/apache/tapestry/junit/mock/c5/Visit.java
deleted file mode 100644
index 63328b3..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/c5/Visit.java
+++ /dev/null
@@ -1,91 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.mock.c5;
-
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.listener.ListenerMap;
-
-/**
- *  For the Block tests, this simply stores a flag indicating whether
- *  the particular element (DirectLink, ActionLink or Form) has been
- *  triggered, as well as listener methods.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 3.0
- *
- **/
-
-public class Visit
-{
-    private boolean _directLinkTriggered;
-    private boolean _actionLinkTriggered;
-    private boolean _formTriggered;
-
-    private transient ListenerMap _listeners;
-
-    public boolean isActionLinkTriggered()
-    {
-        return _actionLinkTriggered;
-    }
-
-    public boolean isDirectLinkTriggered()
-    {
-        return _directLinkTriggered;
-    }
-
-    public boolean isFormTriggered()
-    {
-        return _formTriggered;
-    }
-
-    public void setActionLinkTriggered(boolean actionLinkTriggered)
-    {
-        _actionLinkTriggered = actionLinkTriggered;
-    }
-
-    public void setDirectLinkTriggered(boolean directLinkTriggered)
-    {
-        _directLinkTriggered = directLinkTriggered;
-    }
-
-    public void setFormTriggered(boolean formTriggered)
-    {
-        _formTriggered = formTriggered;
-    }
-
-    public void directTrigger(IRequestCycle cycle)
-    {
-        setDirectLinkTriggered(true);
-    }
-
-    public void actionTrigger(IRequestCycle cycle)
-    {
-        setActionLinkTriggered(true);
-    }
-
-    public void formTrigger(IRequestCycle cycle)
-    {
-        setFormTriggered(true);
-    }
-
-    public ListenerMap getListeners()
-    {
-        if (_listeners == null)
-            _listeners = new ListenerMap(this);
-
-        return _listeners;
-    }
-}
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/c6/C6Engine.java b/3.0.4/junit/src/org/apache/tapestry/junit/mock/c6/C6Engine.java
deleted file mode 100644
index d750d3e..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/c6/C6Engine.java
+++ /dev/null
@@ -1,42 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.mock.c6;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-
-import org.apache.tapestry.engine.BaseEngine;
-
-/**
- *  Provides a sorted list of active pages.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 3.0
- *
- **/
-
-public class C6Engine extends BaseEngine
-{
-    public List getSortedActivePageNames()
-    {
-        List result = new ArrayList(getActivePageNames());
-
-        Collections.sort(result);
-
-        return result;
-    }
-}
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/c6/Four.java b/3.0.4/junit/src/org/apache/tapestry/junit/mock/c6/Four.java
deleted file mode 100644
index e089ae6..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/c6/Four.java
+++ /dev/null
@@ -1,175 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.mock.c6;
-
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.html.BasePage;
-
-/**
- *  Test a number of different property value types.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 3.0
- *
- **/
-
-public class Four extends BasePage
-{
-    private boolean _booleanValue;
-    private byte _byteValue;
-    private short _shortValue;
-    private long _longValue;
-    private float _floatValue;
-    private double _doubleValue;
-    private char _charValue;
-    private int _intValue;
-    private StringHolder _stringHolder;
-    
-    public void initialize()
-    {
-      _booleanValue = false;
-      _byteValue = 0;
-      _shortValue = 0;
-      _longValue = 0;
-      _floatValue = 0;
-      _doubleValue = 0;
-      _charValue = ' ';
-      _intValue = 0;
-      _stringHolder = null;
-    }   
-    
-    public boolean getBooleanValue()
-    {
-        return _booleanValue;
-    }
-
-    public double getDoubleValue()
-    {
-        return _doubleValue;
-    }
-
-    public float getFloatValue()
-    {
-        return _floatValue;
-    }
-
-    public long getLongValue()
-    {
-        return _longValue;
-    }
-
-    public short getShortValue()
-    {
-        return _shortValue;
-    }
-
-    public void setBooleanValue(boolean booleanValue)
-    {
-        _booleanValue = booleanValue;
-        
-        fireObservedChange("booleanValue", booleanValue);
-    }
-
-    public void setDoubleValue(double doubleValue)
-    {
-        _doubleValue = doubleValue;
-        
-        fireObservedChange("doubleValue", _doubleValue);
-    }
-
-    public void setFloatValue(float floatValue)
-    {
-        _floatValue = floatValue;
-        
-        fireObservedChange("floatValue", _floatValue);
-    }
-
-    public void setLongValue(long longValue)
-    {
-        _longValue = longValue;
-        
-        fireObservedChange("longValue", _longValue);
-    }
-
-    public void setShortValue(short shortValue)
-    {
-        _shortValue = shortValue;
-        
-        fireObservedChange("shortValue", _shortValue);
-    }
-
-    public char getCharValue()
-    {
-        return _charValue;
-    }
-
-    public void setCharValue(char charValue)
-    {
-        _charValue = charValue;
-        
-        fireObservedChange("charValue", charValue);
-    }
-
-    public void change(IRequestCycle cycle)
-    {
-        setBooleanValue(true);
-        setCharValue('H');
-        setLongValue(1234567890123l);
-        setFloatValue(-1.5f);
-        setDoubleValue(22. / 7.);
-        setShortValue((short)127);
-        setByteValue((byte)27);
-        setIntValue(23);
-        setStringHolder(new StringHolder("Surprise!"));
-    }
-
-    public byte getByteValue()
-    {
-        return _byteValue;
-    }
-
-    public void setByteValue(byte byteValue)
-    {
-        _byteValue = byteValue;
-        
-        fireObservedChange("byteValue", byteValue);
-    }
-
-    public int getIntValue()
-    {
-        return _intValue;
-    }
-
-    public void setIntValue(int intValue)
-    {
-        _intValue = intValue;
-        
-        fireObservedChange("intValue", intValue);
-    }
-
-    public StringHolder getStringHolder()
-    {
-        return _stringHolder;
-    }
-
-    public void setStringHolder(StringHolder stringHolder)
-    {
-        _stringHolder = stringHolder;
-        
-        fireObservedChange("stringHolder", stringHolder);
-    }
-
-}
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/c6/Home.java b/3.0.4/junit/src/org/apache/tapestry/junit/mock/c6/Home.java
deleted file mode 100644
index f1d58b9..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/c6/Home.java
+++ /dev/null
@@ -1,55 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.mock.c6;
-
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.html.BasePage;
-
-/**
- *  Used for testing page property persistance.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 3.0
- *
- **/
-
-public class Home extends BasePage
-{
-    private String _message;
-    
-    public void initialize()
-    {
-        _message = "Hello";
-    }
-        
-    public String getMessage()
-    {
-        return _message;
-    }
-
-    public void setMessage(String message)
-    {
-        _message = message;
-        
-        fireObservedChange("message", message);
-    }
-
-    public void updateMessage(IRequestCycle cycle)
-    {
-        setMessage("Changed");
-    }
-
-}
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/c6/Nested.java b/3.0.4/junit/src/org/apache/tapestry/junit/mock/c6/Nested.java
deleted file mode 100644
index 752d68b..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/c6/Nested.java
+++ /dev/null
@@ -1,67 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.mock.c6;
-
-import org.apache.tapestry.BaseComponent;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.event.PageDetachListener;
-import org.apache.tapestry.event.PageEvent;
-
-/**
- *  More testing of persistent component properties.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 3.0
- *
- **/
-
-public class Nested extends BaseComponent implements PageDetachListener
-{
-    private  String _message;
-    
-    public void initialize()
-    {
-        _message = "Nested";
-    }
-        
-    public String getMessage()
-    {
-        return _message;
-    }
-
-    public void setMessage(String message)
-    {
-        _message = message;
-        
-        fireObservedChange("message", message);
-    }
-
-    public void updateMessage(IRequestCycle cycle)
-    {
-        setMessage("Changed");
-    }
-    
-    public void finishLoad()
-    {
-        initialize();
-    }
-
-    public void pageDetached(PageEvent event)
-    {
-        initialize();
-    }
-
-}
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/c6/StringHolder.java b/3.0.4/junit/src/org/apache/tapestry/junit/mock/c6/StringHolder.java
deleted file mode 100644
index 14a6b50..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/c6/StringHolder.java
+++ /dev/null
@@ -1,46 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.mock.c6;
-
-import java.io.Serializable;
-
-public class StringHolder implements Serializable
-{
-    private String _string;
-
-    public StringHolder()
-    {
-    }
-
-    public StringHolder(String string)
-    {
-        setString(string);
-    }
-
-    public String getString()
-    {
-        return _string;
-    }
-
-    public void setString(String string)
-    {
-        _string = string;
-    }
-
-    public String toString()
-    {
-        return "StringHolder[" + _string + "]";
-    }
-}
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/c7/Home.java b/3.0.4/junit/src/org/apache/tapestry/junit/mock/c7/Home.java
deleted file mode 100644
index da24315..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/c7/Home.java
+++ /dev/null
@@ -1,32 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.mock.c7;
-
-import org.apache.tapestry.html.BasePage;
-
-/**
- *  Used to confirm that we can override the default page class.
- * 
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 3.0
- *
- **/
-
-public class Home extends BasePage
-{
-
-}
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/c7/Two.java b/3.0.4/junit/src/org/apache/tapestry/junit/mock/c7/Two.java
deleted file mode 100644
index 236aee6..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/c7/Two.java
+++ /dev/null
@@ -1,46 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.mock.c7;
-
-import org.apache.tapestry.html.BasePage;
-
-/**
- *  Page used to test listener bindings.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 3.0
- *
- **/
-
-public class Two extends BasePage
-{
-    private  String _message;
-    
-    public void initialize()
-    {
-        _message = "No message.";
-    }
-    
-    public String getMessage()
-    {
-        return _message;
-    }
-
-    public void setMessage(String message)
-    {
-        _message = message;
-    }
-}
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/c9/Eight.java b/3.0.4/junit/src/org/apache/tapestry/junit/mock/c9/Eight.java
deleted file mode 100644
index 03962a4..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/c9/Eight.java
+++ /dev/null
@@ -1,37 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.mock.c9;
-
-import org.apache.tapestry.html.BasePage;
-
-
-/**
- *  Test for an unimplemented abstract method.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 3.0
- *
- **/
-
-public abstract class Eight extends BasePage
-{
-	public abstract long getEnhancedProperty();
-	
-	// A common error: wrong signature for
-	// an accessor.
-	
-	public abstract long setEnhancedProperty(long enhancedProperty);
-}
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/c9/Eleven.java b/3.0.4/junit/src/org/apache/tapestry/junit/mock/c9/Eleven.java
deleted file mode 100644
index 94b34fb..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/c9/Eleven.java
+++ /dev/null
@@ -1,41 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.mock.c9;
-
-import org.apache.tapestry.ILocatable;
-import org.apache.tapestry.html.BasePage;
-
-/**
- *  Testing for correct operation with array properties
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 3.0
- *
- **/
-
-public abstract class Eleven extends BasePage implements ILocatable
-{
-
-    public abstract int getIntValue();
-    public abstract String[] getStringArrayValue();
-    
-    public String getStringValue()
-    {
-        int index = getIntValue();
-        return getStringArrayValue()[index];
-    }
-
-}
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/c9/Five.java b/3.0.4/junit/src/org/apache/tapestry/junit/mock/c9/Five.java
deleted file mode 100644
index 7b396f8..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/c9/Five.java
+++ /dev/null
@@ -1,33 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.mock.c9;
-
-import org.apache.tapestry.html.BasePage;
-
-/**
- *  More testing for non-abstract accessor methods.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 3.0
- **/
-
-public class Five extends BasePage
-{
-	public String getWord()
-	{
-		return null;
-	}
-}
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/c9/Four.java b/3.0.4/junit/src/org/apache/tapestry/junit/mock/c9/Four.java
deleted file mode 100644
index 611bcb4..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/c9/Four.java
+++ /dev/null
@@ -1,38 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.mock.c9;
-
-import org.apache.tapestry.html.BasePage;
-
-/**
- *  Used to validate that the enhancer will reject classes where the
- *  property exists (that is, with non-abstract accessors).
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 3.0
- **/
-
-public abstract class Four extends BasePage
-{
-	private String _word;
-	
-    public abstract String getWord();
-
-    public void setWord(String word)
-    {
-    	_word = word;
-    }
-}
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/c9/Nine.java b/3.0.4/junit/src/org/apache/tapestry/junit/mock/c9/Nine.java
deleted file mode 100644
index c6930ef..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/c9/Nine.java
+++ /dev/null
@@ -1,33 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.mock.c9;
-
-import org.apache.tapestry.ILocatable;
-import org.apache.tapestry.event.PageDetachListener;
-import org.apache.tapestry.html.BasePage;
-
-/**
- *  Test when a class fails to implement all the methods in an interface.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 3.0
- *
- **/
-
-public abstract class Nine extends BasePage implements PageDetachListener, ILocatable
-{
-
-}
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/c9/Seven.java b/3.0.4/junit/src/org/apache/tapestry/junit/mock/c9/Seven.java
deleted file mode 100644
index 3a453a2..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/c9/Seven.java
+++ /dev/null
@@ -1,76 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.mock.c9;
-
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.html.BasePage;
-
-/**
- *  One giant test page to test all kinds of persistent properties.  Eight
- *  scalar types and an object type.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 3.0
- **/
-
-public abstract class Seven extends BasePage
-{
-    abstract public boolean getBooleanValue();
-    abstract public byte getByteValue();
-    abstract public char getCharValue();
-    abstract public double getDoubleValue();
-    abstract public float getFloatValue();
-    abstract public int getIntValue();
-    abstract public long getLongValue();
-    abstract public short getShortValue();
-    abstract public String getStringValue();
-    abstract public void setBooleanValue(boolean booleanValue);
-    abstract public void setByteValue(byte byteValue);
-    abstract public void setCharValue(char charValue);
-    abstract public void setDoubleValue(double doubleValue);
-    abstract public void setFloatValue(float floatValue);
-    abstract public void setIntValue(int intValue);
-    abstract public void setLongValue(long longValue);
-    abstract public void setShortValue(short shortValue);
-    abstract public void setStringValue(String stringValue);
-
-    public void finishLoad()
-    {
-        setBooleanValue(true);
-        setByteValue((byte) 'A');
-        setShortValue((short) 97);
-        setCharValue('Z');
-        setDoubleValue(3.2);
-        setFloatValue(-22.7f);
-        setIntValue(100);
-        setLongValue(32000000);
-        setStringValue("Magic");
-    }
-
-    public void update(IRequestCycle cycle)
-    {
-        setBooleanValue(false);
-        setByteValue((byte) 'Q');
-        setShortValue((short) 21);
-        setCharValue('f');
-        setDoubleValue(9.87);
-        setFloatValue(-202.2f);
-        setIntValue(3097);
-        setLongValue(132000001);
-        setStringValue("Marker");
-    }
-
-}
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/c9/Six.java b/3.0.4/junit/src/org/apache/tapestry/junit/mock/c9/Six.java
deleted file mode 100644
index 028c417..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/c9/Six.java
+++ /dev/null
@@ -1,32 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.mock.c9;
-
-import org.apache.tapestry.html.BasePage;
-
-/**
- *  This is used in a test where the types do not match up.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 3.0
- **/
-
-public abstract class Six extends BasePage
-{
-	abstract public int getValue();
-	
-	abstract public void setValue(int value);
-}
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/c9/Ten.java b/3.0.4/junit/src/org/apache/tapestry/junit/mock/c9/Ten.java
deleted file mode 100644
index 029fb09..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/c9/Ten.java
+++ /dev/null
@@ -1,33 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.mock.c9;
-
-import org.apache.tapestry.ILocatable;
-import org.apache.tapestry.html.BasePage;
-
-/**
- *  One more check, to ensure that having an abstract subclass re-implement an interface
- *  actually provided by a base class works.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 3.0
- *
- **/
-
-public abstract class Ten extends BasePage implements ILocatable
-{
-
-}
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/c9/Three.java b/3.0.4/junit/src/org/apache/tapestry/junit/mock/c9/Three.java
deleted file mode 100644
index b0966d0..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/c9/Three.java
+++ /dev/null
@@ -1,39 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.mock.c9;
-
-import org.apache.tapestry.html.BasePage;
-
-/**
- *  Demonstration for a class that has abstract accessor methods and initializes
- *  the property in finishLoad().
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 3.0
- **/
-
-public abstract class Three extends BasePage
-{
-    public abstract String getWord();
-
-    public abstract void setWord(String word);
-
-    protected void finishLoad()
-    {
-        setWord("Tapestry");
-    }
-
-}
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/c9/Twelve.java b/3.0.4/junit/src/org/apache/tapestry/junit/mock/c9/Twelve.java
deleted file mode 100644
index f4f0871..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/c9/Twelve.java
+++ /dev/null
@@ -1,36 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.mock.c9;
-
-import org.apache.tapestry.html.BasePage;
-
-/**
- *  Testing for correct initialization of properties
- *
- *  @author mindbridge
- *  @version $Id$
- *  @since 3.0
- *
- **/
-public class Twelve extends BasePage
-{
-    private int _initialValue = 0;
-    
-    public int getInitialValue()
-    {
-        return _initialValue++;
-    }
-
-}
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/fail/Fail.application b/3.0.4/junit/src/org/apache/tapestry/junit/mock/fail/Fail.application
deleted file mode 100644
index a63ec21..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/fail/Fail.application
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-    Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE application PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<application name="JUnit Mock Application -- Failure Testing"
-	engine-class="org.apache.tapestry.engine.BaseEngine">
-		
-	<page name="MissingClass" specification-path="/org/apache/tapestry/junit/mock/fail/MissingClass.page"/>
-	<page name="NotPage" specification-path="/org/apache/tapestry/junit/mock/fail/NotPage.page"/>
-	<page name="NotComponent"
-		specification-path="/org/apache/tapestry/junit/mock/fail/NotComponent.page"/>
-		
-	<component-type type="InvalidComponent" specification-path="/org/apache/tapestry/junit/mock/fail/InvalidComponent.jwc"/>
-		
-</application>	
\ No newline at end of file
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/fail/InvalidComponent.jwc b/3.0.4/junit/src/org/apache/tapestry/junit/mock/fail/InvalidComponent.jwc
deleted file mode 100644
index 66a353a..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/fail/InvalidComponent.jwc
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<component-specification class="java.lang.Object"/>
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/fail/MissingClass.page b/3.0.4/junit/src/org/apache/tapestry/junit/mock/fail/MissingClass.page
deleted file mode 100644
index dcbef4d..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/fail/MissingClass.page
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<page-specification class="org.apache.tapestry.junit.mock.fail.MissingClass"/>
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/fail/NotComponent.html b/3.0.4/junit/src/org/apache/tapestry/junit/mock/fail/NotComponent.html
deleted file mode 100644
index 4421020..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/fail/NotComponent.html
+++ /dev/null
@@ -1,3 +0,0 @@
-<!-- $Id$ -->
-
-<span jwcid="@InvalidComponent"/>
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/fail/NotComponent.page b/3.0.4/junit/src/org/apache/tapestry/junit/mock/fail/NotComponent.page
deleted file mode 100644
index 9bd8d22..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/fail/NotComponent.page
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<page-specification class="org.apache.tapestry.html.BasePage"/>
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/fail/NotPage.page b/3.0.4/junit/src/org/apache/tapestry/junit/mock/fail/NotPage.page
deleted file mode 100644
index 7cfe2ce..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/fail/NotPage.page
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<page-specification class="java.lang.Object"/>
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/lib/Border.html b/3.0.4/junit/src/org/apache/tapestry/junit/mock/lib/Border.html
deleted file mode 100644
index fde43b9..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/lib/Border.html
+++ /dev/null
@@ -1,11 +0,0 @@
-<!-- $Id$ -->
-
-<span jwcid="$content$">
-<span jwcid="shell">
-<body jwcid="body">
-
-<span jwcid="renderBody">Page specific content.</span>
-
-</body>
-</span> <!-- shell -->
-</span> <!-- $content$ -->
\ No newline at end of file
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/lib/Border.jwc b/3.0.4/junit/src/org/apache/tapestry/junit/mock/lib/Border.jwc
deleted file mode 100644
index 2fc5d5e..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/lib/Border.jwc
+++ /dev/null
@@ -1,39 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<component-specification 
-	class="org.apache.tapestry.BaseComponent" 
-	allow-informal-parameters="no">
-	
-  <parameter name="title" type="java.lang.String" required="yes"/>
-	
-  <component id="shell" type="Shell">
-    <inherited-binding name="title" parameter-name="title"/>
-    <binding name="stylesheet" expression="assets.style"/>
-  </component>
-  
-  <component id="body" type="Body"/>
-  
-  <component id="renderBody" type="RenderBody"/>
-  
-  <private-asset name="style" resource-path="/org/apache/tapestry/junit/mock/lib/style.css"/>
-  
-</component-specification>	
\ No newline at end of file
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/lib/Dumper.html b/3.0.4/junit/src/org/apache/tapestry/junit/mock/lib/Dumper.html
deleted file mode 100644
index c11caed..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/lib/Dumper.html
+++ /dev/null
@@ -1,17 +0,0 @@
-<!-- $Id$ -->
-
-<span jwcid="$content$">
-<span jwcid="border">
-
-<table>
-<tr jwcid="foreach">
-<td><span jwcid="insertIndex">0</span></td>
-<td><span jwcid="insertClass">java.lang.Double</span></td>
-<td><span jwcid="insertValue">3.14</span></td>
-</tr>
-</table>
-
-<a jwcid="refresh">refresh</a>
-
-</span>
-</span>
\ No newline at end of file
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/lib/Dumper.java b/3.0.4/junit/src/org/apache/tapestry/junit/mock/lib/Dumper.java
deleted file mode 100644
index 2396906..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/lib/Dumper.java
+++ /dev/null
@@ -1,76 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.mock.lib;
-
-import org.apache.tapestry.html.BasePage;
-
-/**
- *  Dumps out an array of objects.
- *
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *
- **/
-
-public class Dumper extends BasePage
-{
-    private Object[] _objects;
-    private Object _currentObject;
-    
-    public void detach()
-    {
-        _objects = null;
-        _currentObject = null;
-        
-        super.detach();
-    }
-    
-    public Object[] getObjects()
-    {
-        return _objects;
-    }
-    
-    public void setObjects(Object[] objects)
-    {
-        _objects = objects;
-        
-        fireObservedChange("objects", _objects);
-    }
-    
-    public Object getCurrentObject()
-    {
-        return _currentObject;
-    }
-
-    public void setCurrentObject(Object currentObject)
-    {
-        _currentObject = currentObject;
-    }
-
-    /**
-     *  Returns the class name of the current object.  OGNL has trouble
-     *  getting properties from Class objects.
-     * 
-     **/
-    
-    public String getClassName()
-    {
-        if (_currentObject == null)
-            return "<Null>";
-            
-        return _currentObject.getClass().getName();
-    }
-}
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/lib/Dumper.page b/3.0.4/junit/src/org/apache/tapestry/junit/mock/lib/Dumper.page
deleted file mode 100644
index 203eb1a..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/lib/Dumper.page
+++ /dev/null
@@ -1,52 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<page-specification
-	class="org.apache.tapestry.junit.mock.lib.Dumper">
-
-	<component id="border" type="Border">
-		<static-binding name="title">Dumper</static-binding>
-	</component>
-	
-	<component id="foreach" type="Foreach">
-		<binding name="source" expression="objects"/>
-		<binding name="value" expression="currentObject"/>
-		<static-binding name="element">tr</static-binding>
-	</component>
-	
-	<component id="insertIndex" type="Insert">
-		<binding name="value" expression="components.foreach.index"/>
-	</component>
-	
-	<component id="insertClass" type="Insert">
-		<binding name="value" expression="className"/>
-	</component>
-	
-	<component id="insertValue" type="Insert">
-		<binding name="value" expression="currentObject"/>
-	</component>
-	
-	<component id="refresh" type="PageLink">
-		<static-binding name="page">Dumper</static-binding>
-		<binding name="namespace" expression="namespace"/>
-	</component>
-	
-</page-specification>	
\ No newline at end of file
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/lib/MockLibrary.library b/3.0.4/junit/src/org/apache/tapestry/junit/mock/lib/MockLibrary.library
deleted file mode 100644
index 8762c4c..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/lib/MockLibrary.library
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-    Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE library-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<library-specification>
-	
-	<page name="Dumper" specification-path="Dumper.page"/>
-	
-	<page name="Properties" specification-path="Properties.page"/>
-
-	<component-type type="Border" specification-path="Border.jwc"/>
-	
-	<component-type type="ShowError" specification-path="ShowError.jwc"/>
-		
-</library-specification>	
\ No newline at end of file
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/lib/Properties.html b/3.0.4/junit/src/org/apache/tapestry/junit/mock/lib/Properties.html
deleted file mode 100644
index 96e5aff..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/lib/Properties.html
+++ /dev/null
@@ -1,5 +0,0 @@
-<!-- $Id$ -->
-
-<span jwcid="$content$">
-
-Page Name: [<span jwcid="@Insert" value="ognl:pageName">lib:Properties</span>]
\ No newline at end of file
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/lib/Properties.page b/3.0.4/junit/src/org/apache/tapestry/junit/mock/lib/Properties.page
deleted file mode 100644
index 731ddff..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/lib/Properties.page
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<page-specification/>
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/lib/ShowError.html b/3.0.4/junit/src/org/apache/tapestry/junit/mock/lib/ShowError.html
deleted file mode 100644
index b4d850f..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/lib/ShowError.html
+++ /dev/null
@@ -1,11 +0,0 @@
-<!-- $Id$ -->
-
-<span jwcid="$content$">
-<span jwcid="ifError">
-
-<span class="error">
-<span jwcid="insertError"Error message goes here.</span>
-</span>
-
-</span>
-</span>
\ No newline at end of file
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/lib/ShowError.jwc b/3.0.4/junit/src/org/apache/tapestry/junit/mock/lib/ShowError.jwc
deleted file mode 100644
index 20ca72e..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/lib/ShowError.jwc
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<component-specification 
-  class="org.apache.tapestry.BaseComponent"
-  allow-informal-parameters="no" allow-body="no">
-  
-  <parameter name="delegate" type="org.apache.tapestry.valid.IValidationDelegate" 
-  	required="yes"/>
-  
-  <component id="ifError" type="Conditional">
-    <binding name="condition" expression="bindings.delegate.object.hasErrors"/>
-  </component>
-  
-  <component id="insertError"  type="Delegator">
-     <binding name="delegate" expression="bindings.delegate.object.firstError"/>
-  </component>
-  
-</component-specification>
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/lib/style.css b/3.0.4/junit/src/org/apache/tapestry/junit/mock/lib/style.css
deleted file mode 100644
index 74c845f..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/lib/style.css
+++ /dev/null
@@ -1 +0,0 @@
-/*  $Id: style.css,v 1.1 2002/10/03 15:08:43 hship Exp $ */
\ No newline at end of file
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/simple/Home.html b/3.0.4/junit/src/org/apache/tapestry/junit/mock/simple/Home.html
deleted file mode 100644
index fe562cb..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/simple/Home.html
+++ /dev/null
@@ -1,13 +0,0 @@
-<span jwcid="shell">
-
-<body jwcid="body">
-
-The start of the JUnit test suite: <span jwcid="insertApplicationName">Application Name</span>.
-
-<br>
-
-PageLink: <a jwcid="link">to page Two</a>
-
-</body>
-
-</span>
\ No newline at end of file
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/simple/Home.page b/3.0.4/junit/src/org/apache/tapestry/junit/mock/simple/Home.page
deleted file mode 100644
index cfa8c8b..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/simple/Home.page
+++ /dev/null
@@ -1,38 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<page-specification class="org.apache.tapestry.html.BasePage">
-	
-	<component id="shell" type="Shell">
-		<message-binding name="title" key="title"/>
-	</component>
-	
-	<component id="body" type="Body"/>
-	
-	<component id="insertApplicationName" type="Insert">
-		<binding name="value" expression="engine.specification.name"/>
-	</component>
-	
-	<component id="link" type="PageLink">
-		<static-binding name="page">Two</static-binding>
-	</component>
-	
-</page-specification>	
\ No newline at end of file
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/simple/Home.properties b/3.0.4/junit/src/org/apache/tapestry/junit/mock/simple/Home.properties
deleted file mode 100644
index ff29399..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/simple/Home.properties
+++ /dev/null
@@ -1,3 +0,0 @@
-# $Id$
-
-title=JUnit Simple Home Page
\ No newline at end of file
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/simple/Simple.application b/3.0.4/junit/src/org/apache/tapestry/junit/mock/simple/Simple.application
deleted file mode 100644
index f588be8..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/simple/Simple.application
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-    Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE application PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<application name="JUnit Simple Application">
-	
-	<page name="Home" specification-path="/org/apache/tapestry/junit/mock/simple/Home.page"/>
-	<page name="Two" specification-path="/org/apache/tapestry/junit/mock/simple/Two.page"/>
-	
-</application>	
\ No newline at end of file
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/simple/Two.html b/3.0.4/junit/src/org/apache/tapestry/junit/mock/simple/Two.html
deleted file mode 100644
index 9b5c17e..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/simple/Two.html
+++ /dev/null
@@ -1,15 +0,0 @@
-<span jwcid="shell">
-
-<body jwcid="body">
-
-<span jwcid="ifMessage">
-Note: <span jwcid="insertMessage"/>
-</span>
-
-<p>This page contains a DirectLink: <a jwcid="link">click it</a>.
-
-<p>And a ServiceLink to <a jwcid="@ServiceLink" service="reset">reset caching</a>.
-
-</body>
-
-</span>
\ No newline at end of file
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/simple/Two.java b/3.0.4/junit/src/org/apache/tapestry/junit/mock/simple/Two.java
deleted file mode 100644
index 9d2c278..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/simple/Two.java
+++ /dev/null
@@ -1,54 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.mock.simple;
-
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.html.BasePage;
-
-/**
- *  Part of the test suite.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 2.2
- * 
- **/
-
-public class Two extends BasePage
-{
-    private String _message;
-    
-    public void detach()
-    {
-        _message = null;
-        
-        super.detach();
-    }
-    
-    public String getMessage()
-    {
-        return _message;
-    }
-
-    public void setMessage(String message)
-    {
-        _message = message;
-    }
-
-    public void go(IRequestCycle cycle)
-    {
-        setMessage("You clicked the link!");
-    }
-}
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/simple/Two.page b/3.0.4/junit/src/org/apache/tapestry/junit/mock/simple/Two.page
deleted file mode 100644
index ebb44f2..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/simple/Two.page
+++ /dev/null
@@ -1,46 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<page-specification class="org.apache.tapestry.junit.mock.simple.Two">
-	
-	<component id="shell" type="Shell">
-		<static-binding name="title" value="Page Two"/>
-		<static-binding name="doctype">
-			math SYSTEM "http://www.w3.org/Math/DTD/mathml1/mathml.dtd"
-		</static-binding>
-	</component>
-	
-	<component id="body" type="Body"/>
-	
-	<component id="ifMessage" type="Conditional">
-		<binding name="condition" expression="message"/>
-	</component>
-	
-	<component id="insertMessage" type="Insert">
-		<binding name="value" expression="message"/>
-	</component>
-	
-	<component id="link" type="DirectLink">
-		<binding name="listener" expression="listeners.go"/>
-	</component>
-
-	
-</page-specification>	
\ No newline at end of file
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/wml/ContentType.page b/3.0.4/junit/src/org/apache/tapestry/junit/mock/wml/ContentType.page
deleted file mode 100644
index 7351cc6..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/wml/ContentType.page
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE page-specification PUBLIC
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN"
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<page-specification class="org.apache.tapestry.wml.Deck">
-
-</page-specification>
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/wml/ContentType.wml b/3.0.4/junit/src/org/apache/tapestry/junit/mock/wml/ContentType.wml
deleted file mode 100644
index 9f18298..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/wml/ContentType.wml
+++ /dev/null
@@ -1 +0,0 @@
-<?xml version="1.0"?><!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.2//EN" "http://www.wapforum.org/DTD/wml12.dtd"><wml><card></card></wml>
\ No newline at end of file
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/wml/Home.java b/3.0.4/junit/src/org/apache/tapestry/junit/mock/wml/Home.java
deleted file mode 100644
index 31e030b..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/wml/Home.java
+++ /dev/null
@@ -1,47 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.mock.wml;
-
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.form.IPropertySelectionModel;
-import org.apache.tapestry.form.StringPropertySelectionModel;
-import org.apache.tapestry.wml.Deck;
-
-/**
- *  Used to test {@link org.apache.tapestry.wml} components.
- *
- *
- *  @author David Solis
- *  @version $Id$
- *  @since 3.0
- *
- **/
-
-public abstract class Home extends Deck
-{
-    public static final IPropertySelectionModel MODEL = new StringPropertySelectionModel
-            (new String[] { "option_one", "option_two", "option_three" });
-
-    public void submit(IRequestCycle cycle)
-    {
-        Result deck = (Result) cycle.getPage("Result");
-        deck.setU(getU());
-        deck.setL(getL());
-        cycle.activate(deck);
-    }
-
-    public abstract String getU();
-    public abstract String getL();
-}
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/wml/Home.page b/3.0.4/junit/src/org/apache/tapestry/junit/mock/wml/Home.page
deleted file mode 100644
index 2a1c8df..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/wml/Home.page
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE page-specification PUBLIC
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN"
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<page-specification class="org.apache.tapestry.junit.mock.wml.Home">
-
-    <context-asset name="image" path="images/image.wbmp"/>
-
-    <property-specification name="u" type="java.lang.String" persistent="yes" initial-value='"newbie"'/>
-    <property-specification name="l" type="java.lang.String" persistent="yes" initial-value='"option_one"'/>
-
-</page-specification>
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/wml/Home.wml b/3.0.4/junit/src/org/apache/tapestry/junit/mock/wml/Home.wml
deleted file mode 100644
index 82ca1bf..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/wml/Home.wml
+++ /dev/null
@@ -1,46 +0,0 @@
-<?xml version="1.0"?>
-<!-- $Id$ -->
-   <!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.2//EN"
-   "http://www.wapforum.org/DTD/wml12.dtd">
-<wml>
-
-    <template>
-        <do jwcid="@wml:Do" type="prev" label="Prev">
-            <prev/>
-        </do>
-    </template>
-
-    <card jwcid="@wml:Card" id="logo" ontimer="#main">
-        <timer jwcid="@wml:Timer" name="timer" value="20"/>
-        <p align="center">
-            <br/>
-            <img jwcid="@wml:Image" image="ognl:assets.image" alt="Image" align="middle"/>
-        </p>
-    </card>
-
-    <card jwcid="@wml:Card" id="main">
-        <onevent jwcid="@wml:OnEvent" type="onenterforward">
-            <refresh>
-                <setvar jwcid="@wml:Setvar" name="u" value="newbie"/>
-                <setvar jwcid="@wml:Setvar" name="l" value="ognl:null"/>
-            </refresh>
-        </onevent>
-        <p>
-            <input jwcid="uInput@wml:Input" name="username" value="ognl:u" emptyok="ognl:true" tabindex="ognl:1" maxlength="ognl:32" size="ognl:8" format='ognl:"*a"' title='ognl:"user"' />
-            <b jwcid="select@wml:PropertySelection" name="l" model="ognl:@org.apache.tapestry.junit.mock.wml.Home@MODEL"/>
-            <do type="options" label="Home">
-                <go jwcid="@ServiceLink" service="ognl:@org.apache.tapestry.Tapestry@HOME_SERVICE" renderer="ognl:@org.apache.tapestry.wml.GoLinkRenderer@SHARED_INSTANCE" href=""/>
-            </do>
-            <anchor title="Start">Start
-                <go jwcid="go@wml:Go" stateful="ognl:false" listener="ognl:listeners.submit" direct="ognl:false">
-                    <postfield jwcid="u@wml:Postfield" name="ognl:components.uInput.name" value="ognl:u"/>
-                    <postfield jwcid="l@wml:SelectionField" name="ognl:components.select.name" value="ognl:l"  model="ognl:components.select.model"/>
-                </go>
-            </anchor>
-        </p>
-    </card>
-    
-    <card jwcid="@Conditional" element="card" id="anotherCard" condition="ognl:true">
-    </card>
-
-</wml>
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/wml/Input.page b/3.0.4/junit/src/org/apache/tapestry/junit/mock/wml/Input.page
deleted file mode 100644
index 7351cc6..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/wml/Input.page
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE page-specification PUBLIC
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN"
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<page-specification class="org.apache.tapestry.wml.Deck">
-
-</page-specification>
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/wml/Input.wml b/3.0.4/junit/src/org/apache/tapestry/junit/mock/wml/Input.wml
deleted file mode 100644
index de28675..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/wml/Input.wml
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0"?>
-<!-- $Id$ -->
-   <!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.2//EN"
-   "http://www.wapforum.org/DTD/wml12.dtd">
-<wml>
-    <card>
-        <p>
-            <input jwcid="@wml:Input" name="fname" value="Ronnie" title="FName"/>
-            <input jwcid="@wml:Input" name="lname" title='ognl: "LName"' format="ognl:null" emptyok="ognl:false" value="ognl:null"/>
-        </p>
-    </card>
-
-</wml>
\ No newline at end of file
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/wml/Mock.application b/3.0.4/junit/src/org/apache/tapestry/junit/mock/wml/Mock.application
deleted file mode 100644
index 3e4678d..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/wml/Mock.application
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-    Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE application PUBLIC
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN"
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<application name="JUnit Mock WML Application" engine-class="org.apache.tapestry.wml.WMLEngine">
-
-    <property name="org.apache.tapestry.template-extension" value="wml"/>
-
-    <library id="wml" specification-path="/org/apache/tapestry/wml/WML.library"/>
-
-</application>
\ No newline at end of file
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/wml/NestedCard.page b/3.0.4/junit/src/org/apache/tapestry/junit/mock/wml/NestedCard.page
deleted file mode 100644
index 7351cc6..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/wml/NestedCard.page
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE page-specification PUBLIC
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN"
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<page-specification class="org.apache.tapestry.wml.Deck">
-
-</page-specification>
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/wml/NestedCard.wml b/3.0.4/junit/src/org/apache/tapestry/junit/mock/wml/NestedCard.wml
deleted file mode 100644
index 7597db7..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/wml/NestedCard.wml
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0"?>
-<!-- $Id$ -->
-   <!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.2//EN"
-   "http://www.wapforum.org/DTD/wml12.dtd">
-<wml>
-    <card jwcid="@wml:Card" id="Card">
-        <card jwcid="nestedCard@wml:Card" id="NestedCard">
-        </card>
-    </card>
-
-</wml>
\ No newline at end of file
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/wml/NestedSelect.page b/3.0.4/junit/src/org/apache/tapestry/junit/mock/wml/NestedSelect.page
deleted file mode 100644
index 7351cc6..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/wml/NestedSelect.page
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE page-specification PUBLIC
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN"
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<page-specification class="org.apache.tapestry.wml.Deck">
-
-</page-specification>
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/wml/NestedSelect.wml b/3.0.4/junit/src/org/apache/tapestry/junit/mock/wml/NestedSelect.wml
deleted file mode 100644
index 8330d62..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/wml/NestedSelect.wml
+++ /dev/null
@@ -1,15 +0,0 @@
-<?xml version="1.0"?>
-<!-- $Id$ -->
-   <!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.2//EN"
-   "http://www.wapforum.org/DTD/wml12.dtd">
-<wml>
-    <card>
-        <p>
-            <select jwcid="@wml:Select" name="a">
-                <select jwcid="nestedSelect@wml:Select" name="b">
-                </select>
-            </select>
-        </p>
-    </card>
-
-</wml>
\ No newline at end of file
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/wml/NoGo.java b/3.0.4/junit/src/org/apache/tapestry/junit/mock/wml/NoGo.java
deleted file mode 100644
index 83c91a1..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/wml/NoGo.java
+++ /dev/null
@@ -1,35 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.mock.wml;
-
-import org.apache.tapestry.wml.Deck;
-
-/**
- *  Used to test {@link org.apache.tapestry.wml.Postfield} components.
- *
- *
- *  @author David Solis
- *  @version $Id$
- *  @since 3.0
- *
- **/
-
-public class NoGo extends Deck
-{
-    public String getValue()
-    {
-        return "";
-    }
-}
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/wml/NoGo.page b/3.0.4/junit/src/org/apache/tapestry/junit/mock/wml/NoGo.page
deleted file mode 100644
index 75203c8..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/wml/NoGo.page
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE page-specification PUBLIC
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN"
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<page-specification class="org.apache.tapestry.junit.mock.wml.NoGo">
-
-    <property-specification name="u" type="java.lang.String" persistent="no"/>
-    <property-specification name="l" type="java.lang.String" persistent="no"/>
-
-</page-specification>
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/wml/NoGo.wml b/3.0.4/junit/src/org/apache/tapestry/junit/mock/wml/NoGo.wml
deleted file mode 100644
index 2935be3..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/wml/NoGo.wml
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0"?>
-<!-- $Id$ -->
-   <!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.2//EN"
-   "http://www.wapforum.org/DTD/wml12.dtd">
-<wml>
-    <card>
-        <p>
-            <postfield jwcid="orphan@wml:Postfield" value="ognl:value" name="a"/>
-        </p>
-    </card>
-
-</wml>
\ No newline at end of file
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/wml/Result.java b/3.0.4/junit/src/org/apache/tapestry/junit/mock/wml/Result.java
deleted file mode 100644
index f102cab..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/wml/Result.java
+++ /dev/null
@@ -1,38 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.mock.wml;
-
-import org.apache.tapestry.wml.Deck;
-
-/**
- *  Used to test {@link org.apache.tapestry.wml} components.
- *
- *
- *  @author David Solis
- *  @version $Id$
- *  @since 3.0
- *
- **/
-
-public abstract class Result extends Deck
-{
-    public String getTitle()
-    {
-        return "Result";
-    }
-
-    public abstract void setU(String value);
-    public abstract void setL(String value);
-}
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/wml/Result.page b/3.0.4/junit/src/org/apache/tapestry/junit/mock/wml/Result.page
deleted file mode 100644
index 2a570a8..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/wml/Result.page
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE page-specification PUBLIC
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN"
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<page-specification class="org.apache.tapestry.junit.mock.wml.Result">
-
-    <property-specification name="u" type="java.lang.String" persistent="no"/>
-    <property-specification name="l" type="java.lang.String" persistent="no"/>
-
-</page-specification>
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/wml/Result.wml b/3.0.4/junit/src/org/apache/tapestry/junit/mock/wml/Result.wml
deleted file mode 100644
index 74f1f75..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/wml/Result.wml
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0"?>
-<!-- $Id$ -->
-   <!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.2//EN"
-   "http://www.wapforum.org/DTD/wml12.dtd">
-<wml>
-    <card jwcid="@wml:Card" id="Result" title="ognl:title">
-        <p>
-            <strong><b jwcid="@Insert" value="ognl:u">Result 1</b></strong>
-            <strong><b jwcid="@Insert" value="ognl:l">Result 2</b></strong>
-        </p>
-    </card>
-</wml>
\ No newline at end of file
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/wml/Rewind.java b/3.0.4/junit/src/org/apache/tapestry/junit/mock/wml/Rewind.java
deleted file mode 100644
index 0a327f8..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/wml/Rewind.java
+++ /dev/null
@@ -1,42 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.mock.wml;
-
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.wml.Deck;
-
-/**
- *  Used to test {@link org.apache.tapestry.wml.Postfield} component.
- *
- *
- *  @author David Solis
- *  @version $Id$
- *  @since 3.0
- *
- **/
-
-public abstract class Rewind extends Deck
-{
-    public void submit(IRequestCycle cycle)
-    {
-        Result deck = (Result) cycle.getPage("Result");
-        String v = getV();
-        deck.setU(v);
-        deck.setL(v);
-        cycle.activate(deck);
-    }
-
-    public abstract String getV();
-}
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/wml/Rewind.page b/3.0.4/junit/src/org/apache/tapestry/junit/mock/wml/Rewind.page
deleted file mode 100644
index bf448da..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/wml/Rewind.page
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE page-specification PUBLIC
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN"
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<page-specification class="org.apache.tapestry.junit.mock.wml.Rewind">
-
-    <property-specification name="u" type="java.lang.String" persistent="yes"/>
-    <property-specification name="v" type="java.lang.String" persistent="yes"/>
-
-</page-specification>
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/wml/Rewind.wml b/3.0.4/junit/src/org/apache/tapestry/junit/mock/wml/Rewind.wml
deleted file mode 100644
index 1588139..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/wml/Rewind.wml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0"?>
-<!-- $Id$ -->
-   <!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.2//EN"
-   "http://www.wapforum.org/DTD/wml12.dtd">
-<wml>
-    <card id="Postfield">
-        <onevent type="onenterforward">
-            <refresh>
-                <setvar jwcid="@wml:Setvar" name="u" value="UUU"/>
-                <setvar jwcid="@wml:Setvar" name="v" value="VVV"/>
-            </refresh>
-        </onevent>
-        <p>
-            <go jwcid="g@wml:Go" listener="ognl:listeners.submit" href="">
-                <postfield jwcid="u@wml:Postfield" value="ognl:u" name="u"/>
-            </go>
-            <go jwcid="h@wml:Go" listener="ognl:listeners.submit" direct="ognl:false" href="">
-                <postfield jwcid="v@wml:Postfield" value="ognl:v" name="v"/>
-            </go>
-        </p>
-    </card>
-
-</wml>
\ No newline at end of file
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/wml/Select.java b/3.0.4/junit/src/org/apache/tapestry/junit/mock/wml/Select.java
deleted file mode 100644
index 622a417..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/wml/Select.java
+++ /dev/null
@@ -1,46 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.mock.wml;
-
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.wml.Deck;
-
-/**
- *  Used to test {@link org.apache.tapestry.wml} components.
- *
- *
- *  @author David Solis
- *  @version $Id$
- *  @since 3.0
- *
- **/
-
-public abstract class Select extends Deck
-{
-    public static final String MALE_OPTION = "Male";
-    public static final String FEMALE_OPTION = "Female";
-
-    public void submit(IRequestCycle cycle)
-    {
-        Result deck = (Result) cycle.getPage("Result");
-        deck.setU(getSex() + " " + getIncome());
-        deck.setL(getHobbies());
-        cycle.activate(deck);
-    }
-
-    public abstract String getSex();
-    public abstract String getIncome();
-    public abstract String getHobbies();
-}
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/wml/Select.page b/3.0.4/junit/src/org/apache/tapestry/junit/mock/wml/Select.page
deleted file mode 100644
index b127651..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/wml/Select.page
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE page-specification PUBLIC
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN"
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<page-specification class="org.apache.tapestry.junit.mock.wml.Select">
-
-    <property-specification name="sex" type="java.lang.String" persistent="yes"/>
-    <property-specification name="income" type="java.lang.String" persistent="yes"/>
-    <property-specification name="hobbies" type="java.lang.String" persistent="yes"/>
-
-</page-specification>
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/wml/Select.wml b/3.0.4/junit/src/org/apache/tapestry/junit/mock/wml/Select.wml
deleted file mode 100644
index 594caca..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/wml/Select.wml
+++ /dev/null
@@ -1,88 +0,0 @@
-<?xml version="1.0"?>
-<!-- $Id$ -->
-   <!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.2//EN"
-   "http://www.wapforum.org/DTD/wml12.dtd">
-
-<wml>
-
-    <card jwcid="@wml:Card" id="Select">
-        <p>
-            Please tell us about:
-            <select jwcid="select@wml:Select" value="ognl:0" title="main">
-                <p jwcid="@wml:GenericLink" anchor="sexcard" renderer="ognl:@org.apache.tapestry.wml.OptionRenderer@SHARED_INSTANCE" href="" value="0"> Your sex: $sex </p>
-                <p jwcid="@wml:GenericLink" anchor="incomecard" renderer="ognl:@org.apache.tapestry.wml.OptionRenderer@SHARED_INSTANCE" href="" value="1"> Your income: $income </p>
-                <option jwcid="@wml:Option" onpick="#hobbiescard" value="2"> Your hobbies </option>
-            </select>
-        </p>
-        <do type="accept">
-            <go jwcid="go@wml:Go" listener="ognl:listeners.submit" direct="ognl:false" href="">
-                <postfield jwcid="sex@wml:Postfield" name="sex" value="ognl:sex"/>
-                <postfield jwcid="income@wml:Postfield" name="income" value="ognl:income"/>
-                <postfield jwcid="hobbies@wml:Postfield" name="hobbies" value="ognl:hobbies"/>
-            </go>
-        </do>
-    </card>
-
-    <!-- sex data entry -->
-
-    <card jwcid="@wml:Card" id="sexcard">
-        <p>
-            What is your sex?
-            <select jwcid="sexSelect@wml:Select" name="ognl:components.sex.varName" title="sex">
-                <option jwcid="@wml:Option" value="ognl:@org.apache.tapestry.junit.mock.wml.Select@MALE_OPTION"> Male </option>
-                <option jwcid="@wml:Option" value="ognl:@org.apache.tapestry.junit.mock.wml.Select@FEMALE_OPTION"> Female </option>
-            </select>
-        </p>
-    </card>
-
-    <!-- income data entry -->
-
-    <card jwcid="@wml:Card" id="incomecard">
-        <p>
-            How much do you make?
-            <select jwcid="incomeSelect@wml:Select" name="ognl:components.income.varName" title="income">
-                <option jwcid="@wml:Option" value="$10-50K"> $$10-25K </option>
-                <option jwcid="@wml:Option" value="$25-50K"> $$25-50K </option>
-                <option jwcid="@wml:Option" value="$50-100K"> $$50-100K </option>
-                <option jwcid="@wml:Option" value="Over $100K"> Over $$100K </option>
-            </select>
-        </p>
-    </card>
-
-    <!-- hobbies data entry -->
-
-    <card jwcid="@wml:Card" id="hobbiescard">
-        <p>
-            Do you have hobbies?
-            <select jwcid="hobbiesSelect@wml:Select" name="ognl:components.hobbies.varName" multiple="true" title="hobbies">
-
-                <optgroup title="Sports">
-                    <option jwcid="@wml:Option" value="Skiing">    Skiing </option>
-                    <option jwcid="@wml:Option" value="Tennis">    Tennis </option>
-                    <option jwcid="@wml:Option" value="Skydiving"> Skydiving </option>
-                </optgroup>
-
-                <optgroup title="Culture">
-                    <option jwcid="@wml:Option" value="Books"> Books </option>
-                    <option jwcid="@wml:Option" value="Plays"> Plays </option>
-                    <option jwcid="@wml:Option" value="Opera"> Opera </option>
-                    <option jwcid="@wml:Option" value="Films"> Films </option>
-                </optgroup>
-
-                <optgroup title="Social Activities">
-                    <option jwcid="@wml:Option" value="Food/Wine"> Food/Wine </option>
-                    <option jwcid="@wml:Option" value="Dancing">   Dancing </option>
-                    <option jwcid="@wml:Option" value="Traveling"> Traveling </option>
-                </optgroup>
-            </select>
-        </p>
-    </card>
-
-    <card jwcid="@wml:Card" id="unreachable">
-        <p>
-            <select>
-                <option jwcid="@wml:Option" value="ognl:null"></option>
-            </select>
-        </p>
-    </card>
-</wml>
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/wml/Stale.java b/3.0.4/junit/src/org/apache/tapestry/junit/mock/wml/Stale.java
deleted file mode 100644
index e247f92..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/wml/Stale.java
+++ /dev/null
@@ -1,37 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.mock.wml;
-
-import org.apache.tapestry.ApplicationRuntimeException;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.wml.Deck;
-
-/**
- *  Used to test {@link org.apache.tapestry.StaleSessionException}, {@link org.apache.tapestry.wml.WMLEngine}.
- *
- *
- *  @author David Solis
- *  @version $Id$
- *  @since 3.0
- *
- **/
-
-public class Stale extends Deck
-{
-    public void noop(IRequestCycle cycle)
-    {
-        throw new ApplicationRuntimeException("noop listener should not be reachable.");
-    }
-}
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/wml/Stale.page b/3.0.4/junit/src/org/apache/tapestry/junit/mock/wml/Stale.page
deleted file mode 100644
index a77332e..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/wml/Stale.page
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE page-specification PUBLIC
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN"
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<page-specification class="org.apache.tapestry.junit.mock.wml.Stale">
-
-</page-specification>
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/wml/Stale.wml b/3.0.4/junit/src/org/apache/tapestry/junit/mock/wml/Stale.wml
deleted file mode 100644
index 0065845..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/wml/Stale.wml
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0"?>
-<!-- $Id$ -->
-   <!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.2//EN"
-   "http://www.wapforum.org/DTD/wml12.dtd">
-<wml>
-    <template>
-        <do jwcid="@wml:Do" type="prev">
-            <prev/>
-        </do>
-    </template>
-
-    <card jwcid="@wml:Card" id="StaleSession">
-    <p>
-        <anchor title="DirectLink"> DirectLink that will trigger a StaleSessionException.
-            <go jwcid="directLink@DirectLink" listener="ognl:listeners.noop" renderer="ognl:@org.apache.tapestry.wml.GoLinkRenderer@SHARED_INSTANCE" href=""/>
-        </anchor>
-        <anchor title="ActionLink"> ActionLink that will trigger a StaleSessionException.
-            <go jwcid="actionLink@ActionLink" listener="ognl:listeners.noop" renderer="ognl:@org.apache.tapestry.wml.GoLinkRenderer@SHARED_INSTANCE" href=""/>
-        </anchor>
-        <anchor title="Go">Go that will trigger a StaleSessionException.
-            <go jwcid="go@wml:Go" listener="ognl:listeners.noop" href="">
-            </go>
-        </anchor>
-    </p>
-    </card>
-
-</wml>
\ No newline at end of file
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/wml/Timer.page b/3.0.4/junit/src/org/apache/tapestry/junit/mock/wml/Timer.page
deleted file mode 100644
index 7351cc6..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/wml/Timer.page
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE page-specification PUBLIC
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN"
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<page-specification class="org.apache.tapestry.wml.Deck">
-
-</page-specification>
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/mock/wml/Timer.wml b/3.0.4/junit/src/org/apache/tapestry/junit/mock/wml/Timer.wml
deleted file mode 100644
index a4c80b1..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/mock/wml/Timer.wml
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0"?>
-<!-- $Id$ -->
-   <!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.2//EN"
-   "http://www.wapforum.org/DTD/wml12.dtd">
-<wml>
-    <card>
-        <p>
-            <timer jwcid="@wml:Timer" name="timer_one" value="ognl:20"/>
-            <timer jwcid="@wml:Timer" name="timer_two" value="ognl:null"/>
-        </p>
-    </card>
-
-</wml>
\ No newline at end of file
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/parse/AllStatic.html b/3.0.4/junit/src/org/apache/tapestry/junit/parse/AllStatic.html
deleted file mode 100644
index 0c76a66..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/parse/AllStatic.html
+++ /dev/null
@@ -1,12 +0,0 @@
-<!-- Comment at the start! -->
-<html>
-<head>
-<title>All Static</title>
-</head>
-<body>
-This file contains only static HTML.
-
-<!-- Comment in the middle. -->
-</body>
-</html>
-
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/parse/AttributeAndBody.page b/3.0.4/junit/src/org/apache/tapestry/junit/parse/AttributeAndBody.page
deleted file mode 100644
index f6d8ece..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/parse/AttributeAndBody.page
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0"?>
-<!--
-    Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-    	
-<page-specification>
-
-	<component id="c" type="Insert">
-		<static-binding name="fred" value="error">flintstone</static-binding>
-	</component>
-	
-</page-specification>
-
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/parse/BasicContent.html b/3.0.4/junit/src/org/apache/tapestry/junit/parse/BasicContent.html
deleted file mode 100644
index 093e8d5..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/parse/BasicContent.html
+++ /dev/null
@@ -1,14 +0,0 @@
-<!-- A basic test to ensure that the $content$ special id works. -->
-
-<table>
-	<tr>
-		<td jwcid="$content$">
-		
-This is the real content.
-
-Here's a nested component: <span jwcid="nested"/>.
-
-		</td>
-	</tr>
-</table>
-
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/parse/BasicLocalization.html b/3.0.4/junit/src/org/apache/tapestry/junit/parse/BasicLocalization.html
deleted file mode 100644
index 50b9285..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/parse/BasicLocalization.html
+++ /dev/null
@@ -1,5 +0,0 @@
-Some text before the localization.
-
-<span key="the.localization.key">sample text</span>
-
-Text after the localization.
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/parse/BasicRemove.html b/3.0.4/junit/src/org/apache/tapestry/junit/parse/BasicRemove.html
deleted file mode 100644
index ae566e6..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/parse/BasicRemove.html
+++ /dev/null
@@ -1,29 +0,0 @@
-<html>
-<head>
-<title>Basic Remove</title>
-</head>
-<body>
-This is an example of the use of the special jwcid, $remove$.
-
-<table jwcid="$remove$">
-	<tr>
-		<td>Removed!</td>
-	</tr>
-</table>
-
-<p>Next, we remove one row from a table:
-
-<table>
-	<tr>
-		<td>Row 1</td>
-	</tr>
-	<tr jwcid="$Remove$">
-		<td>Row 2 (removed)</td>
-	</tr>
-<span jwcid="e">
-	<tr jwcid="row">
-		<td>Row 3</td>
-	</tr>
-</span>
-</table>
-
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/parse/BodyRemove.html b/3.0.4/junit/src/org/apache/tapestry/junit/parse/BodyRemove.html
deleted file mode 100644
index bb04907..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/parse/BodyRemove.html
+++ /dev/null
@@ -1,23 +0,0 @@
-<html>
-<head>
-<title>Body Remove</title>
-</head>
-<body>
-
-Pretty typical; the producer creates a mockup of a PropertySelection component.
-
-<form jwcid="form">
-
-	<select jwcid="inputType">
-		<option>foo
-		<option>bar
-		<option>baz
-	</select>
-</form>
-
-</body>
-</html>
-
-
-
-
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/parse/Complex.html b/3.0.4/junit/src/org/apache/tapestry/junit/parse/Complex.html
deleted file mode 100644
index 1a97479..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/parse/Complex.html
+++ /dev/null
@@ -1,18 +0,0 @@
-A complex mix, simulating what a tabular output table would look like.
-
-<span jwcid="ifData">
-
-<table>
-	<tr>
-		<th>Name</th>
-		<th>Age</th>
-	</tr>
-<span jwcid="e">
-	<tr jwcid="row">
-		<td><span jwcid="insertName"/></td>
-		<td><span jwcid="insertAge"/></td>
-	</tr>
-</span>
-</table>
-
-</span>
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/parse/ComponentInsideLocalization.html b/3.0.4/junit/src/org/apache/tapestry/junit/parse/ComponentInsideLocalization.html
deleted file mode 100644
index 51ae0c4..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/parse/ComponentInsideLocalization.html
+++ /dev/null
@@ -1,14 +0,0 @@
-Test case where a component is inside the removed block of an invisible localization.
-
-<span jwcid="outercomponent">
-
-<span key="danger.will.robinson">
-
-Some text.
-
-<span jwcid="innercomponent"/>
-
-More text.
-
-</span>
-</span>
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/parse/ComponentType.application b/3.0.4/junit/src/org/apache/tapestry/junit/parse/ComponentType.application
deleted file mode 100644
index af60274..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/parse/ComponentType.application
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0"?>
-<!--
-    Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE application PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-     	
-<application>
-
-	<component-type type="Fred" specification-path="/path/Fred.jwc"/>
-	
-</application>
-
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/parse/ConfigureValue.library b/3.0.4/junit/src/org/apache/tapestry/junit/parse/ConfigureValue.library
deleted file mode 100644
index c0f8e4b..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/parse/ConfigureValue.library
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0"?>
-<!--
-    Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!--$Id$-->
-<!DOCTYPE library-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<library-specification>
-
-	<extension name="map" class="java.util.HashMap">
-		<configure property-name="fred" value="flintstone"/>
-	</extension>
-
-</library-specification>
-	
\ No newline at end of file
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/parse/DuplicatePropertySpecification.page b/3.0.4/junit/src/org/apache/tapestry/junit/parse/DuplicatePropertySpecification.page
deleted file mode 100644
index c9e5f50..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/parse/DuplicatePropertySpecification.page
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0"?>
-<!--
-    Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-     	
-<page-specification>
-
-<property-specification name="bool" type="boolean"/>
-<property-specification name="persist" persistent="yes"/>
-<property-specification name="init" initial-value="pageName"/>
-<property-specification name="bool" type="java.lang.Boolean"/>
-
-</page-specification>
-
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/parse/DuplicateTagAttribute.html b/3.0.4/junit/src/org/apache/tapestry/junit/parse/DuplicateTagAttribute.html
deleted file mode 100644
index 24e8a27..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/parse/DuplicateTagAttribute.html
+++ /dev/null
@@ -1,13 +0,0 @@
-This file tests for a duplicate tag attribute.
-
-<input jwcid="@TextField" value="ognl:emailAddress" type="text" name="emailaddress" id="emailaddress"  size="10" maxlength="25" value='' />
-
-One possible scenario, designer gives developer a page with a long <input> tag.
-Developer adds jwcid and ognl expression for 'value' but misses the fact that
-there is already a 'value' attribute. Unless this case was handled as an error, the TemplateParser
-will silently throw away the first 'value' attribute and bind the parameter statically.
-This hurts in, say, a TextField as Tapestry dumps an exception page when it tries to update
-value's binding, which is static and does not allow this.
-    
-Tough to track down as, in this case, the stack trace shows that AbstractBinding.setString()
-throwing the exception. This kills newbies!
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/parse/DuplicateTagAttributeII.html b/3.0.4/junit/src/org/apache/tapestry/junit/parse/DuplicateTagAttributeII.html
deleted file mode 100644
index ef0c1db..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/parse/DuplicateTagAttributeII.html
+++ /dev/null
@@ -1,15 +0,0 @@
-This file tests for a duplicate tag attribute.
-
-<input jwcid="@TextField" value='ognl:emailAddress' type="text" name="emailaddress" id="emailaddress"  size="10" maxlength="25" value="" />
-
-One possible scenario, designer gives developer a page with a long <input> tag.
-Developer adds jwcid and ognl expression for 'value' but misses the fact that
-there is already a 'value' attribute. Unless this case was handled as an error, the TemplateParser
-will silently throw away the first 'value' attribute and bind the parameter statically.
-This hurts in, say, a TextField as Tapestry dumps an exception page when it tries to update
-value's binding, which is static and does not allow this.
-    
-Tough to track down as, in this case, the stack trace shows that AbstractBinding.setString()
-throwing the exception. This kills newbies!
-    
-In case you are wondering...this file is slightly different than the DuplicateTagAttribute.html. Hint: check the quotes for 'value'
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/parse/EmptyLocalization.html b/3.0.4/junit/src/org/apache/tapestry/junit/parse/EmptyLocalization.html
deleted file mode 100644
index bef3d3f..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/parse/EmptyLocalization.html
+++ /dev/null
@@ -1,5 +0,0 @@
-This is a test for a localization using the abbreviated form.
-
-<span key="empty.localization"/>
-
-More text after the span.
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/parse/EncodedExpressionCharacters.html b/3.0.4/junit/src/org/apache/tapestry/junit/parse/EncodedExpressionCharacters.html
deleted file mode 100644
index 89a3d89..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/parse/EncodedExpressionCharacters.html
+++ /dev/null
@@ -1,2 +0,0 @@
-<!-- $Id: EncodedExpressionCharacters.html,v 1.1 2003/03/05 23:19:37 hlship Exp $ -->
-<span jwcid="@Insert" value="ognl: { &quot;&lt;&amp;&gt;&quot;, &quot;Fun!&quot; }  "/>
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/parse/IgnoredContent.html b/3.0.4/junit/src/org/apache/tapestry/junit/parse/IgnoredContent.html
deleted file mode 100644
index f4a0009..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/parse/IgnoredContent.html
+++ /dev/null
@@ -1,15 +0,0 @@
-Test that the content block can't be in an ignored block.
-
-<span Jwcid="$remove$">
-
-<table>
-	<tr>
-		<td jwcId="$Content$">
-		
-		The real content.
-		
-		</td>
-	</tr>
-</table>
-</span>
-
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/parse/ImplicitComponents.html b/3.0.4/junit/src/org/apache/tapestry/junit/parse/ImplicitComponents.html
deleted file mode 100644
index 9f96dd0..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/parse/ImplicitComponents.html
+++ /dev/null
@@ -1,17 +0,0 @@
-
-<!-- Test for implcit components, named and anonymous. -->
-
-<body jwcid="@Body">
-
-<table>
-<tr jwcid="loop@Foreach"
-	element="tr"
-	source="ognl:items">
-	<td><span jwcid="@Insert" value="ognl:components.loop.value.name"/></td>
-	<td><span jwcid="@Insert" value="ognl:components.loop.value.price"/></td>
-</tr>
-</table>
-
-<span jwcid="@contrib:InspectorButton"/>
-
-</body>
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/parse/IncompleteClose.html b/3.0.4/junit/src/org/apache/tapestry/junit/parse/IncompleteClose.html
deleted file mode 100644
index 7b4980c..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/parse/IncompleteClose.html
+++ /dev/null
@@ -1,6 +0,0 @@
-<html>
-<body>
-
-Tests for an incomplete close tag.
-
-</
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/parse/InvalidAssetName.jwc b/3.0.4/junit/src/org/apache/tapestry/junit/parse/InvalidAssetName.jwc
deleted file mode 100644
index 56f161f..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/parse/InvalidAssetName.jwc
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<component-specification class="org.apache.tapestry.html.BasePage">
-
-  <component id="border" type="Border"/>
-  
-  <private-asset name="validName" resource-path="/foo/bar/Baz.gif"/>
-  <private-asset name="in.valid" resource-path="/foo/bar/Fugo.gif"/>
-  
-</component-specification>
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/parse/InvalidComponentAlias.application b/3.0.4/junit/src/org/apache/tapestry/junit/parse/InvalidComponentAlias.application
deleted file mode 100644
index a5077ac..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/parse/InvalidComponentAlias.application
+++ /dev/null
@@ -1,55 +0,0 @@
-<?xml version="1.0"?>
-<!--
-    Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!--$Id$-->
-<!DOCTYPE application PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<application name="Tapestry Component Workbench">
-  <property name="org.apache.tapestry.visit-class">tutorial.workbench.Visit</property>
-  
-  <service name="home" class="tutorial.workbench.WorkbenchHomeService"/>
-  <service name="chart" class="tutorial.workbench.chart.ChartService"/>
-  
-  <page name="Home" specification-path="/tutorial/workbench/Home.jwc"/>
-  
-  <page name="Palette" specification-path="/tutorial/workbench/palette/Palette.jwc"/>
-  <page name="palette.Results" specification-path="/tutorial/workbench/palette/Results.jwc"/>
-  
-  <page name="Localization" specification-path="/tutorial/workbench/localization/Localization.jwc"/>
-  <page name="localization.Change" 
-  	specification-path="/tutorial/workbench/localization/Change.jwc"/>
-    
-  <page name="Fields" specification-path="/tutorial/workbench/fields/Fields.jwc"/>
-  <page name="fields.Results" specification-path="/tutorial/workbench/fields/Results.jwc"/>
-  
-  <page name="Upload" specification-path="/tutorial/workbench/upload/Upload.jwc"/>
-  <page name="upload.Results" specification-path="/tutorial/workbench/upload/Results.jwc"/>
-
-  <page name="Chart" specification-path="/tutorial/workbench/chart/Chart.jwc"/>
-
-  <page name="Redirect" specification-path="/tutorial/workbench/Redirect.jwc"/>
-
-  <page name="ExceptionTab" specification-path="/tutorial/workbench/ExceptionTab.jwc"/>
-  <page name="ErrorFest" specification-path="/tutorial/workbench/ErrorFest.jwc"/>
-
-  <component-type type="Border" specification-path="/tutorial/workbench/components/Border.jwc"/>
-  <component-type type="Palette" specification-path="/org/apache/tapestry/contrib/palette/Palette.jwc"/>
-  <component-type type="ShowError" specification-path="/tutorial/workbench/components/ShowError.jwc"/>
-  <component-type type="Invalid$Component" specification-path="/it/just/doesnt/matter/Invalid.jwc"/>
-  
-</application>
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/parse/InvalidComponentId.jwc b/3.0.4/junit/src/org/apache/tapestry/junit/parse/InvalidComponentId.jwc
deleted file mode 100644
index 780ab0b..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/parse/InvalidComponentId.jwc
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<component-specification class="org.apache.tapestry.html.BasePage">
-
-  <component id="border" type="Border"/>
-  
-  <component id="in.valid" type="Unknown"/>
-  
-</component-specification>
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/parse/InvalidDynamicNesting.html b/3.0.4/junit/src/org/apache/tapestry/junit/parse/InvalidDynamicNesting.html
deleted file mode 100644
index b7ce6b2..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/parse/InvalidDynamicNesting.html
+++ /dev/null
@@ -1,14 +0,0 @@
-<html>
-<title>Invalid dynamic nesting</title>
-</html>
-<body>
-
-Here we're going to test what happens when tags are mis-matched.
-
-<span jwcid="dynamic">
-
-<!-- Note the missing close tag -->
-
-</body>
-</html>
-
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/parse/InvalidExtensionName.application b/3.0.4/junit/src/org/apache/tapestry/junit/parse/InvalidExtensionName.application
deleted file mode 100644
index 213bc92..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/parse/InvalidExtensionName.application
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0"?>
-<!--
-    Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!--$Id$-->
-<!DOCTYPE application PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<application name="Tapestry Component Workbench">
-  <property name="org.apache.tapestry.visit-class" value="tutorial.workbench.Visit"/>
-  
-  <extension name="Invalid$Extension" class="not.ever.Used"/>
-    
-</application>
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/parse/InvalidLibraryId.library b/3.0.4/junit/src/org/apache/tapestry/junit/parse/InvalidLibraryId.library
deleted file mode 100644
index fc71f7a..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/parse/InvalidLibraryId.library
+++ /dev/null
@@ -1,38 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-    Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE library-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<!--  Specification used in a series of tests to check successful parsing of a LibrarySpecification. -->
-	
-<library-specification>
-
-	<service name="service1" class="Service1"/>
-	<service name="service2" class="Service2"/>
-	
-	<page name="FirstPage" specification-path="/FirstPage.page"/>
-	<page name="SecondPage" specification-path="/SecondPage.page"/>
-	
-	<component-type type="FirstComponent" specification-path="/FirstComponent.jwc"/>
-	<component-type type="SecondComponent" specification-path="/SecondComponent.jwc"/>
-	
-	<library id="lib1" specification-path="/Library1.library"/>
-	<library id="in.valid" specification-path="/Library2.library"/>
-
-</library-specification>
\ No newline at end of file
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/parse/InvalidPageName.application b/3.0.4/junit/src/org/apache/tapestry/junit/parse/InvalidPageName.application
deleted file mode 100644
index 0831fdd..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/parse/InvalidPageName.application
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0"?>
-<!--
-    Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE application PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<application name="Invalid Page Name">
-	
-  <page name="Home" specification-path="/tutorial/workbench/Home.jwc"/>
-  
-  <page name="in$valid" specification-path="/it/just/doesn't/matter.jwc"/>
-  
-</application>
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/parse/InvalidParameterName.jwc b/3.0.4/junit/src/org/apache/tapestry/junit/parse/InvalidParameterName.jwc
deleted file mode 100644
index def68e0..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/parse/InvalidParameterName.jwc
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-  
-<component-specification class="org.apache.tapestry.BaseComponent">
-
-<parameter name="in-valid"/>
-
-</component-specification>
-
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/parse/InvalidPublicId.application b/3.0.4/junit/src/org/apache/tapestry/junit/parse/InvalidPublicId.application
deleted file mode 100644
index bb5b308..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/parse/InvalidPublicId.application
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0"?>
-<!--
-    Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!--$Id$-->
-<!DOCTYPE application PUBLIC 
-	"-//Howard Lewis Ship//Tapestry Specification 1.2//EN" 
-	"Tapestry_1_2.dtd">
-	
-<application name="Tapestry Component Workbench" engine-class="foo.bar.Baz"/>
\ No newline at end of file
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/parse/InvalidServiceName.application b/3.0.4/junit/src/org/apache/tapestry/junit/parse/InvalidServiceName.application
deleted file mode 100644
index 7ba3982..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/parse/InvalidServiceName.application
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0"?>
-<!--
-    Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE application PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<application name="Invalid Page Name">
-	
-  <service name="home" class="tutorial.workbench.WorkbenchHomeService"/>
-  <service name="chart" class="tutorial.workbench.chart.ChartService"/>
-  <service name="in$valid" class="it.just.doesnt.matter.Service"/>
-	
-  <page name="Home" specification-path="/tutorial/workbench/Home.jwc"/>
-  
-</application>
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/parse/ListenerBinding.page b/3.0.4/junit/src/org/apache/tapestry/junit/parse/ListenerBinding.page
deleted file mode 100644
index e541ea9..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/parse/ListenerBinding.page
+++ /dev/null
@@ -1,33 +0,0 @@
-<?xml version="1.0"?>
-<!--
-    Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-     	
-<page-specification>
-
-  <component id="c" type="DirectLink">
-  	<listener-binding name="listener" language="jython">
-if page.isFormInputValid():
-  cycle.page = "Results"
-else:
-  page.message = "Please fix errors before continuing.";</listener-binding>
-  </component>
-  	  	
-</page-specification>
-
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/parse/LocalizationAttributes.html b/3.0.4/junit/src/org/apache/tapestry/junit/parse/LocalizationAttributes.html
deleted file mode 100644
index f65c6b7..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/parse/LocalizationAttributes.html
+++ /dev/null
@@ -1,3 +0,0 @@
-A test to see if attributes for the localization are parsed.
-
-<Span Fred=Wilma Key="localization.with.attributes" alpha="beta"/>
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/parse/MessageBeanInitializer.page b/3.0.4/junit/src/org/apache/tapestry/junit/parse/MessageBeanInitializer.page
deleted file mode 100644
index 8f3402c..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/parse/MessageBeanInitializer.page
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0"?>
-<!--
-    Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-     	
-<page-specification>
-
-	<bean name="fred" class="java.util.HashMap">
-		<set-message-property name="barney" key="rubble"/>
-	</bean>
-	
-</page-specification>
-
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/parse/MismatchedCloseTags.html b/3.0.4/junit/src/org/apache/tapestry/junit/parse/MismatchedCloseTags.html
deleted file mode 100644
index 783e397..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/parse/MismatchedCloseTags.html
+++ /dev/null
@@ -1,12 +0,0 @@
-A common error is to not match close tags properly.  You can omit them pretty
-freely, but don't match 'em wrong!
-
-<table>
-	<tr>
-		<th>Heading</th>
-	</tr>
-	<tr>
-		<td>The error --} </th>
-	</tr>
-</table>
-
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/parse/MissingAttributeValue.html b/3.0.4/junit/src/org/apache/tapestry/junit/parse/MissingAttributeValue.html
deleted file mode 100644
index 795060c..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/parse/MissingAttributeValue.html
+++ /dev/null
@@ -1,11 +0,0 @@
-In this test, we show an attribute and omit the value.
-
-This is valid:
-
-<select multiple>
-
-This is not:
-
-<img src=>
-
-
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/parse/MissingDoctype.application b/3.0.4/junit/src/org/apache/tapestry/junit/parse/MissingDoctype.application
deleted file mode 100644
index b79b9c0..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/parse/MissingDoctype.application
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0"?>
-<!--
-    Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!--$Id$-->
-
-<application name="Tapestry Component Workbench"/>
- 
\ No newline at end of file
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/parse/MissingRequiredExtendedAttribute.page b/3.0.4/junit/src/org/apache/tapestry/junit/parse/MissingRequiredExtendedAttribute.page
deleted file mode 100644
index 1d90ba3..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/parse/MissingRequiredExtendedAttribute.page
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0"?>
-<!--
-    Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-     	
-<page-specification>
-
-	<component id="c" type="Insert">
-		<binding name="fred"/>
-	</component>
-	
-</page-specification>
-
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/parse/MixedNesting.html b/3.0.4/junit/src/org/apache/tapestry/junit/parse/MixedNesting.html
deleted file mode 100644
index 60f9cfa..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/parse/MixedNesting.html
+++ /dev/null
@@ -1,9 +0,0 @@
-Tests for mixed nesting; that is, the jwc tags are intermixed with other tags.
-
-<table>
-  <span jwcid="row">
-  	<td> Some data. </td>
-  	<td> <img src="/foo/bar/baz.gif"> </td>
-  </span>
-</table>
-
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/parse/NestedLocalizations.html b/3.0.4/junit/src/org/apache/tapestry/junit/parse/NestedLocalizations.html
deleted file mode 100644
index 25a5391..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/parse/NestedLocalizations.html
+++ /dev/null
@@ -1,5 +0,0 @@
-This is some outer text.
-
-<span key="outer">
-	<span key="inner"/>
-</span>
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/parse/NestedRemove.html b/3.0.4/junit/src/org/apache/tapestry/junit/parse/NestedRemove.html
deleted file mode 100644
index 0ae5c82..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/parse/NestedRemove.html
+++ /dev/null
@@ -1,8 +0,0 @@
-A test to make sure a removed blocks can't be nested.
-
-<span jwcid="$remove$">
-	<span jwcid="$remove$">
-		nested remove content.
-	</span>
-</span>
-
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/parse/NulledApplication.application b/3.0.4/junit/src/org/apache/tapestry/junit/parse/NulledApplication.application
deleted file mode 100644
index 058cd20..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/parse/NulledApplication.application
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0"?>
-<!--
-    Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE application PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-
-<!-- Show that an application specification can omit
-     the name and engine-class attributes. -->
-     	
-<application/>
-
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/parse/NulledComponent.jwc b/3.0.4/junit/src/org/apache/tapestry/junit/parse/NulledComponent.jwc
deleted file mode 100644
index e4c4d60..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/parse/NulledComponent.jwc
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-     	
-<component-specification/>
-
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/parse/NulledPage.page b/3.0.4/junit/src/org/apache/tapestry/junit/parse/NulledPage.page
deleted file mode 100644
index 3394073..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/parse/NulledPage.page
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-     	
-<page-specification/>
-
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/parse/PropertySpecifications.page b/3.0.4/junit/src/org/apache/tapestry/junit/parse/PropertySpecifications.page
deleted file mode 100644
index cec8456..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/parse/PropertySpecifications.page
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0"?>
-<!--
-    Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-     	
-<page-specification>
-
-<property-specification name="bool" type="boolean"/>
-<property-specification name="persist" persistent="yes"/>
-<property-specification name="init" initial-value="pageName"/>
-
-</page-specification>
-
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/parse/PropertyValue.page b/3.0.4/junit/src/org/apache/tapestry/junit/parse/PropertyValue.page
deleted file mode 100644
index f891141..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/parse/PropertyValue.page
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0"?>
-<!--
-    Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-     	
-<page-specification>
-
-	<property name="barney" value="rubble"/>
-
-	<property name="wilma" value="flintstone"/>
-	
-</page-specification>
-
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/parse/RemovedComponent.html b/3.0.4/junit/src/org/apache/tapestry/junit/parse/RemovedComponent.html
deleted file mode 100644
index 03781d2..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/parse/RemovedComponent.html
+++ /dev/null
@@ -1,7 +0,0 @@
-A test to make sure a component can't
-be inside a removed block.
-
-<span jwcid="$remove$">
-	<span jwcid="nested"/>
-</span>
-
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/parse/SimpleNested.html b/3.0.4/junit/src/org/apache/tapestry/junit/parse/SimpleNested.html
deleted file mode 100644
index 61c19a3..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/parse/SimpleNested.html
+++ /dev/null
@@ -1,6 +0,0 @@
-Test for simple nesting of span tags.
-
-<span jwcid="outer">
-	<span jwcid="inner"/>
-</span>
-
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/parse/SingleEmptyTag.html b/3.0.4/junit/src/org/apache/tapestry/junit/parse/SingleEmptyTag.html
deleted file mode 100644
index c9ef955..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/parse/SingleEmptyTag.html
+++ /dev/null
@@ -1,5 +0,0 @@
-This test contains a single span tag.
-
-<span jwcid="emptyTag"/>
-
-Additional text follows the span tag.
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/parse/SingleQuotes.html b/3.0.4/junit/src/org/apache/tapestry/junit/parse/SingleQuotes.html
deleted file mode 100644
index c69a778..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/parse/SingleQuotes.html
+++ /dev/null
@@ -1,14 +0,0 @@
-This test ensures that single quotes work as well as double quotes.
-
-It also checks for some looseness in terms of whitespace inside the JWC tag.
-
-<span jwcid = "first" />
-
-<span jwcid
-=
-
-'second'
-
-/
-
->
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/parse/StartWithStaticTag.html b/3.0.4/junit/src/org/apache/tapestry/junit/parse/StartWithStaticTag.html
deleted file mode 100644
index 2fc717d..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/parse/StartWithStaticTag.html
+++ /dev/null
@@ -1,13 +0,0 @@
-<html><head>
-<title>StartWithStaticTag</title>
-</head>
-<body>
-
-Starting with a static tag can mess some things up.  Putting the html and head tags together
-on the first line is a particular case that wasn't originally handled well.
-
-<span jwcid="justBecause"/>
-
-</body>
-</html>
-
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/parse/StaticBindingValue.page b/3.0.4/junit/src/org/apache/tapestry/junit/parse/StaticBindingValue.page
deleted file mode 100644
index 5ec9c2d..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/parse/StaticBindingValue.page
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0"?>
-<!--
-    Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE page-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-     	
-<page-specification>
-
-	<component id="c" type="Insert">
-		<static-binding name="fred">flintstone</static-binding>
-		<static-binding name="barney" value="rubble"/>
-		<static-binding name="rock" value="hudson"/>
-	</component>
-	
-</page-specification>
-
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/parse/StringAttributes.html b/3.0.4/junit/src/org/apache/tapestry/junit/parse/StringAttributes.html
deleted file mode 100644
index 53299f6..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/parse/StringAttributes.html
+++ /dev/null
@@ -1,3 +0,0 @@
-<!-- $Id: StringAttributes.html,v 1.1 2003/03/06 17:19:31 hlship Exp $ -->

-

-<img jwcid="@Image" image="ognl:assets.logo" alt="message:logo-title"/>

diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/parse/StringBeanInitializer.page b/3.0.4/junit/src/org/apache/tapestry/junit/parse/StringBeanInitializer.page
deleted file mode 100644
index 1562a3f..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/parse/StringBeanInitializer.page
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE page-specification PUBLIC 
-  "-//Howard Lewis Ship//Tapestry Specification 1.3//EN" 
-  "http://tapestry.sf.net/dtd/Tapestry_1_3.dtd">
-     	
-<page-specification class="org.apache.tapestry.BasePage">
-
-	<bean name="fred" class="java.util.HashMap">
-		<set-string-property name="barney" key="rubble"/>
-	</bean>
-	
-</page-specification>
-
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/parse/TagAttributes.html b/3.0.4/junit/src/org/apache/tapestry/junit/parse/TagAttributes.html
deleted file mode 100644
index b882a59..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/parse/TagAttributes.html
+++ /dev/null
@@ -1,6 +0,0 @@
-Tests that attributes for the tag come through.
-
-<span jwcid="tag" class="zip" align="right" color="#ff00ff">
-
-</span>
-
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/parse/Tapestry_1_2.dtd b/3.0.4/junit/src/org/apache/tapestry/junit/parse/Tapestry_1_2.dtd
deleted file mode 100644
index f6e3f90..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/parse/Tapestry_1_2.dtd
+++ /dev/null
@@ -1,430 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>

-<!-- $Id: Tapestry_1_2.dtd,v 1.1.2.1 2003/01/04 02:49:05 hship Exp $ -->

-<!--

-

-The DTD for Tapestry application and component specifications.

-Associated with the public identifier:

-

-	-//Howard Lewis Ship//Tapestry Specification 1.2//EN

-	

-The canonical location for the DTD is:

-

-	http://tapestry.sf.net/dtd/Tapestry_1_2.dtd

-

-For application specifications, the root element is application.

-

-For component specifications the root element is specification.

-

-This DTD is backwards compatible with the 1.1 DTD, with the following exceptions:

-- Addition of the parameter-name attribute to the parameter element

-- Addition of direction attribute to the parameter element

-- Addition of string-binding element

-

--->

-<!-- =======================================================

-Entity: attribute-flag

-

-For entity attribute that take a boolean value, defines 'yes' and 'no.

--->

-<!ENTITY % attribute-flag "(yes|no)">

-<!-- =======================================================

-Element: application

-Root element

-

-Defines a Tapestry application.

-

-Attributes:

-  name: A textual name used to uniquely identify the application.

-  engine-class:  The Java class to instantiate as the application engine.

--->

-<!ELEMENT application (description*, property*, (page|component-alias|service)*)>

-<!ATTLIST application

-  name CDATA #REQUIRED

-  engine-class CDATA #REQUIRED

->

-<!-- =======================================================

-Element: bean

-Appears in: specification

-

-Defines a JavaBean that will be used in some way by the component.  Beans

-are accessible via the components' beans property (which contains a property

-for each bean).  Beans are created as needed, and are discarded based on

-the lifecycle attribute.  Beans are typically used to extend the

-implementation of a component via aggregation.

-

-Attributes:

-  name: the name of the bean

-  class: the Java class to instantiate

-  lifecycle: when the reference to the bean should be discard

-  	"none" no lifecycle, the bean is created and returned, but not stored

-  	"request" the bean is retained until the end of the request cycle

-  	"page" the bean is retained for the lifespan of the page

-  	

-Nothing prevents a bean for storing state; however, such state will

-not be associated with any particular session (unlike persistant page

-properties).  Further, because of page pooling, subsequent requests

-from the same client may be serviced by different instances of a page and

-(therefore) different bean instances.

-

-Beans that have the "request" lifecycle may be stored into a pool

-for later re-use (in the same or different page).

-

-The bean may have its properties set.  Properties are set on both

-newly instantiated beans, and beans that are retrieved from a pool.

-

--->

-<!ELEMENT bean (description*, set-property*)>

-<!ATTLIST bean

-  name CDATA #REQUIRED

-  class CDATA #REQUIRED

-  lifecycle (none|request|page) "request"

->

-<!-- =======================================================

-Element: binding

-Appears in: component

-

-Binds a parameter of the component to a property of its container.

-

-Attributes:

-  name: The name of the component parameter to bind.

-  property-path: The property path, relative to the container, to obtain

-    the parameter value from.

--->

-<!ELEMENT binding EMPTY>

-<!ATTLIST binding

-  name CDATA #REQUIRED

-  property-path CDATA #REQUIRED

->

-<!-- =======================================================

-Element: component

-Contained by: specification

-

-Defines a component contained by the component being specified.

-

-Attribute:

-  id: A unique identifier for the component within the container.

-  type: The type of component, either a well known logical name, or the complete path

-    to the component's specification.

-  copy-of: The id of a previously defined component; this component will be a copy

-    of the other component.

-

-The Tapestry page loader ensures that either type or copy-of is specified, but not both.

--->

-<!ELEMENT component ((binding | field-binding | inherited-binding | static-binding | string-binding)*)>

-<!ATTLIST component

-  id ID #REQUIRED

-  type CDATA #IMPLIED

-  copy-of IDREF #IMPLIED

->

-<!-- =======================================================

-Element: component-alias

-Contained by: application

-

-Establishes a short logic name for a particular component that is used

-within the application.

-

-Attributes:

-  type: The logical name for the component.

-  specification-path:  The complete path to the component's specification.

--->

-<!ELEMENT component-alias EMPTY>

-<!ATTLIST component-alias

-  type CDATA #REQUIRED

-  specification-path CDATA #REQUIRED

->

-<!-- =======================================================

-Element: context-asset

-Contained by: specification

-

-An asset located in the same web application context as the running

-application.

-

-Attributes:

-  name: The name of the asset.

-  path: The path, relative to the web application context, of the resource.

--->

-<!ELEMENT context-asset EMPTY>

-<!ATTLIST context-asset

-  name CDATA #REQUIRED

-  path CDATA #REQUIRED

->

-<!-- =======================================================

-Element: description

-Appears in: application bean parameter specification

-

-Several elements may contain descriptions; these descriptions are

-optional.  The eventual goal is to provide help in some form of IDE.

-Currently, descriptions are optional and ignored.

-

-Attributes:

-  xml:lang the language that the description is expressed in.

--->

-<!ELEMENT description (#PCDATA)>

-<!ATTLIST description

-  xml:lang NMTOKEN "en"

->

-<!-- =======================================================

-Element: external-asset

-Contained by: specification

-

-Defines an asset at some external source.

-

-Attributes:

-  name: The name of the asset.

-  URL: The URL used to reference the asset.

--->

-<!ELEMENT external-asset EMPTY>

-<!ATTLIST external-asset

-  name CDATA #REQUIRED

-  URL CDATA #REQUIRED

->

-<!-- =======================================================

-Element: field-binding

-Appears in: component

-

-Binds a parameter of the component to a public static field of

-some Java object.

-

-Attributes:

-  name: The name of the component parameter to bind.

-  field-name:  The name of the field, of the form [package.]class.field.

-    The package may be ommitted if it is "java.lang".

--->

-<!ELEMENT field-binding EMPTY>

-<!ATTLIST field-binding

-  name CDATA #REQUIRED

-  field-name CDATA #REQUIRED

->

-

-<!-- =======================================================

-Element: field-value

-Appears in: set-property

-

-Allows a helper bean property to be set to the value of

-a static field.

-

-Attributes:

-  field-name: The name of the field, as with field-binding.

-  

--->

-<!ELEMENT field-value EMPTY>

-<!ATTLIST field-value

-  field-name CDATA #REQUIRED

->

-

-<!-- =======================================================

-Element: inherited-binding

-Appears in: component

-

-Binds a parameter of the component to a parameter of the container.

-

-Attributes:

-  name: The name of the component parameter to bind.

-  parameter-name: The name of the container parameter to bind the

-    component parameter to.

--->

-<!ELEMENT inherited-binding EMPTY>

-<!ATTLIST inherited-binding

-  name CDATA #REQUIRED

-  parameter-name CDATA #REQUIRED

->

-<!-- =======================================================

-Element: page

-Contained by: application

-

-Defines a single page within the application.  Each application will contain

-at least one of these, to define the Home page.

-

-Attributes:

-  name: A unique name for the application.

-  specification-path:  The resource classpath of the component specification

-    for the page.

--->

-<!ELEMENT page EMPTY>

-<!ATTLIST page

-  name CDATA #REQUIRED

-  specification-path CDATA #REQUIRED

->

-<!-- =======================================================

-Element: parameter

-Contained by: specification

-

-Defines a formal parameter for the component.

-

-Attributes:

-  name: A unqiue name for the parameter.

-  java-type: The name of a Java class or primitive type expected by the parameter.

-    This is for documentation purposes only, it is not enforced.

-  required: If yes, then the parameter must be bound.  If no (the default),

-    then the parameter is optional.

-  property-name: The name to use, instead of the parameter name, for the

-    JavaBean property connected to this parameter.

-  direction: The normal flow of data through the component.

--->

-<!ELEMENT parameter (description*)>

-<!ATTLIST parameter

-  name CDATA #REQUIRED

-  java-type CDATA #IMPLIED

-  required %attribute-flag; "no"

-  property-name CDATA #IMPLIED

-  direction (in|custom) "custom"

->

-<!-- =======================================================

-Element: private-asset

-Contained by: specification

-

-An asset available within the Java classpath (i.e., bundled inside a JAR or WAR).

-

-Attributes:

-  name: The name of the asset.

-  resource-path: The complete pathname of the resource.

--->

-<!ELEMENT private-asset EMPTY>

-<!ATTLIST private-asset

-  name CDATA #REQUIRED

-  resource-path CDATA #REQUIRED

->

-<!-- =======================================================

-Element: property

-Contained by: application, specification

-

-Defines a key/value pair associated with the application or component specification.  Properties

-are used to capture information that doesn't fit into the DTD.  The value for the property is

-the PCDATA wrapped by the property tag (which is trimmed of leading and trailing whitespace).

--->

-<!ELEMENT property (#PCDATA)>

-<!ATTLIST property

-  name CDATA #REQUIRED

->

-

-<!-- =======================================================

-Element: property-value

-Appears in: set-parameter

-

-Used to initialize a bean with a property of its containing

-component.

--->

-

-<!ELEMENT property-value EMPTY>

-<!ATTLIST property-value

-  property-path CDATA #REQUIRED

->

-

-<!-- =======================================================

-Element: reserved-parameter

-Appears in: specification

-

-Identifies a name which may not be used as an informal parameter.

-Informal parameters are typically HTML attribute names; this

-list identifies HTML attributes that are written exclusively

-by the component and may not be affected by informal parameters.

--->

-

-<!ELEMENT reserved-parameter EMPTY>

-<!ATTLIST reserved-parameter

-  name CDATA #REQUIRED

->

-

-<!-- =======================================================

-Element: service

-Appears in: application

-

-Defines an engine service.  You may override the default

-set of engine services or provide completely new services.

-

-Attributes:

-  name: The name of the service.

-  class: The Java class to instantiate for the service.

-

--->

-

-<!ELEMENT service EMPTY>

-<!ATTLIST service

-  name CDATA #REQUIRED

-  class CDATA #REQUIRED

->

-

-<!-- =======================================================

-Element: set-property

-Appears in: bean

-

-Used to initialize a property of a helper bean.

--->

-

-<!ELEMENT set-property (static-value | property-value | field-value)>

-<!ATTLIST set-property

-  name CDATA #REQUIRED

->

-

-<!-- =======================================================

-Element: specification

-Root element

-

-A component specification.  It's attributes define the Java class to

-instantiate, whether the component may wrap other elements, and whether

-informal (undeclared) parameters are allowed.

-

-Attributes:

-  class: The Java class to instantiate for the component.

-  allow-body:  If yes (the default), the component may wrap other elements (have a body).

-  allow-informal-parameters:  If yes (the default), informal parameters (parameters that are not

-    explictily defined) are allowed.

--->

-<!ELEMENT specification (description*, parameter*, reserved-parameter*, property*, bean*,

-	component*, (external-asset | context-asset | private-asset)*)>

-<!ATTLIST specification

-  class CDATA #REQUIRED

-  allow-body %attribute-flag; "yes"

-  allow-informal-parameters %attribute-flag; "yes"

->

-<!-- =======================================================

-Element: static-binding

-Appears in: component

-

-Binds a parameter of the component to a static value defined directly

-within this specification. The value is the PCDATA wrapped by the element

-(with leading and trailing whitespace removed).

-

-Attributes:

-  name: The name of the component parameter to bind.

-

--->

-<!ELEMENT static-binding (#PCDATA)>

-<!ATTLIST static-binding

-  name CDATA #REQUIRED

->

-

-<!-- =======================================================

-Element: static-value

-Appears in: set-parameter

-

-A static value, that will be converted to some known type.

-

-The possible types are limited to a few simple scalar types,

-and String.  Additional types will likely be added in the future.

-

--->

-

-<!ELEMENT static-value (#PCDATA)>

-<!ATTLIST static-value

-  type (boolean|int|double|String) "String"

->

-

-<!-- =======================================================

-Element: string-binding

-Appears in: component

-

-Binds a parameter of the component to a localized string of

-its container.

-

-Attributes:

-  name: The name of the component parameter to bind.

-  key: The key used to access a localized string.

-  

--->

-

-<!ELEMENT string-binding EMPTY>

-<!ATTLIST string-binding

-  name CDATA #REQUIRED

-  key CDATA #REQUIRED

->
\ No newline at end of file
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/parse/TestInheritInformal.jwc b/3.0.4/junit/src/org/apache/tapestry/junit/parse/TestInheritInformal.jwc
deleted file mode 100644
index d691bbd..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/parse/TestInheritInformal.jwc
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<component-specification class="org.apache.tapestry.html.BasePage">
-
-  <!-- inherit-informal-parameters should be false (no) by default -->
-  <component id="border" type="Border"/>
-  
-  <component id="textField" type="TextField" inherit-informal-parameters="yes"/>
-  
-</component-specification>
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/parse/TestLocation.java b/3.0.4/junit/src/org/apache/tapestry/junit/parse/TestLocation.java
deleted file mode 100644
index 898c818..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/parse/TestLocation.java
+++ /dev/null
@@ -1,137 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.parse;
-
-import org.apache.tapestry.ILocation;
-import org.apache.tapestry.IResourceLocation;
-import org.apache.tapestry.IResourceResolver;
-import org.apache.tapestry.Location;
-import org.apache.tapestry.junit.TapestryTestCase;
-import org.apache.tapestry.resource.ClasspathResourceLocation;
-import org.apache.tapestry.resource.ContextResourceLocation;
-import org.apache.tapestry.util.DefaultResourceResolver;
-
-/**
- *  Test the {@link org.apache.tapestry.parse.LocationTag} class.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 3.0
- *
- **/
-
-public class TestLocation extends TapestryTestCase
-{
-    private static final IResourceResolver _resolver = new DefaultResourceResolver();
-    private static final IResourceLocation _resource1 =
-        new ClasspathResourceLocation(_resolver, "/somepackage/somefile");
-    private static final IResourceLocation _resource2 =
-        new ClasspathResourceLocation(_resolver, "/someotherpackage/someotherfile");
-
-    private IResourceLocation _location = new ContextResourceLocation(null, "/WEB-INF/foo.bar");
-
-    public void testNoNumbers()
-    {
-        ILocation l = new Location(_location);
-
-        assertSame(_location, l.getResourceLocation());
-        assertTrue(l.getLineNumber() <= 0);
-        assertTrue(l.getColumnNumber() <= 0);
-    }
-
-    public void testToStringShort()
-    {
-        ILocation l = new Location(_location);
-
-        assertEquals("context:/WEB-INF/foo.bar", l.toString());
-    }
-
-    public void testWithLine()
-    {
-        ILocation l = new Location(_location, 22);
-
-        assertEquals(22, l.getLineNumber());
-        assertEquals("context:/WEB-INF/foo.bar, line 22", l.toString());
-    }
-
-    public void testWithNumbers()
-    {
-        ILocation l = new Location(_location, 100, 15);
-
-        assertEquals(100, l.getLineNumber());
-        assertEquals(15, l.getColumnNumber());
-    }
-
-    public void testToStringLong()
-    {
-        ILocation l = new Location(_location, 97, 3);
-
-        assertEquals("context:/WEB-INF/foo.bar, line 97, column 3", l.toString());
-    }
-    public void testEqualsBare()
-    {
-        ILocation l1 = new Location(_resource1);
-
-        assertEquals(true, l1.equals(new Location(_resource1)));
-
-        assertEquals(false, l1.equals(new Location(_resource2)));
-        assertEquals(false, l1.equals(new Location(_resource1, 10)));
-    }
-
-    public void testEqualsLineNo()
-    {
-        ILocation l1 = new Location(_resource1, 10);
-
-        assertEquals(true, l1.equals(new Location(_resource1, 10)));
-        assertEquals(false, l1.equals(new Location(_resource1, 11)));
-        assertEquals(false, l1.equals(new Location(_resource2, 10)));
-        assertEquals(false, l1.equals(new Location(_resource1, 10, 1)));
-    }
-
-    public void testEqualsFull()
-    {
-        ILocation l1 = new Location(_resource1, 10, 5);
-
-        assertEquals(true, l1.equals(new Location(_resource1, 10, 5)));
-        assertEquals(false, l1.equals(new Location(_resource1, 10, 6)));
-        assertEquals(false, l1.equals(new Location(_resource1, 11, 5)));
-        assertEquals(false, l1.equals(new Location(_resource2, 10, 5)));
-    }
-
-    public void testHashCodeBare()
-    {
-        ILocation l1 = new Location(_resource1);
-        ILocation l2 = new Location(_resource1);
-
-        assertEquals(l1.hashCode(), l2.hashCode());
-    }
-
-    public void testHashCodeLineNo()
-    {
-        ILocation l1 = new Location(_resource1, 15);
-        ILocation l2 = new Location(_resource1, 15);
-
-        assertEquals(l1.hashCode(), l2.hashCode());
-    }
-
-    public void testHashCodeFull()
-    {
-        ILocation l1 = new Location(_resource1, 15, 20);
-        ILocation l2 = new Location(_resource1, 15, 20);
-
-        assertEquals(l1.hashCode(), l2.hashCode());
-    }
-
-}
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/parse/TestMessageBinding.jwc b/3.0.4/junit/src/org/apache/tapestry/junit/parse/TestMessageBinding.jwc
deleted file mode 100644
index c349578..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/parse/TestMessageBinding.jwc
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-  
-<component-specification>
-
-<component id="hello" type="Insert">
-	<message-binding name="value" key="label.hello"/>
-</component>
-
-</component-specification>
-
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/parse/TestSpecificationParser.java b/3.0.4/junit/src/org/apache/tapestry/junit/parse/TestSpecificationParser.java
deleted file mode 100644
index e959c95..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/parse/TestSpecificationParser.java
+++ /dev/null
@@ -1,652 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.parse;
-
-import java.util.Map;
-
-import org.apache.tapestry.ILocatable;
-import org.apache.tapestry.bean.MessageBeanInitializer;
-import org.apache.tapestry.junit.TapestryTestCase;
-import org.apache.tapestry.spec.BindingType;
-import org.apache.tapestry.spec.IApplicationSpecification;
-import org.apache.tapestry.spec.IBeanSpecification;
-import org.apache.tapestry.spec.IBindingSpecification;
-import org.apache.tapestry.spec.IComponentSpecification;
-import org.apache.tapestry.spec.IContainedComponent;
-import org.apache.tapestry.spec.ILibrarySpecification;
-import org.apache.tapestry.spec.IListenerBindingSpecification;
-import org.apache.tapestry.spec.IParameterSpecification;
-import org.apache.tapestry.spec.IPropertySpecification;
-import org.apache.tapestry.spec.ListenerBindingSpecification;
-import org.apache.tapestry.util.xml.DocumentParseException;
-
-/**
- *  Tests the specification parser (which reads page and component
- *  specifications).  Came into being somewhat late, so it just
- *  tests new features for the meantime.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 2.0.4
- *
- **/
-
-public class TestSpecificationParser extends TapestryTestCase
-{
-
-    private void checkLine(ILocatable locatable, int line)
-    {
-        assertEquals("Line", line, locatable.getLocation().getLineNumber());
-    }
-
-    /**
-     *  Tests that the parser can handle a specification
-     *  that includes a &lt;string-binding&gt; element.
-     * 
-     **/
-
-    public void testStringBinding() throws Exception
-    {
-        IComponentSpecification spec = parseComponent("TestStringBinding.jwc");
-
-        IBindingSpecification bs = spec.getComponent("hello").getBinding("value");
-
-        assertEquals("type", BindingType.STRING, bs.getType());
-        assertEquals("key", "label.hello", bs.getValue());
-
-        checkLine(bs, 25);
-    }
-
-    /**
-     * Test new (in 3.0) &lt;message-binding&gt; element. 
-     */
-
-    public void tesMessageBinding() throws Exception
-    {
-        IComponentSpecification spec = parseComponent("TestMessageBinding.jwc");
-
-        IBindingSpecification bs = spec.getComponent("hello").getBinding("value");
-
-        assertEquals("type", BindingType.STRING, bs.getType());
-        assertEquals("key", "label.hello", bs.getValue());
-
-        checkLine(bs, 25);
-    }
-
-    /**
-     *  Test valid parameter name.
-     * 
-     *  @since 2.2
-     * 
-     **/
-
-    public void testValidParameterName() throws Exception
-    {
-        IComponentSpecification spec = parseComponent("ValidParameterName.jwc");
-
-        IParameterSpecification ps = spec.getParameter("valid");
-
-        assertNotNull("Parameter specification.", ps);
-        checkLine(ps, 24);
-    }
-
-    /**
-     *  Test invalid parameter name.
-     * 
-     *  @since 2.2
-     * 
-     **/
-
-    public void testInvalidParameterName() throws Exception
-    {
-        try
-        {
-            parseComponent("InvalidParameterName.jwc");
-
-            unreachable();
-        }
-        catch (DocumentParseException ex)
-        {
-            checkException(ex, "in-valid");
-            checkException(ex, "Parameter");
-        }
-    }
-
-    /**
-     *  Test invalid parameter name.
-     * 
-     *  @since 2.2
-     * 
-     **/
-
-    public void testInvalidComponentId() throws Exception
-    {
-        try
-        {
-            parseComponent("InvalidComponentId.jwc");
-
-            unreachable();
-        }
-        catch (DocumentParseException ex)
-        {
-            checkException(ex, "in.valid");
-            checkException(ex, "component id");
-        }
-    }
-
-    /**
-     *  Test invalid library id in a library specification.
-     * 
-     *  @since 2.2
-     * 
-     **/
-
-    public void testInvalidLibraryId() throws Exception
-    {
-        try
-        {
-            parseLib("InvalidLibraryId.library");
-
-            unreachable();
-        }
-        catch (DocumentParseException ex)
-        {
-            checkException(ex, "in.valid");
-            checkException(ex, "library id");
-        }
-    }
-
-    /**
-     *  Parse a valid library.
-     * 
-     *  @since 2.2
-     * 
-     **/
-
-    public void testValidLibrary() throws Exception
-    {
-        ILibrarySpecification spec = parseLib("ValidLibrary.library");
-
-        checkLine(spec, 24);
-
-        checkList("serviceNames", new String[] { "service1", "service2" }, spec.getServiceNames());
-
-        checkList("pageNames", new String[] { "FirstPage", "SecondPage" }, spec.getPageNames());
-
-        checkList(
-            "componentAliases",
-            new String[] { "FirstComponent", "SecondComponent" },
-            spec.getComponentTypes());
-
-        checkList("libraryIds", new String[] { "lib1", "lib2" }, spec.getLibraryIds());
-    }
-
-    /**
-     *  Test invalid parameter name.
-     * 
-     *  @since 2.2
-     * 
-     **/
-
-    public void testInvalidAssetName() throws Exception
-    {
-        try
-        {
-            parseComponent("InvalidAssetName.jwc");
-
-            unreachable();
-        }
-        catch (DocumentParseException ex)
-        {
-            checkException(ex, "in.valid");
-            checkException(ex, "asset name");
-        }
-    }
-
-    /**
-     *  Test invalid page name.
-     * 
-     *  @since 2.2
-     * 
-     **/
-
-    public void testInvalidPageName() throws Exception
-    {
-        try
-        {
-            parseApp("InvalidPageName.application");
-
-            unreachable();
-        }
-        catch (DocumentParseException ex)
-        {
-            checkException(ex, "in$valid");
-            checkException(ex, "page name");
-        }
-    }
-
-    /**
-     *  Test invalid service name.
-     * 
-     *  @since 2.2
-     * 
-     **/
-
-    public void testInvalidServiceName() throws Exception
-    {
-        try
-        {
-            parseApp("InvalidServiceName.application");
-
-            unreachable();
-        }
-        catch (DocumentParseException ex)
-        {
-            checkException(ex, "in$valid");
-            checkException(ex, "service");
-        }
-    }
-
-    /**
-     *  Test invalid service name.
-     * 
-     *  @since 2.2
-     * 
-     **/
-
-    public void testInvalidComponentAlias() throws Exception
-    {
-        try
-        {
-            parseApp("InvalidComponentAlias.application");
-
-            unreachable();
-        }
-        catch (DocumentParseException ex)
-        {
-            checkException(ex, "Invalid$Component");
-            checkException(ex, "type");
-        }
-    }
-
-    /**
-     *  Test invalid extension name.
-     * 
-     *  @since 2.2
-     * 
-     **/
-
-    public void testInvalidExtensionName() throws Exception
-    {
-        try
-        {
-            parseApp("InvalidExtensionName.application");
-
-            unreachable();
-        }
-        catch (DocumentParseException ex)
-        {
-            checkException(ex, "Invalid$Extension");
-            checkException(ex, "extension name");
-        }
-    }
-
-    /** 
-     *  Test case where the document does not have a DOCTYPE
-     * 
-     *  @since 2.2
-     * 
-     **/
-
-    public void testMissingDoctype() throws Exception
-    {
-        try
-        {
-            parseApp("MissingDoctype.application");
-
-            unreachable();
-        }
-        catch (DocumentParseException ex)
-        {
-            // XML parsers tend to generate different exception messages, 
-            // so make the condition as unspecific as possible
-            checkException(ex, "DOCTYPE");
-        }
-    }
-
-    /**
-     *  Test case where the public id of the document is not known.
-     * 
-     **/
-
-    public void testInvalidPublicId() throws Exception
-    {
-        try
-        {
-            parseApp("InvalidPublicId.application");
-
-            unreachable();
-        }
-        catch (DocumentParseException ex)
-        {
-            checkException(ex, "has an unexpected public id");
-        }
-    }
-
-    /**
-     *  Test an an application specification can omit
-     *  the name and engine-class attributes.
-     * 
-     *  @since 3.0
-     * 
-     **/
-
-    public void testNulledApplication() throws Exception
-    {
-        IApplicationSpecification spec = parseApp("NulledApplication.application");
-
-        assertNull(spec.getEngineClassName());
-        assertNull(spec.getName());
-        checkLine(spec, 25);
-    }
-
-    /**
-     *  Test new DTD 1.4 syntax for declaring components.
-     * 
-     *  @since 3.0
-     * 
-     **/
-
-    public void testComponentType() throws Exception
-    {
-        IApplicationSpecification spec = parseApp("ComponentType.application");
-
-        assertEquals("/path/Fred.jwc", spec.getComponentSpecificationPath("Fred"));
-    }
-
-    /**
-     *  Test omitting the class name from a component specification
-     *  (new, in DTD 1.4).
-     * 
-     **/
-
-    public void testNulledComponent() throws Exception
-    {
-        IComponentSpecification spec = parseComponent("NulledComponent.jwc");
-
-        assertNull(spec.getComponentClassName());
-        checkLine(spec, 22);
-    }
-
-    /**
-     *  Test omitting the class name from a component specification
-     *  (new, in DTD 1.4).
-     * 
-     **/
-
-    public void testNulledPage() throws Exception
-    {
-        IComponentSpecification spec = parsePage("NulledPage.page");
-
-        assertNull(spec.getComponentClassName());
-        checkLine(spec, 22);
-    }
-
-    /**
-     *  Test the value attribute for the property element
-     *  (which is new in DTD 1.4).
-     * 
-     *  @since 3.0
-     * 
-     **/
-
-    public void testPropertyValue() throws Exception
-    {
-        IComponentSpecification spec = parsePage("PropertyValue.page");
-
-        checkLine(spec, 22);
-
-        assertEquals("rubble", spec.getProperty("barney"));
-        assertEquals("flintstone", spec.getProperty("wilma"));
-    }
-
-    /**
-     *  Tests the new (in DTD 1.4) value attribute on static-binding
-     *  element.
-     * 
-     *  @since 3.0
-     * 
-     **/
-
-    public void testStaticBindingValue() throws Exception
-    {
-        IComponentSpecification spec = parsePage("StaticBindingValue.page");
-
-        checkLine(spec, 22);
-
-        IContainedComponent c = spec.getComponent("c");
-
-        checkLine(c, 24);
-
-        IBindingSpecification b = c.getBinding("fred");
-        checkLine(b, 25);
-
-        assertEquals("flintstone", b.getValue());
-
-        b = c.getBinding("barney");
-        checkLine(b, 26);
-
-        assertEquals("rubble", b.getValue());
-
-        b = c.getBinding("rock");
-        checkLine(b, 27);
-        assertEquals("hudson", b.getValue());
-    }
-
-    public void testAttributeAndBody() throws Exception
-    {
-        try
-        {
-            parsePage("AttributeAndBody.page");
-
-            unreachable();
-        }
-        catch (DocumentParseException ex)
-        {
-            checkException(
-                ex,
-                "It is not valid to specify a value for attribute 'value' of <static-binding> and provide a value in the body of the element.");
-        }
-    }
-
-    /**
-     *  Tests the new (in DTD 1.4) value attribute on a configure element.
-     * 
-     *  @since 3.0
-     * 
-     **/
-
-    public void testConfigureValue() throws Exception
-    {
-        ILibrarySpecification spec = parseLib("ConfigureValue.library");
-
-        checkLine(spec, 22);
-        checkLine(spec.getExtensionSpecification("map"), 24);
-
-        Map map = (Map) spec.getExtension("map", Map.class);
-
-        assertEquals("flintstone", map.get("fred"));
-    }
-
-    /**
-     *  Tests the new &lt;listener-binding&gt; element in the 1.4 DTD.
-     * 
-     *  @since 3.0
-     * 
-     **/
-
-    public void testListenerBinding() throws Exception
-    {
-        IComponentSpecification spec = parsePage("ListenerBinding.page");
-
-        checkLine(spec, 22);
-        IContainedComponent c = spec.getComponent("c");
-
-        checkLine(c, 24);
-
-        IListenerBindingSpecification lbs = (ListenerBindingSpecification) c.getBinding("listener");
-
-        checkLine(lbs, 25);
-
-        String expectedScript =
-            buildExpectedScript(
-                new String[] {
-                    "",
-                    "if page.isFormInputValid():",
-                    "  cycle.page = \"Results\"",
-                    "else:",
-                    "  page.message = \"Please fix errors before continuing.\";" });
-
-        assertEquals("jython", lbs.getLanguage());
-        assertEquals(expectedScript, lbs.getScript());
-    }
-
-    private String buildExpectedScript(String[] lines)
-    {
-        StringBuffer buffer = new StringBuffer();
-
-        for (int i = 0; i < lines.length; i++)
-        {
-            if (i > 0)
-                buffer.append("\n");
-
-            buffer.append(lines[i]);
-        }
-
-        return buffer.toString();
-    }
-
-    /** @since 3.0 **/
-
-    public void testPropertySpecifications() throws Exception
-    {
-        IComponentSpecification spec = parsePage("PropertySpecifications.page");
-
-        checkList(
-            "propertySpecificationNames",
-            new String[] { "bool", "init", "persist" },
-            spec.getPropertySpecificationNames());
-
-        IPropertySpecification ps = spec.getPropertySpecification("bool");
-        assertEquals("name", "bool", ps.getName());
-        assertEquals("persistent", false, ps.isPersistent());
-        assertEquals("type", "boolean", ps.getType());
-        assertNull("initialValue", ps.getInitialValue());
-        checkLine(ps, 24);
-
-        ps = spec.getPropertySpecification("init");
-        assertEquals("name", "init", ps.getName());
-        assertEquals("persistent", false, ps.isPersistent());
-        assertEquals("type", "java.lang.Object", ps.getType());
-        assertEquals("initialValue", "pageName", ps.getInitialValue());
-        checkLine(ps, 26);
-
-        ps = spec.getPropertySpecification("persist");
-        assertEquals("name", "persist", ps.getName());
-        assertEquals("persistent", true, ps.isPersistent());
-        assertEquals("type", "java.lang.Object", ps.getType());
-        assertNull("initialValue", ps.getInitialValue());
-        checkLine(ps, 25);
-
-        ps = spec.getPropertySpecification("unknown");
-
-        assertNull("Unknown PropertySpecification", ps);
-    }
-
-    /** @since 3.0 **/
-
-    public void testDuplicatePropertySpecification() throws Exception
-    {
-        try
-        {
-            parsePage("DuplicatePropertySpecification.page");
-
-            unreachable();
-        }
-        catch (DocumentParseException ex)
-        {
-            checkException(ex, "already contains property specification for property 'bool'");
-        }
-    }
-
-    /** @since 3.0 **/
-
-    public void testMissingRequiredExtendedAttribute() throws Exception
-    {
-        try
-        {
-            parsePage("MissingRequiredExtendedAttribute.page");
-
-            unreachable();
-        }
-        catch (DocumentParseException ex)
-        {
-            checkException(
-                ex,
-                "Element <binding> does not specify a value for attribute 'expression', or contain a body value.");
-        }
-    }
-
-    /** @since 3.0 **/
-
-    public void testStringBeanInitializer() throws Exception
-    {
-        IComponentSpecification spec = parsePage("StringBeanInitializer.page");
-
-        IBeanSpecification bs = spec.getBeanSpecification("fred");
-        checkLine(bs, 24);
-        MessageBeanInitializer i = (MessageBeanInitializer) bs.getInitializers().get(0);
-
-        assertEquals("barney", i.getPropertyName());
-        assertEquals("rubble", i.getKey());
-        checkLine(i, 25);
-    }
-
-    /** @since 3.0 **/
-
-    public void testMessageBeanInitializer() throws Exception
-    {
-        IComponentSpecification spec = parsePage("MessageBeanInitializer.page");
-
-        IBeanSpecification bs = spec.getBeanSpecification("fred");
-        checkLine(bs, 24);
-        MessageBeanInitializer i = (MessageBeanInitializer) bs.getInitializers().get(0);
-
-        assertEquals("barney", i.getPropertyName());
-        assertEquals("rubble", i.getKey());
-        checkLine(i, 25);
-    }
-
-    public void testInheritInformalParameters() throws Exception
-    {
-        IComponentSpecification spec = parseComponent("TestInheritInformal.jwc");
-
-        IContainedComponent border = spec.getComponent("border");
-        assertEquals(border.getInheritInformalParameters(), false);
-
-        IContainedComponent textField = spec.getComponent("textField");
-        assertEquals(textField.getInheritInformalParameters(), true);
-    }
-}
\ No newline at end of file
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/parse/TestStringBinding.jwc b/3.0.4/junit/src/org/apache/tapestry/junit/parse/TestStringBinding.jwc
deleted file mode 100644
index 8abcd82..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/parse/TestStringBinding.jwc
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE component-specification PUBLIC 
-  "-//Howard Lewis Ship//Tapestry Specification 1.3//EN" 
-  "http://tapestry.sf.net/dtd/Tapestry_1_3.dtd">
-  
-<component-specification class="org.apache.tapestry.BaseComponent">
-
-<component id="hello" type="Insert">
-	<string-binding name="value" key="label.hello"/>
-</component>
-
-</component-specification>
-
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/parse/TestTemplateParser.java b/3.0.4/junit/src/org/apache/tapestry/junit/parse/TestTemplateParser.java
deleted file mode 100644
index d5551b1..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/parse/TestTemplateParser.java
+++ /dev/null
@@ -1,671 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.parse;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Map;
-
-import junit.framework.TestCase;
-
-import org.apache.tapestry.ILocation;
-import org.apache.tapestry.IResourceLocation;
-import org.apache.tapestry.parse.AttributeType;
-import org.apache.tapestry.parse.ITemplateParserDelegate;
-import org.apache.tapestry.parse.LocalizationToken;
-import org.apache.tapestry.parse.OpenToken;
-import org.apache.tapestry.parse.TemplateAttribute;
-import org.apache.tapestry.parse.TemplateParseException;
-import org.apache.tapestry.parse.TemplateParser;
-import org.apache.tapestry.parse.TemplateToken;
-import org.apache.tapestry.parse.TextToken;
-import org.apache.tapestry.parse.TokenType;
-import org.apache.tapestry.resource.ClasspathResourceLocation;
-import org.apache.tapestry.util.DefaultResourceResolver;
-
-/**
- *  Tests for the Tapestry HTML template parser.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- * 
- **/
-
-public class TestTemplateParser extends TestCase
-{
-    private static class ParserDelegate implements ITemplateParserDelegate
-    {
-        public boolean getKnownComponent(String componentId)
-        {
-            return true;
-        }
-
-        public boolean getAllowBody(String componentId, ILocation location)
-        {
-            return true;
-        }
-
-        public boolean getAllowBody(String libraryId, String type, ILocation location)
-        {
-            return true;
-        }
-
-    }
-
-    public TestTemplateParser(String name)
-    {
-        super(name);
-    }
-
-    protected TemplateToken[] run(
-        char[] templateData,
-        ITemplateParserDelegate delegate,
-        IResourceLocation location)
-        throws TemplateParseException
-    {
-        return new TemplateParser().parse(templateData, delegate, location);
-    }
-
-    protected TemplateToken[] run(
-        InputStream stream,
-        ITemplateParserDelegate delegate,
-        IResourceLocation location)
-        throws TemplateParseException
-    {
-        StringBuffer buffer = new StringBuffer();
-        char[] block = new char[1000];
-        InputStreamReader reader = new InputStreamReader(stream);
-
-        try
-        {
-            while (true)
-            {
-                int count = reader.read(block, 0, block.length);
-
-                if (count < 0)
-                    break;
-
-                buffer.append(block, 0, count);
-            }
-
-            reader.close();
-        }
-        catch (IOException ex)
-        {
-            fail("Unable to read from stream.");
-        }
-
-        return run(buffer.toString().toCharArray(), delegate, location);
-    }
-
-    protected TemplateToken[] run(String file) throws TemplateParseException
-    {
-        return run(file, new ParserDelegate());
-    }
-
-    protected TemplateToken[] run(String file, ITemplateParserDelegate delegate)
-        throws TemplateParseException
-    {
-        String thisClassName = getClass().getName();
-        String thisPath = "/" + thisClassName.replace('.', '/') + "/" + file;
-
-        IResourceLocation location =
-            new ClasspathResourceLocation(new DefaultResourceResolver(), thisPath);
-
-        InputStream stream = getClass().getResourceAsStream(file);
-
-        if (stream == null)
-            throw new TemplateParseException("File " + file + " not found.");
-
-        return run(stream, delegate, location);
-    }
-
-    private Map buildMap(String[] input)
-    {
-        Map result = new HashMap();
-
-        for (int i = 0; i < input.length; i += 2)
-            result.put(input[i], input[i + 1]);
-
-        return result;
-    }
-
-    protected void assertTextToken(TemplateToken token, int startIndex, int endIndex)
-    {
-        TextToken t = (TextToken) token;
-
-        assertEquals("Text token type.", TokenType.TEXT, t.getType());
-        assertEquals("Text token start index.", startIndex, t.getStartIndex());
-        assertEquals("Text token end index.", endIndex, t.getEndIndex());
-    }
-
-    /** @since 3.0 **/
-
-    protected void checkLine(TemplateToken token, int line)
-    {
-        assertEquals("Token line", line, token.getLocation().getLineNumber());
-    }
-
-    /** @since 2.0.4 **/
-
-    protected void assertLocalizationToken(
-        TemplateToken token,
-        String key,
-        Map attributes,
-        int line)
-    {
-        LocalizationToken t = (LocalizationToken) token;
-
-        assertEquals("Localization token type.", TokenType.LOCALIZATION, t.getType());
-        assertEquals("Localization key.", key, t.getKey());
-
-        assertEquals("Localization attributes.", attributes, t.getAttributes());
-
-        checkLine(token, line);
-    }
-
-    protected void assertOpenToken(TemplateToken token, String id, String tag, int line)
-    {
-        assertOpenToken(token, id, null, tag, line);
-    }
-
-    protected void assertOpenToken(
-        TemplateToken token,
-        String id,
-        String componentType,
-        String tag,
-        int line)
-    {
-        OpenToken t = (OpenToken) token;
-
-        assertEquals("Open token type", TokenType.OPEN, t.getType());
-        assertEquals("Open token id", id, t.getId());
-        assertEquals("Open token component type", componentType, t.getComponentType());
-        assertEquals("Open token tag", tag, t.getTag());
-
-        checkLine(token, line);
-    }
-
-    protected void assertTemplateAttributes(TemplateToken token, AttributeType type, Map expected)
-    {
-        OpenToken t = (OpenToken) token;
-
-        Map attributes = t.getAttributesMap();
-
-        Map actual = null;
-
-        if (attributes != null)
-        {
-            actual = new HashMap();
-            Iterator i = attributes.entrySet().iterator();
-            while (i.hasNext())
-            {
-                Map.Entry entry = (Map.Entry) i.next();
-
-                TemplateAttribute attribute = (TemplateAttribute) entry.getValue();
-
-                if (attribute.getType() == type)
-                    actual.put(entry.getKey(), attribute.getValue());
-            }
-        }
-
-        assertEquals(type.getName() + " attributes", expected, actual);
-    }
-
-    protected void assertCloseToken(TemplateToken token, int line)
-    {
-        assertEquals("Close token type.", TokenType.CLOSE, token.getType());
-
-        checkLine(token, line);
-    }
-
-    protected void assertTokenCount(TemplateToken[] tokens, int count)
-    {
-        assertNotNull("Parsed tokens.", tokens);
-        assertEquals("Parsed token count.", count, tokens.length);
-    }
-
-    private void runFailure(String file, String message)
-    {
-        runFailure(file, new ParserDelegate(), message);
-    }
-
-    private void runFailure(String file, ITemplateParserDelegate delegate, String message)
-    {
-        try
-        {
-            run(file, delegate);
-
-            fail("Invalid document " + file + " parsed without exception.");
-        }
-        catch (TemplateParseException ex)
-        {
-            assertEquals(message, ex.getMessage());
-            assertTrue(ex.getLocation().toString().indexOf(file) > 0);
-        }
-    }
-
-    public void testAllStatic() throws TemplateParseException
-    {
-        TemplateToken[] tokens = run("AllStatic.html");
-
-        assertTokenCount(tokens, 1);
-        assertTextToken(tokens[0], 0, 172);
-    }
-
-    public void testSingleEmptyTag() throws TemplateParseException
-    {
-        TemplateToken[] tokens = run("SingleEmptyTag.html");
-
-        assertTokenCount(tokens, 4);
-
-        assertTextToken(tokens[0], 0, 38);
-        assertOpenToken(tokens[1], "emptyTag", "span", 3);
-        assertCloseToken(tokens[2], 3);
-        assertTextToken(tokens[3], 63, 102);
-    }
-
-    public void testSimpleNested() throws TemplateParseException
-    {
-        TemplateToken[] tokens = run("SimpleNested.html");
-
-        assertTokenCount(tokens, 8);
-        assertOpenToken(tokens[1], "outer", "span", 3);
-        assertOpenToken(tokens[3], "inner", "span", 4);
-        assertCloseToken(tokens[4], 4);
-        assertCloseToken(tokens[6], 5);
-    }
-
-    public void testMixedNesting() throws TemplateParseException
-    {
-        TemplateToken[] tokens = run("MixedNesting.html");
-
-        assertTokenCount(tokens, 5);
-        assertOpenToken(tokens[1], "row", "span", 4);
-        assertCloseToken(tokens[3], 7);
-    }
-
-    public void testSingleQuotes() throws TemplateParseException
-    {
-        TemplateToken[] tokens = run("SingleQuotes.html");
-
-        assertTokenCount(tokens, 7);
-        assertOpenToken(tokens[1], "first", "span", 5);
-        assertOpenToken(tokens[4], "second", "span", 7);
-    }
-
-    public void testComplex() throws TemplateParseException
-    {
-        TemplateToken[] tokens = run("Complex.html");
-
-        assertTokenCount(tokens, 19);
-
-        // Just pick a few highlights out of it.
-
-        assertOpenToken(tokens[1], "ifData", "span", 3);
-        assertOpenToken(tokens[3], "e", "span", 10);
-        assertOpenToken(tokens[5], "row", "tr", 11);
-    }
-
-    public void testStartWithStaticTag() throws TemplateParseException
-    {
-        TemplateToken[] tokens = run("StartWithStaticTag.html");
-
-        assertTokenCount(tokens, 4);
-        assertTextToken(tokens[0], 0, 232);
-        assertOpenToken(tokens[1], "justBecause", "span", 9);
-    }
-
-    public void testUnterminatedCommentFailure()
-    {
-        runFailure("UnterminatedComment.html", "Comment on line 3 did not end.");
-    }
-    
-    public void testDuplicateTagAttributeFailure()
-    {
-        runFailure("DuplicateTagAttribute.html", "Tag <input> on line 3 contains more than one 'value' attribute.");
-    }
-    
-    public void testDuplicateTagAttributeFailureII()
-    {
-        runFailure("DuplicateTagAttributeII.html", "Tag <input> on line 3 contains more than one 'value' attribute.");
-    }
-
-    public void testUnclosedOpenTagFailure()
-    {
-        runFailure("UnclosedOpenTag.html", "Tag <body> on line 4 is never closed.");
-    }
-
-    public void testMissingAttributeValueFailure()
-    {
-        runFailure(
-            "MissingAttributeValue.html",
-            "Tag <img> on line 9 is missing a value for attribute src.");
-    }
-
-    public void testIncompleteCloseFailure()
-    {
-        runFailure("IncompleteClose.html", "Incomplete close tag on line 6.");
-    }
-
-    public void testMismatchedCloseTagsFailure()
-    {
-        runFailure(
-            "MismatchedCloseTags.html",
-            "Closing tag </th> on line 9 does not have a matching open tag.");
-    }
-
-    public void testInvalidDynamicNestingFailure()
-    {
-        runFailure(
-            "InvalidDynamicNesting.html",
-            "Closing tag </body> on line 12 is improperly nested with tag <span> on line 8.");
-    }
-
-    public void testUnknownComponentIdFailure()
-    {
-        ITemplateParserDelegate delegate = new ITemplateParserDelegate()
-        {
-            public boolean getKnownComponent(String componentId)
-            {
-                return !componentId.equals("row");
-            }
-
-            public boolean getAllowBody(String componentId, ILocation location)
-            {
-                return true;
-            }
-
-            public boolean getAllowBody(String libraryId, String type, ILocation location)
-            {
-                return true;
-            }
-        };
-
-        runFailure(
-            "Complex.html",
-            delegate,
-            "Tag <tr> on line 11 references unknown component id 'row'.");
-    }
-
-    public void testBasicRemove() throws TemplateParseException
-    {
-        TemplateToken[] tokens = run("BasicRemove.html");
-
-        assertTokenCount(tokens, 10);
-        assertTextToken(tokens[0], 0, 119);
-        assertTextToken(tokens[1], 188, 268);
-        assertOpenToken(tokens[2], "e", "span", 23);
-        assertTextToken(tokens[3], 341, 342);
-        assertOpenToken(tokens[4], "row", "tr", 24);
-        assertTextToken(tokens[5], 359, 377);
-        assertCloseToken(tokens[6], 26);
-        assertTextToken(tokens[7], 383, 383);
-        assertCloseToken(tokens[8], 27);
-        assertTextToken(tokens[9], 391, 401);
-    }
-
-    public void testBodyRemove() throws TemplateParseException
-    {
-        ITemplateParserDelegate delegate = new ITemplateParserDelegate()
-        {
-            public boolean getKnownComponent(String id)
-            {
-                return true;
-            }
-
-            public boolean getAllowBody(String id, ILocation location)
-            {
-                return id.equals("form");
-            }
-
-            public boolean getAllowBody(String libraryId, String type, ILocation location)
-            {
-                return true;
-            }
-        };
-
-        TemplateToken[] tokens = run("BodyRemove.html", delegate);
-
-        assertTokenCount(tokens, 8);
-        assertOpenToken(tokens[1], "form", "form", 9);
-        assertOpenToken(tokens[3], "inputType", "select", 11);
-        assertCloseToken(tokens[4], 15);
-        assertCloseToken(tokens[6], 16);
-    }
-
-    public void testRemovedComponentFailure()
-    {
-        runFailure(
-            "RemovedComponent.html",
-            "Tag <span> on line 5 is a dynamic component, and may not appear inside an ignored block.");
-    }
-
-    public void testNestedRemoveFailure()
-    {
-        runFailure(
-            "NestedRemove.html",
-            "Tag <span> on line 4 should be ignored, but is already inside "
-                + "an ignored block (ignored blocks may not be nested).");
-    }
-
-    public void testBasicContent() throws TemplateParseException
-    {
-        TemplateToken[] tokens = run("BasicContent.html");
-
-        assertTokenCount(tokens, 4);
-        assertTextToken(tokens[0], 108, 165);
-        assertOpenToken(tokens[1], "nested", "span", 9);
-        assertCloseToken(tokens[2], 9);
-        assertTextToken(tokens[3], 188, 192);
-    }
-
-    public void testIgnoredContentFailure()
-    {
-        runFailure(
-            "IgnoredContent.html",
-            "Tag <td> on line 7 is the template content, and may not be in an ignored block.");
-    }
-
-    public void testTagAttributes() throws TemplateParseException
-    {
-        TemplateToken[] tokens = run("TagAttributes.html");
-
-        assertTokenCount(tokens, 5);
-        assertOpenToken(tokens[1], "tag", null, "span", 3);
-
-        assertTemplateAttributes(
-            tokens[1],
-            AttributeType.LITERAL,
-            buildMap(new String[] { "class", "zip", "align", "right", "color", "#ff00ff" }));
-
-    }
-
-    /**
-     *   @since 2.0.4
-     * 
-     **/
-
-    public void testBasicLocalization() throws TemplateParseException
-    {
-        TemplateToken[] tokens = run("BasicLocalization.html");
-
-        assertTokenCount(tokens, 3);
-        assertTextToken(tokens[0], 0, 35);
-        assertLocalizationToken(tokens[1], "the.localization.key", null, 3);
-        assertTextToken(tokens[2], 89, 117);
-    }
-
-    /**
-     * 
-     *  Test that the parser fails if a localization block contains
-     *  a component.
-     * 
-     *  @since 2.0.4
-     * 
-     **/
-
-    public void testComponentInsideLocalization()
-    {
-        runFailure(
-            "ComponentInsideLocalization.html",
-            "Tag <span> on line 9 is a dynamic component, and may not appear inside an ignored block.");
-    }
-
-    /**
-     *  Test that the parser fails if an invisible localization is
-     *  nested within another invisible localization.
-     * 
-     *  @since 2.0.4
-     * 
-     **/
-
-    public void testNestedLocalizations()
-    {
-        runFailure(
-            "NestedLocalizations.html",
-            "Tag <span> on line 4 is a dynamic component, and may not appear inside an ignored block.");
-    }
-
-    /**
-     *  Test that the abbreviated form (a tag with no body) works.
-     * 
-     *  @since 2.0.4
-     * 
-     **/
-
-    public void testEmptyLocalization() throws TemplateParseException
-    {
-        TemplateToken[] tokens = run("EmptyLocalization.html");
-
-        assertTokenCount(tokens, 3);
-        assertTextToken(tokens[0], 0, 62);
-        assertLocalizationToken(tokens[1], "empty.localization", null, 3);
-        assertTextToken(tokens[2], 97, 122);
-    }
-
-    /**
-     *  Test attributes in the span.  Also, checks that the parser
-     *  caselessly identifies the "key" attribute and the tag name ("span").
-     * 
-     *  @since 2.0.4
-     * 
-     **/
-
-    public void testLocalizationAttributes() throws TemplateParseException
-    {
-        TemplateToken[] tokens = run("LocalizationAttributes.html");
-
-        Map attributes = buildMap(new String[] { "alpha", "beta", "Fred", "Wilma" });
-
-        assertLocalizationToken(tokens[1], "localization.with.attributes", attributes, 3);
-    }
-
-    /**
-     *  Tests for implicit components (both named and anonymous).
-     * 
-     *  @since 3.0
-     * 
-     **/
-
-    public void testImplicitComponents() throws TemplateParseException
-    {
-        TemplateToken[] tokens = run("ImplicitComponents.html");
-
-        assertTokenCount(tokens, 18);
-
-        assertOpenToken(tokens[1], "$Body", "Body", "body", 4);
-        assertOpenToken(tokens[3], "loop", "Foreach", "tr", 7);
-
-        assertTemplateAttributes(
-            tokens[3],
-            AttributeType.LITERAL,
-            buildMap(new String[] { "element", "tr" }));
-
-        assertTemplateAttributes(
-            tokens[3],
-            AttributeType.OGNL_EXPRESSION,
-            buildMap(new String[] { "source", "items" }));
-
-        assertOpenToken(tokens[5], "$Insert", "Insert", "span", 10);
-
-        assertTemplateAttributes(
-            tokens[5],
-            AttributeType.OGNL_EXPRESSION,
-            buildMap(new String[] { "value", "components.loop.value.name" }));
-
-        assertOpenToken(tokens[8], "$Insert$0", "Insert", "span", 11);
-
-        assertTemplateAttributes(
-            tokens[8],
-            AttributeType.OGNL_EXPRESSION,
-            buildMap(new String[] { "value", "components.loop.value.price" }));
-
-        assertOpenToken(tokens[13], "$InspectorButton", "contrib:InspectorButton", "span", 15);
-    }
-
-    /**
-     *  Test for encoded characters in an expression.
-     * 
-     *  @since 3.0
-     * 
-     **/
-
-    public void testEncodedExpressionCharacters() throws TemplateParseException
-    {
-        TemplateToken[] tokens = run("EncodedExpressionCharacters.html");
-
-        assertTokenCount(tokens, 4);
-
-        assertOpenToken(tokens[1], "$Insert", "Insert", "span", 2);
-
-        String expression = "{ \"<&>\", \"Fun!\" }";
-
-        assertTemplateAttributes(
-            tokens[1],
-            AttributeType.OGNL_EXPRESSION,
-            buildMap(new String[] { "value", expression }));
-
-    }
-
-    /**
-     *  Test ability to read string attributes.
-     * 
-     **/
-
-    public void testStringAttributes() throws TemplateParseException
-    {
-        TemplateToken[] tokens = run("StringAttributes.html");
-
-        assertTokenCount(tokens, 4);
-
-        assertOpenToken(tokens[1], "$Image", "Image", "img", 3);
-
-        assertTemplateAttributes(
-            tokens[1],
-            AttributeType.OGNL_EXPRESSION,
-            buildMap(new String[] { "image", "assets.logo" }));
-
-        assertTemplateAttributes(
-            tokens[1],
-            AttributeType.LOCALIZATION_KEY,
-            buildMap(new String[] { "alt", "logo-title" }));
-
-    }
-
-}
\ No newline at end of file
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/parse/UnclosedOpenTag.html b/3.0.4/junit/src/org/apache/tapestry/junit/parse/UnclosedOpenTag.html
deleted file mode 100644
index 08315eb..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/parse/UnclosedOpenTag.html
+++ /dev/null
@@ -1,4 +0,0 @@
-This test shows how what happens when a tag is never closed.
-
-<html>
-<body
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/parse/UnterminatedComment.html b/3.0.4/junit/src/org/apache/tapestry/junit/parse/UnterminatedComment.html
deleted file mode 100644
index d565ac6..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/parse/UnterminatedComment.html
+++ /dev/null
@@ -1,8 +0,0 @@
-This file tests for an unterminated comment.
-
-<!-- This is the start of the comment.
-
-<span jwcid="foo"/>
-
-This is still the comment; a typical failure is to forget to close it.
-
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/parse/ValidLibrary.library b/3.0.4/junit/src/org/apache/tapestry/junit/parse/ValidLibrary.library
deleted file mode 100644
index 69e2163..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/parse/ValidLibrary.library
+++ /dev/null
@@ -1,38 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-    Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE library-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-  
-<!--  Specification used in a series of tests to check successful parsing of a LibrarySpecification. -->
-	
-<library-specification>
-
-	<service name="service1" class="Service1"/>
-	<service name="service2" class="Service2"/>
-	
-	<page name="FirstPage" specification-path="/FirstPage.page"/>
-	<page name="SecondPage" specification-path="/SecondPage.page"/>
-	
-	<component-type type="FirstComponent" specification-path="/FirstComponent.jwc"/>
-	<component-type type="SecondComponent" specification-path="/SecondComponent.jwc"/>
-	
-	<library id="lib1" specification-path="/Library1.library"/>
-	<library id="lib2" specification-path="/Library2.library"/>
-
-</library-specification>
\ No newline at end of file
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/parse/ValidParameterName.jwc b/3.0.4/junit/src/org/apache/tapestry/junit/parse/ValidParameterName.jwc
deleted file mode 100644
index 31716ce..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/parse/ValidParameterName.jwc
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-  
-<component-specification>
-
-	<parameter name="valid"/>
-
-</component-specification>
-
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/script/MockScriptProcessor.java b/3.0.4/junit/src/org/apache/tapestry/junit/script/MockScriptProcessor.java
deleted file mode 100644
index ffee068..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/script/MockScriptProcessor.java
+++ /dev/null
@@ -1,91 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.script;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.apache.tapestry.IResourceLocation;
-import org.apache.tapestry.IScriptProcessor;
-import org.apache.tapestry.util.IdAllocator;
-
-/**
- * Used by {@link org.apache.tapestry.junit.script.TestScript}.
- *
- * @author Howard Lewis Ship
- * @version $Id$
- * @since 3.0
- **/
-public class MockScriptProcessor implements IScriptProcessor
-{
-    private StringBuffer _body;
-    private StringBuffer _initialization;
-    private List _externalScripts;
-    private IdAllocator _idAllocator = new IdAllocator();
-
-    public void addBodyScript(String script)
-    {
-        if (_body == null)
-            _body = new StringBuffer();
-
-        _body.append(script);
-    }
-
-	public String getBody()
-	{
-		if (_body == null)
-			return null;
-			
-			return _body.toString();
-	}
-
-    public void addInitializationScript(String script)
-    {
-        if (_initialization == null)
-            _initialization = new StringBuffer();
-
-        _initialization.append(script);
-    }
-
-	public String getInitialization()
-	{
-		if (_initialization == null)return null;
-		
-		return _initialization.toString();
-	}
-
-    public void addExternalScript(IResourceLocation scriptLocation)
-    {
-        if (_externalScripts == null)
-            _externalScripts = new ArrayList();
-
-        _externalScripts.add(scriptLocation);
-    }
-    
-    public IResourceLocation[] getExternalScripts()
-    {
-    	if (_externalScripts == null)return null;
-    	
-    	int count = _externalScripts.size();
-    	
-    	return (IResourceLocation[])_externalScripts.toArray(new IResourceLocation[count]);
-    }
-
-    public String getUniqueString(String baseValue)
-    {
-    	return _idAllocator.allocateId(baseValue);
-    }
-
-}
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/script/TestScript.java b/3.0.4/junit/src/org/apache/tapestry/junit/script/TestScript.java
deleted file mode 100644
index c706e04..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/script/TestScript.java
+++ /dev/null
@@ -1,431 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.script;
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Map;
-
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.IResourceLocation;
-import org.apache.tapestry.IResourceResolver;
-import org.apache.tapestry.IScript;
-import org.apache.tapestry.junit.MockRequestCycle;
-import org.apache.tapestry.junit.TapestryTestCase;
-import org.apache.tapestry.resource.ClasspathResourceLocation;
-import org.apache.tapestry.script.ScriptParser;
-import org.apache.tapestry.script.ScriptSession;
-import org.apache.tapestry.util.DefaultResourceResolver;
-import org.apache.tapestry.util.xml.DocumentParseException;
-
-/**
- *  A collection of tests for Tapestry scripting.
- *
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 2.2
- *
- **/
-
-public class TestScript extends TapestryTestCase
-{
-    private MockScriptProcessor _processor = new MockScriptProcessor();
-
-    private IScript read(String file) throws IOException, DocumentParseException
-    {
-        IResourceResolver resolver = new DefaultResourceResolver();
-        ScriptParser parser = new ScriptParser(resolver);
-
-        String classAsPath = "/" + getClass().getName().replace('.', '/');
-
-        IResourceLocation classLocation = new ClasspathResourceLocation(resolver, classAsPath);
-        IResourceLocation scriptLocation = classLocation.getRelativeLocation(file);
-
-        return parser.parse(scriptLocation);
-    }
-
-    private IScript execute(String file, Map symbols) throws DocumentParseException, IOException
-    {
-        IScript script = read(file);
-
-        script.execute(new MockRequestCycle(), _processor, symbols);
-
-        return script;
-    }
-
-    private void assertSymbol(Map symbols, String key, Object expected)
-    {
-        Object actual = symbols.get(key);
-
-        assertEquals(key, expected, actual);
-    }
-
-    /**
-     *  Simple test where the body and initialization are static.
-     * 
-     **/
-
-    public void testSimple() throws Exception
-    {
-        execute("simple.script", null);
-
-        assertEquals("body", "\nBODY\n", _processor.getBody());
-        assertEquals("initialization", "\nINITIALIZATION\n", _processor.getInitialization());
-        assertNull(_processor.getExternalScripts());
-    }
-
-    /**
-     * Test the &lt;unique&gt; element, new in the 1.3 DTD
-     * @since 3.0
-     */
-
-    public void testUnique() throws Exception
-    {
-        IScript script = read("unique.script");
-
-        IRequestCycle cycle = new MockRequestCycle();
-
-        script.execute(cycle, _processor, null);
-        script.execute(cycle, _processor, null);
-
-        assertEquals("Block1\nBlock2\nNotUnique\n\n\n\nNotUnique", _processor.getBody().trim());
-    }
-
-    /**
-     *  Test omitting body and initialization, ensure they return null.
-     * 
-     **/
-
-    public void testEmpty() throws Exception
-    {
-        execute("empty.script", null);
-
-        assertNull("body", _processor.getBody());
-        assertNull("initialization", _processor.getInitialization());
-    }
-
-    /**
-     *  Test the ability of the let element to create an output symbol.  Also,
-     *  test the insert element.
-     * 
-     **/
-
-    public void testLet() throws Exception
-    {
-        String inputSymbol = Long.toHexString(System.currentTimeMillis());
-        Map symbols = new HashMap();
-        symbols.put("inputSymbol", inputSymbol);
-
-        execute("let.script", symbols);
-
-        // Unlike body, the let element trims whitespace.
-
-        String outputSymbol = "output: " + inputSymbol;
-
-        assertEquals("Output symbol", outputSymbol, symbols.get("outputSymbol"));
-    }
-
-    /**
-     *  Tests the if element, using strings, numbers, booleans, nulls, arrays
-     *  and collections.
-     * 
-     **/
-
-    public void testIf() throws Exception
-    {
-        Map input = new HashMap();
-
-        input.put("true_string", "anything");
-        input.put("false_string", " ");
-        input.put("boolean_true", Boolean.TRUE);
-        input.put("boolean_false", Boolean.FALSE);
-        input.put("collection_non_empty", Collections.singletonList(Boolean.TRUE));
-        input.put("collection_empty", new ArrayList());
-        input.put("array_nonempty", new String[] { "alpha", "beta" });
-        input.put("array_empty", new Integer[0]);
-        input.put("number_zero", new Long(0));
-        input.put("number_nonzero", new Integer(1));
-
-        Map symbols = new HashMap();
-        symbols.put("input", input);
-
-        execute("if.script", symbols);
-
-        assertSymbol(symbols, "output_true_string", "TRUE-STRING");
-        assertSymbol(symbols, "output_false_string", "");
-        assertSymbol(symbols, "output_null", "");
-        assertSymbol(symbols, "output_boolean_true", "BOOLEAN-TRUE");
-        assertSymbol(symbols, "output_boolean_false", "");
-        assertSymbol(symbols, "output_collection_nonempty", "COLLECTION-NON-EMPTY");
-        assertSymbol(symbols, "output_collection_empty", "");
-        assertSymbol(symbols, "output_array_nonempty", "ARRAY-NON-EMPTY");
-        assertSymbol(symbols, "output_array_empty", "");
-        assertSymbol(symbols, "output_number_zero", "");
-        assertSymbol(symbols, "output_number_nonzero", "NUMBER-NON-ZERO");
-    }
-
-    /**
-     * Test the unique attribute on the &lt;let&gt; element.  New in
-     * the 1.3 DTD
-     * @since 3.0
-     */
-    public void testUniqueLet() throws Exception
-    {
-        Map symbols = new HashMap();
-
-        execute("unique-let.script", symbols);
-
-        assertSymbol(symbols, "alpha", "Alpha");
-        assertSymbol(symbols, "beta", "Alpha$0");
-        assertSymbol(symbols, "gamma", "Alpha$1");
-    }
-
-    /**
-     *  Tests the if-not element.
-     * 
-     **/
-
-    public void testIfNot() throws Exception
-    {
-        Map input = new HashMap();
-
-        input.put("trueString", "anything");
-        input.put("falseString", " ");
-        input.put("booleanTrue", Boolean.TRUE);
-        input.put("booleanFalse", Boolean.FALSE);
-        input.put("collectionNonEmpty", Collections.singletonList(Boolean.TRUE));
-        input.put("collectionEmpty", new ArrayList());
-        input.put("arrayNonempty", new String[] { "alpha", "beta" });
-        input.put("arrayEmpty", new Integer[0]);
-        input.put("numberZero", new Long(0));
-        input.put("numberNonzero", new Integer(1));
-
-        Map symbols = new HashMap();
-        symbols.put("input", input);
-
-        execute("if-not.script", symbols);
-
-        assertSymbol(symbols, "outputTrueString", "");
-        assertSymbol(symbols, "outputFalseString", "FALSE-STRING");
-        assertSymbol(symbols, "outputNull", "NULL");
-        assertSymbol(symbols, "outputBooleanTrue", "");
-        assertSymbol(symbols, "outputBooleanFalse", "BOOLEAN-FALSE");
-        assertSymbol(symbols, "outputCollectionNonempty", "");
-        assertSymbol(symbols, "outputCollectionEmpty", "COLLECTION-EMPTY");
-        assertSymbol(symbols, "outputArrayNonempty", "");
-        assertSymbol(symbols, "outputArrayEmpty", "ARRAY-EMPTY");
-        assertSymbol(symbols, "outputNumberZero", "NUMBER-ZERO");
-        assertSymbol(symbols, "outputNumberNonzero", "");
-    }
-
-    /**
-     *  Tests a bunch of variations on the foreach element.
-     * 
-     **/
-
-    public void testForeach() throws Exception
-    {
-        Map input = new HashMap();
-        input.put("single", "SINGLE");
-        input.put("emptyArray", new String[0]);
-        input.put("array", new String[] { "ALPHA", "BETA", "GAMMA" });
-        input.put("collection", Arrays.asList(new String[] { "MOE", "LARRY", "CURLY" }));
-        input.put("emptyCollection", new ArrayList());
-
-        Map symbols = new HashMap();
-        symbols.put("input", input);
-
-        execute("foreach.script", symbols);
-
-        assertSymbol(symbols, "outputMissing", "");
-        assertSymbol(symbols, "outputEmptyArray", "");
-        assertSymbol(symbols, "outputEmptyCollection", "");
-        assertSymbol(symbols, "outputSingle", "SINGLE");
-        assertSymbol(symbols, "outputArray", "ALPHA\n\nBETA\n\nGAMMA");
-        assertSymbol(symbols, "outputCollection", "MOE\n\nLARRY\n\nCURLY");
-
-        // Tests for the "index" attribute
-        assertSymbol(symbols, "outputMissingIndex", "");
-        assertSymbol(symbols, "outputEmptyArrayIndex", "");
-        assertSymbol(symbols, "outputEmptyCollectionIndex", "");
-        assertSymbol(symbols, "outputSingleIndex", "SINGLE 0");
-        assertSymbol(symbols, "outputArrayIndex", "ALPHA 0\n\nBETA 1\n\nGAMMA 2");
-        assertSymbol(symbols, "outputCollectionIndex", "MOE 0\n\nLARRY 1\n\nCURLY 2");
-        
-        // Test implied key
-        assertSymbol(symbols, "outputCollectionIndexOnly", "0\n\n1\n\n2");
-    }
-
-    public void testIncludeScript() throws Exception
-    {
-        IScript script = execute("include-script.script", null);
-
-        IResourceLocation scriptLocation = script.getScriptLocation();
-
-        IResourceLocation[] expected =
-            new IResourceLocation[] {
-                scriptLocation.getRelativeLocation("first"),
-                scriptLocation.getRelativeLocation("second"),
-                scriptLocation.getRelativeLocation("third")};
-
-        assertEquals(
-            "included scripts",
-            Arrays.asList(expected),
-            Arrays.asList(_processor.getExternalScripts()));
-    }
-
-    public void testAntSyntax() throws Exception
-    {
-        Map form = new HashMap();
-
-        form.put("name", "gallahad");
-
-        Map component = new HashMap();
-        component.put("form", form);
-        component.put("name", "lancelot");
-
-        Map symbols = new HashMap();
-        symbols.put("component", component);
-
-        execute("ant-syntax.script", symbols);
-
-        assertSymbol(symbols, "functionName", "gallahad_lancelot");
-        assertSymbol(symbols, "incomplete1", "Incomplete: $");
-        assertSymbol(symbols, "incomplete2", "Incomplete: ${");
-        assertSymbol(symbols, "nopath", "This ${} ends up as literal.");
-        assertSymbol(symbols, "OGNL", "This is a brace: }.");
-    }
-
-    public void testSet() throws Exception
-    {
-        Map symbols = new HashMap();
-
-        execute("set.script", symbols);
-
-        assertSymbol(symbols, "element2", new Character('p'));
-    }
-
-    public void testInvalidKeyLet() throws Exception
-    {
-        try
-        {
-            execute("invalid-key-let.script", new HashMap());
-
-            unreachable();
-        }
-        catch (DocumentParseException ex)
-        {
-            checkException(ex, "key");
-        }
-    }
-
-    public void testInvalidKeySet() throws Exception
-    {
-        try
-        {
-            execute("invalid-key-Set.script", new HashMap());
-
-            unreachable();
-        }
-        catch (DocumentParseException ex)
-        {
-            checkException(ex, "key");
-        }
-    }
-
-    public void testInputSymbolClass() throws Exception
-    {
-        try
-        {
-            Map symbols = new HashMap();
-            symbols.put("input", new Integer(20));
-
-            execute("input-symbol-class.script", symbols);
-
-            unreachable();
-        }
-        catch (Exception ex)
-        {
-            checkException(ex, "Integer");
-            checkException(ex, "Long");
-        }
-    }
-
-    public void testInputSymbol() throws Exception
-    {
-        Map symbols = new HashMap();
-        symbols.put("input", new Long(20));
-
-        execute("input-symbol.script", symbols);
-
-        assertSymbol(symbols, "success", "Success");
-    }
-
-    public void testInputSymbolRequired() throws Exception
-    {
-        try
-        {
-            execute("input-symbol-required.script", new HashMap());
-
-            unreachable();
-        }
-        catch (Exception ex)
-        {
-            checkException(ex, "required");
-        }
-    }
-
-    public void testInputSymbolInvalidKey() throws Exception
-    {
-        try
-        {
-            execute("input-symbol-invalid-key.script", new HashMap());
-
-            unreachable();
-        }
-        catch (DocumentParseException ex)
-        {
-            checkException(ex, "key");
-        }
-
-    }
-
-    /** @since 3.0 */
-
-    public void testNameAppend() throws Exception
-    {
-        Map symbols = new HashMap();
-
-        symbols.put("name", "fred");
-        execute("name-append.script", symbols);
-
-        assertSymbol(symbols, "output", "fred$suffix");
-    }
-
-    /**
-     * A bunch of quickies to push up the code coverage numbers.
-     */
-    public void testCheats() throws Exception
-    {
-        IScript script = execute("simple.script", null);
-
-        ScriptSession session = new ScriptSession(script.getScriptLocation(), null, null, null);
-        assertEquals("ScriptSession[" + script.getScriptLocation() + "]", session.toString());
-    }
-}
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/script/ant-syntax.script b/3.0.4/junit/src/org/apache/tapestry/junit/script/ant-syntax.script
deleted file mode 100644
index 4aebb56..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/script/ant-syntax.script
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0"?>
-<!-- $Id$ -->
-<!DOCTYPE script PUBLIC 
-	"-//Howard Lewis Ship//Tapestry Script 1.2//EN"
-	"http://tapestry.sf.net/dtd/Script_1_2.dtd">
-	
-<script>
-
-<let key="functionName">
-	${component.form.name}_${component.name}
-</let>
-
-<!-- Test a few variations.  -->
-
-<let key="incomplete1">
-Incomplete: $</let>
-
-<let key="incomplete2">
-Incomplete: ${</let>
-
-<let key="nopath">
-This ${} ends up as literal.
-</let>
-
-<let key="OGNL">
-This is a brace: ${"{Hello}".toCharArray()[6]}.
-</let>
-
-</script>
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/script/empty.script b/3.0.4/junit/src/org/apache/tapestry/junit/script/empty.script
deleted file mode 100644
index ec5be0a..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/script/empty.script
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE script PUBLIC "-//Howard Ship//Tapestry Script 1.1//EN"
-	"http://tapestry.sf.net/dtd/Script_1_1.dtd">
-	
-<script>
-</script>
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/script/foreach.script b/3.0.4/junit/src/org/apache/tapestry/junit/script/foreach.script
deleted file mode 100644
index ff6da7a..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/script/foreach.script
+++ /dev/null
@@ -1,86 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE script PUBLIC
-	"-//Apache Software Foundation//Tapestry Script Specification 3.0//EN"
-	"http://jakarta.apache.org/tapestry/dtd/Script_3_0.dtd">
-	
-<script>
-
-<let key="outputMissing">
-<foreach key="i" expression="missing">
-${i}
-</foreach>
-</let>
-
-<let key="outputSingle">
-<foreach key="i" expression="input.single">
-${i}
-</foreach>
-</let>
-
-<let key="outputEmptyArray">
-<foreach key="i" expression="input.emptyArray">
-${i}
-</foreach>
-</let>
-
-<let key="outputArray">
-<foreach key="i" expression="input.array">
-${i}
-</foreach>
-</let>
-
-<let key="outputCollection">
-<foreach key="k" expression="input.collection">
-${k}
-</foreach>
-</let>
-
-<let key="outputEmptyCollection">
-<foreach key="z" expression="input.emptyCollection">
-${z}
-</foreach>
-</let>
-
-<let key="outputMissingIndex">
-<foreach key="i" index="j" expression="missing">
-${i} ${j}
-</foreach>
-</let>
-
-<let key="outputSingleIndex">
-<foreach key="i" index="j" expression="input.single">
-${i} ${j}
-</foreach>
-</let>
-
-<let key="outputEmptyArrayIndex">
-<foreach key="i" index="j" expression="input.emptyArray">
-${i} ${j}
-</foreach>
-</let>
-
-<let key="outputArrayIndex">
-<foreach key="i" index="j" expression="input.array">
-${i} ${j}
-</foreach>
-</let>
-
-<let key="outputCollectionIndex">
-<foreach key="k" index="i" expression="input.collection">
-${k} ${i}
-</foreach>
-</let>
-
-<let key="outputEmptyCollectionIndex">
-<foreach key="z" index="i" expression="input.emptyCollection">
-${z} ${i}
-</foreach>
-</let>
-
-<let key="outputCollectionIndexOnly">
-<foreach index="i" expression="input.collection">
-${i}
-</foreach>
-</let>
-
-</script>
\ No newline at end of file
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/script/if-not.script b/3.0.4/junit/src/org/apache/tapestry/junit/script/if-not.script
deleted file mode 100644
index e84f294..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/script/if-not.script
+++ /dev/null
@@ -1,72 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE script PUBLIC "-//Howard Ship//Tapestry Script 1.1//EN"
-	"http://tapestry.sf.net/dtd/Script_1_1.dtd">
-		
-<script>
-<let key="outputTrueString">
-<if-not property-path="input.trueString">
-TRUE-STRING
-</if-not>
-</let>
-
-<let key="outputFalseString">
-<if-not property-path="input.falseString">
-FALSE-STRING
-</if-not>
-</let>
-
-<let key="outputNull">
-<if-not property-path="missing">
-NULL
-</if-not>
-</let>
-
-<let key="outputBooleanTrue">
-<if-not property-path="input.booleanTrue">
-BOOLEAN-TRUE
-</if-not>
-</let>
-
-<let key="outputBooleanFalse">
-<if-not property-path="input.booleanFalse">
-BOOLEAN-FALSE
-</if-not>
-</let>
-
-<let key="outputCollectionNonempty">
-<if-not property-path="input.collectionNonEmpty">
-COLLECTION-NON-EMPTY
-</if-not>
-</let>
-
-<let key="outputCollectionEmpty">
-<if-not property-path="input.collectionEmpty">
-COLLECTION-EMPTY
-</if-not>
-</let>
-
-<let key="outputArrayNonempty">
-<if-not property-path="input.arrayNonempty">
-ARRAY-NON-EMPTY
-</if-not>
-</let>
-
-<let key="outputArrayEmpty">
-<if-not property-path="input.arrayEmpty">
-ARRAY-EMPTY
-</if-not>
-</let>
-
-<let key="outputNumberZero">
-<if-not property-path="input.numberZero">
-NUMBER-ZERO
-</if-not>
-</let>
-
-<let key="outputNumberNonzero">
-<if-not property-path="input.numberNonzero">
-NUMBER-NON-ZERO
-</if-not>
-</let>
-
-</script>
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/script/if.script b/3.0.4/junit/src/org/apache/tapestry/junit/script/if.script
deleted file mode 100644
index 0d4dd01..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/script/if.script
+++ /dev/null
@@ -1,72 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE script PUBLIC "-//Howard Lewis Ship//Tapestry Script 1.2//EN"
-	"http://tapestry.sf.net/dtd/Script_1_2.dtd">
-		
-<script>
-<let key="output_true_string">
-<if expression="input.true_string">
-TRUE-STRING
-</if>
-</let>
-
-<let key="output_false_string">
-<if expression="input.false_string">
-FALSE-STRING
-</if>
-</let>
-
-<let key="output_null">
-<if expression="missing">
-NULL
-</if>
-</let>
-
-<let key="output_boolean_true">
-<if expression="input.boolean_true">
-BOOLEAN-TRUE
-</if>
-</let>
-
-<let key="output_boolean_false">
-<if expression="input.boolean_false">
-BOOLEAN-FALSE
-</if>
-</let>
-
-<let key="output_collection_nonempty">
-<if expression="input.collection_non_empty">
-COLLECTION-NON-EMPTY
-</if>
-</let>
-
-<let key="output_collection_empty">
-<if expression="input.collection_empty">
-COLLECTION-EMPTY
-</if>
-</let>
-
-<let key="output_array_nonempty">
-<if expression="input.array_nonempty">
-ARRAY-NON-EMPTY
-</if>
-</let>
-
-<let key="output_array_empty">
-<if expression="input.array_empty">
-ARRAY-EMPTY
-</if>
-</let>
-
-<let key="output_number_zero">
-<if expression="input.number_zero">
-NUMBER-ZERO
-</if>
-</let>
-
-<let key="output_number_nonzero">
-<if expression="input.number_nonzero">
-NUMBER-NON-ZERO
-</if>
-</let>
-
-</script>
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/script/include-script.script b/3.0.4/junit/src/org/apache/tapestry/junit/script/include-script.script
deleted file mode 100644
index 4d1ca0c..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/script/include-script.script
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE script PUBLIC "-//Howard Ship//Tapestry Script 1.1//EN"
-	"http://tapestry.sf.net/dtd/Script_1_1.dtd">
-		
-		
-<script>
-		
-<include-script resource-path="first"/>
-<include-script resource-path="second"/>
-<include-script resource-path="third"/>		
-
-</script>
\ No newline at end of file
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/script/input-symbol-class.script b/3.0.4/junit/src/org/apache/tapestry/junit/script/input-symbol-class.script
deleted file mode 100644
index 14c4a18..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/script/input-symbol-class.script
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0"?>
-<!-- $Id$ -->
-<!DOCTYPE script PUBLIC 
-	"-//Howard Lewis Ship//Tapestry Script 1.2//EN"
-	"http://tapestry.sf.net/dtd/Script_1_2.dtd">
-	
-<script>
-<input-symbol key="input" class="java.lang.Long"/>
-</script>	
\ No newline at end of file
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/script/input-symbol-invalid-key.script b/3.0.4/junit/src/org/apache/tapestry/junit/script/input-symbol-invalid-key.script
deleted file mode 100644
index 75ef7a4..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/script/input-symbol-invalid-key.script
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0"?>
-<!-- $Id$ -->
-<!DOCTYPE script PUBLIC 
-	"-//Howard Lewis Ship//Tapestry Script 1.2//EN"
-	"http://tapestry.sf.net/dtd/Script_1_2.dtd">
-	
-<script>
-<input-symbol key="foo$bar" class="java.lang.Long"/>
-</script>	
\ No newline at end of file
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/script/input-symbol-required.script b/3.0.4/junit/src/org/apache/tapestry/junit/script/input-symbol-required.script
deleted file mode 100644
index 8a3a681..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/script/input-symbol-required.script
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0"?>
-<!-- $Id$ -->
-<!DOCTYPE script PUBLIC 
-	"-//Howard Lewis Ship//Tapestry Script 1.2//EN"
-	"http://tapestry.sf.net/dtd/Script_1_2.dtd">
-	
-<script>
-<input-symbol key="input" required="yes"/>
-</script>	
\ No newline at end of file
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/script/input-symbol.script b/3.0.4/junit/src/org/apache/tapestry/junit/script/input-symbol.script
deleted file mode 100644
index b3189de..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/script/input-symbol.script
+++ /dev/null
@@ -1,14 +0,0 @@
-<?xml version="1.0"?>
-<!-- $Id$ -->
-<!DOCTYPE script PUBLIC 
-	"-//Howard Lewis Ship//Tapestry Script 1.2//EN"
-	"http://tapestry.sf.net/dtd/Script_1_2.dtd">
-	
-<script>
-<input-symbol key="input" class="java.lang.Number"/>
-
-<let key="success">
-Success
-</let>
-
-</script>	
\ No newline at end of file
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/script/invalid-key-let.script b/3.0.4/junit/src/org/apache/tapestry/junit/script/invalid-key-let.script
deleted file mode 100644
index afb7e36..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/script/invalid-key-let.script
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0"?>
-<!-- $Id$ -->
-<!DOCTYPE script PUBLIC 
-	"-//Howard Lewis Ship//Tapestry Script 1.2//EN"
-	"http://tapestry.sf.net/dtd/Script_1_2.dtd">
-	
-<script>
-
-<let key="foo$bar"/>
-
-</script>
\ No newline at end of file
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/script/invalid-key-set.script b/3.0.4/junit/src/org/apache/tapestry/junit/script/invalid-key-set.script
deleted file mode 100644
index d218fc8..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/script/invalid-key-set.script
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0"?>
-<!-- $Id$ -->
-<!DOCTYPE script PUBLIC 
-	"-//Howard Lewis Ship//Tapestry Script 1.2//EN"
-	"http://tapestry.sf.net/dtd/Script_1_2.dtd">
-	
-<script>
-
-<set key="foo$bar" expression="&quot;Tapestry&quot;.toCharArray()[2]"/>
-
-</script>
\ No newline at end of file
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/script/let.script b/3.0.4/junit/src/org/apache/tapestry/junit/script/let.script
deleted file mode 100644
index 5448f50..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/script/let.script
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE script PUBLIC "-//Howard Ship//Tapestry Script 1.1//EN"
-	"http://tapestry.sf.net/dtd/Script_1_1.dtd">
-		
-<script>
-<let key="outputSymbol">
-output: <insert property-path="inputSymbol"/>
-</let>
-</script>
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/script/name-append.script b/3.0.4/junit/src/org/apache/tapestry/junit/script/name-append.script
deleted file mode 100644
index d11b558..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/script/name-append.script
+++ /dev/null
@@ -1,18 +0,0 @@
-<?xml version="1.0"?>

-<!-- $Id: invalid-key-let.script,v 1.1 2003/03/05 23:19:36 hlship Exp $ -->

-<!DOCTYPE script PUBLIC 

-	"-//Howard Lewis Ship//Tapestry Script 1.2//EN"

-	"http://tapestry.sf.net/dtd/Script_1_2.dtd">

-	

-<script>

-

-<input-symbol key="name" class="java.lang.String" required="yes"/>

-

-<let key="output">

-	

-	<!-- There was a bug where the last letter ('x') was getting clipped. -->

-	

-	${name}$suffix

-</let>

-

-</script>
\ No newline at end of file
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/script/set.script b/3.0.4/junit/src/org/apache/tapestry/junit/script/set.script
deleted file mode 100644
index e248903..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/script/set.script
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0"?>
-<!-- $Id$ -->
-<!DOCTYPE script PUBLIC 
-	"-//Howard Lewis Ship//Tapestry Script 1.2//EN"
-	"http://tapestry.sf.net/dtd/Script_1_2.dtd">
-	
-<script>
-
-<set key="element2" expression="&quot;Tapestry&quot;.toCharArray()[2]"/>
-
-</script>
\ No newline at end of file
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/script/simple.script b/3.0.4/junit/src/org/apache/tapestry/junit/script/simple.script
deleted file mode 100644
index 5331f21..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/script/simple.script
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE script PUBLIC "-//Howard Ship//Tapestry Script 1.1//EN"
-	"http://tapestry.sf.net/dtd/Script_1_1.dtd">
-	
-<script>
-<body>
-BODY
-</body>
-<initialization>
-INITIALIZATION
-</initialization>
-</script>
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/script/unique-let.script b/3.0.4/junit/src/org/apache/tapestry/junit/script/unique-let.script
deleted file mode 100644
index 34a061e..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/script/unique-let.script
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0"?>

-<!DOCTYPE script PUBLIC

-	"-//Apache Software Foundation//Tapestry Script Specification 3.0//EN"

-	"http://jakarta.apache.org/tapestry/dtd/Script_3_0.dtd">

-

-<script>

-

-<let key="alpha" unique="yes">

-	Alpha	

-</let>

-

-<let key="beta" unique="yes">

-	Alpha	

-</let>

-

-<let key="gamma" unique="yes">

-	Alpha	

-</let>

-

-</script>
\ No newline at end of file
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/script/unique.script b/3.0.4/junit/src/org/apache/tapestry/junit/script/unique.script
deleted file mode 100644
index 8cf3656..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/script/unique.script
+++ /dev/null
@@ -1,15 +0,0 @@
-<?xml version="1.0"?>

-<!DOCTYPE script PUBLIC

-	"-//Apache Software Foundation//Tapestry Script Specification 3.0//EN"

-	"http://jakarta.apache.org/tapestry/dtd/Script_3_0.dtd">

-

-<script>

-

-<body>

-<unique>Block1</unique>

-<unique>Block2</unique>

-NotUnique

-</body>

-

-

-</script>
\ No newline at end of file
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/spec/AssetProperty.jwc b/3.0.4/junit/src/org/apache/tapestry/junit/spec/AssetProperty.jwc
deleted file mode 100644
index c0919a6..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/spec/AssetProperty.jwc
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<component-specification class="org.apache.tapestry.BaseComponent">
-
-  <private-asset name="private" resource-path="/foo/Bar.gif">
-  	<property name="hugh">grant</property>
-  </private-asset>
-  
-  <external-asset name="external" URL="http://foo.com/images/Bar.gif">
-  	<property name="joan">rivers</property>
-  </external-asset>
-  
-  <context-asset name="context" path="/images/Bar.gif">
-  	<property name="john" value="cusak"/>
-  </context-asset>
-	
-</component-specification>	
\ No newline at end of file
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/spec/BasicExtension.application b/3.0.4/junit/src/org/apache/tapestry/junit/spec/BasicExtension.application
deleted file mode 100644
index 0415f2a..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/spec/BasicExtension.application
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0"?>
-<!--
-    Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!--$Id$-->
-<!DOCTYPE application PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<application name="Test Basic Extension">
-  
-  <extension name="testBean" class="org.apache.tapestry.junit.spec.PropertyBean">
-  	<configure property-name="booleanProperty" type="boolean">true</configure>
-  	<configure property-name="intProperty" type="int">18</configure>
-  	<configure property-name="longProperty" type="long">383838</configure>
-  	<configure property-name="doubleProperty" type="double">-3.14</configure>
-  	<configure property-name="stringProperty">Tapestry: Java Web Components</configure>
-  </extension>
-    
-</application>
\ No newline at end of file
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/spec/BeanProperty.jwc b/3.0.4/junit/src/org/apache/tapestry/junit/spec/BeanProperty.jwc
deleted file mode 100644
index cd5e678..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/spec/BeanProperty.jwc
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<component-specification class="org.apache.tapestry.BaseComponent">
-
-	<bean name="fred" class="org.apache.tapestry.junit.spec.PropertyBean">
-		<property name="zeta">jones</property>
-		<property name="bruce">wayne</property>
-		<property name="nicole">kidman</property>
-	</bean>
-	
-</component-specification>	
\ No newline at end of file
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/spec/ComponentProperty.jwc b/3.0.4/junit/src/org/apache/tapestry/junit/spec/ComponentProperty.jwc
deleted file mode 100644
index acbb5f2..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/spec/ComponentProperty.jwc
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0"?>
-<!--
-   Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE component-specification PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<component-specification class="org.apache.tapestry.BaseComponent">
-
-	<component id="barney" type="Dessert">
-		<property name="chocolate">cake</property>
-		<property name="apple">pie</property>
-		<property name="frozen">yogurt</property>
-	</component>
-	
-</component-specification>	
\ No newline at end of file
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/spec/ExtensionProperty.application b/3.0.4/junit/src/org/apache/tapestry/junit/spec/ExtensionProperty.application
deleted file mode 100644
index 9a04216..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/spec/ExtensionProperty.application
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0"?>
-<!--
-    Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE application PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<application name="Test Extension Property">
-  
-  <extension name="testBean" class="org.apache.tapestry.junit.spec.PropertyBean">
-		<property name="fred">flintstone</property>
-  </extension>
-    
-</application>
\ No newline at end of file
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/spec/ImmediateExtension.application b/3.0.4/junit/src/org/apache/tapestry/junit/spec/ImmediateExtension.application
deleted file mode 100644
index 62ebc89..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/spec/ImmediateExtension.application
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0"?>
-<!--
-    Copyright 2004 The Apache Software Foundation
-  
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<!-- $Id$ -->
-<!DOCTYPE application PUBLIC 
-  "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
-  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
-	
-<application name="Immediate Extension Instantiation">
-  
-  <extension name="immediate" 
-  	class="org.apache.tapestry.junit.spec.ImmediateExtension"
-  	immediate="yes"/>
-    
-</application>
\ No newline at end of file
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/spec/ImmediateExtension.java b/3.0.4/junit/src/org/apache/tapestry/junit/spec/ImmediateExtension.java
deleted file mode 100644
index b13ca59..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/spec/ImmediateExtension.java
+++ /dev/null
@@ -1,40 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.spec;
-
-/**
- *  Tests that immediate extensions are, in fact, instantiated
- *  immediately.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 2.2
- *
- **/
-
-public class ImmediateExtension
-{
-    private static int _instanceCount = 0;
-
-    public static int getInstanceCount()
-    {
-        return _instanceCount;
-    }
-
-    public ImmediateExtension()
-    {
-        _instanceCount++;
-    }
-}
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/spec/PropertyBean.java b/3.0.4/junit/src/org/apache/tapestry/junit/spec/PropertyBean.java
deleted file mode 100644
index 12710d0..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/spec/PropertyBean.java
+++ /dev/null
@@ -1,84 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.spec;
-
-/**
- *  Bean used to test extensions.
- *
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *
- **/
-
-public class PropertyBean
-{
-    private boolean _booleanProperty;
-    private int _intProperty;
-    private long _longProperty;
-    private String _stringProperty;
-    private double _doubleProperty;
-    
-    public boolean getBooleanProperty()
-    {
-        return _booleanProperty;
-    }
-
-    public double getDoubleProperty()
-    {
-        return _doubleProperty;
-    }
-
-    public int getIntProperty()
-    {
-        return _intProperty;
-    }
-
-    public long getLongProperty()
-    {
-        return _longProperty;
-    }
-
-    public String getStringProperty()
-    {
-        return _stringProperty;
-    }
-
-    public void setBooleanProperty(boolean booleanProperty)
-    {
-        _booleanProperty = booleanProperty;
-    }
-
-    public void setDoubleProperty(double doubleProperty)
-    {
-        _doubleProperty = doubleProperty;
-    }
-
-    public void setIntProperty(int intProperty)
-    {
-        _intProperty = intProperty;
-    }
-
-    public void setLongProperty(long longProperty)
-    {
-        _longProperty = longProperty;
-    }
-
-    public void setStringProperty(String stringProperty)
-    {
-        _stringProperty = stringProperty;
-    }
-
-}
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/spec/TestApplicationSpecification.java b/3.0.4/junit/src/org/apache/tapestry/junit/spec/TestApplicationSpecification.java
deleted file mode 100644
index 9b6487a..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/spec/TestApplicationSpecification.java
+++ /dev/null
@@ -1,110 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.spec;
-
-import org.apache.tapestry.ApplicationRuntimeException;
-import org.apache.tapestry.engine.IMonitor;
-import org.apache.tapestry.junit.TapestryTestCase;
-import org.apache.tapestry.spec.IApplicationSpecification;
-import org.apache.tapestry.spec.IExtensionSpecification;
-
-/**
- *  Tests related to {@link org.apache.tapestry.spec.ApplicationSpecification}.
- *
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 2.2
- * 
- **/
-
-public class TestApplicationSpecification extends TapestryTestCase
-{
-
-    public void testBasicExtension() throws Exception
-    {
-        IApplicationSpecification spec = parseApp("BasicExtension.application");
-
-        PropertyBean extension = (PropertyBean) spec.getExtension("testBean");
-
-        assertEquals("booleanProperty", true, extension.getBooleanProperty());
-        assertEquals("intProperty", 18, extension.getIntProperty());
-        assertEquals("longProperty", 383838L, extension.getLongProperty());
-        assertEquals("doubleProperty", -3.14, extension.getDoubleProperty(), 0.0);
-        assertEquals(
-            "stringProperty",
-            "Tapestry: Java Web Components",
-            extension.getStringProperty());
-    }
-
-    public void testExtensionType() throws Exception
-    {
-        IApplicationSpecification spec = parseApp("BasicExtension.application");
-
-        PropertyBean extension = (PropertyBean) spec.getExtension("testBean", Object.class);
-
-        assertNotNull(extension);
-    }
-
-    public void testExtensionTypeFailClass() throws Exception
-    {
-        IApplicationSpecification spec = parseApp("BasicExtension.application");
-
-        try
-        {
-            spec.getExtension("testBean", Number.class);
-            unreachable();
-        }
-        catch (ApplicationRuntimeException ex)
-        {
-            checkException(ex, "does not inherit from class java.lang.Number");
-        }
-
-    }
-
-    public void testExtensionTypeFailInterface() throws Exception
-    {
-        IApplicationSpecification spec = parseApp("BasicExtension.application");
-
-        try
-        {
-            spec.getExtension("testBean", IMonitor.class);
-            unreachable();
-        }
-        catch (ApplicationRuntimeException ex)
-        {
-            checkException(ex, "does not implement interface org.apache.tapestry.engine.IMonitor");
-        }
-
-    }
-
-    public void testExtensionProperty() throws Exception
-    {
-        IApplicationSpecification a = parseApp("ExtensionProperty.application");
-
-        IExtensionSpecification e = a.getExtensionSpecification("testBean");
-
-        assertEquals("Property fred.", "flintstone", e.getProperty("fred"));
-    }
-
-    public void testImmediateExtension() throws Exception
-    {
-        assertEquals("instanceCount", 0, ImmediateExtension.getInstanceCount());
-
-        parseApp("ImmediateExtension.application");
-
-        assertEquals("instanceCount", 1, ImmediateExtension.getInstanceCount());
-    }
-}
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/spec/TestComponentSpecification.java b/3.0.4/junit/src/org/apache/tapestry/junit/spec/TestComponentSpecification.java
deleted file mode 100644
index 0960a19..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/spec/TestComponentSpecification.java
+++ /dev/null
@@ -1,80 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.spec;
-
-import org.apache.tapestry.junit.TapestryTestCase;
-import org.apache.tapestry.spec.IAssetSpecification;
-import org.apache.tapestry.spec.IBeanSpecification;
-import org.apache.tapestry.spec.IComponentSpecification;
-import org.apache.tapestry.spec.IContainedComponent;
-
-
-/**
- *  Test cases for page and component specifications.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 2.2
- * 
- **/
-
-public class TestComponentSpecification extends TapestryTestCase
-{
-
-    public void testBeanProperty() throws Exception
-    {
-        IComponentSpecification s = parseComponent("BeanProperty.jwc");
-        IBeanSpecification fred = s.getBeanSpecification("fred");
-
-        checkList("propertyNames", new String[] { "bruce", "nicole", "zeta" }, fred.getPropertyNames());
-
-        checkProperty(fred, "bruce", "wayne");
-        checkProperty(fred, "nicole", "kidman");
-        checkProperty(fred, "zeta", "jones");
-
-    }
-
-    public void testComponentProperty() throws Exception
-    {
-        IComponentSpecification s = parseComponent("ComponentProperty.jwc");
-        IContainedComponent c = s.getComponent("barney");
-
-        checkList("propertyNames", new String[] { "apple", "chocolate", "frozen" }, c.getPropertyNames());
-
-        checkProperty(c, "apple", "pie");
-        checkProperty(c, "chocolate", "cake");
-        checkProperty(c, "frozen", "yogurt");
-
-    }
-    
-    public void testAssetProperty() throws Exception
-    {
-        IComponentSpecification s = parseComponent("AssetProperty.jwc");
-        
-        checkAsset(s, "private", "hugh", "grant");
-        checkAsset(s, "external", "joan", "rivers");
-        checkAsset(s, "context", "john", "cusak");
-    }
-    
-    private void checkAsset(IComponentSpecification s, String assetName, String propertyName,
-    String expectedValue)
-    {
-        IAssetSpecification a = s.getAsset(assetName);
-        
-        assertEquals("Property " + propertyName + ".",
-        expectedValue,
-        a.getProperty(propertyName));
-    }
-}
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/spec/TestDirection.java b/3.0.4/junit/src/org/apache/tapestry/junit/spec/TestDirection.java
deleted file mode 100644
index 67fc8a8..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/spec/TestDirection.java
+++ /dev/null
@@ -1,44 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.spec;
-
-import org.apache.tapestry.junit.TapestryTestCase;
-import org.apache.tapestry.spec.Direction;
-
-/**
- * Simple tests for the {@link org.apache.tapestry.spec.Direction} class.
- *
- * @author Howard Lewis Ship
- * @version $Id$
- * @since 3.0
- */
-public class TestDirection extends TapestryTestCase
-{
-	public void testAllowInvariant()
-	{
-		assertEquals(true, Direction.IN.getAllowInvariant());
-		assertEquals(true, Direction.CUSTOM.getAllowInvariant());
-		assertEquals(true, Direction.AUTO.getAllowInvariant());
-		assertEquals(false, Direction.FORM.getAllowInvariant());	
-	}
-	
-	public void testGetDisplayName()
-	{
-		assertEquals("in", Direction.IN.getDisplayName());
-		assertEquals("form", Direction.FORM.getDisplayName());
-		assertEquals("auto", Direction.AUTO.getDisplayName());
-		assertEquals("custom", Direction.CUSTOM.getDisplayName());
-	}
-}
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/utils/PublicBean.java b/3.0.4/junit/src/org/apache/tapestry/junit/utils/PublicBean.java
deleted file mode 100644
index f5f7d9d..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/utils/PublicBean.java
+++ /dev/null
@@ -1,47 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.utils;
-
-import java.util.Random;
-
-/**
- *  Bean used by {@link org.apache.tapestry.junit.utils.TestPublicBean}.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 2.2
- *
- **/
-
-public class PublicBean
-{
-    private static Random r = new Random();
-    
-    private static long random()
-    {
-        return r.nextLong();
-    }
-    
-    public String stringProperty = Long.toHexString(random());
-    public Object objectProperty = new Long(random());
-    public long longProperty = random();
-    
-    private long privateLongProperty = random();
-    
-    public double getSyntheticProperty()
-    {
-        return 3.14;
-    }
-}
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/utils/TestAdaptorRegistry.java b/3.0.4/junit/src/org/apache/tapestry/junit/utils/TestAdaptorRegistry.java
deleted file mode 100644
index caa2e82..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/utils/TestAdaptorRegistry.java
+++ /dev/null
@@ -1,162 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.utils;
-
-import java.io.Serializable;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.tapestry.junit.TapestryTestCase;
-import org.apache.tapestry.util.AdaptorRegistry;
-
-/**
- *  Tests the {@link org.apache.tapestry.util.AdaptorRegistry} class.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 3.0
- *
- **/
-
-public class TestAdaptorRegistry extends TapestryTestCase
-{
-
-    private AdaptorRegistry build()
-    {
-        AdaptorRegistry result = new AdaptorRegistry();
-
-        result.register(Object.class, "OBJECT");
-        result.register(Object[].class, "OBJECT[]");
-        result.register(String.class, "STRING");
-        result.register(List.class, "LIST");
-        result.register(Map.class, "MAP");
-        result.register(Serializable.class, "SERIALIZABLE");
-        result.register(int[].class, "INT[]");
-        result.register(double.class, "DOUBLE");
-        result.register(Number[].class, "NUMBER[]");
-
-        return result;
-    }
-
-    private void expect(String expected, Class subjectClass)
-    {
-        Object actual = build().getAdaptor(subjectClass);
-
-        assertEquals(expected, actual);
-    }
-
-    public void testDefaultMatch()
-    {
-        expect("OBJECT", TestAdaptorRegistry.class);
-    }
-
-    public void testClassBeforeInterface()
-    {
-        expect("STRING", String.class);
-    }
-
-    public void testInterfaceMatch()
-    {
-        expect("SERIALIZABLE", Boolean.class);
-    }
-
-    public void testObjectArrayMatch()
-    {
-        expect("OBJECT[]", Object[].class);
-    }
-
-    public void testObjectSubclassArray()
-    {
-        expect("OBJECT[]", String[].class);
-    }
-    
-    public void testRegisteredSubclassArray()
-    {
-    	expect("NUMBER[]", Number[].class);
-    }
-
-    public void testScalarArrayMatch()
-    {
-        expect("INT[]", int[].class);
-    }
-
-    public void testScalarArrayDefault()
-    {
-        // This won't change, scalar arrays can't be cast to Object[].
-
-        expect("SERIALIZABLE", short[].class);
-    }
-
-    public void testScalar()
-    {
-        expect("DOUBLE", double.class);
-    }
-
-    public void testScalarDefault()
-    {
-        expect("OBJECT", float.class);
-    }
-
-    public void testSearchNoInterfaces()
-    {
-        expect("OBJECT", Object.class);
-    }
-
-    public void testNoMatch()
-    {
-        AdaptorRegistry r = new AdaptorRegistry();
-
-        r.register(String.class, "STRING");
-
-        try
-        {
-            r.getAdaptor(Boolean.class);
-
-            unreachable();
-        }
-        catch (IllegalArgumentException ex)
-        {
-            assertEquals("Could not find an adaptor for class java.lang.Boolean.", ex.getMessage());
-        }
-    }
-
-    public void testToString()
-    {
-        AdaptorRegistry r = new AdaptorRegistry();
-
-        r.register(String.class, "STRING");
-
-        assertEquals("AdaptorRegistry[java.lang.String=STRING]", r.toString());
-    }
-
-    public void testDuplicateRegistration()
-    {
-        AdaptorRegistry r = new AdaptorRegistry();
-
-        r.register(String.class, "STRING");
-
-        try
-        {
-
-            r.register(String.class, "STRING2");
-
-            unreachable();
-        }
-        catch (IllegalArgumentException ex)
-        {
-            assertEquals("A registration for class java.lang.String already exists.", ex.getMessage());
-        }
-    }
-}
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/utils/TestDataSqueezer.java b/3.0.4/junit/src/org/apache/tapestry/junit/utils/TestDataSqueezer.java
deleted file mode 100644
index a780e9c..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/utils/TestDataSqueezer.java
+++ /dev/null
@@ -1,420 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.utils;
-
-import java.io.File;
-import java.io.IOException;
-import java.io.Serializable;
-import java.math.BigDecimal;
-import java.net.URL;
-import java.net.URLClassLoader;
-import java.util.HashMap;
-import java.util.Map;
-
-import junit.framework.AssertionFailedError;
-import junit.framework.TestCase;
-import org.apache.tapestry.IResourceResolver;
-import org.apache.tapestry.spec.AssetType;
-import org.apache.tapestry.spec.BeanLifecycle;
-import org.apache.tapestry.util.ComponentAddress;
-import org.apache.tapestry.util.DefaultResourceResolver;
-import org.apache.tapestry.util.io.DataSqueezer;
-import org.apache.tapestry.util.io.ISqueezeAdaptor;
-import org.apache.tapestry.util.prop.OgnlUtils;
-
-/**
- *  A series of tests for {@link DataSqueezer} and friends.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *
- **/
-
-public class TestDataSqueezer extends TestCase
-{
-    private IResourceResolver _resolver = new DefaultResourceResolver();
-    private DataSqueezer s = new DataSqueezer(_resolver);
-
-    public TestDataSqueezer(String name)
-    {
-        super(name);
-    }
-
-    private void attempt(Object input, String expectedEncoding) throws IOException
-    {
-        attempt(input, expectedEncoding, s);
-    }
-
-    private void attempt(Object input, String expectedEncoding, DataSqueezer ds) throws IOException
-    {
-        String encoding = ds.squeeze(input);
-
-        assertEquals("String encoding.", expectedEncoding, encoding);
-
-        Object output = ds.unsqueeze(encoding);
-
-        assertEquals("Decoded object.", input, output);
-    }
-
-    public void testBoolean() throws IOException
-    {
-        attempt(Boolean.TRUE, "T");
-        attempt(Boolean.FALSE, "F");
-    }
-
-    public void testNull() throws IOException
-    {
-        attempt(null, "X");
-    }
-
-    public void testByte() throws IOException
-    {
-        attempt(new Byte((byte) 0), "b0");
-        attempt(new Byte((byte) - 5), "b-5");
-        attempt(new Byte((byte) 72), "b72");
-    }
-
-    public void testFloat() throws IOException
-    {
-        attempt(new Float(0), "f0.0");
-        attempt(new Float(3.1459), "f3.1459");
-        attempt(new Float(-37.23), "f-37.23");
-    }
-
-    public void testDouble() throws IOException
-    {
-        attempt(new Double(0), "d0.0");
-        attempt(new Double(3.1459), "d3.1459");
-        attempt(new Double(-37.23), "d-37.23");
-    }
-
-    public void testInteger() throws IOException
-    {
-        attempt(new Integer(0), "0");
-        attempt(new Integer(205), "205");
-        attempt(new Integer(-173), "-173");
-    }
-
-    public void testLong() throws IOException
-    {
-        attempt(new Long(0), "l0");
-        attempt(new Long(800400300l), "l800400300");
-        attempt(new Long(-987654321l), "l-987654321");
-    }
-
-    public void testShort() throws IOException
-    {
-        attempt(new Short((short) 0), "s0");
-        attempt(new Short((short) - 10), "s-10");
-        attempt(new Short((short) 57), "s57");
-    }
-
-    /** @since 2.2 **/
-
-    public void testCharacter() throws IOException
-    {
-        attempt(new Character('a'), "ca");
-        attempt(new Character('Z'), "cZ");
-    }
-
-    public void testString() throws IOException
-    {
-        attempt("Now is the time for all good men ...", "SNow is the time for all good men ...");
-        attempt("X marks the spot!", "SX marks the spot!");
-        attempt("So long, sucker!", "SSo long, sucker!");
-    }
-
-	/** @since 3.0 **/
-	
-	public void testEnum() throws IOException
-	{
-		attempt(AssetType.PRIVATE, "Eorg.apache.tapestry.spec.AssetType@PRIVATE");
-	}
-
-    public void testComponentAddress() throws IOException 
-    {
-        ComponentAddress objAddress = new ComponentAddress("framework:DirectLink", "component.subcomponent");
-        attempt(objAddress, "Aframework:DirectLink/component.subcomponent");
-
-        objAddress = new ComponentAddress("framework:DirectLink", null);
-        attempt(objAddress, "Aframework:DirectLink/");
-    }
-
-    public void testArray() throws IOException
-    {
-        Object[] input =
-            {
-                new Short((short) - 82),
-                "Time to encode an array.",
-                new Long(38383833273789l),
-                null,
-                Boolean.TRUE,
-                new Double(22. / 7.)};
-
-        String[] encoded = s.squeeze(input);
-
-        assertEquals("Encoded array length.", input.length, encoded.length);
-
-        Object[] output = s.unsqueeze(encoded);
-
-        assertEquals("Output array length.", input.length, output.length);
-
-        for (int i = 0; i < input.length; i++)
-        {
-            assertEquals(input[i], output[i]);
-        }
-    }
-
-    public void testNullArray() throws IOException
-    {
-        Object[] input = null;
-
-        String[] encoded = s.squeeze(input);
-
-        assertNull(encoded);
-
-        Object[] output = s.unsqueeze(encoded);
-
-        assertNull(output);
-    }
-
-    private void attempt(Serializable s, DataSqueezer ds) throws IOException
-    {
-        String encoded = ds.squeeze(s);
-
-        Object output = ds.unsqueeze(encoded);
-
-        assertEquals(s, output);
-    }
-
-    public void testSerializable() throws IOException
-    {
-
-        Map map = new HashMap();
-
-        map.put("alpha", Boolean.TRUE);
-        map.put("beta", BeanLifecycle.NONE);
-        map.put("gamma", new BigDecimal("2590742358742358972.234592348957230948578975248972390857490725"));
-
-        attempt((Serializable) map, s);
-    }
-
-    public static class BooleanHolder
-    {
-        private boolean value;
-
-        public BooleanHolder()
-        {
-        }
-
-        public BooleanHolder(boolean value)
-        {
-            this.value = value;
-        }
-
-        public boolean getValue()
-        {
-            return value;
-        }
-
-        public void setValue(boolean value)
-        {
-            this.value = value;
-        }
-
-        public boolean equals(Object other)
-        {
-            if (other == null)
-                return false;
-
-            if (this == other)
-                return true;
-
-            if (!(other instanceof BooleanHolder))
-                return false;
-
-            BooleanHolder otherHolder = (BooleanHolder) other;
-
-            return value == otherHolder.value;
-        }
-    }
-
-    public static class BHSqueezer implements ISqueezeAdaptor
-    {
-        private static final String PREFIX = "B";
-
-        private static final String TRUE = "BT";
-        private static final String FALSE = "BF";
-
-        public void register(DataSqueezer squeezer)
-        {
-            squeezer.register(PREFIX, BooleanHolder.class, this);
-        }
-
-        public String squeeze(DataSqueezer squeezer, Object data) throws IOException
-        {
-            BooleanHolder h = (BooleanHolder) data;
-
-            return h.getValue() ? TRUE : FALSE;
-
-        }
-
-        public Object unsqueeze(DataSqueezer squeezer, String string) throws IOException
-        {
-            if (string.equals(TRUE))
-                return new BooleanHolder(true);
-
-            if (string.equals(FALSE))
-                return new BooleanHolder(false);
-
-            throw new IOException("Unexpected value.");
-        }
-
-    }
-
-    public void testCustom() throws IOException
-    {
-        DataSqueezer ds = new DataSqueezer(_resolver, new ISqueezeAdaptor[] { new BHSqueezer()});
-
-        attempt(new BooleanHolder(true), "BT", ds);
-        attempt(new BooleanHolder(false), "BF", ds);
-
-        attempt("BooleanHolder", "SBooleanHolder", ds);
-    }
-
-    public void testRegisterShortPrefix()
-    {
-        try
-        {
-            s.register("", BooleanHolder.class, new BHSqueezer());
-
-            throw new AssertionFailedError("Null prefix should be invalid.");
-        }
-        catch (IllegalArgumentException ex)
-        {
-        }
-    }
-
-    public void testRegisterInvalidPrefix()
-    {
-        try
-        {
-            s.register("\n", BooleanHolder.class, new BHSqueezer());
-
-            throw new AssertionFailedError("Prefix should be invalid.");
-        }
-        catch (IllegalArgumentException ex)
-        {
-        }
-    }
-
-    public void testRegisterDupePrefix()
-    {
-        try
-        {
-            s.register("b", BooleanHolder.class, new BHSqueezer());
-
-            throw new AssertionFailedError("Duplicate prefix should be invalid.");
-        }
-        catch (IllegalArgumentException ex)
-        {
-        }
-    }
-
-    public void testRegisterNullClass()
-    {
-        try
-        {
-            s.register("B", null, new BHSqueezer());
-
-            throw new AssertionFailedError("Null data class should be invalid.");
-        }
-        catch (IllegalArgumentException ex)
-        {
-        }
-    }
-
-    public void testRegisterNullSqueezer()
-    {
-        try
-        {
-            s.register("B", BooleanHolder.class, null);
-
-            throw new AssertionFailedError("Null squeezer should be invalid.");
-        }
-        catch (IllegalArgumentException ex)
-        {
-        }
-    }
-
-    private void unable(String message)
-    {
-        System.err.println("Unable to run test " + getClass().getName() + " " + getName() + ":");
-        System.err.println(message);
-        System.err.println("This may be ignored when running tests inside Eclipse.");
-    }
-
-    public void testClassLoader() throws Exception
-    {
-
-        File cd = new File(System.getProperty("user.dir"));
-        File dir = new File(cd.getParentFile(), "examples/Workbench/classes");
-
-        if (!dir.exists())
-        {
-            unable("Unable to find classes directory " + dir + ".");
-            return;
-        }
-
-        URL tutorialClassesURL = dir.toURL();
-
-        URLClassLoader classLoader = new URLClassLoader(new URL[] { tutorialClassesURL });
-
-        Class visitClass = classLoader.loadClass("org.apache.tapestry.workbench.Visit");
-
-        Object visit = visitClass.newInstance();
-
-        if (getClass().getClassLoader() == visit.getClass().getClassLoader())
-        {
-            unable("Unable to setup necessary ClassLoaders for test.");
-            return;
-        }
-
-        // System.out.println("This classloader = " + getClass().getClassLoader());
-        // System.out.println("Visit classloader = " + visit.getClass().getClassLoader());
-
-        IResourceResolver resolver = new DefaultResourceResolver(visit.getClass().getClassLoader());
-
-        String stringValue = Long.toHexString(System.currentTimeMillis());
-
-        OgnlUtils.set("stringValue", resolver, visit, stringValue);
-
-        DataSqueezer squeezer = new DataSqueezer(resolver);
-
-        String squeezed = squeezer.squeeze(visit);
-
-        Object outVisit = squeezer.unsqueeze(squeezed);
-
-        // System.out.println("outVisit classloader = " + outVisit.getClass().getClassLoader());
-
-        assertNotNull(outVisit);
-        assertTrue("Input and output objects not same.", visit != outVisit);
-
-        String outStringValue = (String) OgnlUtils.get("stringValue", resolver, outVisit);
-
-        assertEquals("Stored string.", stringValue, outStringValue);
-    }
-
-}
\ No newline at end of file
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/utils/TestEnum.java b/3.0.4/junit/src/org/apache/tapestry/junit/utils/TestEnum.java
deleted file mode 100644
index 16352e0..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/utils/TestEnum.java
+++ /dev/null
@@ -1,64 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.utils;
-
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.ObjectInputStream;
-import java.io.ObjectOutputStream;
-
-import org.apache.tapestry.junit.TapestryTestCase;
-import org.apache.tapestry.spec.AssetType;
-import org.apache.tapestry.spec.Direction;
-
-/**
- *  Tests the ability of an {@link org.apache.tapestry.util.Enum} 
- *  to be serialized and deserialized properly.
- * 
- *  @author Howard Lewis Ship
- *  @version $Id$
- * 
- **/
-
-public class TestEnum extends TapestryTestCase
-{
-
-    public void testSerialization() throws Exception
-    {
-        AssetType start = AssetType.EXTERNAL;
-
-        ByteArrayOutputStream bos = new ByteArrayOutputStream();
-        ObjectOutputStream oos = new ObjectOutputStream(bos);
-
-        oos.writeObject(start);
-
-        oos.close();
-
-        ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray());
-        ObjectInputStream ois = new ObjectInputStream(bis);
-
-        AssetType result = (AssetType) ois.readObject();
-
-        assertEquals(start, result);
-        assertSame(start, result);
-    }
-
-    public void testToString()
-    {
-        assertEquals("AssetType[EXTERNAL]", AssetType.EXTERNAL.toString());
-        assertEquals("Direction[CUSTOM]", Direction.CUSTOM.toString());
-    }
-
-}
\ No newline at end of file
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/utils/TestIdAllocator.java b/3.0.4/junit/src/org/apache/tapestry/junit/utils/TestIdAllocator.java
deleted file mode 100644
index 40df5d0..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/utils/TestIdAllocator.java
+++ /dev/null
@@ -1,68 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.utils;
-
-import org.apache.tapestry.junit.TapestryTestCase;
-import org.apache.tapestry.util.IdAllocator;
-
-/**
- *  Tests the {@link org.apache.tapestry.util.IdAllocator} class.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 3.0
- *
- **/
-
-public class TestIdAllocator extends TapestryTestCase
-{
-
-    public void testSimple()
-    {
-        IdAllocator a = new IdAllocator();
-
-        assertEquals("name", a.allocateId("name"));
-
-        for (int i = 0; i < 10; i++)
-            assertEquals("name$" + i, a.allocateId("name"));
-    }
-
-    public void testDegenerate()
-    {
-        IdAllocator a = new IdAllocator();
-
-        assertEquals("d$1", a.allocateId("d$1"));
-
-        assertEquals("d", a.allocateId("d"));
-        assertEquals("d$0", a.allocateId("d"));
-        assertEquals("d$2", a.allocateId("d"));
-
-        assertEquals("d$3", a.allocateId("d"));
-        assertEquals("d$1$0", a.allocateId("d$1"));
-    }
-
-    public void testClear()
-    {
-        IdAllocator a = new IdAllocator();
-
-        assertEquals("foo", a.allocateId("foo"));
-        assertEquals("foo_0", a.allocateId("foo_0"));
-
-        a.clear();
-
-        assertEquals("foo", a.allocateId("foo"));
-        assertEquals("foo_0", a.allocateId("foo_0"));
-    }
-}
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/utils/TestLocalizedNameGenerator.java b/3.0.4/junit/src/org/apache/tapestry/junit/utils/TestLocalizedNameGenerator.java
deleted file mode 100644
index 45b5fde..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/utils/TestLocalizedNameGenerator.java
+++ /dev/null
@@ -1,129 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.utils;
-
-import java.util.Locale;
-import java.util.NoSuchElementException;
-
-import junit.framework.AssertionFailedError;
-
-import org.apache.tapestry.junit.TapestryTestCase;
-import org.apache.tapestry.util.LocalizedNameGenerator;
-
-/**
- *  Suite of tests for {@link org.apache.tapestry.util.LocalizedNameGenerator}.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 3.0
- *
- **/
-
-public class TestLocalizedNameGenerator extends TapestryTestCase
-{
-
-    public void testBasic()
-    {
-        LocalizedNameGenerator g = new LocalizedNameGenerator("basic", Locale.US, ".test");
-
-        assertTrue(g.more());
-        assertEquals("basic_en_US.test", g.next());
-
-        assertTrue(g.more());
-        assertEquals("basic_en.test", g.next());
-
-        assertTrue(g.more());
-        assertEquals("basic.test", g.next());
-
-        assertTrue(!g.more());
-    }
-
-    public void testNoCountry()
-    {
-        LocalizedNameGenerator g = new LocalizedNameGenerator("noCountry", Locale.FRENCH, ".zap");
-
-        assertTrue(g.more());
-        assertEquals("noCountry_fr.zap", g.next());
-
-        assertTrue(g.more());
-        assertEquals("noCountry.zap", g.next());
-
-        assertTrue(!g.more());
-    }
-
-    public void testVariantWithoutCountry()
-    {
-        LocalizedNameGenerator g =
-            new LocalizedNameGenerator("fred", new Locale("en", "", "GEEK"), ".foo");
-
-        assertTrue(g.more());
-
-        // The double-underscore is correct, it's a kind
-        // of placeholder for the null country.
-        // JDK1.3 always converts the locale to upper case.  JDK 1.4
-        // does not.  To keep this test happyt, we selected an all-uppercase
-        // locale.
-
-        assertEquals("fred_en__GEEK.foo", g.next());
-
-        assertTrue(g.more());
-        assertEquals("fred_en.foo", g.next());
-
-        assertTrue(g.more());
-        assertEquals("fred.foo", g.next());
-
-        assertTrue(!g.more());
-    }
-
-    public void testNullLocale()
-    {
-        LocalizedNameGenerator g = new LocalizedNameGenerator("nullLocale", null, ".bar");
-
-        assertTrue(g.more());
-        assertEquals("nullLocale.bar", g.next());
-
-        assertTrue(!g.more());
-    }
-
-    public void testNullSuffix()
-    {
-        LocalizedNameGenerator g = new LocalizedNameGenerator("nullSuffix", null, null);
-
-        assertTrue(g.more());
-        assertEquals("nullSuffix", g.next());
-
-        assertTrue(!g.more());
-    }
-
-    public void testForException()
-    {
-        LocalizedNameGenerator g = new LocalizedNameGenerator("bob", null, ".foo");
-
-        assertTrue(g.more());
-        assertEquals("bob.foo", g.next());
-
-        assertTrue(!g.more());
-
-        try
-        {
-            g.next();
-
-            throw new AssertionFailedError("Unreachable.");
-        }
-        catch (NoSuchElementException ex)
-        {
-        }
-    }
-}
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/utils/TestPool.java b/3.0.4/junit/src/org/apache/tapestry/junit/utils/TestPool.java
deleted file mode 100644
index 832764c..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/utils/TestPool.java
+++ /dev/null
@@ -1,253 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.utils;
-
-import org.apache.tapestry.ApplicationRuntimeException;
-import org.apache.tapestry.junit.TapestryTestCase;
-import org.apache.tapestry.util.pool.IPoolable;
-import org.apache.tapestry.util.pool.IPoolableAdaptor;
-import org.apache.tapestry.util.pool.Pool;
-
-/**
- *  Tests {@link org.apache.tapestry.util.pool.Pool}.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 3.0
- *
- **/
-
-public class TestPool extends TapestryTestCase
-{
-    public static class OrdinaryBean
-    {
-    }
-
-    public static class BadBean
-    {
-        private BadBean()
-        {
-        }
-    }
-
-    public static class NotifyBean implements IPoolable
-    {
-        public boolean _reset;
-        public boolean _discarded;
-
-        public void discardFromPool()
-        {
-            _discarded = true;
-        }
-
-        public void resetForPool()
-        {
-            _reset = true;
-        }
-    }
-
-    public static class AdaptedBean
-    {
-        public boolean _reset;
-        public boolean _discarded;
-    }
-
-    public static class Adaptor implements IPoolableAdaptor
-    {
-        public void discardFromPool(Object object)
-        {
-            AdaptedBean bean = (AdaptedBean) object;
-
-            bean._discarded = true;
-        }
-
-        public void resetForPool(Object object)
-        {
-            AdaptedBean bean = (AdaptedBean) object;
-
-            bean._reset = true;
-        }
-
-    }
-
-    public void testStore()
-    {
-        Pool p = new Pool(false);
-
-        assertEquals(0, p.getKeyCount());
-        assertEquals(0, p.getPooledCount());
-
-        String key = "KEY";
-        String value = "VALUE";
-
-        p.store(key, value);
-
-        assertEquals(1, p.getKeyCount());
-        assertEquals(1, p.getPooledCount());
-    }
-
-    public void testStoreAndRetrieve()
-    {
-        String key = "KEY";
-        Pool p = new Pool(false);
-
-        for (int i = 0; i < 3; i++)
-            p.store(key, new OrdinaryBean());
-
-        Object last = null;
-
-        for (int i = 0; i < 4; i++)
-        {
-            Object bean = p.retrieve(key);
-
-            if (i == 3)
-                assertNull(bean);
-            else
-                assertNotNull(bean);
-
-            assertTrue("Different bean than last retrieved. ", !(last == bean));
-
-            last = bean;
-        }
-    }
-
-    public void testNotifications()
-    {
-        String key = "KEY";
-
-        Pool p = new Pool(false);
-        p.setWindow(1);
-
-        NotifyBean bean = new NotifyBean();
-
-        assertEquals(false, bean._reset);
-        assertEquals(false, bean._discarded);
-
-        p.store(key, bean);
-
-        assertEquals(true, bean._reset);
-        assertEquals(false, bean._discarded);
-
-        p.executeCleanup();
-
-        assertTrue(bean._discarded);
-
-        assertNull(p.retrieve(key));
-    }
-
-    public void testAdaptedNotifications()
-    {
-        String key = "KEY";
-
-        Pool p = new Pool(false);
-        p.registerAdaptor(AdaptedBean.class, new Adaptor());
-        p.setWindow(1);
-
-        AdaptedBean bean = new AdaptedBean();
-
-        assertEquals(false, bean._reset);
-        assertEquals(false, bean._discarded);
-
-        p.store(key, bean);
-
-        assertEquals(true, bean._reset);
-        assertEquals(false, bean._discarded);
-
-        p.executeCleanup();
-
-        assertTrue(bean._discarded);
-
-        assertNull(p.retrieve(key));
-    }
-
-    public void testClear()
-    {
-        String key = "KEY";
-
-        Pool p = new Pool(false);
-        p.setWindow(1);
-
-        NotifyBean[] bean = new NotifyBean[3];
-
-        for (int i = 0; i < 3; i++)
-        {
-            bean[i] = new NotifyBean();
-
-            p.store(key, bean[i]);
-        }
-
-        assertEquals(3, p.getPooledCount());
-
-        p.clear();
-
-        for (int i = 0; i < 3; i++)
-            assertEquals(true, bean[i]._discarded);
-
-        assertEquals(0, p.getPooledCount());
-
-        assertNull(p.retrieve(key));
-    }
-
-    /**
-     *  Test retrieve and store of StringBuffer.
-     * 
-     **/
-
-    public void testStringBuffer()
-    {
-        Pool p = new Pool(false);
-
-        StringBuffer buffer = (StringBuffer) p.retrieve(StringBuffer.class);
-
-        assertNotNull(buffer);
-
-        buffer.append("foo");
-
-        p.store(buffer);
-
-        assertEquals(0, buffer.length());
-
-        StringBuffer buffer2 = (StringBuffer) p.retrieve(StringBuffer.class);
-
-        assertSame(buffer, buffer2);
-
-        StringBuffer buffer3 = (StringBuffer) p.retrieve(StringBuffer.class);
-
-        assertEquals(false, buffer == buffer3);
-    }
-
-    /**
-     *  Test retrieve of a bean that can't be instantiated.
-     * 
-     **/
-
-    public void testBadBean()
-    {
-        Pool p = new Pool(false);
-
-        try
-        {
-            p.retrieve(BadBean.class);
-
-            unreachable();
-        }
-        catch (ApplicationRuntimeException ex)
-        {
-            checkException(
-                ex,
-                "Unable to instantiate new instance of class org.apache.tapestry.junit.utils.TestPool$BadBean.");
-        }
-    }
-}
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/utils/TestPropertyFinder.java b/3.0.4/junit/src/org/apache/tapestry/junit/utils/TestPropertyFinder.java
deleted file mode 100644
index c12b08d..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/utils/TestPropertyFinder.java
+++ /dev/null
@@ -1,81 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.utils;
-
-import junit.framework.TestCase;
-import org.apache.tapestry.AbstractComponent;
-import org.apache.tapestry.html.BasePage;
-import org.apache.tapestry.util.prop.PropertyFinder;
-import org.apache.tapestry.util.prop.PropertyInfo;
-
-/**
- *  Tests the {@link org.apache.tapestry.util.prop.PropertyFinder}
- *  class.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 2.2
- *
- **/
-
-public class TestPropertyFinder extends TestCase
-{
-
-    public TestPropertyFinder(String name)
-    {
-        super(name);
-    }
-
-    public void testReadOnlyProperty()
-    {
-        PropertyInfo i = PropertyFinder.getPropertyInfo(PublicBean.class, "syntheticProperty");
-
-        assertEquals("syntheticProperty", i.getName());
-        assertEquals(double.class, i.getType());
-        assertEquals(true, i.isRead());
-        assertEquals(false, i.isReadWrite());
-        assertEquals(false, i.isWrite());
-    }
-
-    public void testReadWriteProperty()
-    {
-        PropertyInfo i = PropertyFinder.getPropertyInfo(AbstractComponent.class, "id");
-
-        assertEquals("id", i.getName());
-        assertEquals(String.class, i.getType());
-        assertEquals(true, i.isRead());
-        assertEquals(true, i.isReadWrite());
-        assertEquals(true, i.isWrite());
-    }
-
-    public void testInheritedProperty()
-    {
-        PropertyInfo i = PropertyFinder.getPropertyInfo(BasePage.class, "pageName");
-
-        assertEquals("pageName", i.getName());
-        assertEquals(String.class, i.getType());
-        assertEquals(true, i.isRead());
-        assertEquals(true, i.isReadWrite());
-        assertEquals(true, i.isWrite());
-    }
-
-    public void testUnknownProperty()
-    {
-        PropertyInfo i = PropertyFinder.getPropertyInfo(PublicBean.class, "fred");
-
-        assertNull(i);
-    }
-
-}
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/utils/TestRegexpMatcher.java b/3.0.4/junit/src/org/apache/tapestry/junit/utils/TestRegexpMatcher.java
deleted file mode 100644
index 2200769..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/utils/TestRegexpMatcher.java
+++ /dev/null
@@ -1,99 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.utils;
-
-import org.apache.tapestry.ApplicationRuntimeException;
-import org.apache.tapestry.junit.TapestryTestCase;
-import org.apache.tapestry.util.RegexpMatcher;
-
-/**
- *  Simple test case for {@link org.apache.tapestry.util.RegexpMatcher}.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 3.0
- *
- **/
-public class TestRegexpMatcher extends TapestryTestCase
-{
-
-    public void testMatch()
-    {
-        RegexpMatcher m = new RegexpMatcher();
-
-        assertTrue(m.matches("[a-z]+", "c"));
-        assertTrue(m.matches("foo|foot", "foo"));
-    }
-
-    public void testNonmatch()
-    {
-        RegexpMatcher m = new RegexpMatcher();
-
-        assertTrue(!m.matches("[0-9]+", "q"));
-        assertTrue(!m.matches("foo|foot", "foot"));
-    }
-
-    public void testBadPattern()
-    {
-        RegexpMatcher m = new RegexpMatcher();
-
-        try
-        {
-            m.matches("[[[", "x");
-
-            unreachable();
-        }
-        catch (ApplicationRuntimeException ex)
-        {
-            checkException(ex, "Unmatched [] in expression");
-        }
-    }
-
-    public void testClear()
-    {
-        RegexpMatcher m = new RegexpMatcher();
-
-        m.clear();
-    }
-
-    public void testContains()
-    {
-        RegexpMatcher m = new RegexpMatcher();
-
-        assertTrue(m.contains("[a-z]+", "c"));
-        assertTrue(m.contains("^(\\d{5}(-\\d{4})?)$", "06514"));
-        assertTrue(m.contains("^(\\d{5}(-\\d{4})?)$", "06514-3149"));
-        assertTrue(m.contains("foo|foot", "12foot12"));
-    }
-
-    public void testNotContains()
-    {
-        RegexpMatcher m = new RegexpMatcher();
-
-        assertTrue(!m.contains("[0-9]+", "q"));
-        assertTrue(!m.contains("^(\\d{5}(-\\d{4})?)$", "0651"));
-        assertTrue(!m.contains("^(\\d{5}(-\\d{4})?)$", "065147"));
-        assertTrue(!m.contains("^(\\d{5}(-\\d{4})?)$", "06514-314"));
-        assertTrue(!m.contains("^(\\d{5}(-\\d{4})?)$", "06514-31497"));
-        assertTrue(!m.contains("^(foo|foot)$", "12foot12"));
-    }
-
-    public void testGetEscapedPatternStrings()
-    {
-        RegexpMatcher m = new RegexpMatcher();
-
-        assertEquals(m.getEscapedPatternString("^\\d$"), "\\^\\\\d\\$");
-    }
-}
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/valid/MockField.java b/3.0.4/junit/src/org/apache/tapestry/junit/valid/MockField.java
deleted file mode 100644
index b0a6111..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/valid/MockField.java
+++ /dev/null
@@ -1,101 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.valid;
-
-import java.util.Locale;
-
-import org.apache.tapestry.IForm;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.IPage;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.form.AbstractFormComponent;
-import org.apache.tapestry.form.IFormComponent;
-import org.apache.tapestry.html.BasePage;
-
-
-/**
- *  Used as a stand-in for a real component when testing the 
- *  {@link org.apache.tapestry.valid.IValidator}
- *  implementations.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 1.0.8
- *
- **/
-
-public class MockField extends AbstractFormComponent implements IFormComponent
-{
-	private String _displayName;
-    private IForm _form;
-
-    public MockField(String displayName)
-    {
-        this(displayName, new MockForm());
-    }
-    
-
-	public MockField(String displayName, IForm form)
-	{
-		_displayName = displayName;
-        _form = form;
-        
-        IPage page = new BasePage();
-        page.setLocale(Locale.ENGLISH);
-        page.addComponent(this);
-        
-        setPage(page);
-	}
-	
-	public void setForm(IForm form)
-	{
-		_form = form;
-	}
-
-	public String getDisplayName()
-	{
-		return _displayName;
-	}
-
-	public String getName()
-	{
-		return _displayName;
-	}
-
-
-    protected void renderComponent(IMarkupWriter writer, IRequestCycle cycle)
-    {
-    }
-
-    public IForm getForm()
-    {
-        return _form;
-    }
-
-    public boolean isDisabled()
-    {
-        return false;
-    }
-
-	public String toString()
-	{
-		return "MockField[" + _displayName + "]";
-	}
-	
-    public void setName(String name)
-    {
-    }
-
-}
\ No newline at end of file
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/valid/MockForm.java b/3.0.4/junit/src/org/apache/tapestry/junit/valid/MockForm.java
deleted file mode 100644
index 67e7f2a..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/valid/MockForm.java
+++ /dev/null
@@ -1,269 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.valid;
-
-import java.util.Collection;
-import java.util.Map;
-
-import org.apache.tapestry.IAsset;
-import org.apache.tapestry.IBinding;
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.IMessages;
-import org.apache.tapestry.IForm;
-import org.apache.tapestry.IMarkupWriter;
-import org.apache.tapestry.INamespace;
-import org.apache.tapestry.IPage;
-import org.apache.tapestry.IRender;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.engine.IPageLoader;
-import org.apache.tapestry.form.FormEventType;
-import org.apache.tapestry.form.IFormComponent;
-import org.apache.tapestry.spec.BaseLocatable;
-import org.apache.tapestry.spec.IComponentSpecification;
-import org.apache.tapestry.valid.IValidationDelegate;
-
-/**
- *  Simulates an {@link IForm} for the test suite.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 2.1
- *
- **/
-
-public class MockForm extends BaseLocatable implements IForm
-{
-    private String _name;
-
-    public MockForm()
-    {
-        this("DefaultFormName");
-    }
-
-    public MockForm(String name)
-    {
-        _name = name;
-    }
-
-    public void rewind(IMarkupWriter writer, IRequestCycle cycle)
-    {
-    }
-
-    public void addEventHandler(FormEventType type, String functionName)
-    {
-    }
-
-    public String getElementId(IFormComponent component)
-    {
-        return null;
-    }
-
-    public String getElementId(IFormComponent component, String baseId)
-    {
-        return null;
-    }
-
-    public String getName()
-    {
-        return _name;
-    }
-
-    public boolean isRewinding()
-    {
-        return false;
-    }
-
-    public IValidationDelegate getDelegate()
-    {
-        return null;
-    }
-
-    public boolean getRequiresSession()
-    {
-        return false;
-    }
-
-    public void addAsset(String name, IAsset asset)
-    {
-    }
-
-    public void addComponent(IComponent component)
-    {
-    }
-
-    public void addWrapped(IRender element)
-    {
-    }
-
-    public Map getAssets()
-    {
-        return null;
-    }
-
-    public IAsset getAsset(String name)
-    {
-        return null;
-    }
-
-    public IBinding getBinding(String name)
-    {
-        return null;
-    }
-
-    public Collection getBindingNames()
-    {
-        return null;
-    }
-
-    public Map getBindings()
-    {
-        return null;
-    }
-
-    public IComponent getComponent(String id)
-    {
-        return null;
-    }
-
-    public IComponent getContainer()
-    {
-        return null;
-    }
-
-    public void setContainer(IComponent value)
-    {
-    }
-
-    public String getExtendedId()
-    {
-        return null;
-    }
-
-    public String getId()
-    {
-        return null;
-    }
-
-    public void setId(String value)
-    {
-    }
-
-    public String getIdPath()
-    {
-        return null;
-    }
-
-    public IPage getPage()
-    {
-        return null;
-    }
-
-    public void setPage(IPage value)
-    {
-    }
-
-    public IComponentSpecification getSpecification()
-    {
-        return null;
-    }
-
-    public void setSpecification(IComponentSpecification value)
-    {
-    }
-
-    public void renderWrapped(IMarkupWriter writer, IRequestCycle cycle)
-    {
-    }
-
-    public void setBinding(String name, IBinding binding)
-    {
-    }
-
-    public Map getComponents()
-    {
-        return null;
-    }
-
-    public void finishLoad(
-        IRequestCycle cycle,
-        IPageLoader loader,
-        IComponentSpecification specification)
-    {
-    }
-
-    public String getString(String key)
-    {
-        return null;
-    }
-
-    public void render(IMarkupWriter writer, IRequestCycle cycle)
-    {
-    }
-
-    public INamespace getNamespace()
-    {
-        return null;
-    }
-
-    public void setNamespace(INamespace namespace)
-    {
-    }
-
-    public void addBody(IRender element)
-    {
-    }
-
-    public void renderBody(IMarkupWriter writer, IRequestCycle cycle)
-    {
-    }
-
-    public IMessages getMessages()
-    {
-        return null;
-    }
-
-    public void setEncodingType(String encodingType)
-    {
-    }
-
-    /** @since 3.0 */
-    public void addHiddenValue(String name, String value)
-    {
-
-    }
-    
-    /**
-	 * @see org.apache.tapestry.IForm#addHiddenValue(java.lang.String, java.lang.String, java.lang.String)
-	 */
-	public void addHiddenValue(String name, String id, String value) {
-
-	}
-
-
-    public String getMessage(String key)
-    {
-        return null;
-    }
-
-	public void setProperty(String propertyName, Object value)
-	{		
-	}
-
-	public Object getProperty(String propertyName)
-	{
-		return null;
-	}
-
-}
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/valid/TestDateValidator.java b/3.0.4/junit/src/org/apache/tapestry/junit/valid/TestDateValidator.java
deleted file mode 100644
index d9899a1..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/valid/TestDateValidator.java
+++ /dev/null
@@ -1,231 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.valid;
-
-import java.text.DateFormat;
-import java.util.Calendar;
-import java.util.Date;
-import java.util.GregorianCalendar;
-import java.util.Locale;
-
-import org.apache.tapestry.junit.TapestryTestCase;
-import org.apache.tapestry.valid.DateValidator;
-import org.apache.tapestry.valid.ValidationConstraint;
-import org.apache.tapestry.valid.ValidatorException;
-
-/**
- *  
- * Tests the {@link DateValidator} class.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 1.0.8
- *
- **/
-
-public class TestDateValidator extends TapestryTestCase
-{
-    private Calendar calendar = new GregorianCalendar();
-
-    private DateValidator v = new DateValidator();
-
-    private Date buildDate(int month, int day, int year)
-    {
-        calendar.clear();
-
-        calendar.set(Calendar.MONTH, month);
-        calendar.set(Calendar.DAY_OF_MONTH, day);
-        calendar.set(Calendar.YEAR, year);
-
-        return calendar.getTime();
-    }
-
-    public void testToStringNull()
-    {
-        String out = v.toString(null, null);
-
-        assertNull(out);
-    }
-
-    public void testToStringValid()
-    {
-        String out = v.toString(null, buildDate(Calendar.DECEMBER, 8, 2001));
-
-        assertEquals("Result.", "12/08/2001", out);
-    }
-
-    public void testToStringFormat()
-    {
-        if (IS_JDK13)
-            return;
-
-        DateFormat format = DateFormat.getDateInstance(DateFormat.SHORT, Locale.GERMAN);
-
-        v.setFormat(format);
-
-        String out = v.toString(null, buildDate(Calendar.DECEMBER, 8, 2001));
-
-        assertEquals("Result.", "08.12.01", out);
-    }
-
-    public void testToObjectNull() throws ValidatorException
-    {
-        Object out = v.toObject(new MockField("toObjectNull"), null);
-
-        assertNull(out);
-    }
-
-    public void testToObjectEmpty() throws ValidatorException
-    {
-        Object out = v.toObject(new MockField("toObjectNull"), "");
-
-        assertNull(out);
-    }
-
-    public void testToObjectInvalid()
-    {
-        try
-        {
-            v.toObject(new MockField("badDatesIndy"), "frankenhooker");
-
-            unreachable();
-        }
-        catch (ValidatorException ex)
-        {
-            assertEquals(
-                "Invalid date format for badDatesIndy.  Format is MM/dd/yyyy.",
-                ex.getMessage());
-            assertEquals(ValidationConstraint.DATE_FORMAT, ex.getConstraint());
-        }
-    }
-
-    public void testOverrideInvalidDateFormatMessage()
-    {
-        v.setInvalidDateFormatMessage("Enter a valid date for {0}.");
-
-        try
-        {
-            v.toObject(new MockField("badDatesIndy"), "frankenhooker");
-
-            unreachable();
-        }
-        catch (ValidatorException ex)
-        {
-            assertEquals("Enter a valid date for badDatesIndy.", ex.getMessage());
-
-        }
-    }
-
-    public void testToObjectFormat() throws ValidatorException
-    {
-        if (IS_JDK13)
-            return;
-
-        DateFormat format = DateFormat.getDateInstance(DateFormat.SHORT, Locale.GERMAN);
-
-        v.setFormat(format);
-
-        // Again, adjust for missing German localization in JDK 1.3
-
-        Object out = v.toObject(null, "08.12.01");
-
-        assertEquals("Result.", buildDate(Calendar.DECEMBER, 8, 2001), out);
-    }
-
-    public void testToObjectMinimum()
-    {
-        v.setMinimum(buildDate(Calendar.DECEMBER, 24, 2001));
-
-        try
-        {
-            v.toObject(new MockField("toObjectMinimum"), "12/8/2001");
-            unreachable();
-        }
-        catch (ValidatorException ex)
-        {
-            assertEquals(ValidationConstraint.TOO_SMALL, ex.getConstraint());
-        }
-    }
-
-    public void testOverrideDateTooEarlyMessage()
-    {
-        v.setMinimum(buildDate(Calendar.DECEMBER, 24, 2001));
-        v.setDateTooEarlyMessage("Provide a date for {0} after Dec 24 2001.");
-
-        try
-        {
-            v.toObject(new MockField("inputDate"), "12/8/2001");
-            unreachable();
-        }
-        catch (ValidatorException ex)
-        {
-            assertEquals("Provide a date for inputDate after Dec 24 2001.", ex.getMessage());
-            assertEquals(ValidationConstraint.TOO_SMALL, ex.getConstraint());
-        }
-    }
-
-    public void testToObjectMinimumNull() throws ValidatorException
-    {
-        v.setMinimum(buildDate(Calendar.DECEMBER, 24, 2001));
-
-        Object out = v.toObject(null, null);
-
-        assertNull(out);
-    }
-
-    public void testToObjectMaximum()
-    {
-        v.setMaximum(buildDate(Calendar.DECEMBER, 24, 2001));
-
-        try
-        {
-            v.toObject(new MockField("toObjectMaximum"), "12/8/2002");
-            unreachable();
-        }
-        catch (ValidatorException ex)
-        {
-            assertEquals("toObjectMaximum must be on or before 12/24/2001.", ex.getMessage());
-            assertEquals(ValidationConstraint.TOO_LARGE, ex.getConstraint());
-        }
-    }
-
-    public void testOverrideDateTooLateMessage()
-    {
-        v.setMaximum(buildDate(Calendar.DECEMBER, 24, 2001));
-        v.setDateTooLateMessage("Try again with a date before Dec 24 2001 in {0}.");
-
-        try
-        {
-            v.toObject(new MockField("toObjectMaximum"), "12/8/2002");
-            unreachable();
-        }
-        catch (ValidatorException ex)
-        {
-            assertEquals(
-                "Try again with a date before Dec 24 2001 in toObjectMaximum.",
-                ex.getMessage());
-        }
-    }
-
-    public void testToObjectMaximumNull() throws ValidatorException
-    {
-        v.setMaximum(buildDate(Calendar.DECEMBER, 24, 2001));
-
-        Object out = v.toObject(null, null);
-
-        assertNull(out);
-    }
-
-}
\ No newline at end of file
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/valid/TestEmailValidator.java b/3.0.4/junit/src/org/apache/tapestry/junit/valid/TestEmailValidator.java
deleted file mode 100644
index cb74fa8..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/valid/TestEmailValidator.java
+++ /dev/null
@@ -1,106 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.valid;
-
-import org.apache.tapestry.junit.TapestryTestCase;
-import org.apache.tapestry.valid.EmailValidator;
-import org.apache.tapestry.valid.ValidationConstraint;
-import org.apache.tapestry.valid.ValidatorException;
-
-/**
- * Tests for {@link org.apache.tapestry.valid.EmailValidator}.
- *
- * @author Howard Lewis Ship
- * @version $Id$
- * @since 3.0
- *
- **/
-
-public class TestEmailValidator extends TapestryTestCase
-{
-    private EmailValidator v = new EmailValidator();
-
-    public void testValidEmail() throws ValidatorException
-    {
-        Object result = v.toObject(new MockField("email"), "foo@bar.com");
-        assertEquals("foo@bar.com", result);
-    }
-
-    public void testInvalidEmail()
-    {
-        try
-        {
-            v.toObject(new MockField("email"), "fred");
-            unreachable();
-        }
-        catch (ValidatorException ex)
-        {
-            assertEquals(ValidationConstraint.EMAIL_FORMAT, ex.getConstraint());
-            assertEquals(
-                "Invalid email format for email.  Format is user@hostname.",
-                ex.getMessage());
-        }
-    }
-
-    public void testOverrideInvalidEmailFormatMessage()
-    {
-        v.setInvalidEmailFormatMessage(
-            "Try a valid e-mail address (for {0}), like ''dick@wad.com.''");
-
-        try
-        {
-            v.toObject(new MockField("email"), "fred");
-            unreachable();
-        }
-        catch (ValidatorException ex)
-        {
-            assertEquals(
-                "Try a valid e-mail address (for email), like 'dick@wad.com.'",
-                ex.getMessage());
-        }
-    }
-
-    public void testTooShort()
-    {
-        v.setMinimumLength(20);
-
-        try
-        {
-            v.toObject(new MockField("short"), "foo@bar.com");
-            unreachable();
-        }
-        catch (ValidatorException ex)
-        {
-            assertEquals(ValidationConstraint.MINIMUM_WIDTH, ex.getConstraint());
-            assertEquals("You must enter at least 20 characters for short.", ex.getMessage());
-        }
-    }
-
-    public void testOverrideMinimumLengthMessage()
-    {
-        v.setMinimumLength(20);
-        v.setMinimumLengthMessage("E-mail addresses must be at least 20 characters.");
-
-        try
-        {
-            v.toObject(new MockField("short"), "foo@bar.com");
-            unreachable();
-        }
-        catch (ValidatorException ex)
-        {
-            assertEquals("E-mail addresses must be at least 20 characters.", ex.getMessage());
-        }
-    }
-}
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/valid/TestNumberValidator.java b/3.0.4/junit/src/org/apache/tapestry/junit/valid/TestNumberValidator.java
deleted file mode 100644
index ab66ec3..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/valid/TestNumberValidator.java
+++ /dev/null
@@ -1,288 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.valid;
-
-import java.math.BigDecimal;
-import java.math.BigInteger;
-
-import org.apache.tapestry.form.IFormComponent;
-import org.apache.tapestry.junit.TapestryTestCase;
-import org.apache.tapestry.valid.NumberValidator;
-import org.apache.tapestry.valid.ValidationConstraint;
-import org.apache.tapestry.valid.ValidatorException;
-
-/**
- *  Test the {@link NumberValidator}.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 1.0.8
- *
- **/
-
-public class TestNumberValidator extends TapestryTestCase
-{
-    private NumberValidator v = new NumberValidator();
-
-    private void testPassThru(String displayName, Class valueTypeClass, Number input)
-        throws ValidatorException
-    {
-        testPassThru(new MockField(displayName), valueTypeClass, input);
-    }
-
-    private void testPassThru(IFormComponent field, Class valueTypeClass, Number input)
-        throws ValidatorException
-    {
-        v.setValueTypeClass(valueTypeClass);
-
-        String s = v.toString(field, input);
-
-        Object o = v.toObject(field, s);
-
-        assertEquals("Input and output.", input, o);
-    }
-
-    public void testShort() throws ValidatorException
-    {
-        testPassThru("testShort", Short.class, new Short((short) 1000));
-    }
-
-    public void testInteger() throws ValidatorException
-    {
-        testPassThru("testInteger", Integer.class, new Integer(373));
-    }
-
-    public void testByte() throws ValidatorException
-    {
-        testPassThru("testByte", Byte.class, new Byte((byte) 131));
-    }
-
-    public void testFloat() throws ValidatorException
-    {
-        testPassThru("testFloat", Float.class, new Float(3.1415));
-    }
-
-    public void testDouble() throws ValidatorException
-    {
-        testPassThru("testDouble", Double.class, new Double(348348.484854848));
-    }
-
-    public void testLong() throws ValidatorException
-    {
-        testPassThru("testLong", Long.class, new Long(37373218723l));
-    }
-
-    public void testInRange() throws ValidatorException
-    {
-        v.setMinimum(new Integer(100));
-        v.setMaximum(new Integer(200));
-
-        testPassThru("testInRange", Integer.class, new Integer(150));
-    }
-
-    public void testUnderMinimum()
-    {
-        v.setMinimum(new Integer(100));
-        v.setMaximum(new Integer(200));
-
-        try
-        {
-            testPassThru("testUnderMinimum", Integer.class, new Integer(50));
-
-            unreachable();
-        }
-        catch (ValidatorException ex)
-        {
-            assertEquals("testUnderMinimum must not be smaller than 100.", ex.getMessage());
-            assertEquals(ValidationConstraint.TOO_SMALL, ex.getConstraint());
-        }
-    }
-
-    public void testOverrideNumberTooSmallMessage()
-    {
-        v.setMinimum(new Integer(100));
-        v.setNumberTooSmallMessage("Anything under 100 for {0} is worth jack.");
-
-        try
-        {
-            testPassThru("underMinimum", Integer.class, new Integer(50));
-            unreachable();
-        }
-        catch (ValidatorException ex)
-        {
-            assertEquals("Anything under 100 for underMinimum is worth jack.", ex.getMessage());
-        }
-    }
-
-    public void testOverMaximum()
-    {
-        v.setMinimum(new Integer(100));
-        v.setMaximum(new Integer(200));
-
-        try
-        {
-            testPassThru("overMaximum", Integer.class, new Integer(250));
-
-            unreachable();
-        }
-        catch (ValidatorException ex)
-        {
-            assertEquals("overMaximum must not be larger than 200.", ex.getMessage());
-            assertEquals(ValidationConstraint.TOO_LARGE, ex.getConstraint());
-        }
-    }
-
-    public void testOverrideNumberTooLargeMessage()
-    {
-        v.setMaximum(new Integer(200));
-        v.setNumberTooLargeMessage("You think I want a value larger than {1} for {0}?");
-
-        try
-        {
-            testPassThru("overMaximum", Integer.class, new Integer(1000));
-            unreachable();
-        }
-        catch (ValidatorException ex)
-        {
-            assertEquals(
-                "You think I want a value larger than 200 for overMaximum?",
-                ex.getMessage());
-        }
-    }
-
-    public void testInvalidFormat()
-    {
-        v.setValueTypeClass(Integer.class);
-        IFormComponent field = new MockField("invalidFormat");
-
-        try
-        {
-            v.toObject(field, "xyz");
-            unreachable();
-        }
-        catch (ValidatorException ex)
-        {
-            assertEquals("invalidFormat must be a numeric value.", ex.getMessage());
-            assertEquals(ValidationConstraint.NUMBER_FORMAT, ex.getConstraint());
-        }
-    }
-
-    public void testOverrideInvalidNumericFormatMessage()
-    {
-        v.setValueTypeClass(Integer.class);
-        v.setInvalidNumericFormatMessage("Dude, gimme a number for {0}.");
-
-        IFormComponent field = new MockField("invalidFormat");
-
-        try
-        {
-            v.toObject(field, "xyz");
-            unreachable();
-        }
-        catch (ValidatorException ex)
-        {
-            assertEquals("Dude, gimme a number for invalidFormat.", ex.getMessage());
-            assertEquals(ValidationConstraint.NUMBER_FORMAT, ex.getConstraint());
-        }
-    }
-
-    public void testBigInteger() throws ValidatorException
-    {
-        testPassThru(
-            "testBigInteger",
-            BigInteger.class,
-            new BigInteger("234905873490587234905724908252390487590234759023487523489075"));
-    }
-
-    public void testBigDecimal() throws ValidatorException
-    {
-        testPassThru(
-            "testBigDecimal",
-            BigDecimal.class,
-            new BigDecimal("-29574923857342908743.29058734289734907543289752345897234590872349085"));
-    }
-
-    /** @since 3.0 **/
-
-    private void checkAdaptorType(int expectedType, Class numberType)
-    {
-        NumberValidator.NumberAdaptor a = NumberValidator.getAdaptor(numberType);
-
-        assertEquals(expectedType, a.getNumberType());
-    }
-
-    /** @since 3.0 **/
-
-    public void testAdaptorTypes() throws Exception
-    {
-        checkAdaptorType(NumberValidator.NUMBER_TYPE_INTEGER, Byte.class);
-        checkAdaptorType(NumberValidator.NUMBER_TYPE_INTEGER, Short.class);
-        checkAdaptorType(NumberValidator.NUMBER_TYPE_INTEGER, Integer.class);
-        checkAdaptorType(NumberValidator.NUMBER_TYPE_INTEGER, Long.class);
-        checkAdaptorType(NumberValidator.NUMBER_TYPE_INTEGER, BigInteger.class);
-        checkAdaptorType(NumberValidator.NUMBER_TYPE_REAL, Float.class);
-        checkAdaptorType(NumberValidator.NUMBER_TYPE_REAL, Double.class);
-        checkAdaptorType(NumberValidator.NUMBER_TYPE_REAL, BigDecimal.class);
-    }
-
-    /** @since 3.0 **/
-
-    private void checkCompare(Number left, Number right)
-    {
-        NumberValidator.NumberAdaptor a = NumberValidator.getAdaptor(left.getClass());
-
-        assertEquals(0, a.compare(left, right));
-    }
-
-    public void testByteCompare()
-    {
-        checkCompare(new Byte((byte) 3), new Long(3));
-    }
-
-    public void testShortCompare()
-    {
-        checkCompare(new Short((short) 14), new Double(14.0));
-    }
-
-    public void testIntegerCompare()
-    {
-        checkCompare(new Integer(19), new Long(19));
-    }
-
-    public void testLongCompare()
-    {
-        checkCompare(new Long(-22), new Short((short) - 22));
-    }
-
-    public void testBigIntegerCompare()
-    {
-        checkCompare(new BigInteger("300"), new Long("300"));
-    }
-    
-    public void testFloatCompare()
-    {
-    	checkCompare(new Float("0"), new Double("0"));
-    }
-    
-    public void testDoubleCompare()
-    {
-    	checkCompare(new Double("0"), new Float("0"));
-    }
-    
-    public void testBigDecimalCompare()
-    {
-    	checkCompare(new BigDecimal("-137.75"), new Double("-137.75"));
-    }
-}
\ No newline at end of file
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/valid/TestPatternValidator.java b/3.0.4/junit/src/org/apache/tapestry/junit/valid/TestPatternValidator.java
deleted file mode 100644
index eb67b34..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/valid/TestPatternValidator.java
+++ /dev/null
@@ -1,153 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.valid;
-
-import org.apache.tapestry.ApplicationRuntimeException;
-import org.apache.tapestry.form.IFormComponent;
-import org.apache.tapestry.junit.TapestryTestCase;
-import org.apache.tapestry.valid.PatternDelegate;
-import org.apache.tapestry.valid.PatternValidator;
-import org.apache.tapestry.valid.ValidationConstraint;
-import org.apache.tapestry.valid.ValidatorException;
-
-/**
- * Test cases for PatternValidator.
- * 
- * @author  Harish Krishnaswamy
- * @version $Id$
- * @since   3.0
- */
-public class TestPatternValidator extends TapestryTestCase
-{
-    PatternValidator pv = new PatternValidator();
-    IFormComponent pf = new MockField("PatternField");
-
-    private void positiveTest(String input) throws ValidatorException
-    {
-        Object result = pv.toObject(pf, input);
-        assertEquals(input, result);
-    }
-
-    public void testFulfillingPatterns() throws ValidatorException
-    {
-        pv.setPatternString("foo|foot");
-        positiveTest("xfooty");
-
-        pv.setPatternString("^(\\d{5}(-\\d{4})?)$");
-        positiveTest("06514");
-        positiveTest("06514-3149");
-    }
-
-    private void assertValidatorException(ValidatorException e)
-    {
-        assertEquals(ValidationConstraint.PATTERN_MISMATCH, e.getConstraint());
-        assertEquals(
-            "PatternField does not fulfill the required pattern " + pv.getPatternString() + ".",
-            e.getMessage());
-    }
-
-    private void negativeTest(String input)
-    {
-        try
-        {
-            pv.toObject(pf, input);
-            unreachable();
-        }
-        catch (ValidatorException e)
-        {
-            assertValidatorException(e);
-        }
-    }
-
-    public void testUnfulfillingPatterns()
-    {
-        pv.setPatternString("foo|foot");
-        negativeTest("fot");
-
-        pv.setPatternString("^(\\d{5}(-\\d{4})?)$");
-        negativeTest("065143");
-        negativeTest("06514-314");
-    }
-
-    public void testMalformedPattern() throws ValidatorException
-    {
-        pv.setPatternString("^(\\d{5}(-\\d{4})?$");
-
-        try
-        {
-            pv.toObject(pf, "06514");
-            unreachable();
-        }
-        catch (ApplicationRuntimeException e)
-        {
-            checkException(
-                e,
-                "Unable to match pattern "
-                    + pv.getPatternString()
-                    + " for field "
-                    + pf.getDisplayName());
-        }
-    }
-
-    public void testOverridePatternNotMatchedMessage()
-    {
-        pv.setPatternNotMatchedMessage("Field: {0}, Pattern: {1}, you figure!");
-        pv.setPatternString("^(\\d{5}(-\\d{4})?)$");
-
-        try
-        {
-            pv.toObject(pf, "xyz");
-            unreachable();
-        }
-        catch (ValidatorException e)
-        {
-            assertEquals(ValidationConstraint.PATTERN_MISMATCH, e.getConstraint());
-            assertEquals(
-                "Field: PatternField, Pattern: ^(\\d{5}(-\\d{4})?)$, you figure!",
-                e.getMessage());
-        }
-    }
-
-    public void testOverridePatternMatcher()
-    {
-        class MatcherDelegate implements PatternDelegate
-        {
-            public boolean contains(String value, String patternString)
-            {
-                return false;
-            }
-
-            public String getEscapedPatternString(String patternString)
-            {
-                return null;
-            }
-        }
-
-        pv.setPatternDelegate(new MatcherDelegate());
-        pv.setPatternString("^(\\d{5}(-\\d{4})?)$");
-        negativeTest("06514-3149");
-
-        assertNull(pv.getEscapedPatternString());
-    }
-
-    public void testGetEscapedPatternString()
-    {
-        pv.setPatternString("^(\\d{5}(-\\d{4})?)$");
-        assertEquals(
-            "\\^\\(\\\\d\\{5\\}\\(\\-\\\\d\\{4\\}\\)\\?\\)\\$",
-            pv.getEscapedPatternString());
-    }
-
-}
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/valid/TestStringValidator.java b/3.0.4/junit/src/org/apache/tapestry/junit/valid/TestStringValidator.java
deleted file mode 100644
index 4cc774b..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/valid/TestStringValidator.java
+++ /dev/null
@@ -1,155 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.valid;
-
-import org.apache.tapestry.junit.TapestryTestCase;
-import org.apache.tapestry.valid.StringValidator;
-import org.apache.tapestry.valid.ValidationConstraint;
-import org.apache.tapestry.valid.ValidatorException;
-
-/**
- *  Tests the {@link StringValidator} class.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *  @since 1.0.8
- *
- **/
-
-public class TestStringValidator extends TapestryTestCase
-{
-    private StringValidator v = new StringValidator();
-
-    public void testToString()
-    {
-        String in = "Foo";
-        String out = v.toString(new MockField("myField"), in);
-
-        assertEquals("Result.", in, out);
-    }
-
-    public void testToStringNull()
-    {
-        String out = v.toString(new MockField("nullField"), null);
-
-        assertNull("Null expected.", out);
-    }
-
-    public void testToObjectRequiredFail()
-    {
-        v.setRequired(true);
-
-        try
-        {
-            v.toObject(new MockField("requiredField"), "");
-
-            fail("Exception expected.");
-        }
-        catch (ValidatorException ex)
-        {
-            assertEquals("You must enter a value for requiredField.", ex.getMessage());
-            assertEquals(ValidationConstraint.REQUIRED, ex.getConstraint());
-        }
-    }
-
-    public void testOverrideRequiredMessage()
-    {
-        v.setRequired(true);
-        v.setRequiredMessage("Gimme a value for {0} you bastard.");
-
-        try
-        {
-            v.toObject(new MockField("overrideMessage"), "");
-        }
-        catch (ValidatorException ex)
-        {
-            assertEquals("Gimme a value for overrideMessage you bastard.", ex.getMessage());
-        }
-    }
-
-    public void testToObjectRequiredPass() throws ValidatorException
-    {
-        v.setRequired(true);
-
-        Object result = v.toObject(new MockField("requiredField"), "stuff");
-
-        assertEquals("Result.", "stuff", result);
-    }
-
-    public void testToObjectMinimumFail()
-    {
-        v.setMinimumLength(10);
-
-        try
-        {
-            v.toObject(new MockField("minimumLength"), "short");
-
-            fail("Exception expected.");
-        }
-        catch (ValidatorException ex)
-        {
-            assertEquals(
-                "You must enter at least 10 characters for minimumLength.",
-                ex.getMessage());
-            assertEquals(ValidationConstraint.MINIMUM_WIDTH, ex.getConstraint());
-        }
-    }
-
-    public void testOverrideMinimumMessage()
-    {
-        v.setMinimumLength(10);
-        v.setMinimumLengthMessage(
-            "You really think less than 10 characters for {0} is gonna cut it?");
-
-        try
-        {
-            v.toObject(new MockField("overrideMessage"), "");
-        }
-        catch (ValidatorException ex)
-        {
-            assertEquals(
-                "You really think less than 10 characters for overrideMessage is gonna cut it?",
-                ex.getMessage());
-        }
-    }
-
-    public void testToObjectMinimumPass() throws ValidatorException
-    {
-        v.setMinimumLength(10);
-
-        String in = "ambidexterous";
-
-        Object out = v.toObject(new MockField("minimum"), in);
-
-        assertEquals("Result", in, out);
-    }
-
-    /**
-     *  An empty string is not subject to the minimum length constraint.
-     * 
-     **/
-
-    public void testToObjectMinimumNull() throws ValidatorException
-    {
-        v.setMinimumLength(10);
-
-        String in = "";
-
-        Object out = v.toObject(new MockField("minimum"), in);
-
-        assertNull("Result", out);
-    }
-
-}
\ No newline at end of file
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/valid/TestUrlValidator.java b/3.0.4/junit/src/org/apache/tapestry/junit/valid/TestUrlValidator.java
deleted file mode 100644
index 80e8f8d..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/valid/TestUrlValidator.java
+++ /dev/null
@@ -1,120 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.valid;
-
-import org.apache.tapestry.junit.TapestryTestCase;
-import org.apache.tapestry.valid.UrlValidator;
-import org.apache.tapestry.valid.ValidationConstraint;
-import org.apache.tapestry.valid.ValidatorException;
-
-/**
- * Tests for {@link org.apache.tapestry.valid.EmailValidator}.
- *
- * @author Tsvetelin Saykov
- * @author Jimmy Dyson
- * @version $Id$
- * @since 3.0
- *
- **/
-
-public class TestUrlValidator extends TapestryTestCase
-{
-    private UrlValidator v = new UrlValidator();
-
-    public void testValidUrl() throws ValidatorException
-    {
-        Object result = v.toObject(new MockField("url"), "http://www.google.com");
-        assertEquals("http://www.google.com", result);
-    }
-
-    public void testInvalidUrl()
-    {
-        try
-        {
-            v.toObject(new MockField("url"), "fred");
-            unreachable();
-        }
-        catch (ValidatorException ex)
-        {
-            assertEquals(ValidationConstraint.URL_FORMAT, ex.getConstraint());
-            assertEquals("Invalid URL.", ex.getMessage());
-        }
-    }
-
-    public void testOverrideInvalidUrlFormatMessage()
-    {
-        v.setInvalidUrlFormatMessage("Try a valid URL (for {0}), like \"http://www.google.com\"");
-
-        try
-        {
-            v.toObject(new MockField("url"), "fred");
-            unreachable();
-        }
-        catch (ValidatorException ex)
-        {
-            assertEquals(
-                "Try a valid URL (for url), like \"http://www.google.com\"",
-                ex.getMessage());
-        }
-    }
-
-    public void testTooShort()
-    {
-        v.setMinimumLength(20);
-
-        try
-        {
-            v.toObject(new MockField("short"), "http://www.test.com");
-            unreachable();
-        }
-        catch (ValidatorException ex)
-        {
-            assertEquals(ValidationConstraint.MINIMUM_WIDTH, ex.getConstraint());
-            assertEquals("You must enter at least 20 characters for short.", ex.getMessage());
-        }
-    }
-
-    public void testOverrideMinimumLengthMessage()
-    {
-        v.setMinimumLength(20);
-        v.setMinimumLengthMessage("URLs must be at least 20 characters.");
-
-        try
-        {
-            v.toObject(new MockField("short"), "http://www.test.com");
-            unreachable();
-        }
-        catch (ValidatorException ex)
-        {
-            assertEquals("URLs must be at least 20 characters.", ex.getMessage());
-        }
-    }
-
-    public void testDisallowedProtocol()
-    {
-        v.setAllowedProtocols("http,https");
-
-        try
-        {
-            v.toObject(new MockField("short"), "ftp://ftp.test.com");
-            unreachable();
-        }
-        catch (ValidatorException ex)
-        {
-            assertEquals(ValidationConstraint.DISALLOWED_PROTOCOL, ex.getConstraint());
-            assertEquals("Disallowed protocol - protocol must be http or https.", ex.getMessage());
-        }
-    }
-}
\ No newline at end of file
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/valid/TestValidationDelegate.java b/3.0.4/junit/src/org/apache/tapestry/junit/valid/TestValidationDelegate.java
deleted file mode 100644
index fc08d6c..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/valid/TestValidationDelegate.java
+++ /dev/null
@@ -1,311 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.valid;
-
-import java.util.List;
-
-import junit.framework.TestCase;
-import org.apache.tapestry.IRender;
-import org.apache.tapestry.form.IFormComponent;
-import org.apache.tapestry.valid.IFieldTracking;
-import org.apache.tapestry.valid.RenderString;
-import org.apache.tapestry.valid.ValidationConstraint;
-import org.apache.tapestry.valid.ValidationDelegate;
-import org.apache.tapestry.valid.ValidatorException;
-
-/**
- *  Test the class {@link ValidationDelegate}. 
- * 
- *
- *  @author Howard Lewis Ship
- *  @since 1.0.8
- *
- **/
-
-public class TestValidationDelegate extends TestCase
-{
-    private ValidationDelegate d = new ValidationDelegate();
-
-    public TestValidationDelegate(String name)
-    {
-        super(name);
-    }
-
-    public void testHasErrorsEmpty()
-    {
-        assertEquals(false, d.getHasErrors());
-    }
-
-    public void testFirstErrorEmpty()
-    {
-        assertNull(d.getFirstError());
-    }
-
-    public void testInvalidInput()
-    {
-        IFormComponent f = new MockField("testAdd");
-        String errorMessage = "Need a bigger one.";
-
-        d.setFormComponent(f);
-        d.recordFieldInputValue("Bad Stuff");
-        d.record(new ValidatorException(errorMessage, ValidationConstraint.TOO_LARGE));
-
-        List fieldTracking = d.getFieldTracking();
-
-        assertEquals(1, fieldTracking.size());
-
-        IFieldTracking t = (IFieldTracking) fieldTracking.get(0);
-
-        assertEquals(f, t.getComponent());
-        checkRender(errorMessage, t);
-        assertEquals("testAdd", t.getFieldName());
-        assertEquals("Bad Stuff", t.getInput());
-        assertEquals(ValidationConstraint.TOO_LARGE, t.getConstraint());
-
-        assertTrue(d.getHasErrors());
-        assertEquals(errorMessage, ((RenderString) (d.getFirstError())).getString());
-    }
-
-    public void testValidatorErrorRenderer()
-    {
-        IFormComponent f = new MockField("testValidatorErrorRenderer");
-
-        IRender errorRenderer = new RenderString("Just don't like it.");
-
-        d.setFormComponent(f);
-        d.recordFieldInputValue("Bad Stuff");
-        d.record(
-            new ValidatorException(
-                "Just don't like it.",
-                errorRenderer,
-                ValidationConstraint.CONSISTENCY));
-
-        List fieldTracking = d.getFieldTracking();
-
-        assertEquals(1, fieldTracking.size());
-
-        IFieldTracking t = (IFieldTracking) fieldTracking.get(0);
-
-        assertEquals(f, t.getComponent());
-        assertEquals(errorRenderer, t.getErrorRenderer());
-        assertEquals("testValidatorErrorRenderer", t.getFieldName());
-        assertEquals("Bad Stuff", t.getInput());
-        assertEquals(ValidationConstraint.CONSISTENCY, t.getConstraint());
-
-        assertTrue(d.getHasErrors());
-        assertEquals(errorRenderer, d.getFirstError());
-    }
-
-    public void testNoError()
-    {
-        IFormComponent f = new MockField("testNoError");
-
-        d.setFormComponent(f);
-        d.recordFieldInputValue("Futurama");
-
-        List fieldTracking = d.getFieldTracking();
-        assertEquals(1, fieldTracking.size());
-
-        IFieldTracking t = (IFieldTracking) fieldTracking.get(0);
-
-        assertEquals(f, t.getComponent());
-        assertEquals(null, t.getErrorRenderer());
-        assertEquals(false, t.isInError());
-        assertEquals("Futurama", t.getInput());
-        assertEquals(null, t.getConstraint());
-
-        assertEquals(false, d.getHasErrors());
-        assertNull(d.getFirstError());
-    }
-
-    public void testUnassociatedErrors()
-    {
-        IFormComponent f = new MockField("testUnassociatedErrors");
-
-        d.setFormComponent(f);
-        d.recordFieldInputValue("Bender");
-
-        d.setFormComponent(null);
-        d.record("Overload!", ValidationConstraint.CONSISTENCY);
-
-        assertEquals(true, d.getHasErrors());
-
-        List fieldTracking = d.getFieldTracking();
-        assertEquals(2, fieldTracking.size());
-
-        IFieldTracking t0 = (IFieldTracking) fieldTracking.get(0);
-        assertEquals(false, t0.isInError());
-        assertEquals(f, t0.getComponent());
-
-        IFieldTracking t1 = (IFieldTracking) fieldTracking.get(1);
-        assertEquals(null, t1.getComponent());
-        assertEquals(true, t1.isInError());
-        checkRender("Overload!", t1);
-
-        checkRender("Overload!", d.getFirstError());
-
-        List trackings = d.getUnassociatedTrackings();
-        assertEquals(1, trackings.size());
-        assertEquals(t1, trackings.get(0));
-
-        trackings = d.getAssociatedTrackings();
-        assertEquals(1, trackings.size());
-        assertEquals(t0, trackings.get(0));
-    }
-
-    /**
-     * In rare cases, you may add errors even though the page hasn't rendered and that's
-     * was causing a NPE.
-     */
-    public void testComponentNotRecorded()
-    {
-        // This mock field neaver rendered, so it does not have a Form-assigned name.
-
-        IFormComponent f = new MockField(null);
-
-        d.setFormComponent(f);
-        d.record("Never rendered.", ValidationConstraint.CONSISTENCY);
-
-        assertEquals(true, d.getHasErrors());
-
-        List fieldTracking = d.getFieldTracking();
-        assertEquals(1, fieldTracking.size());
-
-        List trackings = d.getUnassociatedTrackings();
-        assertEquals(1, trackings.size());
-
-        IFieldTracking t = (IFieldTracking) trackings.get(0);
-
-        assertEquals(null, t.getComponent());
-        assertEquals(true, t.isInError());
-        checkRender("Never rendered.", t);
-    }
-
-    private void checkRender(String errorMessage, IFieldTracking tracking)
-    {
-        IRender render = tracking.getErrorRenderer();
-
-        checkRender(errorMessage, render);
-    }
-
-    private void checkRender(String errorMessage, IRender render)
-    {
-        assertEquals(errorMessage, ((RenderString) render).getString());
-    }
-
-    public void testMultipleInvalidInput()
-    {
-        IFormComponent f1 = new MockField("input1");
-        String e1 = "And now for something completely different.";
-        IFormComponent f2 = new MockField("input2");
-        String e2 = "A man with three buttocks.";
-
-        d.setFormComponent(f1);
-        d.recordFieldInputValue("Monty");
-        d.record(new ValidatorException(e1, null));
-
-        d.setFormComponent(f2);
-        d.recordFieldInputValue("Python");
-        d.record(new ValidatorException(e2, null));
-
-        List fieldTracking = d.getFieldTracking();
-        assertEquals(2, fieldTracking.size());
-
-        IFieldTracking t = (IFieldTracking) fieldTracking.get(0);
-
-        assertEquals(f1, t.getComponent());
-        checkRender(e1, t);
-
-        t = (IFieldTracking) fieldTracking.get(1);
-        assertEquals("Python", t.getInput());
-        checkRender(e2, t);
-        assertEquals(f2, t.getComponent());
-    }
-
-    public void testReset()
-    {
-        IFormComponent f1 = new MockField("input1");
-        String e1 = "And now for something completely different.";
-        IFormComponent f2 = new MockField("input2");
-        String e2 = "A man with three buttocks.";
-
-        d.setFormComponent(f1);
-        d.recordFieldInputValue("Monty");
-        d.record(new ValidatorException(e1, null));
-
-        d.setFormComponent(f2);
-        d.recordFieldInputValue("Python");
-        d.record(new ValidatorException(e2, null));
-
-        // Now, wipe out info on f1
-
-        d.setFormComponent(f1);
-        d.reset();
-
-        List fieldTracking = d.getFieldTracking();
-        assertEquals(1, fieldTracking.size());
-
-        IFieldTracking t = (IFieldTracking) fieldTracking.get(0);
-        assertEquals("Python", t.getInput());
-        checkRender(e2, t);
-        assertEquals(f2, t.getComponent());
-    }
-
-    public void testResetAll()
-    {
-        IFormComponent f1 = new MockField("input1");
-        String e1 = "And now for something completely different.";
-        IFormComponent f2 = new MockField("input2");
-        String e2 = "A man with three buttocks.";
-
-        d.setFormComponent(f1);
-        d.record(new ValidatorException(e1, null));
-
-        d.setFormComponent(f2);
-        d.record(new ValidatorException(e2, null));
-
-        d.setFormComponent(f1);
-        d.reset();
-
-        d.setFormComponent(f2);
-        d.reset();
-
-        assertEquals(null, d.getFieldTracking());
-
-        assertEquals(false, d.getHasErrors());
-        assertNull(d.getFirstError());
-    }
-
-    public void testClearErrors()
-    {
-        IFormComponent f = new MockField("input");
-
-        d.setFormComponent(f);
-        d.recordFieldInputValue("hello");
-        d.record("An error in the input field.", null);
-
-        assertEquals(true, d.getHasErrors());
-
-        assertNotNull(d.getFirstError());
-
-        d.clearErrors();
-
-        assertEquals(false, d.getHasErrors());
-
-        d.setFormComponent(f);
-
-        assertEquals("hello", d.getFieldInputValue());
-    }
-}
\ No newline at end of file
diff --git a/3.0.4/junit/src/org/apache/tapestry/junit/valid/ValidSuite.java b/3.0.4/junit/src/org/apache/tapestry/junit/valid/ValidSuite.java
deleted file mode 100644
index 6bb75e0..0000000
--- a/3.0.4/junit/src/org/apache/tapestry/junit/valid/ValidSuite.java
+++ /dev/null
@@ -1,46 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package org.apache.tapestry.junit.valid;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-/**
- *  Suite of tests for validators and delegates related to
- *  {@link org.apache.tapestry.valid.ValidField}.
- *
- *  @author Howard Lewis Ship
- *  @version $Id$
- *
- **/
-
-public class ValidSuite
-{
-    public static Test suite()
-    {
-        TestSuite suite = new TestSuite("ValidField Suite");
-
-        suite.addTest(new TestSuite(TestStringValidator.class));
-        suite.addTest(new TestSuite(TestDateValidator.class));
-        suite.addTest(new TestSuite(TestNumberValidator.class));
-        suite.addTest(new TestSuite(TestValidationDelegate.class));
-        suite.addTest(new TestSuite(TestEmailValidator.class));
-        suite.addTest(new TestSuite(TestPatternValidator.class));
-		suite.addTest(new TestSuite(TestUrlValidator.class));
-
-        return suite;
-    }
-
-}
\ No newline at end of file
diff --git a/3.0.4/junit/src/pages/PrivateAssetTemplate.html b/3.0.4/junit/src/pages/PrivateAssetTemplate.html
deleted file mode 100644
index 76a1341..0000000
--- a/3.0.4/junit/src/pages/PrivateAssetTemplate.html
+++ /dev/null
@@ -1,9 +0,0 @@
-<!-- $Id$ -->
-
-<span jwcid="$content$">
-<span jwcid="border">
-
-This page's content comes from a private asset.
-
-</span>
-</span>
\ No newline at end of file
diff --git a/3.0.4/lib/.cvsignore b/3.0.4/lib/.cvsignore
deleted file mode 100644
index 8337948..0000000
--- a/3.0.4/lib/.cvsignore
+++ /dev/null
@@ -1,4 +0,0 @@
-*.war
-*.jar
-*.ear
-examples
diff --git a/3.0.4/lib/ext/.cvsignore b/3.0.4/lib/ext/.cvsignore
deleted file mode 100644
index dbf8828..0000000
--- a/3.0.4/lib/ext/.cvsignore
+++ /dev/null
@@ -1,3 +0,0 @@
-ognl-*.jar
-javassist-*.jar
-
diff --git a/3.0.4/lib/ext/LICENSE-commons-beanutils.txt b/3.0.4/lib/ext/LICENSE-commons-beanutils.txt
deleted file mode 100644
index d110ea9..0000000
--- a/3.0.4/lib/ext/LICENSE-commons-beanutils.txt
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * $Header$
- * $Revision$
- * $Date$
- *
- * ====================================================================
- *
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 1999-2003 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Commons", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made 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/3.0.4/lib/ext/LICENSE-commons-collections.txt b/3.0.4/lib/ext/LICENSE-commons-collections.txt
deleted file mode 100644
index 5ae53a7..0000000
--- a/3.0.4/lib/ext/LICENSE-commons-collections.txt
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * $Header$
- * $Revision$
- * $Date$
- *
- * ====================================================================
- *
- * 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", "Commons", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made 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/3.0.4/lib/ext/LICENSE-commons-fileupload.txt b/3.0.4/lib/ext/LICENSE-commons-fileupload.txt
deleted file mode 100644
index d110ea9..0000000
--- a/3.0.4/lib/ext/LICENSE-commons-fileupload.txt
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * $Header$
- * $Revision$
- * $Date$
- *
- * ====================================================================
- *
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 1999-2003 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Commons", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made 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/3.0.4/lib/ext/LICENSE.bsf.txt b/3.0.4/lib/ext/LICENSE.bsf.txt
deleted file mode 100644
index 77ef125..0000000
--- a/3.0.4/lib/ext/LICENSE.bsf.txt
+++ /dev/null
@@ -1,53 +0,0 @@
-   The Apache Software License, Version 1.1
-  
-   Copyright (c) 2002 The Apache Software Foundation.  All rights
-   reserved.
-  
-   Redistribution and use in source and binary forms, with or without
-   modification, are permitted provided that the following conditions
-   are met:
-  
-   1. Redistributions of source code must retain the above copyright
-      notice, this list of conditions and the following disclaimer.
-  
-   2. Redistributions in binary form must reproduce the above copyright
-      notice, this list of conditions and the following disclaimer in
-      the 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 "BSF", "Apache", and "Apache Software Foundation" must
-      not be used to endorse or promote products derived from this
-      software without prior written permission. For 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 created by
- Sanjiva Weerawarana and others at International Business Machines
- Corporation. For more information on the Apache Software Foundation,
- please see <http://www.apache.org/>.
-
-
diff --git a/3.0.4/lib/ext/LICENSE.commons-codec.txt b/3.0.4/lib/ext/LICENSE.commons-codec.txt
deleted file mode 100644
index f46d0a1..0000000
--- a/3.0.4/lib/ext/LICENSE.commons-codec.txt
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * $Header$
- * $Revision$
- * $Date$
- *
- * ====================================================================
- *
- * 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", "Commons", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- */
\ No newline at end of file
diff --git a/3.0.4/lib/ext/LICENSE.commons-digester.txt b/3.0.4/lib/ext/LICENSE.commons-digester.txt
deleted file mode 100644
index d110ea9..0000000
--- a/3.0.4/lib/ext/LICENSE.commons-digester.txt
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * $Header$
- * $Revision$
- * $Date$
- *
- * ====================================================================
- *
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 1999-2003 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Commons", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made 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/3.0.4/lib/ext/LICENSE.commons-lang.txt b/3.0.4/lib/ext/LICENSE.commons-lang.txt
deleted file mode 100644
index f46d0a1..0000000
--- a/3.0.4/lib/ext/LICENSE.commons-lang.txt
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * $Header$
- * $Revision$
- * $Date$
- *
- * ====================================================================
- *
- * 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", "Commons", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- */
\ No newline at end of file
diff --git a/3.0.4/lib/ext/LICENSE.commons-logging.txt b/3.0.4/lib/ext/LICENSE.commons-logging.txt
deleted file mode 100644
index f46d0a1..0000000
--- a/3.0.4/lib/ext/LICENSE.commons-logging.txt
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * $Header$
- * $Revision$
- * $Date$
- *
- * ====================================================================
- *
- * 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", "Commons", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- */
\ No newline at end of file
diff --git a/3.0.4/lib/ext/LICENSE.jakarta-oro.txt b/3.0.4/lib/ext/LICENSE.jakarta-oro.txt
deleted file mode 100644
index 9c63560..0000000
--- a/3.0.4/lib/ext/LICENSE.jakarta-oro.txt
+++ /dev/null
@@ -1,56 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the 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 "Apache" and "Apache Software Foundation", "Jakarta-Oro" 
- *    must not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache" 
- *    or "Jakarta-Oro", nor may "Apache" or "Jakarta-Oro" 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.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon software originally written 
- * by Daniel F. Savarese. We appreciate his contributions.
- */
diff --git a/3.0.4/lib/ext/bsf-2.3.0.jar b/3.0.4/lib/ext/bsf-2.3.0.jar
deleted file mode 100644
index caa4dea..0000000
--- a/3.0.4/lib/ext/bsf-2.3.0.jar
+++ /dev/null
Binary files differ
diff --git a/3.0.4/lib/ext/commons-beanutils-1.6.1.jar b/3.0.4/lib/ext/commons-beanutils-1.6.1.jar
deleted file mode 100644
index 795655a..0000000
--- a/3.0.4/lib/ext/commons-beanutils-1.6.1.jar
+++ /dev/null
Binary files differ
diff --git a/3.0.4/lib/ext/commons-codec-1.2.jar b/3.0.4/lib/ext/commons-codec-1.2.jar
deleted file mode 100644
index cce1e07..0000000
--- a/3.0.4/lib/ext/commons-codec-1.2.jar
+++ /dev/null
Binary files differ
diff --git a/3.0.4/lib/ext/commons-collections-2.1.jar b/3.0.4/lib/ext/commons-collections-2.1.jar
deleted file mode 100644
index f66c6d2..0000000
--- a/3.0.4/lib/ext/commons-collections-2.1.jar
+++ /dev/null
Binary files differ
diff --git a/3.0.4/lib/ext/commons-digester-1.5.jar b/3.0.4/lib/ext/commons-digester-1.5.jar
deleted file mode 100644
index c2a7d9d..0000000
--- a/3.0.4/lib/ext/commons-digester-1.5.jar
+++ /dev/null
Binary files differ
diff --git a/3.0.4/lib/ext/commons-fileupload-1.0.jar b/3.0.4/lib/ext/commons-fileupload-1.0.jar
deleted file mode 100644
index 1ca4a9c..0000000
--- a/3.0.4/lib/ext/commons-fileupload-1.0.jar
+++ /dev/null
Binary files differ
diff --git a/3.0.4/lib/ext/commons-lang-1.0.jar b/3.0.4/lib/ext/commons-lang-1.0.jar
deleted file mode 100644
index 43e515c..0000000
--- a/3.0.4/lib/ext/commons-lang-1.0.jar
+++ /dev/null
Binary files differ
diff --git a/3.0.4/lib/ext/commons-logging-1.0.2.jar b/3.0.4/lib/ext/commons-logging-1.0.2.jar
deleted file mode 100644
index aca1e41..0000000
--- a/3.0.4/lib/ext/commons-logging-1.0.2.jar
+++ /dev/null
Binary files differ
diff --git a/3.0.4/lib/ext/jakarta-oro-2.0.6.jar b/3.0.4/lib/ext/jakarta-oro-2.0.6.jar
deleted file mode 100644
index 346504c..0000000
--- a/3.0.4/lib/ext/jakarta-oro-2.0.6.jar
+++ /dev/null
Binary files differ
diff --git a/3.0.4/lib/j2ee/LICENSE.geronimo-ejb.txt b/3.0.4/lib/j2ee/LICENSE.geronimo-ejb.txt
deleted file mode 100644
index f46d0a1..0000000
--- a/3.0.4/lib/j2ee/LICENSE.geronimo-ejb.txt
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * $Header$
- * $Revision$
- * $Date$
- *
- * ====================================================================
- *
- * 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", "Commons", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- */
\ No newline at end of file
diff --git a/3.0.4/lib/j2ee/LICENSE.jsp-api.txt b/3.0.4/lib/j2ee/LICENSE.jsp-api.txt
deleted file mode 100644
index f46d0a1..0000000
--- a/3.0.4/lib/j2ee/LICENSE.jsp-api.txt
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * $Header$
- * $Revision$
- * $Date$
- *
- * ====================================================================
- *
- * 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", "Commons", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- */
\ No newline at end of file
diff --git a/3.0.4/lib/j2ee/LICENSE.servlet-api.txt b/3.0.4/lib/j2ee/LICENSE.servlet-api.txt
deleted file mode 100644
index f46d0a1..0000000
--- a/3.0.4/lib/j2ee/LICENSE.servlet-api.txt
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * $Header$
- * $Revision$
- * $Date$
- *
- * ====================================================================
- *
- * 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", "Commons", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- */
\ No newline at end of file
diff --git a/3.0.4/lib/j2ee/geronimo-ejb.jar b/3.0.4/lib/j2ee/geronimo-ejb.jar
deleted file mode 100644
index ccd7e10..0000000
--- a/3.0.4/lib/j2ee/geronimo-ejb.jar
+++ /dev/null
Binary files differ
diff --git a/3.0.4/lib/j2ee/jsp-api.jar b/3.0.4/lib/j2ee/jsp-api.jar
deleted file mode 100644
index abb152a..0000000
--- a/3.0.4/lib/j2ee/jsp-api.jar
+++ /dev/null
Binary files differ
diff --git a/3.0.4/lib/j2ee/servlet-api.jar b/3.0.4/lib/j2ee/servlet-api.jar
deleted file mode 100644
index bf86c96..0000000
--- a/3.0.4/lib/j2ee/servlet-api.jar
+++ /dev/null
Binary files differ
diff --git a/3.0.4/lib/runtime/LICENSE.log4j.txt b/3.0.4/lib/runtime/LICENSE.log4j.txt
deleted file mode 100644
index 007db57..0000000
--- a/3.0.4/lib/runtime/LICENSE.log4j.txt
+++ /dev/null
@@ -1,48 +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 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 "log4j" and  "Apache Software Foundation"  must not be used to
- *    endorse  or promote  products derived  from this  software without  prior
- *    written permission. For 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/3.0.4/lib/runtime/log4j-1.2.6.jar b/3.0.4/lib/runtime/log4j-1.2.6.jar
deleted file mode 100644
index be4a917..0000000
--- a/3.0.4/lib/runtime/log4j-1.2.6.jar
+++ /dev/null
Binary files differ
diff --git a/3.0.4/package-lists/README.html b/3.0.4/package-lists/README.html
deleted file mode 100644
index b977c42..0000000
--- a/3.0.4/package-lists/README.html
+++ /dev/null
@@ -1,17 +0,0 @@
-<!-- $Id$ -->
-
-<html>
-<head>
-<title>Readme</title>
-</head>
-<body>
-
-<h1>Readme</h1>
-
-<p>
-Each subdirectory contains the JavaDoc package list downloaded from the corresponding package's
-web site.  When upgrading to a new version of a library, get the updated package list and store it
-in the appropriate directory.  The <code>curl</code> command is handy for doing this.
-
-</body>
-</html>
diff --git a/3.0.4/package-lists/j2ee/package-list b/3.0.4/package-lists/j2ee/package-list
deleted file mode 100644
index f94ef9d..0000000
--- a/3.0.4/package-lists/j2ee/package-list
+++ /dev/null
@@ -1,21 +0,0 @@
-javax.activation
-javax.ejb
-javax.jms
-javax.mail
-javax.mail.event
-javax.mail.internet
-javax.mail.search
-javax.naming
-javax.naming.directory
-javax.naming.event
-javax.naming.ldap
-javax.naming.spi
-javax.rmi
-javax.rmi.CORBA
-javax.servlet
-javax.servlet.http
-javax.servlet.jsp
-javax.servlet.jsp.tagext
-javax.sql
-javax.transaction
-javax.transaction.xa
diff --git a/3.0.4/package-lists/jakarta-oro/package-list b/3.0.4/package-lists/jakarta-oro/package-list
deleted file mode 100644
index 51873ed..0000000
--- a/3.0.4/package-lists/jakarta-oro/package-list
+++ /dev/null
@@ -1,6 +0,0 @@
-org.apache.oro.io
-org.apache.oro.text
-org.apache.oro.text.awk
-org.apache.oro.text.perl
-org.apache.oro.text.regex
-org.apache.oro.util
diff --git a/3.0.4/package-lists/jdk/package-list b/3.0.4/package-lists/jdk/package-list
deleted file mode 100644
index 407d0d7..0000000
--- a/3.0.4/package-lists/jdk/package-list
+++ /dev/null
@@ -1,59 +0,0 @@
-java.applet
-java.awt
-java.awt.color
-java.awt.datatransfer
-java.awt.dnd
-java.awt.event
-java.awt.font
-java.awt.geom
-java.awt.im
-java.awt.image
-java.awt.image.renderable
-java.awt.print
-java.beans
-java.beans.beancontext
-java.io
-java.lang
-java.lang.ref
-java.lang.reflect
-java.math
-java.net
-java.rmi
-java.rmi.activation
-java.rmi.dgc
-java.rmi.registry
-java.rmi.server
-java.security
-java.security.acl
-java.security.cert
-java.security.interfaces
-java.security.spec
-java.sql
-java.text
-java.util
-java.util.jar
-java.util.zip
-javax.accessibility
-javax.swing
-javax.swing.border
-javax.swing.colorchooser
-javax.swing.event
-javax.swing.filechooser
-javax.swing.plaf
-javax.swing.plaf.basic
-javax.swing.plaf.metal
-javax.swing.plaf.multi
-javax.swing.table
-javax.swing.text
-javax.swing.text.html
-javax.swing.text.html.parser
-javax.swing.text.rtf
-javax.swing.tree
-javax.swing.undo
-org.omg.CORBA
-org.omg.CORBA.DynAnyPackage
-org.omg.CORBA.ORBPackage
-org.omg.CORBA.portable
-org.omg.CORBA.TypeCodePackage
-org.omg.CosNaming
-org.omg.CosNaming.NamingContextPackage
diff --git a/3.0.4/package-lists/junit/package-list b/3.0.4/package-lists/junit/package-list
deleted file mode 100644
index bd240aa..0000000
--- a/3.0.4/package-lists/junit/package-list
+++ /dev/null
@@ -1,10 +0,0 @@
-junit.awtui
-junit.extensions
-junit.framework
-junit.runner
-junit.samples
-junit.samples.money
-junit.swingui
-junit.tests
-junit.textui
-junit.ui
diff --git a/3.0.4/package-lists/log4j/package-list b/3.0.4/package-lists/log4j/package-list
deleted file mode 100644
index fe3653c..0000000
--- a/3.0.4/package-lists/log4j/package-list
+++ /dev/null
@@ -1,17 +0,0 @@
-org.apache.log4j
-org.apache.log4j.chainsaw
-org.apache.log4j.config
-org.apache.log4j.helpers
-org.apache.log4j.jdbc
-org.apache.log4j.jmx
-org.apache.log4j.lf5
-org.apache.log4j.net
-org.apache.log4j.nt
-org.apache.log4j.or
-org.apache.log4j.or.jms
-org.apache.log4j.or.sax
-org.apache.log4j.performance
-org.apache.log4j.spi
-org.apache.log4j.varia
-org.apache.log4j.xml
-org.apache.log4j.xml.examples
diff --git a/3.0.4/status.xml b/3.0.4/status.xml
deleted file mode 100644
index ee7ed8b..0000000
--- a/3.0.4/status.xml
+++ /dev/null
@@ -1,316 +0,0 @@
-<?xml version="1.0"?>
-<status>
-  <developers>
-    <person name="Howard M. Lewis Ship" email="hlship@comcast.net" id="HLS" />
-    <person name="David Solis" email="dsolis@legosoft.com.mx" id="DS" />
-    <person name="Harish Krishnaswamy" id="HK"/>
-    <person name="Erik Hatcher" id="EH"/>
-    <person name="Richard Lewis-Shell" id="RLS"/>
-    <person name="Mind Bridge" id="MB"/>
-    <person name="Geoff Longman" id="GL"/>
-    <person name="Tsvetelin Saykov" id="TS"/>
-    <person name="Neil Clayton" id="NC"/>
-    <person name="Paul Ferraro" id="PF"/>
-    <person name="Jesse Kuhnert" id="JK" />
-    <!-- Retired -->
-    <person name="Malcom Edgar" id="ME"/>
-    <!-- Add more people here -->
-  </developers>
-  <votes>
-    <vote title="3.0.4 Release" date="Mar 27 2006" dev="JK">
-      <motion>
-        Going with the notion that releasing early/often is a good thing, 
-        and we can pretty much release things as often as we want I'd say 
-        we're doing more harm than good by not releasing all of the excellent 
-        work that Brian's been putting into these two releases. 
-      </motion>
-      <response>JK: HK, KT, PF, DS, BW: +1</response>
-    </vote>
-    <vote title="Tapestry 3.0.3" date="Mar 26 2005" dev="PF">
-      <motion> I finished patching/fixing all of the big issues identified with the last release.  With any luck, this will be the last release for the 3.0 branch. This vote will run for one week.  A +1 vote is to release Tapestry 3.0.3.  I will be able to start the release once the votes are tallied. </motion>
-      <response> PF, HK, MB, HLS, TS, DS, EH, GL: +1 </response>
-      <response> RLS: +0 </response>
-    </vote>
-    <vote title="Tapestry 3.0.2" date="Feb 14 2005" dev="HLS">
-      <motion> I think we should just be done with 3.0.2. All the bugs that are going to get fixed, have been. The next version of OGNL should just drop in, and since its not shipped with the framework anyway, its not a big deal. </motion>
-      <response> HLS, PF, GL, RLS, DS, EH: +1 </response>
-      <response> HK, TSV, MB: +0 </response>
-    </vote>
-    <vote title="Tapestry 3.0 FINAL" date="Apr 14 2004" dev="HLS">
-      <motion> Despite a last minute flurry of bug fixes, the motion has passed and we'll be releasing the final Tapestry 3.0 release shortly. I'll be creating tagging and creating the final release shortly. Alas, it looks like Neil Clayton is no longer contributing to the Tapestry project. </motion>
-      <response>HLS, RLS, EH, HK, DS, TSV, MB: +1</response>
-      <response>GL, NC: +0</response>
-    </vote>
-    <vote title="release 3.0-rc-3" date="Apr 7 2004" dev="HLS">
-      <motion> I've had some more time to knock down a the remaining blocker bugs in 3.0-rc-2. Assuming that there are no further blocker bugs added in the meantime, I'd like to release rc-3. A +1 vote indicates that we should release rc-3, unless a new blocker bug is added in the meantime. Please respond in the next 24 hours (by Wednesday afternoon, EST). Missing responses will be treated as a +0. </motion>
-      <response> HLS, EH, HK, DS: +1 </response>
-      <response> NC, RLS, MB, TSV, GL: +0 </response>
-    </vote>
-    <vote title="release 3.0-rc-2" date="Apr 1 2004" dev="HLS">
-      <motion> 3.0-rc-1 has been out for about two weeks now. A couple of notable bugs have been identified and fixed. I believe we should roll out rc-2 to keep the momentum going. </motion>
-      <response> HLS, DS, EH, HK, TSV, RLS, MB: +1 </response>
-      <response> NC, GL: +0 </response>
-    </vote>
-    <vote title="release 3.0rc1" date="Mar 13 2004" dev="RLS">
-      <motion> Looks like things are pretty much in place for the next release - 3.0 release candidate 1. Let's vote on it to make it official. Release current code as rc1? </motion>
-      <response> RLS, GL, HK, EH, DS, MB, HLS: +1 </response>
-    </vote>
-    <vote title="Can the Tutorial" date="Feb 19 2004" dev="HLS">
-      <motion> I think its pretty obvious by now that no work is going to get done on the Tutorial for 3.0. I think it would be best to remove the Tutorial, perhaps replace it with a link to Kevin Dorff's site until we can actually put something useful together ... even if that is after 3.0 is released. A +1 vote would delete the Tutorial code, the docbook source and links to the old tutorial on the web site. </motion>
-      <response> HLS, EH, DS, GL, MB, HK: +1 </response>
-    </vote>
-    <vote date="Sep 5 2003" title="Release 3.0-beta-3" dev="HLS">
-      <motion> People have been itching for the next release of Tapestry; one where the demos work (woops!) including JavaScript and the Palette. Documentation is still not ready for an rc release, but I think a beta release is a good idea. </motion>
-      <response> HLS, GL, RLS, DS, HK, EH, MB, TS, NC: +1 </response>
-    </vote>
-    <vote date="Sep 3 2003" title="Erik Hatcher as commiter" dev="GL">
-      <motion> I nominate Erik Hatcher. He knows the score in jakarta-land. I think its a great idea. </motion>
-      <response> GL, HLS, MB, DS, RLS: +1 </response>
-      <response> NC: +0 (no vote) </response>
-    </vote>
-    <vote date="Sep 3 2003" title="Tsvetelin Saykov as committer" dev="MB">
-      <motion>I would like to nominate Tsvetelin Saykov as a committer. Tsvetelin has more than an year and a half of Tapestry experience, has worked with many large web projects, and can be very helpful overall for the development of the framework, especially in the area of dynamic pages with layout determined at runtime. (not to mention that he would need CVS access to work on the Tree) </motion>
-      <response> MB, HLS, GL, DS, NC, RLS: +1 </response>
-    </vote>
-    <vote date="Sep 2 2003" title="Harish Krishnaswamy as committer" dev="HLS">
-      <motion> I would like to nominate Harish; he has been very actively and enthusiastically supporting Tapestry in the mailing lists. I think he would be an excellent and valuable asset to the team. And hell, he's relatively local --- I might actually get to meet a Tapestry committer in person! </motion>
-      <response> HLS, GL, DS, MB, RLS: +1 </response>
-      <response> NC: +0 (no vote) </response>
-    </vote>
-    <vote date="Jul 13 2003" title="Release 3.0-beta-2" dev="HLS">
-      <motion> We informally discussed this not too long ago; I think we are at a good point for beta-2. There have been some significant improvements since beta-1a that will largely be invisible to most users (the correct thing for a beta release); at the same time, I think we're all anxious to push forward and get Tapestry 3.0-xxx into wider distribution. Although there are still several outstanding bugs (one or two that are problematic) I think this is a good time to keep momentum going and 
-        release the next beta. A +1 vote will procede with beta-2, tagging the repository and pushing the new releases out to the Apache distribution mirrors. </motion>
-      <response> HLS, MB, NC, RLS, GL, DS: +1 </response>
-    </vote>
-    <vote date="Jun 3 2003" title="Release 3.0-beta-1a" dev="RLS">
-      <motion>release 3.0-beta-1a ASAP (containing fixes for JDK 1.3)</motion>
-      <response> HLS, MB, NC, RLS, GL, DS: +1 </response>
-    </vote>
-    <vote date="May 30 2003" title="Release 3.0-beta-1" dev="HLS">
-      <motion> Release 3.0-beta-1 as soon as possible. <br/> Release notes will state that the API is now stable, with the exception of IMonitor. </motion>
-      <response> HLS, MB, NC, RLS, GL, DS: +1 </response>
-    </vote>
-    <vote date="Apr 17 2003" title="Tapestry NextGen released as 3.0" dev="HLS">
-      <motion> PROPOSAL: the next major release of Tapestry (previously known as 2.4 or NextGen) be released as version number 3.0. </motion>
-      <response> HLS, MB, RLS, GL, DS: +1 </response>
-      <response> NC: +0 (no vote) </response>
-    </vote>
-    <vote date="Mar 7 2003" title="Nominate David Solis as Tapestry Commiter" dev="HLS">
-      <motion>
-        <p>There really didn't seem to be much discussion ... everyone seems to be in favor. Mind Bridge seems very absent of late.</p>
-        <p>Let's put it to a vote. No answer within 24 hours will be treated as a +0.</p>
-        <p>If voted in, David Solis will be invited to become a Tapestry committer; will be granted voting rights and update access to the CVS repository. </p>
-      </motion>
-      <response> HLS, NC, RLS, GL: +1 </response>
-      <response> MB, ME: +0 </response>
-    </vote>
-  </votes>
-  <todo>
-    <actions priority="Release 3.0">
-      <action context="code" dev="open">Handle change of locale correctly, by reloading new instance of page in proper locale</action>
-      <action context="code" dev="HLS">Improved User's Guide to replace existing Developer's Guide</action>
-      <action context="code" dev="open">Replace the current tutorial with Neil Clayton's Tutorial2</action>
-      <action context="code" dev="open">Reoganize directory structure to more standard format (compatible with Maven)</action>
-      <action context="code" dev="open">Get Tapestry compiling under Maven, have nightly builds</action>
-      <action context="code" dev="open">Fill out the test suite and code coverage, reach 85% or better</action>
-      <action context="code" dev="DS">Fix all the Component Reference pages to use the 3.0 syntax</action>
-      <action context="script" dev="open">Improve the "include script" element to support relative scripts, scripts in context, script in classpath</action>
-      <action context="misc" dev="open">Unit testing stategy for the JSP tags and tagsupport service</action>
-      <action context="misc" dev="open">Allow auto parameters to not be required</action>
-    </actions>
-    <actions priority="Release 3.1">
-      <action context="code" dev="open">Intersertials</action>
-      <action context="code" dev="open">Extend listener methods to take parameters (matching service parameters to actual method parameters)</action>
-    </actions>
-    <!-- Add todo items. @context is an arbitrary string. Eg:
-    <actions priority="high">
-      <action context="code" dev="SN">
-      </action>
-    </actions>
-    <actions priority="medium">
-      <action context="docs" dev="open">
-      </action>
-    </actions>
-    -->
-  </todo>
-  <changes>
-  	<release version="3.0.4" date="Mar 31 2006">
-      <action type="fix" dev="GL" fixes-bug="TAPESTRY-431"> Fixed TemplateParser throws an exception and stops parsing when duplicate attributes are found in a tag. </action>
-      <action type="fix" dev="JK" fixes-bug="TAPESTRY-877" due-to="Brian K. Wallace">
-      	Javassist url was incorrect.
-      </action>
-      <action type="remove" dev="JK" fixes-bug="TAPESTRY-878" due-to="Brian K. Wallace" >
-      	Removed old tutorial example.
-      </action>
-      <action type="fix" dev="JK" fixes-bug="TAPESTRY-806" due-to="Nick Westgate" >
-      	Double checked locking bug prevents use of multi processor environments (efficiently).
-      </action>
-      <action type="fix" dev="JK" fixes-bug="TAPESTRY-241" due-to="Kurtis Williams" >
-      	binding for convertor needed to be inherited-binding
-      </action>
-      <action type="fix" dev="JK" fixes-bug="TAPESTRY-193" due-to="Brian K. Wallace" >
-      	AssetService not resolving file prefixes correctly.
-      </action>
-      <action type="fix" dev="JK" fixes-bug="TAPESTRY-774" due-to="Brian K. Wallace" >
-      	It seems that DirectLink and/or PopupLinkRenderer should be checking for Form rewind and not rendering in that case. 
-      </action>
-      <action type="fix" dev="JK" fixes-bug="TAPESTRY-221" due-to="Brian K. Wallace" >
-      	TableFormPages does not support inherited informal parameters that are required to set the stylesheet class.
-      </action>
-      <action type="update" dev="JK" fixes-bug="TAPESTRY-310" due-to="Joni Suoinen" >
-      	Add finnish validation strings
-      </action>
-      <action type="fix" dev="JK" fixes-bug="TAPESTRY-646" due-to="Brian K. Wallace" >
-      	 Modified text raw="yes" to raw="true" for user guide Insert component documentation.
-      </action>
-      <action type="fix" dev="JK" fixes-bug="TAPESTRY-422" due-to="Brian K. Wallace" >
-      	Patches to Javadoc to explicitly state that URLs returned from ExternalService will already be encoded.
-      </action>
-      <action type="fix" dev="JK" fixes-bug="TAPESTRY-339" due-to="Nick Westgate" >
-      	If LinkSubmit is mixed with other submit components in the same form, erroneous submits can occur from pages accessed via the browser back button. This happens because LinkSubmit's hidden variable is never reset. 
-      </action>
-    </release>
-    <release version="3.0.3" date="Mar 26 2005">
-      <action type="fix" dev="PF" fixes-bug="TAPESTRY-278"> Fixes security flaw in asset service. </action>
-      <action type="fix" dev="PF" fixes-bug="TAPESTRY-230"> JanitorThread now terminates explicitly when servlet is destroyed.  Interruption properly terminates thread during sweep operation. </action>
-      <action type="fix" dev="PF" fixes-bug="TAPESTRY-238"> Fixed bug preventing DatePicker calendar window from closing automatically if onchange event handler is not specified. </action>
-      <action type="fix" dev="PF" fixes-bug="TAPESTRY-277"> DatePicker onchange event now only fires when date changes. </action>
-      <action type="fix" dev="PF" due-to="Xi Ping Wang" fixes-bug="TAPESTRY-255"> Patch for bad translation in ValidationStrings_zh_TW.properties </action>
-      <action type="fix" dev="PF" due-to="Xi Ping Wang" fixes-bug="TAPESTRY-251"> Patch for bad translation in ValidationStrings_zh_CN.properties </action>
-      <action type="fix" dev="PF" due-to="Michael Hamilton" fixes-bug="TAPESTRY-1"> Fixed incorrect test for enabling rendering of element in FormConditional component. </action>
-      <action type="fix" dev="PF" due-to="Markus Wiederkehr" fixes-bug="TAPESTRY-283"> Fixes missing type attribute of script tag in Body component. </action>
-      <action type="fix" dev="PF" due-to="Matthew Mead" fixed-bug="TAPESTRY-284"> Fixes improper engine cleanup when client aborts a request. </action>
-      <action type="update" dev="PF"> Build scripts are now Java 1.5 friendly. </action>
-    </release>
-    <release version="3.0.2" date="Feb 14 2005">
-      <action type="fix" dev="EH" fixes-bug="TAPESTRY-214, TAPESTRY-216, TAPESTRY-227"> Fix build settings for JDOM and Jetty. </action>
-      <action type="fix" dev="EH"> Upgrade OGNL to 2.6.7. This should move to 2.7.0 as soon as it is released. </action>
-      <action type="fix" dev="EH" fixes-bug="TAPESTRY-238"> Added call to onchange for DatePicker pop-up selections. </action>
-      <action type="fix" dev="HLS" due-to="Xi Ping Wang" fixes-bug="TAPESTRY-249"> Provide localized validation messages for Simplified Chinese (zh_CN). </action>
-      <action type="fix" dev="HLS" due-to="Niklas Ekman" fixes-bug="TAPESTRY-139"> Provide localized validation messages for Swedish. </action>
-      <action type="fix" dev="HLS" fixes-bug="TAPESTRY-230"> Ignored interruptedException prevents Janitorthread termination. </action>
-      <action type="fix" dev="HLS" due-to="Morten Holm" fixes-bug="TAPESTRY-248"> The online Tapestry component reference for 3.0.1 for @Foreach component has an error in the example section. </action>
-      <action type="fix" dev="HLS" due-to="Michael Frericks" fixes-bug="TAPESTRY-218"> Persistent properties can't be set to null. </action>
-      <action type="fix" dev="HLS" due-to="Sadanori Ito" fixes-bug="TAPESTRY-200"> ListEdit component reference should list source and value as required. </action>
-      <action type="fix" dev="HLS" due-to="Wouter de Vaal" fixes-bug="TAPESTRY-189"> FAQ link to Spring integration document is broken. </action>
-      <action type="fix" dev="HLS" due-to="Dominik Kreutz" fixes-bug="TAPESTRY-167"> [PATCH] ValidationStrings_de.properties </action>
-      <action type="fix" dev="HLS" fixes-bug="TAPESTRY-258"> Have RenderString implement useful toString(). </action>
-      <action type="fix" dev="HLS" fixes-bug="TAPESTRY-260"> Change ListEditMap to never return null from getDeletedKeys(). </action>
-    </release>
-    <release version="3.0.1" date="Oct 16 2004">
-      <action type="update" dev="DS"> Add PopupLinkRenderer to contrib, this renderer emits javascript to launch the link in a new window. </action>
-      <action type="fix" dev="HLS" fixes-bug="29850"> Ensure that the page's requestCycle property is set before finishLoad() is invoked on any component. </action>
-      <action type="update" dev="HLS"> Make IMessages smartly expand exceptions into their message, or their class name. </action>
-      <action type="fix" dev="HLS" fixes-bug="29871"> Fix NPE in ValidationDelegate when the form has errors recorded for fields that did not render. </action>
-      <action type="update" dev="HLS" fixes-bug="30261"> Provide a public implementation of ITemplateParserDelegate. </action>
-      <action type="fix" dev="HLS" fixes-bug="30384"> Palette does not clear its selected list when no selections are made. </action>
-      <action type="fix" dev="HLS" fixes-bug="26967"> Allow abstract pages/components even if no specified properties (or other enhancements) </action>
-      <action type="fix" dev="HLS" fixes-bug="30086"> Shell component should allow informal parameters </action>
-      <action type="update" dev="HLS"> Added a clearErrors() method to IValidationDelegate. </action>
-    </release>
-    <release version="3.0" date="Apr 18 2004">
-      <action type="fix" dev="HLS" fixes-bug="28345"> Workbench/Upload exception when no file specified </action>
-      <action type="fix" dev="DS" fixes-bug="28396"> Add FormConditional to Component Reference </action>
-      <action type="fix" dev="DS" fixes-bug="28422"> Add element parameter to contrib:Choose </action>
-      <action type="fix" dev="HLS" fixes-bug="28454"> Remove a small optimization that compromised storage of mutable objects as persistent page properties. </action>
-    </release>
-    <!-- Use due-to to give acknowledgement for patches. -->
-    <release version="3.0-rc-3" date="Apr 7 2004">
-      <action type="update" dev="HLS"> Add docs on how to report problems. </action>
-      <action type="fix" dev="HLS" fixes-bug="28202" due-to="Mats Forst&#246;f"> Pass the java.security.ProtectionDomain to the parent class loader when creating an enhanced class, to allow Tapestry operation inside secure environments such as Tomcat. </action>
-      <action type="fix" dev="DS" fixes-bug="28177" due-to="sito@htf.highway.ne.jp"> NPE in org.apache.tapestry.form.LinkSubmit. </action>
-      <action type="fix" dev="HLS" fixes-bug="27956"> Make checks for unimplemented abstract methods optional, to work around a bug in IBM JDK 1.3.1 (used with Websphere 4.x). </action>
-      <action type="fix" dev="HLS" fixes-bug="28235"> Allow more primitive types to be used with parameter direction <code>auto</code> (byte, char, short, float and long) in addition to the previously accepted types (boolean, int, double and objects). </action>
-    </release>
-    <release version="3.0-rc-2" date="Apr 1 2004">
-      <action type="fix" dev="HLS" fixes-bug="28057"> Fix problems in the binary distribution. </action>
-      <action type="fix" dev="HLS" fixes-bug="27954"> Create proper OGNL context when checking for invariant OGNL expressions (when initializing component properties). </action>
-      <action type="fix" dev="HLS" fixes-bug="27628"> DataSqueezer: Incorrect exception message </action>
-      <action type="fix" dev="HLS" fixes-bug="28010"> ExpressionBinding optimizes expressions incorrectly </action>
-    </release>
-    <release version="3.0-rc-1" date="Mar 15 2004">
-      <action type="fix" dev="EH" fixes-bug="27656"> ValidationDelegate.writeLabelPrefix/Suffix does not have IValidator access </action>
-      <action type="fix" dev="DS" fixes-bug="27630, 27631" due-to="Michael M. Brzycki"> Fix javadoc. </action>
-      <action type="fix" dev="DS" fixes-bug="27567"> Incorrect example code. </action>
-      <action type="fix" dev="DS" fixes-bug="27551" due-to="Michael M. Brzycki"> InspectorButton docs have incorrect links. </action>
-      <action type="update" dev="DS"> Update Component Reference to use 3.0 syntax </action>
-      <action type="update" dev="HLS"> Update the license to Apache Software License 2.0. </action>
-      <action type="update" dev="EH"> Added 'raw' attribute to FieldLabel component. </action>
-      <action type="update" dev="HLS"> Removed the out-of-date Tutorial. </action>
-      <action type="fix" dev="HLS" fixes-bug="18288"> Palette doesn't retain user-specified sort order </action>
-      <action type="fix" dev="HLS" fixes-bug="23544"> Don't use <code>request.getRemoteHost()</code> since that requires an expensive reverse DNS lookup. </action>
-      <action type="fix" dev="HLS" fixes-bug="27071" due-to="basile.chandesris"> Fix typos and inaccuracies in the 3.0 DTD comments. </action>
-      <action type="fix" dev="HLS" fixes-bug="27202,27203,27227" due-to="Jamie Orchard-Hays"> Fix logic in client-side validation. </action>
-      <action type="fix" dev="HLS" fixes-bug="27110" due-to="Karel Miarka"> DatePicker doesn't use the current Locale in its formatter </action>
-      <action type="update" dev="HLS"> Update DatePicker to use a graphic icon to hide and show the calendar. </action>
-      <action type="fix" dev="HLS" fixes-bug="20932"> Check for duplication of ids between the HTML template and the specification. </action>
-      <action type="fix" dev="HLS" fixed-bug="27082"> Fix some number conversion problems inside NumberValidator. </action>
-      <action type="update" dev="HLS"> Dynamically download OGNL and Javassist libraries (in accordance with ASF directives about non-ASL code). <b>Unfortunately, this means that we no longer can distribute precompiled examples that include those libraries.</b> </action>
-    </release>
-    <release version="3.0-beta-4" date="Feb 5 2004">
-      <action type="update" dev="DS"> Change direction of parameter model for WML components, SelectionField and PropertySelection </action>
-      <action type="fix" dev="DS"> Fixed the byte[] mapping in org.apache.tapestry.enhance.JavaClassMapping </action>
-      <action type="update" dev="HLS" due-to="Tetsuya Kitahata"> Convert the Tapestry home page to build using <link href="http://xml.apache.org/forrest/">Forrest</link>. </action>
-      <action type="update" due-to="Michael M. Brzycki"> Updated javadoc build target to link to JDK 1.3 </action>
-      <action type="add" dev="HK"> Added new validator, Pattern Validator </action>
-      <action type="fix" dev="HK"> Fixed the null pointer exception from FieldLabel when not enclosed by Form or when IValidationDelegate is not provided </action>
-      <action type="fix" dev="HK"> The key attribute of the script foreach is changed to not be a required attribute </action>
-      <action type="fix" dev="EH"> Added support for OGNL TypeConverter in expression bindings </action>
-      <action type="update" dev="DS"> Updated Component Reference for WML components </action>
-      <action type="update" dev="RLS"> Made DateValidator's getEffectiveFormat()/getEffectiveDisplayFormat() public </action>
-      <action type="update" dev="RLS"> Updated to use DocBook 1.62.4 XSL stylesheets for documentation generation </action>
-      <action type="update" dev="RLS"> Moved info priority logging to debug priority </action>
-      <action type="update" dev="RLS"> Custom parameter binding properties only enhanced if abstract </action>
-      <action type="update" dev="MB"> Updated the Table components to have an easier interface, similar to that of Foreach. </action>
-      <action type="fix" dev="MB" fixes-bug="21833"> build.properties.sample does not include jython.dir </action>
-      <action type="fix" dev="MB" fixes-bug="22840"> Table component doesn't sort fine when there are null values </action>
-      <action type="fix" dev="MB" fixes-bug="22640"> Wrong Package in link </action>
-      <action type="fix" dev="MB" fixes-bug="22641"> JavaDoc: should IField be IFieldTracking?? </action>
-      <action type="fix" dev="MB" fixes-bug="23668"> contrib:PopupLink ignores informal parameters </action>
-      <action type="fix" dev="MB" fixes-bug="22635"> Wrong Package in link </action>
-      <action type="fix" dev="MB" fixes-bug="22634"> Typo: "In a IListenerBindingSpecification" </action>
-      <action type="fix" dev="MB" fixes-bug="22694"> Add url parameter to Shell component </action>
-      <action type="update" dev="MB" fixes-bug="23870"> current OGNL 2.6.3 needs to be used </action>
-      <action type="fix" dev="MB" fixes-bug="23511"> Problem with URL encodings at EngineServiceLink.java </action>
-      <action type="fix" dev="MB" fixes-bug="23227"> The source parameter of Foreach should be required </action>
-      <action type="fix" dev="MB" fixes-bug="20252"> tests failing under JDK 1.3 </action>
-      <action type="fix" dev="MB" fixes-bug="23500"> Name attribute gets duplicated in TextField </action>
-      <action type="fix" dev="MB" fixes-bug="22835"> DateField component throws an ApplicationRuntimeException </action>
-      <action type="fix" dev="MB" fixes-bug="22836"> NumericField component throws an ApplicationRuntimeException </action>
-      <action type="fix" dev="MB" fixes-bug="22837"> Using NumericField cause a ClassCastException </action>
-      <action type="fix" dev="MB" fixes-bug="24467"> Compatibility of the AbstractEngine to servlet-api 2.2 </action>
-      <action type="fix" dev="MB" fixes-bug="24298" due-to="Colin Sampaleanu"> patch to allow workbench to work with JDK 1.4.2 and current Jetty </action>
-      <action type="fix" dev="MB" fixes-bug="24425"> race condition in class enhancement </action>
-      <action type="fix" dev="MB" fixes-bug="23916"> The Dates tab in the Workbench contains an empty popup link </action>
-      <action type="fix" dev="MB" fixes-bug="24008"> ApplicationRuntime Exception loses root cause... </action>
-      <action type="fix" dev="MB" fixes-bug="22958"> NumberValidator forces to input a value </action>
-      <action type="fix" dev="MB" fixes-bug="21871"> junit.jar needed to build junit subproject </action>
-      <action type="fix" dev="MB" fixes-bug="20253"> JUnit XML tests broken under JDK with no XML parser (eg. 1.3) </action>
-      <action type="fix" dev="MB" fixes-bug="24393"> No JVM requirements mentioned in docs </action>
-      <action type="fix" dev="MB" fixes-bug="24874" due-to="Zhenbang Wei"> [PATCH]ValidationStrings_zh_TW.properties </action>
-      <action type="fix" dev="EH" fixes-bug="25117"> PageService.getLink throws ClassCastException if parameters arg is Object[] </action>
-      <action type="fix" dev="RLS" fixes-bug="25462"> NumericField does not pass on its type parameter </action>
-      <action type="fix" dev="RLS" fixes-bug="25585"> ValidationDelegate throws NPE for some new FieldLabel/ValidField </action>
-      <action type="fix" dev="MB" fixes-bug="25642"> properties cannot be of complex array types </action>
-      <action type="fix" dev="EH" fixes-bug="25766"> fixed broken links in doc\src\common\TapestryLinks.xml </action>
-      <action type="fix" dev="MB" fixes-bug="26395"> Inherited parameters do not pick up default values </action>
-      <action type="update" dev="HLS"> Changed code to no longer invoke <code>StringUtils.isEmpty() / isNonEmpty()</code> (this is because the behavior of the method is changing between jakarta-commons 1.0 and 2.0). </action>
-      <action type="update" dev="HLS"> Add an implementation of <code>toString()</code> to <code>RequestCycle</code>. </action>
-      <action type="update" dev="HLS"> Update all copyrights for 2004. </action>
-      <action type="fix" dev="HLS"> Add download links. </action>
-      <action type="update" dev="HLS"> Remove unncessary constructor from test case classes. </action>
-      <action type="update" dev="HLS"> Changed mock unit tests to redirect System.out and System.err to log files rather than the console. </action>
-      <action type="update" dev="HLS" due-to="Glen Stampoultzis"> Improve the documentation for the Palette component, providing a real example of CSS styles used with the component. </action>
-      <action type="fix" dev="HLS" fixes-bug="26416"> Component parameters with direction 'form' should not allow static bindings. </action>
-      <action type="fix" dev="HK" fixes-bug="26599"> Fixed NPE in PatternValidator.toString(). </action>
-      <action type="fix" dev="HLS"> Fix TestMocks to not use JDK 1.4 API. </action>
-      <action type="fix" dev="MB"> Fixing property initializers to be evaluated every time (unless they are invariant) </action>
-      <action type="update" dev="MB"> Added Servlet API 2.4 from Tomcat 5 and ejb.jar from Geronimo. Made the mock objects compatible with Servlet API 2.4. </action>
-      <action type="update" dev="MB"> Evaluate the string 'false' as Boolean.FALSE. All other non-empty strings continue to be evaluated as Boolean.TRUE. </action>
-      <action type="update" dev="MB"> Automatically download external dependencies (such as Forrest and McKoi DB). </action>
-      <action type="fix" dev="HK" due-to="Anatol Pomazau"> DatePicker positioning problem fixed. </action>
-      <action type="fix" dev="HK" fixes-bug="24336"> Automatic rendering of the maxlength and size attributes have been removed. DatePicker now allows informal attributes that will be applied to the field. </action>
-      <action type="fix" dev="MB" fixes-bug="25611"> Fixed one more place where the encoding needs to be set </action>
-    </release>
-  </changes>
-</status>
\ No newline at end of file
diff --git a/3.0.4/support/build.xml b/3.0.4/support/build.xml
deleted file mode 100644
index aa0fb89..0000000
--- a/3.0.4/support/build.xml
+++ /dev/null
@@ -1,71 +0,0 @@
-<?xml version="1.0"?>
-<!-- $Id$ -->
-<!-- Special build script used when creating new Tapestry releases. 
-
-	 Copy this file and a copy of build.properties to a temporary directory
-	 and execute "ant -emacs setup build" using JDK 1.3.
-	 
-	 *** 
-	 NOTE: JDK 1.3 is not compatible with Forrest, so ignore the above and
-	 used JDK 1.4. 
-	 ***
-	 
-	 Be sure to have a complete build.properties and environment, including
-	 the necessary settings and packages for generating documentation
-	 (i.e., settings for "fop.dir" and "clover.dir").
-	 
-	 Generates release distributions into the a sub-directory (name matches
-	 the release version).
-	 
-	 -->
-<project name="Tapestry Export" default="build">
-	<property file="build.properties"/>
-
-	<!-- This can be changed to build a historical release, or
-		 to build a branch release. An override can appear in build.properties
-		 or on the command line. -->
-	<property name="tag" value="HEAD"/>
-	<property name="export.dir" value="export"/>
-	<property name="module" value="jakarta-tapestry"/>
-	<property name="work.dir" value="${export.dir}/${module}"/>
-		
-	<target name="setup"
-		description="Sets up the directory, gets the files via CVS.">
-		
-		<delete dir="${export.dir}" quiet="true"/>
-		<mkdir dir="${export.dir}"/>
-		
-		<cvs command="-z3 export" tag="${tag}" package="${module}"
-			dest="${export.dir}"
-			cvsroot=":pserver:anoncvs@cvs.apache.org:/home/cvspublic"/>
-	</target>
-	
-	<target name="build" description="Builds the distribution.">
-
-		<copy file="build.properties" todir="${work.dir}/config"/>
-		
-		<ant inheritAll="false" dir="${work.dir}" target="dist">
-			<property name="ext.dist.dir" location="ext-dist"/>
-		</ant>
-		
-		<property file="${work.dir}/config/Version.properties"/>
-
-		<mkdir dir="${framework.version}"/>
-
-		<copy todir="${framework.version}">
-			<fileset dir="${work.dir}/dist">
-				<include name="*.tar.gz"/>
-				<include name="*.zip"/>
-			</fileset>
-		</copy>
-
-		<echo>Generating checksums ...</echo>
-
-		<checksum fileext=".md5">
-			<fileset dir="${framework.version}">
-				<include name="*.tar.gz"/>
-				<include name="*.zip"/>
-			</fileset>
-		</checksum>
-	</target>
-</project>
diff --git a/3.0.4/support/copyright-header.txt b/3.0.4/support/copyright-header.txt
deleted file mode 100644
index 6fd3dca..0000000
--- a/3.0.4/support/copyright-header.txt
+++ /dev/null
@@ -1,14 +0,0 @@
-//  Copyright 2004 The Apache Software Foundation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
diff --git a/3.0.4/support/gump.xml b/3.0.4/support/gump.xml
deleted file mode 100644
index 6e0fc05..0000000
--- a/3.0.4/support/gump.xml
+++ /dev/null
@@ -1,93 +0,0 @@
-<module name="jakarta-tapestry">
-
-  <!-- $Id$ -->
-
-  <url href="http://jakarta.apache.org/tapestry/index.html"/>
-  <description>
-  Component-based web application framework organized around insanely
-  high levels of resuse.
-  </description>
-
-  <cvs repository="jakarta"/>
-  
-  <project name="jakarta-tapestry">
-    <package>org.apache.tapestry</package>
-
-    <ant>
-      <property name="framework.version" value="@@DATE@@"/>
-    </ant>
-
-    <!-- framework -->
-    <depend project="ant" inherit="runtime"/>
-    <depend project="commons-beanutils"/>
-    <depend project="commons-digester"/>
-    
-    <depend project="commons-fileupload"/>
-    
-    
-    <depend project="commons-logging"/>
-    <depend project="commons-lang"/>
-    <depend project="jakarta-bsf"/>
-    <depend project="jakarta-oro"/>
-    <depend project="jakarta-servletapi-4"/>
-    <depend project="ognl"/>
-    <depend project="xml-xerces"/>
-    <depend project="jakarta-oro"/>
-    <depend project="commons-digester"/>
-    <depend project="commons-lang"/>
-    <depend project="jakarta-bsf"/>
-    <depend project="javassist"/>
-        
-    <!-- These aren't built, yet, by Gump.  We direct Gump to
-    	   use the versions stored in our CVS. -->
-    	   
-    <depend project="ognl"/>
-    <depend project="jakarta-commons-codec"/>
-
-    <!-- contrib -->
-    <work nested="framework/classes"/>
-    <depend project="ejb"/>
-
-    <!-- examples -->
-    <work nested="contrib/classes"/>
-    <depend project="jcharts"/>
-
-    <!-- examples/Vlib -->
-    <work nested="examples/VlibBeans/classes"/>
-
-    <jar name="lib/tapestry-@@DATE@@.jar"/>
-    <license name="LICENSE.txt"/>
-
-    <nag from="Howard M. Lewis Ship &lt;hlship@apache.org&gt;"
-         to="tapestry-dev@jakarta.apache.org"/>
-  </project>
-
-  <project name="ognl">
-    <package>ognl</package>
-    <url href="http://www.ognl.org"/>
-    
-    <!-- This needs to be kept up-to-date as we update to later versions of OGNL. -->
-    
-    <jar name="lib/ext/ognl-2.6.3.jar"/>
-    <license name="lib/ext/LICENSE.ognl.txt"/>
-  </project>
-   
-  <project name="jcharts">
-    <package>org.jCharts</package>
-    <url href="http://jcharts.sourceforge.net/"/>
-    <jar name="examples/Workbench/lib/jCharts-0.6.0.jar"/>
-    <license name="examples/Workbench/lib/LICENSE.jCharts.txt"/>
-  </project>
-
-  <!-- This is the 10/19/03 dev version of codec. 
-  	   Needs to be updated to a finalized version when it comes out 
-  	   and this project will be removed.
-  -->
-  <project name="jakarta-commons-codec">
-    <package>org.apache.commons.codec</package>
-    <url href="http://jakarta.apache.org/commons/codec/"/>
-    <jar name="lib/ext/commons-codec-1.2.jar"/>
-    <license name="lib/ext/LICENSE.commons-codec.txt"/>
-  </project>
-
-</module>
diff --git a/3.0.4/support/update-copyrights.py b/3.0.4/support/update-copyrights.py
deleted file mode 100644
index da0b8b2..0000000
--- a/3.0.4/support/update-copyrights.py
+++ /dev/null
@@ -1,157 +0,0 @@
-#!/bin/perl
-# $Id$
-
-# Run this from the support directory, and specify the path of a source directory
-# to walk.
-
-import sys, os
-from stat import *
-import re
-
-updateCount = 0;
-
-packageRe = re.compile(r'^\s*package\s+');
-
-def walktree(dir, callback):
-    '''recursively descend the directory rooted at dir,
-       calling the callback function for each regular file'''
-
-    for f in os.listdir(dir):
-        pathname = '%s/%s' % (dir, f)
-
-        # Files may occasionally be deleted out
-        # from under the sequence returned by listdir
-		
-        if not os.access(pathname, os.F_OK):
-            continue
-		
-        mode = os.stat(pathname)[ST_MODE]
-        if S_ISDIR(mode):
-            # It's a directory, recurse into it
-            walktree(pathname, callback)
-        elif S_ISREG(mode):
-            # It's a file, call the callback function
-            callback(pathname)
-        else:
-            # Unknown file type, print a message
-            print 'Skipping %s' % pathname
-
-def visitfile(file):
-	if not endsWith(file, ".java"):
-		return
-		
-	print file, " ... ",
-	
-	if updateCopyright(file):
-		print "FIXED"
-	else:
-		print "OK"		
-	
-def endsWith(s, suffix):
-	return s[-len(suffix):] == suffix					
-	
-def updateCopyright(file):
-	'''
-Checks that the leading copyright message (if any) of the file (a Java source file)
-matches the expected copyright.  If the message is up to date, returns false (indicating
-no change to the file).  Otherwise, the file is updated with the new copyright
-and true is returned.
-'''
-
-	input = open(file, "r")
-	line = None
-	
-	good = 1	
-	
-	for cline in copyright:
-		line = input.readline()
-		
-		if line != cline:
-			good = 0
-			break
-		
-	if good:
-		line = input.readline()
-				
-	# Ignore anything else between the copyright block
-	# and the package statement
-			
-			
-	while not packageRe.match(line):
-		good = 0
-		line = input.readline()
-		
-	if good:
-		input.close()
-		return 0
-
-	packageline = line
-			
-	newFile = file + "~"
-	
-	out = open(newFile, "w")
-
-	out.writelines(copyright)
-	out.write(packageline)
-	
-	while 1:
-		line = input.readline()
-		
-		if line == "":
-			break
-			
-		out.write(line)
-								
-	out.close()
-	input.close()
-		
-	# A careful rename.  Save the original, rename the new file to replace
-	# the original, then delete the renamed original
-		
-	saveFile = file + ".save"
-	
-	if os.access(saveFile, os.F_OK):
-		os.remove(saveFile)
-	
-	os.rename(file, saveFile)
-	os.rename(newFile, file)
-	
-	os.remove(saveFile)
-	
-	global updateCount
-	
-	updateCount = updateCount + 1
-	
-	return 1
-								
-	
-def readCopyright(path):
-	'''
-Reads the file containing the copyright into an array, which is returned.
-'''
-
-	f = open(path, "r")
-	
-	result = f.readlines()
-	
-	f.close()
-	
-	return result
-			
-			
-if __name__ == '__main__':
-	global copyright
-    
-	copyright = readCopyright(sys.argv[1])
-	
-	for dir in sys.argv[2:]:
-		walktree(dir, visitfile)
-
-	print
-
-	if updateCount == 0:
-		print "All files up to date."
-	else:
-		print "Updated %d files." % updateCount
-	
-
diff --git a/3.0.4/web/.cvsignore b/3.0.4/web/.cvsignore
deleted file mode 100644
index 8e695ec..0000000
--- a/3.0.4/web/.cvsignore
+++ /dev/null
@@ -1 +0,0 @@
-doc
diff --git a/3.0.4/web/images/.cvsignore b/3.0.4/web/images/.cvsignore
deleted file mode 100644
index 5b2d3d8..0000000
--- a/3.0.4/web/images/.cvsignore
+++ /dev/null
@@ -1 +0,0 @@
-*.jbf

diff --git a/3.0.4/web/more_new.html b/3.0.4/web/more_new.html
deleted file mode 100644
index 5d76756..0000000
--- a/3.0.4/web/more_new.html
+++ /dev/null
@@ -1,570 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<!--
-	
-	*******************************************************************
-	
-	This file is no longer used! Information within the file is being
-	transferred to ${root.dir}/status.xml!
-	
-	*******************************************************************
--->	
-<!-- $Id$ -->
-<html>
-<head>
-	<title>Tapestry: What's New</title>
-<link rel="STYLESHEET" type="text/css" href="scripts/style_virtlib_pcIE55.css">
-</head>
-
-<body leftmargin="0" topmargin="0" marginwidth="0" marginheight="0">
-<table width="100%" border="0" cellspacing="0" cellpadding="2">
-	<tr>
-		<td valign="top" align="left"><IMG alt="[Tapestry Banner]" src="images/Tapestry-Banner.png" border="0">
-		
-<h3>Release 2.3-rc-1</h3>
-
-<ul>
-<li>Installed Apache Foundation license and copyrights into all source files.</li>
-<li>Added Spanish translation of validation strings, contributed by Juan Alvarez.</li>
-<li>Fixed some deployment issues when deploying into Tomcat.</li>
-</ul>
-
-<pre>
-[ 650592 ] Add MaskEdit component
-[ 651331 ] Added DatePicker disable parameter
-[ 655089 ] Add ExternalPageCalback
-[ 660372 ] Add Global object
-</pre>
-
-<h3>Release 2.3-alpha-1</h3>
-
-<p>Tapestry is now available under the terms of the Apache Software License.  Previous
-releases were released under the LGPL, but are now retroactively
-licensed under the ASL as well.
-
-<p>Added a <A href="dev.html">Developers Page</a>.
-
-<p>
-Removed code dependency on Log4J, using
-Jakarta's
-<a href="http://jakarta.apache.org/commons/logging.html">commons-logging</a> wrapper layer instead.
-Use the <code>Enum</code> implementation from Jakarta's
-<a href="http://jakarta.apache.org/commons/lang.html">commons-lang</a> library.
-
-<p>
-Rework dynamic code loading so that a subclass of
-<A href="doc/api/net/sf/tapestry/ApplicationServlet.html">ApplicationServlet</a>
-is no longer necessary.
-
-<p>Add methods to
-<A href="doc/api/net/sf/tapestry/INamespace.html">INamespace</a> and
-<A href="doc/api/net/sf/tapestry/IPage.html">IPage</a>
-to make dealing with namespaces and qualified page names easier.
-
-<p>
-Joe Panico has contributed the PopupLink component.
-
-<p>
-<code>&lt;jwc id="..."&gt;</code> is no longer allowed in HTML templates.
-
-<p>
-Upgrade to OGNL 2.3.0.
-
-<pre>
-[ 619481 ] use jakarta commons lang Enum
-[ 627478 ] Don't require servlet subclass
-[ 614324 ] Add a param "raw" in addition to "key"
-[ 627332 ] NPE in BaseValidator (form without body)
-[ 557332 ] Use a search path for properties
-[ 625721 ] Forms never stateful
-[ 637048 ] Add PopLink
-[ 643239 ] Add EmailValidator
-[ 633608 ] ServiceLink docs missing service param
-[ 644235 ] Body component ignores element
-[ 643728 ] user supplied RequestContext
-[ 643729 ] user supplied MultipartDecoder 
-[ 628153 ] add getAttribute to RequestContext
-[ 633073 ] Rollover doesn't work in form
-[ 631764 ] AbstractComponent API
-</pre>
-
-<h3>Release 2.2</h3>
-
-Use the version of Jetty that's compatible with JDK 1.2.
-
-<pre>
-[ 619444 ] Contrib:DateField min/max params broken
-[ 620496 ] JS net/sf/tapestry/form/Calendar.js
-</pre>
-
-<h3>Release 2.2-rc-1</h3>
-
-<pre>
-[ 616489 ] IPublicBean not accessible.
-[ 616377 ] DatePicker value error
-[ 582614 ] ValidField doesn't call getValidator()
-[ 617327 ] Contrib:DateField specification invalid
-[ 616851 ] Can't redirect to a library page
-[ 617867 ] ImageSubmit null image
-[ 618317 ] Contrib:NumericField missing type param
-[ 618342 ] NPE in AbstractComponent toString
-</pre>
-
-<h3>Release 2.2-beta-3</h3>
-
-Upgrade to Jetty 4.1.0 and OGNL 2.1.4.
-
-<p>
-Mind Bridge has contributed a Table component (really, a complete framework
-for creating sortable tables that present data in page-sized blocks).
-
-<pre>
-[ 608368 ] DataSqueezer / ClassLoader
-[ 608764 ] Work around errant valueUnbound()
-[ 608162 ] ExternalService allows only 1 parameter
-[ 611551 ] DTD validation error with XML Spy
-[ 613441 ] SelectPropertySelectionRenderer HTML
-[ 604194 ] Specify charset by Shell component
-[ 610376 ] Expose Foreach's index as a property
-</pre>
-
-
-<h3>Release 2.2-beta-2</h3>
-
-The <A href="doc/ComponentReference/ValidField.html">ValidField</a> now performs
-client-side validation of input.  If a field is in error when the form
-is submitted, then an alert is displayed and the field is selected.
-
-<p>Begin making more use of OGNL expressions in place of Java code.
-
-<p>Malcom Edgar has contributed a <A href="doc/ComponentReference/DatePicker.html">DatePicker</a>
-component.
-
-<p>Some more refactorings: IComponent methods  addWrapped()/renderWrapped() -&gt; addBody()/renderBody().
-
-<p>Tapestry documentation is now available in PDF format.
-
-<pre>
-[ 602881 ] Add hooks for ValidField client-side
-[ 603023 ] StaleSession.page has error
-[ 603208 ] Support parameter direction "form"
-[ 603269 ] ListEdit improvements
-[ 603362 ] Inconsistency in Tapestry_1_3.dtd
-[ 603132 ] Add a service similar to ExternalService
-[ 582436 ] Script / Required Symbols
-[ 604834 ] InspectorButton disabled param
-[ 604646 ] ImageSubmit ignores disabledImage
-[ 603260 ] make Form "listener" not required
-[ 603826 ] IUploadFile provide Mime Type
-[ 604944 ] Add DateEdit component
-[ 603130 ] Add an initPage() method to AbstractPage
-[ 607074 ] Make IMarkupWriter a bit smarter
-[ 604201 ] Markup Writer should output XHTML
-[ 607451 ] log error when unmatched components
-</pre>
-
-<h3>Release 2.2-beta-1</h3>
-
-<p>Tapestry has now replaced its simple
-property path support with the far 
-more powerful <a href="http://www.ognl.org">Object Graph
-Navigation Library</a> expressions.  This promises to greatly extend
-the expressiveness of the specifications and further reduce
-the need for Java code.  The <code>property-path</code>
-attribute of the <code>&lt;binding&gt;</code> element has been renamed
-to <code>expression</code> (this only affects the latest, 1.3, version
-of the DTD).
-
-<p>There are some small costs to using OGNL; the largest being
-a restriction in bean names, component ids and asset names.  All
-of these must now be valid Java identifiers, and so cannot contain the 
-dash ('-') character, which was previously permitted.  This affects all
-specifications, including older versions.
-
-<p>Malcolm Edgar has lead the push to provide an excellent
-<A href="doc/ComponentReference">Tapestry Component Reference</a>.
-
-<p>
-You can now control the exact location of a component template by 
-declaring an asset named <code>$template</code> (which is not normally
-a legal asset name, due to the dollar sign).  If such an asset exists,
-then it is used as the template.
-
-<p>A number of poorly named components have been renamed:
-<ul>
-<li>Action -&gt; ActionLink
-<li>Direct -&gt; DirectLink
-<li>InsertBlock -&gt; RenderBlock
-<li>InsertWrapped -&gt; RenderBody
-<li>Page -&gt; PageLink
-<li>Service -&gt; ServiceLink
-<li>ShowInspector -&gt; InspectorButton
-<li>Text -&gt; TextArea< /li> 
-</ul>
-
-<p>Previous names will be maintained until at least release 2.3.
-
-<p>
-In addition, the documentation has been brought (largely) up to date
-with the significant changes so far in release 2.2.
-
-<pre>
-[ 582421 ] Way to specify template location
-[ 596929 ] NumericField params require java-type
-[ 597314 ] Problems with URLs
-[ 595985 ] Tapestry behind firewall
-[ 598609 ] NumericField displayWidth inconsistent
-[ 598371 ] Radio and RadioGroup broken
-[ 599608 ] App startup exception
-[ 599663 ] Disallow spec path a comp. type
-[ 601018 ] Use OGNL instead of home brew
-</pre>
-
-
-<h3>Release 2.2-alpha-4</h3>
-
-Update to latest versions of JCommon, JFreeChart and Log4J.  Added the
-&lt;extension&gt; element to the application and library specifications.
-
-<pre>
-[ 584040 ] Add hooks for custom configuration
-[ 579081 ] getApplicationSpecification
-[ 587683 ] Frameset tag for JavaScript
-[ 589818 ] Forward, not redirect, to local resource
-[ 591352 ] &lt;bean&gt; should allow &lt;property&gt;
-[ 592289 ] helper bean: render lifecycle
-[ 591801 ] Exception changing log priority
-</pre>
-
-<h3>Release 2.2-alpha-3</h3>
-
-Tapestry now supports libraries, which can provide components, pages and engine services to
-an application.  Libraries can also include libraries.  The application specification
-has been ammended to include a new &lt;library&gt; element, and a new type of specification,
-the library specification, has been added.
-
-<p>
-Renamed all page specifications from ".jwc" to ".page".
-
-<pre>
-[ 584466 ] Cant set bean prop from localized string
-[ 494453 ] invalid-date-format message string wrong
-[ 584731 ] Text's value parameter required
-[ 579843 ] PageLoader INFO msg wrong
-[ 586171 ] Add namespace/library support
-</pre>
-
-<h3>Release 2.2-alpha-2</h3>
-
-Revamp how services construct and parse URLs.  Rework service parameters to
-be typed objects, instead of simple strings (this is a change which
-may break some existing code).
-
-<p>
-A new version of the DTD may now be used which distinguishes between
-page specifications and component specifications (page specifications
-do not specify several attributes and elements related to 
-component parameters).
-
-<pre>
-[ 581199 ] Slashes in service parameters
-[ 581160 ] Wrong case in WAR file name
-[ 579583 ] Simplify PropertySelection
-[ 581691 ] Object not String for service parameters
-[ 582614 ] ValidField doesn't call getValidator()
-[ 583665 ] ValidatingTextField specification wrong
-[ 583693 ] Extend Block/InsertBlock
-[ 534055 ] Make page-spec and comp-spec distinct
-</pre>
-
-
-<h3>Release 2.2-alpha-1</h3>
-
-Update to Jetty 4.0.4.
-
-<pre>
-[ 576523 ] Better syntax for Script documents
-[ 562964 ] Non-unique app name problems
-[ 578869 ] InsertComponent/DateField, null values
-[ 578921 ] Error in listener map error message
-[ 579131 ] Load order problem with string-binding
-[ 579642 ] Rename Direct context param
-[ 579689 ] Hidden should convert values
-[ 579141 ] IOExceptions related to exception page
-</pre>
-
-
-<h3>Release 2.1-beta-2</h3>
-
-Note the change in Tapestry release naming,
-described in detail in the
-<a href="doc/ContributorsGuide/releases.html">Tapestry Contributor's Guide</a>.
-
-<pre>
-[ 574792 ] localized strings don't work
-[ 573860 ] Shell component hardcodes DTD
-[ 573858 ] No way to remove PageDetachListener
-[ 573753 ] client TCP reset causes SocketException
-[ 573653 ] broken assets
-[ 574181 ] ValidationDelegate should eval form name
-[ 575228 ] Validation messages not localized
-</pre>
-
-<h3>Release 2.0.5</h3>
-
-Updated Tapestry to automatically configure the demo for
-<a href="http://www.jboss.org">JBoss</a> 3.0.0 (this includes
-a switch to the JDK 1.3 compiler, for compatibility with
-the JBoss libraries).
-
-<p>
-Cleaned up the look of the default exception page.
-Reorganized the home page, to link to the new 
-<a target="_top" href="wiki_frame.html">Tapestry Wiki</a>,
-and to move more static content onto SourceForge.
-
-<pre>
-[ 563552 ] IllegalStateException not beeing caught
-[ 559647 ] Switch to JBoss 3.0.0
-[ 566158 ] ValidField NPE if no delegate
-[ 566943 ] Submit problem with tag type
-[ 566000 ] Add field to Spec classed to record DTD
-</pre>
-
-<h3>Release 2.0.4</h3>
-
-Significant improvements to localization support, including support
-for localized properties files for each component, the
-&lt;string-binding&gt; element for accessing localized strings,
-and a new form of markup in the template
-to access localized strings.
-
-<pre>
-[ 556766 ] Improve localization support
-[ 560256 ] Make some property bindings invariant
-[ 560255 ] ListEdit: doesn't render element
-[ 559575 ] Component Frame cannot render
-[ 558165 ] TextField value attribute not required
-[ 560506 ] Cannot disable Checkbox component
-[ 560217 ] Upload problems depending on browser
-[ 550279 ] Define serialVersionUID for classes
-</pre>
-
-<h3>Release 2.0.3</h3>
-
-Renamed Java packages from <code>com.primix.tapestry.*</code>
-to <code>net.sf.tapestry.*</code>, along with some significant other
-reorganizations, especially to the way component parameters are handled.
-
-<p>
-Added an initial <a href="doc/ContributorsGuide/ContributorsGuide.html">Contributor's Guide</a> for Developers
-wishing to contribute code to the Tapestry project.
-
-<pre>
-[ 549479 ] Rename packages to net.sf.tapestry
-[ 550280 ] Remove IDirectListener
-[ 555165 ] Simplify setupLogging()
-[ 553310 ] Set properties from parameter bindings
-[ 552851 ] Add frame component
-[ 549312 ] Delete support for old specifications
-[ 556359 ] Inspector doesn't raise at javanuke
-[ 555167 ] Maintain JDK 1.2.2 compatibility
-</pre>
-
-<h3>Release 2.0.2a</h3>
-
-<pre>
-[ 549482 ] NPE in RequestCycle.observeChange()
-</pre>
-
-<h3>Release 2.0.2</h3>
-
-Changed the inspector icon into an animated GIF for compatiblility with more browsers.
-
-<p>
-Created the new <a href="doc/api/net/sf/tapestry/link/GenericLink.html">GenericLink</a> component, which allows links to arbitrary URLs (including JavaScript event handlers), but
-is still an <a href="doc/api/net/sf/tapestry/components/IServiceLink.html">IServiceLink</a> which means it can wrap 
-<a href="doc/api/net/sf/tapestry/html/Rollover.html">Rollover</a> components.
-
-<pre>
-[ 463649 ] NN6 &amp; ShowInspector
-[ 544394 ] Release notes / deleted methods
-[ 548183 ] Component specification of Option error
-[ 548188 ] Component Option implementation error
-[ 549144 ] tutorial load-on-startup and WL issue
-[ 549142 ] WL issue with default tapestry jar name
-[ 549314 ] Spec parse error
-[ 521456 ] Allow IRequestCycle.discardPage() from listeners
-</pre>
-		
-		
-<h3>Release 2.0.1</h3>
-
-Removed a lot of deprecated code.
-
-<pre>
-[ 536289 ] remove Jetty dependencies
-[ 537398 ] Fix synch/double check bugs
-[ 537426 ] Remove object pooling
-[ 539600 ] java-class should be java-type in docs
-[ 494221 ] Add PDF (or printable) documentation
-</pre>
-
-<h3>Release 2.0.0</h3>	
-
-Added the <a target="_top" href="quotes_frame.html">Quotes</a> page to this website.  Added two new tabs to the
-Workbench, demonstrating redirects and exception reporting.  
-Marked a number of methods (related to object pooling) as deprecated.
-
-<p>Minor formatting changes to the web site and Virtual Library.
-
-<h3>Release 1.0.10</h3>
-
-Changed the build to include debugging symbols with the frameworks.  Fixed a deployment problem with
-the Tutorial.  Added descriptions to most components and parameters.  Modified the Inspector to
-display component and parameter descriptions.
-
-<p>Added a new page to the Workbench Tutorial: Chart.  The Chart page allows a user to dynamically
-create a pie chart.
-
-<p>Made it easier to create subclasses of 
-<a href="doc/api/net/sf/tapestry/AbstractResponseWriter.html">AbstractResponseWriter</a>.
-
-<pre>
-[ 532562 ] Submit.jwc contains error
-[ 532587 ] Submit throws NPE
-[ 532815 ] ValidationDelegate errors
-[ 532758 ] add descriptions to builtin components
-[ 499655 ] HTMLResponseWriter enhancements
-</pre>
-
-<h3>Release 1.0.9</h3>
-
-<p>The framework and contrib jar files are now named with the release number (i.e.,
-<code>com.primix.tapestry-1.0.9.jar</code>).  In addition, 
-the source code for these frameworks, and the examples, is now distributed as 
-Jar files instead of directories of files in the <code>src</code> directory. 
-This makes for easier source lookup when using 
-<a target="_top" href="http://www.eclipse.org">Eclipse</a>, and shrinks the size of the distribution
-as well.
-
-<p>The way engine services are defined and used has been completely overhauled.  
-Services are now defined
-in the application specification and a single
-instance of the service object is instantiated
-and shared by all engine instances (for the application).
-
-<p>Made it easier to override the creation of the specification source, template source, etc. in subclasses
-of 
-<a href="doc/api/net/sf/tapestry/engine/AbstractApplication.html">AbstractApplication</a>.
-
-
-<p>The <a href="doc/api/net/sf/tapestry/form/Submit.html">Submit</a> and 
-<a href="doc/api/net/sf/tapestry/form/ImageSubmit.html">ImageSubmit</a> components may now have 
-their own listener, which is notified before the containing form's listener.
-
-<p>More reworking of validation; the validation delegate can now
-track errors in any kind of form component and can track errors that
-aren't associated with any particular component.
-
-<pre>
-[ #510175 ] add service registration to .application
-[ #511256 ] Enhance Validation Framework
-</pre>
-
-<h3>Release 1.0.8</h3>
-
-<p>A complete overhaul of the validating text field support.  The previous implementation
-used subclasses of AbstractValidatingTextField (which no longer exists) to add new types
-of validation; the new implementation has a single component, 
-<a href="doc/api/net/sf/tapestry/valid/ValidField.html">ValidField</a>, and many implementations
-of <a href="doc/api/net/sf/tapestry/valid/IValidator.html">IValidator</a>.
-
-<p>At long last, the <a href="doc/api/net/sf/tapestry/form/Upload.html">Upload</a> component.
-
-<p>Reimplemented the Virtual Library application using
-<a target="_top" href="http://mckoi.com/database/">McKoi Database</a>, to be compatible with JBoss 2.4.3 (which no
-longer includes InstantDB).
-
-<pre>
-[ #506661 ] private asset configuration
-[ #494456 ] StringValidator minLength message wrong
-[ #488476 ] Generated URLs should contain entities.
-[ #488432 ] Make duplicate page names illegal
-[ #487394 ] NumericField doesn't work with long
-[ #501750 ] StringValidator
-[ #499057 ] BaseValidator summary typo
-[ #487619 ] javadoc link errors
-</pre>
-
-
-<h3>Release 1.0.7</h3>
-				
-<p>Removed Primix copyrights, as I no longer work there or do any work on their time.
-
-<p>Consolidated and cleaned up many of the tutorials into the new Workbench.
-
-<p>Improvements to Inspector's Properties Explorer.  It is now more tolerant of exceptions thrown while
-accessing properties.
-
-<p>Streamlined the distribution by removing the source for documentation.
-
-
-<PRE>
-[ #480433 ] StatementAssembly - access to JBDC 2.0
-[ #469747 ] more flexible application parser
-[ #484184 ] JavaDoc error
-</pre>
-				
-				<h3>Release 1.0.6</h3>
-				
-				<p>Tapestry now uses <a target="_top" href="http://jakarta.apache.org/ant">Ant</a>
-				as its build tool.  The GNU Makefile Java Build Environment has
-				been removed.
-				
-				<p>The Tapestry Inspector now has a powerful Properties Explorer which allows
-				for dynamic navigation and display of an object's properties (similar
-				to what a debugger provides).
-				
-				<p>Localization of context assets was broken in Tomcat; it now works
-				in both Tomcat and Jetty.
-				
-				<h3>Release 1.0.5</h3>
-				
-				<p>Added a mechanism to clear out pooled objects when they haven't been used
-				for some time.  The interface <a href="doc/api/net/sf/tapestry/util/ICleanable.html">ICleanable</a>
-				has the details.
-				
-				<p>Made a number of other efficiency improvements.  Particularily, the page loader now weeds
-				out informal parameters that can't be used (because they conflict with formal parameter names,
-				or because the component owns the attributes), preventing them from being added as component
-				bindings.  The old method was to weed out the unwanted parameters on every
-				render, which was more expensive.
-				
-				<p>Improved the <a href="doc/api/net/sf/tapestry/valid/NumericField.html">NumericField</a>
-				component to deal with null values in an intelligent manner.
-				
-				<p>It is now possible to set properties of
-				<a href="doc/DevelopersGuide/components.helper-beans.html">helper beans</a>.
-				
-				<p>The full distribution now bundles 
-				<a target="_top" href="http://jetty.mortbay.com">Jetty 3.1RC9</a>
-				and the Virtual Library is now compatible with
-				<a target="_top" href="http://www.jboss.org">JBoss 2.4.0</a>.
-				
-                <h3>Release 1.0.4</h3>
-                
-                <p>Release 1.0.4 debuted the finished Tapestry Home and Virtual Library.
-                
-                <br>
-			<!-- END Content -->
-		</td>
-	</tr>
-</table>
-<!-- ****END BODY WRAPPER**** -->
-
-<p>
-<a href="http://jakarta.apache.org"><img src="images/jakarta-banner.png" border="0" alt="Jakarta Banner"></a>
-<br>&copy; @COPY_YEARS@ Apache Software Foundation.	All rights reserved.
-
-</body>
-</html>
diff --git a/3.0.4/web/new.html b/3.0.4/web/new.html
deleted file mode 100644
index a2e8b0f..0000000
--- a/3.0.4/web/new.html
+++ /dev/null
@@ -1,445 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-
-<!--
-	
-	*******************************************************************
-	
-	This file is no longer used! Information within the file is being
-	transferred to ${root.dir}/status.xml!
-	
-	*******************************************************************
--->	
-
-
-<!-- $Id$ -->
-<html>
-<head>
-	<title>Tapestry: What's New</title>
-<link rel="STYLESHEET" type="text/css" href="scripts/style_virtlib_pcIE55.css">
-</head>
-
-<body leftmargin="0" topmargin="0" marginwidth="0" marginheight="0">
-<table width="100%" border="0" cellspacing="0" cellpadding="2">
-	<tr>
-		<td valign="top" align="left"><IMG alt="[Tapestry Banner]" src="images/Tapestry-Banner.png" border="0">
-
-<h3>Release 3.0-beta-4</h3>
-
-<ul>
-<li>Updated javadoc build target to link to JDK 1.3 (patch by Michael M. Brzycki)</li>
-<li>Added new validator, Pattern Validator [harishkswamy]</li>
-<li>Fixed the null pointer exception from FieldLabel when not enclosed by Form
-	or when IValidationDelegate is not provided [harishkswamy]</li>
-<li>The key attribute of the script foreach is changed to not be a required
-    attribute [harishkswamy]</li>
-<li>Added support for OGNL TypeConverter in expression bindings [ehatcher]</li>
-<li>Updated Component Reference for WML components [dsolis]</li>
-<li>Made DateValidator's getEffectiveFormat()/getEffectiveDisplayFormat() public [rlewisshell]</li>
-<li>Updated to use DocBook 1.62.4 XSL stylesheets for documentation generation [rlewisshell]</li>
-<li>Moved info priority logging to debug priority [rlewisshell]</li>
-<li>Custom parameter binding properties only enhanced if abstract [rlewisshell]</li>
-</ul>
-
-<pre>
-[ 21833 ] build.properties.sample does not include jython.dir
-[ 22840 ] Table component doesn't sort fine when there are null values
-[ 22640 ] Wrong Package in link
-[ 22641 ] JavaDoc: should IField be IFieldTracking??
-[ 23668 ] contrib:PopupLink ignores informal parameters
-[ 22635 ] Wrong Package in link
-[ 22634 ] Typo: "In a IListenerBindingSpecification"
-[ 22694 ] Add url parameter to Shell component
-[ 23870 ] current OGNL 2.6.3 needs to be used
-[ 23511 ] Problem with URL encodings at EngineServiceLink.java
-[ 23227 ] The source parameter of Foreach should be required
-[ 20252 ] tests failing under JDK 1.3
-[ 23500 ] Name attribute gets duplicated in TextField
-[ 22835 ] DateField component throws an ApplicationRuntimeException
-[ 22836 ] NumericField component throws an ApplicationRuntimeException
-[ 22837 ] Using NumericField cause a ClassCastException
-[ 24467 ] Compatibility of the AbstractEngine to servlet-api 2.2
-[ 24298 ] patch to allow workbench to work with JDK 1.4.2 and current Jetty
-[ 24425 ] race condition in class enhancement
-[ 23916 ] The Dates tab in the Workbench contains an empty popup link
-[ 24008 ] ApplicationRuntime Exception loses root cause...
-[ 22958 ] NumberValidator forces to input a value
-[ 21871 ] junit.jar needed to build junit subproject
-[ 20253 ] JUnit XML tests broken under JDK with no XML parser (eg. 1.3)
-[ 24393 ] No JVM requirements mentioned in docs
-[ 24874 ] [PATCH]ValidationStrings_zh_TW.properties
-[ 25117 ] PageService.getLink throws ClassCastException if parameters arg is Object[]
-[ 25462 ] NumericField does not pass on its type parameter
-[ 25585 ] ValidationDelegate throws NPE for some new FieldLabel/ValidField
-[ 25642 ] properties cannot be of complex array types
-[ 25766 ] fixed broken links in doc\src\common\TapestryLinks.xml
-</pre>
-
-<h3>Release 3.0-beta-3</h3>
-
-<ul>
-<li>Update dependency to Jakarta Digester 1.5. [hlship]</li>
-<li>Add some new FAQs. [hlship]</li>
-<li>Removed the errant selected parameter from Button (a bad cut-and-paste from Submit), and fix the Button
-	component reference page. [hlship]</li>
-<li>Deprecated the <code>fireObservedChange()</code> methods on AbstractComponent and implemented
-	them as static methods on <code>Tapestry</code>. [hlship]</li>
-<li>Allow informal parameters with Insert [hlship]</li>
-</ul>
-
-<pre>
-[ 21729 ] Vlib doesn't deploy into JBoss
-[ 20616 ] Palette component appears to be broken in 3.0b1a
-[ 21870 ] tapestry lib dir includes both 1.4 and 1.5 versions of digester
-[ 22638 ] ListenerBindingSpecification: Grammar Typo
-</pre>
-
-<h3>Release 3.0-beta-2</h3>
-
-<ul>
-<li>Package the workbench.war standalone (such that it includes all necessary libraries).</li>
-<li>Fix a case where the taglib would generate the wrong URL (under Tomcat).</li>
-<li>Changed the underlying library for bytecode enhancement to Javassist</li>
-<li>The 'default-value' attribute has been added to the definition of component parameters.
-It specifies the value of the parameter if it is not bound.</li>
-<li>The 'auto' parameters no longer need to be required if they have a default-value defined.</li>
-<li>The HTML tag with which a component is inserted in a template is now accessible via the
-'templateTag' parameter. This parameter is automatically added to each component and has a
-default value of null.</li>
-<li>The <a href="doc/ComponentReference/Any.html">Any</a> component now renders itself
-with the tag with which it was inserted if 'element' is undefined.</li>
-<li>The character encoding used for a component template can now be defined using the
-property 'org.apache.tapestry.template-encoding'. The property is localizable, so you can define
-'org.apache.tapestry.template-encoding_ru' to specify the encoding for all Russian templates, for example.</li>
-<li>The character encoding used to generate the response can now be specified
-using the property 'org.apache.tapestry.output-encoding'. It is UTF-8 by default.</li>
-<li>The <a href="doc/ComponentReference/Shell.html">Shell</a> component now defines an http-equiv tag with the content type of the response.</li>
-<li>Update code for compatibility with Jakarta FileUpload 1.0; add easy ability to write uploaded content to a file.</li>
-<li>Harish Krishnaswamy has submitted a patch allowing an index attribute on the &lt;foreach&gt; element
-	  in script specifications.</li>
-<li>Moved packaged examples from <code>lib</code> to <code>lib/examples</code></li>
-</ul>
-
-<pre>
-[ 18379 ] IMonitor Enhancement
-[ 18382 ] isRewinding not set properly during events
-[ 20954 ] Missing component InsertRenderer in Contrib
-[ 21002 ] CodeGenerationException uses JDK 1.4 API
-[ 21073 ] "isXXXXX" getter for boolean properties in components missing
-[ 21145 ] array properties and parameters do not work
-[ 20545 ] Invalid encoding name "Cp1252"
-[ 20281 ] Exception page fails to display
-[ 20598 ] Using @Conditional within a tag
-[ 20917 ] Typo in ComponentReference documentation
-[ 20595 ] wml:Input does not render its title parameter
-[ 21332 ] index attribute for the script foreach element
-[ 19510 ] createDb.sql in VLIB example typo
-</pre>
-
-<h4>Non-backwards compatible changes:</h4>
-
-<ul>
-<li>Removed the <code>tag</code> attribute from the Script Specification <code>&lt;unique&gt;</code>
-element [hlship]
-</li>
-</ul>
-
-<h3>Release 3.0-beta-1a</h3>
-
-<pre>
-[ 20430 ] ComponentMessages and its test do not compile under JDK 1.3
-</pre>
-
-<h3>Release 3.0-beta-1</h3>
-
-<ul>
-<li>Major refurbishment of the Virtual Library example to use all the latest and greatest Tapestry facilities.</li>
-<li>Removed the "rows" and "columns" parameters from TextArea; use informal parameters "rows" and "cols" instead.</li>
-<li>Removed unused/unneeded exceptions <code>RollbackException</code> and <code>PageRecorderSerializationException</code>.</li>
-<li>The default for the <a href="doc/ComponentReference/Hidden.html">Hidden</a> component is now to encode its parameter.</li>
-<li>Ugraded to OGNL 2.5.1.</li>
-<li><a href="doc/ComponentReference/Shell.html">Shell</a> component now allows multiple stylesheets.</li>
-<li>Added a <a href="doc/api/org/apache/tapestry/util/io/DataSqueezer.html">DataSqueezer</a> adaptor for
-<code>Enum</code> types.</li>
-<li>Switched over to using JBoss 3.0.6 for demos.</li>
-<li>Renamed method <code>generateAttributes()</code> to <code>renderInformalParameters()</code> in
-<a href="doc/api/org/apache/tapestry/AbstractComponent.html">AbstractComponent</a>.</li>
-<li>Added support for the informal parameters of a component to be passed down to a contained component
-using the inherit-informal-parameters attribute. </li>
-<li>Added <a href="doc/api/org/apache/tapestry/IRequestCycle.html">IRequestCycle</a>.activate() as a replacement for setPage().
-Besides setting the page to be rendered, it also invokes page.validate() and handles the page redirections.</li>
-<li>Added addValidateListener() and removeValidateListener()
-to <a href="doc/api/org/apache/tapestry/IPage.html">IPage</a>.</li>
-<li><a href="doc/api/org/apache/tapestry/util/io/DataSqueezer.html">DataSqueezer</a>: Squeezed strings are now always prefixed with 'S'</li>
-<li>Added mechanism for checking that super-class implementations of key methods are invoked.</li>
-<li>Added checks that <a href="doc/api/org/apache/tapestry/IPage.html">IPage</a> methods
-<code>validate()</code> and <code>detach</code> are properly overriden by subclasses.</li>
-<li>Changed Form, Hidden and ListEdit so that all hidden fields are written out with the &lt;form&gt; tag.</li>
-<li>Added new features to the script specification, bumping its DTD to 1.3. It is now possible
-to generate page-unique ids from within the script (using the new <code>unique</code> attribute
-on <code>&lt;let&gt;</code>, as well as to
-render a block only once per page render (using <code>&lt;unique&gt;</code>)
-</li>
-<li>Integrated Per Norrman's vastly improved <a href="doc/ComponentReference/DatePicker.html">DatePicker</a> component</li>
-<li>Changed the <code>service()</code> method on <a href="doc/api/org/apache/tapestry/engine/IEngineService.html">IEngineService</a> to return void, not boolean.</li>
-<li>Changes the <a href="doc/ComponentReference/Body.html">Body</a> component to render &lt;script&gt; tags just inside the &lt;body&gt; tag, not just before it.</li>
-<li>Added <a href="doc/ComponentReference/LinkSubmit.html">LinkSubmit</a> component to the framework</li>
-<li>Added <a href="doc/api/org/apache/tapestry/RedirectFilter.html">RedirectFilter</a>, a 2.3 Servlet API filter used to redirect
-a "naked" URL for a servlet context to the Tapestry application servlet.</li>
-<li>Adjusted the deployment for the Virtual Library application to be http://localhost/ (not http://localhost/vlib/app).</li>
-<li>Fixed a number of problems identified by <a href="http://www.cs.umd.edu/~pugh/java/bugs">FindBugs</a>
-and <a href="http://pmd.sf.net">PMD</a> tools.</li>
-<li>Changed version numbers of latest specification DTDs to match the Tapestry release (3.0).</li>
-<li>Update to use <a href="http://mckoi.com/database/">>McKoi DB 1.00</a> for the Virtual Library.</li>
-</ul>
-
-<pre>
-[ 18340 ] ApplicationRuntimeException doesn't compile on jdk 1.3.
-[ 18336 ] Tapestry 2.4a5 - LOGGING images missing for Inspector component
-[ 18490 ] compile warning for Workbench
-[ 18013 ] typo in EvenOdd javadoc
-[ 18607 ] Check for unimplemented abstract methods
-[ 17904 ] Ongoing LGPL Issues
-[ 19153 ] Easier way to override validation messages
-[ 19263 ] Change error message for null parameter
-[ 18880 ] DatePicker broken under Mozilla
-[ 19340 ] exception does not give class information
-[ 19490 ] Body Component renders invalid markup
-[ 19700 ] TapestryStrings.properties typo
-[ 19782 ] DateValidator displayFormat default should use format pattern
-[ 19463 ] Race condition inside PageSource
-[ 20113 ] Build should not require JBoss or Jetty
-[ 20180 ] XML parse errors should fail, but are ignored
-[ 20251 ] Error in LinkSubmit specification
-</pre>
-
-<h3>Release 2.4-alpha-5</h3>
-
-<ul>
-<li>Added some simple optimizations to keep the engine instance from being stored
-into the session unecessarily often.</li>
-<li>Fix NPE when image parameter of Image component is bound but value is null.</li>
-<li>Create a basic JSP tag library to allow JSPs to access Tapestry pages using the page and external services.</li>
-<li>Added support for primitive arrays, java.lang.Object[] and java.lang.String[]
-for connected parameters.</li>
-<li>Added connected parameter support for missing primitive types byte and char</li>
-<li>Added support for primitive arrays, java.lang.Object[], and java.lang.String[] for declared properties.</li>
-<li>Replaced JFreeChart with JCharts, due to licensing considerations.</li>
-<li>Refactored to use Jakarta Digester to parse specifications.</li>
-<li>Changed specification and template parsers to track locations of specification objects and attach them
-to runtime objects and exceptions for error reporting purposes.</li>
-<li>Severely refactored exceptions, removing many exception classes and flattening all others
- under ApplicationRuntimeException.</li>
-<li>Simplified the URL format, merging the "service" and "context" parameters together.</li>
-<li>Removed the "displayWidth" and "maxLength" parameters from TextField and ValidField
-(HTML attributes "size" and "maxlength", as informal parameters, are sufficient).</li>\
-<li>Added two new application extensions to allow page and component specifications and templates
-to be provided in non-standard ways (when not found using the default rules).</li>
-<li>Changed file upload to work using Jakarta Commons FileUpload (patch provided by Joe Panico).</li>
-<li>Added new parameter direction: <code>auto</code>, which creates a synthetic property backed by
- the binding.</li>
-</ul>
-
-<pre>
-[ 18249 ] file upload using Commons FileUpload
-[ 17905 ] Link to mailing list and archives is wrong.
-</pre>
-
-<h3>Release 2.4-alpha-4</h3>
-
-<ul>
-<li><b>All packages have been renamed from <code>net.sf.tapestry</code> to <code>org.apache.tapestry</code></b>.</li>
-<li>Several non-ASL libraries (including Jetty) have been removed from both CVS and the distribution.  To
-build Tapestry and run the demos is now more involved; it requires obtaining several external dependencies.
-The Tapestry distribution is much smaller, however.  This was done for licensing reasons.
-Sorry.</li>
-<li>Expression bindings in HTML templates are now in the format
-<code><i>attribute</i>="ognl:<i>expression</i>"</code>.</li>
-<li>String bindings (to localized strings) in HTML templates are now in the format
-<code><i>attribute</i>="string:<i>key</i>"</code>.</li>
-<li>Allow &lt;set-property&gt; element of specification to specify the expression as an attribute or
-as wrapped character data.</li>
-<li>The interfaces for <a href="doc/api/org/apache/tapestry/valid/IValidationDelegate.html">IValidationDelegate</a>,
- <a href="doc/api/org/apache/tapestry/valid/IValidator.html">IValidator</a> and
-  <a href="doc/api/org/apache/tapestry/valid/ValidatorException.html">ValidatorException</a>
-changed incompatibly.  This will only be an issue if you have created custom validation delegates or custom
-validators.</li>
-<li>Added methods to <a href="doc/api/org/apache/tapestry/valid/IComponentStrings.html">IComponentStrings</a> for formatting localized strings
-with arguments.</li>
-<li>Remove ejb.jar and any direct dependencies on javax.ejb classes (application servers are responsible for properly replicating
-EJBObject and EJBHome instances).</li>
-<li>Added a <code>createRequestCycle()</code> method to
-<a href="doc/api/org/apache/tapestry/engine/AbstractEngine.html">AbstractEngine</a>.</li>
-<li>Moved the invocation of the
-<a href="doc/api/org/apache/tapestry/IMonitor.html">IMonitor</a> method  <code>serviceEnd()</code>
-to always occur after the invocation of <code>serviceException()</code>.</li>
-<li>The <a href="doc/ComponentReference/Upload.html">Upload</a> component now works with the enclosing Form
-to automatically set the encoding type to <code>multipart/form-data</code>.  It is no longer necessary to set
-the <code>enctype</code> attribute of the Form.</li>
-<li>Removed the code related to making copies of persistent properties.</li>
-<li>Removed non-ASL libraries from CVS.  These files will need to be downloaded separately.</li>
-<li>Removed some of the old tutorials, leaving just the Workbench and Virtual Library as examples.</li>
-<li>Removed the "Demo" pages from the web site, until we find a stable home.</li>
-</ul>
-
-<h3>Release 2.4-alpha-3</h3>
-
-<ul>
-<li>
-Reorganized the packaging into a binary distribution (which includes documentation) and a second,
-smaller, source-only distribution.</li>
-<li>Renamed the JARs, stripping off the "net.sf." prefix.</li>
-<li>Updated all examples to use the 1.4 Specification DTD.</li>
-<li>Refactored (severely) the relationship between services and link components, splitting
- the rendering portion of links into a separate interface.</li>
-<li>Upgrade to McKoi database 0.94h.</li>
-<li>Tapestry will now create properties for connected parameters, if the properties
- do not already exist (or are abstract).</li>
-<li>Renamed the <code>java-type</code> attribute of the <code>&lt;parameter&gt;</code> element (in component
- specifications) to <code>type</code> (for the 1.4 DTD).</li>
-<li>Allowed more elements to specify values as character data inside the element as an alternative
-to using a particular attribute (useful for complex OGNL expressions).
-<li>Continued extending the JUnit test suite.
-<li>Deprecated the <code>PageCleanupListener</code> interface and removed support for it.
-</ul>
-
-<pre>
-[ 665622 ] net.sf.tapestry.html.Frame uses old DOCTYPE
-[ 675882 ] option component generates invalid HTML
-[ 622691 ] Full release
-[ 679655 ] Upload component very slow on file uploads
-</pre>
-
-<h3>Release 2.4-alpha-2</h3>
-
-<ul>
-<li>Made improvements to how Tapestry handles arrays of objects and scalars</li>
-<LI>Upgrade demos to deploy into JBoss 3.0.4</LI>
-<li>Merge in changes from Tapestry 2.3</li>
-<li><code>&lt;binding&gt;</code> elements may now specify the expression as the parsed data
-instead of the expression attribute</li>
-<li>The template extension may now be overriden using the configuration property <code>net.sf.tapestry.template-extension</code>
-<li>Added support for declarative transient and persistent properties via
-<code>&lt;property-specification&gt;</code> element in page and component specifications.  Tapestry
-will create (on the fly) a subclass with
-the necessary accessor methods and fields, as well as any necessary notification and
-cleanup methods. </li>
-</ul>
-
-<pre>
-[ 594878 ] Deploy Tapestry into JBoss 3.0.4
-[ 672743 ] Pages Implementing Listeners cause NPE
-</pre>
-
-<h3>Release 2.4-alpha-1</h3>
-
-<ul>
-<li>
-Added support for specifying expressions in the component template.  Expressions
-are specified as attributes with the format "<code>[[ <i>expression</i> ]]</code>".
-The brackets and leading and trailing whitespace are removed.
-Expressions specified this way are the equivalent of the
-<code>&lt;binding&gt;</code>
-        element in a specification.
-
-
-<li>
-Tapestry now supports <i>implicit components</i>.  Implicit components are
-declared exclusively in the containing component's template (instead of in
-the containing component's specification) using a special
-<code>jwcid</code> syntax:
-<code>@<i>type</i></code> (for anonymous components) or
-<code><i>id</i>@<i>type</i></code> (for named components). Implicit
-        components are especially useful for components that take no parameters,
-        but may also make use of template expressions.
-
-
-<li>
-Added support for the
-<code>&lt;listener-binding&gt;</code> element in page and component
-specifications.  This allows a listener method to be provided, directly within the
-specification, as a script written in a <a href="http://jakarta.apache.org/bsf">BSF</a>-supported language.
-
-
-<li>
-A number of non-backwards compatible changes were made to several
-framework interfaces to support more flexibility on where specifications
-and templates may be located, but these should not affect the overwhelming
-majority of Tapestry users.  In addition, private assets and context assets
-may also be relative.
-
-<br>
-Private assets are relative to the component
-        specification which declares them, context assets are relative to the
-        application servlet (within the servlet context).
-
-
-<li>
-Moved the Inspector out of the framework and
-        into the contrib library.
-
-
-<li>
-Created smarter checks for stale sessions for
-        ActionLink, DirectLink and Form. The action and direct services used by
-        the components now encode whether the application was stateful into the
-        URL. The stateful check only occurs if the application was stateful when
-        the URL was rendered.
-
-
-<li>
-Changed Form to record the exact ids generated during the render (it used to just store the count).
-This allows a more useful exception message to be generated
-for the
-<A href="doc/api/org/apache/tapestry/StaleLinkException.html">StaleLinkException</a>.
-
-
-
-<li>
-Changed the default StaleLink page to have a
-        message property, and to display the message from the
-        StaleLinkException.
-
-
-<li>
-Components (and even pages) can now implement page listener interfaces
-(<A href="doc/api/org/apache/tapestry/event/PageDetachListener.html">PageDetachListener</a>,
-<A href="doc/api/org/apache/tapestry/event/PageRenderListener.html">PageRenderListener</a> or
-<A href="doc/api/org/apache/tapestry/event/PageCleanupListener.html">PageCleanupListener</a>)
-and <code>finishLoad()</code> will <i>automatically</i> add them as a listener to the
-        corresponding page events.
-
-
-<li>
-The entire mechanism used to store persistant
-        page properties has been revised.
-
-
-<li>
-Implemented a number of improvements to
-<A href="doc/api/org/apache/tapestry/util/pool/Pool.html">Pool</a>
-to support greater flexibility in managing objects stored into and discarded
-from the pool.
-</li>
-
-</ul>
-
-<pre>
-[ 653358 ] IPage.getName() == qualified name
-[ 608768 ] Changes saved AFTER IPage.detach()
-</pre>
-
-
-
-
-<h3><A href="more_new.html">More ...</a></h3><!-- END Content -->
-		</td>
-	</tr>
-</table><!-- ****END BODY WRAPPER**** -->
-
-<p>
-<a href="http:/jakarta.apache.org"><img src="images/jakarta-banner.png" border="0" alt="Jakarta Banner"></a>
-<br>&copy; @COPY_YEARS@ Apache Software Foundation.	All rights reserved.
-
-
-</body>
-</html>
diff --git a/3.0.4/web/scripts/PracticalBrowserSniffer.js b/3.0.4/web/scripts/PracticalBrowserSniffer.js
deleted file mode 100644
index e1a89e0..0000000
--- a/3.0.4/web/scripts/PracticalBrowserSniffer.js
+++ /dev/null
@@ -1,160 +0,0 @@
-// PracticalBrowserSniffer.js - Detect Browser
-// Requires JavaScript 1.1
-/*
-The contents of this file are subject to the Netscape Public
-License Version 1.1 (the "License"); you may not use this file
-except in compliance with the License. You may obtain a copy of
-the License at http://www.mozilla.org/NPL/
-
-Software distributed under the License is distributed on an "AS
-IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
-implied. See the License for the specific language governing
-rights and limitations under the License.
-
-The Initial Developer of the Original Code is Bob Clary.
-
-Contributor(s): Bob Clary, Original Work, Copyright 1999-2000
-                Bob Clary, Netscape Communications, Copyright 2001
-
-
-Note:
-
-Acquired from: http://developer.netscape.com/evangelism/tools/practical-browser-sniffing/
-Last update: July 17, 2001
-
-*/
-
-// work around bug in xpcdom Mozilla 0.9.1
-window.saveNavigator = window.navigator;
-
-// Handy functions
-function noop() {}
-function noerror() { return true; }
-
-function defaultOnError(msg, url, line)
-{
-	// customize this for your site
-	if (top.location.href.indexOf('_files/errors/') == -1)
-		top.location = '/evangelism/xbProjects/_files/errors/index.html?msg=' + escape(msg) + '&url=' + escape(url) + '&line=' + escape(line);
-}
-
-// Display Error page... 
-// XXX: more work to be done here
-//
-function reportError(message)
-{
-	// customize this for your site
-	if (top.location.href.indexOf('_files/errors/') == -1)
-		top.location = '/evangelism/xbProjects/_files/errors/index.html?msg=' + escape(message);
-}
-
-function pageRequires(cond, msg, redirectTo)
-{
-	if (!cond)
-	{
-		msg = 'This page requires ' + msg;
-		top.location = redirectTo + '?msg=' + escape(msg);
-	}
-	// return cond so can use in <A> onclick handlers to exclude browsers
-	// from pages they do not support.
-	return cond;
-}
-
-function detectBrowser()
-{
-	var oldOnError = window.onerror;
-	var element = null;
-	
-	window.onerror = defaultOnError;
-
-	navigator.OS		= '';
-	navigator.version	= 0;
-	navigator.org		= '';
-	navigator.family	= '';
-
-	var platform;
-	if (typeof(window.navigator.platform) != 'undefined')
-	{
-		platform = window.navigator.platform.toLowerCase();
-		if (platform.indexOf('win') != -1)
-			navigator.OS = 'win';
-		else if (platform.indexOf('mac') != -1)
-			navigator.OS = 'mac';
-		else if (platform.indexOf('unix') != -1 || platform.indexOf('linux') != -1 || platform.indexOf('sun') != -1)
-			navigator.OS = 'nix';
-	}
-
-	var i = 0;
-	var ua = window.navigator.userAgent.toLowerCase();
-	
-	if (ua.indexOf('opera') != -1)
-	{
-		i = ua.indexOf('opera');
-		navigator.family	= 'opera';
-		navigator.org		= 'opera';
-		navigator.version	= parseFloat('0' + ua.substr(i+6), 10);
-	}
-	else if ((i = ua.indexOf('msie')) != -1)
-	{
-		navigator.org		= 'microsoft';
-		navigator.version	= parseFloat('0' + ua.substr(i+5), 10);
-		
-		if (navigator.version < 4)
-			navigator.family = 'ie3';
-		else
-			navigator.family = 'ie4'
-	}
-	else if (typeof(window.controllers) != 'undefined' && typeof(window.locationbar) != 'undefined')
-	{
-		i = ua.lastIndexOf('/')
-		navigator.version = parseFloat('0' + ua.substr(i+1), 10);
-		navigator.family = 'gecko';
-
-		if (ua.indexOf('netscape') != -1)
-			navigator.org = 'netscape';
-		else if (ua.indexOf('compuserve') != -1)
-			navigator.org = 'compuserve';
-		else
-			navigator.org = 'mozilla';
-	}
-	else if ((ua.indexOf('mozilla') !=-1) && (ua.indexOf('spoofer')==-1) && (ua.indexOf('compatible') == -1) && (ua.indexOf('opera')==-1)&& (ua.indexOf('webtv')==-1) && (ua.indexOf('hotjava')==-1))
-	{
-	    var is_major = parseFloat(navigator.appVersion);
-    
-		if (is_major < 4)
-			navigator.version = is_major;
-		else
-		{
-			i = ua.lastIndexOf('/')
-			navigator.version = parseFloat('0' + ua.substr(i+1), 10);
-		}
-		navigator.org = 'netscape';
-		navigator.family = 'nn' + parseInt(navigator.appVersion);
-	}
-	else if ((i = ua.indexOf('aol')) != -1 )
-	{
-		// aol
-		navigator.family	= 'aol';
-		navigator.org		= 'aol';
-		navigator.version	= parseFloat('0' + ua.substr(i+4), 10);
-	}
-
-	navigator.DOMCORE1	= (typeof(document.getElementsByTagName) != 'undefined' && typeof(document.createElement) != 'undefined');
-	navigator.DOMCORE2	= (navigator.DOMCORE1 && typeof(document.getElementById) != 'undefined' && typeof(document.createElementNS) != 'undefined');
-	navigator.DOMHTML	= (navigator.DOMCORE1 && typeof(document.getElementById) != 'undefined');
-	navigator.DOMCSS1	= ( (navigator.family == 'gecko') || (navigator.family == 'ie4') );
-
-	navigator.DOMCSS2   = false;
-	if (navigator.DOMCORE1)
-	{
-		element = document.createElement('p');
-		navigator.DOMCSS2 = (typeof(element.style) == 'object');
-	}
-
-	navigator.DOMEVENTS	= (typeof(document.createEvent) != 'undefined');
-
-	window.onerror = oldOnError;
-}
-
-detectBrowser();
-
diff --git a/3.0.4/web/scripts/style_virtlib_pcIE55.css b/3.0.4/web/scripts/style_virtlib_pcIE55.css
deleted file mode 100644
index 7a9f21f..0000000
--- a/3.0.4/web/scripts/style_virtlib_pcIE55.css
+++ /dev/null
@@ -1,81 +0,0 @@
-CODE  {
-	font-size : 12;
-}
-
-/* Top Nav*/
-A.clsTopNav  {
-	font-weight : bold;
-	text-decoration : none;
-}
-
-A.clsTopNav:hover  {
-	text-decoration : underline;
-}
-
-SPAN.clsTopNavOn  {
-	font-weight : bold;
-	color : #e88700;
-}
-
-A.clsTopNavOn  {
-	font-weight : bold;
-	color : #e88700;
-	text-decoration : none;
-}
-
-A.clsTopNavOn:hover  {
-	text-decoration : underline;
-}
-
-/* Forms*/
-form  {
-	display : block;
-	margin-top : 1px;
-	margin-bottom : 1px;
-}
-
-PRE  {
-	font-size : 12px;
-}
-
-
-SPAN.hyper-em
-{
-	font-style: italic;
-	font-weight: bold;
-	color: red;
-}
-
-SPAN.note
-{
-	font-style: italic;
-}
-
-DIV.right-side-quote  {
-	text-align : left;
-	float : right;
-	width : 350px;
-	padding-right : 8px;
-	padding-left : 4px;
-	font-size : large;
-	font-weight : bold;
-}
-
-DIV.callout
-{
-	text-align : center;
-	float : right;
-	width : 200px;
-	padding-right : 8px;
-	padding-left : 4px;
-	font-weight : bold;
-}
-
-SPAN.release  {
-	font-weight : bold;
-}
-
-BODY  {
-	font-family : Trebuchet MS, arial, sans-serif;
-}
-